diff --git a/.drone.yml b/.drone.yml index ef898228c9a..8e7f15a17d6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -10,6 +10,7 @@ build: - SUBTARGET=tiny - MINGW32=/c/msys32/mingw32 - MAME_EXE=mametiny.exe + - IGNORE_GIT=1 # - SOURCES=src/mame/drivers/pacman.cpp commands: # - pacman -S -q --noprogressbar --noconfirm winpty diff --git a/.travis.yml b/.travis.yml index a582da5666d..9ca2e07d7be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,8 +23,8 @@ env: script: - if [ $TRAVIS_OS_NAME == 'linux' ]; then if [ $CC == 'clang' ]; then - make -j2 OVERRIDE_CXX="clang++-3.6" OVERRIDE_CC="clang-3.6" && ./$MAME -validate; - else make -j4 OPTIMIZE=0 OVERRIDE_CC="gcc-5" OVERRIDE_CXX="g++-5" && ./$MAME -validate; + make -j2 IGNORE_GIT=1 OVERRIDE_CXX="clang++-3.6" OVERRIDE_CC="clang-3.6" && ./$MAME -validate; + else make -j4 IGNORE_GIT=1 OPTIMIZE=0 OVERRIDE_CC="gcc-5" OVERRIDE_CXX="g++-5" && ./$MAME -validate; fi elif [ $TRAVIS_OS_NAME == 'osx' ]; then unset LDOPTS && make -j2 OPTIMIZE=0 USE_LIBSDL=1 && ./$MAME -validate; @@ -43,4 +43,4 @@ branches: - master notifications: email: false - \ No newline at end of file + diff --git a/3rdparty/bgfx/3rdparty/.editorconfig b/3rdparty/bgfx/3rdparty/.editorconfig index 214695015af..25d102976df 100644 --- a/3rdparty/bgfx/3rdparty/.editorconfig +++ b/3rdparty/bgfx/3rdparty/.editorconfig @@ -20,6 +20,10 @@ indent_size = 4 indent_style = space indent_size = 4 +[ocornut-imgui/*.inl] +indent_style = space +indent_size = 4 + [pvrtc/*] indent_style = space indent_size = 4 diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h deleted file mode 100644 index edff2b9eee8..00000000000 --- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_lunarg_debug_marker.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// File: vk_lunarg_debug_marker.h -// -/* - * Copyright (c) 2015-2016 The Khronos Group Inc. - * Copyright (c) 2015-2016 Valve Corporation - * Copyright (c) 2015-2016 LunarG, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and/or associated documentation files (the "Materials"), to - * deal in the Materials without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Materials, and to permit persons to whom the Materials are - * furnished to do so, subject to the following conditions: - * - * The above copyright notice(s) and this permission notice shall be included in - * all copies or substantial portions of the Materials. - * - * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE - * USE OR OTHER DEALINGS IN THE MATERIALS. - * - * Authors: - * Jon Ashburn - * Courtney Goeltzenleuchter - */ - -#ifndef __VK_DEBUG_MARKER_H__ -#define __VK_DEBUG_MARKER_H__ - -#include "vulkan.h" - -#define VK_DEBUG_MARKER_EXTENSION_NUMBER 6 -#define VK_DEBUG_MARKER_EXTENSION_REVISION 1 -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -/* -*************************************************************************************************** -* DebugMarker Vulkan Extension API -*************************************************************************************************** -*/ - -#define DEBUG_MARKER_EXTENSION_NAME "VK_LUNARG_DEBUG_MARKER" - -// ------------------------------------------------------------------------------------------------ -// Enumerations - -#define VK_DEBUG_MARKER_ENUM_EXTEND(type, id) \ - ((type)(VK_DEBUG_MARKER_EXTENSION_NUMBER * -1000 + (id))) - -#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_TAG \ - VK_DEBUG_MARKER_ENUM_EXTEND(VkDbgObjectInfoType, 0) -#define VK_OBJECT_INFO_TYPE_DBG_OBJECT_NAME \ - VK_DEBUG_MARKER_ENUM_EXTEND(VkDbgObjectInfoType, 1) - -// ------------------------------------------------------------------------------------------------ -// API functions - -typedef void(VKAPI_PTR *PFN_vkCmdDbgMarkerBegin)(VkCommandBuffer commandBuffer, - const char *pMarker); -typedef void(VKAPI_PTR *PFN_vkCmdDbgMarkerEnd)(VkCommandBuffer commandBuffer); -typedef VkResult(VKAPI_PTR *PFN_vkDbgSetObjectTag)( - VkDevice device, VkDebugReportObjectTypeEXT objType, uint64_t object, - size_t tagSize, const void *pTag); -typedef VkResult(VKAPI_PTR *PFN_vkDbgSetObjectName)( - VkDevice device, VkDebugReportObjectTypeEXT objType, uint64_t object, - size_t nameSize, const char *pName); - -#ifndef VK_NO_PROTOTYPES - -// DebugMarker extension entrypoints -VKAPI_ATTR void VKAPI_CALL -vkCmdDbgMarkerBegin(VkCommandBuffer commandBuffer, const char *pMarker); - -VKAPI_ATTR void VKAPI_CALL vkCmdDbgMarkerEnd(VkCommandBuffer commandBuffer); - -VKAPI_ATTR VkResult VKAPI_CALL -vkDbgSetObjectTag(VkDevice device, VkDebugReportObjectTypeEXT objType, - uint64_t object, size_t tagSize, const void *pTag); - -VKAPI_ATTR VkResult VKAPI_CALL -vkDbgSetObjectName(VkDevice device, VkDebugReportObjectTypeEXT objType, - uint64_t object, size_t nameSize, const char *pName); - -#endif // VK_NO_PROTOTYPES - -#ifdef __cplusplus -} // extern "C" -#endif // __cplusplus - -#endif // __VK_DEBUG_MARKER_H__ diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h index f5a5243b8f2..5d0fc766ecc 100644 --- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h +++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vk_platform.h @@ -4,24 +4,17 @@ /* ** Copyright (c) 2014-2015 The Khronos Group Inc. ** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. +** http://www.apache.org/licenses/LICENSE-2.0 ** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ diff --git a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h index dca5e259fda..2f180768567 100644 --- a/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h +++ b/3rdparty/bgfx/3rdparty/khronos/vulkan/vulkan.h @@ -8,24 +8,17 @@ extern "C" { /* ** Copyright (c) 2015-2016 The Khronos Group Inc. ** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are furnished to do so, subject to -** the following conditions: +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at ** -** The above copyright notice and this permission notice shall be included -** in all copies or substantial portions of the Materials. +** http://www.apache.org/licenses/LICENSE-2.0 ** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. */ /* @@ -50,7 +43,7 @@ extern "C" { #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Version of this file -#define VK_HEADER_VERSION 8 +#define VK_HEADER_VERSION 13 #define VK_NULL_HANDLE 0 @@ -217,6 +210,10 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, + VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, + VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO, VK_STRUCTURE_TYPE_END_RANGE = VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO, VK_STRUCTURE_TYPE_RANGE_SIZE = (VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO - VK_STRUCTURE_TYPE_APPLICATION_INFO + 1), @@ -3175,13 +3172,14 @@ VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) #define VK_KHR_SURFACE_SPEC_VERSION 25 #define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" +#define VK_COLORSPACE_SRGB_NONLINEAR_KHR VK_COLOR_SPACE_SRGB_NONLINEAR_KHR typedef enum VkColorSpaceKHR { - VK_COLORSPACE_SRGB_NONLINEAR_KHR = 0, - VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLORSPACE_SRGB_NONLINEAR_KHR, - VK_COLOR_SPACE_END_RANGE_KHR = VK_COLORSPACE_SRGB_NONLINEAR_KHR, - VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLORSPACE_SRGB_NONLINEAR_KHR - VK_COLORSPACE_SRGB_NONLINEAR_KHR + 1), + VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, + VK_COLOR_SPACE_BEGIN_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + VK_COLOR_SPACE_END_RANGE_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + VK_COLOR_SPACE_RANGE_SIZE_KHR = (VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR + 1), VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF } VkColorSpaceKHR; @@ -3278,7 +3276,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( #define VK_KHR_swapchain 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) -#define VK_KHR_SWAPCHAIN_SPEC_VERSION 67 +#define VK_KHR_SWAPCHAIN_SPEC_VERSION 68 #define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" typedef VkFlags VkSwapchainCreateFlagsKHR; @@ -3434,7 +3432,7 @@ typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhys typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties); -typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR*pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); +typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); @@ -3835,6 +3833,85 @@ VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( #define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" +#define VK_AMD_rasterization_order 1 +#define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 +#define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order" + + +typedef enum VkRasterizationOrderAMD { + VK_RASTERIZATION_ORDER_STRICT_AMD = 0, + VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, + VK_RASTERIZATION_ORDER_BEGIN_RANGE_AMD = VK_RASTERIZATION_ORDER_STRICT_AMD, + VK_RASTERIZATION_ORDER_END_RANGE_AMD = VK_RASTERIZATION_ORDER_RELAXED_AMD, + VK_RASTERIZATION_ORDER_RANGE_SIZE_AMD = (VK_RASTERIZATION_ORDER_RELAXED_AMD - VK_RASTERIZATION_ORDER_STRICT_AMD + 1), + VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF +} VkRasterizationOrderAMD; + +typedef struct VkPipelineRasterizationStateRasterizationOrderAMD { + VkStructureType sType; + const void* pNext; + VkRasterizationOrderAMD rasterizationOrder; +} VkPipelineRasterizationStateRasterizationOrderAMD; + + + +#define VK_EXT_debug_marker 1 +#define VK_EXT_DEBUG_MARKER_SPEC_VERSION 3 +#define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker" + +typedef struct VkDebugMarkerObjectNameInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + const char* pObjectName; +} VkDebugMarkerObjectNameInfoEXT; + +typedef struct VkDebugMarkerObjectTagInfoEXT { + VkStructureType sType; + const void* pNext; + VkDebugReportObjectTypeEXT objectType; + uint64_t object; + uint64_t tagName; + size_t tagSize; + const void* pTag; +} VkDebugMarkerObjectTagInfoEXT; + +typedef struct VkDebugMarkerMarkerInfoEXT { + VkStructureType sType; + const void* pNext; + const char* pMarkerName; + float color[4]; +} VkDebugMarkerMarkerInfoEXT; + + +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, VkDebugMarkerObjectTagInfoEXT* pTagInfo); +typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, VkDebugMarkerObjectNameInfoEXT* pNameInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); +typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT* pMarkerInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( + VkDevice device, + VkDebugMarkerObjectTagInfoEXT* pTagInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( + VkDevice device, + VkDebugMarkerObjectNameInfoEXT* pNameInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( + VkCommandBuffer commandBuffer, + VkDebugMarkerMarkerInfoEXT* pMarkerInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( + VkCommandBuffer commandBuffer); + +VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( + VkCommandBuffer commandBuffer, + VkDebugMarkerMarkerInfoEXT* pMarkerInfo); +#endif + #ifdef __cplusplus } #endif diff --git a/3rdparty/bgfx/3rdparty/lodepng/README.md b/3rdparty/bgfx/3rdparty/lodepng/README.md new file mode 100644 index 00000000000..35f925494f6 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/lodepng/README.md @@ -0,0 +1,10 @@ +LodePNG +------- + +PNG encoder and decoder in C and C++. + +Home page: http://lodev.org/lodepng/ + +Only two files are needed to allow your program to read and write PNG files: lodepng.cpp and lodepng.h. + +The other files in the project are just examples, unit tests, etc... diff --git a/3rdparty/bgfx/3rdparty/lodepng/lodepng.cpp b/3rdparty/bgfx/3rdparty/lodepng/lodepng.cpp new file mode 100644 index 00000000000..7baf7f9274e --- /dev/null +++ b/3rdparty/bgfx/3rdparty/lodepng/lodepng.cpp @@ -0,0 +1,6224 @@ +/* +LodePNG version 20160501 + +Copyright (c) 2005-2016 Lode Vandevenne + +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 manual and changelog are in the header file "lodepng.h" +Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. +*/ + +#include "lodepng.h" + +#include +#include +#include + +#if defined(_MSC_VER) && (_MSC_VER >= 1310) /*Visual Studio: A few warning types are not desired here.*/ +#pragma warning( disable : 4244 ) /*implicit conversions: not warned by gcc -Wall -Wextra and requires too much casts*/ +#pragma warning( disable : 4996 ) /*VS does not like fopen, but fopen_s is not standard C so unusable here*/ +#endif /*_MSC_VER */ + +const char* LODEPNG_VERSION_STRING = "20160501"; + +/* +This source file is built up in the following large parts. The code sections +with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. +-Tools for C and common code for PNG and Zlib +-C Code for Zlib (huffman, deflate, ...) +-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) +-The C++ wrapper around all of the above +*/ + +/*The malloc, realloc and free functions defined here with "lodepng_" in front +of the name, so that you can easily change them to others related to your +platform if needed. Everything else in the code calls these. Pass +-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out +#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and +define them in your own project's source files without needing to change +lodepng source code. Don't forget to remove "static" if you copypaste them +from here.*/ + +#ifdef LODEPNG_COMPILE_ALLOCATORS +static void* lodepng_malloc(size_t size) +{ + return malloc(size); +} + +static void* lodepng_realloc(void* ptr, size_t new_size) +{ + return realloc(ptr, new_size); +} + +static void lodepng_free(void* ptr) +{ + free(ptr); +} +#else /*LODEPNG_COMPILE_ALLOCATORS*/ +void* lodepng_malloc(size_t size); +void* lodepng_realloc(void* ptr, size_t new_size); +void lodepng_free(void* ptr); +#endif /*LODEPNG_COMPILE_ALLOCATORS*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // Tools for C, and common code for PNG and Zlib. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Often in case of an error a value is assigned to a variable and then it breaks +out of a loop (to go to the cleanup phase of a function). This macro does that. +It makes the error handling code shorter and more readable. + +Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83); +*/ +#define CERROR_BREAK(errorvar, code)\ +{\ + errorvar = code;\ + break;\ +} + +/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ +#define ERROR_BREAK(code) CERROR_BREAK(error, code) + +/*Set error var to the error code, and return it.*/ +#define CERROR_RETURN_ERROR(errorvar, code)\ +{\ + errorvar = code;\ + return code;\ +} + +/*Try the code, if it returns error, also return the error.*/ +#define CERROR_TRY_RETURN(call)\ +{\ + unsigned error = call;\ + if(error) return error;\ +} + +/*Set error var to the error code, and return from the void function.*/ +#define CERROR_RETURN(errorvar, code)\ +{\ + errorvar = code;\ + return;\ +} + +/* +About uivector, ucvector and string: +-All of them wrap dynamic arrays or text strings in a similar way. +-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. +-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. +-They're not used in the interface, only internally in this file as static functions. +-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. +*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*dynamic vector of unsigned ints*/ +typedef struct uivector +{ + unsigned* data; + size_t size; /*size in number of unsigned longs*/ + size_t allocsize; /*allocated size in bytes*/ +} uivector; + +static void uivector_cleanup(void* p) +{ + ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; + lodepng_free(((uivector*)p)->data); + ((uivector*)p)->data = NULL; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_reserve(uivector* p, size_t allocsize) +{ + if(allocsize > p->allocsize) + { + size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); + void* data = lodepng_realloc(p->data, newsize); + if(data) + { + p->allocsize = newsize; + p->data = (unsigned*)data; + } + else return 0; /*error: not enough memory*/ + } + return 1; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_resize(uivector* p, size_t size) +{ + if(!uivector_reserve(p, size * sizeof(unsigned))) return 0; + p->size = size; + return 1; /*success*/ +} + +/*resize and give all new elements the value*/ +static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) +{ + size_t oldsize = p->size, i; + if(!uivector_resize(p, size)) return 0; + for(i = oldsize; i < size; ++i) p->data[i] = value; + return 1; +} + +static void uivector_init(uivector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} + +#ifdef LODEPNG_COMPILE_ENCODER +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_push_back(uivector* p, unsigned c) +{ + if(!uivector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* /////////////////////////////////////////////////////////////////////////// */ + +/*dynamic vector of unsigned chars*/ +typedef struct ucvector +{ + unsigned char* data; + size_t size; /*used size*/ + size_t allocsize; /*allocated size*/ +} ucvector; + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_reserve(ucvector* p, size_t allocsize) +{ + if(allocsize > p->allocsize) + { + size_t newsize = (allocsize > p->allocsize * 2) ? allocsize : (allocsize * 3 / 2); + void* data = lodepng_realloc(p->data, newsize); + if(data) + { + p->allocsize = newsize; + p->data = (unsigned char*)data; + } + else return 0; /*error: not enough memory*/ + } + return 1; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_resize(ucvector* p, size_t size) +{ + if(!ucvector_reserve(p, size * sizeof(unsigned char))) return 0; + p->size = size; + return 1; /*success*/ +} + +#ifdef LODEPNG_COMPILE_PNG + +static void ucvector_cleanup(void* p) +{ + ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; + lodepng_free(((ucvector*)p)->data); + ((ucvector*)p)->data = NULL; +} + +static void ucvector_init(ucvector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*you can both convert from vector to buffer&size and vica versa. If you use +init_buffer to take over a buffer and size, it is not needed to use cleanup*/ +static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) +{ + p->data = buffer; + p->allocsize = p->size = size; +} +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER) +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_push_back(ucvector* p, unsigned char c) +{ + if(!ucvector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned string_resize(char** out, size_t size) +{ + char* data = (char*)lodepng_realloc(*out, size + 1); + if(data) + { + data[size] = 0; /*null termination char*/ + *out = data; + } + return data != 0; +} + +/*init a {char*, size_t} pair for use as string*/ +static void string_init(char** out) +{ + *out = NULL; + string_resize(out, 0); +} + +/*free the above pair again*/ +static void string_cleanup(char** out) +{ + lodepng_free(*out); + *out = NULL; +} + +static void string_set(char** out, const char* in) +{ + size_t insize = strlen(in), i; + if(string_resize(out, insize)) + { + for(i = 0; i != insize; ++i) + { + (*out)[i] = in[i]; + } + } +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_read32bitInt(const unsigned char* buffer) +{ + return (unsigned)((buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]); +} + +#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) +/*buffer must have at least 4 allocated bytes available*/ +static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) +{ + buffer[0] = (unsigned char)((value >> 24) & 0xff); + buffer[1] = (unsigned char)((value >> 16) & 0xff); + buffer[2] = (unsigned char)((value >> 8) & 0xff); + buffer[3] = (unsigned char)((value ) & 0xff); +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + +#ifdef LODEPNG_COMPILE_ENCODER +static void lodepng_add32bitInt(ucvector* buffer, unsigned value) +{ + ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ + lodepng_set32bitInt(&buffer->data[buffer->size - 4], value); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / File IO / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DISK + +/* returns negative value on error. This should be pure C compatible, so no fstat. */ +static long lodepng_filesize(const char* filename) +{ + FILE* file; + long size; + file = fopen(filename, "rb"); + if(!file) return -1; + + if(fseek(file, 0, SEEK_END) != 0) + { + fclose(file); + return -1; + } + + size = ftell(file); + /* It may give LONG_MAX as directory size, this is invalid for us. */ + if(size == LONG_MAX) size = -1; + + fclose(file); + return size; +} + +/* load file into buffer that already has the correct allocated size. Returns error code.*/ +static unsigned lodepng_buffer_file(unsigned char* out, size_t size, const char* filename) +{ + FILE* file; + size_t readsize; + file = fopen(filename, "rb"); + if(!file) return 78; + + readsize = fread(out, 1, size, file); + fclose(file); + + if (readsize != size) return 78; + return 0; +} + +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) +{ + long size = lodepng_filesize(filename); + if (size < 0) return 78; + *outsize = (size_t)size; + + *out = (unsigned char*)lodepng_malloc((size_t)size); + if(!(*out) && size > 0) return 83; /*the above malloc failed*/ + + return lodepng_buffer_file(*out, (size_t)size, filename); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) +{ + FILE* file; + file = fopen(filename, "wb" ); + if(!file) return 79; + fwrite((char*)buffer , 1 , buffersize, file); + fclose(file); + return 0; +} + +#endif /*LODEPNG_COMPILE_DISK*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of common code and tools. Begin of Zlib related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_ENCODER +/*TODO: this ignores potential out of memory errors*/ +#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\ +{\ + /*add a new byte at the end*/\ + if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\ + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\ + (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\ + ++(*bitpointer);\ +} + +static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); +} + +static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for(i = 0; i != nbits; ++i) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) + +static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); + ++(*bitpointer); + return result; +} + +static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0, i; + for(i = 0; i != nbits; ++i) + { + result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; + ++(*bitpointer); + } + return result; +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflate - Huffman / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#define FIRST_LENGTH_CODE_INDEX 257 +#define LAST_LENGTH_CODE_INDEX 285 +/*256 literals, the end code, some length codes, and 2 unused codes*/ +#define NUM_DEFLATE_CODE_SYMBOLS 288 +/*the distance codes have their own symbols, 30 used, 2 unused*/ +#define NUM_DISTANCE_SYMBOLS 32 +/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ +#define NUM_CODE_LENGTH_CODES 19 + +/*the base lengths represented by codes 257-285*/ +static const unsigned LENGTHBASE[29] + = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, + 67, 83, 99, 115, 131, 163, 195, 227, 258}; + +/*the extra bits used by codes 257-285 (added to base length)*/ +static const unsigned LENGTHEXTRA[29] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 0}; + +/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ +static const unsigned DISTANCEBASE[30] + = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, + 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; + +/*the extra bits of backwards distances (added to base)*/ +static const unsigned DISTANCEEXTRA[30] + = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + +/*the order in which "code length alphabet code lengths" are stored, out of this +the huffman tree of the dynamic huffman tree lengths is generated*/ +static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] + = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Huffman tree struct, containing multiple representations of the tree +*/ +typedef struct HuffmanTree +{ + unsigned* tree2d; + unsigned* tree1d; + unsigned* lengths; /*the lengths of the codes of the 1d-tree*/ + unsigned maxbitlen; /*maximum number of bits a single code can get*/ + unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ +} HuffmanTree; + +/*function used for debug purposes to draw the tree in ascii art with C++*/ +/* +static void HuffmanTree_draw(HuffmanTree* tree) +{ + std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; + for(size_t i = 0; i != tree->tree1d.size; ++i) + { + if(tree->lengths.data[i]) + std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; + } + std::cout << std::endl; +}*/ + +static void HuffmanTree_init(HuffmanTree* tree) +{ + tree->tree2d = 0; + tree->tree1d = 0; + tree->lengths = 0; +} + +static void HuffmanTree_cleanup(HuffmanTree* tree) +{ + lodepng_free(tree->tree2d); + lodepng_free(tree->tree1d); + lodepng_free(tree->lengths); +} + +/*the tree representation used by the decoder. return value is error*/ +static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) +{ + unsigned nodefilled = 0; /*up to which node it is filled*/ + unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ + unsigned n, i; + + tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned)); + if(!tree->tree2d) return 83; /*alloc fail*/ + + /* + convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means + uninited, a value >= numcodes is an address to another bit, a value < numcodes + is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as + many columns as codes - 1. + A good huffman tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. + Here, the internal nodes are stored (what their 0 and 1 option point to). + There is only memory for such good tree currently, if there are more nodes + (due to too long length codes), error 55 will happen + */ + for(n = 0; n < tree->numcodes * 2; ++n) + { + tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ + } + + for(n = 0; n < tree->numcodes; ++n) /*the codes*/ + { + for(i = 0; i != tree->lengths[n]; ++i) /*the bits for this code*/ + { + unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1); + /*oversubscribed, see comment in lodepng_error_text*/ + if(treepos > 2147483647 || treepos + 2 > tree->numcodes) return 55; + if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ + { + if(i + 1 == tree->lengths[n]) /*last bit*/ + { + tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/ + treepos = 0; + } + else + { + /*put address of the next step in here, first that address has to be found of course + (it's just nodefilled + 1)...*/ + ++nodefilled; + /*addresses encoded with numcodes added to it*/ + tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes; + treepos = nodefilled; + } + } + else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes; + } + } + + for(n = 0; n < tree->numcodes * 2; ++n) + { + if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/ + } + + return 0; +} + +/* +Second step for the ...makeFromLengths and ...makeFromFrequencies functions. +numcodes, lengths and maxbitlen must already be filled in correctly. return +value is error. +*/ +static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) +{ + uivector blcount; + uivector nextcode; + unsigned error = 0; + unsigned bits, n; + + uivector_init(&blcount); + uivector_init(&nextcode); + + tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); + if(!tree->tree1d) error = 83; /*alloc fail*/ + + if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0) + || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) + error = 83; /*alloc fail*/ + + if(!error) + { + /*step 1: count number of instances of each code length*/ + for(bits = 0; bits != tree->numcodes; ++bits) ++blcount.data[tree->lengths[bits]]; + /*step 2: generate the nextcode values*/ + for(bits = 1; bits <= tree->maxbitlen; ++bits) + { + nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; + } + /*step 3: generate all the codes*/ + for(n = 0; n != tree->numcodes; ++n) + { + if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++; + } + } + + uivector_cleanup(&blcount); + uivector_cleanup(&nextcode); + + if(!error) return HuffmanTree_make2DTree(tree); + else return error; +} + +/* +given the code lengths (as stored in the PNG file), generate the tree as defined +by Deflate. maxbitlen is the maximum bits that a code in the tree can have. +return value is error. +*/ +static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, + size_t numcodes, unsigned maxbitlen) +{ + unsigned i; + tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + for(i = 0; i != numcodes; ++i) tree->lengths[i] = bitlen[i]; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->maxbitlen = maxbitlen; + return HuffmanTree_makeFromLengths2(tree); +} + +#ifdef LODEPNG_COMPILE_ENCODER + +/*BPM: Boundary Package Merge, see "A Fast and Space-Economical Algorithm for Length-Limited Coding", +Jyrki Katajainen, Alistair Moffat, Andrew Turpin, 1995.*/ + +/*chain node for boundary package merge*/ +typedef struct BPMNode +{ + int weight; /*the sum of all weights in this chain*/ + unsigned index; /*index of this leaf node (called "count" in the paper)*/ + struct BPMNode* tail; /*the next nodes in this chain (null if last)*/ + int in_use; +} BPMNode; + +/*lists of chains*/ +typedef struct BPMLists +{ + /*memory pool*/ + unsigned memsize; + BPMNode* memory; + unsigned numfree; + unsigned nextfree; + BPMNode** freelist; + /*two heads of lookahead chains per list*/ + unsigned listsize; + BPMNode** chains0; + BPMNode** chains1; +} BPMLists; + +/*creates a new chain node with the given parameters, from the memory in the lists */ +static BPMNode* bpmnode_create(BPMLists* lists, int weight, unsigned index, BPMNode* tail) +{ + unsigned i; + BPMNode* result; + + /*memory full, so garbage collect*/ + if(lists->nextfree >= lists->numfree) + { + /*mark only those that are in use*/ + for(i = 0; i != lists->memsize; ++i) lists->memory[i].in_use = 0; + for(i = 0; i != lists->listsize; ++i) + { + BPMNode* node; + for(node = lists->chains0[i]; node != 0; node = node->tail) node->in_use = 1; + for(node = lists->chains1[i]; node != 0; node = node->tail) node->in_use = 1; + } + /*collect those that are free*/ + lists->numfree = 0; + for(i = 0; i != lists->memsize; ++i) + { + if(!lists->memory[i].in_use) lists->freelist[lists->numfree++] = &lists->memory[i]; + } + lists->nextfree = 0; + } + + result = lists->freelist[lists->nextfree++]; + result->weight = weight; + result->index = index; + result->tail = tail; + return result; +} + +/*sort the leaves with stable mergesort*/ +static void bpmnode_sort(BPMNode* leaves, size_t num) +{ + BPMNode* mem = (BPMNode*)lodepng_malloc(sizeof(*leaves) * num); + size_t width, counter = 0; + for(width = 1; width < num; width *= 2) + { + BPMNode* a = (counter & 1) ? mem : leaves; + BPMNode* b = (counter & 1) ? leaves : mem; + size_t p; + for(p = 0; p < num; p += 2 * width) + { + size_t q = (p + width > num) ? num : (p + width); + size_t r = (p + 2 * width > num) ? num : (p + 2 * width); + size_t i = p, j = q, k; + for(k = p; k < r; k++) + { + if(i < q && (j >= r || a[i].weight <= a[j].weight)) b[k] = a[i++]; + else b[k] = a[j++]; + } + } + counter++; + } + if(counter & 1) memcpy(leaves, mem, sizeof(*leaves) * num); + lodepng_free(mem); +} + +/*Boundary Package Merge step, numpresent is the amount of leaves, and c is the current chain.*/ +static void boundaryPM(BPMLists* lists, BPMNode* leaves, size_t numpresent, int c, int num) +{ + unsigned lastindex = lists->chains1[c]->index; + + if(c == 0) + { + if(lastindex >= numpresent) return; + lists->chains0[c] = lists->chains1[c]; + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, 0); + } + else + { + /*sum of the weights of the head nodes of the previous lookahead chains.*/ + int sum = lists->chains0[c - 1]->weight + lists->chains1[c - 1]->weight; + lists->chains0[c] = lists->chains1[c]; + if(lastindex < numpresent && sum > leaves[lastindex].weight) + { + lists->chains1[c] = bpmnode_create(lists, leaves[lastindex].weight, lastindex + 1, lists->chains1[c]->tail); + return; + } + lists->chains1[c] = bpmnode_create(lists, sum, lastindex, lists->chains1[c - 1]); + /*in the end we are only interested in the chain of the last list, so no + need to recurse if we're at the last one (this gives measurable speedup)*/ + if(num + 1 < (int)(2 * numpresent - 2)) + { + boundaryPM(lists, leaves, numpresent, c - 1, num); + boundaryPM(lists, leaves, numpresent, c - 1, num); + } + } +} + +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + unsigned i; + size_t numpresent = 0; /*number of symbols with non-zero frequency*/ + BPMNode* leaves; /*the symbols, only those with > 0 frequency*/ + + if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ + if((1u << maxbitlen) < numcodes) return 80; /*error: represent all symbols*/ + + leaves = (BPMNode*)lodepng_malloc(numcodes * sizeof(*leaves)); + if(!leaves) return 83; /*alloc fail*/ + + for(i = 0; i != numcodes; ++i) + { + if(frequencies[i] > 0) + { + leaves[numpresent].weight = (int)frequencies[i]; + leaves[numpresent].index = i; + ++numpresent; + } + } + + for(i = 0; i != numcodes; ++i) lengths[i] = 0; + + /*ensure at least two present symbols. There should be at least one symbol + according to RFC 1951 section 3.2.7. Some decoders incorrectly require two. To + make these work as well ensure there are at least two symbols. The + Package-Merge code below also doesn't work correctly if there's only one + symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/ + if(numpresent == 0) + { + lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ + } + else if(numpresent == 1) + { + lengths[leaves[0].index] = 1; + lengths[leaves[0].index == 0 ? 1 : 0] = 1; + } + else + { + BPMLists lists; + BPMNode* node; + + bpmnode_sort(leaves, numpresent); + + lists.listsize = maxbitlen; + lists.memsize = 2 * maxbitlen * (maxbitlen + 1); + lists.nextfree = 0; + lists.numfree = lists.memsize; + lists.memory = (BPMNode*)lodepng_malloc(lists.memsize * sizeof(*lists.memory)); + lists.freelist = (BPMNode**)lodepng_malloc(lists.memsize * sizeof(BPMNode*)); + lists.chains0 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + lists.chains1 = (BPMNode**)lodepng_malloc(lists.listsize * sizeof(BPMNode*)); + if(!lists.memory || !lists.freelist || !lists.chains0 || !lists.chains1) error = 83; /*alloc fail*/ + + if(!error) + { + for(i = 0; i != lists.memsize; ++i) lists.freelist[i] = &lists.memory[i]; + + bpmnode_create(&lists, leaves[0].weight, 1, 0); + bpmnode_create(&lists, leaves[1].weight, 2, 0); + + for(i = 0; i != lists.listsize; ++i) + { + lists.chains0[i] = &lists.memory[0]; + lists.chains1[i] = &lists.memory[1]; + } + + /*each boundaryPM call adds one chain to the last list, and we need 2 * numpresent - 2 chains.*/ + for(i = 2; i != 2 * numpresent - 2; ++i) boundaryPM(&lists, leaves, numpresent, (int)maxbitlen - 1, (int)i); + + for(node = lists.chains1[maxbitlen - 1]; node; node = node->tail) + { + for(i = 0; i != node->index; ++i) ++lengths[leaves[i].index]; + } + } + + lodepng_free(lists.memory); + lodepng_free(lists.freelist); + lodepng_free(lists.chains0); + lodepng_free(lists.chains1); + } + + lodepng_free(leaves); + return error; +} + +/*Create the Huffman tree given the symbol frequencies*/ +static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, + size_t mincodes, size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + while(!frequencies[numcodes - 1] && numcodes > mincodes) --numcodes; /*trim zeroes*/ + tree->maxbitlen = maxbitlen; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + /*initialize all lengths to 0*/ + memset(tree->lengths, 0, numcodes * sizeof(unsigned)); + + error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); + if(!error) error = HuffmanTree_makeFromLengths2(tree); + return error; +} + +static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) +{ + return tree->tree1d[index]; +} + +static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) +{ + return tree->lengths[index]; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ +static unsigned generateFixedLitLenTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ + for(i = 0; i <= 143; ++i) bitlen[i] = 8; + for(i = 144; i <= 255; ++i) bitlen[i] = 9; + for(i = 256; i <= 279; ++i) bitlen[i] = 7; + for(i = 280; i <= 287; ++i) bitlen[i] = 8; + + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static unsigned generateFixedDistanceTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*there are 32 distance codes, but 30-31 are unused*/ + for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen[i] = 5; + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* +returns the code, or (unsigned)(-1) if error happened +inbitlength is the length of the complete buffer, in bits (so its byte length times 8) +*/ +static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, + const HuffmanTree* codetree, size_t inbitlength) +{ + unsigned treepos = 0, ct; + for(;;) + { + if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ + /* + decode the symbol from the tree. The "readBitFromStream" code is inlined in + the expression below because this is the biggest bottleneck while decoding + */ + ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)]; + ++(*bp); + if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ + else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ + + if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ + } +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Inflator (Decompressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) +{ + /*TODO: check for out of memory errors*/ + generateFixedLitLenTree(tree_ll); + generateFixedDistanceTree(tree_d); +} + +/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ +static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, + const unsigned char* in, size_t* bp, size_t inlength) +{ + /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ + unsigned error = 0; + unsigned n, HLIT, HDIST, HCLEN, i; + size_t inbitlength = inlength * 8; + + /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ + unsigned* bitlen_ll = 0; /*lit,len code lengths*/ + unsigned* bitlen_d = 0; /*dist code lengths*/ + /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ + unsigned* bitlen_cl = 0; + HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ + + if((*bp) + 14 > (inlength << 3)) return 49; /*error: the bit pointer is or will go past the memory*/ + + /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ + HLIT = readBitsFromStream(bp, in, 5) + 257; + /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ + HDIST = readBitsFromStream(bp, in, 5) + 1; + /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ + HCLEN = readBitsFromStream(bp, in, 4) + 4; + + if((*bp) + HCLEN * 3 > (inlength << 3)) return 50; /*error: the bit pointer is or will go past the memory*/ + + HuffmanTree_init(&tree_cl); + + while(!error) + { + /*read the code length codes out of 3 * (amount of code length codes) bits*/ + + bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); + if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/); + + for(i = 0; i != NUM_CODE_LENGTH_CODES; ++i) + { + if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); + else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ + } + + error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); + if(error) break; + + /*now we can use this tree to read the lengths for the tree that this function will return*/ + bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i != NUM_DEFLATE_CODE_SYMBOLS; ++i) bitlen_ll[i] = 0; + for(i = 0; i != NUM_DISTANCE_SYMBOLS; ++i) bitlen_d[i] = 0; + + /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ + i = 0; + while(i < HLIT + HDIST) + { + unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); + if(code <= 15) /*a length code*/ + { + if(i < HLIT) bitlen_ll[i] = code; + else bitlen_d[i - HLIT] = code; + ++i; + } + else if(code == 16) /*repeat previous*/ + { + unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ + unsigned value; /*set value to the previous code*/ + + if(i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ + + if((*bp + 2) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 2); + + if(i < HLIT + 1) value = bitlen_ll[i - 1]; + else value = bitlen_d[i - HLIT - 1]; + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) + { + if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ + if(i < HLIT) bitlen_ll[i] = value; + else bitlen_d[i - HLIT] = value; + ++i; + } + } + else if(code == 17) /*repeat "0" 3-10 times*/ + { + unsigned replength = 3; /*read in the bits that indicate repeat length*/ + if((*bp + 3) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 3); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) + { + if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } + else if(code == 18) /*repeat "0" 11-138 times*/ + { + unsigned replength = 11; /*read in the bits that indicate repeat length*/ + if((*bp + 7) > inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + replength += readBitsFromStream(bp, in, 7); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; ++n) + { + if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + ++i; + } + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + if(code == (unsigned)(-1)) + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inbitlength ? 10 : 11; + } + else error = 16; /*unexisting code, this can never happen*/ + break; + } + } + if(error) break; + + if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ + + /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ + error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); + if(error) break; + error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); + + break; /*end of error-while*/ + } + + lodepng_free(bitlen_cl); + lodepng_free(bitlen_ll); + lodepng_free(bitlen_d); + HuffmanTree_cleanup(&tree_cl); + + return error; +} + +/*inflate a block with dynamic of fixed Huffman tree*/ +static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, + size_t* pos, size_t inlength, unsigned btype) +{ + unsigned error = 0; + HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ + HuffmanTree tree_d; /*the huffman tree for distance codes*/ + size_t inbitlength = inlength * 8; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); + else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); + + while(!error) /*decode all symbols until end reached, breaks at end code*/ + { + /*code_ll is literal, length or end code*/ + unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); + if(code_ll <= 255) /*literal symbol*/ + { + /*ucvector_push_back would do the same, but for some reason the two lines below run 10% faster*/ + if(!ucvector_resize(out, (*pos) + 1)) ERROR_BREAK(83 /*alloc fail*/); + out->data[*pos] = (unsigned char)code_ll; + ++(*pos); + } + else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ + { + unsigned code_d, distance; + unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ + size_t start, forward, backward, length; + + /*part 1: get length base*/ + length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; + + /*part 2: get extra bits and add the value of that to length*/ + numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; + if((*bp + numextrabits_l) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + length += readBitsFromStream(bp, in, numextrabits_l); + + /*part 3: get distance code*/ + code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); + if(code_d > 29) + { + if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inlength * 8 ? 10 : 11; + } + else error = 18; /*error: invalid distance code (30-31 are never used)*/ + break; + } + distance = DISTANCEBASE[code_d]; + + /*part 4: get extra bits from distance*/ + numextrabits_d = DISTANCEEXTRA[code_d]; + if((*bp + numextrabits_d) > inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + distance += readBitsFromStream(bp, in, numextrabits_d); + + /*part 5: fill in all the out[n] values based on the length and dist*/ + start = (*pos); + if(distance > start) ERROR_BREAK(52); /*too long backward distance*/ + backward = start - distance; + + if(!ucvector_resize(out, (*pos) + length)) ERROR_BREAK(83 /*alloc fail*/); + if (distance < length) { + for(forward = 0; forward < length; ++forward) + { + out->data[(*pos)++] = out->data[backward++]; + } + } else { + memcpy(out->data + *pos, out->data + backward, length); + *pos += length; + } + } + else if(code_ll == 256) + { + break; /*end code, break the loop*/ + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = ((*bp) > inlength * 8) ? 10 : 11; + break; + } + } + + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) +{ + size_t p; + unsigned LEN, NLEN, n, error = 0; + + /*go to first boundary of byte*/ + while(((*bp) & 0x7) != 0) ++(*bp); + p = (*bp) / 8; /*byte position*/ + + /*read LEN (2 bytes) and NLEN (2 bytes)*/ + if(p + 4 >= inlength) return 52; /*error, bit pointer will jump past memory*/ + LEN = in[p] + 256u * in[p + 1]; p += 2; + NLEN = in[p] + 256u * in[p + 1]; p += 2; + + /*check if 16-bit NLEN is really the one's complement of LEN*/ + if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ + + if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/ + + /*read the literal data: LEN bytes are now stored in the out buffer*/ + if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ + for(n = 0; n < LEN; ++n) out->data[(*pos)++] = in[p++]; + + (*bp) = p * 8; + + return error; +} + +static unsigned lodepng_inflatev(ucvector* out, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ + size_t bp = 0; + unsigned BFINAL = 0; + size_t pos = 0; /*byte position in the out buffer*/ + unsigned error = 0; + + (void)settings; + + while(!BFINAL) + { + unsigned BTYPE; + if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ + BFINAL = readBitFromStream(&bp, in); + BTYPE = 1u * readBitFromStream(&bp, in); + BTYPE += 2u * readBitFromStream(&bp, in); + + if(BTYPE == 3) return 20; /*error: invalid BTYPE*/ + else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/ + else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ + + if(error) return error; + } + + return error; +} + +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_inflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + if(settings->custom_inflate) + { + return settings->custom_inflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_inflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflator (Compressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; + +/*bitlen is the size in bits of the code*/ +static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) +{ + addBitsToStreamReversed(bp, compressed, code, bitlen); +} + +/*search the index in the array, that has the largest value smaller than or equal to the given value, +given array must be sorted (if no value is smaller, it returns the size of the given array)*/ +static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) +{ + /*binary search (only small gain over linear). TODO: use CPU log2 instruction for getting symbols instead*/ + size_t left = 1; + size_t right = array_size - 1; + + while(left <= right) { + size_t mid = (left + right) >> 1; + if (array[mid] >= value) right = mid - 1; + else left = mid + 1; + } + if(left >= array_size || array[left] > value) left--; + return left; +} + +static void addLengthDistance(uivector* values, size_t length, size_t distance) +{ + /*values in encoded vector are those used by deflate: + 0-255: literal bytes + 256: end + 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) + 286-287: invalid*/ + + unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); + unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); + unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); + unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); + + uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); + uivector_push_back(values, extra_length); + uivector_push_back(values, dist_code); + uivector_push_back(values, extra_distance); +} + +/*3 bytes of data get encoded into two bytes. The hash cannot use more than 3 +bytes as input because 3 is the minimum match length for deflate*/ +static const unsigned HASH_NUM_VALUES = 65536; +static const unsigned HASH_BIT_MASK = 65535; /*HASH_NUM_VALUES - 1, but C90 does not like that as initializer*/ + +typedef struct Hash +{ + int* head; /*hash value to head circular pos - can be outdated if went around window*/ + /*circular pos to prev circular pos*/ + unsigned short* chain; + int* val; /*circular pos to hash value*/ + + /*TODO: do this not only for zeros but for any repeated byte. However for PNG + it's always going to be the zeros that dominate, so not important for PNG*/ + int* headz; /*similar to head, but for chainz*/ + unsigned short* chainz; /*those with same amount of zeros*/ + unsigned short* zeros; /*length of zeros streak, used as a second hash chain*/ +} Hash; + +static unsigned hash_init(Hash* hash, unsigned windowsize) +{ + unsigned i; + hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); + hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); + hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + hash->headz = (int*)lodepng_malloc(sizeof(int) * (MAX_SUPPORTED_DEFLATE_LENGTH + 1)); + hash->chainz = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + if(!hash->head || !hash->chain || !hash->val || !hash->headz|| !hash->chainz || !hash->zeros) + { + return 83; /*alloc fail*/ + } + + /*initialize hash table*/ + for(i = 0; i != HASH_NUM_VALUES; ++i) hash->head[i] = -1; + for(i = 0; i != windowsize; ++i) hash->val[i] = -1; + for(i = 0; i != windowsize; ++i) hash->chain[i] = i; /*same value as index indicates uninitialized*/ + + for(i = 0; i <= MAX_SUPPORTED_DEFLATE_LENGTH; ++i) hash->headz[i] = -1; + for(i = 0; i != windowsize; ++i) hash->chainz[i] = i; /*same value as index indicates uninitialized*/ + + return 0; +} + +static void hash_cleanup(Hash* hash) +{ + lodepng_free(hash->head); + lodepng_free(hash->val); + lodepng_free(hash->chain); + + lodepng_free(hash->zeros); + lodepng_free(hash->headz); + lodepng_free(hash->chainz); +} + + + +static unsigned getHash(const unsigned char* data, size_t size, size_t pos) +{ + unsigned result = 0; + if(pos + 2 < size) + { + /*A simple shift and xor hash is used. Since the data of PNGs is dominated + by zeroes due to the filters, a better hash does not have a significant + effect on speed in traversing the chain, and causes more time spend on + calculating the hash.*/ + result ^= (unsigned)(data[pos + 0] << 0u); + result ^= (unsigned)(data[pos + 1] << 4u); + result ^= (unsigned)(data[pos + 2] << 8u); + } else { + size_t amount, i; + if(pos >= size) return 0; + amount = size - pos; + for(i = 0; i != amount; ++i) result ^= (unsigned)(data[pos + i] << (i * 8u)); + } + return result & HASH_BIT_MASK; +} + +static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) +{ + const unsigned char* start = data + pos; + const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; + if(end > data + size) end = data + size; + data = start; + while(data != end && *data == 0) ++data; + /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ + return (unsigned)(data - start); +} + +/*wpos = pos & (windowsize - 1)*/ +static void updateHashChain(Hash* hash, size_t wpos, unsigned hashval, unsigned short numzeros) +{ + hash->val[wpos] = (int)hashval; + if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; + hash->head[hashval] = wpos; + + hash->zeros[wpos] = numzeros; + if(hash->headz[numzeros] != -1) hash->chainz[wpos] = hash->headz[numzeros]; + hash->headz[numzeros] = wpos; +} + +/* +LZ77-encode the data. Return value is error code. The input are raw bytes, the output +is in the form of unsigned integers with codes representing for example literal bytes, or +length/distance pairs. +It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a +sliding window (of windowsize) is used, and all past bytes in that window can be used as +the "dictionary". A brute force search through all possible distances would be slow, and +this hash technique is one out of several ways to speed this up. +*/ +static unsigned encodeLZ77(uivector* out, Hash* hash, + const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, + unsigned minmatch, unsigned nicematch, unsigned lazymatching) +{ + size_t pos; + unsigned i, error = 0; + /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ + unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8; + unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; + + unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ + unsigned numzeros = 0; + + unsigned offset; /*the offset represents the distance in LZ77 terminology*/ + unsigned length; + unsigned lazy = 0; + unsigned lazylength = 0, lazyoffset = 0; + unsigned hashval; + unsigned current_offset, current_length; + unsigned prev_offset; + const unsigned char *lastptr, *foreptr, *backptr; + unsigned hashpos; + + if(windowsize == 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ + if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ + + if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; + + for(pos = inpos; pos < insize; ++pos) + { + size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ + unsigned chainlength = 0; + + hashval = getHash(in, insize, pos); + + if(usezeros && hashval == 0) + { + if(numzeros == 0) numzeros = countZeros(in, insize, pos); + else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } + else + { + numzeros = 0; + } + + updateHashChain(hash, wpos, hashval, numzeros); + + /*the length and offset found for the current position*/ + length = 0; + offset = 0; + + hashpos = hash->chain[wpos]; + + lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; + + /*search for the longest string*/ + prev_offset = 0; + for(;;) + { + if(chainlength++ >= maxchainlength) break; + current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize; + + if(current_offset < prev_offset) break; /*stop when went completely around the circular buffer*/ + prev_offset = current_offset; + if(current_offset > 0) + { + /*test the next characters*/ + foreptr = &in[pos]; + backptr = &in[pos - current_offset]; + + /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ + if(numzeros >= 3) + { + unsigned skip = hash->zeros[hashpos]; + if(skip > numzeros) skip = numzeros; + backptr += skip; + foreptr += skip; + } + + while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ + { + ++backptr; + ++foreptr; + } + current_length = (unsigned)(foreptr - &in[pos]); + + if(current_length > length) + { + length = current_length; /*the longest length*/ + offset = current_offset; /*the offset that is related to this longest length*/ + /*jump out once a length of max length is found (speed gain). This also jumps + out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ + if(current_length >= nicematch) break; + } + } + + if(hashpos == hash->chain[hashpos]) break; + + if(numzeros >= 3 && length > numzeros) + { + hashpos = hash->chainz[hashpos]; + if(hash->zeros[hashpos] != numzeros) break; + } + else + { + hashpos = hash->chain[hashpos]; + /*outdated hash value, happens if particular value was not encountered in whole last window*/ + if(hash->val[hashpos] != (int)hashval) break; + } + } + + if(lazymatching) + { + if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) + { + lazy = 1; + lazylength = length; + lazyoffset = offset; + continue; /*try the next byte*/ + } + if(lazy) + { + lazy = 0; + if(pos == 0) ERROR_BREAK(81); + if(length > lazylength + 1) + { + /*push the previous character as literal*/ + if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + length = lazylength; + offset = lazyoffset; + hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ + hash->headz[numzeros] = -1; /*idem*/ + --pos; + } + } + } + if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); + + /*encode it as length/distance pair or literal value*/ + if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ + { + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else if(length < minmatch || (length == 3 && offset > 4096)) + { + /*compensate for the fact that longer offsets have more extra bits, a + length of only 3 may be not worth it then*/ + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + addLengthDistance(out, length, offset); + for(i = 1; i < length; ++i) + { + ++pos; + wpos = pos & (windowsize - 1); + hashval = getHash(in, insize, pos); + if(usezeros && hashval == 0) + { + if(numzeros == 0) numzeros = countZeros(in, insize, pos); + else if(pos + numzeros > insize || in[pos + numzeros - 1] != 0) --numzeros; + } + else + { + numzeros = 0; + } + updateHashChain(hash, wpos, hashval, numzeros); + } + } + } /*end of the loop through each character of input*/ + + return error; +} + +/* /////////////////////////////////////////////////////////////////////////// */ + +static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) +{ + /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, + 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ + + size_t i, j, numdeflateblocks = (datasize + 65534) / 65535; + unsigned datapos = 0; + for(i = 0; i != numdeflateblocks; ++i) + { + unsigned BFINAL, BTYPE, LEN, NLEN; + unsigned char firstbyte; + + BFINAL = (i == numdeflateblocks - 1); + BTYPE = 0; + + firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); + ucvector_push_back(out, firstbyte); + + LEN = 65535; + if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; + NLEN = 65535 - LEN; + + ucvector_push_back(out, (unsigned char)(LEN & 255)); + ucvector_push_back(out, (unsigned char)(LEN >> 8)); + ucvector_push_back(out, (unsigned char)(NLEN & 255)); + ucvector_push_back(out, (unsigned char)(NLEN >> 8)); + + /*Decompressed data*/ + for(j = 0; j < 65535 && datapos < datasize; ++j) + { + ucvector_push_back(out, data[datapos++]); + } + } + + return 0; +} + +/* +write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. +tree_ll: the tree for lit and len codes. +tree_d: the tree for distance codes. +*/ +static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, + const HuffmanTree* tree_ll, const HuffmanTree* tree_d) +{ + size_t i = 0; + for(i = 0; i != lz77_encoded->size; ++i) + { + unsigned val = lz77_encoded->data[i]; + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); + if(val > 256) /*for a length code, 3 more things have to be added*/ + { + unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; + unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; + unsigned length_extra_bits = lz77_encoded->data[++i]; + + unsigned distance_code = lz77_encoded->data[++i]; + + unsigned distance_index = distance_code; + unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; + unsigned distance_extra_bits = lz77_encoded->data[++i]; + + addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), + HuffmanTree_getLength(tree_d, distance_code)); + addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); + } + } +} + +/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ +static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) +{ + unsigned error = 0; + + /* + A block is compressed as follows: The PNG data is lz77 encoded, resulting in + literal bytes and length/distance pairs. This is then huffman compressed with + two huffman trees. One huffman tree is used for the lit and len values ("ll"), + another huffman tree is used for the dist values ("d"). These two trees are + stored using their code lengths, and to compress even more these code lengths + are also run-length encoded and huffman compressed. This gives a huffman tree + of code lengths "cl". The code lenghts used to describe this third tree are + the code length code lengths ("clcl"). + */ + + /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ + uivector lz77_encoded; + HuffmanTree tree_ll; /*tree for lit,len values*/ + HuffmanTree tree_d; /*tree for distance codes*/ + HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ + uivector frequencies_ll; /*frequency of lit,len codes*/ + uivector frequencies_d; /*frequency of dist codes*/ + uivector frequencies_cl; /*frequency of code length codes*/ + uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ + uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ + /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl + (these are written as is in the file, it would be crazy to compress these using yet another huffman + tree that needs to be represented by yet another set of code lengths)*/ + uivector bitlen_cl; + size_t datasize = dataend - datapos; + + /* + Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: + bitlen_lld is to tree_cl what data is to tree_ll and tree_d. + bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. + bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. + */ + + unsigned BFINAL = final; + size_t numcodes_ll, numcodes_d, i; + unsigned HLIT, HDIST, HCLEN; + + uivector_init(&lz77_encoded); + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + HuffmanTree_init(&tree_cl); + uivector_init(&frequencies_ll); + uivector_init(&frequencies_d); + uivector_init(&frequencies_cl); + uivector_init(&bitlen_lld); + uivector_init(&bitlen_lld_e); + uivector_init(&bitlen_cl); + + /*This while loop never loops due to a break at the end, it is here to + allow breaking out of it to the cleanup phase on error conditions.*/ + while(!error) + { + if(settings->use_lz77) + { + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(error) break; + } + else + { + if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); + for(i = datapos; i < dataend; ++i) lz77_encoded.data[i - datapos] = data[i]; /*no LZ77, but still will be Huffman compressed*/ + } + + if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/); + if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/); + + /*Count the frequencies of lit, len and dist codes*/ + for(i = 0; i != lz77_encoded.size; ++i) + { + unsigned symbol = lz77_encoded.data[i]; + ++frequencies_ll.data[symbol]; + if(symbol > 256) + { + unsigned dist = lz77_encoded.data[i + 2]; + ++frequencies_d.data[dist]; + i += 3; + } + } + frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ + + /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ + error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15); + if(error) break; + /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ + error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15); + if(error) break; + + numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286; + numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30; + /*store the code lengths of both generated trees in bitlen_lld*/ + for(i = 0; i != numcodes_ll; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); + for(i = 0; i != numcodes_d; ++i) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); + + /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), + 17 (3-10 zeroes), 18 (11-138 zeroes)*/ + for(i = 0; i != (unsigned)bitlen_lld.size; ++i) + { + unsigned j = 0; /*amount of repititions*/ + while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) ++j; + + if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ + { + ++j; /*include the first zero*/ + if(j <= 10) /*repeat code 17 supports max 10 zeroes*/ + { + uivector_push_back(&bitlen_lld_e, 17); + uivector_push_back(&bitlen_lld_e, j - 3); + } + else /*repeat code 18 supports max 138 zeroes*/ + { + if(j > 138) j = 138; + uivector_push_back(&bitlen_lld_e, 18); + uivector_push_back(&bitlen_lld_e, j - 11); + } + i += (j - 1); + } + else if(j >= 3) /*repeat code for value other than zero*/ + { + size_t k; + unsigned num = j / 6, rest = j % 6; + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + for(k = 0; k < num; ++k) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, 6 - 3); + } + if(rest >= 3) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, rest - 3); + } + else j -= rest; + i += j; + } + else /*too short to benefit from repeat code*/ + { + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + } + } + + /*generate tree_cl, the huffmantree of huffmantrees*/ + + if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i != bitlen_lld_e.size; ++i) + { + ++frequencies_cl.data[bitlen_lld_e.data[i]]; + /*after a repeat code come the bits that specify the number of repetitions, + those don't need to be in the frequencies_cl calculation*/ + if(bitlen_lld_e.data[i] >= 16) ++i; + } + + error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, + frequencies_cl.size, frequencies_cl.size, 7); + if(error) break; + + if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i != tree_cl.numcodes; ++i) + { + /*lenghts of code length tree is in the order as specified by deflate*/ + bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); + } + while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) + { + /*remove zeros at the end, but minimum size must be 4*/ + if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/); + } + if(error) break; + + /* + Write everything into the output + + After the BFINAL and BTYPE, the dynamic block consists out of the following: + - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN + - (HCLEN+4)*3 bits code lengths of code length alphabet + - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - HDIST + 1 code lengths of distance alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - compressed data + - 256 (end code) + */ + + /*Write block type*/ + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/ + addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/ + + /*write the HLIT, HDIST and HCLEN values*/ + HLIT = (unsigned)(numcodes_ll - 257); + HDIST = (unsigned)(numcodes_d - 1); + HCLEN = (unsigned)bitlen_cl.size - 4; + /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/ + while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) --HCLEN; + addBitsToStream(bp, out, HLIT, 5); + addBitsToStream(bp, out, HDIST, 5); + addBitsToStream(bp, out, HCLEN, 4); + + /*write the code lenghts of the code length alphabet*/ + for(i = 0; i != HCLEN + 4; ++i) addBitsToStream(bp, out, bitlen_cl.data[i], 3); + + /*write the lenghts of the lit/len AND the dist alphabet*/ + for(i = 0; i != bitlen_lld_e.size; ++i) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), + HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); + /*extra bits of repeat codes*/ + if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2); + else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3); + else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7); + } + + /*write the compressed data symbols*/ + writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + /*error: the length of the end code 256 must be larger than 0*/ + if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); + + /*write the end code*/ + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + break; /*end of error-while*/ + } + + /*cleanup*/ + uivector_cleanup(&lz77_encoded); + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + HuffmanTree_cleanup(&tree_cl); + uivector_cleanup(&frequencies_ll); + uivector_cleanup(&frequencies_d); + uivector_cleanup(&frequencies_cl); + uivector_cleanup(&bitlen_lld_e); + uivector_cleanup(&bitlen_lld); + uivector_cleanup(&bitlen_cl); + + return error; +} + +static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, + size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, unsigned final) +{ + HuffmanTree tree_ll; /*tree for literal values and length codes*/ + HuffmanTree tree_d; /*tree for distance codes*/ + + unsigned BFINAL = final; + unsigned error = 0; + size_t i; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + generateFixedLitLenTree(&tree_ll); + generateFixedDistanceTree(&tree_d); + + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 1); /*first bit of BTYPE*/ + addBitToStream(bp, out, 0); /*second bit of BTYPE*/ + + if(settings->use_lz77) /*LZ77 encoded*/ + { + uivector lz77_encoded; + uivector_init(&lz77_encoded); + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + uivector_cleanup(&lz77_encoded); + } + else /*no LZ77, but still will be Huffman compressed*/ + { + for(i = datapos; i < dataend; ++i) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); + } + } + /*add END code*/ + if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + /*cleanup*/ + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error = 0; + size_t i, blocksize, numdeflateblocks; + size_t bp = 0; /*the bit pointer*/ + Hash hash; + + if(settings->btype > 2) return 61; + else if(settings->btype == 0) return deflateNoCompression(out, in, insize); + else if(settings->btype == 1) blocksize = insize; + else /*if(settings->btype == 2)*/ + { + /*on PNGs, deflate blocks of 65-262k seem to give most dense encoding*/ + blocksize = insize / 8 + 8; + if(blocksize < 65536) blocksize = 65536; + if(blocksize > 262144) blocksize = 262144; + } + + numdeflateblocks = (insize + blocksize - 1) / blocksize; + if(numdeflateblocks == 0) numdeflateblocks = 1; + + error = hash_init(&hash, settings->windowsize); + if(error) return error; + + for(i = 0; i != numdeflateblocks && !error; ++i) + { + unsigned final = (i == numdeflateblocks - 1); + size_t start = i * blocksize; + size_t end = start + blocksize; + if(end > insize) end = insize; + + if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final); + else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final); + } + + hash_cleanup(&hash); + + return error; +} + +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_deflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + if(settings->custom_deflate) + { + return settings->custom_deflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_deflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Adler32 */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) +{ + unsigned s1 = adler & 0xffff; + unsigned s2 = (adler >> 16) & 0xffff; + + while(len > 0) + { + /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ + unsigned amount = len > 5550 ? 5550 : len; + len -= amount; + while(amount > 0) + { + s1 += (*data++); + s2 += s1; + --amount; + } + s1 %= 65521; + s2 %= 65521; + } + + return (s2 << 16) | s1; +} + +/*Return the adler32 of the bytes data[0..len-1]*/ +static unsigned adler32(const unsigned char* data, unsigned len) +{ + return update_adler32(1L, data, len); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Zlib / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + unsigned error = 0; + unsigned CM, CINFO, FDICT; + + if(insize < 2) return 53; /*error, size of zlib data too small*/ + /*read information from zlib header*/ + if((in[0] * 256 + in[1]) % 31 != 0) + { + /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ + return 24; + } + + CM = in[0] & 15; + CINFO = (in[0] >> 4) & 15; + /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ + FDICT = (in[1] >> 5) & 1; + /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ + + if(CM != 8 || CINFO > 7) + { + /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ + return 25; + } + if(FDICT != 0) + { + /*error: the specification of PNG says about the zlib stream: + "The additional flags shall not specify a preset dictionary."*/ + return 26; + } + + error = inflate(out, outsize, in + 2, insize - 2, settings); + if(error) return error; + + if(!settings->ignore_adler32) + { + unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); + unsigned checksum = adler32(*out, (unsigned)(*outsize)); + if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ + } + + return 0; /*no error*/ +} + +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if(settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_decompress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + /*initially, *out must be NULL and outsize 0, if you just give some random *out + that's pointing to a non allocated buffer, this'll crash*/ + ucvector outv; + size_t i; + unsigned error; + unsigned char* deflatedata = 0; + size_t deflatesize = 0; + + /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ + unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ + unsigned FLEVEL = 0; + unsigned FDICT = 0; + unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; + unsigned FCHECK = 31 - CMFFLG % 31; + CMFFLG += FCHECK; + + /*ucvector-controlled version of the output buffer, for dynamic array*/ + ucvector_init_buffer(&outv, *out, *outsize); + + ucvector_push_back(&outv, (unsigned char)(CMFFLG >> 8)); + ucvector_push_back(&outv, (unsigned char)(CMFFLG & 255)); + + error = deflate(&deflatedata, &deflatesize, in, insize, settings); + + if(!error) + { + unsigned ADLER32 = adler32(in, (unsigned)insize); + for(i = 0; i != deflatesize; ++i) ucvector_push_back(&outv, deflatedata[i]); + lodepng_free(deflatedata); + lodepng_add32bitInt(&outv, ADLER32); + } + + *out = outv.data; + *outsize = outv.size; + + return error; +} + +/* compress using the default or custom zlib function */ +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if(settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_compress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#else /*no LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DECODER +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if(!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if(!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/*this is a good tradeoff between speed and compression ratio*/ +#define DEFAULT_WINDOWSIZE 2048 + +void lodepng_compress_settings_init(LodePNGCompressSettings* settings) +{ + /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ + settings->btype = 2; + settings->use_lz77 = 1; + settings->windowsize = DEFAULT_WINDOWSIZE; + settings->minmatch = 3; + settings->nicematch = 128; + settings->lazymatching = 1; + + settings->custom_zlib = 0; + settings->custom_deflate = 0; + settings->custom_context = 0; +} + +const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0}; + + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) +{ + settings->ignore_adler32 = 0; + + settings->custom_zlib = 0; + settings->custom_inflate = 0; + settings->custom_context = 0; +} + +const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0}; + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of Zlib related code. Begin of PNG related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / CRC32 / */ +/* ////////////////////////////////////////////////////////////////////////// */ + + +#ifndef LODEPNG_NO_COMPILE_CRC +/* CRC polynomial: 0xedb88320 */ +static unsigned lodepng_crc32_table[256] = { + 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, + 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, + 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, + 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, + 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, + 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, + 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, + 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, + 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, + 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, + 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, + 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, + 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, + 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, + 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, + 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, + 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, + 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, + 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, + 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, + 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, + 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, + 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, + 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, + 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, + 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, + 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, + 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, + 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, + 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, + 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, + 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u +}; + +/*Return the CRC of the bytes buf[0..len-1].*/ +unsigned lodepng_crc32(const unsigned char* data, size_t length) +{ + unsigned r = 0xffffffffu; + size_t i; + for(i = 0; i < length; ++i) + { + r = lodepng_crc32_table[(r ^ data[i]) & 0xff] ^ (r >> 8); + } + return r ^ 0xffffffffu; +} +#else /* !LODEPNG_NO_COMPILE_CRC */ +unsigned lodepng_crc32(const unsigned char* data, size_t length); +#endif /* !LODEPNG_NO_COMPILE_CRC */ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Reading and writing single bits and bytes from/to stream for LodePNG / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); + ++(*bitpointer); + return result; +} + +static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0; + size_t i; + for(i = 0 ; i < nbits; ++i) + { + result <<= 1; + result |= (unsigned)readBitFromReversedStream(bitpointer, bitstream); + } + return result; +} + +#ifdef LODEPNG_COMPILE_DECODER +static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream must be 0 for this to work*/ + if(bit) + { + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ + bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); + } + ++(*bitpointer); +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream may be 0 or 1 for this to work*/ + if(bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); + else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); + ++(*bitpointer); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG chunks / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_chunk_length(const unsigned char* chunk) +{ + return lodepng_read32bitInt(&chunk[0]); +} + +void lodepng_chunk_type(char type[5], const unsigned char* chunk) +{ + unsigned i; + for(i = 0; i != 4; ++i) type[i] = (char)chunk[4 + i]; + type[4] = 0; /*null termination char*/ +} + +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) +{ + if(strlen(type) != 4) return 0; + return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); +} + +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) +{ + return((chunk[4] & 32) != 0); +} + +unsigned char lodepng_chunk_private(const unsigned char* chunk) +{ + return((chunk[6] & 32) != 0); +} + +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) +{ + return((chunk[7] & 32) != 0); +} + +unsigned char* lodepng_chunk_data(unsigned char* chunk) +{ + return &chunk[8]; +} + +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) +{ + return &chunk[8]; +} + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); + /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ + unsigned checksum = lodepng_crc32(&chunk[4], length + 4); + if(CRC != checksum) return 1; + else return 0; +} + +void lodepng_chunk_generate_crc(unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_crc32(&chunk[4], length + 4); + lodepng_set32bitInt(chunk + 8 + length, CRC); +} + +unsigned char* lodepng_chunk_next(unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) +{ + unsigned i; + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + unsigned char *chunk_start, *new_buffer; + size_t new_length = (*outlength) + total_chunk_length; + if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ + + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk_start = &(*out)[new_length - total_chunk_length]; + + for(i = 0; i != total_chunk_length; ++i) chunk_start[i] = chunk[i]; + + return 0; +} + +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data) +{ + unsigned i; + unsigned char *chunk, *new_buffer; + size_t new_length = (*outlength) + length + 12; + if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk = &(*out)[(*outlength) - length - 12]; + + /*1: length*/ + lodepng_set32bitInt(chunk, (unsigned)length); + + /*2: chunk name (4 letters)*/ + chunk[4] = (unsigned char)type[0]; + chunk[5] = (unsigned char)type[1]; + chunk[6] = (unsigned char)type[2]; + chunk[7] = (unsigned char)type[3]; + + /*3: the data*/ + for(i = 0; i != length; ++i) chunk[8 + i] = data[i]; + + /*4: CRC (of the chunkname characters and the data)*/ + lodepng_chunk_generate_crc(chunk); + + return 0; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Color types and such / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*return type is a LodePNG error code*/ +static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ +{ + switch(colortype) + { + case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ + case 2: if(!( bd == 8 || bd == 16)) return 37; break; /*RGB*/ + case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 )) return 37; break; /*palette*/ + case 4: if(!( bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ + case 6: if(!( bd == 8 || bd == 16)) return 37; break; /*RGBA*/ + default: return 31; + } + return 0; /*allowed color type / bits combination*/ +} + +static unsigned getNumColorChannels(LodePNGColorType colortype) +{ + switch(colortype) + { + case 0: return 1; /*grey*/ + case 2: return 3; /*RGB*/ + case 3: return 1; /*palette*/ + case 4: return 2; /*grey + alpha*/ + case 6: return 4; /*RGBA*/ + } + return 0; /*unexisting color type*/ +} + +static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) +{ + /*bits per pixel is amount of channels * bits per channel*/ + return getNumColorChannels(colortype) * bitdepth; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +void lodepng_color_mode_init(LodePNGColorMode* info) +{ + info->key_defined = 0; + info->key_r = info->key_g = info->key_b = 0; + info->colortype = LCT_RGBA; + info->bitdepth = 8; + info->palette = 0; + info->palettesize = 0; +} + +void lodepng_color_mode_cleanup(LodePNGColorMode* info) +{ + lodepng_palette_clear(info); +} + +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) +{ + size_t i; + lodepng_color_mode_cleanup(dest); + *dest = *source; + if(source->palette) + { + dest->palette = (unsigned char*)lodepng_malloc(1024); + if(!dest->palette && source->palettesize) return 83; /*alloc fail*/ + for(i = 0; i != source->palettesize * 4; ++i) dest->palette[i] = source->palette[i]; + } + return 0; +} + +static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) +{ + size_t i; + if(a->colortype != b->colortype) return 0; + if(a->bitdepth != b->bitdepth) return 0; + if(a->key_defined != b->key_defined) return 0; + if(a->key_defined) + { + if(a->key_r != b->key_r) return 0; + if(a->key_g != b->key_g) return 0; + if(a->key_b != b->key_b) return 0; + } + /*if one of the palette sizes is 0, then we consider it to be the same as the + other: it means that e.g. the palette was not given by the user and should be + considered the same as the palette inside the PNG.*/ + if(1/*a->palettesize != 0 && b->palettesize != 0*/) { + if(a->palettesize != b->palettesize) return 0; + for(i = 0; i != a->palettesize * 4; ++i) + { + if(a->palette[i] != b->palette[i]) return 0; + } + } + return 1; +} + +void lodepng_palette_clear(LodePNGColorMode* info) +{ + if(info->palette) lodepng_free(info->palette); + info->palette = 0; + info->palettesize = 0; +} + +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + unsigned char* data; + /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with + the max of 256 colors, it'll have the exact alloc size*/ + if(!info->palette) /*allocate palette if empty*/ + { + /*room for 256 colors with 4 bytes each*/ + data = (unsigned char*)lodepng_realloc(info->palette, 1024); + if(!data) return 83; /*alloc fail*/ + else info->palette = data; + } + info->palette[4 * info->palettesize + 0] = r; + info->palette[4 * info->palettesize + 1] = g; + info->palette[4 * info->palettesize + 2] = b; + info->palette[4 * info->palettesize + 3] = a; + ++info->palettesize; + return 0; +} + +unsigned lodepng_get_bpp(const LodePNGColorMode* info) +{ + /*calculate bits per pixel out of colortype and bitdepth*/ + return lodepng_get_bpp_lct(info->colortype, info->bitdepth); +} + +unsigned lodepng_get_channels(const LodePNGColorMode* info) +{ + return getNumColorChannels(info->colortype); +} + +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; +} + +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) +{ + return (info->colortype & 4) != 0; /*4 or 6*/ +} + +unsigned lodepng_is_palette_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_PALETTE; +} + +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) +{ + size_t i; + for(i = 0; i != info->palettesize; ++i) + { + if(info->palette[i * 4 + 3] < 255) return 1; + } + return 0; +} + +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) +{ + return info->key_defined + || lodepng_is_alpha_type(info) + || lodepng_has_palette_alpha(info); +} + +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp(color); + size_t n = w * h; + return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; +} + +size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp_lct(colortype, bitdepth); + size_t n = w * h; + return ((n / 8) * bpp) + ((n & 7) * bpp + 7) / 8; +} + + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_DECODER +/*in an idat chunk, each scanline is a multiple of 8 bits, unlike the lodepng output buffer*/ +static size_t lodepng_get_raw_size_idat(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + /*will not overflow for any color type if roughly w * h < 268435455*/ + size_t bpp = lodepng_get_bpp(color); + size_t line = ((w / 8) * bpp) + ((w & 7) * bpp + 7) / 8; + return h * line; +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static void LodePNGUnknownChunks_init(LodePNGInfo* info) +{ + unsigned i; + for(i = 0; i != 3; ++i) info->unknown_chunks_data[i] = 0; + for(i = 0; i != 3; ++i) info->unknown_chunks_size[i] = 0; +} + +static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) +{ + unsigned i; + for(i = 0; i != 3; ++i) lodepng_free(info->unknown_chunks_data[i]); +} + +static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) +{ + unsigned i; + + LodePNGUnknownChunks_cleanup(dest); + + for(i = 0; i != 3; ++i) + { + size_t j; + dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; + dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); + if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ + for(j = 0; j < src->unknown_chunks_size[i]; ++j) + { + dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; + } + } + + return 0; +} + +/******************************************************************************/ + +static void LodePNGText_init(LodePNGInfo* info) +{ + info->text_num = 0; + info->text_keys = NULL; + info->text_strings = NULL; +} + +static void LodePNGText_cleanup(LodePNGInfo* info) +{ + size_t i; + for(i = 0; i != info->text_num; ++i) + { + string_cleanup(&info->text_keys[i]); + string_cleanup(&info->text_strings[i]); + } + lodepng_free(info->text_keys); + lodepng_free(info->text_strings); +} + +static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->text_keys = 0; + dest->text_strings = 0; + dest->text_num = 0; + for(i = 0; i != source->text_num; ++i) + { + CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); + } + return 0; +} + +void lodepng_clear_text(LodePNGInfo* info) +{ + LodePNGText_cleanup(info); +} + +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); + if(!new_keys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + ++info->text_num; + info->text_keys = new_keys; + info->text_strings = new_strings; + + string_init(&info->text_keys[info->text_num - 1]); + string_set(&info->text_keys[info->text_num - 1], key); + + string_init(&info->text_strings[info->text_num - 1]); + string_set(&info->text_strings[info->text_num - 1], str); + + return 0; +} + +/******************************************************************************/ + +static void LodePNGIText_init(LodePNGInfo* info) +{ + info->itext_num = 0; + info->itext_keys = NULL; + info->itext_langtags = NULL; + info->itext_transkeys = NULL; + info->itext_strings = NULL; +} + +static void LodePNGIText_cleanup(LodePNGInfo* info) +{ + size_t i; + for(i = 0; i != info->itext_num; ++i) + { + string_cleanup(&info->itext_keys[i]); + string_cleanup(&info->itext_langtags[i]); + string_cleanup(&info->itext_transkeys[i]); + string_cleanup(&info->itext_strings[i]); + } + lodepng_free(info->itext_keys); + lodepng_free(info->itext_langtags); + lodepng_free(info->itext_transkeys); + lodepng_free(info->itext_strings); +} + +static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->itext_keys = 0; + dest->itext_langtags = 0; + dest->itext_transkeys = 0; + dest->itext_strings = 0; + dest->itext_num = 0; + for(i = 0; i != source->itext_num; ++i) + { + CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], + source->itext_transkeys[i], source->itext_strings[i])); + } + return 0; +} + +void lodepng_clear_itext(LodePNGInfo* info) +{ + LodePNGIText_cleanup(info); +} + +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); + char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); + char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); + if(!new_keys || !new_langtags || !new_transkeys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_langtags); + lodepng_free(new_transkeys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + ++info->itext_num; + info->itext_keys = new_keys; + info->itext_langtags = new_langtags; + info->itext_transkeys = new_transkeys; + info->itext_strings = new_strings; + + string_init(&info->itext_keys[info->itext_num - 1]); + string_set(&info->itext_keys[info->itext_num - 1], key); + + string_init(&info->itext_langtags[info->itext_num - 1]); + string_set(&info->itext_langtags[info->itext_num - 1], langtag); + + string_init(&info->itext_transkeys[info->itext_num - 1]); + string_set(&info->itext_transkeys[info->itext_num - 1], transkey); + + string_init(&info->itext_strings[info->itext_num - 1]); + string_set(&info->itext_strings[info->itext_num - 1], str); + + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +void lodepng_info_init(LodePNGInfo* info) +{ + lodepng_color_mode_init(&info->color); + info->interlace_method = 0; + info->compression_method = 0; + info->filter_method = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + info->background_defined = 0; + info->background_r = info->background_g = info->background_b = 0; + + LodePNGText_init(info); + LodePNGIText_init(info); + + info->time_defined = 0; + info->phys_defined = 0; + + LodePNGUnknownChunks_init(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +void lodepng_info_cleanup(LodePNGInfo* info) +{ + lodepng_color_mode_cleanup(&info->color); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + LodePNGText_cleanup(info); + LodePNGIText_cleanup(info); + + LodePNGUnknownChunks_cleanup(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + lodepng_info_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->color); + CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); + CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); + + LodePNGUnknownChunks_init(dest); + CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + return 0; +} + +void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) +{ + LodePNGInfo temp = *a; + *a = *b; + *b = temp; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ +static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) +{ + unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ + /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ + unsigned p = index & m; + in &= (1u << bits) - 1u; /*filter out any other bits of the input value*/ + in = in << (bits * (m - p)); + if(p == 0) out[index * bits / 8] = in; + else out[index * bits / 8] |= in; +} + +typedef struct ColorTree ColorTree; + +/* +One node of a color tree +This is the data structure used to count the number of unique colors and to get a palette +index for a color. It's like an octree, but because the alpha channel is used too, each +node has 16 instead of 8 children. +*/ +struct ColorTree +{ + ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ + int index; /*the payload. Only has a meaningful value if this is in the last level*/ +}; + +static void color_tree_init(ColorTree* tree) +{ + int i; + for(i = 0; i != 16; ++i) tree->children[i] = 0; + tree->index = -1; +} + +static void color_tree_cleanup(ColorTree* tree) +{ + int i; + for(i = 0; i != 16; ++i) + { + if(tree->children[i]) + { + color_tree_cleanup(tree->children[i]); + lodepng_free(tree->children[i]); + } + } +} + +/*returns -1 if color not present, its index otherwise*/ +static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + int bit = 0; + for(bit = 0; bit < 8; ++bit) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) return -1; + else tree = tree->children[i]; + } + return tree ? tree->index : -1; +} + +#ifdef LODEPNG_COMPILE_ENCODER +static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return color_tree_get(tree, r, g, b, a) >= 0; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*color is not allowed to already exist. +Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/ +static void color_tree_add(ColorTree* tree, + unsigned char r, unsigned char g, unsigned char b, unsigned char a, unsigned index) +{ + int bit; + for(bit = 0; bit < 8; ++bit) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) + { + tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); + color_tree_init(tree->children[i]); + } + tree = tree->children[i]; + } + tree->index = (int)index; +} + +/*put a pixel, given its RGBA color, into image of any color type*/ +static unsigned rgba8ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + if(mode->colortype == LCT_GREY) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if(mode->bitdepth == 8) out[i] = grey; + else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey; + else + { + /*take the most significant bits of grey*/ + grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1); + addColorBits(out, i, mode->bitdepth, grey); + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + out[i * 3 + 0] = r; + out[i * 3 + 1] = g; + out[i * 3 + 2] = b; + } + else + { + out[i * 6 + 0] = out[i * 6 + 1] = r; + out[i * 6 + 2] = out[i * 6 + 3] = g; + out[i * 6 + 4] = out[i * 6 + 5] = b; + } + } + else if(mode->colortype == LCT_PALETTE) + { + int index = color_tree_get(tree, r, g, b, a); + if(index < 0) return 82; /*color not in palette*/ + if(mode->bitdepth == 8) out[i] = index; + else addColorBits(out, i, mode->bitdepth, (unsigned)index); + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if(mode->bitdepth == 8) + { + out[i * 2 + 0] = grey; + out[i * 2 + 1] = a; + } + else if(mode->bitdepth == 16) + { + out[i * 4 + 0] = out[i * 4 + 1] = grey; + out[i * 4 + 2] = out[i * 4 + 3] = a; + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + out[i * 4 + 0] = r; + out[i * 4 + 1] = g; + out[i * 4 + 2] = b; + out[i * 4 + 3] = a; + } + else + { + out[i * 8 + 0] = out[i * 8 + 1] = r; + out[i * 8 + 2] = out[i * 8 + 3] = g; + out[i * 8 + 4] = out[i * 8 + 5] = b; + out[i * 8 + 6] = out[i * 8 + 7] = a; + } + } + + return 0; /*no error*/ +} + +/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ +static void rgba16ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, + unsigned short r, unsigned short g, unsigned short b, unsigned short a) +{ + if(mode->colortype == LCT_GREY) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 2 + 0] = (grey >> 8) & 255; + out[i * 2 + 1] = grey & 255; + } + else if(mode->colortype == LCT_RGB) + { + out[i * 6 + 0] = (r >> 8) & 255; + out[i * 6 + 1] = r & 255; + out[i * 6 + 2] = (g >> 8) & 255; + out[i * 6 + 3] = g & 255; + out[i * 6 + 4] = (b >> 8) & 255; + out[i * 6 + 5] = b & 255; + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 4 + 0] = (grey >> 8) & 255; + out[i * 4 + 1] = grey & 255; + out[i * 4 + 2] = (a >> 8) & 255; + out[i * 4 + 3] = a & 255; + } + else if(mode->colortype == LCT_RGBA) + { + out[i * 8 + 0] = (r >> 8) & 255; + out[i * 8 + 1] = r & 255; + out[i * 8 + 2] = (g >> 8) & 255; + out[i * 8 + 3] = g & 255; + out[i * 8 + 4] = (b >> 8) & 255; + out[i * 8 + 5] = b & 255; + out[i * 8 + 6] = (a >> 8) & 255; + out[i * 8 + 7] = a & 255; + } +} + +/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ +static void getPixelColorRGBA8(unsigned char* r, unsigned char* g, + unsigned char* b, unsigned char* a, + const unsigned char* in, size_t i, + const LodePNGColorMode* mode) +{ + if(mode->colortype == LCT_GREY) + { + if(mode->bitdepth == 8) + { + *r = *g = *b = in[i]; + if(mode->key_defined && *r == mode->key_r) *a = 0; + else *a = 255; + } + else if(mode->bitdepth == 16) + { + *r = *g = *b = in[i * 2 + 0]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 255; + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = i * mode->bitdepth; + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + *r = *g = *b = (value * 255) / highest; + if(mode->key_defined && value == mode->key_r) *a = 0; + else *a = 255; + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; + if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; + else *a = 255; + } + else + { + *r = in[i * 6 + 0]; + *g = in[i * 6 + 2]; + *b = in[i * 6 + 4]; + if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 255; + } + } + else if(mode->colortype == LCT_PALETTE) + { + unsigned index; + if(mode->bitdepth == 8) index = in[i]; + else + { + size_t j = i * mode->bitdepth; + index = readBitsFromReversedStream(&j, in, mode->bitdepth); + } + + if(index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but common PNG decoders make it black instead. + Done here too, slightly faster due to no error handling needed.*/ + *r = *g = *b = 0; + *a = 255; + } + else + { + *r = mode->palette[index * 4 + 0]; + *g = mode->palette[index * 4 + 1]; + *b = mode->palette[index * 4 + 2]; + *a = mode->palette[index * 4 + 3]; + } + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + if(mode->bitdepth == 8) + { + *r = *g = *b = in[i * 2 + 0]; + *a = in[i * 2 + 1]; + } + else + { + *r = *g = *b = in[i * 4 + 0]; + *a = in[i * 4 + 2]; + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + *r = in[i * 4 + 0]; + *g = in[i * 4 + 1]; + *b = in[i * 4 + 2]; + *a = in[i * 4 + 3]; + } + else + { + *r = in[i * 8 + 0]; + *g = in[i * 8 + 2]; + *b = in[i * 8 + 4]; + *a = in[i * 8 + 6]; + } + } +} + +/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color +mode test cases, optimized to convert the colors much faster, when converting +to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with +enough memory, if has_alpha is true the output is RGBA. mode has the color mode +of the input buffer.*/ +static void getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels, + unsigned has_alpha, const unsigned char* in, + const LodePNGColorMode* mode) +{ + unsigned num_channels = has_alpha ? 4 : 3; + size_t i; + if(mode->colortype == LCT_GREY) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i]; + if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255; + } + } + else if(mode->bitdepth == 16) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2]; + if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; + } + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; + if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; + } + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 3 + 0]; + buffer[1] = in[i * 3 + 1]; + buffer[2] = in[i * 3 + 2]; + if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r + && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255; + } + } + else + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 6 + 0]; + buffer[1] = in[i * 6 + 2]; + buffer[2] = in[i * 6 + 4]; + if(has_alpha) buffer[3] = mode->key_defined + && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; + } + } + } + else if(mode->colortype == LCT_PALETTE) + { + unsigned index; + size_t j = 0; + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + if(mode->bitdepth == 8) index = in[i]; + else index = readBitsFromReversedStream(&j, in, mode->bitdepth); + + if(index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but most PNG decoders make it black instead. + Done here too, slightly faster due to no error handling needed.*/ + buffer[0] = buffer[1] = buffer[2] = 0; + if(has_alpha) buffer[3] = 255; + } + else + { + buffer[0] = mode->palette[index * 4 + 0]; + buffer[1] = mode->palette[index * 4 + 1]; + buffer[2] = mode->palette[index * 4 + 2]; + if(has_alpha) buffer[3] = mode->palette[index * 4 + 3]; + } + } + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; + if(has_alpha) buffer[3] = in[i * 2 + 1]; + } + } + else + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; + if(has_alpha) buffer[3] = in[i * 4 + 2]; + } + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 4 + 0]; + buffer[1] = in[i * 4 + 1]; + buffer[2] = in[i * 4 + 2]; + if(has_alpha) buffer[3] = in[i * 4 + 3]; + } + } + else + { + for(i = 0; i != numpixels; ++i, buffer += num_channels) + { + buffer[0] = in[i * 8 + 0]; + buffer[1] = in[i * 8 + 2]; + buffer[2] = in[i * 8 + 4]; + if(has_alpha) buffer[3] = in[i * 8 + 6]; + } + } + } +} + +/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with +given color type, but the given color type must be 16-bit itself.*/ +static void getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, + const unsigned char* in, size_t i, const LodePNGColorMode* mode) +{ + if(mode->colortype == LCT_GREY) + { + *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 65535; + } + else if(mode->colortype == LCT_RGB) + { + *r = 256u * in[i * 6 + 0] + in[i * 6 + 1]; + *g = 256u * in[i * 6 + 2] + in[i * 6 + 3]; + *b = 256u * in[i * 6 + 4] + in[i * 6 + 5]; + if(mode->key_defined + && 256u * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256u * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256u * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 65535; + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + *r = *g = *b = 256u * in[i * 4 + 0] + in[i * 4 + 1]; + *a = 256u * in[i * 4 + 2] + in[i * 4 + 3]; + } + else if(mode->colortype == LCT_RGBA) + { + *r = 256u * in[i * 8 + 0] + in[i * 8 + 1]; + *g = 256u * in[i * 8 + 2] + in[i * 8 + 3]; + *b = 256u * in[i * 8 + 4] + in[i * 8 + 5]; + *a = 256u * in[i * 8 + 6] + in[i * 8 + 7]; + } +} + +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h) +{ + size_t i; + ColorTree tree; + size_t numpixels = w * h; + + if(lodepng_color_mode_equal(mode_out, mode_in)) + { + size_t numbytes = lodepng_get_raw_size(w, h, mode_in); + for(i = 0; i != numbytes; ++i) out[i] = in[i]; + return 0; + } + + if(mode_out->colortype == LCT_PALETTE) + { + size_t palettesize = mode_out->palettesize; + const unsigned char* palette = mode_out->palette; + size_t palsize = size_t(1) << mode_out->bitdepth; + /*if the user specified output palette but did not give the values, assume + they want the values of the input color type (assuming that one is palette). + Note that we never create a new palette ourselves.*/ + if(palettesize == 0) + { + palettesize = mode_in->palettesize; + palette = mode_in->palette; + } + if(palettesize < palsize) palsize = palettesize; + color_tree_init(&tree); + for(i = 0; i != palsize; ++i) + { + const unsigned char* p = &palette[i * 4]; + color_tree_add(&tree, p[0], p[1], p[2], p[3], (unsigned int)(i)); + } + } + + if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16) + { + for(i = 0; i != numpixels; ++i) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + rgba16ToPixel(out, i, mode_out, r, g, b, a); + } + } + else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) + { + getPixelColorsRGBA8(out, numpixels, 1, in, mode_in); + } + else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) + { + getPixelColorsRGBA8(out, numpixels, 0, in, mode_in); + } + else + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in); + CERROR_TRY_RETURN(rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a)); + } + } + + if(mode_out->colortype == LCT_PALETTE) + { + color_tree_cleanup(&tree); + } + + return 0; /*no error*/ +} + +#ifdef LODEPNG_COMPILE_ENCODER + +void lodepng_color_profile_init(LodePNGColorProfile* profile) +{ + profile->colored = 0; + profile->key = 0; + profile->alpha = 0; + profile->key_r = profile->key_g = profile->key_b = 0; + profile->numcolors = 0; + profile->bits = 1; +} + +/*function used for debug purposes with C++*/ +/*void printColorProfile(LodePNGColorProfile* p) +{ + std::cout << "colored: " << (int)p->colored << ", "; + std::cout << "key: " << (int)p->key << ", "; + std::cout << "key_r: " << (int)p->key_r << ", "; + std::cout << "key_g: " << (int)p->key_g << ", "; + std::cout << "key_b: " << (int)p->key_b << ", "; + std::cout << "alpha: " << (int)p->alpha << ", "; + std::cout << "numcolors: " << (int)p->numcolors << ", "; + std::cout << "bits: " << (int)p->bits << std::endl; +}*/ + +/*Returns how many bits needed to represent given value (max 8 bit)*/ +static unsigned getValueRequiredBits(unsigned char value) +{ + if(value == 0 || value == 255) return 1; + /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ + if(value % 17 == 0) return value % 85 == 0 ? 2 : 4; + return 8; +} + +/*profile must already have been inited with mode. +It's ok to set some parameters of profile to done already.*/ +unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, + const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* mode) +{ + unsigned error = 0; + size_t i; + ColorTree tree; + size_t numpixels = w * h; + + unsigned colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0; + unsigned alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1; + unsigned numcolors_done = 0; + unsigned bpp = lodepng_get_bpp(mode); + unsigned bits_done = bpp == 1 ? 1 : 0; + unsigned maxnumcolors = 257; + unsigned sixteen = 0; + if(bpp <= 8) maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256)); + + color_tree_init(&tree); + + /*Check if the 16-bit input is truly 16-bit*/ + if(mode->bitdepth == 16) + { + unsigned short r, g, b, a; + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if((r & 255) != ((r >> 8) & 255) || (g & 255) != ((g >> 8) & 255) || + (b & 255) != ((b >> 8) & 255) || (a & 255) != ((a >> 8) & 255)) /*first and second byte differ*/ + { + sixteen = 1; + break; + } + } + } + + if(sixteen) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + profile->bits = 16; + bits_done = numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ + + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + + if(!colored_done && (r != g || r != b)) + { + profile->colored = 1; + colored_done = 1; + } + + if(!alpha_done) + { + unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); + if(a != 65535 && (a != 0 || (profile->key && !matchkey))) + { + profile->alpha = 1; + alpha_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + else if(a == 0 && !profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + else if(a == 65535 && profile->key && matchkey) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + } + } + if(alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if(profile->key && !profile->alpha) + { + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + } + } + } + } + else /* < 16-bit */ + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); + + if(!bits_done && profile->bits < 8) + { + /*only r is checked, < 8 bits is only relevant for greyscale*/ + unsigned bits = getValueRequiredBits(r); + if(bits > profile->bits) profile->bits = bits; + } + bits_done = (profile->bits >= bpp); + + if(!colored_done && (r != g || r != b)) + { + profile->colored = 1; + colored_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no colored modes with less than 8-bit per channel*/ + } + + if(!alpha_done) + { + unsigned matchkey = (r == profile->key_r && g == profile->key_g && b == profile->key_b); + if(a != 255 && (a != 0 || (profile->key && !matchkey))) + { + profile->alpha = 1; + alpha_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + else if(a == 0 && !profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + else if(a == 255 && profile->key && matchkey) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + if(profile->bits < 8) profile->bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + } + + if(!numcolors_done) + { + if(!color_tree_has(&tree, r, g, b, a)) + { + color_tree_add(&tree, r, g, b, a, profile->numcolors); + if(profile->numcolors < 256) + { + unsigned char* p = profile->palette; + unsigned n = profile->numcolors; + p[n * 4 + 0] = r; + p[n * 4 + 1] = g; + p[n * 4 + 2] = b; + p[n * 4 + 3] = a; + } + ++profile->numcolors; + numcolors_done = profile->numcolors >= maxnumcolors; + } + } + + if(alpha_done && numcolors_done && colored_done && bits_done) break; + } + + if(profile->key && !profile->alpha) + { + for(i = 0; i != numpixels; ++i) + { + getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode); + if(a != 0 && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + profile->alpha = 1; + alpha_done = 1; + } + } + } + + /*make the profile's key always 16-bit for consistency - repeat each byte twice*/ + profile->key_r += (profile->key_r << 8); + profile->key_g += (profile->key_g << 8); + profile->key_b += (profile->key_b << 8); + } + + color_tree_cleanup(&tree); + return error; +} + +/*Automatically chooses color type that gives smallest amount of bits in the +output image, e.g. grey if there are only greyscale pixels, palette if there +are less than 256 colors, ... +Updates values of mode with a potentially smaller color model. mode_out should +contain the user chosen color model, but will be overwritten with the new chosen one.*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in) +{ + LodePNGColorProfile prof; + unsigned error = 0; + unsigned i, n, palettebits, grey_ok, palette_ok; + + lodepng_color_profile_init(&prof); + error = lodepng_get_color_profile(&prof, image, w, h, mode_in); + if(error) return error; + mode_out->key_defined = 0; + + if(prof.key && w * h <= 16) + { + prof.alpha = 1; /*too few pixels to justify tRNS chunk overhead*/ + if(prof.bits < 8) prof.bits = 8; /*PNG has no alphachannel modes with less than 8-bit per channel*/ + } + grey_ok = !prof.colored && !prof.alpha; /*grey without alpha, with potentially low bits*/ + n = prof.numcolors; + palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); + palette_ok = n <= 256 && (n * 2 < w * h) && prof.bits <= 8; + if(w * h < n * 2) palette_ok = 0; /*don't add palette overhead if image has only a few pixels*/ + if(grey_ok && prof.bits <= palettebits) palette_ok = 0; /*grey is less overhead*/ + + if(palette_ok) + { + unsigned char* p = prof.palette; + lodepng_palette_clear(mode_out); /*remove potential earlier palette*/ + for(i = 0; i != prof.numcolors; ++i) + { + error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); + if(error) break; + } + + mode_out->colortype = LCT_PALETTE; + mode_out->bitdepth = palettebits; + + if(mode_in->colortype == LCT_PALETTE && mode_in->palettesize >= mode_out->palettesize + && mode_in->bitdepth == mode_out->bitdepth) + { + /*If input should have same palette colors, keep original to preserve its order and prevent conversion*/ + lodepng_color_mode_cleanup(mode_out); + lodepng_color_mode_copy(mode_out, mode_in); + } + } + else /*8-bit or 16-bit per channel*/ + { + mode_out->bitdepth = prof.bits; + mode_out->colortype = prof.alpha ? (prof.colored ? LCT_RGBA : LCT_GREY_ALPHA) + : (prof.colored ? LCT_RGB : LCT_GREY); + + if(prof.key && !prof.alpha) + { + unsigned mask = (1u << mode_out->bitdepth) - 1u; /*profile always uses 16-bit, mask converts it*/ + mode_out->key_r = prof.key_r & mask; + mode_out->key_g = prof.key_g & mask; + mode_out->key_b = prof.key_b & mask; + mode_out->key_defined = 1; + } + } + + return error; +} + +#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ + +/* +Paeth predicter, used by PNG filter type 4 +The parameters are of type short, but should come from unsigned chars, the shorts +are only needed to make the paeth calculation correct. +*/ +static unsigned char paethPredictor(short a, short b, short c) +{ + short pa = abs(b - c); + short pb = abs(a - c); + short pc = abs(a + b - c - c); + + if(pc < pa && pc < pb) return (unsigned char)c; + else if(pb < pa) return (unsigned char)b; + else return (unsigned char)a; +} + +/*shared values used by multiple Adam7 related functions*/ + +static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ +static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ +static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ +static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ + +/* +Outputs various dimensions and positions in the image related to the Adam7 reduced images. +passw: output containing the width of the 7 passes +passh: output containing the height of the 7 passes +filter_passstart: output containing the index of the start and end of each + reduced image with filter bytes +padded_passstart output containing the index of the start and end of each + reduced image when without filter bytes but with padded scanlines +passstart: output containing the index of the start and end of each reduced + image without padding between scanlines, but still padding between the images +w, h: width and height of non-interlaced image +bpp: bits per pixel +"padded" is only relevant if bpp is less than 8 and a scanline or image does not + end at a full byte +*/ +static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], + size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) +{ + /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ + unsigned i; + + /*calculate width and height in pixels of each pass*/ + for(i = 0; i != 7; ++i) + { + passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; + passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; + if(passw[i] == 0) passh[i] = 0; + if(passh[i] == 0) passw[i] = 0; + } + + filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; + for(i = 0; i != 7; ++i) + { + /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ + filter_passstart[i + 1] = filter_passstart[i] + + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); + /*bits padded if needed to fill full byte at end of each scanline*/ + padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); + /*only padded at end of reduced image*/ + passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; + } +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Decoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*read the information from the header and store it in the LodePNGInfo. return value is error*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, + const unsigned char* in, size_t insize) +{ + LodePNGInfo* info = &state->info_png; + if(insize == 0 || in == 0) + { + CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ + } + if(insize < 33) + { + CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ + } + + /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ + lodepng_info_cleanup(info); + lodepng_info_init(info); + + if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 + || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) + { + CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ + } + if(lodepng_chunk_length(in + 8) != 13) + { + CERROR_RETURN_ERROR(state->error, 94); /*error: header size must be 13 bytes*/ + } + if(!lodepng_chunk_type_equals(in + 8, "IHDR")) + { + CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ + } + + /*read the values given in the header*/ + *w = lodepng_read32bitInt(&in[16]); + *h = lodepng_read32bitInt(&in[20]); + info->color.bitdepth = in[24]; + info->color.colortype = (LodePNGColorType)in[25]; + info->compression_method = in[26]; + info->filter_method = in[27]; + info->interlace_method = in[28]; + + if(*w == 0 || *h == 0) + { + CERROR_RETURN_ERROR(state->error, 93); + } + + if(!state->decoder.ignore_crc) + { + unsigned CRC = lodepng_read32bitInt(&in[29]); + unsigned checksum = lodepng_crc32(&in[12], 17); + if(CRC != checksum) + { + CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ + } + } + + /*error: only compression method 0 is allowed in the specification*/ + if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); + /*error: only filter method 0 is allowed in the specification*/ + if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); + /*error: only interlace methods 0 and 1 exist in the specification*/ + if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); + + state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); + return state->error; +} + +static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, + size_t bytewidth, unsigned char filterType, size_t length) +{ + /* + For PNG filter method 0 + unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, + the filter works byte per byte (bytewidth = 1) + precon is the previous unfiltered scanline, recon the result, scanline the current one + the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead + recon and scanline MAY be the same memory address! precon must be disjoint. + */ + + size_t i; + switch(filterType) + { + case 0: + for(i = 0; i != length; ++i) recon[i] = scanline[i]; + break; + case 1: + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + recon[i - bytewidth]; + break; + case 2: + if(precon) + { + for(i = 0; i != length; ++i) recon[i] = scanline[i] + precon[i]; + } + else + { + for(i = 0; i != length; ++i) recon[i] = scanline[i]; + } + break; + case 3: + if(precon) + { + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i] + (precon[i] >> 1); + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) >> 1); + } + else + { + for(i = 0; i != bytewidth; ++i) recon[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) recon[i] = scanline[i] + (recon[i - bytewidth] >> 1); + } + break; + case 4: + if(precon) + { + for(i = 0; i != bytewidth; ++i) + { + recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ + } + for(i = bytewidth; i < length; ++i) + { + recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); + } + } + else + { + for(i = 0; i != bytewidth; ++i) + { + recon[i] = scanline[i]; + } + for(i = bytewidth; i < length; ++i) + { + /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ + recon[i] = (scanline[i] + recon[i - bytewidth]); + } + } + break; + default: return 36; /*error: unexisting filter type given*/ + } + return 0; +} + +static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + /* + For PNG filter method 0 + this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) + out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline + w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel + in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) + */ + + unsigned y; + unsigned char* prevline = 0; + + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + size_t linebytes = (w * bpp + 7) / 8; + + for(y = 0; y < h; ++y) + { + size_t outindex = linebytes * y; + size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + unsigned char filterType = in[inindex]; + + CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); + + prevline = &out[outindex]; + } + + return 0; +} + +/* +in: Adam7 interlaced image, with no padding bits between scanlines, but between + reduced images so that each reduced image starts at a byte. +out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h +bpp: bits per pixel +out has the following size in bits: w * h * bpp. +in is possibly bigger due to padding bits between reduced images. +out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation +(because that's likely a little bit faster) +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; + size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + for(b = 0; b < bytewidth; ++b) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + for(b = 0; b < bpp; ++b) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ + setBitOfReversedStream0(&obp, out, bit); + } + } + } + } +} + +static void removePaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /* + After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need + to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers + for the Adam7 code, the color convert code and the output to the user. + in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must + have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits + also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 + only useful if (ilinebits - olinebits) is a value in the range 1..7 + */ + unsigned y; + size_t diff = ilinebits - olinebits; + size_t ibp = 0, obp = 0; /*input and output bit pointers*/ + for(y = 0; y < h; ++y) + { + size_t x; + for(x = 0; x < olinebits; ++x) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + ibp += diff; + } +} + +/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from +the IDAT chunks (with filter index bytes and possible padding bits) +return value is error*/ +static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, + unsigned w, unsigned h, const LodePNGInfo* info_png) +{ + /* + This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. + Steps: + *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) + *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace + NOTE: the in buffer will be overwritten with intermediate data! + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + if(bpp == 0) return 31; /*error: invalid colortype*/ + + if(info_png->interlace_method == 0) + { + if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); + removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); + } + /*we can immediately filter into the out buffer, no other steps needed*/ + else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + for(i = 0; i != 7; ++i) + { + CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); + /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, + move bytes instead of bits or move not at all*/ + if(bpp < 8) + { + /*remove padding bits in scanlines; after this there still may be padding + bits between the different reduced images: each reduced image still starts nicely at a byte*/ + removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, + ((passw[i] * bpp + 7) / 8) * 8, passh[i]); + } + } + + Adam7_deinterlace(out, in, w, h, bpp); + } + + return 0; +} + +static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned pos = 0, i; + if(color->palette) lodepng_free(color->palette); + color->palettesize = chunkLength / 3; + color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize); + if(!color->palette && color->palettesize) + { + color->palettesize = 0; + return 83; /*alloc fail*/ + } + if(color->palettesize > 256) return 38; /*error: palette too big*/ + + for(i = 0; i != color->palettesize; ++i) + { + color->palette[4 * i + 0] = data[pos++]; /*R*/ + color->palette[4 * i + 1] = data[pos++]; /*G*/ + color->palette[4 * i + 2] = data[pos++]; /*B*/ + color->palette[4 * i + 3] = 255; /*alpha*/ + } + + return 0; /* OK */ +} + +static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned i; + if(color->colortype == LCT_PALETTE) + { + /*error: more alpha values given than there are palette entries*/ + if(chunkLength > color->palettesize) return 38; + + for(i = 0; i != chunkLength; ++i) color->palette[4 * i + 3] = data[i]; + } + else if(color->colortype == LCT_GREY) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if(chunkLength != 2) return 30; + + color->key_defined = 1; + color->key_r = color->key_g = color->key_b = 256u * data[0] + data[1]; + } + else if(color->colortype == LCT_RGB) + { + /*error: this chunk must be 6 bytes for RGB image*/ + if(chunkLength != 6) return 41; + + color->key_defined = 1; + color->key_r = 256u * data[0] + data[1]; + color->key_g = 256u * data[2] + data[3]; + color->key_b = 256u * data[4] + data[5]; + } + else return 42; /*error: tRNS chunk not allowed for other color models*/ + + return 0; /* OK */ +} + + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*background color chunk (bKGD)*/ +static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(info->color.colortype == LCT_PALETTE) + { + /*error: this chunk must be 1 byte for indexed color image*/ + if(chunkLength != 1) return 43; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = data[0]; + } + else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if(chunkLength != 2) return 44; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = 256u * data[0] + data[1]; + } + else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + /*error: this chunk must be 6 bytes for greyscale image*/ + if(chunkLength != 6) return 45; + + info->background_defined = 1; + info->background_r = 256u * data[0] + data[1]; + info->background_g = 256u * data[2] + data[3]; + info->background_b = 256u * data[4] + data[5]; + } + + return 0; /* OK */ +} + +/*text chunk (tEXt)*/ +static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + char *key = 0, *str = 0; + unsigned i; + + while(!error) /*not really a while loop, only used to break on error*/ + { + unsigned length, string2_begin; + + length = 0; + while(length < chunkLength && data[length] != 0) ++length; + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i != length; ++i) key[i] = (char)data[i]; + + string2_begin = length + 1; /*skip keyword null terminator*/ + + length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin; + str = (char*)lodepng_malloc(length + 1); + if(!str) CERROR_BREAK(error, 83); /*alloc fail*/ + + str[length] = 0; + for(i = 0; i != length; ++i) str[i] = (char)data[string2_begin + i]; + + error = lodepng_add_text(info, key, str); + + break; + } + + lodepng_free(key); + lodepng_free(str); + + return error; +} + +/*compressed text chunk (zTXt)*/ +static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, string2_begin; + char *key = 0; + ucvector decoded; + + ucvector_init(&decoded); + + while(!error) /*not really a while loop, only used to break on error*/ + { + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i != length; ++i) key[i] = (char)data[i]; + + if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + string2_begin = length + 2; + if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + + length = chunkLength - string2_begin; + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[string2_begin]), + length, zlibsettings); + if(error) break; + ucvector_push_back(&decoded, 0); + + error = lodepng_add_text(info, key, (char*)decoded.data); + + break; + } + + lodepng_free(key); + ucvector_cleanup(&decoded); + + return error; +} + +/*international text chunk (iTXt)*/ +static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, begin, compressed; + char *key = 0, *langtag = 0, *transkey = 0; + ucvector decoded; + ucvector_init(&decoded); + + while(!error) /*not really a while loop, only used to break on error*/ + { + /*Quick check if the chunk length isn't too small. Even without check + it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ + if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ + + /*read the key*/ + for(length = 0; length < chunkLength && data[length] != 0; ++length) ; + if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i != length; ++i) key[i] = (char)data[i]; + + /*read the compression method*/ + compressed = data[length + 1]; + if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty for the next 3 texts*/ + + /*read the langtag*/ + begin = length + 3; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + langtag = (char*)lodepng_malloc(length + 1); + if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ + + langtag[length] = 0; + for(i = 0; i != length; ++i) langtag[i] = (char)data[begin + i]; + + /*read the transkey*/ + begin += length + 1; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; ++i) ++length; + + transkey = (char*)lodepng_malloc(length + 1); + if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ + + transkey[length] = 0; + for(i = 0; i != length; ++i) transkey[i] = (char)data[begin + i]; + + /*read the actual text*/ + begin += length + 1; + + length = chunkLength < begin ? 0 : chunkLength - begin; + + if(compressed) + { + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[begin]), + length, zlibsettings); + if(error) break; + if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size; + ucvector_push_back(&decoded, 0); + } + else + { + if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/); + + decoded.data[length] = 0; + for(i = 0; i != length; ++i) decoded.data[i] = data[begin + i]; + } + + error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data); + + break; + } + + lodepng_free(key); + lodepng_free(langtag); + lodepng_free(transkey); + ucvector_cleanup(&decoded); + + return error; +} + +static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(chunkLength != 7) return 73; /*invalid tIME chunk size*/ + + info->time_defined = 1; + info->time.year = 256u * data[0] + data[1]; + info->time.month = data[2]; + info->time.day = data[3]; + info->time.hour = data[4]; + info->time.minute = data[5]; + info->time.second = data[6]; + + return 0; /* OK */ +} + +static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/ + + info->phys_defined = 1; + info->phys_x = 16777216u * data[0] + 65536u * data[1] + 256u * data[2] + data[3]; + info->phys_y = 16777216u * data[4] + 65536u * data[5] + 256u * data[6] + data[7]; + info->phys_unit = data[8]; + + return 0; /* OK */ +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ +static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + unsigned char IEND = 0; + const unsigned char* chunk; + size_t i; + ucvector idat; /*the data from idat chunks*/ + ucvector scanlines; + size_t predict; + size_t numpixels; + size_t outsize = 0; + + /*for unknown chunk order*/ + unsigned unknown = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + + /*provide some proper output values if error will happen*/ + *out = 0; + + state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ + if(state->error) return; + + numpixels = *w * *h; + + /*multiplication overflow*/ + if(*h != 0 && numpixels / *h != *w) CERROR_RETURN(state->error, 92); + /*multiplication overflow possible further below. Allows up to 2^31-1 pixel + bytes with 16-bit RGBA, the rest is room for filter bytes.*/ + if(numpixels > 268435455) CERROR_RETURN(state->error, 92); + + ucvector_init(&idat); + chunk = &in[33]; /*first byte of the first chunk after the header*/ + + /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. + IDAT data is put at the start of the in buffer*/ + while(!IEND && !state->error) + { + unsigned chunkLength; + const unsigned char* data; /*the data in the chunk*/ + + /*error: size of the in buffer too small to contain next chunk*/ + if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30); + + /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ + chunkLength = lodepng_chunk_length(chunk); + /*error: chunk length larger than the max PNG chunk size*/ + if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63); + + if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) + { + CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ + } + + data = lodepng_chunk_data_const(chunk); + + /*IDAT chunk, containing compressed image data*/ + if(lodepng_chunk_type_equals(chunk, "IDAT")) + { + size_t oldsize = idat.size; + if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/); + for(i = 0; i != chunkLength; ++i) idat.data[oldsize + i] = data[i]; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 3; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*IEND chunk*/ + else if(lodepng_chunk_type_equals(chunk, "IEND")) + { + IEND = 1; + } + /*palette chunk (PLTE)*/ + else if(lodepng_chunk_type_equals(chunk, "PLTE")) + { + state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 2; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*palette transparency chunk (tRNS)*/ + else if(lodepng_chunk_type_equals(chunk, "tRNS")) + { + state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); + if(state->error) break; + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*background color chunk (bKGD)*/ + else if(lodepng_chunk_type_equals(chunk, "bKGD")) + { + state->error = readChunk_bKGD(&state->info_png, data, chunkLength); + if(state->error) break; + } + /*text chunk (tEXt)*/ + else if(lodepng_chunk_type_equals(chunk, "tEXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_tEXt(&state->info_png, data, chunkLength); + if(state->error) break; + } + } + /*compressed text chunk (zTXt)*/ + else if(lodepng_chunk_type_equals(chunk, "zTXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if(state->error) break; + } + } + /*international text chunk (iTXt)*/ + else if(lodepng_chunk_type_equals(chunk, "iTXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if(state->error) break; + } + } + else if(lodepng_chunk_type_equals(chunk, "tIME")) + { + state->error = readChunk_tIME(&state->info_png, data, chunkLength); + if(state->error) break; + } + else if(lodepng_chunk_type_equals(chunk, "pHYs")) + { + state->error = readChunk_pHYs(&state->info_png, data, chunkLength); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + else /*it's not an implemented chunk type, so ignore it: skip over the data*/ + { + /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ + if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69); + + unknown = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(state->decoder.remember_unknown_chunks) + { + state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], + &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + + if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ + { + if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ + } + + if(!IEND) chunk = lodepng_chunk_next_const(chunk); + } + + ucvector_init(&scanlines); + /*predict output size, to allocate exact size for output buffer to avoid more dynamic allocation. + If the decompressed size does not match the prediction, the image must be corrupt.*/ + if(state->info_png.interlace_method == 0) + { + /*The extra *h is added because this are the filter bytes every scanline starts with*/ + predict = lodepng_get_raw_size_idat(*w, *h, &state->info_png.color) + *h; + } + else + { + /*Adam-7 interlaced: predicted size is the sum of the 7 sub-images sizes*/ + const LodePNGColorMode* color = &state->info_png.color; + predict = 0; + predict += lodepng_get_raw_size_idat((*w + 7) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); + if(*w > 4) predict += lodepng_get_raw_size_idat((*w + 3) >> 3, (*h + 7) >> 3, color) + ((*h + 7) >> 3); + predict += lodepng_get_raw_size_idat((*w + 3) >> 2, (*h + 3) >> 3, color) + ((*h + 3) >> 3); + if(*w > 2) predict += lodepng_get_raw_size_idat((*w + 1) >> 2, (*h + 3) >> 2, color) + ((*h + 3) >> 2); + predict += lodepng_get_raw_size_idat((*w + 1) >> 1, (*h + 1) >> 2, color) + ((*h + 1) >> 2); + if(*w > 1) predict += lodepng_get_raw_size_idat((*w + 0) >> 1, (*h + 1) >> 1, color) + ((*h + 1) >> 1); + predict += lodepng_get_raw_size_idat((*w + 0), (*h + 0) >> 1, color) + ((*h + 0) >> 1); + } + if(!state->error && !ucvector_reserve(&scanlines, predict)) state->error = 83; /*alloc fail*/ + if(!state->error) + { + state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data, + idat.size, &state->decoder.zlibsettings); + if(!state->error && scanlines.size != predict) state->error = 91; /*decompressed size doesn't match prediction*/ + } + ucvector_cleanup(&idat); + + if(!state->error) + { + outsize = lodepng_get_raw_size(*w, *h, &state->info_png.color); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!*out) state->error = 83; /*alloc fail*/ + } + if(!state->error) + { + for(i = 0; i < outsize; i++) (*out)[i] = 0; + state->error = postProcessScanlines(*out, scanlines.data, *w, *h, &state->info_png); + } + ucvector_cleanup(&scanlines); +} + +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + *out = 0; + decodeGeneric(out, w, h, state, in, insize); + if(state->error) return state->error; + if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) + { + /*same color type, no copying or converting of data needed*/ + /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype + the raw image has to the end user*/ + if(!state->decoder.color_convert) + { + state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); + if(state->error) return state->error; + } + } + else + { + /*color conversion needed; sort of copy of the data*/ + unsigned char* data = *out; + size_t outsize; + + /*TODO: check if this works according to the statement in the documentation: "The converter can convert + from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ + if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) + && !(state->info_raw.bitdepth == 8)) + { + return 56; /*unsupported color mode conversion*/ + } + + outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!(*out)) + { + state->error = 83; /*alloc fail*/ + } + else state->error = lodepng_convert(*out, data, &state->info_raw, + &state->info_png.color, *w, *h); + lodepng_free(data); + } + return state->error; +} + +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + error = lodepng_decode(out, w, h, &state, in, insize); + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); +} + +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer = 0; + size_t buffersize; + unsigned error; + error = lodepng_load_file(&buffer, &buffersize, filename); + if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); +} + +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) +{ + settings->color_convert = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->read_text_chunks = 1; + settings->remember_unknown_chunks = 0; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + settings->ignore_crc = 0; + lodepng_decompress_settings_init(&settings->zlibsettings); +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) + +void lodepng_state_init(LodePNGState* state) +{ +#ifdef LODEPNG_COMPILE_DECODER + lodepng_decoder_settings_init(&state->decoder); +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + lodepng_encoder_settings_init(&state->encoder); +#endif /*LODEPNG_COMPILE_ENCODER*/ + lodepng_color_mode_init(&state->info_raw); + lodepng_info_init(&state->info_png); + state->error = 1; +} + +void lodepng_state_cleanup(LodePNGState* state) +{ + lodepng_color_mode_cleanup(&state->info_raw); + lodepng_info_cleanup(&state->info_png); +} + +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) +{ + lodepng_state_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->info_raw); + lodepng_info_init(&dest->info_png); + dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return; + dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return; +} + +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Encoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*chunkName must be string of 4 characters*/ +static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) +{ + CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data)); + out->allocsize = out->size; /*fix the allocsize again*/ + return 0; +} + +static void writeSignature(ucvector* out) +{ + /*8 bytes PNG signature, aka the magic bytes*/ + ucvector_push_back(out, 137); + ucvector_push_back(out, 80); + ucvector_push_back(out, 78); + ucvector_push_back(out, 71); + ucvector_push_back(out, 13); + ucvector_push_back(out, 10); + ucvector_push_back(out, 26); + ucvector_push_back(out, 10); +} + +static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) +{ + unsigned error = 0; + ucvector header; + ucvector_init(&header); + + lodepng_add32bitInt(&header, w); /*width*/ + lodepng_add32bitInt(&header, h); /*height*/ + ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/ + ucvector_push_back(&header, (unsigned char)colortype); /*color type*/ + ucvector_push_back(&header, 0); /*compression method*/ + ucvector_push_back(&header, 0); /*filter method*/ + ucvector_push_back(&header, interlace_method); /*interlace method*/ + + error = addChunk(out, "IHDR", header.data, header.size); + ucvector_cleanup(&header); + + return error; +} + +static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector PLTE; + ucvector_init(&PLTE); + for(i = 0; i != info->palettesize * 4; ++i) + { + /*add all channels except alpha channel*/ + if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); + } + error = addChunk(out, "PLTE", PLTE.data, PLTE.size); + ucvector_cleanup(&PLTE); + + return error; +} + +static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector tRNS; + ucvector_init(&tRNS); + if(info->colortype == LCT_PALETTE) + { + size_t amount = info->palettesize; + /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ + for(i = info->palettesize; i != 0; --i) + { + if(info->palette[4 * (i - 1) + 3] == 255) --amount; + else break; + } + /*add only alpha channel*/ + for(i = 0; i != amount; ++i) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); + } + else if(info->colortype == LCT_GREY) + { + if(info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); + } + } + else if(info->colortype == LCT_RGB) + { + if(info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r & 255)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g & 255)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b >> 8)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b & 255)); + } + } + + error = addChunk(out, "tRNS", tRNS.data, tRNS.size); + ucvector_cleanup(&tRNS); + + return error; +} + +static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, + LodePNGCompressSettings* zlibsettings) +{ + ucvector zlibdata; + unsigned error = 0; + + /*compress with the Zlib compressor*/ + ucvector_init(&zlibdata); + error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); + if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); + ucvector_cleanup(&zlibdata); + + return error; +} + +static unsigned addChunk_IEND(ucvector* out) +{ + unsigned error = 0; + error = addChunk(out, "IEND", 0, 0); + return error; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) +{ + unsigned error = 0; + size_t i; + ucvector text; + ucvector_init(&text); + for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&text, 0); /*0 termination char*/ + for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&text, (unsigned char)textstring[i]); + error = addChunk(out, "tEXt", text.data, text.size); + ucvector_cleanup(&text); + + return error; +} + +static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, + LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data, compressed; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + ucvector_init(&compressed); + for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*0 termination char*/ + ucvector_push_back(&data, 0); /*compression method: 0*/ + + error = zlib_compress(&compressed.data, &compressed.size, + (unsigned char*)textstring, textsize, zlibsettings); + if(!error) + { + for(i = 0; i != compressed.size; ++i) ucvector_push_back(&data, compressed.data[i]); + error = addChunk(out, "zTXt", data.data, data.size); + } + + ucvector_cleanup(&compressed); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, + const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + + for(i = 0; keyword[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*null termination char*/ + ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ + ucvector_push_back(&data, 0); /*compression method*/ + for(i = 0; langtag[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)langtag[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + for(i = 0; transkey[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)transkey[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + + if(compressed) + { + ucvector compressed_data; + ucvector_init(&compressed_data); + error = zlib_compress(&compressed_data.data, &compressed_data.size, + (unsigned char*)textstring, textsize, zlibsettings); + if(!error) + { + for(i = 0; i != compressed_data.size; ++i) ucvector_push_back(&data, compressed_data.data[i]); + } + ucvector_cleanup(&compressed_data); + } + else /*not compressed*/ + { + for(i = 0; textstring[i] != 0; ++i) ucvector_push_back(&data, (unsigned char)textstring[i]); + } + + if(!error) error = addChunk(out, "iTXt", data.data, data.size); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector bKGD; + ucvector_init(&bKGD); + if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); + } + else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g & 255)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b >> 8)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b & 255)); + } + else if(info->color.colortype == LCT_PALETTE) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r & 255)); /*palette index*/ + } + + error = addChunk(out, "bKGD", bKGD.data, bKGD.size); + ucvector_cleanup(&bKGD); + + return error; +} + +static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) +{ + unsigned error = 0; + unsigned char* data = (unsigned char*)lodepng_malloc(7); + if(!data) return 83; /*alloc fail*/ + data[0] = (unsigned char)(time->year >> 8); + data[1] = (unsigned char)(time->year & 255); + data[2] = (unsigned char)time->month; + data[3] = (unsigned char)time->day; + data[4] = (unsigned char)time->hour; + data[5] = (unsigned char)time->minute; + data[6] = (unsigned char)time->second; + error = addChunk(out, "tIME", data, 7); + lodepng_free(data); + return error; +} + +static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector data; + ucvector_init(&data); + + lodepng_add32bitInt(&data, info->phys_x); + lodepng_add32bitInt(&data, info->phys_y); + ucvector_push_back(&data, info->phys_unit); + + error = addChunk(out, "pHYs", data.data, data.size); + ucvector_cleanup(&data); + + return error; +} + +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, + size_t length, size_t bytewidth, unsigned char filterType) +{ + size_t i; + switch(filterType) + { + case 0: /*None*/ + for(i = 0; i != length; ++i) out[i] = scanline[i]; + break; + case 1: /*Sub*/ + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - scanline[i - bytewidth]; + break; + case 2: /*Up*/ + if(prevline) + { + for(i = 0; i != length; ++i) out[i] = scanline[i] - prevline[i]; + } + else + { + for(i = 0; i != length; ++i) out[i] = scanline[i]; + } + break; + case 3: /*Average*/ + if(prevline) + { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i] - (prevline[i] >> 1); + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) >> 1); + } + else + { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + for(i = bytewidth; i < length; ++i) out[i] = scanline[i] - (scanline[i - bytewidth] >> 1); + } + break; + case 4: /*Paeth*/ + if(prevline) + { + /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ + for(i = 0; i != bytewidth; ++i) out[i] = (scanline[i] - prevline[i]); + for(i = bytewidth; i < length; ++i) + { + out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); + } + } + else + { + for(i = 0; i != bytewidth; ++i) out[i] = scanline[i]; + /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ + for(i = bytewidth; i < length; ++i) out[i] = (scanline[i] - scanline[i - bytewidth]); + } + break; + default: return; /*unexisting filter type given*/ + } +} + +/* log2 approximation. A slight bit faster than std::log. */ +static float flog2(float f) +{ + float result = 0; + while(f > 32) { result += 4; f /= 16; } + while(f > 2) { ++result; f /= 2; } + return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f); +} + +static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) +{ + /* + For PNG filter method 0 + out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are + the scanlines with 1 extra byte per scanline + */ + + unsigned bpp = lodepng_get_bpp(info); + /*the width of a scanline in bytes, not including the filter type*/ + size_t linebytes = (w * bpp + 7) / 8; + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + const unsigned char* prevline = 0; + unsigned x, y; + unsigned error = 0; + LodePNGFilterStrategy strategy = settings->filter_strategy; + + /* + There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: + * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. + use fixed filtering, with the filter None). + * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is + not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply + all five filters and select the filter that produces the smallest sum of absolute values per row. + This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. + + If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, + but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum + heuristic is used. + */ + if(settings->filter_palette_zero && + (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO; + + if(bpp == 0) return 31; /*error: invalid color type*/ + + if(strategy == LFS_ZERO) + { + for(y = 0; y != h; ++y) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + out[outindex] = 0; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0); + prevline = &in[inindex]; + } + } + else if(strategy == LFS_MINSUM) + { + /*adaptive filtering*/ + size_t sum[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned char type, bestType = 0; + + for(type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) return 83; /*alloc fail*/ + } + + if(!error) + { + for(y = 0; y != h; ++y) + { + /*try the 5 filter types*/ + for(type = 0; type != 5; ++type) + { + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + + /*calculate the sum of the result*/ + sum[type] = 0; + if(type == 0) + { + for(x = 0; x != linebytes; ++x) sum[type] += (unsigned char)(attempt[type][x]); + } + else + { + for(x = 0; x != linebytes; ++x) + { + /*For differences, each byte should be treated as signed, values above 127 are negative + (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. + This means filtertype 0 is almost never chosen, but that is justified.*/ + unsigned char s = attempt[type][x]; + sum[type] += s < 128 ? s : (255U - s); + } + } + + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + } + + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else if(strategy == LFS_ENTROPY) + { + float sum[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + float smallest = 0; + unsigned type, bestType = 0; + unsigned count[256]; + + for(type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) return 83; /*alloc fail*/ + } + + for(y = 0; y != h; ++y) + { + /*try the 5 filter types*/ + for(type = 0; type != 5; ++type) + { + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + for(x = 0; x != 256; ++x) count[x] = 0; + for(x = 0; x != linebytes; ++x) ++count[attempt[type][x]]; + ++count[type]; /*the filter type itself is part of the scanline*/ + sum[type] = 0; + for(x = 0; x != 256; ++x) + { + float p = count[x] / (float)(linebytes + 1); + sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p; + } + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else if(strategy == LFS_PREDEFINED) + { + for(y = 0; y != h; ++y) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + unsigned char type = settings->predefined_filters[y]; + out[outindex] = type; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); + prevline = &in[inindex]; + } + } + else if(strategy == LFS_BRUTE_FORCE) + { + /*brute force filter chooser. + deflate the scanline after every filter attempt to see which one deflates best. + This is very slow and gives only slightly smaller, sometimes even larger, result*/ + size_t size[5]; + unsigned char* attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned type = 0, bestType = 0; + unsigned char* dummy; + LodePNGCompressSettings zlibsettings = settings->zlibsettings; + /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, + to simulate the true case where the tree is the same for the whole image. Sometimes it gives + better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare + cases better compression. It does make this a bit less slow, so it's worth doing this.*/ + zlibsettings.btype = 1; + /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG + images only, so disable it*/ + zlibsettings.custom_zlib = 0; + zlibsettings.custom_deflate = 0; + for(type = 0; type != 5; ++type) + { + attempt[type] = (unsigned char*)lodepng_malloc(linebytes); + if(!attempt[type]) return 83; /*alloc fail*/ + } + for(y = 0; y != h; ++y) /*try the 5 filter types*/ + { + for(type = 0; type != 5; ++type) + { + unsigned testsize = linebytes; + /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ + + filterScanline(attempt[type], &in[y * linebytes], prevline, linebytes, bytewidth, type); + size[type] = 0; + dummy = 0; + zlib_compress(&dummy, &size[type], attempt[type], testsize, &zlibsettings); + lodepng_free(dummy); + /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || size[type] < smallest) + { + bestType = type; + smallest = size[type]; + } + } + prevline = &in[y * linebytes]; + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x != linebytes; ++x) out[y * (linebytes + 1) + 1 + x] = attempt[bestType][x]; + } + for(type = 0; type != 5; ++type) lodepng_free(attempt[type]); + } + else return 88; /* unknown filter strategy */ + + return error; +} + +static void addPaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /*The opposite of the removePaddingBits function + olinebits must be >= ilinebits*/ + unsigned y; + size_t diff = olinebits - ilinebits; + size_t obp = 0, ibp = 0; /*bit pointers*/ + for(y = 0; y != h; ++y) + { + size_t x; + for(x = 0; x < ilinebits; ++x) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + /*obp += diff; --> no, fill in some value in the padding bits too, to avoid + "Use of uninitialised value of size ###" warning from valgrind*/ + for(x = 0; x != diff; ++x) setBitOfReversedStream(&obp, out, 0); + } +} + +/* +in: non-interlaced image with size w*h +out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with + no padding bits between scanlines, but between reduced images so that each + reduced image starts at a byte. +bpp: bits per pixel +there are no padding bits, not between scanlines, not between reduced images +in has the following size in bits: w * h * bpp. +out is possibly bigger due to padding bits between reduced images +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; + for(b = 0; b < bytewidth; ++b) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for(i = 0; i != 7; ++i) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; ++y) + for(x = 0; x < passw[i]; ++x) + { + ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + for(b = 0; b < bpp; ++b) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + } + } + } +} + +/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. +return value is error**/ +static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, + unsigned w, unsigned h, + const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) +{ + /* + This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: + *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter + *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + unsigned error = 0; + + if(info_png->interlace_method == 0) + { + *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out) && (*outsize)) error = 83; /*alloc fail*/ + + if(!error) + { + /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ + if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8)); + if(!padded) error = 83; /*alloc fail*/ + if(!error) + { + addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); + error = filter(*out, padded, w, h, &info_png->color, settings); + } + lodepng_free(padded); + } + else + { + /*we can immediately filter into the out buffer, no other steps needed*/ + error = filter(*out, in, w, h, &info_png->color, settings); + } + } + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned char* adam7; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out)) error = 83; /*alloc fail*/ + + adam7 = (unsigned char*)lodepng_malloc(passstart[7]); + if(!adam7 && passstart[7]) error = 83; /*alloc fail*/ + + if(!error) + { + unsigned i; + + Adam7_interlace(adam7, in, w, h, bpp); + for(i = 0; i != 7; ++i) + { + if(bpp < 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); + if(!padded) ERROR_BREAK(83); /*alloc fail*/ + addPaddingBits(padded, &adam7[passstart[i]], + ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); + error = filter(&(*out)[filter_passstart[i]], padded, + passw[i], passh[i], &info_png->color, settings); + lodepng_free(padded); + } + else + { + error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], + passw[i], passh[i], &info_png->color, settings); + } + + if(error) break; + } + } + + lodepng_free(adam7); + } + + return error; +} + +/* +palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA... +returns 0 if the palette is opaque, +returns 1 if the palette has a single color with alpha 0 ==> color key +returns 2 if the palette is semi-translucent. +*/ +static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) +{ + size_t i; + unsigned key = 0; + unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/ + for(i = 0; i != palettesize; ++i) + { + if(!key && palette[4 * i + 3] == 0) + { + r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2]; + key = 1; + i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/ + } + else if(palette[4 * i + 3] != 255) return 2; + /*when key, no opaque RGB may have key's RGB*/ + else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2; + } + return key; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) +{ + unsigned char* inchunk = data; + while((size_t)(inchunk - data) < datasize) + { + CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); + out->allocsize = out->size; /*fix the allocsize again*/ + inchunk = lodepng_chunk_next(inchunk); + } + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state) +{ + LodePNGInfo info; + ucvector outv; + unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ + size_t datasize = 0; + + /*provide some proper output values if error will happen*/ + *out = 0; + *outsize = 0; + state->error = 0; + + lodepng_info_init(&info); + lodepng_info_copy(&info, &state->info_png); + + if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette) + && (info.color.palettesize == 0 || info.color.palettesize > 256)) + { + state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ + return state->error; + } + + if(state->encoder.auto_convert) + { + state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw); + } + if(state->error) return state->error; + + if(state->encoder.zlibsettings.btype > 2) + { + CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/ + } + if(state->info_png.interlace_method > 1) + { + CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/ + } + + state->error = checkColorValidity(info.color.colortype, info.color.bitdepth); + if(state->error) return state->error; /*error: unexisting color type given*/ + state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); + if(state->error) return state->error; /*error: unexisting color type given*/ + + if(!lodepng_color_mode_equal(&state->info_raw, &info.color)) + { + unsigned char* converted; + size_t size = (w * h * (size_t)lodepng_get_bpp(&info.color) + 7) / 8; + + converted = (unsigned char*)lodepng_malloc(size); + if(!converted && size) state->error = 83; /*alloc fail*/ + if(!state->error) + { + state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h); + } + if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); + lodepng_free(converted); + } + else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); + + ucvector_init(&outv); + while(!state->error) /*while only executed once, to break on error*/ + { +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + size_t i; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*write signature and chunks*/ + writeSignature(&outv); + /*IHDR*/ + addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*unknown chunks between IHDR and PLTE*/ + if(info.unknown_chunks_data[0]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*PLTE*/ + if(info.color.colortype == LCT_PALETTE) + { + addChunk_PLTE(&outv, &info.color); + } + if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) + { + addChunk_PLTE(&outv, &info.color); + } + /*tRNS*/ + if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) + { + addChunk_tRNS(&outv, &info.color); + } + if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) + { + addChunk_tRNS(&outv, &info.color); + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*bKGD (must come between PLTE and the IDAt chunks*/ + if(info.background_defined) addChunk_bKGD(&outv, &info); + /*pHYs (must come before the IDAT chunks)*/ + if(info.phys_defined) addChunk_pHYs(&outv, &info); + + /*unknown chunks between PLTE and IDAT*/ + if(info.unknown_chunks_data[1]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*IDAT (multiple IDAT chunks must be consecutive)*/ + state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*tIME*/ + if(info.time_defined) addChunk_tIME(&outv, &info.time); + /*tEXt and/or zTXt*/ + for(i = 0; i != info.text_num; ++i) + { + if(strlen(info.text_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if(strlen(info.text_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + if(state->encoder.text_compression) + { + addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); + } + else + { + addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); + } + } + /*LodePNG version id in text chunk*/ + if(state->encoder.add_id) + { + unsigned alread_added_id_text = 0; + for(i = 0; i != info.text_num; ++i) + { + if(!strcmp(info.text_keys[i], "LodePNG")) + { + alread_added_id_text = 1; + break; + } + } + if(alread_added_id_text == 0) + { + addChunk_tEXt(&outv, "LodePNG", LODEPNG_VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ + } + } + /*iTXt*/ + for(i = 0; i != info.itext_num; ++i) + { + if(strlen(info.itext_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if(strlen(info.itext_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + addChunk_iTXt(&outv, state->encoder.text_compression, + info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], + &state->encoder.zlibsettings); + } + + /*unknown chunks between IDAT and IEND*/ + if(info.unknown_chunks_data[2]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + addChunk_IEND(&outv); + + break; /*this isn't really a while loop; no error happened so break out now!*/ + } + + lodepng_info_cleanup(&info); + lodepng_free(data); + /*instead of cleaning the vector up, give it to the output*/ + *out = outv.data; + *outsize = outv.size; + + return state->error; +} + +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, + unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + state.info_png.color.colortype = colortype; + state.info_png.color.bitdepth = bitdepth; + lodepng_encode(out, outsize, image, w, h, &state); + error = state.error; + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); + if(!error) error = lodepng_save_file(buffer, buffersize, filename); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) +{ + lodepng_compress_settings_init(&settings->zlibsettings); + settings->filter_palette_zero = 1; + settings->filter_strategy = LFS_MINSUM; + settings->auto_convert = 1; + settings->force_palette = 0; + settings->predefined_filters = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->add_id = 0; + settings->text_compression = 1; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/* +This returns the description of a numerical error code in English. This is also +the documentation of all the error codes. +*/ +const char* lodepng_error_text(unsigned code) +{ + switch(code) + { + case 0: return "no error, everything went ok"; + case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ + case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ + case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ + case 13: return "problem while processing dynamic deflate block"; + case 14: return "problem while processing dynamic deflate block"; + case 15: return "problem while processing dynamic deflate block"; + case 16: return "unexisting code while processing dynamic deflate block"; + case 17: return "end of out buffer memory reached while inflating"; + case 18: return "invalid distance code while inflating"; + case 19: return "end of out buffer memory reached while inflating"; + case 20: return "invalid deflate block BTYPE encountered while decoding"; + case 21: return "NLEN is not ones complement of LEN in a deflate block"; + /*end of out buffer memory reached while inflating: + This can happen if the inflated deflate data is longer than the amount of bytes required to fill up + all the pixels of the image, given the color depth and image dimensions. Something that doesn't + happen in a normal, well encoded, PNG image.*/ + case 22: return "end of out buffer memory reached while inflating"; + case 23: return "end of in buffer memory reached while inflating"; + case 24: return "invalid FCHECK in zlib header"; + case 25: return "invalid compression method in zlib header"; + case 26: return "FDICT encountered in zlib header while it's not used for PNG"; + case 27: return "PNG file is smaller than a PNG header"; + /*Checks the magic file header, the first 8 bytes of the PNG file*/ + case 28: return "incorrect PNG signature, it's no PNG or corrupted"; + case 29: return "first chunk is not the header chunk"; + case 30: return "chunk length too large, chunk broken off at end of file"; + case 31: return "illegal PNG color type or bpp"; + case 32: return "illegal PNG compression method"; + case 33: return "illegal PNG filter method"; + case 34: return "illegal PNG interlace method"; + case 35: return "chunk length of a chunk is too large or the chunk too small"; + case 36: return "illegal PNG filter type encountered"; + case 37: return "illegal bit depth for this color type given"; + case 38: return "the palette is too big"; /*more than 256 colors*/ + case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; + case 40: return "tRNS chunk has wrong size for greyscale image"; + case 41: return "tRNS chunk has wrong size for RGB image"; + case 42: return "tRNS chunk appeared while it was not allowed for this color type"; + case 43: return "bKGD chunk has wrong size for palette image"; + case 44: return "bKGD chunk has wrong size for greyscale image"; + case 45: return "bKGD chunk has wrong size for RGB image"; + case 48: return "empty input buffer given to decoder. Maybe caused by non-existing file?"; + case 49: return "jumped past memory while generating dynamic huffman tree"; + case 50: return "jumped past memory while generating dynamic huffman tree"; + case 51: return "jumped past memory while inflating huffman block"; + case 52: return "jumped past memory while inflating"; + case 53: return "size of zlib data too small"; + case 54: return "repeat symbol in tree while there was no value symbol yet"; + /*jumped past tree while generating huffman tree, this could be when the + tree will have more leaves than symbols after generating it out of the + given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ + case 55: return "jumped past tree while generating huffman tree"; + case 56: return "given output image colortype or bitdepth not supported for color conversion"; + case 57: return "invalid CRC encountered (checking CRC can be disabled)"; + case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; + case 59: return "requested color conversion not supported"; + case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; + case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; + /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ + case 62: return "conversion from color to greyscale not supported"; + case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ + /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ + case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; + case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; + case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; + case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; + case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; + case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; + case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; + case 73: return "invalid tIME chunk size"; + case 74: return "invalid pHYs chunk size"; + /*length could be wrong, or data chopped off*/ + case 75: return "no null termination char found while decoding text chunk"; + case 76: return "iTXt chunk too short to contain required bytes"; + case 77: return "integer overflow in buffer size"; + case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ + case 79: return "failed to open file for writing"; + case 80: return "tried creating a tree of 0 symbols"; + case 81: return "lazy matching at pos 0 is impossible"; + case 82: return "color conversion to palette requested while a color isn't in palette"; + case 83: return "memory allocation failed"; + case 84: return "given image too small to contain all pixels to be encoded"; + case 86: return "impossible offset in lz77 encoding (internal bug)"; + case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; + case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; + case 89: return "text chunk keyword too short or long: must have size 1-79"; + /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ + case 90: return "windowsize must be a power of two"; + case 91: return "invalid decompressed idat size"; + case 92: return "too many pixels, not supported"; + case 93: return "zero width or height is invalid"; + case 94: return "header chunk must have a size of 13 bytes"; + } + return "unknown error code"; +} +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // C++ Wrapper // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ + +#ifdef LODEPNG_COMPILE_DISK +unsigned load_file(std::vector& buffer, const std::string& filename) +{ + long size = lodepng_filesize(filename.c_str()); + if(size < 0) return 78; + buffer.resize((size_t)size); + return size == 0 ? 0 : lodepng_buffer_file(&buffer[0], (size_t)size, filename.c_str()); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned save_file(const std::vector& buffer, const std::string& filename) +{ + return lodepng_save_file(buffer.empty() ? 0 : &buffer[0], buffer.size(), filename.c_str()); +} +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings) +{ + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings) +{ + return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings) +{ + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings) +{ + return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ + + +#ifdef LODEPNG_COMPILE_PNG + +State::State() +{ + lodepng_state_init(this); +} + +State::State(const State& other) +{ + lodepng_state_init(this); + lodepng_state_copy(this, &other); +} + +State::~State() +{ + lodepng_state_cleanup(this); +} + +State& State::operator=(const State& other) +{ + lodepng_state_copy(this, &other); + return *this; +} + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); + if(buffer && !error) + { + State state; + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, LodePNGColorType colortype, unsigned bitdepth) +{ + return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize) +{ + unsigned char* buffer = NULL; + unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); + if(buffer && !error) + { + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + } + lodepng_free(buffer); + return error; +} + +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in) +{ + return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned decode(std::vector& out, unsigned& w, unsigned& h, const std::string& filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + std::vector buffer; + unsigned error = load_file(buffer, filename); + if(error) return error; + return decode(out, w, h, buffer, colortype, bitdepth); +} +#endif /* LODEPNG_COMPILE_DECODER */ +#endif /* LODEPNG_COMPILE_DISK */ + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned encode(std::vector& out, const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} + +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state) +{ + if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, state); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + std::vector buffer; + unsigned error = encode(buffer, in, w, h, colortype, bitdepth); + if(!error) error = save_file(buffer, filename); + return error; +} + +unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_PNG */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ diff --git a/3rdparty/bgfx/3rdparty/lodepng/lodepng.h b/3rdparty/bgfx/3rdparty/lodepng/lodepng.h new file mode 100644 index 00000000000..94e81955bf2 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/lodepng/lodepng.h @@ -0,0 +1,1759 @@ +/* +LodePNG version 20160501 + +Copyright (c) 2005-2016 Lode Vandevenne + +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. +*/ + +#ifndef LODEPNG_H +#define LODEPNG_H + +#include /*for size_t*/ + +extern const char* LODEPNG_VERSION_STRING; + +/* +The following #defines are used to create code sections. They can be disabled +to disable code sections, which can give faster compile time and smaller binary. +The "NO_COMPILE" defines are designed to be used to pass as defines to the +compiler command to disable them without modifying this header, e.g. +-DLODEPNG_NO_COMPILE_ZLIB for gcc. +In addition to those below, you can also define LODEPNG_NO_COMPILE_CRC to +allow implementing a custom lodepng_crc32. +*/ +/*deflate & zlib. If disabled, you must specify alternative zlib functions in +the custom_zlib field of the compress and decompress settings*/ +#ifndef LODEPNG_NO_COMPILE_ZLIB +#define LODEPNG_COMPILE_ZLIB +#endif +/*png encoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_PNG +#define LODEPNG_COMPILE_PNG +#endif +/*deflate&zlib decoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_DECODER +#define LODEPNG_COMPILE_DECODER +#endif +/*deflate&zlib encoder and png encoder*/ +#ifndef LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_COMPILE_ENCODER +#endif +/*the optional built in harddisk file loading and saving functions*/ +#ifndef LODEPNG_NO_COMPILE_DISK +#define LODEPNG_COMPILE_DISK +#endif +/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ +#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_COMPILE_ANCILLARY_CHUNKS +#endif +/*ability to convert error numerical codes to English text string*/ +#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_COMPILE_ERROR_TEXT +#endif +/*Compile the default allocators (C's free, malloc and realloc). If you disable this, +you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your +source files with custom allocators.*/ +#ifndef LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_COMPILE_ALLOCATORS +#endif +/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ +#ifdef __cplusplus +#ifndef LODEPNG_NO_COMPILE_CPP +#define LODEPNG_COMPILE_CPP +#endif +#endif + +#ifdef LODEPNG_COMPILE_CPP +#include +#include +#endif /*LODEPNG_COMPILE_CPP*/ + +#ifdef LODEPNG_COMPILE_PNG +/*The PNG color types (also used for raw).*/ +typedef enum LodePNGColorType +{ + LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/ + LCT_RGB = 2, /*RGB: 8,16 bit*/ + LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ + LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/ + LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/ +} LodePNGColorType; + +#ifdef LODEPNG_COMPILE_DECODER +/* +Converts PNG data in memory to raw pixel data. +out: Output parameter. Pointer to buffer that will contain the raw pixel data. + After decoding, its size is w * h * (bytes per pixel) bytes larger than + initially. Bytes per pixel depends on colortype and bitdepth. + Must be freed after usage with free(*out). + Note: for 16-bit per channel colors, uses big endian format like PNG does. +w: Output parameter. Pointer to width of pixel data. +h: Output parameter. Pointer to height of pixel data. +in: Memory buffer with the PNG file. +insize: size of the in buffer. +colortype: the desired color type for the raw output image. See explanation on PNG color types. +bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +#ifdef LODEPNG_COMPILE_DISK +/* +Load PNG from disk, from file with given name. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); + +/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Converts raw pixel data into a PNG image in memory. The colortype and bitdepth + of the output PNG image cannot be chosen, they are automatically determined + by the colortype, bitdepth and content of the input pixel data. + Note: for 16-bit per channel colors, needs big endian format like PNG does. +out: Output parameter. Pointer to buffer that will contain the PNG image data. + Must be freed after usage with free(*out). +outsize: Output parameter. Pointer to the size in bytes of the out buffer. +image: The raw pixel data to encode. The size of this buffer should be + w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. +w: width of the raw pixel data in pixels. +h: height of the raw pixel data in pixels. +colortype: the color type of the raw input image. See explanation on PNG color types. +bitdepth: the bit depth of the raw input image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DISK +/* +Converts raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned lodepng_encode_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_DECODER +/*Same as lodepng_decode_memory, but decodes to an std::vector. The colortype +is the format to output the pixels to. Default is RGBA 8-bit per channel.*/ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::vector& in, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts PNG file from disk to raw pixel data in memory. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + const std::string& filename, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +/*Same as lodepng_encode_memory, but encodes to an std::vector. colortype +is that of the raw input data. The output PNG color type will be auto chosen.*/ +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts 32-bit RGBA raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(const std::string& filename, + const std::vector& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_ENCODER */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/*Returns an English description of the numerical error code.*/ +const char* lodepng_error_text(unsigned code); +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Settings for zlib decompression*/ +typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; +struct LodePNGDecompressSettings +{ + unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ + + /*use custom zlib decoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + /*use custom deflate decoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_inflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGDecompressSettings lodepng_default_decompress_settings; +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Settings for zlib compression. Tweaking these settings tweaks the balance +between speed and compression ratio. +*/ +typedef struct LodePNGCompressSettings LodePNGCompressSettings; +struct LodePNGCompressSettings /*deflate = compress*/ +{ + /*LZ77 related settings*/ + unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ + unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ + unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Default value: 2048.*/ + unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ + unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ + unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ + + /*use custom zlib encoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + /*use custom deflate encoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_deflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGCompressSettings lodepng_default_compress_settings; +void lodepng_compress_settings_init(LodePNGCompressSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_PNG +/* +Color mode of an image. Contains all information required to decode the pixel +bits to RGBA colors. This information is the same as used in the PNG file +format, and is used both for PNG and raw image data in LodePNG. +*/ +typedef struct LodePNGColorMode +{ + /*header (IHDR)*/ + LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ + unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ + + /* + palette (PLTE and tRNS) + + Dynamically allocated with the colors of the palette, including alpha. + When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use + lodepng_palette_clear, then for each color use lodepng_palette_add. + If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. + + When decoding, by default you can ignore this palette, since LodePNG already + fills the palette colors in the pixels of the raw RGBA output. + + The palette is only supported for color type 3. + */ + unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/ + size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ + + /* + transparent color key (tRNS) + + This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. + For greyscale PNGs, r, g and b will all 3 be set to the same. + + When decoding, by default you can ignore this information, since LodePNG sets + pixels with this key to transparent already in the raw RGBA output. + + The color key is only supported for color types 0 and 2. + */ + unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ + unsigned key_r; /*red/greyscale component of color key*/ + unsigned key_g; /*green component of color key*/ + unsigned key_b; /*blue component of color key*/ +} LodePNGColorMode; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_color_mode_init(LodePNGColorMode* info); +void lodepng_color_mode_cleanup(LodePNGColorMode* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); + +void lodepng_palette_clear(LodePNGColorMode* info); +/*add 1 color to the palette*/ +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ +unsigned lodepng_get_bpp(const LodePNGColorMode* info); +/*get the amount of color channels used, based on colortype in the struct. +If a palette is used, it counts as 1 channel.*/ +unsigned lodepng_get_channels(const LodePNGColorMode* info); +/*is it a greyscale type? (only colortype 0 or 4)*/ +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); +/*has it got an alpha channel? (only colortype 2 or 6)*/ +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); +/*has it got a palette? (only colortype 3)*/ +unsigned lodepng_is_palette_type(const LodePNGColorMode* info); +/*only returns true if there is a palette and there is a value in the palette with alpha < 255. +Loops through the palette to check this.*/ +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); +/* +Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. +Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). +Returns false if the image can only have opaque pixels. +In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, +or if "key_defined" is true. +*/ +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); +/*Returns the byte size of a raw image buffer with given width, height and color mode*/ +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*The information of a Time chunk in PNG.*/ +typedef struct LodePNGTime +{ + unsigned year; /*2 bytes used (0-65535)*/ + unsigned month; /*1-12*/ + unsigned day; /*1-31*/ + unsigned hour; /*0-23*/ + unsigned minute; /*0-59*/ + unsigned second; /*0-60 (to allow for leap seconds)*/ +} LodePNGTime; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*Information about the PNG image, except pixels, width and height.*/ +typedef struct LodePNGInfo +{ + /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ + unsigned compression_method;/*compression method of the original file. Always 0.*/ + unsigned filter_method; /*filter method of the original file*/ + unsigned interlace_method; /*interlace method of the original file*/ + LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /* + suggested background color chunk (bKGD) + This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit. + + For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding + the encoder writes the red one. For palette PNGs: When decoding, the RGB value + will be stored, not a palette index. But when encoding, specify the index of + the palette in background_r, the other two are then ignored. + + The decoder does not use this background color to edit the color of pixels. + */ + unsigned background_defined; /*is a suggested background color given?*/ + unsigned background_r; /*red component of suggested background color*/ + unsigned background_g; /*green component of suggested background color*/ + unsigned background_b; /*blue component of suggested background color*/ + + /* + non-international text chunks (tEXt and zTXt) + + The char** arrays each contain num strings. The actual messages are in + text_strings, while text_keys are keywords that give a short description what + the actual text represents, e.g. Title, Author, Description, or anything else. + + A keyword is minimum 1 character and maximum 79 characters long. It's + discouraged to use a single line length longer than 79 characters for texts. + + Don't allocate these text buffers yourself. Use the init/cleanup functions + correctly and use lodepng_add_text and lodepng_clear_text. + */ + size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ + char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ + char** text_strings; /*the actual text*/ + + /* + international text chunks (iTXt) + Similar to the non-international text chunks, but with additional strings + "langtags" and "transkeys". + */ + size_t itext_num; /*the amount of international texts in this PNG*/ + char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ + char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ + char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ + char** itext_strings; /*the actual international text - UTF-8 string*/ + + /*time chunk (tIME)*/ + unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ + LodePNGTime time; + + /*phys chunk (pHYs)*/ + unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ + unsigned phys_x; /*pixels per unit in x direction*/ + unsigned phys_y; /*pixels per unit in y direction*/ + unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ + + /* + unknown chunks + There are 3 buffers, one for each position in the PNG where unknown chunks can appear + each buffer contains all unknown chunks for that position consecutively + The 3 buffers are the unknown chunks between certain critical chunks: + 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND + Do not allocate or traverse this data yourself. Use the chunk traversing functions declared + later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. + */ + unsigned char* unknown_chunks_data[3]; + size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGInfo; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_info_init(LodePNGInfo* info); +void lodepng_info_cleanup(LodePNGInfo* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ + +void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/* +Converts raw buffer from one color type to another color type, based on +LodePNGColorMode structs to describe the input and output color type. +See the reference manual at the end of this header file to see which color conversions are supported. +return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) +The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel +of the output color type (lodepng_get_bpp). +For < 8 bpp images, there should not be padding bits at the end of scanlines. +For 16-bit per channel colors, uses big endian format like PNG does. +Return value is LodePNG error code +*/ +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + const LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DECODER +/* +Settings for the decoder. This contains settings for the PNG and the Zlib +decoder, but not the Info settings from the Info structs. +*/ +typedef struct LodePNGDecoderSettings +{ + LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ + + unsigned ignore_crc; /*ignore CRC checksums*/ + + unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ + /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ + unsigned remember_unknown_chunks; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGDecoderSettings; + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ +typedef enum LodePNGFilterStrategy +{ + /*every filter at zero*/ + LFS_ZERO, + /*Use filter that gives minimum sum, as described in the official PNG filter heuristic.*/ + LFS_MINSUM, + /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending + on the image, this is better or worse than minsum.*/ + LFS_ENTROPY, + /* + Brute-force-search PNG filters by compressing each filter for each scanline. + Experimental, very slow, and only rarely gives better compression than MINSUM. + */ + LFS_BRUTE_FORCE, + /*use predefined_filters buffer: you specify the filter type for each scanline*/ + LFS_PREDEFINED +} LodePNGFilterStrategy; + +/*Gives characteristics about the colors of the image, which helps decide which color model to use for encoding. +Used internally by default if "auto_convert" is enabled. Public because it's useful for custom algorithms.*/ +typedef struct LodePNGColorProfile +{ + unsigned colored; /*not greyscale*/ + unsigned key; /*if true, image is not opaque. Only if true and alpha is false, color key is possible.*/ + unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/ + unsigned short key_g; + unsigned short key_b; + unsigned alpha; /*alpha channel or alpha palette required*/ + unsigned numcolors; /*amount of colors, up to 257. Not valid if bits == 16.*/ + unsigned char palette[1024]; /*Remembers up to the first 256 RGBA colors, in no particular order*/ + unsigned bits; /*bits per channel (not for palette). 1,2 or 4 for greyscale only. 16 if 16-bit per channel required.*/ +} LodePNGColorProfile; + +void lodepng_color_profile_init(LodePNGColorProfile* profile); + +/*Get a LodePNGColorProfile of the image.*/ +unsigned lodepng_get_color_profile(LodePNGColorProfile* profile, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); +/*The function LodePNG uses internally to decide the PNG color with auto_convert. +Chooses an optimal color model, e.g. grey if only grey pixels, palette if < 256 colors, ...*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in); + +/*Settings for the encoder.*/ +typedef struct LodePNGEncoderSettings +{ + LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ + + unsigned auto_convert; /*automatically choose output PNG color type. Default: true*/ + + /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than + 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to + completely follow the official PNG heuristic, filter_palette_zero must be true and + filter_strategy must be LFS_MINSUM*/ + unsigned filter_palette_zero; + /*Which filter strategy to use when not using zeroes due to filter_palette_zero. + Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ + LodePNGFilterStrategy filter_strategy; + /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with + the same length as the amount of scanlines in the image, and each value must <= 5. You + have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero + must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ + const unsigned char* predefined_filters; + + /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). + If colortype is 3, PLTE is _always_ created.*/ + unsigned force_palette; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*add LodePNG identifier and version as a text chunk, for debugging*/ + unsigned add_id; + /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ + unsigned text_compression; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGEncoderSettings; + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) +/*The settings, state and information for extended encoding and decoding.*/ +typedef struct LodePNGState +{ +#ifdef LODEPNG_COMPILE_DECODER + LodePNGDecoderSettings decoder; /*the decoding settings*/ +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + LodePNGEncoderSettings encoder; /*the encoding settings*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ + LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ + unsigned error; +#ifdef LODEPNG_COMPILE_CPP + /* For the lodepng::State subclass. */ + virtual ~LodePNGState(){} +#endif +} LodePNGState; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_state_init(LodePNGState* state); +void lodepng_state_cleanup(LodePNGState* state); +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_DECODER +/* +Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and +getting much more information about the PNG image and color mode. +*/ +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); + +/* +Read the PNG header, but not the actual data. This returns only the information +that is in the header chunk of the PNG, such as width, height and color type. The +information is placed in the info_png field of the LodePNGState. +*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* +The lodepng_chunk functions are normally not needed, except to traverse the +unknown chunks stored in the LodePNGInfo struct, or add new ones to it. +It also allows traversing the chunks of an encoded PNG file yourself. + +PNG standard chunk naming conventions: +First byte: uppercase = critical, lowercase = ancillary +Second byte: uppercase = public, lowercase = private +Third byte: must be uppercase +Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy +*/ + +/* +Gets the length of the data of the chunk. Total chunk length has 12 bytes more. +There must be at least 4 bytes to read from. If the result value is too large, +it may be corrupt data. +*/ +unsigned lodepng_chunk_length(const unsigned char* chunk); + +/*puts the 4-byte type in null terminated string*/ +void lodepng_chunk_type(char type[5], const unsigned char* chunk); + +/*check if the type is the given type*/ +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); + +/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); + +/*0: public, 1: private (see PNG standard)*/ +unsigned char lodepng_chunk_private(const unsigned char* chunk); + +/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); + +/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ +unsigned char* lodepng_chunk_data(unsigned char* chunk); +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); + +/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ +unsigned lodepng_chunk_check_crc(const unsigned char* chunk); + +/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ +void lodepng_chunk_generate_crc(unsigned char* chunk); + +/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ +unsigned char* lodepng_chunk_next(unsigned char* chunk); +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk); + +/* +Appends chunk to the data in out. The given chunk should already have its chunk header. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returns error code (0 if it went ok) +*/ +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk); + +/* +Appends new chunk to out. The chunk to append is given by giving its length, type +and data separately. The type is a 4-letter string. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returne error code (0 if it went ok) +*/ +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data); + + +/*Calculate CRC32 of buffer*/ +unsigned lodepng_crc32(const unsigned char* buf, size_t len); +#endif /*LODEPNG_COMPILE_PNG*/ + + +#ifdef LODEPNG_COMPILE_ZLIB +/* +This zlib part can be used independently to zlib compress and decompress a +buffer. It cannot be used to create gzip files however, and it only supports the +part of zlib that is required for PNG, it does not support dictionaries. +*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); + +/* +Decompresses Zlib data. Reallocates the out buffer and appends the data. The +data must be according to the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Compresses data with Zlib. Reallocates the out buffer and appends the data. +Zlib adds a small header and trailer around the deflate data. +The data is output in the format of the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +/* +Find length-limited Huffman code for given frequencies. This function is in the +public interface only for tests, it's used internally by lodepng_deflate. +*/ +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen); + +/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into buffer. The function allocates the out buffer, and +after usage you should free it. +out: output parameter, contains pointer to loaded buffer. +outsize: output parameter, size of the allocated out buffer +filename: the path to the file to load +return value: error code (0 means ok) +*/ +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); + +/* +Save a file from buffer to disk. Warning, if it exists, this function overwrites +the file without warning! +buffer: the buffer to write +buffersize: size of the buffer to write +filename: the path to the file to save to +return value: error code (0 means ok) +*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ + +#ifdef LODEPNG_COMPILE_CPP +/* The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. */ +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_PNG +class State : public LodePNGState +{ + public: + State(); + State(const State& other); + virtual ~State(); + State& operator=(const State& other); +}; + +#ifdef LODEPNG_COMPILE_DECODER +/* Same as other lodepng::decode, but using a State for more settings and information. */ +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize); +unsigned decode(std::vector& out, unsigned& w, unsigned& h, + State& state, + const std::vector& in); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* Same as other lodepng::encode, but using a State for more settings and information. */ +unsigned encode(std::vector& out, + const unsigned char* in, unsigned w, unsigned h, + State& state); +unsigned encode(std::vector& out, + const std::vector& in, unsigned w, unsigned h, + State& state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into an std::vector. +return value: error code (0 means ok) +*/ +unsigned load_file(std::vector& buffer, const std::string& filename); + +/* +Save the binary data in an std::vector to a file on disk. The file is overwritten +without warning. +*/ +unsigned save_file(const std::vector& buffer, const std::string& filename); +#endif /* LODEPNG_COMPILE_DISK */ +#endif /* LODEPNG_COMPILE_PNG */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +/* Zlib-decompress an unsigned char buffer */ +unsigned decompress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); + +/* Zlib-decompress an std::vector */ +unsigned decompress(std::vector& out, const std::vector& in, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); +#endif /* LODEPNG_COMPILE_DECODER */ + +#ifdef LODEPNG_COMPILE_ENCODER +/* Zlib-compress an unsigned char buffer */ +unsigned compress(std::vector& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); + +/* Zlib-compress an std::vector */ +unsigned compress(std::vector& out, const std::vector& in, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); +#endif /* LODEPNG_COMPILE_ENCODER */ +#endif /* LODEPNG_COMPILE_ZLIB */ +} /* namespace lodepng */ +#endif /*LODEPNG_COMPILE_CPP*/ + +/* +TODO: +[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often +[.] check compatibility with various compilers - done but needs to be redone for every newer version +[X] converting color to 16-bit per channel types +[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) +[ ] make sure encoder generates no chunks with size > (2^31)-1 +[ ] partial decoding (stream processing) +[X] let the "isFullyOpaque" function check color keys and transparent palettes too +[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" +[ ] don't stop decoding on errors like 69, 57, 58 (make warnings) +[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes +[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ... +[ ] allow user to give data (void*) to custom allocator +*/ + +#endif /*LODEPNG_H inclusion guard*/ + +/* +LodePNG Documentation +--------------------- + +0. table of contents +-------------------- + + 1. about + 1.1. supported features + 1.2. features not supported + 2. C and C++ version + 3. security + 4. decoding + 5. encoding + 6. color conversions + 6.1. PNG color types + 6.2. color conversions + 6.3. padding bits + 6.4. A note about 16-bits per channel and endianness + 7. error values + 8. chunks and PNG editing + 9. compiler support + 10. examples + 10.1. decoder C++ example + 10.2. decoder C example + 11. state settings reference + 12. changes + 13. contact information + + +1. about +-------- + +PNG is a file format to store raster images losslessly with good compression, +supporting different color types and alpha channel. + +LodePNG is a PNG codec according to the Portable Network Graphics (PNG) +Specification (Second Edition) - W3C Recommendation 10 November 2003. + +The specifications used are: + +*) Portable Network Graphics (PNG) Specification (Second Edition): + http://www.w3.org/TR/2003/REC-PNG-20031110 +*) RFC 1950 ZLIB Compressed Data Format version 3.3: + http://www.gzip.org/zlib/rfc-zlib.html +*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: + http://www.gzip.org/zlib/rfc-deflate.html + +The most recent version of LodePNG can currently be found at +http://lodev.org/lodepng/ + +LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds +extra functionality. + +LodePNG exists out of two files: +-lodepng.h: the header file for both C and C++ +-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage + +If you want to start using LodePNG right away without reading this doc, get the +examples from the LodePNG website to see how to use it in code, or check the +smaller examples in chapter 13 here. + +LodePNG is simple but only supports the basic requirements. To achieve +simplicity, the following design choices were made: There are no dependencies +on any external library. There are functions to decode and encode a PNG with +a single function call, and extended versions of these functions taking a +LodePNGState struct allowing to specify or get more information. By default +the colors of the raw image are always RGB or RGBA, no matter what color type +the PNG file uses. To read and write files, there are simple functions to +convert the files to/from buffers in memory. + +This all makes LodePNG suitable for loading textures in games, demos and small +programs, ... It's less suitable for full fledged image editors, loading PNGs +over network (it requires all the image data to be available before decoding can +begin), life-critical systems, ... + +1.1. supported features +----------------------- + +The following features are supported by the decoder: + +*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, + or the same color type as the PNG +*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image +*) Adam7 interlace and deinterlace for any color type +*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk +*) support for alpha channels, including RGBA color model, translucent palettes and color keying +*) zlib decompression (inflate) +*) zlib compression (deflate) +*) CRC32 and ADLER32 checksums +*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. +*) the following chunks are supported (generated/interpreted) by both encoder and decoder: + IHDR: header information + PLTE: color palette + IDAT: pixel data + IEND: the final chunk + tRNS: transparency for palettized images + tEXt: textual information + zTXt: compressed textual information + iTXt: international textual information + bKGD: suggested background color + pHYs: physical dimensions + tIME: modification time + +1.2. features not supported +--------------------------- + +The following features are _not_ supported: + +*) some features needed to make a conformant PNG-Editor might be still missing. +*) partial loading/stream processing. All data must be available and is processed in one call. +*) The following public chunks are not supported but treated as unknown chunks by LodePNG + cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT + Some of these are not supported on purpose: LodePNG wants to provide the RGB values + stored in the pixels, not values modified by system dependent gamma or color models. + + +2. C and C++ version +-------------------- + +The C version uses buffers allocated with alloc that you need to free() +yourself. You need to use init and cleanup functions for each struct whenever +using a struct from the C version to avoid exploits and memory leaks. + +The C++ version has extra functions with std::vectors in the interface and the +lodepng::State class which is a LodePNGState with constructor and destructor. + +These files work without modification for both C and C++ compilers because all +the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers +ignore it, and the C code is made to compile both with strict ISO C90 and C++. + +To use the C++ version, you need to rename the source file to lodepng.cpp +(instead of lodepng.c), and compile it with a C++ compiler. + +To use the C version, you need to rename the source file to lodepng.c (instead +of lodepng.cpp), and compile it with a C compiler. + + +3. Security +----------- + +Even if carefully designed, it's always possible that LodePNG contains possible +exploits. If you discover one, please let me know, and it will be fixed. + +When using LodePNG, care has to be taken with the C version of LodePNG, as well +as the C-style structs when working with C++. The following conventions are used +for all C-style structs: + +-if a struct has a corresponding init function, always call the init function when making a new one +-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks +-if a struct has a corresponding copy function, use the copy function instead of "=". + The destination must also be inited already. + + +4. Decoding +----------- + +Decoding converts a PNG compressed image to a raw pixel buffer. + +Most documentation on using the decoder is at its declarations in the header +above. For C, simple decoding can be done with functions such as +lodepng_decode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_decode. For C++, all decoding can be done with the +various lodepng::decode functions, and lodepng::State can be used for advanced +features. + +When using the LodePNGState, it uses the following fields for decoding: +*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here +*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get +*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use + +LodePNGInfo info_png +-------------------- + +After decoding, this contains extra information of the PNG image, except the actual +pixels, width and height because these are already gotten directly from the decoder +functions. + +It contains for example the original color type of the PNG image, text comments, +suggested background color, etc... More details about the LodePNGInfo struct are +at its declaration documentation. + +LodePNGColorMode info_raw +------------------------- + +When decoding, here you can specify which color type you want +the resulting raw image to be. If this is different from the colortype of the +PNG, then the decoder will automatically convert the result. This conversion +always works, except if you want it to convert a color PNG to greyscale or to +a palette with missing colors. + +By default, 32-bit color is used for the result. + +LodePNGDecoderSettings decoder +------------------------------ + +The settings can be used to ignore the errors created by invalid CRC and Adler32 +chunks, and to disable the decoding of tEXt chunks. + +There's also a setting color_convert, true by default. If false, no conversion +is done, the resulting data will be as it was in the PNG (after decompression) +and you'll have to puzzle the colors of the pixels together yourself using the +color type information in the LodePNGInfo. + + +5. Encoding +----------- + +Encoding converts a raw pixel buffer to a PNG compressed image. + +Most documentation on using the encoder is at its declarations in the header +above. For C, simple encoding can be done with functions such as +lodepng_encode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_encode. For C++, all encoding can be done with the +various lodepng::encode functions, and lodepng::State can be used for advanced +features. + +Like the decoder, the encoder can also give errors. However it gives less errors +since the encoder input is trusted, the decoder input (a PNG image that could +be forged by anyone) is not trusted. + +When using the LodePNGState, it uses the following fields for encoding: +*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. +*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has +*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use + +LodePNGInfo info_png +-------------------- + +When encoding, you use this the opposite way as when decoding: for encoding, +you fill in the values you want the PNG to have before encoding. By default it's +not needed to specify a color type for the PNG since it's automatically chosen, +but it's possible to choose it yourself given the right settings. + +The encoder will not always exactly match the LodePNGInfo struct you give, +it tries as close as possible. Some things are ignored by the encoder. The +encoder uses, for example, the following settings from it when applicable: +colortype and bitdepth, text chunks, time chunk, the color key, the palette, the +background color, the interlace method, unknown chunks, ... + +When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. +If the palette contains any colors for which the alpha channel is not 255 (so +there are translucent colors in the palette), it'll add a tRNS chunk. + +LodePNGColorMode info_raw +------------------------- + +You specify the color type of the raw image that you give to the input here, +including a possible transparent color key and palette you happen to be using in +your raw image data. + +By default, 32-bit color is assumed, meaning your input has to be in RGBA +format with 4 bytes (unsigned chars) per pixel. + +LodePNGEncoderSettings encoder +------------------------------ + +The following settings are supported (some are in sub-structs): +*) auto_convert: when this option is enabled, the encoder will +automatically choose the smallest possible color mode (including color key) that +can encode the colors of all pixels without information loss. +*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, + 2 = dynamic huffman tree (best compression). Should be 2 for proper + compression. +*) use_lz77: whether or not to use LZ77 for compressed block types. Should be + true for proper compression. +*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value + 2048 by default, but can be set to 32768 for better, but slow, compression. +*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE + chunk if force_palette is true. This can used as suggested palette to convert + to by viewers that don't support more than 256 colors (if those still exist) +*) add_id: add text chunk "Encoder: LodePNG " to the image. +*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. + zTXt chunks use zlib compression on the text. This gives a smaller result on + large texts but a larger result on small texts (such as a single program name). + It's all tEXt or all zTXt though, there's no separate setting per text yet. + + +6. color conversions +-------------------- + +An important thing to note about LodePNG, is that the color type of the PNG, and +the color type of the raw image, are completely independent. By default, when +you decode a PNG, you get the result as a raw image in the color type you want, +no matter whether the PNG was encoded with a palette, greyscale or RGBA color. +And if you encode an image, by default LodePNG will automatically choose the PNG +color type that gives good compression based on the values of colors and amount +of colors in the image. It can be configured to let you control it instead as +well, though. + +To be able to do this, LodePNG does conversions from one color mode to another. +It can convert from almost any color type to any other color type, except the +following conversions: RGB to greyscale is not supported, and converting to a +palette when the palette doesn't have a required color is not supported. This is +not supported on purpose: this is information loss which requires a color +reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey +is easy, but there are multiple ways if you want to give some channels more +weight). + +By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB +color, no matter what color type the PNG has. And by default when encoding, +LodePNG automatically picks the best color model for the output PNG, and expects +the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control +the color format of the images yourself, you can skip this chapter. + +6.1. PNG color types +-------------------- + +A PNG image can have many color types, ranging from 1-bit color to 64-bit color, +as well as palettized color modes. After the zlib decompression and unfiltering +in the PNG image is done, the raw pixel data will have that color type and thus +a certain amount of bits per pixel. If you want the output raw image after +decoding to have another color type, a conversion is done by LodePNG. + +The PNG specification gives the following color types: + +0: greyscale, bit depths 1, 2, 4, 8, 16 +2: RGB, bit depths 8 and 16 +3: palette, bit depths 1, 2, 4 and 8 +4: greyscale with alpha, bit depths 8 and 16 +6: RGBA, bit depths 8 and 16 + +Bit depth is the amount of bits per pixel per color channel. So the total amount +of bits per pixel is: amount of channels * bitdepth. + +6.2. color conversions +---------------------- + +As explained in the sections about the encoder and decoder, you can specify +color types and bit depths in info_png and info_raw to change the default +behaviour. + +If, when decoding, you want the raw image to be something else than the default, +you need to set the color type and bit depth you want in the LodePNGColorMode, +or the parameters colortype and bitdepth of the simple decoding function. + +If, when encoding, you use another color type than the default in the raw input +image, you need to specify its color type and bit depth in the LodePNGColorMode +of the raw image, or use the parameters colortype and bitdepth of the simple +encoding function. + +If, when encoding, you don't want LodePNG to choose the output PNG color type +but control it yourself, you need to set auto_convert in the encoder settings +to false, and specify the color type you want in the LodePNGInfo of the +encoder (including palette: it can generate a palette if auto_convert is true, +otherwise not). + +If the input and output color type differ (whether user chosen or auto chosen), +LodePNG will do a color conversion, which follows the rules below, and may +sometimes result in an error. + +To avoid some confusion: +-the decoder converts from PNG to raw image +-the encoder converts from raw image to PNG +-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image +-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG +-when encoding, the color type in LodePNGInfo is ignored if auto_convert + is enabled, it is automatically generated instead +-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original + PNG image, but it can be ignored since the raw image has the color type you requested instead +-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion + between the color types is done if the color types are supported. If it is not + supported, an error is returned. If the types are the same, no conversion is done. +-even though some conversions aren't supported, LodePNG supports loading PNGs from any + colortype and saving PNGs to any colortype, sometimes it just requires preparing + the raw image correctly before encoding. +-both encoder and decoder use the same color converter. + +Non supported color conversions: +-color to greyscale: no error is thrown, but the result will look ugly because +only the red channel is taken +-anything to palette when that palette does not have that color in it: in this +case an error is thrown + +Supported color conversions: +-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA +-any grey or grey+alpha, to grey or grey+alpha +-anything to a palette, as long as the palette has the requested colors in it +-removing alpha channel +-higher to smaller bitdepth, and vice versa + +If you want no color conversion to be done (e.g. for speed or control): +-In the encoder, you can make it save a PNG with any color type by giving the +raw color mode and LodePNGInfo the same color mode, and setting auto_convert to +false. +-In the decoder, you can make it store the pixel data in the same color type +as the PNG has, by setting the color_convert setting to false. Settings in +info_raw are then ignored. + +The function lodepng_convert does the color conversion. It is available in the +interface but normally isn't needed since the encoder and decoder already call +it. + +6.3. padding bits +----------------- + +In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines +have a bit amount that isn't a multiple of 8, then padding bits are used so that each +scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. +The raw input image you give to the encoder, and the raw output image you get from the decoder +will NOT have these padding bits, e.g. in the case of a 1-bit image with a width +of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, +not the first bit of a new byte. + +6.4. A note about 16-bits per channel and endianness +---------------------------------------------------- + +LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like +for any other color format. The 16-bit values are stored in big endian (most +significant byte first) in these arrays. This is the opposite order of the +little endian used by x86 CPU's. + +LodePNG always uses big endian because the PNG file format does so internally. +Conversions to other formats than PNG uses internally are not supported by +LodePNG on purpose, there are myriads of formats, including endianness of 16-bit +colors, the order in which you store R, G, B and A, and so on. Supporting and +converting to/from all that is outside the scope of LodePNG. + +This may mean that, depending on your use case, you may want to convert the big +endian output of LodePNG to little endian with a for loop. This is certainly not +always needed, many applications and libraries support big endian 16-bit colors +anyway, but it means you cannot simply cast the unsigned char* buffer to an +unsigned short* buffer on x86 CPUs. + + +7. error values +--------------- + +All functions in LodePNG that return an error code, return 0 if everything went +OK, or a non-zero code if there was an error. + +The meaning of the LodePNG error values can be retrieved with the function +lodepng_error_text: given the numerical error code, it returns a description +of the error in English as a string. + +Check the implementation of lodepng_error_text to see the meaning of each code. + + +8. chunks and PNG editing +------------------------- + +If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG +editor that should follow the rules about handling of unknown chunks, or if your +program is able to read other types of chunks than the ones handled by LodePNG, +then that's possible with the chunk functions of LodePNG. + +A PNG chunk has the following layout: + +4 bytes length +4 bytes type name +length bytes data +4 bytes CRC + +8.1. iterating through chunks +----------------------------- + +If you have a buffer containing the PNG image data, then the first chunk (the +IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the +signature of the PNG and are not part of a chunk. But if you start at byte 8 +then you have a chunk, and can check the following things of it. + +NOTE: none of these functions check for memory buffer boundaries. To avoid +exploits, always make sure the buffer contains all the data of the chunks. +When using lodepng_chunk_next, make sure the returned value is within the +allocated memory. + +unsigned lodepng_chunk_length(const unsigned char* chunk): + +Get the length of the chunk's data. The total chunk length is this length + 12. + +void lodepng_chunk_type(char type[5], const unsigned char* chunk): +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): + +Get the type of the chunk or compare if it's a certain type + +unsigned char lodepng_chunk_critical(const unsigned char* chunk): +unsigned char lodepng_chunk_private(const unsigned char* chunk): +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): + +Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). +Check if the chunk is private (public chunks are part of the standard, private ones not). +Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical +chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your +program doesn't handle that type of unknown chunk. + +unsigned char* lodepng_chunk_data(unsigned char* chunk): +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): + +Get a pointer to the start of the data of the chunk. + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk): +void lodepng_chunk_generate_crc(unsigned char* chunk): + +Check if the crc is correct or generate a correct one. + +unsigned char* lodepng_chunk_next(unsigned char* chunk): +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): + +Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these +functions do no boundary checking of the allocated data whatsoever, so make sure there is enough +data available in the buffer to be able to go to the next chunk. + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk): +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data): + +These functions are used to create new chunks that are appended to the data in *out that has +length *outlength. The append function appends an existing chunk to the new data. The create +function creates a new chunk with the given parameters and appends it. Type is the 4-letter +name of the chunk. + +8.2. chunks in info_png +----------------------- + +The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 +buffers (each with size) to contain 3 types of unknown chunks: +the ones that come before the PLTE chunk, the ones that come between the PLTE +and the IDAT chunks, and the ones that come after the IDAT chunks. +It's necessary to make the distionction between these 3 cases because the PNG +standard forces to keep the ordering of unknown chunks compared to the critical +chunks, but does not force any other ordering rules. + +info_png.unknown_chunks_data[0] is the chunks before PLTE +info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT +info_png.unknown_chunks_data[2] is the chunks after IDAT + +The chunks in these 3 buffers can be iterated through and read by using the same +way described in the previous subchapter. + +When using the decoder to decode a PNG, you can make it store all unknown chunks +if you set the option settings.remember_unknown_chunks to 1. By default, this +option is off (0). + +The encoder will always encode unknown chunks that are stored in the info_png. +If you need it to add a particular chunk that isn't known by LodePNG, you can +use lodepng_chunk_append or lodepng_chunk_create to the chunk data in +info_png.unknown_chunks_data[x]. + +Chunks that are known by LodePNG should not be added in that way. E.g. to make +LodePNG add a bKGD chunk, set background_defined to true and add the correct +parameters there instead. + + +9. compiler support +------------------- + +No libraries other than the current standard C library are needed to compile +LodePNG. For the C++ version, only the standard C++ library is needed on top. +Add the files lodepng.c(pp) and lodepng.h to your project, include +lodepng.h where needed, and your program can read/write PNG files. + +It is compatible with C90 and up, and C++03 and up. + +If performance is important, use optimization when compiling! For both the +encoder and decoder, this makes a large difference. + +Make sure that LodePNG is compiled with the same compiler of the same version +and with the same settings as the rest of the program, or the interfaces with +std::vectors and std::strings in C++ can be incompatible. + +CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. + +*) gcc and g++ + +LodePNG is developed in gcc so this compiler is natively supported. It gives no +warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ +version 4.7.1 on Linux, 32-bit and 64-bit. + +*) Clang + +Fully supported and warning-free. + +*) Mingw + +The Mingw compiler (a port of gcc for Windows) should be fully supported by +LodePNG. + +*) Visual Studio and Visual C++ Express Edition + +LodePNG should be warning-free with warning level W4. Two warnings were disabled +with pragmas though: warning 4244 about implicit conversions, and warning 4996 +where it wants to use a non-standard function fopen_s instead of the standard C +fopen. + +Visual Studio may want "stdafx.h" files to be included in each source file and +give an error "unexpected end of file while looking for precompiled header". +This is not standard C++ and will not be added to the stock LodePNG. You can +disable it for lodepng.cpp only by right clicking it, Properties, C/C++, +Precompiled Headers, and set it to Not Using Precompiled Headers there. + +NOTE: Modern versions of VS should be fully supported, but old versions, e.g. +VS6, are not guaranteed to work. + +*) Compilers on Macintosh + +LodePNG has been reported to work both with gcc and LLVM for Macintosh, both for +C and C++. + +*) Other Compilers + +If you encounter problems on any compilers, feel free to let me know and I may +try to fix it if the compiler is modern and standards complient. + + +10. examples +------------ + +This decoder example shows the most basic usage of LodePNG. More complex +examples can be found on the LodePNG website. + +10.1. decoder C++ example +------------------------- + +#include "lodepng.h" +#include + +int main(int argc, char *argv[]) +{ + const char* filename = argc > 1 ? argv[1] : "test.png"; + + //load and decode + std::vector image; + unsigned width, height; + unsigned error = lodepng::decode(image, width, height, filename); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +10.2. decoder C example +----------------------- + +#include "lodepng.h" + +int main(int argc, char *argv[]) +{ + unsigned error; + unsigned char* image; + size_t width, height; + const char* filename = argc > 1 ? argv[1] : "test.png"; + + error = lodepng_decode32_file(&image, &width, &height, filename); + + if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); + + / * use image here * / + + free(image); + return 0; +} + +11. state settings reference +---------------------------- + +A quick reference of some settings to set on the LodePNGState + +For decoding: + +state.decoder.zlibsettings.ignore_adler32: ignore ADLER32 checksums +state.decoder.zlibsettings.custom_...: use custom inflate function +state.decoder.ignore_crc: ignore CRC checksums +state.decoder.color_convert: convert internal PNG color to chosen one +state.decoder.read_text_chunks: whether to read in text metadata chunks +state.decoder.remember_unknown_chunks: whether to read in unknown chunks +state.info_raw.colortype: desired color type for decoded image +state.info_raw.bitdepth: desired bit depth for decoded image +state.info_raw....: more color settings, see struct LodePNGColorMode +state.info_png....: no settings for decoder but ouput, see struct LodePNGInfo + +For encoding: + +state.encoder.zlibsettings.btype: disable compression by setting it to 0 +state.encoder.zlibsettings.use_lz77: use LZ77 in compression +state.encoder.zlibsettings.windowsize: tweak LZ77 windowsize +state.encoder.zlibsettings.minmatch: tweak min LZ77 length to match +state.encoder.zlibsettings.nicematch: tweak LZ77 match where to stop searching +state.encoder.zlibsettings.lazymatching: try one more LZ77 matching +state.encoder.zlibsettings.custom_...: use custom deflate function +state.encoder.auto_convert: choose optimal PNG color type, if 0 uses info_png +state.encoder.filter_palette_zero: PNG filter strategy for palette +state.encoder.filter_strategy: PNG filter strategy to encode with +state.encoder.force_palette: add palette even if not encoding to one +state.encoder.add_id: add LodePNG identifier and version as a text chunk +state.encoder.text_compression: use compressed text chunks for metadata +state.info_raw.colortype: color type of raw input image you provide +state.info_raw.bitdepth: bit depth of raw input image you provide +state.info_raw: more color settings, see struct LodePNGColorMode +state.info_png.color.colortype: desired color type if auto_convert is false +state.info_png.color.bitdepth: desired bit depth if auto_convert is false +state.info_png.color....: more color settings, see struct LodePNGColorMode +state.info_png....: more PNG related settings, see struct LodePNGInfo + + +12. changes +----------- + +The version number of LodePNG is the date of the change given in the format +yyyymmdd. + +Some changes aren't backwards compatible. Those are indicated with a (!) +symbol. + +*) 18 apr 2016: Changed qsort to custom stable sort (for platforms w/o qsort). +*) 09 apr 2016: Fixed colorkey usage detection, and better file loading (within + the limits of pure C90). +*) 08 dec 2015: Made load_file function return error if file can't be opened. +*) 24 okt 2015: Bugfix with decoding to palette output. +*) 18 apr 2015: Boundary PM instead of just package-merge for faster encoding. +*) 23 aug 2014: Reduced needless memory usage of decoder. +*) 28 jun 2014: Removed fix_png setting, always support palette OOB for + simplicity. Made ColorProfile public. +*) 09 jun 2014: Faster encoder by fixing hash bug and more zeros optimization. +*) 22 dec 2013: Power of two windowsize required for optimization. +*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. +*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). +*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_" + prefix for the custom allocators and made it possible with a new #define to + use custom ones in your project without needing to change lodepng's code. +*) 28 jan 2013: Bugfix with color key. +*) 27 okt 2012: Tweaks in text chunk keyword length error handling. +*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode. + (no palette). Better deflate tree encoding. New compression tweak settings. + Faster color conversions while decoding. Some internal cleanups. +*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. +*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions + and made it work with function pointers instead. +*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc + and free functions and toggle #defines from compiler flags. Small fixes. +*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible. +*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed + redundant C++ codec classes. Reduced amount of structs. Everything changed, + but it is cleaner now imho and functionality remains the same. Also fixed + several bugs and shrunk the implementation code. Made new samples. +*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best + PNG color model and bit depth, based on the amount and type of colors of the + raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. +*) 9 okt 2011: simpler hash chain implementation for the encoder. +*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. +*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. + A bug with the PNG filtertype heuristic was fixed, so that it chooses much + better ones (it's quite significant). A setting to do an experimental, slow, + brute force search for PNG filter types is added. +*) 17 aug 2011 (!): changed some C zlib related function names. +*) 16 aug 2011: made the code less wide (max 120 characters per line). +*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. +*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. +*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman + to optimize long sequences of zeros. +*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and + LodePNG_InfoColor_canHaveAlpha functions for convenience. +*) 7 nov 2010: added LodePNG_error_text function to get error code description. +*) 30 okt 2010: made decoding slightly faster +*) 26 okt 2010: (!) changed some C function and struct names (more consistent). + Reorganized the documentation and the declaration order in the header. +*) 08 aug 2010: only changed some comments and external samples. +*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. +*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. +*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could + read by ignoring the problem but windows apps couldn't. +*) 06 jun 2008: added more error checks for out of memory cases. +*) 26 apr 2008: added a few more checks here and there to ensure more safety. +*) 06 mar 2008: crash with encoding of strings fixed +*) 02 feb 2008: support for international text chunks added (iTXt) +*) 23 jan 2008: small cleanups, and #defines to divide code in sections +*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. +*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. +*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added + Also various fixes, such as in the deflate and the padding bits code. +*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved + filtering code of encoder. +*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A + C++ wrapper around this provides an interface almost identical to before. + Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code + are together in these files but it works both for C and C++ compilers. +*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks +*) 30 aug 2007: bug fixed which makes this Borland C++ compatible +*) 09 aug 2007: some VS2005 warnings removed again +*) 21 jul 2007: deflate code placed in new namespace separate from zlib code +*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images +*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing + invalid std::vector element [0] fixed, and level 3 and 4 warnings removed +*) 02 jun 2007: made the encoder add a tag with version by default +*) 27 may 2007: zlib and png code separated (but still in the same file), + simple encoder/decoder functions added for more simple usage cases +*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), + moved some examples from here to lodepng_examples.cpp +*) 12 may 2007: palette decoding bug fixed +*) 24 apr 2007: changed the license from BSD to the zlib license +*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. +*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding + palettized PNG images. Plus little interface change with palette and texts. +*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. + Fixed a bug where the end code of a block had length 0 in the Huffman tree. +*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented + and supported by the encoder, resulting in smaller PNGs at the output. +*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. +*) 24 jan 2007: gave encoder an error interface. Added color conversion from any + greyscale type to 8-bit greyscale with or without alpha. +*) 21 jan 2007: (!) Totally changed the interface. It allows more color types + to convert to and is more uniform. See the manual for how it works now. +*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: + encode/decode custom tEXt chunks, separate classes for zlib & deflate, and + at last made the decoder give errors for incorrect Adler32 or Crc. +*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. +*) 29 dec 2006: Added support for encoding images without alpha channel, and + cleaned out code as well as making certain parts faster. +*) 28 dec 2006: Added "Settings" to the encoder. +*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. + Removed some code duplication in the decoder. Fixed little bug in an example. +*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. + Fixed a bug of the decoder with 16-bit per color. +*) 15 okt 2006: Changed documentation structure +*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the + given image buffer, however for now it's not compressed. +*) 08 sep 2006: (!) Changed to interface with a Decoder class +*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different + way. Renamed decodePNG to decodePNGGeneric. +*) 29 jul 2006: (!) Changed the interface: image info is now returned as a + struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. +*) 28 jul 2006: Cleaned the code and added new error checks. + Corrected terminology "deflate" into "inflate". +*) 23 jun 2006: Added SDL example in the documentation in the header, this + example allows easy debugging by displaying the PNG and its transparency. +*) 22 jun 2006: (!) Changed way to obtain error value. Added + loadFile function for convenience. Made decodePNG32 faster. +*) 21 jun 2006: (!) Changed type of info vector to unsigned. + Changed position of palette in info vector. Fixed an important bug that + happened on PNGs with an uncompressed block. +*) 16 jun 2006: Internally changed unsigned into unsigned where + needed, and performed some optimizations. +*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them + in LodePNG namespace. Changed the order of the parameters. Rewrote the + documentation in the header. Renamed files to lodepng.cpp and lodepng.h +*) 22 apr 2006: Optimized and improved some code +*) 07 sep 2005: (!) Changed to std::vector interface +*) 12 aug 2005: Initial release (C++, decoder only) + + +13. contact information +----------------------- + +Feel free to contact me with suggestions, problems, comments, ... concerning +LodePNG. If you encounter a PNG image that doesn't work properly with this +decoder, feel free to send it and I'll use it to find and fix the problem. + +My email address is (puzzle the account and domain together with an @ symbol): +Domain: gmail dot com. +Account: lode dot vandevenne. + + +Copyright (c) 2005-2016 Lode Vandevenne +*/ diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h index f41c5660b3a..f2b0289ce27 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imconfig.h @@ -24,10 +24,10 @@ #define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION //---- Include imgui_user.inl at the end of imgui.cpp so you can include code that extends ImGui using its private data/functions. -//#define IMGUI_INCLUDE_IMGUI_USER_INL +#define IMGUI_INCLUDE_IMGUI_USER_INL //---- Include imgui_user.h at the end of imgui.h -//#define IMGUI_INCLUDE_IMGUI_USER_H +#define IMGUI_INCLUDE_IMGUI_USER_H //---- Don't implement default handlers for Windows (so as not to link with OpenClipboard() and others Win32 functions) #define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp index 22f2326f052..6ae5c798648 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.49 WIP +// dear imgui, v1.50 WIP // (main code and documentation) // See ImGui::ShowTestWindow() in imgui_demo.cpp for demo code. @@ -153,14 +153,16 @@ Here is a change-log of API breaking changes, if you are using one of the functions listed, expect to have to fix some code. Also read releases logs https://github.com/ocornut/imgui/releases for more details. - - 2016/05/12 (1.49) - title bar (using TitleBg/TitleBgActive colors) isn't rendered over a window background (WindowBg color) anymore. - If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you. However if your TitleBg/TitleBgActive alpha was <1.0f you need to tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar. - This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given that color and the WindowBg color. + - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore. + If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you. + However if your TitleBg/TitleBgActive alpha was <1.0f you need to tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar. + This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color. ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) { float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); } + If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color. - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext(). - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection. - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen). @@ -545,12 +547,12 @@ - drag float: up/down axis - drag float: added leeway on edge (e.g. a few invisible steps past the clamp limits) - tree node / optimization: avoid formatting when clipped. - - tree node: clarify spacing, perhaps provide API to query exact spacing. provide API to draw the primitive. same with Bullet(). - tree node: tree-node/header right-most side doesn't take account of horizontal scrolling. - - tree node: add treenode/treepush int variants? because (void*) cast from int warns on some platforms/settings + - tree node: add treenode/treepush int variants? not there because (void*) cast from int warns on some platforms/settings? - tree node: try to apply scrolling at time of TreePop() if node was just opened and end of node is past scrolling limits? - tree node / selectable render mismatch which is visible if you use them both next to each other (e.g. cf. property viewer) - - textwrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (git issue #249) + - tree node: tweak color scheme to distinguish headers from selected tree node (#581) + - textwrapped: figure out better way to use TextWrapped() in an always auto-resize context (tooltip, etc.) (#249) - settings: write more decent code to allow saving/loading new fields - settings: api for per-tool simple persistent data (bool,int,float,columns sizes,etc.) in .ini file - style: add window shadows. @@ -578,7 +580,7 @@ - keyboard: full keyboard navigation and focus. (#323) - focus: preserve ActiveId/focus stack state, e.g. when opening a menu and close it, previously selected InputText() focus gets restored (#622) - focus: SetKeyboardFocusHere() on with >= 0 offset could be done on same frame (else latch and modulate on beginning of next frame) - - input: rework IO system to be able to pass actual ordered/timestamped events. + - input: rework IO system to be able to pass actual ordered/timestamped events. (~#335, #71) - input: allow to decide and pass explicit double-clicks (e.g. for windows by the CS_DBLCLKS style). - input: support track pad style scrolling & slider edit. - misc: provide a way to compile out the entire implementation while providing a dummy API (e.g. #define IMGUI_DUMMY_IMPL) @@ -591,6 +593,7 @@ - drawlist: end-user probably can't call Clear() directly because we expect a texture to be pushed in the stack. - examples: directx9: save/restore device state more thoroughly. - examples: window minimize, maximize (#583) + - optimization: add a flag to disable most of rendering, for the case where the user expect to skip it (#335) - optimization: use another hash function than crc32, e.g. FNV1a - optimization/render: merge command-lists with same clip-rect into one even if they aren't sequential? (as long as in-between clip rectangle don't overlap)? - optimization: turn some the various stack vectors into statically-sized arrays @@ -607,7 +610,6 @@ #include "imgui_internal.h" #include // toupper, isprint -#include // sqrtf, fabsf, fmodf, powf, cosf, sinf, floorf, ceilf #include // NULL, malloc, free, qsort, atoi #include // vsnprintf, sscanf, printf #include // INT_MIN, INT_MAX @@ -619,6 +621,7 @@ #ifdef _MSC_VER #pragma warning (disable: 4127) // condition expression is constant +#pragma warning (disable: 4201) // nonstandard extension used: nameless struct/union #pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff) #pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen #endif @@ -1928,7 +1931,7 @@ ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_x, float default_y) ImGuiContext& g = *GImGui; ImVec2 content_max; if (size.x < 0.0f || size.y < 0.0f) - content_max = g.CurrentWindow->Pos + ImGui::GetContentRegionMax(); + content_max = g.CurrentWindow->Pos + GetContentRegionMax(); if (size.x <= 0.0f) size.x = (size.x == 0.0f) ? default_x : ImMax(content_max.x - g.CurrentWindow->DC.CursorPos.x, 4.0f) + size.x; if (size.y <= 0.0f) @@ -1943,7 +1946,7 @@ float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x) ImGuiWindow* window = GetCurrentWindowRead(); if (wrap_pos_x == 0.0f) - wrap_pos_x = ImGui::GetContentRegionMax().x + window->Pos.x; + wrap_pos_x = GetContentRegionMax().x + window->Pos.x; else if (wrap_pos_x > 0.0f) wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space @@ -2835,7 +2838,7 @@ void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, cons // Perform CPU side clipping for single clipped element to avoid using scissor state ImVec2 pos = pos_min; - const ImVec2 text_size = text_size_if_known ? *text_size_if_known : ImGui::CalcTextSize(text, text_display_end, false, 0.0f); + const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f); if (!clip_max) clip_max = &pos_max; bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y); @@ -3505,26 +3508,26 @@ void ImGui::EndPopup() // driven by click position. bool ImGui::BeginPopupContextItem(const char* str_id, int mouse_button) { - if (ImGui::IsItemHovered() && ImGui::IsMouseClicked(mouse_button)) - ImGui::OpenPopupEx(str_id, false); - return ImGui::BeginPopup(str_id); + if (IsItemHovered() && IsMouseClicked(mouse_button)) + OpenPopupEx(str_id, false); + return BeginPopup(str_id); } bool ImGui::BeginPopupContextWindow(bool also_over_items, const char* str_id, int mouse_button) { if (!str_id) str_id = "window_context_menu"; - if (ImGui::IsMouseHoveringWindow() && ImGui::IsMouseClicked(mouse_button)) - if (also_over_items || !ImGui::IsAnyItemHovered()) - ImGui::OpenPopupEx(str_id, true); - return ImGui::BeginPopup(str_id); + if (IsMouseHoveringWindow() && IsMouseClicked(mouse_button)) + if (also_over_items || !IsAnyItemHovered()) + OpenPopupEx(str_id, true); + return BeginPopup(str_id); } bool ImGui::BeginPopupContextVoid(const char* str_id, int mouse_button) { if (!str_id) str_id = "void_context_menu"; - if (!ImGui::IsMouseHoveringAnyWindow() && ImGui::IsMouseClicked(mouse_button)) - ImGui::OpenPopupEx(str_id, true); - return ImGui::BeginPopup(str_id); + if (!IsMouseHoveringAnyWindow() && IsMouseClicked(mouse_button)) + OpenPopupEx(str_id, true); + return BeginPopup(str_id); } bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags) @@ -3532,7 +3535,7 @@ bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindow* window = GetCurrentWindow(); ImGuiWindowFlags flags = ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_ChildWindow; - const ImVec2 content_avail = ImGui::GetContentRegionAvail(); + const ImVec2 content_avail = GetContentRegionAvail(); ImVec2 size = ImFloor(size_arg); if (size.x <= 0.0f) { @@ -3581,7 +3584,7 @@ void ImGui::EndChild() else { // When using auto-filling child window, we don't provide full width/height to ItemSize so that it doesn't feed back into automatic size-fitting. - ImVec2 sz = ImGui::GetWindowSize(); + ImVec2 sz = GetWindowSize(); if (window->Flags & ImGuiWindowFlags_ChildWindowAutoFitX) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f sz.x = ImMax(4.0f, sz.x); if (window->Flags & ImGuiWindowFlags_ChildWindowAutoFitY) @@ -4202,6 +4205,12 @@ bool ImGui::Begin(const char* name, bool* p_open, const ImVec2& size_on_first_us } } + // Update ContentsRegionMax. All the variable it depends on are set above in this function. + window->ContentsRegionRect.Min.x = -window->Scroll.x + window->WindowPadding.x; + window->ContentsRegionRect.Min.y = -window->Scroll.y + window->WindowPadding.y + window->TitleBarHeight() + window->MenuBarHeight(); + window->ContentsRegionRect.Max.x = -window->Scroll.x - window->WindowPadding.x + (window->SizeContentsExplicit.x != 0.0f ? window->SizeContentsExplicit.x : (window->Size.x - window->ScrollbarSizes.x)); + window->ContentsRegionRect.Max.y = -window->Scroll.y - window->WindowPadding.y + (window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : (window->Size.y - window->ScrollbarSizes.y)); + // Setup drawing context window->DC.IndentX = 0.0f + window->WindowPadding.x - window->Scroll.x; window->DC.ColumnsOffsetX = 0.0f; @@ -4325,12 +4334,12 @@ void ImGui::End() ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; - ImGui::Columns(1, "#CloseColumns"); + Columns(1, "#CloseColumns"); PopClipRect(); // inner window clip rectangle // Stop logging if (!(window->Flags & ImGuiWindowFlags_ChildWindow)) // FIXME: add more options for scope of logging - ImGui::LogFinish(); + LogFinish(); // Pop // NB: we don't clear 'window->RootWindow'. The pointer is allowed to live until the next call to Begin(). @@ -4511,7 +4520,7 @@ float ImGui::CalcItemWidth() if (w < 0.0f) { // Align to a right-side limit. We include 1 frame padding in the calculation because this is how the width is always used (we add 2 frame padding to it), but we could move that responsibility to the widget as well. - float width_to_right_edge = ImGui::GetContentRegionAvail().x; + float width_to_right_edge = GetContentRegionAvail().x; w = ImMax(1.0f, width_to_right_edge + w); } w = (float)(int)w; @@ -4935,7 +4944,7 @@ void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond) g.SetNextWindowSizeCond = cond ? cond : ImGuiSetCond_Always; } -void ImGui::SetNextWindowSizeConstraint(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback, void* custom_callback_user_data) +void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback, void* custom_callback_user_data) { ImGuiContext& g = *GImGui; g.SetNextWindowSizeConstraint = true; @@ -4972,14 +4981,12 @@ void ImGui::SetNextWindowFocus() } // In window space (not screen space!) -// FIXME-OPT: Could cache and maintain it (pretty much only change on columns change) ImVec2 ImGui::GetContentRegionMax() { ImGuiWindow* window = GetCurrentWindowRead(); - ImVec2 content_region_size = ImVec2(window->SizeContentsExplicit.x != 0.0f ? window->SizeContentsExplicit.x : window->Size.x - window->ScrollbarSizes.x, window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : window->Size.y - window->ScrollbarSizes.y); - ImVec2 mx = content_region_size - window->Scroll - window->WindowPadding; + ImVec2 mx = window->ContentsRegionRect.Max; if (window->DC.ColumnsCount != 1) - mx.x = ImGui::GetColumnOffset(window->DC.ColumnsCurrent + 1) - window->WindowPadding.x; + mx.x = GetColumnOffset(window->DC.ColumnsCurrent + 1) - window->WindowPadding.x; return mx; } @@ -4998,20 +5005,19 @@ float ImGui::GetContentRegionAvailWidth() ImVec2 ImGui::GetWindowContentRegionMin() { ImGuiWindow* window = GetCurrentWindowRead(); - return ImVec2(-window->Scroll.x, -window->Scroll.y + window->TitleBarHeight() + window->MenuBarHeight()) + window->WindowPadding; + return window->ContentsRegionRect.Min; } ImVec2 ImGui::GetWindowContentRegionMax() { ImGuiWindow* window = GetCurrentWindowRead(); - ImVec2 content_region_size = ImVec2(window->SizeContentsExplicit.x != 0.0f ? window->SizeContentsExplicit.x : window->Size.x, window->SizeContentsExplicit.y != 0.0f ? window->SizeContentsExplicit.y : window->Size.y); - ImVec2 m = content_region_size - window->Scroll - window->WindowPadding - window->ScrollbarSizes; - return m; + return window->ContentsRegionRect.Max; } float ImGui::GetWindowContentRegionWidth() { - return GetWindowContentRegionMax().x - GetWindowContentRegionMin().x; + ImGuiWindow* window = GetCurrentWindowRead(); + return window->ContentsRegionRect.Max.x - window->ContentsRegionRect.Min.x; } float ImGui::GetTextLineHeight() @@ -5172,7 +5178,7 @@ void ImGui::SetScrollHere(float center_y_ratio) { ImGuiWindow* window = GetCurrentWindow(); float target_y = window->DC.CursorPosPrevLine.y + (window->DC.PrevLineHeight * center_y_ratio) + (GImGui->Style.ItemSpacing.y * (center_y_ratio - 0.5f) * 2.0f); // Precisely aim above, in the middle or below the last line. - ImGui::SetScrollFromPosY(target_y - window->Pos.y, center_y_ratio); + SetScrollFromPosY(target_y - window->Pos.y, center_y_ratio); } void ImGui::SetKeyboardFocusHere(int offset) @@ -5215,9 +5221,9 @@ void ImGui::Text(const char* fmt, ...) void ImGui::TextColoredV(const ImVec4& col, const char* fmt, va_list args) { - ImGui::PushStyleColor(ImGuiCol_Text, col); + PushStyleColor(ImGuiCol_Text, col); TextV(fmt, args); - ImGui::PopStyleColor(); + PopStyleColor(); } void ImGui::TextColored(const ImVec4& col, const char* fmt, ...) @@ -5230,9 +5236,9 @@ void ImGui::TextColored(const ImVec4& col, const char* fmt, ...) void ImGui::TextDisabledV(const char* fmt, va_list args) { - ImGui::PushStyleColor(ImGuiCol_Text, GImGui->Style.Colors[ImGuiCol_TextDisabled]); + PushStyleColor(ImGuiCol_Text, GImGui->Style.Colors[ImGuiCol_TextDisabled]); TextV(fmt, args); - ImGui::PopStyleColor(); + PopStyleColor(); } void ImGui::TextDisabled(const char* fmt, ...) @@ -5245,9 +5251,9 @@ void ImGui::TextDisabled(const char* fmt, ...) void ImGui::TextWrappedV(const char* fmt, va_list args) { - ImGui::PushTextWrapPos(0.0f); + PushTextWrapPos(0.0f); TextV(fmt, args); - ImGui::PopTextWrapPos(); + PopTextWrapPos(); } void ImGui::TextWrapped(const char* fmt, ...) @@ -5279,7 +5285,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end) // From this point we will only compute the width of lines that are visible. Optimization only available when word-wrapping is disabled. // We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line. const char* line = text; - const float line_height = ImGui::GetTextLineHeight(); + const float line_height = GetTextLineHeight(); const ImVec2 text_pos = window->DC.CursorPos + ImVec2(0.0f, window->DC.CurrentLineTextBaseOffset); const ImRect clip_rect = window->ClipRect; ImVec2 text_size(0,0); @@ -5310,7 +5316,7 @@ void ImGui::TextUnformatted(const char* text, const char* text_end) // Lines to render if (line < text_end) { - ImRect line_rect(pos, pos + ImVec2(ImGui::GetWindowWidth(), line_height)); + ImRect line_rect(pos, pos + ImVec2(GetWindowWidth(), line_height)); while (line < text_end) { const char* line_end = strchr(line, '\n'); @@ -5376,7 +5382,7 @@ void ImGui::AlignFirstTextHeightToWidgets() // Declare a dummy item size to that upcoming items that are smaller will center-align on the newly expanded line height. ImGuiContext& g = *GImGui; ItemSize(ImVec2(0, g.FontSize + g.Style.FramePadding.y*2), g.Style.FramePadding.y); - ImGui::SameLine(0, 0); + SameLine(0, 0); } // Add a label+text combo aligned to other label+value widgets @@ -5474,7 +5480,7 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above). // Relies on repeat logic of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings. - if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && g.IO.MouseDownDuration[0] > 0.0f && ImGui::IsMouseClicked(0, true)) + if ((flags & ImGuiButtonFlags_Repeat) && g.ActiveId == id && g.IO.MouseDownDuration[0] > 0.0f && IsMouseClicked(0, true)) pressed = true; } } @@ -5537,7 +5543,7 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags // Automatically close popups //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup)) - // ImGui::CloseCurrentPopup(); + // CloseCurrentPopup(); return pressed; } @@ -5582,23 +5588,23 @@ bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg) // Upper-right button to close a window. bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos, float radius) { - ImGuiWindow* window = ImGui::GetCurrentWindow(); + ImGuiWindow* window = GetCurrentWindow(); const ImRect bb(pos - ImVec2(radius,radius), pos + ImVec2(radius,radius)); bool hovered, held; - bool pressed = ImGui::ButtonBehavior(bb, id, &hovered, &held); + bool pressed = ButtonBehavior(bb, id, &hovered, &held); // Render - const ImU32 col = ImGui::GetColorU32((held && hovered) ? ImGuiCol_CloseButtonActive : hovered ? ImGuiCol_CloseButtonHovered : ImGuiCol_CloseButton); + const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_CloseButtonActive : hovered ? ImGuiCol_CloseButtonHovered : ImGuiCol_CloseButton); const ImVec2 center = bb.GetCenter(); window->DrawList->AddCircleFilled(center, ImMax(2.0f, radius), col, 12); const float cross_extent = (radius * 0.7071f) - 1.0f; if (hovered) { - window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), ImGui::GetColorU32(ImGuiCol_Text)); - window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), ImGui::GetColorU32(ImGuiCol_Text)); + window->DrawList->AddLine(center + ImVec2(+cross_extent,+cross_extent), center + ImVec2(-cross_extent,-cross_extent), GetColorU32(ImGuiCol_Text)); + window->DrawList->AddLine(center + ImVec2(+cross_extent,-cross_extent), center + ImVec2(-cross_extent,+cross_extent), GetColorU32(ImGuiCol_Text)); } return pressed; @@ -5643,9 +5649,9 @@ bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const I // Default to using texture ID as ID. User can still push string/integer prefixes. // We could hash the size/uv to create a unique ID but that would prevent the user from animating UV. - ImGui::PushID((void *)user_texture_id); + PushID((void *)user_texture_id); const ImGuiID id = window->GetID("#image"); - ImGui::PopID(); + PopID(); const ImVec2 padding = (frame_padding >= 0) ? ImVec2((float)frame_padding, (float)frame_padding) : style.FramePadding; const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding*2); @@ -5730,7 +5736,7 @@ void ImGui::LogFinish() if (!g.LogEnabled) return; - ImGui::LogText(IM_NEWLINE); + LogText(IM_NEWLINE); g.LogEnabled = false; if (g.LogFile != NULL) { @@ -5753,20 +5759,16 @@ void ImGui::LogButtons() { ImGuiContext& g = *GImGui; - ImGui::PushID("LogButtons"); - const bool log_to_tty = ImGui::Button("Log To TTY"); - ImGui::SameLine(); - const bool log_to_file = ImGui::Button("Log To File"); - ImGui::SameLine(); - const bool log_to_clipboard = ImGui::Button("Log To Clipboard"); - ImGui::SameLine(); - - ImGui::PushItemWidth(80.0f); - ImGui::PushAllowKeyboardFocus(false); - ImGui::SliderInt("Depth", &g.LogAutoExpandMaxDepth, 0, 9, NULL); - ImGui::PopAllowKeyboardFocus(); - ImGui::PopItemWidth(); - ImGui::PopID(); + PushID("LogButtons"); + const bool log_to_tty = Button("Log To TTY"); SameLine(); + const bool log_to_file = Button("Log To File"); SameLine(); + const bool log_to_clipboard = Button("Log To Clipboard"); SameLine(); + PushItemWidth(80.0f); + PushAllowKeyboardFocus(false); + SliderInt("Depth", &g.LogAutoExpandMaxDepth, 0, 9, NULL); + PopAllowKeyboardFocus(); + PopItemWidth(); + PopID(); // Start logging at the end of the function so that the buttons don't appear in the log if (log_to_tty) @@ -5779,7 +5781,7 @@ void ImGui::LogButtons() bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags) { - if (flags & ImGuiTreeNodeFlags_AlwaysOpen) + if (flags & ImGuiTreeNodeFlags_Leaf) return true; // We only write to the tree storage if the user clicks (or explicitely use SetNextTreeNode*** functions) @@ -5850,7 +5852,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l bb.Max.x += (float)(int)(window->WindowPadding.x*0.5f) - 1; } - const float text_offset_x = g.FontSize + (display_frame ? padding.x*3 : padding.x*2); // Collapser arrow width + Spacing + const float text_offset_x = (g.FontSize + (display_frame ? padding.x*3 : padding.x*2)); // Collapser arrow width + Spacing const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x*2 : 0.0f); // Include collapser ItemSize(ImVec2(text_width, frame_height), text_base_offset_y); @@ -5874,7 +5876,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) button_flags |= ImGuiButtonFlags_PressedOnDoubleClick | ((flags & ImGuiTreeNodeFlags_OpenOnArrow) ? ImGuiButtonFlags_PressedOnClickRelease : 0); bool hovered, held, pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags); - if (pressed && !(flags & ImGuiTreeNodeFlags_AlwaysOpen)) + if (pressed && !(flags & ImGuiTreeNodeFlags_Leaf)) { bool toggled = !(flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)); if (flags & ImGuiTreeNodeFlags_OpenOnArrow) @@ -5918,9 +5920,9 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l if (hovered || (flags & ImGuiTreeNodeFlags_Selected)) RenderFrame(bb.Min, bb.Max, col, false); - if (flags & ImGuiTreeNodeFlags_AlwaysOpen) + if (flags & ImGuiTreeNodeFlags_Bullet) RenderBullet(bb.Min + ImVec2(text_offset_x * 0.5f, g.FontSize*0.50f + text_base_offset_y)); - else + else if (!(flags & ImGuiTreeNodeFlags_Leaf)) RenderCollapseTriangle(bb.Min + ImVec2(padding.x, g.FontSize*0.15f + text_base_offset_y), is_open, 0.70f, false); if (g.LogEnabled) LogRenderedText(text_pos, ">"); @@ -5932,6 +5934,8 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l return is_open; } +// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag). +// This is basically the same as calling TreeNodeEx(label, ImGuiTreeNodeFlags_CollapsingHeader | ImGuiTreeNodeFlags_NoTreePushOnOpen). You can remove the _NoTreePushOnOpen flag if you want behavior closer to normal TreeNode(). bool ImGui::CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags) { ImGuiWindow* window = GetCurrentWindow(); @@ -5957,7 +5961,7 @@ bool ImGui::CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags // Create a small overlapping close button // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc. ImGuiContext& g = *GImGui; float button_sz = g.FontSize * 0.5f; - if (CloseButton(window->GetID((void*)(intptr_t)(id+1)), ImVec2(window->DC.LastItemRect.Max.x - g.Style.FramePadding.x - button_sz, window->DC.LastItemRect.Min.y + g.Style.FramePadding.y + button_sz), button_sz)) + if (CloseButton(window->GetID((void*)(intptr_t)(id+1)), ImVec2(ImMin(window->DC.LastItemRect.Max.x, window->ClipRect.Max.x) - g.Style.FramePadding.x - button_sz, window->DC.LastItemRect.Min.y + g.Style.FramePadding.y + button_sz), button_sz)) *p_open = false; } @@ -6046,19 +6050,20 @@ bool ImGui::TreeNode(const char* label) ImGuiWindow* window = GetCurrentWindow(); if (window->SkipItems) return false; - return TreeNodeBehavior(window->GetID(label), 0, label, NULL); } -float ImGui::GetTreeNodeToLabelSpacing(ImGuiTreeNodeFlags flags) +void ImGui::TreeAdvanceToLabelPos() { ImGuiContext& g = *GImGui; - float off_from_start; - if (flags & ImGuiTreeNodeFlags_Framed) - off_from_start = g.FontSize + (g.Style.FramePadding.x * 3.0f) - ((float)(int)(g.CurrentWindow->WindowPadding.x*0.5f) - 1); - else - off_from_start = g.FontSize + (g.Style.FramePadding.x * 2.0f); - return off_from_start; + g.CurrentWindow->DC.CursorPos.x += GetTreeNodeToLabelSpacing(); +} + +// Horizontal distance preceeding label when using TreeNode() or Bullet() +float ImGui::GetTreeNodeToLabelSpacing() +{ + ImGuiContext& g = *GImGui; + return g.FontSize + (g.Style.FramePadding.x * 2.0f); } void ImGui::SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond) @@ -6127,7 +6132,7 @@ void ImGui::Bullet() ItemSize(bb); if (!ItemAdd(bb, NULL)) { - ImGui::SameLine(0, style.FramePadding.x*2); + SameLine(0, style.FramePadding.x*2); return; } @@ -6590,7 +6595,7 @@ bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max) { float v_deg = (*v_rad) * 360.0f / (2*IM_PI); - bool value_changed = ImGui::SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, "%.0f deg", 1.0f); + bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, "%.0f deg", 1.0f); *v_rad = v_deg * (2*IM_PI) / 360.0f; return value_changed; } @@ -6600,7 +6605,7 @@ bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const cha if (!display_format) display_format = "%.0f"; float v_f = (float)*v; - bool value_changed = ImGui::SliderFloat(label, &v_f, (float)v_min, (float)v_max, display_format, 1.0f); + bool value_changed = SliderFloat(label, &v_f, (float)v_min, (float)v_max, display_format, 1.0f); *v = (int)v_f; return value_changed; } @@ -6610,7 +6615,7 @@ bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, if (!display_format) display_format = "%.0f"; float v_f = (float)*v; - bool value_changed = ImGui::VSliderFloat(label, size, &v_f, (float)v_min, (float)v_max, display_format, 1.0f); + bool value_changed = VSliderFloat(label, size, &v_f, (float)v_min, (float)v_max, display_format, 1.0f); *v = (int)v_f; return value_changed; } @@ -6624,21 +6629,21 @@ bool ImGui::SliderFloatN(const char* label, float* v, int components, float v_mi ImGuiContext& g = *GImGui; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); PushMultiItemsWidths(components); for (int i = 0; i < components; i++) { - ImGui::PushID(i); - value_changed |= ImGui::SliderFloat("##v", &v[i], v_min, v_max, display_format, power); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::PopID(); - ImGui::PopItemWidth(); + PushID(i); + value_changed |= SliderFloat("##v", &v[i], v_min, v_max, display_format, power); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); } - ImGui::PopID(); + PopID(); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); return value_changed; } @@ -6666,21 +6671,21 @@ bool ImGui::SliderIntN(const char* label, int* v, int components, int v_min, int ImGuiContext& g = *GImGui; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); PushMultiItemsWidths(components); for (int i = 0; i < components; i++) { - ImGui::PushID(i); - value_changed |= ImGui::SliderInt("##v", &v[i], v_min, v_max, display_format); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::PopID(); - ImGui::PopItemWidth(); + PushID(i); + value_changed |= SliderInt("##v", &v[i], v_min, v_max, display_format); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); } - ImGui::PopID(); + PopID(); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); return value_changed; } @@ -6724,7 +6729,7 @@ bool ImGui::DragBehavior(const ImRect& frame_bb, ImGuiID id, float* v, float v_s } float v_cur = g.DragCurrentValue; - const ImVec2 mouse_drag_delta = ImGui::GetMouseDragDelta(0, 1.0f); + const ImVec2 mouse_drag_delta = GetMouseDragDelta(0, 1.0f); if (fabsf(mouse_drag_delta.x - g.DragLastMouseDelta.x) > 0.0f) { float speed = v_speed; @@ -6846,21 +6851,21 @@ bool ImGui::DragFloatN(const char* label, float* v, int components, float v_spee ImGuiContext& g = *GImGui; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); PushMultiItemsWidths(components); for (int i = 0; i < components; i++) { - ImGui::PushID(i); - value_changed |= ImGui::DragFloat("##v", &v[i], v_speed, v_min, v_max, display_format, power); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::PopID(); - ImGui::PopItemWidth(); + PushID(i); + value_changed |= DragFloat("##v", &v[i], v_speed, v_min, v_max, display_format, power); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); } - ImGui::PopID(); + PopID(); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); return value_changed; } @@ -6887,20 +6892,20 @@ bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_cu return false; ImGuiContext& g = *GImGui; - ImGui::PushID(label); - ImGui::BeginGroup(); + PushID(label); + BeginGroup(); PushMultiItemsWidths(2); - bool value_changed = ImGui::DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), display_format, power); - ImGui::PopItemWidth(); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= ImGui::DragFloat("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? FLT_MAX : v_max, display_format_max ? display_format_max : display_format, power); - ImGui::PopItemWidth(); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); + bool value_changed = DragFloat("##min", v_current_min, v_speed, (v_min >= v_max) ? -FLT_MAX : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), display_format, power); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); + value_changed |= DragFloat("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? FLT_MAX : v_max, display_format_max ? display_format_max : display_format, power); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); - ImGui::PopID(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + PopID(); return value_changed; } @@ -6911,7 +6916,7 @@ bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_m if (!display_format) display_format = "%.0f"; float v_f = (float)*v; - bool value_changed = ImGui::DragFloat(label, &v_f, v_speed, (float)v_min, (float)v_max, display_format); + bool value_changed = DragFloat(label, &v_f, v_speed, (float)v_min, (float)v_max, display_format); *v = (int)v_f; return value_changed; } @@ -6924,21 +6929,21 @@ bool ImGui::DragIntN(const char* label, int* v, int components, float v_speed, i ImGuiContext& g = *GImGui; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); PushMultiItemsWidths(components); for (int i = 0; i < components; i++) { - ImGui::PushID(i); - value_changed |= ImGui::DragInt("##v", &v[i], v_speed, v_min, v_max, display_format); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::PopID(); - ImGui::PopItemWidth(); + PushID(i); + value_changed |= DragInt("##v", &v[i], v_speed, v_min, v_max, display_format); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); } - ImGui::PopID(); + PopID(); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); return value_changed; } @@ -6965,20 +6970,20 @@ bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_ return false; ImGuiContext& g = *GImGui; - ImGui::PushID(label); - ImGui::BeginGroup(); + PushID(label); + BeginGroup(); PushMultiItemsWidths(2); - bool value_changed = ImGui::DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), display_format); - ImGui::PopItemWidth(); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - value_changed |= ImGui::DragInt("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? INT_MAX : v_max, display_format_max ? display_format_max : display_format); - ImGui::PopItemWidth(); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); + bool value_changed = DragInt("##min", v_current_min, v_speed, (v_min >= v_max) ? INT_MIN : v_min, (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max), display_format); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); + value_changed |= DragInt("##max", v_current_max, v_speed, (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min), (v_min >= v_max) ? INT_MAX : v_max, display_format_max ? display_format_max : display_format); + PopItemWidth(); + SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); - ImGui::PopID(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); + PopID(); return value_changed; } @@ -7038,9 +7043,9 @@ void ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_ge const float v0 = values_getter(data, (v_idx + values_offset) % values_count); const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count); if (plot_type == ImGuiPlotType_Lines) - ImGui::SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1); + SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx+1, v1); else if (plot_type == ImGuiPlotType_Histogram) - ImGui::SetTooltip("%d: %8.4g", v_idx, v0); + SetTooltip("%d: %8.4g", v_idx, v0); v_hovered = v_idx; } @@ -7211,7 +7216,7 @@ bool ImGui::Checkbox(const char* label, bool* v) bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value) { bool v = ((*flags & flags_value) == flags_value); - bool pressed = ImGui::Checkbox(label, &v); + bool pressed = Checkbox(label, &v); if (pressed) { if (v) @@ -7282,7 +7287,7 @@ bool ImGui::RadioButton(const char* label, bool active) bool ImGui::RadioButton(const char* label, int* v, int v_button) { - const bool pressed = ImGui::RadioButton(label, *v == v_button); + const bool pressed = RadioButton(label, *v == v_button); if (pressed) { *v = v_button; @@ -7563,18 +7568,18 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0; const ImVec2 label_size = CalcTextSize(label, NULL, true); - ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? ImGui::GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line + ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? GetTextLineHeight() * 8.0f : label_size.y) + style.FramePadding.y*2.0f); // Arbitrary default of 8 lines high for multi-line const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size); const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? (style.ItemInnerSpacing.x + label_size.x) : 0.0f, 0.0f)); ImGuiWindow* draw_window = window; if (is_multiline) { - ImGui::BeginGroup(); - if (!ImGui::BeginChildFrame(id, frame_bb.GetSize())) + BeginGroup(); + if (!BeginChildFrame(id, frame_bb.GetSize())) { - ImGui::EndChildFrame(); - ImGui::EndGroup(); + EndChildFrame(); + EndGroup(); return false; } draw_window = GetCurrentWindow(); @@ -7601,7 +7606,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 password_font->FallbackGlyph = glyph; password_font->FallbackXAdvance = glyph->XAdvance; IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexXAdvance.empty() && password_font->IndexLookup.empty()); - ImGui::PushFont(password_font); + PushFont(password_font); } // NB: we are only allowed to access 'edit_state' if we are the active widget. @@ -7756,7 +7761,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 else if (IsKeyPressedMap(ImGuiKey_Home)) { edit_state.OnKeyPressed(is_ctrl_down ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); } else if (IsKeyPressedMap(ImGuiKey_End)) { edit_state.OnKeyPressed(is_ctrl_down ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); } else if (IsKeyPressedMap(ImGuiKey_Delete) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); } - else if (IsKeyPressedMap(ImGuiKey_Backspace) && is_editable) { edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); } + else if (IsKeyPressedMap(ImGuiKey_Backspace) && is_editable) { if (is_ctrl_down && !edit_state.HasSelection()) edit_state.OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT|STB_TEXTEDIT_K_SHIFT); edit_state.OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask); } else if (IsKeyPressedMap(ImGuiKey_Enter)) { bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0; @@ -8086,13 +8091,13 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2 if (is_multiline) { - ImGui::Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line - ImGui::EndChildFrame(); - ImGui::EndGroup(); + Dummy(text_size + ImVec2(0.0f, g.FontSize)); // Always add room to scroll an extra line + EndChildFrame(); + EndGroup(); } if (is_password) - ImGui::PopFont(); + PopFont(); // Log as text if (g.LogEnabled && !is_password) @@ -8131,11 +8136,11 @@ bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data const ImGuiStyle& style = g.Style; const ImVec2 label_size = CalcTextSize(label, NULL, true); - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); const ImVec2 button_sz = ImVec2(g.FontSize, g.FontSize) + style.FramePadding*2.0f; if (step_ptr) - ImGui::PushItemWidth(ImMax(1.0f, CalcItemWidth() - (button_sz.x + style.ItemInnerSpacing.x)*2)); + PushItemWidth(ImMax(1.0f, CalcItemWidth() - (button_sz.x + style.ItemInnerSpacing.x)*2)); char buf[64]; DataTypeFormatString(data_type, data_ptr, scalar_format, buf, IM_ARRAYSIZE(buf)); @@ -8144,35 +8149,35 @@ bool ImGui::InputScalarEx(const char* label, ImGuiDataType data_type, void* data if (!(extra_flags & ImGuiInputTextFlags_CharsHexadecimal)) extra_flags |= ImGuiInputTextFlags_CharsDecimal; extra_flags |= ImGuiInputTextFlags_AutoSelectAll; - if (ImGui::InputText("", buf, IM_ARRAYSIZE(buf), extra_flags)) + if (InputText("", buf, IM_ARRAYSIZE(buf), extra_flags)) value_changed = DataTypeApplyOpFromText(buf, GImGui->InputTextState.InitialText.begin(), data_type, data_ptr, scalar_format); // Step buttons if (step_ptr) { - ImGui::PopItemWidth(); - ImGui::SameLine(0, style.ItemInnerSpacing.x); + PopItemWidth(); + SameLine(0, style.ItemInnerSpacing.x); if (ButtonEx("-", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups)) { DataTypeApplyOp(data_type, '-', data_ptr, g.IO.KeyCtrl && step_fast_ptr ? step_fast_ptr : step_ptr); value_changed = true; } - ImGui::SameLine(0, style.ItemInnerSpacing.x); + SameLine(0, style.ItemInnerSpacing.x); if (ButtonEx("+", button_sz, ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups)) { DataTypeApplyOp(data_type, '+', data_ptr, g.IO.KeyCtrl && step_fast_ptr ? step_fast_ptr : step_ptr); value_changed = true; } } - ImGui::PopID(); + PopID(); if (label_size.x > 0) { - ImGui::SameLine(0, style.ItemInnerSpacing.x); + SameLine(0, style.ItemInnerSpacing.x); RenderText(ImVec2(window->DC.CursorPos.x, window->DC.CursorPos.y + style.FramePadding.y), label); ItemSize(label_size, style.FramePadding.y); } - ImGui::EndGroup(); + EndGroup(); return value_changed; } @@ -8202,22 +8207,22 @@ bool ImGui::InputFloatN(const char* label, float* v, int components, int decimal ImGuiContext& g = *GImGui; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); PushMultiItemsWidths(components); for (int i = 0; i < components; i++) { - ImGui::PushID(i); - value_changed |= ImGui::InputFloat("##v", &v[i], 0, 0, decimal_precision, extra_flags); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::PopID(); - ImGui::PopItemWidth(); + PushID(i); + value_changed |= InputFloat("##v", &v[i], 0, 0, decimal_precision, extra_flags); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); } - ImGui::PopID(); + PopID(); window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); return value_changed; } @@ -8245,22 +8250,22 @@ bool ImGui::InputIntN(const char* label, int* v, int components, ImGuiInputTextF ImGuiContext& g = *GImGui; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); PushMultiItemsWidths(components); for (int i = 0; i < components; i++) { - ImGui::PushID(i); - value_changed |= ImGui::InputInt("##v", &v[i], 0, 0, extra_flags); - ImGui::SameLine(0, g.Style.ItemInnerSpacing.x); - ImGui::PopID(); - ImGui::PopItemWidth(); + PushID(i); + value_changed |= InputInt("##v", &v[i], 0, 0, extra_flags); + SameLine(0, g.Style.ItemInnerSpacing.x); + PopID(); + PopItemWidth(); } - ImGui::PopID(); + PopID(); window->DC.CurrentLineTextBaseOffset = ImMax(window->DC.CurrentLineTextBaseOffset, g.Style.FramePadding.y); - ImGui::TextUnformatted(label, FindRenderedTextEnd(label)); - ImGui::EndGroup(); + TextUnformatted(label, FindRenderedTextEnd(label)); + EndGroup(); return value_changed; } @@ -8404,35 +8409,35 @@ bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(voi popup_y2 = frame_bb.Min.y; } ImRect popup_rect(ImVec2(frame_bb.Min.x, popup_y1), ImVec2(frame_bb.Max.x, popup_y2)); - ImGui::SetNextWindowPos(popup_rect.Min); - ImGui::SetNextWindowSize(popup_rect.GetSize()); - ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); + SetNextWindowPos(popup_rect.Min); + SetNextWindowSize(popup_rect.GetSize()); + PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding); const ImGuiWindowFlags flags = ImGuiWindowFlags_ComboBox | ((window->Flags & ImGuiWindowFlags_ShowBorders) ? ImGuiWindowFlags_ShowBorders : 0); if (BeginPopupEx(label, flags)) { // Display items - ImGui::Spacing(); + Spacing(); for (int i = 0; i < items_count; i++) { - ImGui::PushID((void*)(intptr_t)i); + PushID((void*)(intptr_t)i); const bool item_selected = (i == *current_item); const char* item_text; if (!items_getter(data, i, &item_text)) item_text = "*Unknown item*"; - if (ImGui::Selectable(item_text, item_selected)) + if (Selectable(item_text, item_selected)) { SetActiveID(0); value_changed = true; *current_item = i; } if (item_selected && popup_opened_now) - ImGui::SetScrollHere(); - ImGui::PopID(); + SetScrollHere(); + PopID(); } - ImGui::EndPopup(); + EndPopup(); } - ImGui::PopStyleVar(); + PopStyleVar(); } return value_changed; } @@ -8461,7 +8466,7 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl // Fill horizontal space. ImVec2 window_padding = window->WindowPadding; - float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? ImGui::GetWindowContentRegionMax().x : ImGui::GetContentRegionMax().x; + float max_x = (flags & ImGuiSelectableFlags_SpanAllColumns) ? GetWindowContentRegionMax().x : GetContentRegionMax().x; float w_draw = ImMax(label_size.x, window->Pos.x + max_x - window_padding.x - window->DC.CursorPos.x); ImVec2 size_draw((size_arg.x != 0 && !(flags & ImGuiSelectableFlags_DrawFillAvailWidth)) ? size_arg.x : w_draw, size_arg.y != 0.0f ? size_arg.y : size.y); ImRect bb_with_spacing(pos, pos + size_draw); @@ -8504,22 +8509,22 @@ bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags fl if ((flags & ImGuiSelectableFlags_SpanAllColumns) && window->DC.ColumnsCount > 1) { PushColumnClipRect(); - bb_with_spacing.Max.x -= (ImGui::GetContentRegionMax().x - max_x); + bb_with_spacing.Max.x -= (GetContentRegionMax().x - max_x); } - if (flags & ImGuiSelectableFlags_Disabled) ImGui::PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); RenderTextClipped(bb.Min, bb_with_spacing.Max, label, NULL, &label_size); - if (flags & ImGuiSelectableFlags_Disabled) ImGui::PopStyleColor(); + if (flags & ImGuiSelectableFlags_Disabled) PopStyleColor(); // Automatically close popups if (pressed && !(flags & ImGuiSelectableFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup)) - ImGui::CloseCurrentPopup(); + CloseCurrentPopup(); return pressed; } bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags, const ImVec2& size_arg) { - if (ImGui::Selectable(label, *p_selected, flags, size_arg)) + if (Selectable(label, *p_selected, flags, size_arg)) { *p_selected = !*p_selected; return true; @@ -8535,22 +8540,22 @@ bool ImGui::ListBoxHeader(const char* label, const ImVec2& size_arg) if (window->SkipItems) return false; - const ImGuiStyle& style = ImGui::GetStyle(); - const ImGuiID id = ImGui::GetID(label); + const ImGuiStyle& style = GetStyle(); + const ImGuiID id = GetID(label); const ImVec2 label_size = CalcTextSize(label, NULL, true); // Size default to hold ~7 items. Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar. - ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), ImGui::GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y); + ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.4f + style.ItemSpacing.y); ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y)); ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size); ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f)); window->DC.LastItemRect = bb; - ImGui::BeginGroup(); + BeginGroup(); if (label_size.x > 0) RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label); - ImGui::BeginChildFrame(id, frame_bb.GetSize()); + BeginChildFrame(id, frame_bb.GetSize()); return true; } @@ -8566,24 +8571,24 @@ bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_item // We include ItemSpacing.y so that a list sized for the exact number of items doesn't make a scrollbar appears. We could also enforce that by passing a flag to BeginChild(). ImVec2 size; size.x = 0.0f; - size.y = ImGui::GetTextLineHeightWithSpacing() * height_in_items_f + ImGui::GetStyle().ItemSpacing.y; - return ImGui::ListBoxHeader(label, size); + size.y = GetTextLineHeightWithSpacing() * height_in_items_f + GetStyle().ItemSpacing.y; + return ListBoxHeader(label, size); } void ImGui::ListBoxFooter() { ImGuiWindow* parent_window = GetParentWindow(); const ImRect bb = parent_window->DC.LastItemRect; - const ImGuiStyle& style = ImGui::GetStyle(); + const ImGuiStyle& style = GetStyle(); - ImGui::EndChildFrame(); + EndChildFrame(); // Redeclare item size so that it includes the label (we have stored the full size in LastItemRect) // We call SameLine() to restore DC.CurrentLine* data - ImGui::SameLine(); + SameLine(); parent_window->DC.CursorPos = bb.Min; ItemSize(bb, style.FramePadding.y); - ImGui::EndGroup(); + EndGroup(); } bool ImGui::ListBox(const char* label, int* current_item, const char** items, int items_count, int height_items) @@ -8594,12 +8599,12 @@ bool ImGui::ListBox(const char* label, int* current_item, const char** items, in bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items) { - if (!ImGui::ListBoxHeader(label, items_count, height_in_items)) + if (!ListBoxHeader(label, items_count, height_in_items)) return false; // Assume all items have even height (= 1 line of text). If you need items of different or variable sizes you can create a custom version of ListBox() in your code without using the clipper. bool value_changed = false; - ImGuiListClipper clipper(items_count, ImGui::GetTextLineHeightWithSpacing()); + ImGuiListClipper clipper(items_count, GetTextLineHeightWithSpacing()); while (clipper.Step()) for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) { @@ -8608,15 +8613,15 @@ bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(v if (!items_getter(data, i, &item_text)) item_text = "*Unknown item*"; - ImGui::PushID(i); - if (ImGui::Selectable(item_text, item_selected)) + PushID(i); + if (Selectable(item_text, item_selected)) { *current_item = i; value_changed = true; } - ImGui::PopID(); + PopID(); } - ImGui::ListBoxFooter(); + ListBoxFooter(); return value_changed; } @@ -8631,14 +8636,14 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo ImVec2 label_size = CalcTextSize(label, NULL, true); ImVec2 shortcut_size = shortcut ? CalcTextSize(shortcut, NULL) : ImVec2(0.0f, 0.0f); float w = window->MenuColumns.DeclColumns(label_size.x, shortcut_size.x, (float)(int)(g.FontSize * 1.20f)); // Feedback for next frame - float extra_w = ImMax(0.0f, ImGui::GetContentRegionAvail().x - w); + float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w); - bool pressed = ImGui::Selectable(label, false, ImGuiSelectableFlags_MenuItem | ImGuiSelectableFlags_DrawFillAvailWidth | (enabled ? 0 : ImGuiSelectableFlags_Disabled), ImVec2(w, 0.0f)); + bool pressed = Selectable(label, false, ImGuiSelectableFlags_MenuItem | ImGuiSelectableFlags_DrawFillAvailWidth | (enabled ? 0 : ImGuiSelectableFlags_Disabled), ImVec2(w, 0.0f)); if (shortcut_size.x > 0.0f) { - ImGui::PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); RenderText(pos + ImVec2(window->MenuColumns.Pos[1] + extra_w, 0.0f), shortcut, NULL, false); - ImGui::PopStyleColor(); + PopStyleColor(); } if (selected) @@ -8649,7 +8654,7 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, boo bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled) { - if (ImGui::MenuItem(label, shortcut, p_selected ? *p_selected : false, enabled)) + if (MenuItem(label, shortcut, p_selected ? *p_selected : false, enabled)) { if (p_selected) *p_selected = !*p_selected; @@ -8661,15 +8666,15 @@ bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool ImGui::BeginMainMenuBar() { ImGuiContext& g = *GImGui; - ImGui::SetNextWindowPos(ImVec2(0.0f, 0.0f)); - ImGui::SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.FontBaseSize + g.Style.FramePadding.y * 2.0f)); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0,0)); - if (!ImGui::Begin("##MainMenuBar", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_MenuBar) - || !ImGui::BeginMenuBar()) + SetNextWindowPos(ImVec2(0.0f, 0.0f)); + SetNextWindowSize(ImVec2(g.IO.DisplaySize.x, g.FontBaseSize + g.Style.FramePadding.y * 2.0f)); + PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0,0)); + if (!Begin("##MainMenuBar", NULL, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoScrollbar|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_MenuBar) + || !BeginMenuBar()) { - ImGui::End(); - ImGui::PopStyleVar(2); + End(); + PopStyleVar(2); return false; } g.CurrentWindow->DC.MenuBarOffsetX += g.Style.DisplaySafeAreaPadding.x; @@ -8678,9 +8683,9 @@ bool ImGui::BeginMainMenuBar() void ImGui::EndMainMenuBar() { - ImGui::EndMenuBar(); - ImGui::End(); - ImGui::PopStyleVar(2); + EndMenuBar(); + End(); + PopStyleVar(2); } bool ImGui::BeginMenuBar() @@ -8692,14 +8697,14 @@ bool ImGui::BeginMenuBar() return false; IM_ASSERT(!window->DC.MenuBarAppending); - ImGui::BeginGroup(); // Save position - ImGui::PushID("##menubar"); + BeginGroup(); // Save position + PushID("##menubar"); ImRect rect = window->MenuBarRect(); PushClipRect(ImVec2(ImFloor(rect.Min.x+0.5f), ImFloor(rect.Min.y + window->BorderSize + 0.5f)), ImVec2(ImFloor(rect.Max.x+0.5f), ImFloor(rect.Max.y+0.5f)), false); window->DC.CursorPos = ImVec2(rect.Min.x + window->DC.MenuBarOffsetX, rect.Min.y);// + g.Style.FramePadding.y); window->DC.LayoutType = ImGuiLayoutType_Horizontal; window->DC.MenuBarAppending = true; - ImGui::AlignFirstTextHeightToWidgets(); + AlignFirstTextHeightToWidgets(); return true; } @@ -8712,10 +8717,10 @@ void ImGui::EndMenuBar() IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar); IM_ASSERT(window->DC.MenuBarAppending); PopClipRect(); - ImGui::PopID(); + PopID(); window->DC.MenuBarOffsetX = window->DC.CursorPos.x - window->MenuBarRect().Min.x; window->DC.GroupStack.back().AdvanceCursor = false; - ImGui::EndGroup(); + EndGroup(); window->DC.LayoutType = ImGuiLayoutType_Vertical; window->DC.MenuBarAppending = false; } @@ -8744,22 +8749,22 @@ bool ImGui::BeginMenu(const char* label, bool enabled) { popup_pos = ImVec2(pos.x - window->WindowPadding.x, pos.y - style.FramePadding.y + window->MenuBarHeight()); window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f); + PushStyleVar(ImGuiStyleVar_ItemSpacing, style.ItemSpacing * 2.0f); float w = label_size.x; - pressed = ImGui::Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); - ImGui::PopStyleVar(); - ImGui::SameLine(); + pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); + PopStyleVar(); + SameLine(); window->DC.CursorPos.x += (float)(int)(style.ItemSpacing.x * 0.5f); } else { popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y); float w = window->MenuColumns.DeclColumns(label_size.x, 0.0f, (float)(int)(g.FontSize * 1.20f)); // Feedback to next frame - float extra_w = ImMax(0.0f, ImGui::GetContentRegionAvail().x - w); - pressed = ImGui::Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); - if (!enabled) ImGui::PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); + float extra_w = ImMax(0.0f, GetContentRegionAvail().x - w); + pressed = Selectable(label, menu_is_open, ImGuiSelectableFlags_Menu | ImGuiSelectableFlags_DontClosePopups | ImGuiSelectableFlags_DrawFillAvailWidth | (!enabled ? ImGuiSelectableFlags_Disabled : 0), ImVec2(w, 0.0f)); + if (!enabled) PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]); RenderCollapseTriangle(pos + ImVec2(window->MenuColumns.Pos[2] + extra_w + g.FontSize * 0.20f, 0.0f), false); - if (!enabled) ImGui::PopStyleColor(); + if (!enabled) PopStyleColor(); } bool hovered = enabled && IsHovered(window->DC.LastItemRect, id); @@ -8781,7 +8786,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled) ImVec2 tc = (window->Pos.x < next_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR(); float extra = ImClamp(fabsf(ta.x - tb.x) * 0.30f, 5.0f, 30.0f); // add a bit of extra slack. ta.x += (window->Pos.x < next_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues - tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus + tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -100.0f); // triangle is maximum 200 high to limit the slope and the bias toward large sub-menus // FIXME: Multiply by fb_scale? tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +100.0f); moving_within_opened_triangle = ImIsPointInTriangle(g.IO.MousePos, ta, tb, tc); //window->DrawList->PushClipRectFullScreen(); window->DrawList->AddTriangleFilled(ta, tb, tc, moving_within_opened_triangle ? 0x80008000 : 0x80000080); window->DrawList->PopClipRect(); // Debug @@ -8798,24 +8803,25 @@ bool ImGui::BeginMenu(const char* label, bool enabled) } else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // menu-bar: first click to open, then hover to open others want_open = true; - + if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }' + want_close = true; if (want_close && IsPopupOpen(id)) ClosePopupToLevel(GImGui->CurrentPopupStack.Size); if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.CurrentPopupStack.Size) { // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame. - ImGui::OpenPopup(label); + OpenPopup(label); return false; } menu_is_open |= want_open; if (want_open) - ImGui::OpenPopup(label); + OpenPopup(label); if (menu_is_open) { - ImGui::SetNextWindowPos(popup_pos, ImGuiSetCond_Always); + SetNextWindowPos(popup_pos, ImGuiSetCond_Always); ImGuiWindowFlags flags = ImGuiWindowFlags_ShowBorders | ((window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu)) ? ImGuiWindowFlags_ChildMenu|ImGuiWindowFlags_ChildWindow : ImGuiWindowFlags_ChildMenu); menu_is_open = BeginPopupEx(label, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display) } @@ -8825,7 +8831,7 @@ bool ImGui::BeginMenu(const char* label, bool enabled) void ImGui::EndMenu() { - ImGui::EndPopup(); + EndPopup(); } // A little colored square. Return true when clicked. @@ -8850,7 +8856,7 @@ bool ImGui::ColorButton(const ImVec4& col, bool small_height, bool outline_borde RenderFrame(bb.Min, bb.Max, GetColorU32(col), outline_border, style.FrameRounding); if (hovered) - ImGui::SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col.x, col.y, col.z, col.w, IM_F32_TO_INT8(col.x), IM_F32_TO_INT8(col.y), IM_F32_TO_INT8(col.z), IM_F32_TO_INT8(col.z)); + SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col.x, col.y, col.z, col.w, IM_F32_TO_INT8(col.x), IM_F32_TO_INT8(col.y), IM_F32_TO_INT8(col.z), IM_F32_TO_INT8(col.z)); return pressed; } @@ -8862,7 +8868,7 @@ bool ImGui::ColorEdit3(const char* label, float col[3]) col4[1] = col[1]; col4[2] = col[2]; col4[3] = 1.0f; - const bool value_changed = ImGui::ColorEdit4(label, col4, false); + const bool value_changed = ColorEdit4(label, col4, false); col[0] = col4[0]; col[1] = col4[1]; col[2] = col4[2]; @@ -8889,15 +8895,15 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) float f[4] = { col[0], col[1], col[2], col[3] }; if (edit_mode == ImGuiColorEditMode_HSV) - ImGui::ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]); + ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]); int i[4] = { IM_F32_TO_INT8(f[0]), IM_F32_TO_INT8(f[1]), IM_F32_TO_INT8(f[2]), IM_F32_TO_INT8(f[3]) }; int components = alpha ? 4 : 3; bool value_changed = false; - ImGui::BeginGroup(); - ImGui::PushID(label); + BeginGroup(); + PushID(label); const bool hsv = (edit_mode == 1); switch (edit_mode) @@ -8920,17 +8926,17 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) }; const char** fmt = hide_prefix ? fmt_table[0] : hsv ? fmt_table[2] : fmt_table[1]; - ImGui::PushItemWidth(w_item_one); + PushItemWidth(w_item_one); for (int n = 0; n < components; n++) { if (n > 0) - ImGui::SameLine(0, style.ItemInnerSpacing.x); + SameLine(0, style.ItemInnerSpacing.x); if (n + 1 == components) - ImGui::PushItemWidth(w_item_last); - value_changed |= ImGui::DragInt(ids[n], &i[n], 1.0f, 0, 255, fmt[n]); + PushItemWidth(w_item_last); + value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, 255, fmt[n]); } - ImGui::PopItemWidth(); - ImGui::PopItemWidth(); + PopItemWidth(); + PopItemWidth(); } break; case ImGuiColorEditMode_HEX: @@ -8942,8 +8948,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", i[0], i[1], i[2], i[3]); else ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", i[0], i[1], i[2]); - ImGui::PushItemWidth(w_slider_all - style.ItemInnerSpacing.x); - if (ImGui::InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase)) + PushItemWidth(w_slider_all - style.ItemInnerSpacing.x); + if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase)) { value_changed |= true; char* p = buf; @@ -8955,24 +8961,24 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) else sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]); } - ImGui::PopItemWidth(); + PopItemWidth(); } break; } - ImGui::SameLine(0, style.ItemInnerSpacing.x); + SameLine(0, style.ItemInnerSpacing.x); const ImVec4 col_display(col[0], col[1], col[2], 1.0f); - if (ImGui::ColorButton(col_display)) + if (ColorButton(col_display)) g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away! // Recreate our own tooltip over's ColorButton() one because we want to display correct alpha here - if (ImGui::IsItemHovered()) - ImGui::SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col[0], col[1], col[2], col[3], IM_F32_TO_INT8(col[0]), IM_F32_TO_INT8(col[1]), IM_F32_TO_INT8(col[2]), IM_F32_TO_INT8(col[3])); + if (IsItemHovered()) + SetTooltip("Color:\n(%.2f,%.2f,%.2f,%.2f)\n#%02X%02X%02X%02X", col[0], col[1], col[2], col[3], IM_F32_TO_INT8(col[0]), IM_F32_TO_INT8(col[1]), IM_F32_TO_INT8(col[2]), IM_F32_TO_INT8(col[3])); if (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton) { - ImGui::SameLine(0, style.ItemInnerSpacing.x); + SameLine(0, style.ItemInnerSpacing.x); const char* button_titles[3] = { "RGB", "HSV", "HEX" }; if (ButtonEx(button_titles[edit_mode], ImVec2(0,0), ImGuiButtonFlags_DontClosePopups)) g.ColorEditModeStorage.SetInt(id, (edit_mode + 1) % 3); // Don't set local copy of 'edit_mode' right away! @@ -8981,15 +8987,15 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) const char* label_display_end = FindRenderedTextEnd(label); if (label != label_display_end) { - ImGui::SameLine(0, (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton) ? -1.0f : style.ItemInnerSpacing.x); - ImGui::TextUnformatted(label, label_display_end); + SameLine(0, (window->DC.ColorEditMode == ImGuiColorEditMode_UserSelectShowButton) ? -1.0f : style.ItemInnerSpacing.x); + TextUnformatted(label, label_display_end); } // Convert back for (int n = 0; n < 4; n++) f[n] = i[n] / 255.0f; if (edit_mode == 1) - ImGui::ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]); + ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]); if (value_changed) { @@ -9000,8 +9006,8 @@ bool ImGui::ColorEdit4(const char* label, float col[4], bool alpha) col[3] = f[3]; } - ImGui::PopID(); - ImGui::EndGroup(); + PopID(); + EndGroup(); return value_changed; } @@ -9040,7 +9046,7 @@ void ImGui::Separator() ImGuiContext& g = *GImGui; if (g.LogEnabled) - ImGui::LogText(IM_NEWLINE "--------------------------------"); + LogText(IM_NEWLINE "--------------------------------"); if (window->DC.ColumnsCount > 1) { @@ -9098,7 +9104,7 @@ void ImGui::BeginGroup() void ImGui::EndGroup() { ImGuiWindow* window = GetCurrentWindow(); - ImGuiStyle& style = ImGui::GetStyle(); + ImGuiStyle& style = GetStyle(); IM_ASSERT(!window->DC.GroupStack.empty()); // Mismatched BeginGroup()/EndGroup() calls @@ -9128,10 +9134,10 @@ void ImGui::EndGroup() } // Gets back to previous line and continue with horizontal layout -// pos_x == 0 : follow on previous item -// pos_x != 0 : align to specified column -// spacing_w < 0 : use default spacing if column_x==0, no spacing if column_x!=0 -// spacing_w >= 0 : enforce spacing +// pos_x == 0 : follow right after previous item +// pos_x != 0 : align to specified x position +// spacing_w < 0 : use default spacing if pos_x == 0, no spacing if pos_x != 0 +// spacing_w >= 0 : enforce spacing amount void ImGui::SameLine(float pos_x, float spacing_w) { ImGuiWindow* window = GetCurrentWindow(); @@ -9175,14 +9181,14 @@ void ImGui::NextColumn() ImGuiContext& g = *GImGui; if (window->DC.ColumnsCount > 1) { - ImGui::PopItemWidth(); + PopItemWidth(); PopClipRect(); window->DC.ColumnsCellMaxY = ImMax(window->DC.ColumnsCellMaxY, window->DC.CursorPos.y); if (++window->DC.ColumnsCurrent < window->DC.ColumnsCount) { // Columns 1+ cancel out IndentX - window->DC.ColumnsOffsetX = ImGui::GetColumnOffset(window->DC.ColumnsCurrent) - window->DC.IndentX + g.Style.ItemSpacing.x; + window->DC.ColumnsOffsetX = GetColumnOffset(window->DC.ColumnsCurrent) - window->DC.IndentX + g.Style.ItemSpacing.x; window->DrawList->ChannelsSetCurrent(window->DC.ColumnsCurrent); } else @@ -9198,7 +9204,7 @@ void ImGui::NextColumn() window->DC.CurrentLineTextBaseOffset = 0.0f; PushColumnClipRect(); - ImGui::PushItemWidth(ImGui::GetColumnWidth() * 0.65f); // FIXME: Move on columns setup + PushItemWidth(GetColumnWidth() * 0.65f); // FIXME: Move on columns setup } } @@ -9294,7 +9300,7 @@ void ImGui::Columns(int columns_count, const char* id, bool border) { if (window->DC.ColumnsCurrent != 0) ItemSize(ImVec2(0,0)); // Advance to column 0 - ImGui::PopItemWidth(); + PopItemWidth(); PopClipRect(); window->DrawList->ChannelsMerge(); @@ -9337,9 +9343,9 @@ void ImGui::Columns(int columns_count, const char* id, bool border) // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget. // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer. - ImGui::PushID(0x11223347 + (id ? 0 : columns_count)); + PushID(0x11223347 + (id ? 0 : columns_count)); window->DC.ColumnsSetID = window->GetID(id ? id : "columns"); - ImGui::PopID(); + PopID(); // Set state for first column window->DC.ColumnsCurrent = 0; @@ -9368,7 +9374,7 @@ void ImGui::Columns(int columns_count, const char* id, bool border) } window->DrawList->ChannelsSplit(window->DC.ColumnsCount); PushColumnClipRect(); - ImGui::PushItemWidth(ImGui::GetColumnWidth() * 0.65f); + PushItemWidth(GetColumnWidth() * 0.65f); } else { @@ -9376,26 +9382,26 @@ void ImGui::Columns(int columns_count, const char* id, bool border) } } -void ImGui::Indent() +void ImGui::Indent(float indent_w) { ImGuiContext& g = *GImGui; ImGuiWindow* window = GetCurrentWindow(); - window->DC.IndentX += g.Style.IndentSpacing; + window->DC.IndentX += (indent_w > 0.0f) ? indent_w : g.Style.IndentSpacing; window->DC.CursorPos.x = window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX; } -void ImGui::Unindent() +void ImGui::Unindent(float indent_w) { ImGuiContext& g = *GImGui; ImGuiWindow* window = GetCurrentWindow(); - window->DC.IndentX -= g.Style.IndentSpacing; + window->DC.IndentX -= (indent_w > 0.0f) ? indent_w : g.Style.IndentSpacing; window->DC.CursorPos.x = window->Pos.x + window->DC.IndentX + window->DC.ColumnsOffsetX; } void ImGui::TreePush(const char* str_id) { ImGuiWindow* window = GetCurrentWindow(); - ImGui::Indent(); + Indent(); window->DC.TreeDepth++; PushID(str_id ? str_id : "#TreePush"); } @@ -9403,7 +9409,7 @@ void ImGui::TreePush(const char* str_id) void ImGui::TreePush(const void* ptr_id) { ImGuiWindow* window = GetCurrentWindow(); - ImGui::Indent(); + Indent(); window->DC.TreeDepth++; PushID(ptr_id ? ptr_id : (const void*)"#TreePush"); } @@ -9411,7 +9417,7 @@ void ImGui::TreePush(const void* ptr_id) void ImGui::TreePushRawID(ImGuiID id) { ImGuiWindow* window = GetCurrentWindow(); - ImGui::Indent(); + Indent(); window->DC.TreeDepth++; window->IDStack.push_back(id); } @@ -9419,24 +9425,24 @@ void ImGui::TreePushRawID(ImGuiID id) void ImGui::TreePop() { ImGuiWindow* window = GetCurrentWindow(); - ImGui::Unindent(); + Unindent(); window->DC.TreeDepth--; PopID(); } void ImGui::Value(const char* prefix, bool b) { - ImGui::Text("%s: %s", prefix, (b ? "true" : "false")); + Text("%s: %s", prefix, (b ? "true" : "false")); } void ImGui::Value(const char* prefix, int v) { - ImGui::Text("%s: %d", prefix, v); + Text("%s: %d", prefix, v); } void ImGui::Value(const char* prefix, unsigned int v) { - ImGui::Text("%s: %d", prefix, v); + Text("%s: %d", prefix, v); } void ImGui::Value(const char* prefix, float v, const char* float_format) @@ -9445,33 +9451,33 @@ void ImGui::Value(const char* prefix, float v, const char* float_format) { char fmt[64]; ImFormatString(fmt, IM_ARRAYSIZE(fmt), "%%s: %s", float_format); - ImGui::Text(fmt, prefix, v); + Text(fmt, prefix, v); } else { - ImGui::Text("%s: %.3f", prefix, v); + Text("%s: %.3f", prefix, v); } } // FIXME: May want to remove those helpers? void ImGui::ValueColor(const char* prefix, const ImVec4& v) { - ImGui::Text("%s: (%.2f,%.2f,%.2f,%.2f)", prefix, v.x, v.y, v.z, v.w); - ImGui::SameLine(); - ImGui::ColorButton(v, true); + Text("%s: (%.2f,%.2f,%.2f,%.2f)", prefix, v.x, v.y, v.z, v.w); + SameLine(); + ColorButton(v, true); } void ImGui::ValueColor(const char* prefix, unsigned int v) { - ImGui::Text("%s: %08X", prefix, v); - ImGui::SameLine(); + Text("%s: %08X", prefix, v); + SameLine(); ImVec4 col; col.x = (float)((v >> 0) & 0xFF) / 255.0f; col.y = (float)((v >> 8) & 0xFF) / 255.0f; col.z = (float)((v >> 16) & 0xFF) / 255.0f; col.w = (float)((v >> 24) & 0xFF) / 255.0f; - ImGui::ColorButton(col, true); + ColorButton(col, true); } //----------------------------------------------------------------------------- diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h index 1add69006b8..97411beb216 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.h @@ -1,4 +1,4 @@ -// dear imgui, v1.49 WIP +// dear imgui, v1.50 WIP // (headers) // See imgui.cpp file for documentation. @@ -16,7 +16,7 @@ #include // ptrdiff_t, NULL #include // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp -#define IMGUI_VERSION "1.49 WIP" +#define IMGUI_VERSION "1.50 WIP" // Define attributes of all API symbols declarations, e.g. for DLL under Windows. #ifndef IMGUI_API @@ -36,6 +36,11 @@ #define IM_PRINTFARGS(FMT) #endif +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#endif + // Forward declarations struct ImDrawChannel; // Temporary storage for outputting drawing commands out of order, used by ImDrawList::ChannelsSplit() struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call) @@ -140,15 +145,15 @@ namespace ImGui IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // set next window position. call before Begin() IMGUI_API void SetNextWindowPosCenter(ImGuiSetCond cond = 0); // set next window position to be centered on screen. call before Begin() IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() - IMGUI_API void SetNextWindowSizeConstraint(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. + IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (enforce the range of scrollbars). set axis to 0.0f to leave it automatic. call before Begin() IMGUI_API void SetNextWindowContentWidth(float width); // set next window content width (enforce the range of horizontal scrollbar). call before Begin() IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // set next window collapsed state. call before Begin() IMGUI_API void SetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() - IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // set current window position - call within Begin()/End(). may incur tearing - IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // set current window size. set to ImVec2(0,0) to force an auto-fit. may incur tearing - IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // set current window collapsed state - IMGUI_API void SetWindowFocus(); // set current window to be focused / front-most + IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiSetCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. + IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiSetCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. + IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiSetCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). + IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiSetCond cond = 0); // set named window position. IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiSetCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis. IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiSetCond cond = 0); // set named window collapsed state @@ -195,10 +200,10 @@ namespace ImGui IMGUI_API void Separator(); // horizontal line IMGUI_API void SameLine(float pos_x = 0.0f, float spacing_w = -1.0f); // call between widgets or groups to layout them horizontally IMGUI_API void NewLine(); // undo a SameLine() - IMGUI_API void Spacing(); // add spacing + IMGUI_API void Spacing(); // add vertical spacing IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size - IMGUI_API void Indent(); // move content position toward the right by style.IndentSpacing pixels - IMGUI_API void Unindent(); // move content position back to the left (cancel Indent) + IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by style.IndentSpacing or indent_w if >0 + IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by style.IndentSpacing or indent_w if >0 IMGUI_API void BeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) IMGUI_API void EndGroup(); IMGUI_API ImVec2 GetCursorPos(); // cursor position is relative to window position @@ -208,7 +213,7 @@ namespace ImGui IMGUI_API void SetCursorPosX(float x); // " IMGUI_API void SetCursorPosY(float y); // " IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position - IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] + IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] IMGUI_API void AlignFirstTextHeightToWidgets(); // call once if the first item on the line is a Text() item and you want to vertically lower it to match subsequent (bigger) widgets IMGUI_API float GetTextLineHeight(); // height of font == GetWindowFontSize() @@ -216,7 +221,7 @@ namespace ImGui IMGUI_API float GetItemsLineHeightWithSpacing(); // distance (in pixels) between 2 consecutive lines of standard height widgets == GetWindowFontSize() + GetStyle().FramePadding.y*2 + GetStyle().ItemSpacing.y // Columns - // You can also use SameLine(pos_x) for simplified columning. The columns API is still work-in-progress. + // You can also use SameLine(pos_x) for simplified columning. The columns API is still work-in-progress and rather lacking. IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true); // setup number of columns. use an identifier to distinguish multiple column sets. close with Columns(1). IMGUI_API void NextColumn(); // next column IMGUI_API int GetColumnIndex(); // get current column index @@ -249,10 +254,10 @@ namespace ImGui IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // doesn't require null terminated string if 'text_end' is specified. no copy done to any bounded stack buffer, recommended for long chunks of text IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_PRINTFARGS(2); // display text+label aligned the same way as value+label widgets IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args); - IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance you by the same distance as an empty TreeNode() call. - IMGUI_API void BulletText(const char* fmt, ...) IM_PRINTFARGS(1); + IMGUI_API void Bullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses + IMGUI_API void BulletText(const char* fmt, ...) IM_PRINTFARGS(1); // shortcut for Bullet()+Text() IMGUI_API void BulletTextV(const char* fmt, va_list args); - IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); + IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0,0)); // button IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size); IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); @@ -267,7 +272,7 @@ namespace ImGui IMGUI_API bool ColorButton(const ImVec4& col, bool small_height = false, bool outline_border = true); IMGUI_API bool ColorEdit3(const char* label, float col[3]); // Hint: 'float col[3]' function argument is same as 'float* col'. You can pass address of first element out of a contiguous set, e.g. &myvector.x IMGUI_API bool ColorEdit4(const char* label, float col[4], bool show_alpha = true); // " - IMGUI_API void ColorEditMode(ImGuiColorEditMode mode); // FIXME-OBSOLETE: This is inconsistent with most of the API and should be obsoleted. + IMGUI_API void ColorEditMode(ImGuiColorEditMode mode); // FIXME-OBSOLETE: This is inconsistent with most of the API and will be obsoleted/replaced. IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); IMGUI_API void PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); @@ -323,12 +328,13 @@ namespace ImGui IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_PRINTFARGS(3); IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args); IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args); - IMGUI_API void TreePush(const char* str_id = NULL); // already called by TreeNode(), but you can call Push/Pop yourself for layout purpose + IMGUI_API void TreePush(const char* str_id = NULL); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose IMGUI_API void TreePush(const void* ptr_id = NULL); // " - IMGUI_API void TreePop(); + IMGUI_API void TreePop(); // ~ Unindent()+PopId() + IMGUI_API void TreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() + IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceeding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode IMGUI_API void SetNextTreeNodeOpen(bool is_open, ImGuiSetCond cond = 0); // set next TreeNode/CollapsingHeader open state. - IMGUI_API float GetTreeNodeToLabelSpacing(ImGuiTreeNodeFlags flags = 0); // return horizontal distance between cursor and text label due to collapsing node. == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode - IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. user doesn't have to call TreePop(). + IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). IMGUI_API bool CollapsingHeader(const char* label, bool* p_open, ImGuiTreeNodeFlags flags = 0); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header // Widgets: Selectable / Lists @@ -458,7 +464,7 @@ namespace ImGui // Obsolete (will be removed) #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS - static inline bool CollapsingHeader(const char* label, const char* str_id, bool display_frame = true, bool default_open = false) { (void)str_id; (void)display_frame; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+ + static inline bool CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1<<5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+ static inline ImFont* GetWindowFont() { return GetFont(); } // OBSOLETE 1.48+ static inline float GetWindowFontSize() { return GetFontSize(); } // OBSOLETE 1.48+ static inline void OpenNextNode(bool open) { ImGui::SetNextTreeNodeOpen(open, 0); } // OBSOLETE 1.34+ @@ -530,7 +536,7 @@ enum ImGuiInputTextFlags_ ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline() }; -// Flags for ImGui::TreeNode*(), ImGui::CollapsingHeader*() +// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*() enum ImGuiTreeNodeFlags_ { ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected @@ -541,10 +547,10 @@ enum ImGuiTreeNodeFlags_ ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. - ImGuiTreeNodeFlags_AlwaysOpen = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). - //ImGuiTreeNodeFlags_UnindentArrow = 1 << 9, // FIXME: TODO: Unindent tree so that Label is aligned to current X position + ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow //ImGuITreeNodeFlags_SpanAllAvailWidth = 1 << 10, // FIXME: TODO: Extend hit box horizontally even if not framed - //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 11, // FIXME: TODO: Automatically scroll on TreePop() if node got just open and contents is not visible + //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 11, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoAutoOpenOnLog }; @@ -660,6 +666,7 @@ enum ImGuiAlign_ }; // Enumeration for ColorEditMode() +// FIXME-OBSOLETE: Will be replaced by future color/picker api enum ImGuiColorEditMode_ { ImGuiColorEditMode_UserSelect = -2, @@ -880,6 +887,7 @@ public: { if (new_capacity <= Capacity) return; T* new_data = (value_type*)ImGui::MemAlloc((size_t)new_capacity * sizeof(value_type)); + memset(&new_data[Size], 0, (size_t)(new_capacity - Size) * sizeof(value_type)); // BK - clear garbage so that 0 initialized ImString works properly. memcpy(new_data, Data, (size_t)Size * sizeof(value_type)); ImGui::MemFree(Data); Data = new_data; @@ -1034,11 +1042,11 @@ struct ImGuiTextEditCallbackData bool HasSelection() const { return SelectionStart != SelectionEnd; } }; -// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraint(). Callback is called during the next Begin(). -// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraint() parameters are enough. +// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin(). +// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough. struct ImGuiSizeConstraintCallbackData { - void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraint() + void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() ImVec2 Pos; // Read-only. Window position, for reference. ImVec2 CurrentSize; // Read-only. Current window size. ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. @@ -1353,7 +1361,7 @@ struct ImFont ImVec2 DisplayOffset; // = (0.f,1.f) // Offset font rendering by xx pixels ImVector Glyphs; // // All glyphs. ImVector IndexXAdvance; // // Sparse. Glyphs->XAdvance in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). - ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + ImVector IndexLookup; // // Sparse. Index glyphs by Unicode code-point. const Glyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) float FallbackXAdvance; // == FallbackGlyph->XAdvance ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() @@ -1386,6 +1394,10 @@ struct ImFont IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. }; +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + //---- Include imgui_user.h at the end of imgui.h //---- So you can include code that extends ImGui using any of the types declared above. //---- (also convenient for user to only explicitly include vanilla imgui.h) diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp index d71343b30c1..62bbd8c3bc5 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.49 WIP +// dear imgui, v1.50 WIP // (demo code) // Don't remove this file from your project! It is useful reference code that you can execute. @@ -11,7 +11,7 @@ #include "imgui.h" #include // toupper, isprint -#include // sqrtf, fabsf, fmodf, powf, cosf, sinf, floorf, ceilf +#include // sqrtf, powf, cosf, sinf, floorf, ceilf #include // vsnprintf, sscanf, printf #include // NULL, malloc, free, qsort, atoi #if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier @@ -251,34 +251,53 @@ void ImGui::ShowTestWindow(bool* p_open) ImGui::TreePop(); } - if (ImGui::TreeNode("With selectable nodes")) + if (ImGui::TreeNode("Advanced, with Selectable nodes")) { - ShowHelpMarker("Click to select, CTRL+Click to toggle, click on arrows to open"); - static int selection_mask = 0x02; // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. - int node_clicked = -1; + ShowHelpMarker("This is a more standard looking tree with selectable nodes.\nClick to select, CTRL+Click to toggle, click on arrows or double-click to open."); + static bool align_label_with_current_x_position = false; + ImGui::Checkbox("Align label with current X position)", &align_label_with_current_x_position); + ImGui::Text("Hello!"); + if (align_label_with_current_x_position) + ImGui::Unindent(ImGui::GetTreeNodeToLabelSpacing()); + + static int selection_mask = (1 << 2); // Dumb representation of what may be user-side selection state. You may carry selection state inside or outside your objects in whatever format you see fit. + int node_clicked = -1; // Temporary storage of what node we have clicked to process selection at the end of the loop. May be a pointer to your own node type, etc. + ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, ImGui::GetFontSize()*3); // Increase spacing to differentiate leaves from expanded contents. for (int i = 0; i < 6; i++) { - ImGuiTreeNodeFlags node_flags = ((selection_mask & (1 << i)) ? ImGuiTreeNodeFlags_Selected : 0) | ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick; - if (i >= 3) - node_flags |= ImGuiTreeNodeFlags_AlwaysOpen; - bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable %s %d", (i >= 3) ? "Leaf" : "Node", i); - if (ImGui::IsItemClicked()) - node_clicked = i; - if (node_open) + // Disable the default open on single-click behavior and pass in Selected flag according to our selection state. + ImGuiTreeNodeFlags node_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ((selection_mask & (1 << i)) ? ImGuiTreeNodeFlags_Selected : 0); + if (i < 3) { - ImGui::Text("Selectable Blah blah"); - ImGui::Text("Blah blah"); - ImGui::TreePop(); + // Node + bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i); + if (ImGui::IsItemClicked()) + node_clicked = i; + if (node_open) + { + ImGui::Text("Blah blah\nBlah Blah"); + ImGui::TreePop(); + } + } + else + { + // Leaf: The only reason we have a TreeNode at all is to allow selection of the leaf. Otherwise we can use BulletText() or TreeAdvanceToLabelPos()+Text(). + ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags | ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen, "Selectable Leaf %d", i); + if (ImGui::IsItemClicked()) + node_clicked = i; } } if (node_clicked != -1) { // Update selection state. Process outside of tree loop to avoid visual inconsistencies during the clicking-frame. if (ImGui::GetIO().KeyCtrl) - selection_mask ^= (1 << node_clicked); // CTRL+click to toggle - else - selection_mask = (1 << node_clicked); // Click to single-select + selection_mask ^= (1 << node_clicked); // CTRL+click to toggle + else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, this commented bit preserve selection when clicking on item that is part of the selection + selection_mask = (1 << node_clicked); // Click to single-select } + ImGui::PopStyleVar(); + if (align_label_with_current_x_position) + ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing()); ImGui::TreePop(); } ImGui::TreePop(); @@ -423,6 +442,19 @@ void ImGui::ShowTestWindow(bool* p_open) ImGui::Selectable("Hello.h", &selected[2]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes"); ImGui::TreePop(); } + if (ImGui::TreeNode("In columns")) + { + ImGui::Columns(3, NULL, false); + static bool selected[16] = { 0 }; + for (int i = 0; i < 16; i++) + { + char label[32]; sprintf(label, "Item %d", i); + if (ImGui::Selectable(label, &selected[i])) {} + ImGui::NextColumn(); + } + ImGui::Columns(1); + ImGui::TreePop(); + } if (ImGui::TreeNode("Grid")) { static bool selected[16] = { true, false, false, false, false, true, false, false, false, false, true, false, false, false, false, true }; @@ -1293,7 +1325,22 @@ void ImGui::ShowTestWindow(bool* p_open) // Basic columns if (ImGui::TreeNode("Basic")) { - ImGui::Columns(4, "mycolumns"); + ImGui::Text("Without border:"); + ImGui::Columns(3, "mycolumns3", false); // 3-ways, no border + ImGui::Separator(); + for (int n = 0; n < 14; n++) + { + char label[32]; + sprintf(label, "Item %d", n); + if (ImGui::Selectable(label)) {} + //if (ImGui::Button(label, ImVec2(-1,0))) {} + ImGui::NextColumn(); + } + ImGui::Columns(1); + ImGui::Separator(); + + ImGui::Text("With border:"); + ImGui::Columns(4, "mycolumns"); // 4-ways, with border ImGui::Separator(); ImGui::Text("ID"); ImGui::NextColumn(); ImGui::Text("Name"); ImGui::NextColumn(); @@ -1368,9 +1415,9 @@ void ImGui::ShowTestWindow(bool* p_open) ImGui::InputFloat("blue", &bar, 0.05f, 0, 3); ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category A")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category B")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); - if (ImGui::CollapsingHeader("Category C")) ImGui::Text("Blah blah blah"); ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); + if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn(); ImGui::Columns(1); ImGui::Separator(); ImGui::TreePop(); @@ -1807,12 +1854,12 @@ static void ShowExampleAppConstrainedResize(bool* p_open) }; static int type = 0; - if (type == 0) ImGui::SetNextWindowSizeConstraint(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only - if (type == 1) ImGui::SetNextWindowSizeConstraint(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only - if (type == 2) ImGui::SetNextWindowSizeConstraint(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100 - if (type == 3) ImGui::SetNextWindowSizeConstraint(ImVec2(300, 0), ImVec2(400, FLT_MAX)); // Width 300-400 - if (type == 4) ImGui::SetNextWindowSizeConstraint(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square - if (type == 5) ImGui::SetNextWindowSizeConstraint(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step + if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only + if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only + if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100 + if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(300, 0), ImVec2(400, FLT_MAX)); // Width 300-400 + if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square + if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)100);// Fixed Step if (ImGui::Begin("Example: Constrained Resize", p_open)) { @@ -1826,9 +1873,9 @@ static void ShowExampleAppConstrainedResize(bool* p_open) "Custom: Fixed Steps (100)", }; ImGui::Combo("Constraint", &type, desc, IM_ARRAYSIZE(desc)); - if (ImGui::Button("200x200")) ImGui::SetWindowSize(ImVec2(200,200)); ImGui::SameLine(); - if (ImGui::Button("500x500")) ImGui::SetWindowSize(ImVec2(500,500)); ImGui::SameLine(); - if (ImGui::Button("800x200")) ImGui::SetWindowSize(ImVec2(800,200)); + if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200,200)); } ImGui::SameLine(); + if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500,500)); } ImGui::SameLine(); + if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800,200)); } for (int i = 0; i < 10; i++) ImGui::Text("Hello, sailor! Making this line long enough for the example."); } @@ -2041,8 +2088,8 @@ struct ExampleAppConsole // TODO: display items starting from the bottom if (ImGui::SmallButton("Add Dummy Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); } ImGui::SameLine(); - if (ImGui::SmallButton("Add Dummy Error")) AddLog("[error] something went wrong"); ImGui::SameLine(); - if (ImGui::SmallButton("Clear")) ClearLog(); ImGui::SameLine(); + if (ImGui::SmallButton("Add Dummy Error")) { AddLog("[error] something went wrong"); } ImGui::SameLine(); + if (ImGui::SmallButton("Clear")) { ClearLog(); } ImGui::SameLine(); if (ImGui::SmallButton("Scroll to bottom")) ScrollToBottom = true; //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); } @@ -2096,7 +2143,7 @@ struct ExampleAppConsole if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_CallbackCompletion|ImGuiInputTextFlags_CallbackHistory, &TextEditCallbackStub, (void*)this)) { char* input_end = InputBuf+strlen(InputBuf); - while (input_end > InputBuf && input_end[-1] == ' ') input_end--; *input_end = 0; + while (input_end > InputBuf && input_end[-1] == ' ') { input_end--; } *input_end = 0; if (InputBuf[0]) ExecCommand(InputBuf); strcpy(InputBuf, ""); diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp index ff1a6be7525..1ae0b330aed 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp @@ -1,4 +1,4 @@ -// dear imgui, v1.49 WIP +// dear imgui, v1.50 WIP // (drawing and font code) // Contains implementation for @@ -1697,7 +1697,7 @@ void ImFont::BuildLookupTable() for (int i = 0; i != Glyphs.Size; i++) max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint); - IM_ASSERT(Glyphs.Size < 32*1024); + IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved IndexXAdvance.clear(); IndexLookup.clear(); GrowIndex(max_codepoint + 1); @@ -1705,7 +1705,7 @@ void ImFont::BuildLookupTable() { int codepoint = (int)Glyphs[i].Codepoint; IndexXAdvance[codepoint] = Glyphs[i].XAdvance; - IndexLookup[codepoint] = (short)i; + IndexLookup[codepoint] = (unsigned short)i; } // Create a glyph to handle TAB @@ -1719,7 +1719,7 @@ void ImFont::BuildLookupTable() tab_glyph.Codepoint = '\t'; tab_glyph.XAdvance *= 4; IndexXAdvance[(int)tab_glyph.Codepoint] = (float)tab_glyph.XAdvance; - IndexLookup[(int)tab_glyph.Codepoint] = (short)(Glyphs.Size-1); + IndexLookup[(int)tab_glyph.Codepoint] = (unsigned short)(Glyphs.Size-1); } FallbackGlyph = NULL; @@ -1747,7 +1747,7 @@ void ImFont::GrowIndex(int new_size) for (int i = old_size; i < new_size; i++) { IndexXAdvance[i] = -1.0f; - IndexLookup[i] = (short)-1; + IndexLookup[i] = (unsigned short)-1; } } @@ -1756,13 +1756,13 @@ void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst) IM_ASSERT(IndexLookup.Size > 0); // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function. int index_size = IndexLookup.Size; - if (dst < index_size && IndexLookup.Data[dst] == -1 && !overwrite_dst) // 'dst' already exists + if (dst < index_size && IndexLookup.Data[dst] == (unsigned short)-1 && !overwrite_dst) // 'dst' already exists return; if (src >= index_size && dst >= index_size) // both 'dst' and 'src' don't exist -> no-op return; GrowIndex(dst + 1); - IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : -1; + IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (unsigned short)-1; IndexXAdvance[dst] = (src < index_size) ? IndexXAdvance.Data[src] : 1.0f; } @@ -1770,8 +1770,8 @@ const ImFont::Glyph* ImFont::FindGlyph(unsigned short c) const { if (c < IndexLookup.Size) { - const short i = IndexLookup[c]; - if (i != -1) + const unsigned short i = IndexLookup[c]; + if (i != (unsigned short)-1) return &Glyphs.Data[i]; } return FallbackGlyph; diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h index c787dbd1142..28fb93e98d2 100644 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_internal.h @@ -1,4 +1,4 @@ -// dear imgui, v1.49 WIP +// dear imgui, v1.50 WIP // (internals) // You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility! @@ -12,13 +12,20 @@ #endif #include // FILE* -#include // sqrtf() +#include // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf #ifdef _MSC_VER #pragma warning (push) #pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport) #endif +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h +#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h +#pragma clang diagnostic ignored "-Wold-style-cast" +#endif + //----------------------------------------------------------------------------- // Forward Declarations //----------------------------------------------------------------------------- @@ -47,12 +54,6 @@ typedef int ImGuiSliderFlags; // enum ImGuiSliderFlags_ namespace ImGuiStb { -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-function" -#pragma clang diagnostic ignored "-Wmissing-prototypes" -#endif - #undef STB_TEXTEDIT_STRING #undef STB_TEXTEDIT_CHARTYPE #define STB_TEXTEDIT_STRING ImGuiTextEditState @@ -60,10 +61,6 @@ namespace ImGuiStb #define STB_TEXTEDIT_GETWIDTH_NEWLINE -1.0f #include "stb_textedit.h" -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - } // namespace ImGuiStb //----------------------------------------------------------------------------- @@ -607,6 +604,7 @@ struct IMGUI_API ImGuiWindow ImVec2 SizeFull; // Size when non collapsed ImVec2 SizeContents; // Size of contents (== extents reach of the drawing cursor) from previous frame ImVec2 SizeContentsExplicit; // Size of contents explicitly set by the user via SetNextWindowContentSize() + ImRect ContentsRegionRect; // Maximum visible content position in window coordinates. ~~ (SizeContentsExplicit ? SizeContentsExplicit : Size - ScrollbarSizes) - CursorStartPos, per axis ImVec2 WindowPadding; // Window padding at the time of begin. We need to lock it, in particular manipulation of the ShowBorder would have an effect ImGuiID MoveID; // == window->GetID("#MOVE") ImVec2 Scroll; @@ -745,7 +743,11 @@ namespace ImGui IMGUI_API int ParseFormatPrecision(const char* fmt, int default_value); IMGUI_API float RoundScalar(float value, int decimal_precision); -} // namespace ImGuiP +} // namespace ImGui + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif #ifdef _MSC_VER #pragma warning (pop) diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h new file mode 100644 index 00000000000..5d90624d3bd --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.h @@ -0,0 +1,46 @@ +#include +#include + +namespace ImGui +{ + struct Font + { + enum Enum + { + Regular, + Mono, + + Count + }; + }; + + void PushFont(Font::Enum _font); + + // BK - simple string class for convenience. + class ImString + { + public: + ImString(); + ImString(const ImString& rhs); + ImString(const char* rhs); + ~ImString(); + + ImString& operator=(const ImString& rhs); + ImString& operator=(const char* rhs); + + void Clear(); + bool IsEmpty() const; + + const char* CStr() const + { + return NULL == Ptr ? "" : Ptr; + } + + private: + char* Ptr; + }; + +} // namespace ImGui + +#include "widgets/file_list.h" +#include "widgets/memory_editor.h" diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl new file mode 100644 index 00000000000..b064a6d4d68 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_user.inl @@ -0,0 +1,76 @@ +namespace ImGui +{ + ImString::ImString() + : Ptr(NULL) + { + } + + ImString::ImString(const ImString& rhs) + : Ptr(NULL) + { + if (NULL != rhs.Ptr + && 0 != strcmp(rhs.Ptr, "")) + { + Ptr = ImStrdup(rhs.Ptr); + } + } + + ImString::ImString(const char* rhs) + : Ptr(NULL) + { + if (NULL != rhs + && 0 != strcmp(rhs, "")) + { + Ptr = ImStrdup(rhs); + } + } + + ImString::~ImString() + { + Clear(); + } + + ImString& ImString::operator=(const ImString& rhs) + { + if (this != &rhs) + { + *this = rhs.Ptr; + } + + return *this; + } + + ImString& ImString::operator=(const char* rhs) + { + if (Ptr != rhs) + { + Clear(); + + if (NULL != rhs + && 0 != strcmp(rhs, "")) + { + Ptr = ImStrdup(rhs); + } + } + + return *this; + } + + void ImString::Clear() + { + if (NULL != Ptr) + { + MemFree(Ptr); + Ptr = NULL; + } + } + + bool ImString::IsEmpty() const + { + return NULL == Ptr; + } +} // namespace + + +#include "widgets/file_list.inl" +#include "widgets/memory_editor.inl" diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/memory_editor.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/memory_editor.h deleted file mode 100644 index 5409235715f..00000000000 --- a/3rdparty/bgfx/3rdparty/ocornut-imgui/memory_editor.h +++ /dev/null @@ -1,210 +0,0 @@ -// Mini memory editor for ImGui (to embed in your game/tools) -// v0.10 -// -// You can adjust the keyboard repeat delay/rate in ImGuiIO. -// The code assume a mono-space font for simplicity! If you don't use the default font, use ImGui::PushFont()/PopFont() to switch to a mono-space font before caling this. -// -// Usage: -// static MemoryEditor memory_editor; // save your state somewhere -// memory_editor.Draw("Memory Editor", mem_block, mem_block_size, (size_t)mem_block); // run -// -// TODO: better resizing policy (ImGui doesn't have flexible window resizing constraints yet) - -struct MemoryEditor -{ - bool Open; - bool AllowEdits; - int Rows; - int DataEditingAddr; - bool DataEditingTakeFocus; - char DataInput[32]; - char AddrInput[32]; - - MemoryEditor() - { - Open = true; - Rows = 16; - DataEditingAddr = -1; - DataEditingTakeFocus = false; - strcpy(DataInput, ""); - strcpy(AddrInput, ""); - AllowEdits = true; - } - - void Draw(const char* title, unsigned char* mem_data, int mem_size, size_t base_display_addr = 0) - { - if (ImGui::Begin(title, &Open)) - { - ImGui::BeginChild("##scrolling", ImVec2(0, -ImGui::GetItemsLineHeightWithSpacing())); - - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0,0)); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0,0)); - - int addr_digits_count = 0; - for (int n = base_display_addr + mem_size - 1; n > 0; n >>= 4) - addr_digits_count++; - - float glyph_width = ImGui::CalcTextSize("F").x; - float cell_width = glyph_width * 3; // "FF " we include trailing space in the width to easily catch clicks everywhere - - float line_height = ImGui::GetTextLineHeight(); - int line_total_count = (int)((mem_size + Rows-1) / Rows); - ImGuiListClipper clipper(line_total_count, line_height); - int visible_start_addr = clipper.DisplayStart * Rows; - int visible_end_addr = clipper.DisplayEnd * Rows; - - bool data_next = false; - - if (!AllowEdits || DataEditingAddr >= mem_size) - DataEditingAddr = -1; - - int data_editing_addr_backup = DataEditingAddr; - if (DataEditingAddr != -1) - { - if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_UpArrow)) && DataEditingAddr >= Rows) { DataEditingAddr -= Rows; DataEditingTakeFocus = true; } - else if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_DownArrow)) && DataEditingAddr < mem_size - Rows) { DataEditingAddr += Rows; DataEditingTakeFocus = true; } - else if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_LeftArrow)) && DataEditingAddr > 0) { DataEditingAddr -= 1; DataEditingTakeFocus = true; } - else if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_RightArrow)) && DataEditingAddr < mem_size - 1) { DataEditingAddr += 1; DataEditingTakeFocus = true; } - } - if ((DataEditingAddr / Rows) != (data_editing_addr_backup / Rows)) - { - // Track cursor movements - float scroll_offset = ((DataEditingAddr / Rows) - (data_editing_addr_backup / Rows)) * line_height; - bool scroll_desired = (scroll_offset < 0.0f && DataEditingAddr < visible_start_addr + Rows*2) || (scroll_offset > 0.0f && DataEditingAddr > visible_end_addr - Rows*2); - if (scroll_desired) - ImGui::SetScrollY(ImGui::GetScrollY() + scroll_offset); - } - - bool draw_separator = true; - for (int line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) // display only visible items - { - int addr = line_i * Rows; - ImGui::Text("%0*X: ", addr_digits_count, base_display_addr+addr); - ImGui::SameLine(); - - // Draw Hexadecimal - float line_start_x = ImGui::GetCursorPosX(); - for (int n = 0; n < Rows && addr < mem_size; n++, addr++) - { - ImGui::SameLine(line_start_x + cell_width * n); - - if (DataEditingAddr == addr) - { - // Display text input on current byte - ImGui::PushID(addr); - struct FuncHolder - { - // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. - static int Callback(ImGuiTextEditCallbackData* data) - { - int* p_cursor_pos = (int*)data->UserData; - if (!data->HasSelection()) - *p_cursor_pos = data->CursorPos; - return 0; - } - }; - int cursor_pos = -1; - bool data_write = false; - if (DataEditingTakeFocus) - { - ImGui::SetKeyboardFocusHere(); - sprintf(AddrInput, "%0*X", addr_digits_count, base_display_addr+addr); - sprintf(DataInput, "%02X", mem_data[addr]); - } - ImGui::PushItemWidth(ImGui::CalcTextSize("FF").x); - ImGuiInputTextFlags flags = ImGuiInputTextFlags_CharsHexadecimal|ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_AutoSelectAll|ImGuiInputTextFlags_NoHorizontalScroll|ImGuiInputTextFlags_AlwaysInsertMode|ImGuiInputTextFlags_CallbackAlways; - if (ImGui::InputText("##data", DataInput, 32, flags, FuncHolder::Callback, &cursor_pos)) - data_write = data_next = true; - else if (!DataEditingTakeFocus && !ImGui::IsItemActive()) - DataEditingAddr = -1; - DataEditingTakeFocus = false; - ImGui::PopItemWidth(); - if (cursor_pos >= 2) - data_write = data_next = true; - if (data_write) - { - int data; - if (sscanf(DataInput, "%X", &data) == 1) - mem_data[addr] = (unsigned char)data; - } - ImGui::PopID(); - } - else - { - ImGui::Text("%02X ", mem_data[addr]); - if (AllowEdits && ImGui::IsItemHovered() && ImGui::IsMouseClicked(0)) - { - DataEditingTakeFocus = true; - DataEditingAddr = addr; - } - } - } - - ImGui::SameLine(line_start_x + cell_width * Rows + glyph_width * 2); - - if (draw_separator) - { - ImVec2 screen_pos = ImGui::GetCursorScreenPos(); - ImGui::GetWindowDrawList()->AddLine(ImVec2(screen_pos.x - glyph_width, screen_pos.y - 9999), ImVec2(screen_pos.x - glyph_width, screen_pos.y + 9999), ImColor(ImGui::GetStyle().Colors[ImGuiCol_Border])); - draw_separator = false; - } - - // Draw ASCII values - addr = line_i * Rows; - for (int n = 0; n < Rows && addr < mem_size; n++, addr++) - { - if (n > 0) ImGui::SameLine(); - int c = mem_data[addr]; - ImGui::Text("%c", (c >= 32 && c < 128) ? c : '.'); - } - } - clipper.End(); - ImGui::PopStyleVar(2); - - ImGui::EndChild(); - - if (data_next && DataEditingAddr < mem_size) - { - DataEditingAddr = DataEditingAddr + 1; - DataEditingTakeFocus = true; - } - - ImGui::Separator(); - - ImGui::AlignFirstTextHeightToWidgets(); - ImGui::PushItemWidth(50); - ImGui::PushAllowKeyboardFocus(false); - int rows_backup = Rows; - if (ImGui::DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) - { - ImVec2 new_window_size = ImGui::GetWindowSize(); - new_window_size.x += (Rows - rows_backup) * (cell_width + glyph_width); - ImGui::SetWindowSize(new_window_size); - } - ImGui::PopAllowKeyboardFocus(); - ImGui::PopItemWidth(); - ImGui::SameLine(); - ImGui::Text("Range %0*X..%0*X", addr_digits_count, (int)base_display_addr, addr_digits_count, (int)base_display_addr+mem_size-1); - ImGui::SameLine(); - ImGui::PushItemWidth(70); - if (ImGui::InputText("##addr", AddrInput, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) - { - int goto_addr; - if (sscanf(AddrInput, "%X", &goto_addr) == 1) - { - goto_addr -= base_display_addr; - if (goto_addr >= 0 && goto_addr < mem_size) - { - ImGui::BeginChild("##scrolling"); - ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + (goto_addr / Rows) * ImGui::GetTextLineHeight()); - ImGui::EndChild(); - DataEditingAddr = goto_addr; - DataEditingTakeFocus = true; - } - } - } - ImGui::PopItemWidth(); - } - ImGui::End(); - } -}; diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.h new file mode 100644 index 00000000000..ad2172b7a90 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.h @@ -0,0 +1,28 @@ +namespace ImGui +{ + struct ImFileInfo + { + ImFileInfo(const char* name, int64_t size); + ~ImFileInfo(); + + ImString Name; + int64_t Size; + }; + + struct ImFileList + { + typedef ImVector FileInfoArray; + FileInfoArray FileList; + int Pos; + + ImFileList(const char* path = ".") + : Pos(0) + { + ChDir(path); + } + + void ChDir(const char* path); + void Draw(); + }; + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl new file mode 100644 index 00000000000..ceb6b29af4b --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/file_list.inl @@ -0,0 +1,119 @@ +#include +#include + +namespace ImGui +{ + ImFileInfo::ImFileInfo(const char* name, int64_t size) + : Name(name) + , Size(size) + { + } + + ImFileInfo::~ImFileInfo() + { + } + + void ImFileList::ChDir(const char* path) + { + DIR* dir = opendir(path); + if (NULL != dir) + { + FileList.clear(); + + for (dirent* item = readdir(dir); NULL != item; item = readdir(dir) ) + { + if (0 == ImStricmp(item->d_name, "..") ) + { + FileList.push_back(ImFileInfo(item->d_name, -1) ); + } + else if (0 != ImStricmp(item->d_name, ".") ) + { + if (item->d_type & DT_DIR) + { + FileList.push_back(ImFileInfo(item->d_name, -1) ); + } + else + { + struct stat statbuf; + stat(item->d_name, &statbuf); + FileList.push_back(ImFileInfo(item->d_name, statbuf.st_size) ); + } + } + } + + closedir(dir); + } + } + + void ImFileList::Draw() + { + BeginChild("##file_list", ImVec2(0.0f, 0.0f) ); + PushFont(Font::Mono); + + PushItemWidth(-1); + if (ListBoxHeader("##empty", ImVec2(0.0f, 0.0f) ) ) + { + const float lineHeight = GetTextLineHeightWithSpacing(); + + ImString chdir; + + int pos = 0; + ImGuiListClipper clipper(FileList.size(), lineHeight); + for (FileInfoArray::const_iterator it = FileList.begin(), itEnd = FileList.end() + ; it != itEnd + ; ++it + ) + { + if (pos >= clipper.DisplayStart + && pos < clipper.DisplayEnd) + { + PushID(pos); + + const bool isDir = -1 == it->Size; + bool isSelected = Pos == pos; + + bool clicked = Selectable(it->Name.CStr(), &isSelected); + SameLine(150); + if (isDir) + { + Text("%10s", ""); + } + else + { + Text("%10" PRId64, it->Size); + } + + if (clicked) + { + if (0 == strcmp(it->Name.CStr(), "..") ) + { + chdir = it->Name; + } + + Pos = pos; + + if (isDir) + { + chdir = it->Name; + } + } + + PopID(); + } + ++pos; + } + clipper.End(); + + ListBoxFooter(); + + if (!chdir.IsEmpty() ) + { + ChDir(chdir.CStr() ); + } + } + + PopFont(); + EndChild(); + } + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/memory_editor.h b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/memory_editor.h new file mode 100644 index 00000000000..61c7df261c5 --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/memory_editor.h @@ -0,0 +1,27 @@ +namespace ImGui +{ + struct MemoryEditor + { + bool AllowEdits; + bool HexII; + int Rows; + int DataEditingAddr; + bool DataEditingTakeFocus; + char DataInput[32]; + char AddrInput[32]; + + MemoryEditor() + { + AllowEdits = true; + HexII = true; + Rows = 16; + DataEditingAddr = -1; + DataEditingTakeFocus = false; + strcpy(DataInput, ""); + strcpy(AddrInput, ""); + } + + void Draw(void* mem_data, int mem_size, int base_display_addr = 0); + void Draw(const void* mem_data, int mem_size, int base_display_addr = 0); + }; +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/memory_editor.inl b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/memory_editor.inl new file mode 100644 index 00000000000..d8b1464c65d --- /dev/null +++ b/3rdparty/bgfx/3rdparty/ocornut-imgui/widgets/memory_editor.inl @@ -0,0 +1,249 @@ +#ifdef _MSC_VER +# define snprintf _snprintf +#endif + +namespace ImGui +{ +// const char* title; +// if (Begin(title, &Open)) +// { +// End(); +// } + + void MemoryEditor::Draw(void* mem_data_void, int mem_size, int base_display_addr) + { + PushFont(Font::Mono); + + unsigned char* mem_data = (unsigned char*)mem_data_void; + + BeginChild("##scrolling", ImVec2(0, -GetItemsLineHeightWithSpacing())); + + if (ImGui::BeginPopupContextWindow() ) + { + ImGui::Checkbox("HexII", &HexII); + ImGui::EndPopup(); + } + + PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f) ); + PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f) ); + + int addr_digits_count = 0; + for (int n = base_display_addr + mem_size - 1; n > 0; n >>= 4) + { + addr_digits_count++; + } + + float glyph_width = CalcTextSize("F").x; + float cell_width = glyph_width * 3; // "FF " we include trailing space in the width to easily catch clicks everywhere + + float line_height = GetTextLineHeight(); + int line_total_count = (int)((mem_size + Rows-1) / Rows); + ImGuiListClipper clipper(line_total_count, line_height); + int visible_start_addr = clipper.DisplayStart * Rows; + int visible_end_addr = clipper.DisplayEnd * Rows; + + bool data_next = false; + + if (!AllowEdits || DataEditingAddr >= mem_size) + { + DataEditingAddr = -1; + } + + int data_editing_addr_backup = DataEditingAddr; + if (DataEditingAddr != -1) + { + if (IsKeyPressed(GetKeyIndex(ImGuiKey_UpArrow)) && DataEditingAddr >= Rows) { DataEditingAddr -= Rows; DataEditingTakeFocus = true; } + else if (IsKeyPressed(GetKeyIndex(ImGuiKey_DownArrow)) && DataEditingAddr < mem_size - Rows) { DataEditingAddr += Rows; DataEditingTakeFocus = true; } + else if (IsKeyPressed(GetKeyIndex(ImGuiKey_LeftArrow)) && DataEditingAddr > 0) { DataEditingAddr -= 1; DataEditingTakeFocus = true; } + else if (IsKeyPressed(GetKeyIndex(ImGuiKey_RightArrow)) && DataEditingAddr < mem_size - 1) { DataEditingAddr += 1; DataEditingTakeFocus = true; } + } + + if ((DataEditingAddr / Rows) != (data_editing_addr_backup / Rows)) + { + // Track cursor movements + float scroll_offset = ((DataEditingAddr / Rows) - (data_editing_addr_backup / Rows)) * line_height; + bool scroll_desired = (scroll_offset < 0.0f && DataEditingAddr < visible_start_addr + Rows*2) || (scroll_offset > 0.0f && DataEditingAddr > visible_end_addr - Rows*2); + if (scroll_desired) + { + SetScrollY(GetScrollY() + scroll_offset); + } + } + + bool draw_separator = true; + for (int line_i = clipper.DisplayStart; line_i < clipper.DisplayEnd; line_i++) // display only visible items + { + int addr = line_i * Rows; + Text("%0*x: ", addr_digits_count, base_display_addr+addr); + SameLine(); + + // Draw Hexadecimal + float line_start_x = GetCursorPosX(); + for (int n = 0; n < Rows && addr < mem_size; n++, addr++) + { + SameLine(line_start_x + cell_width * n); + + if (DataEditingAddr == addr) + { + // Display text input on current byte + PushID(addr); + struct FuncHolder + { + // FIXME: We should have a way to retrieve the text edit cursor position more easily in the API, this is rather tedious. + static int Callback(ImGuiTextEditCallbackData* data) + { + int* p_cursor_pos = (int*)data->UserData; + if (!data->HasSelection()) + { + *p_cursor_pos = data->CursorPos; + } + return 0; + } + }; + int cursor_pos = -1; + bool data_write = false; + if (DataEditingTakeFocus) + { + SetKeyboardFocusHere(); + snprintf(AddrInput, sizeof(AddrInput), "%0*x", addr_digits_count, base_display_addr+addr); + snprintf(DataInput, sizeof(DataInput), "%02x", mem_data[addr]); + } + + PushItemWidth(CalcTextSize("FF").x); + ImGuiInputTextFlags flags = ImGuiInputTextFlags_CharsHexadecimal|ImGuiInputTextFlags_EnterReturnsTrue|ImGuiInputTextFlags_AutoSelectAll|ImGuiInputTextFlags_NoHorizontalScroll|ImGuiInputTextFlags_AlwaysInsertMode|ImGuiInputTextFlags_CallbackAlways; + if (InputText("##data", DataInput, 32, flags, FuncHolder::Callback, &cursor_pos)) + { + data_write = data_next = true; + } + else if (!DataEditingTakeFocus && !IsItemActive()) + { + DataEditingAddr = -1; + } + + DataEditingTakeFocus = false; + PopItemWidth(); + if (cursor_pos >= 2) + { + data_write = data_next = true; + } + + if (data_write) + { + int data; + if (sscanf(DataInput, "%X", &data) == 1) + { + mem_data[addr] = (unsigned char)data; + } + } + PopID(); + } + else + { + if (HexII) + { + unsigned char byte = mem_data[addr]; + if (isprint(byte) ) + { + Text(".%c ", byte); + } + else if (0x00 == byte) + { + Text(" "); + } + else if (0xff == byte) + { + Text("## "); + } + else + { + Text("%02x ", byte); + } + } + else + { + Text("%02x ", mem_data[addr]); + } + + if (AllowEdits && IsItemHovered() && IsMouseClicked(0)) + { + DataEditingTakeFocus = true; + DataEditingAddr = addr; + } + } + } + + SameLine(line_start_x + cell_width * Rows + glyph_width * 2); + + if (draw_separator) + { + ImVec2 screen_pos = GetCursorScreenPos(); + GetWindowDrawList()->AddLine(ImVec2(screen_pos.x - glyph_width, screen_pos.y - 9999), ImVec2(screen_pos.x - glyph_width, screen_pos.y + 9999), ImColor(GetStyle().Colors[ImGuiCol_Border])); + draw_separator = false; + } + + // Draw ASCII values + addr = line_i * Rows; + for (int n = 0; n < Rows && addr < mem_size; n++, addr++) + { + if (n > 0) { SameLine(); } + int c = mem_data[addr]; + Text("%c", (c >= 32 && c < 128) ? c : '.'); + } + } + clipper.End(); + PopStyleVar(2); + + EndChild(); + + if (data_next && DataEditingAddr < mem_size) + { + DataEditingAddr = DataEditingAddr + 1; + DataEditingTakeFocus = true; + } + + Separator(); + + AlignFirstTextHeightToWidgets(); + PushItemWidth(50); + PushAllowKeyboardFocus(false); + int rows_backup = Rows; + if (DragInt("##rows", &Rows, 0.2f, 4, 32, "%.0f rows")) + { + ImVec2 new_window_size = GetWindowSize(); + new_window_size.x += (Rows - rows_backup) * (cell_width + glyph_width); + SetWindowSize(new_window_size); + } + + PopAllowKeyboardFocus(); + PopItemWidth(); + SameLine(); + Text("Range %0*x..%0*x", addr_digits_count, (int)base_display_addr, addr_digits_count, (int)base_display_addr+mem_size-1); + SameLine(); + PushItemWidth(70); + if (InputText("##addr", AddrInput, 32, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_EnterReturnsTrue)) + { + int goto_addr; + if (sscanf(AddrInput, "%X", &goto_addr) == 1) + { + goto_addr -= base_display_addr; + if (goto_addr >= 0 && goto_addr < mem_size) + { + BeginChild("##scrolling"); + SetScrollFromPosY(GetCursorStartPos().y + (goto_addr / Rows) * GetTextLineHeight()); + EndChild(); + DataEditingAddr = goto_addr; + DataEditingTakeFocus = true; + } + } + } + + PopItemWidth(); + + PopFont(); + } + + void MemoryEditor::Draw(const void* mem_data, int mem_size, int base_display_addr) + { + Draw(const_cast(mem_data), mem_size, base_display_addr); + } + +} // namespace ImGui diff --git a/3rdparty/bgfx/3rdparty/stb/stb_image.c b/3rdparty/bgfx/3rdparty/stb/stb_image.c index ad26b74f55d..16e04103441 100644 --- a/3rdparty/bgfx/3rdparty/stb/stb_image.c +++ b/3rdparty/bgfx/3rdparty/stb/stb_image.c @@ -1375,18 +1375,18 @@ static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int r // convert source image with img_n components to one with req_comp components; // avoid switch per pixel, so use switch per scanline and massive macros switch (COMBO(img_n, req_comp)) { - CASE(1,2) dest[0]=src[0], dest[1]=255; break; - CASE(1,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(1,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=255; break; - CASE(2,1) dest[0]=src[0]; break; - CASE(2,3) dest[0]=dest[1]=dest[2]=src[0]; break; - CASE(2,4) dest[0]=dest[1]=dest[2]=src[0], dest[3]=src[1]; break; - CASE(3,4) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2],dest[3]=255; break; - CASE(3,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; - CASE(3,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = 255; break; - CASE(4,1) dest[0]=stbi__compute_y(src[0],src[1],src[2]); break; - CASE(4,2) dest[0]=stbi__compute_y(src[0],src[1],src[2]), dest[1] = src[3]; break; - CASE(4,3) dest[0]=src[0],dest[1]=src[1],dest[2]=src[2]; break; + CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; + CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; + CASE(2,1) { dest[0]=src[0]; } break; + CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; + CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; + CASE(3,4) { dest[0]=src[0]; dest[1]=src[1]; dest[2]=src[2]; dest[3]=255; } break; + CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; + CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; + CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; + CASE(4,3) { dest[0]=src[0]; dest[1]=src[1]; dest[2]=src[2]; } break; default: STBI_ASSERT(0); } #undef CASE @@ -4101,12 +4101,12 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r switch (filter) { // "none" filter turns into a memcpy here; make that explicit. case STBI__F_none: memcpy(cur, raw, nk); break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); break; - CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); break; + CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; + CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; + CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; + CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; + CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; } #undef CASE raw += nk; @@ -4117,13 +4117,13 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ for (k=0; k < filter_bytes; ++k) switch (filter) { - CASE(STBI__F_none) cur[k] = raw[k]; break; - CASE(STBI__F_sub) cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); break; - CASE(STBI__F_up) cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - CASE(STBI__F_avg) cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); break; - CASE(STBI__F_paeth) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); break; - CASE(STBI__F_avg_first) cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); break; - CASE(STBI__F_paeth_first) cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); break; + CASE(STBI__F_none) { cur[k] = raw[k]; } break; + CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; + CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; + CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; + CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; + CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; + CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; } #undef CASE diff --git a/3rdparty/bgfx/3rdparty/stb/stb_textedit.h b/3rdparty/bgfx/3rdparty/stb/stb_textedit.h index 29af484b1c6..23f0f24ee8f 100644 --- a/3rdparty/bgfx/3rdparty/stb/stb_textedit.h +++ b/3rdparty/bgfx/3rdparty/stb/stb_textedit.h @@ -1,3 +1,8 @@ +// [ImGui] this is a slightly modified version of stb_truetype.h 1.8 +// [ImGui] - fixed a crash bug in stb_textedit_discard_redo (#681) +// [ImGui] - fixed some minor warnings +// [ImGui] - added STB_TEXTEDIT_MOVEWORDLEFT/STB_TEXTEDIT_MOVEWORDRIGHT custom handler (#473) + // stb_textedit.h - v1.8 - public domain - Sean Barrett // Development of this library was sponsored by RAD Game Tools // @@ -148,15 +153,17 @@ // STB_TEXTEDIT_K_REDO keyboard input to perform redo // // Optional: -// STB_TEXTEDIT_K_INSERT keyboard input to toggle insert mode -// STB_TEXTEDIT_IS_SPACE(ch) true if character is whitespace (e.g. 'isspace'), -// required for WORDLEFT/WORDRIGHT -// STB_TEXTEDIT_K_WORDLEFT keyboard input to move cursor left one word // e.g. ctrl-LEFT -// STB_TEXTEDIT_K_WORDRIGHT keyboard input to move cursor right one word // e.g. ctrl-RIGHT -// STB_TEXTEDIT_K_LINESTART2 secondary keyboard input to move cursor to start of line -// STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line -// STB_TEXTEDIT_K_TEXTSTART2 secondary keyboard input to move cursor to start of text -// STB_TEXTEDIT_K_TEXTEND2 secondary keyboard input to move cursor to end of text +// STB_TEXTEDIT_K_INSERT keyboard input to toggle insert mode +// STB_TEXTEDIT_IS_SPACE(ch) true if character is whitespace (e.g. 'isspace'), +// required for default WORDLEFT/WORDRIGHT handlers +// STB_TEXTEDIT_MOVEWORDLEFT(obj,i) custom handler for WORDLEFT, returns index to move cursor to +// STB_TEXTEDIT_MOVEWORDRIGHT(obj,i) custom handler for WORDRIGHT, returns index to move cursor to +// STB_TEXTEDIT_K_WORDLEFT keyboard input to move cursor left one word // e.g. ctrl-LEFT +// STB_TEXTEDIT_K_WORDRIGHT keyboard input to move cursor right one word // e.g. ctrl-RIGHT +// STB_TEXTEDIT_K_LINESTART2 secondary keyboard input to move cursor to start of line +// STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line +// STB_TEXTEDIT_K_TEXTSTART2 secondary keyboard input to move cursor to start of text +// STB_TEXTEDIT_K_TEXTEND2 secondary keyboard input to move cursor to end of text // // Todo: // STB_TEXTEDIT_K_PGUP keyboard input to move cursor up a page @@ -615,9 +622,9 @@ static int is_word_boundary( STB_TEXTEDIT_STRING *_str, int _idx ) return _idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(_str,_idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(_str, _idx) ) ) : 1; } -static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *_str, STB_TexteditState *_state ) +#ifndef STB_TEXTEDIT_MOVEWORDLEFT +static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *_str, int c ) { - int c = _state->cursor - 1; while( c >= 0 && !is_word_boundary( _str, c ) ) --c; @@ -626,11 +633,13 @@ static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *_str, STB_Te return c; } +#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous +#endif -static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *_str, STB_TexteditState *_state ) +#ifndef STB_TEXTEDIT_MOVEWORDRIGHT +static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *_str, int c ) { const int len = STB_TEXTEDIT_STRINGLEN(_str); - int c = _state->cursor+1; while( c < len && !is_word_boundary( _str, c ) ) ++c; @@ -639,6 +648,9 @@ static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *_str, STB_Texted return c; } +#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next +#endif + #endif // update selection and cursor to match each other @@ -760,21 +772,12 @@ retry: state->has_preferred_x = 0; break; -#ifdef STB_TEXTEDIT_IS_SPACE +#ifdef STB_TEXTEDIT_MOVEWORDLEFT case STB_TEXTEDIT_K_WORDLEFT: if (STB_TEXT_HAS_SELECTION(state)) stb_textedit_move_to_first(state); else { - state->cursor = stb_textedit_move_to_word_previous(str, state); - stb_textedit_clamp( str, state ); - } - break; - - case STB_TEXTEDIT_K_WORDRIGHT: - if (STB_TEXT_HAS_SELECTION(state)) - stb_textedit_move_to_last(str, state); - else { - state->cursor = stb_textedit_move_to_word_next(str, state); + state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor-1); stb_textedit_clamp( str, state ); } break; @@ -783,17 +786,28 @@ retry: if( !STB_TEXT_HAS_SELECTION( state ) ) stb_textedit_prep_selection_at_cursor(state); - state->cursor = stb_textedit_move_to_word_previous(str, state); + state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor-1); state->select_end = state->cursor; stb_textedit_clamp( str, state ); break; +#endif + +#ifdef STB_TEXTEDIT_MOVEWORDRIGHT + case STB_TEXTEDIT_K_WORDRIGHT: + if (STB_TEXT_HAS_SELECTION(state)) + stb_textedit_move_to_last(str, state); + else { + state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor+1); + stb_textedit_clamp( str, state ); + } + break; case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT: if( !STB_TEXT_HAS_SELECTION( state ) ) stb_textedit_prep_selection_at_cursor(state); - state->cursor = stb_textedit_move_to_word_next(str, state); + state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor+1); state->select_end = state->cursor; stb_textedit_clamp( str, state ); @@ -1058,13 +1072,13 @@ static void stb_textedit_discard_undo(StbUndoState *state) int n = state->undo_rec[0].insert_length, i; // delete n characters from all other records state->undo_char_point = state->undo_char_point - (short) n; // vsnet05 - STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE))); + STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) ((size_t)state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE))); for (i=0; i < state->undo_point; ++i) if (state->undo_rec[i].char_storage >= 0) state->undo_rec[i].char_storage = state->undo_rec[i].char_storage - (short) n; // vsnet05 // @OPTIMIZE: get rid of char_storage and infer it } --state->undo_point; - STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0]))); + STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) ((size_t)state->undo_point*sizeof(state->undo_rec[0]))); } } @@ -1082,13 +1096,13 @@ static void stb_textedit_discard_redo(StbUndoState *state) int n = state->undo_rec[k].insert_length, i; // delete n characters from all other records state->redo_char_point = state->redo_char_point + (short) n; // vsnet05 - STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE))); + STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((size_t)(STB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE))); for (i=state->redo_point; i < k; ++i) if (state->undo_rec[i].char_storage >= 0) state->undo_rec[i].char_storage = state->undo_rec[i].char_storage + (short) n; // vsnet05 } ++state->redo_point; - STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point-1, state->undo_rec + state->redo_point, (size_t) ((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0]))); + STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point-1, state->undo_rec + state->redo_point, (size_t) ((size_t)(STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point)*sizeof(state->undo_rec[0]))); } } diff --git a/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h b/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h index 90cd29584cc..a30accada36 100644 --- a/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h +++ b/3rdparty/bgfx/3rdparty/tinyexr/tinyexr.h @@ -8031,7 +8031,7 @@ bool hufBuildDecTable(const long long *hcode, // i : encoding table HufDec *pl = hdecod + (c << (HUF_DECBITS - l)); - for (long long i = 1 << (HUF_DECBITS - l); i > 0; i--, pl++) { + for (long long i = (long long)1 << (HUF_DECBITS - l); i > 0; i--, pl++) { if (pl->len || pl->p) { // // Error: a short code or a long code has diff --git a/3rdparty/bgfx/examples/25-c99/helloworld.c b/3rdparty/bgfx/examples/25-c99/helloworld.c index 3dd01e8c633..6b0a029fe61 100644 --- a/3rdparty/bgfx/examples/25-c99/helloworld.c +++ b/3rdparty/bgfx/examples/25-c99/helloworld.c @@ -63,7 +63,7 @@ int _main_(int _argc, char** _argv) // Advance to next frame. Rendering thread will be kicked to // process submitted rendering primitives. - bgfx_frame(); + bgfx_frame(false); } // Shutdown bgfx. diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.cpp b/3rdparty/bgfx/examples/common/bgfx_utils.cpp index 44d27300649..18db066f468 100644 --- a/3rdparty/bgfx/examples/common/bgfx_utils.cpp +++ b/3rdparty/bgfx/examples/common/bgfx_utils.cpp @@ -14,12 +14,21 @@ namespace stl = tinystl; #include #include +#include #include #include #include #include "entry/entry.h" #include +#define LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_NO_COMPILE_DISK +#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_NO_COMPILE_CPP +#include + #include "bgfx_utils.h" void* load(bx::FileReaderI* _reader, bx::AllocatorI* _allocator, const char* _filePath, uint32_t* _size) @@ -154,7 +163,9 @@ bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName) } typedef unsigned char stbi_uc; -extern "C" stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp); +extern "C" stbi_uc* stbi_load_from_memory(stbi_uc const* _buffer, int _len, int* _x, int* _y, int* _comp, int _req_comp); +extern "C" void stbi_image_free(void* _ptr); +extern void lodepng_free(void* _ptr); bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath, uint32_t _flags, uint8_t _skip, bgfx::TextureInfo* _info) { @@ -180,24 +191,125 @@ bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath, void* data = loadMem(_reader, allocator, _filePath, &size); if (NULL != data) { - int width = 0; - int height = 0; - int comp = 0; + bgfx::TextureFormat::Enum format = bgfx::TextureFormat::RGBA8; + uint32_t bpp = 32; - uint8_t* img = NULL; - img = stbi_load_from_memory( (uint8_t*)data, size, &width, &height, &comp, 4); + uint32_t width = 0; + uint32_t height = 0; + + typedef void (*ReleaseFn)(void* _ptr); + ReleaseFn release = stbi_image_free; + + uint8_t* out = NULL; + static uint8_t pngMagic[] = { 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0a }; + if (0 == memcmp(data, pngMagic, sizeof(pngMagic) ) ) + { + release = lodepng_free; + + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.decoder.color_convert = 0; + error = lodepng_decode(&out, &width, &height, &state, (uint8_t*)data, size); + + if (0 == error) + { + switch (state.info_raw.bitdepth) + { + case 8: + switch (state.info_raw.colortype) + { + case LCT_GREY: + format = bgfx::TextureFormat::R8; + bpp = 8; + break; + + case LCT_GREY_ALPHA: + format = bgfx::TextureFormat::RG8; + bpp = 16; + break; + + case LCT_RGB: + format = bgfx::TextureFormat::RGB8; + bpp = 24; + break; + + case LCT_RGBA: + format = bgfx::TextureFormat::RGBA8; + bpp = 32; + break; + + case LCT_PALETTE: + break; + } + break; + + case 16: + switch (state.info_raw.colortype) + { + case LCT_GREY: + for (uint32_t ii = 0, num = width*height; ii < num; ++ii) + { + uint16_t* rgba = (uint16_t*)out + ii*4; + rgba[0] = bx::toHostEndian(rgba[0], false); + } + format = bgfx::TextureFormat::R16; + bpp = 16; + break; + + case LCT_GREY_ALPHA: + for (uint32_t ii = 0, num = width*height; ii < num; ++ii) + { + uint16_t* rgba = (uint16_t*)out + ii*4; + rgba[0] = bx::toHostEndian(rgba[0], false); + rgba[1] = bx::toHostEndian(rgba[1], false); + } + format = bgfx::TextureFormat::R16; + bpp = 16; + break; + + case LCT_RGBA: + for (uint32_t ii = 0, num = width*height; ii < num; ++ii) + { + uint16_t* rgba = (uint16_t*)out + ii*4; + rgba[0] = bx::toHostEndian(rgba[0], false); + rgba[1] = bx::toHostEndian(rgba[1], false); + rgba[2] = bx::toHostEndian(rgba[2], false); + rgba[3] = bx::toHostEndian(rgba[3], false); + } + format = bgfx::TextureFormat::RGBA16; + bpp = 64; + break; + + case LCT_RGB: + case LCT_PALETTE: + break; + } + break; + + default: + break; + } + } + + lodepng_state_cleanup(&state); + } + else + { + int comp = 0; + out = stbi_load_from_memory( (uint8_t*)data, size, (int*)&width, (int*)&height, &comp, 4); + } BX_FREE(allocator, data); - if (NULL != img) + if (NULL != out) { handle = bgfx::createTexture2D(uint16_t(width), uint16_t(height), 1 - , bgfx::TextureFormat::RGBA8 + , format , _flags - , bgfx::copy(img, width*height*4) + , bgfx::copy(out, width*height*bpp/8) ); - - free(img); + release(out); if (NULL != _info) { @@ -207,7 +319,7 @@ bgfx::TextureHandle loadTexture(bx::FileReaderI* _reader, const char* _filePath, , 0 , false , 1 - , bgfx::TextureFormat::RGBA8 + , format ); } } diff --git a/3rdparty/bgfx/examples/common/bounds.cpp b/3rdparty/bgfx/examples/common/bounds.cpp index f8f7113e08b..ff34238c3f3 100644 --- a/3rdparty/bgfx/examples/common/bounds.cpp +++ b/3rdparty/bgfx/examples/common/bounds.cpp @@ -279,26 +279,7 @@ void calcMinBoundingSphere(Sphere& _sphere, const void* _vertices, uint32_t _num void calcPlaneUv(const Plane& _plane, float* _udir, float* _vdir) { - const float nx = _plane.m_normal[0]; - const float ny = _plane.m_normal[1]; - const float nz = _plane.m_normal[2]; - - if (bx::fabsolute(nx) > bx::fabsolute(nz) ) - { - float invLen = 1.0f / bx::fsqrt(nx*nx + nz*nz); - _udir[0] = -nz * invLen; - _udir[1] = 0.0f; - _udir[2] = nx * invLen; - } - else - { - float invLen = 1.0f / bx::fsqrt(ny*ny + nz*nz); - _udir[0] = 0.0f; - _udir[1] = nz * invLen; - _udir[2] = -ny * invLen; - } - - bx::vec3Cross(_vdir, _plane.m_normal, _udir); + bx::vec3TangentFrame(_plane.m_normal, _udir, _vdir); } void buildFrustumPlanes(Plane* _result, const float* _viewProj) diff --git a/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h b/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h new file mode 100644 index 00000000000..4312c9b0bd6 --- /dev/null +++ b/3rdparty/bgfx/examples/common/imgui/icons_font_awesome.ttf.h @@ -0,0 +1,5052 @@ +static const uint8_t s_iconsFontAwesomeTtf[80776] = +{ + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x60, 0x46, 0x46, 0x54, 0x4d, // ...........`FFTM + 0x66, 0x1f, 0x16, 0xdb, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x1c, 0x47, 0x44, 0x45, 0x46, // f...........GDEF + 0x01, 0xc3, 0x00, 0x04, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x20, 0x4f, 0x53, 0x2f, 0x32, // ........... OS/2 + 0x8b, 0x02, 0x7a, 0x13, 0x00, 0x00, 0x01, 0x28, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, // ..z....(...`cmap + 0xd1, 0x6b, 0xbc, 0x03, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x72, 0x67, 0x61, 0x73, 0x70, // .k.........rgasp + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x03, 0xfc, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, // ............glyf + 0x73, 0x8e, 0xb5, 0x09, 0x00, 0x00, 0x04, 0x04, 0x00, 0x01, 0x19, 0x7c, 0x68, 0x65, 0x61, 0x64, // s..........|head + 0x03, 0xba, 0x2d, 0x36, 0x00, 0x01, 0x1d, 0x80, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61, // ..-6.......6hhea + 0x0d, 0x82, 0x07, 0xea, 0x00, 0x01, 0x1d, 0xb8, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, // ...........$hmtx + 0x0a, 0x6c, 0x0e, 0x07, 0x00, 0x01, 0x1d, 0xdc, 0x00, 0x00, 0x06, 0x46, 0x6c, 0x6f, 0x63, 0x61, // .l.........Floca + 0xd1, 0x74, 0x8a, 0x74, 0x00, 0x01, 0x24, 0x24, 0x00, 0x00, 0x03, 0x2e, 0x6d, 0x61, 0x78, 0x70, // .t.t..$$....maxp + 0x01, 0xec, 0x02, 0x1c, 0x00, 0x01, 0x27, 0x54, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ......'T... name + 0x3c, 0x0c, 0x65, 0x95, 0x00, 0x01, 0x27, 0x74, 0x00, 0x00, 0x02, 0xb8, 0x70, 0x6f, 0x73, 0x74, // <.e...'t....post + 0x09, 0x72, 0x9d, 0xdd, 0x00, 0x01, 0x2a, 0x2c, 0x00, 0x00, 0x11, 0x54, 0x77, 0x65, 0x62, 0x66, // .r....*,...Twebf + 0x41, 0x5c, 0x52, 0x67, 0x00, 0x01, 0x3b, 0x80, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, // A.Rg..;......... + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x3d, 0xa2, 0xcf, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x54, 0x82, 0x30, // .....=.......T.0 + 0x00, 0x00, 0x00, 0x00, 0xce, 0x8c, 0xf1, 0xdb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, // ................ + 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x01, 0x95, 0x00, 0x01, // ................ + 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x05, 0xe2, 0x01, 0x90, 0x00, 0x05, // ................ + 0x00, 0x04, 0x04, 0x8c, 0x04, 0x33, 0x00, 0x00, 0x00, 0x86, 0x04, 0x8c, 0x04, 0x33, 0x00, 0x00, // .....3.......3.. + 0x02, 0x73, 0x00, 0x5a, 0x04, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .s.Z.3.......... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x70, 0x79, 0x72, 0x73, 0x00, 0x40, 0x00, 0x20, 0xf5, 0x00, 0x06, 0x00, 0xff, 0x00, // ..pyrs.@. ...... + 0x00, 0x00, 0x06, 0x00, 0x01, 0x23, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....#.......... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, // ..... .......... + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x00, 0x03, 0x00, 0x01, // ...........l.... + 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x01, 0x50, 0x00, 0x00, 0x00, 0x50, 0x00, 0x40, 0x00, 0x05, // .......P...P.@.. + 0x00, 0x10, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xa9, 0x00, 0xae, 0x00, 0xb4, 0x00, 0xc6, 0x20, 0x0a, // ... .......... . + 0x20, 0x2f, 0x20, 0x5f, 0x21, 0x22, 0x22, 0x1e, 0x22, 0x60, 0xe0, 0x00, 0xf0, 0x0e, 0xf0, 0x1e, // / _!""."`...... + 0xf0, 0x3e, 0xf0, 0x4e, 0xf0, 0x5e, 0xf0, 0x6e, 0xf0, 0x7e, 0xf0, 0x8e, 0xf0, 0x9e, 0xf0, 0xae, // .>.N.^.n.~...... + 0xf0, 0xb2, 0xf0, 0xce, 0xf0, 0xde, 0xf0, 0xee, 0xf0, 0xfe, 0xf1, 0x0e, 0xf1, 0x1e, 0xf1, 0x2e, // ................ + 0xf1, 0x3e, 0xf1, 0x4e, 0xf1, 0x5e, 0xf1, 0x6e, 0xf1, 0x7e, 0xf1, 0x8e, 0xf1, 0x9e, 0xf5, 0x00, // .>.N.^.n.~...... + 0xff, 0xff, 0x00, 0x00, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xa8, 0x00, 0xae, 0x00, 0xb4, 0x00, 0xc6, // ..... .......... + 0x20, 0x00, 0x20, 0x2f, 0x20, 0x5f, 0x21, 0x22, 0x22, 0x1e, 0x22, 0x60, 0xe0, 0x00, 0xf0, 0x00, // . / _!""."`.... + 0xf0, 0x10, 0xf0, 0x21, 0xf0, 0x40, 0xf0, 0x50, 0xf0, 0x60, 0xf0, 0x70, 0xf0, 0x80, 0xf0, 0x90, // ...!.@.P.`.p.... + 0xf0, 0xa0, 0xf0, 0xb0, 0xf0, 0xc0, 0xf0, 0xd0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf1, 0x00, 0xf1, 0x10, // ................ + 0xf1, 0x20, 0xf1, 0x30, 0xf1, 0x40, 0xf1, 0x50, 0xf1, 0x60, 0xf1, 0x70, 0xf1, 0x80, 0xf1, 0x90, // . .0.@.P.`.p.... + 0xf5, 0x00, 0xff, 0xff, 0xff, 0xe3, 0xff, 0x64, 0xff, 0x5d, 0xff, 0x59, 0xff, 0x54, 0xff, 0x43, // .......d.].Y.T.C + 0xe0, 0x0a, 0xdf, 0xe6, 0xdf, 0xb7, 0xde, 0xf5, 0xdd, 0xfa, 0xdd, 0xb9, 0x20, 0x1a, 0x10, 0x1b, // ............ ... + 0x10, 0x1a, 0x10, 0x18, 0x10, 0x17, 0x10, 0x16, 0x10, 0x15, 0x10, 0x14, 0x10, 0x13, 0x10, 0x12, // ................ + 0x10, 0x11, 0x10, 0x10, 0x10, 0x03, 0x10, 0x02, 0x10, 0x01, 0x10, 0x00, 0x0f, 0xff, 0x0f, 0xfe, // ................ + 0x0f, 0xfd, 0x0f, 0xfc, 0x0f, 0xfb, 0x0f, 0xfa, 0x0f, 0xf9, 0x0f, 0xf8, 0x0f, 0xf7, 0x0f, 0xf6, // ................ + 0x0c, 0x95, 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, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 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, 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, 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, 0x07, 0x06, 0x17, 0x08, 0x05, 0x19, 0x09, 0x00, 0x18, 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, 0x04, 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, 0x01, 0x00, 0x01, // ................ + 0xff, 0xff, 0x00, 0x0f, 0x00, 0x02, 0x00, 0x70, 0x00, 0x00, 0x03, 0x10, 0x06, 0x00, 0x00, 0x03, // .......p........ + 0x00, 0x07, 0x00, 0x00, 0x37, 0x21, 0x11, 0x21, 0x03, 0x11, 0x21, 0x11, 0xe0, 0x01, 0xc0, 0xfe, // ....7!.!..!..... + 0x40, 0x70, 0x02, 0xa0, 0x70, 0x05, 0x20, 0xfa, 0x70, 0x06, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, // @p..p. .p....... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, // ..............1. + 0x00, 0x01, 0x00, 0x5d, 0xff, 0x00, 0x06, 0xa3, 0x05, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x14, // ...]............ + 0x07, 0x01, 0x11, 0x21, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, // ...!2...#!"&463! + 0x11, 0x01, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x1e, 0x01, 0x06, 0xa3, 0x2b, 0xfd, // ..&54>.3!2....+. + 0x88, 0x01, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0xfc, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x40, 0xfd, // ..@.&&....&&..@. + 0x88, 0x2b, 0x24, 0x28, 0x17, 0x05, 0x80, 0x17, 0x28, 0x24, 0x05, 0x46, 0x23, 0x2b, 0xfd, 0x88, // .+$(....($.F#+.. + 0xfd, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, 0x00, 0x02, 0x78, 0x2b, 0x23, 0x17, 0x1b, // ..&4&&4&...x+#.. + 0x08, 0x08, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2b, // ...............+ + 0x00, 0x00, 0x01, 0x11, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, // ......."..4>.32. + 0x11, 0x05, 0x11, 0x14, 0x0e, 0x02, 0x22, 0x2e, 0x02, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, 0x11, // ......"..4>.32.. + 0x34, 0x36, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x06, 0x00, 0x44, 0x68, 0x67, 0x5a, 0x67, 0x68, // 467.632...DhgZgh + 0x44, 0x44, 0x68, 0x67, 0x2d, 0x69, 0x57, 0xfd, 0x00, 0x44, 0x68, 0x67, 0x5a, 0x67, 0x68, 0x44, // DDhg-iW..DhgZghD + 0x44, 0x68, 0x67, 0x2d, 0x69, 0x57, 0x26, 0x1e, 0x03, 0x40, 0x0c, 0x10, 0x28, 0x38, 0x05, 0x20, // Dhg-iW&..@..(8. + 0xfb, 0xa0, 0x32, 0x4e, 0x2b, 0x15, 0x15, 0x2b, 0x4e, 0x64, 0x4e, 0x2b, 0x15, 0x27, 0x02, 0x19, // ..2N+..+NdN+.'.. + 0xed, 0xfd, 0x3b, 0x32, 0x4e, 0x2b, 0x15, 0x15, 0x2b, 0x4e, 0x64, 0x4e, 0x2b, 0x15, 0x27, 0x03, // ..;2N+..+NdN+.'. + 0xc7, 0x1f, 0x33, 0x0a, 0x01, 0x00, 0x04, 0x38, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, // ..3....8........ + 0x05, 0x80, 0x00, 0x07, 0x00, 0x21, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, // .....!..... ... + 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, // ...#"'..#"$&...6 + 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, 0x01, 0x16, 0x04, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, // $ .............. + 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4c, 0x34, 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, // .....r..L46$.... + 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, // ....oo........o| + 0x01, 0x57, 0x25, 0x02, 0x07, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, // .W%...r......... + 0x80, 0x34, 0x4c, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, // .4L&.V|o........ + 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x25, 0x00, 0x00, 0x03, 0x00, 0x00, // oo........%..... + 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x1a, 0x00, 0x3d, 0x00, 0x4d, 0x00, 0x00, 0x25, 0x11, // .........=.M..%. + 0x06, 0x07, 0x04, 0x07, 0x0e, 0x02, 0x2b, 0x02, 0x22, 0x2e, 0x01, 0x27, 0x26, 0x25, 0x26, 0x27, // ......+."..'&%&' + 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x11, 0x3c, 0x02, 0x2e, 0x03, 0x23, 0x21, 0x22, 0x06, // ...3!26.<...#!". + 0x15, 0x14, 0x17, 0x16, 0x17, 0x1e, 0x04, 0x3b, 0x02, 0x32, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x3e, // .......;.2>.767> + 0x01, 0x37, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // .7...#!"&5.463!2 + 0x16, 0x06, 0x80, 0x20, 0x25, 0xfe, 0xf4, 0x9e, 0x33, 0x40, 0x6d, 0x30, 0x01, 0x01, 0x30, 0x6d, // ... %...3@m0..0m + 0x40, 0x33, 0x9e, 0xfe, 0xf4, 0x25, 0x20, 0x13, 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x01, 0x05, 0x06, // @3...% ......... + 0x0c, 0x08, 0xfa, 0x40, 0x0d, 0x13, 0x93, 0xc1, 0xd0, 0x06, 0x3a, 0x22, 0x37, 0x2e, 0x14, 0x01, // ...@......:"7... + 0x01, 0x14, 0x2e, 0x37, 0x22, 0x3a, 0x06, 0xd0, 0xc1, 0x36, 0x5d, 0x80, 0x5e, 0x42, 0xfa, 0x40, // ...7":...6].^B.@ + 0x42, 0x5e, 0x5e, 0x42, 0x05, 0xc0, 0x42, 0x5e, 0x20, 0x03, 0x00, 0x24, 0x1e, 0xce, 0x84, 0x2b, // B^^B..B^ ..$...+ + 0x30, 0x31, 0x31, 0x30, 0x2b, 0x84, 0xce, 0x1e, 0x24, 0xfd, 0x00, 0x0d, 0x13, 0x13, 0x04, 0x28, // 0110+...$......( + 0x02, 0x12, 0x09, 0x11, 0x08, 0x0a, 0x05, 0x13, 0x0d, 0xa8, 0x74, 0x98, 0xa5, 0x05, 0x31, 0x1a, // ..........t...1. + 0x25, 0x12, 0x12, 0x25, 0x1a, 0x31, 0x05, 0xa5, 0x98, 0x2b, 0x91, 0x60, 0xfb, 0xc0, 0x42, 0x5e, // %..%.1...+.`..B^ + 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ^B.@B^^......... + 0x05, 0x80, 0x00, 0x1c, 0x00, 0x00, 0x04, 0x22, 0x27, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, // ......."'...5463 + 0x32, 0x1e, 0x02, 0x17, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x01, 0x03, 0x9a, 0x34, // 2...>.32.......4 + 0x12, 0xfd, 0x90, 0x0a, 0x23, 0x4c, 0x3c, 0x2f, 0xfe, 0xe0, 0x3e, 0x81, 0x6f, 0x50, 0x24, 0x24, // ....#L.oP$$ + 0x50, 0x6f, 0x81, 0x3e, 0xe0, 0xfe, 0xe5, 0xfd, 0x91, 0x80, 0x12, 0x02, 0x5a, 0x08, 0x24, 0x5f, // Po.>........Z.$_ + 0x64, 0x8e, 0x43, 0xdc, 0xf8, 0x2b, 0x49, 0x40, 0x24, 0x24, 0x40, 0x49, 0x2b, 0xf8, 0xdc, 0xdd, // d.C..+I@$$@I+... + 0xe5, 0xfd, 0xa8, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xad, 0x06, 0x80, 0x05, 0xe0, 0x00, 0x22, // ..............." + 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x13, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x25, 0x05, // ...........#"'%. + 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, // .#"&547..&547%.6 + 0x32, 0x17, 0x13, 0x05, 0x16, 0x06, 0x80, 0x1a, 0xfe, 0x95, 0x56, 0x01, 0x15, 0x14, 0x13, 0x15, // 2.........V..... + 0xfe, 0x3f, 0xfe, 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, // .?.?.....V...8.. + 0xe1, 0x13, 0x3c, 0x13, 0xe1, 0x01, 0xf6, 0x38, 0x03, 0x79, 0x16, 0x1a, 0xfe, 0x9e, 0xfe, 0x0c, // ..<....8.y...... + 0x07, 0x0d, 0x15, 0x1d, 0x0c, 0xec, 0xec, 0x0c, 0x1d, 0x15, 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, // ...............b + 0x1b, 0x15, 0x25, 0x09, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, 0x39, 0x49, 0x09, 0x00, 0x00, 0x00, // ..%.I..)).9I.... + 0x00, 0x02, 0x00, 0x00, 0xff, 0xad, 0x06, 0x80, 0x05, 0xe0, 0x00, 0x09, 0x00, 0x2b, 0x00, 0x00, // .............+.. + 0x09, 0x01, 0x25, 0x0b, 0x01, 0x05, 0x01, 0x03, 0x25, 0x05, 0x01, 0x14, 0x07, 0x01, 0x13, 0x16, // ..%.....%....... + 0x15, 0x14, 0x23, 0x22, 0x27, 0x25, 0x05, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, // ..#"'%..#"&547.. + 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, 0x32, 0x17, 0x13, 0x05, 0x16, 0x04, 0x71, 0x01, 0x32, // &547%.62.....q.2 + 0xfe, 0x5a, 0xbd, 0xbd, 0xfe, 0x5a, 0x01, 0x32, 0x49, 0x01, 0x7a, 0x01, 0x79, 0x01, 0xc7, 0x1a, // .Z...Z.2I.z.y... + 0xfe, 0x95, 0x56, 0x01, 0x29, 0x13, 0x15, 0xfe, 0x3f, 0xfe, 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, // ..V.)...?.?..... + 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, 0xe1, 0x13, 0x3c, 0x13, 0xe1, 0x01, 0xf6, 0x38, 0x02, // V...8....<....8. + 0x14, 0x01, 0x29, 0x3e, 0x01, 0x7e, 0xfe, 0x82, 0x3e, 0xfe, 0xd7, 0xfe, 0x5b, 0xc7, 0xc7, 0x03, // ..)>.~..>...[... + 0x0a, 0x16, 0x1a, 0xfe, 0x9e, 0xfe, 0x0c, 0x07, 0x0d, 0x32, 0x0c, 0xec, 0xec, 0x0c, 0x1d, 0x15, // .........2...... + 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, 0x1b, 0x15, 0x25, 0x09, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, // .....b..%.I..)). + 0x39, 0x49, 0x09, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x1f, // 9I.............. + 0x00, 0x27, 0x00, 0x00, 0x25, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, // .'..%..#!"&54>.3 + 0x32, 0x1e, 0x02, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x05, 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, // 2..2>.32..... &. + 0x36, 0x20, 0x05, 0x80, 0x92, 0x79, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, // 6 ...y..y... 6Fe + 0x3d, 0x09, 0x42, 0x53, 0x85, 0x86, 0x85, 0x53, 0x42, 0x09, 0x3d, 0x65, 0x46, 0x36, 0x20, 0x15, // =.BS...SB.=eF6 . + 0x07, 0xfe, 0xc0, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x83, 0x78, 0x8b, 0x8b, 0x78, 0x35, // .........>.x..x5 + 0x65, 0x75, 0x64, 0x5f, 0x43, 0x28, 0x2b, 0x35, 0x2b, 0x2b, 0x35, 0x2b, 0x28, 0x43, 0x5f, 0x64, // eud_C(+5++5+(C_d + 0x75, 0x65, 0x03, 0xe7, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x00, 0x00, 0x0b, 0x00, 0x00, // ue.......>...... + 0xff, 0x00, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, 0x00, 0x00, 0x05, 0x35, // ._.o...........5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x11, // 4&+.".....;.26.. + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, // 4&#!".....3!26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x35, // 4&+.".....;.26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x11, // 4&+.".....;.26.. + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x35, // 4&#!".....3!26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x11, 0x35, // 4&+.".....;.26.5 + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x37, 0x11, // 4&+.".....;.267. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, // ..#!"&5.463!2... + 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // &...&&...&&...&& + 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x00, // ...&&...&&...&.. + 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0xfc, 0x00, 0x26, 0x1a, // &....&&....&..&. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ..&&...&..&...&& + 0x1a, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, // ...&..&....&&... + 0x1a, 0x26, 0x01, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .&..&...&&...&&. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // ..&&...&&...&&.. + 0x1a, 0x26, 0x80, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x40, // .&.^B..B^^B.@B^@ + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ..&&...&&....&&. + 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0xfd, // ..&&....&&...&&. + 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x04, 0x9a, 0x80, 0x1a, // ....&&....&&.... + 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0xfb, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, // &&...&&....&&... + 0x26, 0x26, 0x03, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0xfe, // &&.....&&....&&. + 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, // ...&&...&&....&& + 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x9a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ...&&....&&...&& + 0xba, 0xfa, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x05, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x04, 0x00, 0x00, // ...B^^B.@B^^.... + 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, // .........../.?.. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x03, 0x00, 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x4c, 0x34, // ..L4..4LL4..4LL4 + 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x03, 0x80, 0x4c, 0x34, 0xfe, 0x00, // ..4LL4..4L..L4.. + 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0x00, 0x34, 0x4c, 0x4c, 0x34, // 4LL4..4LL4..4LL4 + 0x02, 0x00, 0x34, 0x4c, 0x02, 0x00, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, // ..4L....4LL4..4L + 0x4c, 0x02, 0xcc, 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0xfc, 0xcc, // L....4LL4..4LL.. + 0xfe, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x02, 0xcc, 0xfe, 0x80, 0x34, // ..4LL4..4LL....4 + 0x4c, 0x4c, 0x34, 0x01, 0x80, 0x34, 0x4c, 0x4c, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // LL4..4LL........ + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // ..........#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // 463!2...8(..(88( + 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, // .@(88(..(88(.@(8 + 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0xfd, 0x80, // ..8(..(88(.@(8.. + 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, // 8(..(88(.@(8..8( + 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, // ..(88(.@(8..8(.. + 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0xfd, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // (88(.@(8..8(..(8 + 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x02, 0x80, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // 8(.@(8..8(..(88( + 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, // .@(88(..(88(.@(8 + 0x01, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, // . .(88(.(88...(8 + 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, // 8(.(88...(88(.(8 + 0x38, 0x03, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, // 8...(88(.(88...( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, // 88(.(88...(88(.( + 0x38, 0x38, 0x03, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, // 88...(88(.(88... + 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // (88(.(88...(88(. + 0x28, 0x38, 0x38, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // (88............. + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, // .../.?.O._...... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0x38, 0x28, // #!"&=.463!2...8( + 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // ..(88(.@(88(..(8 + 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x05, 0x00, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, // 8(.@(8..8(.@(88( + 0x03, 0xc0, 0x28, 0x38, 0xfb, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, // ..(8..8(..(88(.@ + 0x28, 0x38, 0x05, 0x00, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x03, 0xc0, 0x28, 0x38, // (8..8(.@(88(..(8 + 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x03, 0xc0, 0x28, 0x38, 0x01, 0x20, 0xc0, 0x28, // 8(.@(88(..(8. .( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, // 88(.(88...(88(.( + 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x03, 0xd8, 0xc0, // 88...(88(.(88... + 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0xfd, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // (88(.(88...(88(. + 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x00, 0x00, // (88...(88(.(88.. + 0x00, 0x01, 0x00, 0x79, 0x00, 0x0e, 0x06, 0x87, 0x04, 0xb2, 0x00, 0x16, 0x00, 0x00, 0x00, 0x14, // ...y............ + 0x07, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, // ...."/..&4?.62.. + 0x01, 0x36, 0x32, 0x1f, 0x01, 0x06, 0x87, 0x1c, 0xfd, 0x2c, 0x88, 0x1c, 0x50, 0x1c, 0x88, 0xfe, // .62......,..P... + 0x96, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x02, 0x90, 0x1c, 0x50, 0x1c, 0x88, 0x03, // .....P..&...P... + 0xf2, 0x50, 0x1c, 0xfd, 0x2c, 0x88, 0x1c, 0x1c, 0x88, 0x01, 0x6a, 0x1c, 0x50, 0x1c, 0x88, 0x1c, // .P..,.....j.P... + 0x1c, 0xfe, 0xd9, 0x02, 0x91, 0x1c, 0x1c, 0x88, 0x00, 0x01, 0x00, 0x6e, 0xff, 0xee, 0x05, 0x12, // ...........n.... + 0x04, 0x92, 0x00, 0x23, 0x00, 0x00, 0x24, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x09, 0x01, 0x06, // ...#..$...."'... + 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, // "/.&47..&4?.62.. + 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x05, 0x12, 0x1c, 0x88, 0x1c, 0x50, // .62............P + 0x1c, 0xfe, 0xda, 0xfe, 0xda, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0x01, 0x26, 0xfe, 0xda, 0x1c, // ......P.....&... + 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x01, 0x26, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0xfe, // ...P..&.&.P..... + 0xda, 0x01, 0x26, 0xfe, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0x01, 0x26, 0xfe, 0xda, 0x1c, 0x1c, 0x88, // ..&.P.....&..... + 0x1c, 0x50, 0x1c, 0x01, 0x26, 0x01, 0x26, 0x1c, 0x50, 0x1c, 0x88, 0x1c, 0x1c, 0xfe, 0xda, 0x01, // .P..&.&.P....... + 0x26, 0x1c, 0x1c, 0x88, 0x1c, 0x50, 0x1c, 0xfe, 0xda, 0xfe, 0xda, 0x00, 0x00, 0x03, 0x00, 0x00, // &....P.......... + 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x44, 0x00, 0x00, 0x01, 0x15, // .......#.+.D.... + 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, // ..+....+."&=.#"& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, // =.46;.546;.2...3 + 0x32, 0x1e, 0x01, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, 0x06, 0x23, 0x22, 0x27, // 2.... ... ...#"' + 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, // ..#"$&...6$ .... + 0x14, 0x07, 0x01, 0x04, 0x00, 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, // ..........@..... + 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, // .....@.......... + 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4b, 0x35, 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, // .....r..K56$.... + 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, // ....oo........o| + 0x01, 0x57, 0x02, 0xe0, 0x40, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0xe0, 0x13, 0x0d, 0x40, // .W..@..........@ + 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0xe0, 0x13, 0xe6, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, // ...........r.... + 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0xb5, 0x6a, 0x4b, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, // ......jK&.V|o... + 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x00, // .....oo......... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x30, // ...............0 + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ......#!"&=.463! + 0x32, 0x1e, 0x01, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x14, 0x06, 0x23, 0x22, 0x27, // 2.... ... ...#"' + 0x01, 0x06, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, 0x15, // ..#"$&...6$ .... + 0x14, 0x07, 0x01, 0x04, 0x00, 0x13, 0x0d, 0xfd, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x02, 0x40, 0x0d, // ..............@. + 0x13, 0x80, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x01, 0x07, 0x01, 0x72, 0x03, 0x07, 0x4b, 0x35, // ...........r..K5 + 0x36, 0x24, 0xfe, 0xa9, 0xb3, 0xdc, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x6f, 0xbd, 0x01, 0x05, 0x01, // 6$........oo.... + 0x1e, 0x01, 0x05, 0xbd, 0x6f, 0x7c, 0x01, 0x57, 0x02, 0xe0, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // ....o|.W..@....@ + 0x0d, 0x13, 0x13, 0xe6, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xfe, 0xb5, // .....r.......... + 0x6a, 0x4b, 0x26, 0x01, 0x56, 0x7c, 0x6f, 0xbd, 0x01, 0x05, 0x01, 0x1e, 0x01, 0x05, 0xbd, 0x6f, // jK&.V|o........o + 0x6f, 0xbd, 0xfe, 0xfb, 0x8f, 0xdc, 0xb3, 0xfe, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // o............... + 0xff, 0x80, 0x06, 0x00, 0x06, 0x00, 0x00, 0x29, 0x00, 0x35, 0x00, 0x00, 0x01, 0x14, 0x02, 0x06, // .......).5...... + 0x04, 0x20, 0x24, 0x26, 0x02, 0x35, 0x34, 0x12, 0x37, 0x36, 0x16, 0x17, 0x16, 0x06, 0x07, 0x0e, // . $&.54.76...... + 0x01, 0x15, 0x14, 0x1e, 0x02, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x37, 0x3e, // .....2>.54&'..7> + 0x01, 0x17, 0x16, 0x12, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, // ........"&5.462. + 0x06, 0x00, 0x7a, 0xce, 0xfe, 0xe4, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, 0xa1, 0x92, 0x2b, 0x69, // ..z........z..+i + 0x1f, 0x20, 0x0f, 0x2a, 0x62, 0x6b, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x6b, 0x62, 0x2a, // . .*bkQ.....Qkb* + 0x0f, 0x20, 0x1f, 0x6a, 0x2a, 0x92, 0xa1, 0xfd, 0x80, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x02, // . .j*....LhLLhL. + 0x80, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0xb6, 0x01, 0x42, 0x6d, 0x20, // .....zz......Bm + 0x0e, 0x2b, 0x2a, 0x69, 0x20, 0x4a, 0xd6, 0x79, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, // .+*i J.yh..QQ..h + 0x79, 0xd6, 0x4a, 0x20, 0x69, 0x2a, 0x2b, 0x0e, 0x20, 0x6d, 0xfe, 0xbe, 0x02, 0x4a, 0xfd, 0x80, // y.J i*+. m...J.. + 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x80, 0x34, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, // 4LL4..4LL....... + 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // ..%...+."&=.46;. + 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&5.46;. + 0x32, 0x16, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&5.46;. + 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&5.46;. + 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&5.46;. + 0x32, 0x16, 0x01, 0x00, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, // 2............... + 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, // ................ + 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // ................ + 0x0e, 0x12, 0x01, 0x80, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x60, 0xc0, // ..............`. + 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x72, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, // ........r....... + 0x40, 0x0e, 0x12, 0x12, 0xf2, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, // @...........@... + 0x01, 0x72, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0xf2, 0xfa, // .r.@............ + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // @............... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .........n...4&" + 0x06, 0x14, 0x16, 0x32, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x16, 0x17, 0x16, 0x14, // ...2............ + 0x07, 0x0e, 0x01, 0x23, 0x22, 0x2f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, // ...#"/......+."& + 0x2f, 0x01, 0x26, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, // /.&'..#"'&'&547> + 0x01, 0x37, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x3f, 0x01, 0x36, 0x37, 0x26, // .7&/...=.46?.67& + 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x1f, 0x01, 0x36, 0x37, 0x36, 0x37, 0x36, // '&547>.32..67676 + 0x3b, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x16, 0x17, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x16, // ;.2.....7632.... + 0x15, 0x14, 0x07, 0x0e, 0x01, 0x07, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x04, 0x00, 0x96, 0xd4, 0x96, // ................ + 0x96, 0xd4, 0x02, 0x96, 0x10, 0x0c, 0xb9, 0x13, 0x14, 0x23, 0x48, 0x0a, 0x09, 0x1b, 0x90, 0x16, // .........#H..... + 0x0c, 0x0e, 0x8a, 0x2c, 0x2f, 0x10, 0x0d, 0x07, 0x1d, 0xde, 0x0e, 0x15, 0x01, 0x1c, 0x31, 0x29, // ...,/.........1) + 0x8d, 0x0a, 0x0f, 0x0e, 0x0b, 0x7e, 0x27, 0x07, 0x08, 0x0f, 0x48, 0x12, 0x1b, 0x0e, 0xb7, 0x0d, // .....~'...H..... + 0x10, 0x10, 0x0b, 0xba, 0x0e, 0x19, 0x28, 0x43, 0x0a, 0x09, 0x1a, 0x91, 0x16, 0x0d, 0x0d, 0x8a, // ......(C........ + 0x2c, 0x2f, 0x10, 0x0d, 0x07, 0x1d, 0xde, 0x0e, 0x15, 0x01, 0x1c, 0x31, 0x29, 0x8e, 0x09, 0x0f, // ,/.........1)... + 0x0d, 0x0c, 0x81, 0x24, 0x07, 0x08, 0x0f, 0x48, 0x12, 0x1a, 0x0f, 0xb7, 0x0d, 0x10, 0x02, 0x16, // ...$...H........ + 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x6d, 0xde, 0x0c, 0x16, 0x02, 0x1c, 0x36, 0x25, 0x32, 0x58, // ......m.....6%2X + 0x0c, 0x1a, 0x0a, 0x25, 0x8e, 0x09, 0x6c, 0x17, 0x0f, 0x88, 0x32, 0x1c, 0x11, 0x0d, 0xb8, 0x10, // ...%..l...2..... + 0x15, 0x6b, 0x09, 0x0b, 0x72, 0x36, 0x0a, 0x0d, 0x0c, 0x0b, 0x15, 0x5b, 0x19, 0x32, 0x31, 0x1b, // .k..r6.....[.21. + 0x02, 0x15, 0x0d, 0xde, 0x0c, 0x16, 0x02, 0x1c, 0x2e, 0x2e, 0x39, 0x51, 0x0c, 0x0c, 0x0a, 0x0d, // ..........9Q.... + 0x24, 0x8f, 0x0a, 0x6b, 0x17, 0x0f, 0x88, 0x32, 0x1c, 0x11, 0x0d, 0xb8, 0x10, 0x15, 0x6b, 0x09, // $..k...2......k. + 0x0a, 0x77, 0x33, 0x08, 0x0e, 0x0c, 0x0b, 0x15, 0x5b, 0x19, 0x32, 0x30, 0x1c, 0x02, 0x15, 0x00, // .w3.....[.20.... + 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3b, 0x00, 0x43, 0x00, 0x67, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // .;.C.g......+."& + 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // 5.46;.2.....+."& + 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // 5.46;.2.....+."& + 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x13, 0x11, 0x21, 0x11, 0x14, 0x1e, 0x01, 0x33, // 5.46;.2...!....3 + 0x21, 0x32, 0x3e, 0x01, 0x01, 0x21, 0x27, 0x26, 0x27, 0x21, 0x06, 0x07, 0x05, 0x15, 0x14, 0x06, // !2>..!'&'!...... + 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, // +....#!"&5.#"&=. + 0x34, 0x36, 0x33, 0x21, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x21, 0x32, 0x16, // 463!7>.3!2...!2. + 0x02, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, // ....@....@...... + 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, // @....@......@... + 0x0e, 0x40, 0x0e, 0x12, 0x80, 0xfc, 0x80, 0x0e, 0x0f, 0x03, 0x03, 0x40, 0x03, 0x0f, 0x0e, 0xfd, // .@.........@.... + 0x60, 0x01, 0xc0, 0x30, 0x07, 0x0a, 0xfe, 0xc3, 0x0a, 0x07, 0x03, 0x6f, 0x12, 0x0e, 0x60, 0x5e, // `..0.......o..`^ + 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x35, 0x46, 0x0f, 0x4e, 0x28, // B..B^`.....5F.N( + 0x01, 0x40, 0x28, 0x4e, 0x0f, 0x46, 0x01, 0x35, 0x0e, 0x12, 0x03, 0x20, 0xfd, 0xc0, 0x0e, 0x12, // .@(N.F.5... .... + 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, // ...@...........@ + 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, 0xfd, // ...........@.... + 0x1e, 0x03, 0xb4, 0xfc, 0x4c, 0x16, 0x25, 0x11, 0x11, 0x25, 0x04, 0x4a, 0x75, 0x09, 0x02, 0x02, // ....L.%..%.Ju... + 0x09, 0x95, 0x40, 0x0e, 0x12, 0xfc, 0x4c, 0x53, 0x79, 0x75, 0x53, 0x03, 0xb8, 0x12, 0x0e, 0x40, // ..@...LSyuS....@ + 0x0e, 0x12, 0xa7, 0x25, 0x34, 0x34, 0x25, 0xa7, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1a, // ...%44%......... + 0x00, 0x00, 0x06, 0x66, 0x05, 0x03, 0x00, 0x13, 0x00, 0x35, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // ...f.....5...... + 0x23, 0x21, 0x11, 0x21, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x35, 0x09, 0x01, 0x16, // #!.!.!"&5.465... + 0x37, 0x07, 0x06, 0x07, 0x23, 0x22, 0x27, 0x09, 0x01, 0x06, 0x27, 0x26, 0x2f, 0x01, 0x26, 0x36, // 7...#"'...'&/.&6 + 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x17, // 7.62..546;.2.... + 0x1e, 0x01, 0x05, 0x80, 0x26, 0x1a, 0xfe, 0x80, 0xff, 0x00, 0xfe, 0x80, 0x1a, 0x26, 0x01, 0x02, // ....&........&.. + 0x3f, 0x02, 0x3f, 0x01, 0xdf, 0x3e, 0x08, 0x0d, 0x03, 0x0d, 0x08, 0xfd, 0x4c, 0xfd, 0x4c, 0x0c, // ?.?..>......L.L. + 0x0c, 0x0d, 0x08, 0x3e, 0x08, 0x02, 0x0a, 0x02, 0xcf, 0x20, 0x58, 0x20, 0xf4, 0x12, 0x0e, 0xc0, // ...>..... X .... + 0x0e, 0x12, 0xdb, 0x0a, 0x02, 0x02, 0x20, 0xfe, 0x20, 0x1a, 0x26, 0x01, 0x80, 0xfe, 0x80, 0x26, // ...... . .&....& + 0x1a, 0x01, 0xe0, 0x01, 0x04, 0x01, 0x01, 0xda, 0xfe, 0x26, 0x02, 0x41, 0x4a, 0x09, 0x02, 0x07, // .........&.AJ... + 0x02, 0x41, 0xfd, 0xbf, 0x08, 0x01, 0x02, 0x09, 0x4a, 0x0a, 0x1b, 0x08, 0x02, 0x57, 0x1a, 0x1a, // .A......J....W.. + 0xcc, 0xc3, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0x68, 0xb6, 0x08, 0x1b, 0x00, 0x00, 0x03, 0x00, 0x00, // .......h........ + 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x23, 0x00, 0x00, 0x33, 0x21, // ...........#..3! + 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x01, 0x21, 0x26, 0x27, 0x01, 0x26, 0x27, 0x01, 0x11, // .!"&5.!.!&'.&'.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, // ..#!"&5.463!2... + 0x1e, 0x01, 0x80, 0x04, 0x00, 0xfe, 0x60, 0x28, 0x38, 0xfe, 0x00, 0x02, 0x80, 0x01, 0x78, 0x0a, // ......`(8.....x. + 0x0c, 0xfe, 0xc7, 0x0c, 0x1d, 0x02, 0x00, 0x38, 0x28, 0xfb, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, // .......8(..(88(. + 0x80, 0x28, 0x60, 0x1c, 0x01, 0x38, 0x1c, 0x28, 0x03, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfe, 0x80, // .(`..8.(..8(.... + 0x1d, 0x0c, 0x01, 0x39, 0x0c, 0x0a, 0xfe, 0x68, 0xfc, 0x80, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, // ...9...h..(88(.@ + 0x28, 0x38, 0x28, 0x1c, 0xfe, 0xc8, 0x1c, 0x60, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // (8(....`........ + 0x05, 0x80, 0x00, 0x14, 0x00, 0x20, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // ..... .,......#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x00, // "&=.46;..46;.2.. + 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, // ... ..... 6.... + 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x80, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, // $...$ .......... + 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0xa0, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, // ....@........... + 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..(..r....^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, 0xe0, 0xfe, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // a...a...@....@.. + 0x01, 0x60, 0x0e, 0x12, 0x12, 0xfd, 0xfe, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, // .`......(....... + 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // ..._.^.....a...a + 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x07, 0x4e, 0x05, 0x00, 0x00, 0x11, // .......2...N.... + 0x00, 0x43, 0x00, 0x00, 0x01, 0x35, 0x03, 0x2e, 0x01, 0x2b, 0x01, 0x22, 0x06, 0x07, 0x03, 0x15, // .C...5...+.".... + 0x06, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x14, 0x23, 0x21, 0x32, 0x36, 0x27, 0x03, 0x2e, 0x01, // ..;.26..#!26'... + 0x23, 0x21, 0x22, 0x06, 0x07, 0x03, 0x06, 0x16, 0x33, 0x21, 0x22, 0x35, 0x34, 0x37, 0x01, 0x3e, // #!".....3!"547.> + 0x01, 0x33, 0x21, 0x22, 0x06, 0x0f, 0x01, 0x06, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x2f, 0x01, 0x2e, // .3!".....;.26/.. + 0x01, 0x23, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x04, 0x57, 0x18, 0x01, 0x14, 0x0d, 0xba, 0x0d, // .#!2.....W...... + 0x14, 0x01, 0x18, 0x01, 0x12, 0x0c, 0xf4, 0x0c, 0x12, 0x02, 0xf6, 0x2e, 0xfd, 0x40, 0x0d, 0x12, // .............@.. + 0x01, 0x14, 0x01, 0x14, 0x0d, 0xfe, 0xf0, 0x0d, 0x14, 0x01, 0x14, 0x01, 0x12, 0x0d, 0xfd, 0x40, // ...............@ + 0x2e, 0x1a, 0x01, 0xa1, 0x08, 0x24, 0x14, 0x01, 0x53, 0x0d, 0x14, 0x01, 0x0f, 0x01, 0x12, 0x0d, // .....$..S....... + 0xa6, 0x0d, 0x12, 0x01, 0x0f, 0x01, 0x14, 0x0d, 0x01, 0x53, 0x14, 0x24, 0x08, 0x01, 0xa1, 0x1a, // .........S.$.... + 0x02, 0x1c, 0x04, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x04, 0x0c, 0x10, 0x10, 0xfe, // ....@........... + 0x39, 0x49, 0x13, 0x0d, 0x01, 0x00, 0x0d, 0x13, 0x13, 0x0d, 0xff, 0x00, 0x0d, 0x13, 0x49, 0x36, // 9I............I6 + 0x3e, 0x04, 0x14, 0x13, 0x1c, 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0d, 0x13, 0x1c, // >............... + 0x13, 0xfb, 0xec, 0x3e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x07, // ...>............ + 0x00, 0x0f, 0x00, 0x25, 0x00, 0x3d, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // ...%.=..$4&"...2 + 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // $4&"...2....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x17, 0x16, 0x32, 0x3f, 0x01, 0x21, 0x32, 0x16, 0x01, 0x16, // 5.463!..2?.!2... + 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x33, 0x21, // ..."'.&763!.463! + 0x32, 0x16, 0x15, 0x11, 0x21, 0x32, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x26, // 2...!2..&4&&4.&& + 0x34, 0x26, 0x26, 0x34, 0xa6, 0x38, 0x28, 0xfa, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, 0xd1, 0x87, // 4&&4.8(.@(88(... + 0x3a, 0x9c, 0x3a, 0x88, 0x01, 0xd0, 0x28, 0x38, 0xfe, 0xbb, 0x11, 0x1f, 0xfe, 0x40, 0x12, 0x36, // :.:...(8.....@.6 + 0x12, 0xfe, 0x40, 0x1f, 0x11, 0x11, 0x2a, 0x01, 0x00, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x01, // ..@...*..&....&. + 0x00, 0x2a, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x20, // .*.4&&4&&4&&4&. + 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x88, 0x38, 0x38, 0x88, 0x38, 0x02, // ..(88(.@(8.88.8. + 0x11, 0x29, 0x1d, 0xfe, 0x40, 0x13, 0x13, 0x01, 0xc0, 0x1d, 0x29, 0x27, 0x01, 0xc0, 0x1a, 0x26, // .)..@.....)'...& + 0x26, 0x1a, 0xfe, 0x40, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x18, // &..@............ + 0x00, 0x24, 0x00, 0x30, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x37, // .$.0......."'.&7 + 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x02, // 6;..46;.2...32.. + 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, 0x10, 0x02, 0x04, 0x20, // ..... >..&.... + 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x60, 0x0a, 0xfe, 0xc1, 0x0b, 0x18, 0x0b, 0xfe, // $...$ ..`....... + 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0xcc, 0xfe, // ................ + 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, // ......(....r.... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x60, 0x0c, 0x0c, 0xfe, // ^.....a...a.`... + 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, 0x13, 0x14, 0x01, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0xa0, // ....@....`...... + 0x12, 0x02, 0x32, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, // ..2.........(... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, // ^.....a...a..... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, // .............$.0 + 0x00, 0x00, 0x01, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x23, // ....+....+."&5.# + 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x02, 0x20, 0x0e, 0x01, 0x10, // "&547.62.... ... + 0x1e, 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, // .. >..&.... $... + 0x24, 0x20, 0x04, 0x04, 0x5e, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, // $ ..^........... + 0x0a, 0x01, 0x3f, 0x0b, 0x18, 0x0b, 0x01, 0x40, 0x0f, 0xd2, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, // ..?....@........ + 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .(....r....^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x94, 0x14, 0xfe, 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0x01, // .a...a.......... + 0x60, 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0x09, 0x09, 0xfe, 0xc0, 0x10, 0x01, 0xf9, 0x92, 0xfa, // `.....?......... + 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .......(...^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, // .a...a.......... + 0x05, 0x00, 0x00, 0x0d, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, 0x2e, 0x01, 0x27, 0x03, 0x21, 0x03, // .....#...!..'.!. + 0x0e, 0x01, 0x07, 0x21, 0x17, 0x21, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ...!.!%...#!"&5. + 0x34, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x13, 0x16, 0x03, 0xff, 0x01, 0x3c, // 47.>.3!2.......< + 0x01, 0x03, 0x01, 0xd4, 0xfd, 0x3c, 0xd4, 0x01, 0x03, 0x01, 0x01, 0x3c, 0x5f, 0x01, 0x40, 0x02, // .....<.....<_.@. + 0x60, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x19, 0xee, 0x0a, 0x35, 0x1a, 0x03, 0x40, 0x1a, 0x35, // `&....&...5..@.5 + 0x0a, 0xee, 0x19, 0x02, 0x40, 0x03, 0x0a, 0x03, 0x01, 0xf0, 0xfe, 0x10, 0x02, 0x0c, 0x02, 0xc0, // ....@........... + 0xa2, 0xfe, 0x1e, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xe2, 0x3e, 0x3d, 0x02, 0x28, 0x19, 0x22, 0x22, // ....&&...>=.(."" + 0x19, 0xfd, 0xd8, 0x3d, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ...=............ + 0x00, 0x1b, 0x00, 0x27, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, // ...'.......#"'&5 + 0x11, 0x34, 0x37, 0x36, 0x17, 0x01, 0x16, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, // .476...... ..... + 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0xa0, // 6.... $...$ ... + 0x20, 0xfd, 0xe0, 0x0f, 0x11, 0x10, 0x10, 0x20, 0x20, 0x21, 0x1f, 0x02, 0x20, 0xa0, 0x92, 0xfa, // ...... !.. ... + 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // .......(..r....^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xa5, 0x4a, 0x12, 0xfe, 0xc0, // .....a...a..J... + 0x09, 0x08, 0x13, 0x25, 0x02, 0x80, 0x25, 0x13, 0x12, 0x13, 0xfe, 0xc0, 0xcb, 0x01, 0x28, 0xfa, // ...%..%.......(. + 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ........._.^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .a...a.......... + 0x05, 0x80, 0x00, 0x33, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x27, 0x26, 0x3f, // ...3......#!"'&? + 0x01, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x36, 0x37, 0x32, // .&#".....3267672 + 0x1f, 0x01, 0x1e, 0x01, 0x07, 0x06, 0x04, 0x23, 0x22, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, // .......#"$&...6$ + 0x33, 0x32, 0x04, 0x17, 0x37, 0x36, 0x17, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfe, 0x40, 0x2a, 0x11, // 32..76....&..@*. + 0x11, 0x1f, 0x8a, 0x94, 0xc9, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, 0x77, 0xd4, 0x49, // .....h..QQ..hw.I + 0x07, 0x10, 0x0e, 0x0b, 0x89, 0x09, 0x01, 0x08, 0x6d, 0xfe, 0xca, 0xac, 0x9c, 0xfe, 0xe4, 0xce, // ........m....... + 0x7a, 0x7a, 0xce, 0x01, 0x1c, 0x9c, 0x93, 0x01, 0x13, 0x6b, 0x82, 0x1d, 0x29, 0x27, 0x05, 0x00, // zz.......k..)'.. + 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x8a, 0x89, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, // .@.&('...Q.....Q + 0x68, 0x5f, 0x0a, 0x02, 0x09, 0x8a, 0x08, 0x19, 0x0a, 0x84, 0x91, 0x7a, 0xce, 0x01, 0x1c, 0x01, // h_.........z.... + 0x38, 0x01, 0x1c, 0xce, 0x7a, 0x6f, 0x65, 0x81, 0x1f, 0x11, 0x11, 0x00, 0x00, 0x02, 0x00, 0x00, // 8...zoe......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x24, 0x00, 0x47, 0x00, 0x00, 0x01, 0x14, 0x07, 0x02, // .......$.G...... + 0x00, 0x21, 0x22, 0x24, 0x27, 0x07, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // .!"$'.."&5.463!2 + 0x16, 0x14, 0x0f, 0x01, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3b, 0x01, 0x32, // ......3267676;.2 + 0x16, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x3f, 0x01, 0x26, 0x23, 0x22, 0x06, // .....#!"&4?.&#". + 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x12, 0x00, 0x21, 0x32, 0x04, 0x17, // ....+."&=...!2.. + 0x37, 0x36, 0x32, 0x16, 0x05, 0xe7, 0x01, 0x40, 0xfe, 0x68, 0xfe, 0xee, 0x92, 0xfe, 0xef, 0x6b, // 762....@.h.....k + 0x81, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, 0x89, 0x47, 0xb4, 0x61, 0x86, // ..4&&....&..G.a. + 0xe8, 0x46, 0x0b, 0x2a, 0x08, 0x16, 0xc0, 0x0d, 0x13, 0x19, 0x26, 0x1a, 0xfe, 0x40, 0x1a, 0x26, // .F.*......&..@.& + 0x13, 0x8a, 0x94, 0xc9, 0x86, 0xe8, 0x46, 0x0b, 0x2a, 0x08, 0x16, 0xc7, 0x0d, 0x13, 0x41, 0x01, // ......F.*.....A. + 0x9a, 0x01, 0x13, 0x92, 0x01, 0x14, 0x6b, 0x82, 0x13, 0x34, 0x26, 0x01, 0xe0, 0x05, 0x02, 0xfe, // ......k..4&..... + 0xf4, 0xfe, 0xb3, 0x6e, 0x66, 0x81, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x26, 0x34, 0x13, // ...nf..&....&&4. + 0x89, 0x42, 0x48, 0x82, 0x72, 0x11, 0x64, 0x17, 0x13, 0x03, 0x13, 0xfe, 0x40, 0x1a, 0x26, 0x26, // .BH.r.d.....@.&& + 0x34, 0x13, 0x8a, 0x89, 0x82, 0x72, 0x11, 0x64, 0x17, 0x13, 0x0d, 0x07, 0x01, 0x0c, 0x01, 0x4d, // 4....r.d.......M + 0x6f, 0x65, 0x81, 0x13, 0x26, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // oe..&........... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ........+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.5...+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.5...+."&=.46 + 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ;.2.....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.5...#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // 3!2.5...#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // 3!2...4&#!"..... + 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!26....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // 3!2.....@....@.. + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // ..@....@....@... + 0x0d, 0x40, 0x0d, 0x13, 0x04, 0x80, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, // .@.......@...... + 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // .....@.......... + 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x80, 0x13, 0x0d, 0xfa, 0x40, 0x0d, // .@............@. + 0x13, 0x13, 0x0d, 0x05, 0xc0, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x5e, 0x42, // ........^B.@B^^B + 0x05, 0xc0, 0x42, 0x5e, 0x01, 0x60, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, // ..B^.`@....@.... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // @....@....@....@ + 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, // .....@....@....@ + 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ....@....@....@. + 0x13, 0x13, 0xfd, 0x33, 0x03, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0xc0, 0x0d, 0x13, 0x13, 0x04, // ...3.@.......... + 0x4d, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x02, 0x00, 0x00, // M..B^^B.@B^^.... + 0x00, 0x00, 0x04, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x21, 0x35, 0x34, // .............!54 + 0x26, 0x22, 0x06, 0x15, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // &"......#!"&5.46 + 0x3b, 0x01, 0x35, 0x34, 0x00, 0x20, 0x00, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x01, 0x40, 0x02, 0x00, // ;.54. ...32..@.. + 0x96, 0xd4, 0x96, 0x03, 0x40, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x20, 0x01, 0x08, // ....@8(.@(88( .. + 0x01, 0x70, 0x01, 0x08, 0x20, 0x28, 0x38, 0x03, 0x00, 0xc0, 0x6a, 0x96, 0x96, 0x6a, 0xfe, 0xe0, // .p.. (8...j..j.. + 0xfd, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0xc0, 0xb8, 0x01, 0x08, 0xfe, 0xf8, // ..(88(.@(8...... + 0xb8, 0xc0, 0x38, 0x00, 0x00, 0x02, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x11, // ..8....@........ + 0x00, 0x37, 0x00, 0x00, 0x01, 0x14, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // .7........+."&5. + 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2e, 0x02, // &5462.......#".. + 0x23, 0x22, 0x05, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, // #"..#"&5.4767632 + 0x16, 0x17, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x01, 0x40, 0x40, 0x13, 0x0d, 0x40, // ...32>.32..@@..@ + 0x0d, 0x13, 0x40, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x19, 0x1b, 0xd7, 0x9a, 0x3d, 0x7d, 0x5c, 0x8b, // ..@KjK......=}.. + 0x49, 0xc0, 0xfe, 0xf0, 0x11, 0x10, 0x1a, 0x26, 0x1f, 0x15, 0x3a, 0xec, 0xb9, 0x6b, 0xba, 0x7e, // I......&..:..k.~ + 0x26, 0x32, 0x36, 0x7f, 0x5d, 0x53, 0x0d, 0x1a, 0x26, 0x05, 0x00, 0x48, 0x26, 0xfb, 0x0e, 0x0d, // &26.]S..&..H&... + 0x13, 0x13, 0x0d, 0x04, 0xf2, 0x26, 0x48, 0x35, 0x4b, 0x4b, 0x75, 0xfd, 0x05, 0x19, 0x1b, 0x0e, // .....&H5KKu..... + 0x74, 0x2c, 0x34, 0x2c, 0x92, 0x09, 0x26, 0x1a, 0x02, 0xe6, 0x20, 0x17, 0x0e, 0x1d, 0x78, 0x3a, // t,4,..&... ...x: + 0x3b, 0x13, 0x2a, 0x34, 0x2a, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // ;.*4*&.......... + 0x05, 0x80, 0x00, 0x4b, 0x00, 0x00, 0x01, 0x14, 0x0f, 0x02, 0x0e, 0x01, 0x23, 0x15, 0x14, 0x06, // ...K........#... + 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x32, 0x16, // +."&5.46;.2...2. + 0x17, 0x37, 0x36, 0x35, 0x34, 0x02, 0x24, 0x20, 0x04, 0x02, 0x15, 0x14, 0x1f, 0x01, 0x3e, 0x01, // .7654.$ ......>. + 0x33, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // 3546;.2.....+."& + 0x3d, 0x01, 0x22, 0x26, 0x2f, 0x02, 0x26, 0x35, 0x34, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, // =."&/.&54.6$ ... + 0x06, 0x80, 0x3c, 0x14, 0xb9, 0x16, 0x89, 0x58, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // ..<....X..@....@ + 0x0e, 0x12, 0x47, 0x76, 0x22, 0x44, 0x1d, 0xb0, 0xfe, 0xd7, 0xfe, 0xb2, 0xfe, 0xd7, 0xb0, 0x1d, // ..Gv"D.......... + 0x44, 0x22, 0x76, 0x47, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x58, 0x89, // D"vG..@....@..X. + 0x16, 0xb9, 0x14, 0x3c, 0x86, 0xe0, 0x01, 0x34, 0x01, 0x4c, 0x01, 0x34, 0xe0, 0x86, 0x02, 0x8a, // ...<...4.L.4.... + 0xa6, 0x94, 0x31, 0x21, 0x53, 0x6b, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0x40, 0x0e, 0x12, 0x12, // ..1!Sk .....@... + 0x0e, 0x20, 0x47, 0x3c, 0x0c, 0x5f, 0x62, 0x94, 0x01, 0x06, 0x9c, 0x9c, 0xfe, 0xfa, 0x94, 0x62, // . G<._b........b + 0x5f, 0x0c, 0x3c, 0x47, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x20, // _..4..5 + 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x00, 0x26, 0x34, 0x13, 0xfe, 0xb3, 0xfe, 0xfa, 0x1a, // 4632....&4...... + 0x26, 0x26, 0x1a, 0x01, 0x06, 0x01, 0x4d, 0x13, 0x34, 0x26, 0x01, 0x80, 0x55, 0x46, 0x0a, 0x0f, // &&....M.4&..UF.. + 0x1a, 0x26, 0x18, 0x22, 0x22, 0x18, 0x18, 0x22, 0x22, 0x18, 0x26, 0x1a, 0x0f, 0x0a, 0x46, 0x04, // .&."".."".&...F. + 0xa0, 0xfb, 0xc0, 0x1a, 0x26, 0x13, 0x01, 0x4d, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x01, 0x4d, // ....&..M&....&.M + 0x13, 0x26, 0xfe, 0x12, 0x98, 0x83, 0x1c, 0x05, 0x25, 0x1b, 0x15, 0x1d, 0x15, 0x19, 0x2e, 0x44, // .&......%......D + 0x2e, 0x19, 0x15, 0x1d, 0x15, 0x1b, 0x25, 0x05, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ......%......... + 0xff, 0xb9, 0x06, 0x80, 0x05, 0x47, 0x00, 0x13, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x6b, 0x00, 0x00, // .....G...-.I.k.. + 0x01, 0x11, 0x14, 0x06, 0x22, 0x27, 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // ...."'.!"&5.463! + 0x01, 0x36, 0x32, 0x16, 0x00, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, // .62......#"&54>. + 0x34, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x04, 0x10, 0x02, 0x07, 0x06, 0x23, // 4..54632.......# + 0x22, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x34, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, // "&54767>.4&'&'&5 + 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x04, 0x10, 0x02, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, // 4632.......#"&54 + 0x37, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x12, 0x10, 0x02, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, // 7>.7676...'&'..' + 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x16, 0x03, 0x00, 0x26, 0x34, 0x13, 0xfe, 0xb3, 0xfe, // &54632....&4.... + 0xfa, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x06, 0x01, 0x4d, 0x13, 0x34, 0x26, 0x01, 0x80, 0x55, 0x46, // ..&&....M.4&..UF + 0x0a, 0x0f, 0x1a, 0x26, 0x18, 0x22, 0x22, 0x18, 0x18, 0x22, 0x22, 0x18, 0x26, 0x1a, 0x0f, 0x0a, // ...&."".."".&... + 0x46, 0x01, 0x55, 0xaa, 0x8c, 0x0d, 0x0c, 0x1b, 0x26, 0x27, 0x38, 0x14, 0x4a, 0x53, 0x53, 0x4a, // F.U.....&'8.JSSJ + 0x14, 0x38, 0x27, 0x26, 0x1a, 0x0d, 0x0d, 0x8c, 0x01, 0xaa, 0xfe, 0xd3, 0x0d, 0x0d, 0x1a, 0x26, // .8'&...........& + 0x27, 0x07, 0x1f, 0x07, 0x2e, 0x24, 0x7b, 0x8a, 0x8a, 0x7b, 0x24, 0x2e, 0x07, 0x1f, 0x07, 0x27, // '....${..{$....' + 0x26, 0x1a, 0x0d, 0x0d, 0xd3, 0x04, 0xa0, 0xfb, 0xc0, 0x1a, 0x26, 0x13, 0x01, 0x4d, 0x26, 0x1a, // &.........&..M&. + 0x01, 0x80, 0x1a, 0x26, 0x01, 0x4d, 0x13, 0x26, 0xfe, 0x12, 0x98, 0x83, 0x1c, 0x05, 0x25, 0x1b, // ...&.M.&......%. + 0x15, 0x1d, 0x15, 0x19, 0x2e, 0x44, 0x2e, 0x19, 0x15, 0x1d, 0x15, 0x1b, 0x25, 0x05, 0x1b, 0x37, // .....D......%..7 + 0xfe, 0xce, 0xfe, 0xfd, 0x3b, 0x05, 0x26, 0x1a, 0x27, 0x14, 0x1d, 0x0f, 0x36, 0xa3, 0xb8, 0xa3, // ....;.&.'...6... + 0x36, 0x0f, 0x1d, 0x14, 0x27, 0x1a, 0x26, 0x05, 0x3b, 0xb6, 0xfe, 0x34, 0xfe, 0x7f, 0x5b, 0x05, // 6...'.&.;..4..[. + 0x26, 0x1a, 0x24, 0x17, 0x04, 0x0d, 0x04, 0x19, 0x1a, 0x5b, 0x01, 0x10, 0x01, 0x32, 0x01, 0x10, // &.$......[...2.. + 0x5b, 0x1a, 0x19, 0x04, 0x0d, 0x04, 0x17, 0x24, 0x1a, 0x26, 0x05, 0x5b, 0x00, 0x0c, 0x00, 0x00, // [......$.&.[.... + 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, // ................ + 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x33, 0x00, 0x37, 0x00, 0x00, // .......#./.3.7.. + 0x01, 0x15, 0x23, 0x35, 0x13, 0x15, 0x23, 0x35, 0x21, 0x15, 0x23, 0x35, 0x01, 0x21, 0x11, 0x21, // ..#5..#5!.#5.!.! + 0x11, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x11, 0x21, 0x11, 0x01, 0x15, 0x23, 0x35, // .!.!.!.!..!...#5 + 0x21, 0x15, 0x23, 0x35, 0x13, 0x11, 0x21, 0x35, 0x23, 0x11, 0x23, 0x11, 0x21, 0x15, 0x33, 0x35, // !.#5..!5#.#.!.35 + 0x01, 0x11, 0x21, 0x11, 0x21, 0x11, 0x21, 0x11, 0x01, 0x80, 0x80, 0x80, 0x80, 0x03, 0x80, 0x80, // ..!.!.!......... + 0xfc, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x03, 0x00, 0x01, 0x80, 0xfe, 0x80, // ................ + 0xff, 0x00, 0xfd, 0x80, 0x04, 0x80, 0x80, 0x01, 0x80, 0x80, 0x80, 0xfe, 0x80, 0x80, 0x80, 0x01, // ................ + 0x80, 0x80, 0xfd, 0x80, 0xfd, 0x80, 0x05, 0x80, 0xfd, 0x80, 0x01, 0x80, 0x80, 0x80, 0x03, 0x00, // ................ + 0x80, 0x80, 0x80, 0x80, 0xfc, 0x01, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x01, 0x80, // ................ + 0xfd, 0x80, 0xfd, 0x80, 0x02, 0x80, 0xfe, 0x00, 0x80, 0x80, 0x80, 0x80, 0x02, 0x00, 0xfe, 0x80, // ................ + 0x80, 0xfe, 0x80, 0x02, 0x80, 0x80, 0x80, 0x03, 0x00, 0xfd, 0x80, 0x02, 0x80, 0xfd, 0x80, 0x02, // ................ + 0x80, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x03, // ................ + 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, // ...............# + 0x00, 0x27, 0x00, 0x2b, 0x00, 0x2f, 0x00, 0x33, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x3f, 0x00, 0x00, // .'.+./.3.7.;.?.. + 0x33, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // 3#.3.#.3.#.3.#.3 + 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .#.3.#.3.#.3.#.3 + 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .#.3.#.3.#.3.#.3 + 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, 0x13, 0x23, 0x11, 0x33, // .#.3.#.3.#.3.#.3 + 0x3f, 0x3f, 0x3f, 0x3f, 0x20, 0x20, 0x5e, 0x1f, 0x1f, 0x9d, 0x1f, 0x1f, 0x9d, 0x3e, 0x3e, 0x7e, // ???? ^......>>~ + 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x3f, 0x1f, 0x1f, 0x9d, 0x3f, 0x3f, 0x9d, 0x3f, 0x3f, 0x7e, 0x3f, // ..?..?...??.??~? + 0x3f, 0x7e, 0x3f, 0x3f, 0x5e, 0x3f, 0x3f, 0xbd, 0x5e, 0x5e, 0x3f, 0x20, 0x20, 0x5e, 0x3f, 0x3f, // ?~??^??.^^? ^?? + 0x05, 0x80, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ................ + 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ................ + 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, // ................ + 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x81, 0x05, 0x7f, 0xfa, 0x80, 0x05, 0x80, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0x00, 0xff, 0x95, 0x05, 0xeb, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x00, // ................ + 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, // .4&"...2.....#"' + 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x01, 0xc0, // ...5.463!2...... + 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, 0x76, 0x25, 0xfe, 0x15, 0x27, 0x34, 0x35, 0x25, 0xfd, 0x35, // KjKKj.v%..'45%.5 + 0x26, 0x35, 0x4c, 0x34, 0x01, 0xa0, 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, 0x04, 0x0b, 0x6a, 0x4b, // &5L4..5.&..%..jK + 0x4b, 0x6a, 0x4b, 0xfe, 0x40, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x25, 0x02, 0xcc, 0x25, 0x80, 0x35, // KjK.@5%..%%..%.5 + 0x01, 0xa0, 0x34, 0x4c, 0x35, 0x26, 0xfd, 0x36, 0x27, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..4L5&.6'....... + 0xff, 0x95, 0x07, 0x6b, 0x05, 0x80, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x35, 0x00, 0x00, 0x00, 0x34, // ...k.......5...4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x2e, // &"...2.....#"'.. + 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x16, 0x05, 0x14, 0x07, 0x01, // .5.463!2........ + 0x06, 0x23, 0x22, 0x26, 0x27, 0x01, 0x36, 0x35, 0x34, 0x27, 0x01, 0x2e, 0x01, 0x23, 0x33, 0x32, // .#"&'.654'...#32 + 0x16, 0x17, 0x01, 0x16, 0x01, 0xc0, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x04, 0x76, 0x25, 0xfe, 0x15, // ......KjKKj.v%.. + 0x27, 0x34, 0x35, 0x25, 0xfd, 0x35, 0x26, 0x35, 0x4c, 0x34, 0x01, 0xa0, 0x35, 0x80, 0x26, 0x02, // '45%.5&5L4..5.&. + 0xcb, 0x25, 0x01, 0x80, 0x25, 0xfe, 0x15, 0x27, 0x34, 0x24, 0x2e, 0x1e, 0x01, 0xd6, 0x25, 0x25, // .%..%..'4$....%% + 0xfd, 0x35, 0x26, 0x80, 0x35, 0xe0, 0x35, 0x80, 0x26, 0x02, 0xcb, 0x25, 0x04, 0x0b, 0x6a, 0x4b, // .5&.5.5.&..%..jK + 0x4b, 0x6a, 0x4b, 0xfe, 0x40, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x25, 0x02, 0xcc, 0x25, 0x80, 0x35, // KjK.@5%..%%..%.5 + 0x01, 0xa0, 0x34, 0x4c, 0x35, 0x26, 0xfd, 0x36, 0x27, 0x34, 0x35, 0x25, 0xfe, 0x14, 0x25, 0x1c, // ..4L5&.6'45%..%. + 0x1f, 0x01, 0xd6, 0x25, 0x35, 0x34, 0x27, 0x02, 0xca, 0x26, 0x35, 0x35, 0x26, 0xfd, 0x36, 0x27, // ...%54'..&55&.6' + 0x00, 0x03, 0x00, 0x0a, 0xff, 0x80, 0x06, 0x79, 0x05, 0x80, 0x00, 0x54, 0x00, 0x64, 0x00, 0x74, // .......y...T.d.t + 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x26, 0x37, 0x34, // ........#!"&'&74 + 0x36, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x01, // 676&7>.7>.76&7>. + 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x37, // 7>.76&7>.7>.76&7 + 0x3e, 0x02, 0x37, 0x3e, 0x06, 0x17, 0x07, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x01, 0x0e, 0x01, // >.7>...63!2..... + 0x23, 0x21, 0x22, 0x07, 0x06, 0x17, 0x16, 0x33, 0x21, 0x32, 0x36, 0x37, 0x01, 0x36, 0x27, 0x16, // #!"....3!267.6'. + 0x05, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3f, 0x01, 0x36, 0x26, 0x23, 0x21, 0x22, 0x06, 0x07, // ...3!26?.6&#!".. + 0x03, 0x06, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3f, 0x01, 0x36, 0x26, 0x23, 0x21, 0x22, 0x06, 0x07, // ...3!26?.6&#!".. + 0x06, 0x67, 0x28, 0x16, 0xfe, 0xed, 0x13, 0x73, 0x41, 0xfc, 0x65, 0x4d, 0x8f, 0x1c, 0x18, 0x16, // .g(....sA.eM.... + 0x06, 0x01, 0x01, 0x08, 0x01, 0x02, 0x0c, 0x15, 0x06, 0x17, 0x2c, 0x08, 0x03, 0x05, 0x02, 0x03, // ..........,..... + 0x1c, 0x03, 0x15, 0x2a, 0x04, 0x01, 0x07, 0x04, 0x04, 0x24, 0x04, 0x13, 0x2f, 0x04, 0x01, 0x08, // ...*.....$../... + 0x02, 0x02, 0x0e, 0x16, 0x06, 0x08, 0x11, 0x0d, 0x13, 0x14, 0x21, 0x27, 0x1c, 0x01, 0x26, 0x0d, // ..........!'..&. + 0x02, 0xf9, 0x4a, 0x50, 0x16, 0xfe, 0xee, 0x24, 0x47, 0x5d, 0xfc, 0x9b, 0x1b, 0x0b, 0x0b, 0x0a, // ..JP...$G]...... + 0x18, 0x78, 0x03, 0x9b, 0x1d, 0x36, 0x08, 0x01, 0x2c, 0x07, 0x02, 0x26, 0xfb, 0xed, 0x04, 0x0c, // .x...6..,..&.... + 0x0e, 0x02, 0x60, 0x0d, 0x19, 0x04, 0x15, 0x04, 0x0c, 0x0e, 0xfd, 0xa0, 0x0d, 0x19, 0x04, 0x68, // ..`............h + 0x04, 0x0c, 0x0e, 0x02, 0x60, 0x0d, 0x19, 0x04, 0x15, 0x04, 0x0c, 0x0e, 0xfd, 0xa0, 0x0d, 0x19, // ....`........... + 0x04, 0x04, 0x22, 0x39, 0x48, 0xfc, 0x76, 0x40, 0x57, 0x6b, 0x4e, 0x43, 0x3c, 0x04, 0x2e, 0x0e, // .."9H.v@WkNC<... + 0x08, 0x1b, 0x06, 0x0b, 0x14, 0x1b, 0x0a, 0x26, 0x6b, 0x26, 0x0a, 0x28, 0x08, 0x0b, 0x22, 0x06, // .......&k&.(..". + 0x24, 0x70, 0x22, 0x09, 0x2e, 0x05, 0x0d, 0x23, 0x05, 0x1a, 0x75, 0x26, 0x08, 0x23, 0x09, 0x08, // $p"....#..u&.#.. + 0x14, 0x1a, 0x08, 0x0c, 0x25, 0x21, 0x27, 0x19, 0x16, 0x01, 0x06, 0x03, 0x09, 0x70, 0x4a, 0xfc, // ....%!'......pJ. + 0x76, 0x77, 0x45, 0x0f, 0x10, 0x1b, 0x46, 0x1f, 0x1a, 0x03, 0xdb, 0x16, 0x23, 0x0f, 0x1e, 0x0d, // vwE...F.....#... + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ...@..........@. + 0x13, 0x13, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x97, 0x05, 0x00, 0x05, 0x80, 0x00, 0x1c, // ................ + 0x00, 0x00, 0x01, 0x32, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, // ...2.........#"' + 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x36, 0x33, 0x04, // ...#"'..5.46763. + 0x8c, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x13, 0x19, 0x30, 0x23, 0xfe, 0x47, 0xfe, 0x47, 0x24, // ...!''!..0#.G.G$ + 0x2f, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x15, 0x17, 0x05, 0x80, 0x09, 0x0d, 0x38, 0x22, 0xfa, // /..!''!......8". + 0xf7, 0x22, 0x38, 0x0d, 0x08, 0x20, 0x01, 0xa8, 0xfe, 0x58, 0x21, 0x09, 0x0d, 0x38, 0x22, 0x05, // ."8.. ...X!..8". + 0x09, 0x22, 0x38, 0x0d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // ."8............. + 0x05, 0x80, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x3c, 0x00, 0x00, 0x29, 0x01, 0x11, 0x21, // .........<..)..! + 0x11, 0x21, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, // .!.#"&=.!.4&"... + 0x32, 0x37, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 27...+....#!"&=. + 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // #"&5.46;..463!2. + 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x33, 0x32, 0x16, 0x01, 0x80, 0x03, 0x80, 0xfc, 0x80, 0x03, // ......32........ + 0x80, 0xa0, 0x28, 0x38, 0xfd, 0x80, 0x04, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x13, 0x0d, // ..(8....&4&&4... + 0xe0, 0x38, 0x28, 0xfc, 0x40, 0x28, 0x38, 0xe0, 0x0d, 0x13, 0x71, 0x4f, 0x40, 0x38, 0x28, 0x02, // .8(.@(8...qO@8(. + 0xa0, 0x28, 0x60, 0x1c, 0x98, 0x1c, 0x28, 0x40, 0x4f, 0x71, 0x01, 0x00, 0x01, 0x80, 0x01, 0x80, // .(`...(@Oq...... + 0x38, 0x28, 0xa0, 0xfd, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x40, 0xfe, 0x60, 0x0d, 0x13, 0xa0, // 8(..&4&&4&@.`... + 0x28, 0x38, 0x38, 0x28, 0xa0, 0x13, 0x0d, 0x01, 0xa0, 0x4f, 0x71, 0x02, 0x20, 0x28, 0x38, 0x28, // (88(.....Oq. (8( + 0x1c, 0x98, 0x1c, 0x60, 0x28, 0xff, 0x00, 0x71, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, // ...`(..q........ + 0x06, 0x00, 0x00, 0x07, 0x00, 0x21, 0x00, 0x29, 0x00, 0x00, 0x00, 0x32, 0x16, 0x14, 0x06, 0x22, // .....!.)...2..." + 0x26, 0x34, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // &4.2.....#!"&5.4 + 0x36, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x00, 0x20, 0x00, 0x10, // 6;.7>.3!2.... .. + 0x00, 0x20, 0x00, 0x10, 0x03, 0x49, 0xee, 0xa9, 0xa9, 0xee, 0xa9, 0x03, 0xe0, 0x6a, 0x96, 0x96, // . ...I.......j.. + 0x6a, 0xfa, 0x80, 0x6a, 0x96, 0x96, 0x6a, 0xe0, 0x33, 0x13, 0x65, 0x35, 0x02, 0x00, 0x35, 0x65, // j..j..j.3.e5..5e + 0x13, 0x33, 0xfd, 0x67, 0x01, 0x72, 0x01, 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x03, 0x60, // .3.g.r.........` + 0xa9, 0xee, 0xa9, 0xa9, 0xee, 0x02, 0x49, 0x96, 0x6a, 0xfc, 0x80, 0x6a, 0x96, 0x96, 0x6a, 0x03, // ......I.j..j..j. + 0x80, 0x6a, 0x96, 0x88, 0x31, 0x47, 0x47, 0x31, 0x88, 0xfb, 0x80, 0x01, 0x07, 0x01, 0x72, 0x01, // .j..1GG1......r. + 0x07, 0xfe, 0xf9, 0xfe, 0x8e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // ................ + 0x05, 0x80, 0x00, 0x09, 0x00, 0x51, 0x00, 0x00, 0x01, 0x03, 0x1e, 0x02, 0x33, 0x37, 0x26, 0x27, // .....Q......37&' + 0x26, 0x01, 0x23, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x13, 0x01, 0x3b, 0x01, 0x17, 0x13, // &.#7676767..;... + 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, // ................ + 0x14, 0x07, 0x22, 0x27, 0x26, 0x23, 0x22, 0x0f, 0x02, 0x34, 0x3f, 0x01, 0x36, 0x37, 0x36, 0x34, // .."'&#"..4?.6764 + 0x2f, 0x02, 0x25, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x32, 0x1e, 0x01, 0x17, 0x16, // /.%........2.... + 0x15, 0x14, 0x07, 0x22, 0x25, 0x07, 0x06, 0x02, 0xd5, 0xaa, 0x49, 0xa1, 0x4d, 0x0e, 0x1d, 0x20, // ..."%.....I.M.. + 0x3c, 0x35, 0xfd, 0x19, 0x15, 0x02, 0x16, 0x3a, 0x59, 0x15, 0x14, 0x1c, 0xed, 0x01, 0x18, 0x4b, // <5.....:Y......K + 0x35, 0x0b, 0xcd, 0x67, 0x15, 0x27, 0x39, 0x1a, 0x27, 0x18, 0x29, 0x16, 0x0d, 0x16, 0x2f, 0x2f, // 5..g.'9.'.)...// + 0x38, 0x06, 0x01, 0x50, 0x70, 0x5d, 0x60, 0x4f, 0x38, 0xc8, 0x3a, 0x04, 0x83, 0x38, 0x0c, 0x0c, // 8..Pp]`O8.:..8.. + 0x06, 0x2f, 0x5c, 0xfe, 0x3e, 0x1d, 0x4b, 0x17, 0x11, 0x1a, 0x4d, 0x03, 0x15, 0x27, 0x15, 0x01, // ./..>.K...M..'.. + 0x02, 0x42, 0xfe, 0xe5, 0x30, 0x51, 0x03, 0xd1, 0xfe, 0x3e, 0x01, 0x02, 0x01, 0x02, 0x5f, 0x92, // .B..0Q...>...._. + 0x84, 0xfb, 0xfe, 0x4f, 0x07, 0x0b, 0x10, 0x0f, 0x10, 0x34, 0x02, 0x68, 0x02, 0xd4, 0x15, 0xfe, // ...O.....4.h.... + 0x20, 0xf2, 0x37, 0x66, 0x85, 0x3a, 0x6a, 0x43, 0x52, 0x31, 0x08, 0x13, 0x04, 0x06, 0x15, 0x27, // .7f.:jCR1.....' + 0x12, 0x0e, 0x0c, 0x08, 0x08, 0x02, 0x0b, 0x02, 0x2d, 0x21, 0x1c, 0x0d, 0x0a, 0x0c, 0x1e, 0x11, // ........-!...... + 0x72, 0xe4, 0x02, 0x41, 0xd1, 0x40, 0x14, 0x1f, 0x0c, 0x15, 0x0b, 0x04, 0x06, 0x03, 0x1c, 0x1e, // r..A.@.......... + 0x11, 0x0a, 0x14, 0x08, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, // ................ + 0x05, 0x80, 0x00, 0x13, 0x00, 0x25, 0x00, 0x65, 0x00, 0x00, 0x25, 0x16, 0x33, 0x32, 0x36, 0x37, // .....%.e..%.3267 + 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x15, 0x07, 0x13, 0x14, 0x03, 0x16, // 654'&'&#"....... + 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x14, 0x17, 0x16, 0x0f, 0x01, 0x14, // 32654'&#"....... + 0x01, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x03, 0x02, 0x27, 0x26, 0x27, 0x26, // .767676765..'&'& + 0x27, 0x26, 0x27, 0x26, 0x2f, 0x01, 0x2d, 0x01, 0x37, 0x32, 0x36, 0x33, 0x32, 0x16, 0x3b, 0x01, // '&'&/.-.72632.;. + 0x32, 0x17, 0x16, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x06, 0x07, 0x16, 0x17, // 2............... + 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2f, 0x01, 0x26, 0x07, 0x06, // .........../.&.. + 0x02, 0x2b, 0x4c, 0x40, 0x83, 0xaa, 0x25, 0x26, 0x29, 0x3a, 0x53, 0x50, 0xa7, 0x4a, 0x1b, 0x01, // .+L@..%&):SP.J.. + 0x03, 0x02, 0x2b, 0x42, 0xaf, 0xb2, 0x55, 0x54, 0xab, 0x34, 0x4e, 0x02, 0x07, 0x01, 0x01, 0xfd, // ..+B..UT.4N..... + 0xe4, 0x02, 0x2d, 0x17, 0x4d, 0x2e, 0x11, 0x04, 0x09, 0x02, 0x05, 0x04, 0x01, 0x0a, 0x01, 0x0b, // ..-.M........... + 0x12, 0x33, 0x1e, 0x54, 0x04, 0x01, 0x04, 0x01, 0x7c, 0x2d, 0x05, 0x12, 0x05, 0x01, 0x29, 0x14, // .3.T....|-....). + 0x4a, 0x58, 0x67, 0x2b, 0x35, 0x39, 0x2d, 0x2c, 0x2a, 0x40, 0x3f, 0x1a, 0x7c, 0xb1, 0x5a, 0x5c, // JXg+59-,*@?.|.Z. + 0x1d, 0x15, 0x32, 0x42, 0x4a, 0x49, 0x82, 0x52, 0x74, 0xc5, 0x54, 0xd6, 0x21, 0x0f, 0x20, 0x52, // ..2BJI.Rt.T.!. R + 0x48, 0x46, 0x6f, 0x72, 0x42, 0x5e, 0x20, 0x20, 0x0a, 0x90, 0xad, 0xfe, 0xf2, 0x0f, 0x02, 0xcd, // HForB^ ........ + 0x07, 0x82, 0x9f, 0x70, 0x4b, 0x4b, 0x0d, 0x2c, 0x21, 0x7a, 0x9d, 0x62, 0x2b, 0xfc, 0x65, 0x5e, // ...pKK.,!z.b+.e^ + 0x09, 0x03, 0x0c, 0x13, 0x1b, 0x18, 0x42, 0x80, 0x01, 0xf1, 0x01, 0x00, 0x94, 0x57, 0x16, 0x04, // ......B......W.. + 0x08, 0x0c, 0x03, 0x02, 0x0b, 0x53, 0x06, 0x0d, 0x01, 0x01, 0x01, 0x1b, 0x0d, 0x1a, 0x1d, 0x2f, // .....S........./ + 0x2f, 0x72, 0x41, 0x46, 0x74, 0x2f, 0x14, 0x39, 0x29, 0x69, 0x6a, 0x82, 0x4c, 0x55, 0x3e, 0x37, // /rAFt/.9)ij.LU>7 + 0x48, 0x24, 0x24, 0x18, 0x0f, 0x04, 0x04, 0x02, 0x0d, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // H$$............. + 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x4a, 0x00, 0x00, 0x15, 0x37, 0x36, 0x37, 0x36, 0x37, // .......J...76767 + 0x36, 0x3f, 0x01, 0x13, 0x37, 0x3e, 0x04, 0x35, 0x3f, 0x03, 0x35, 0x26, 0x27, 0x26, 0x27, 0x37, // 6?..7>.5?.5&'&'7 + 0x05, 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x33, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, // ..327>.3........ + 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x03, 0x0f, 0x02, 0x06, 0x17, 0x16, 0x17, 0x16, 0x17, 0x06, // ................ + 0x07, 0x06, 0x07, 0x22, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x2f, 0x01, 0x26, 0x07, 0x06, 0x11, // ..."..#"'&/.&... + 0x04, 0x49, 0x4c, 0x28, 0x1d, 0x0c, 0x1b, 0x38, 0x0c, 0x08, 0x12, 0x0e, 0x0b, 0x07, 0x1d, 0x10, // .IL(...8........ + 0x16, 0x08, 0x29, 0x67, 0x1c, 0x0a, 0x13, 0x01, 0x3d, 0x27, 0x22, 0x42, 0x94, 0x21, 0x46, 0x01, // ..)g....='"B.!F. + 0x02, 0x04, 0x07, 0x06, 0x37, 0x36, 0x40, 0x25, 0x0c, 0x0c, 0x09, 0x04, 0x2c, 0x16, 0x3d, 0x26, // ....76@%....,.=& + 0x2b, 0x0c, 0x02, 0x03, 0x40, 0x37, 0x24, 0x1e, 0x01, 0x06, 0x07, 0x02, 0x12, 0x05, 0x18, 0x12, // +...@7$......... + 0x09, 0x13, 0x13, 0x7e, 0xc6, 0x29, 0x85, 0x4a, 0x7e, 0x55, 0x01, 0x13, 0x13, 0x14, 0x25, 0x40, // ...~.).J~U....%@ + 0x8b, 0x01, 0x0c, 0x40, 0x2c, 0x51, 0x35, 0x28, 0x15, 0x01, 0x9d, 0x3f, 0x87, 0x32, 0x26, 0x16, // ...@,Q5(...?.2&. + 0x06, 0x02, 0x02, 0x67, 0x0e, 0x02, 0x09, 0x02, 0x05, 0x13, 0x13, 0x1d, 0x16, 0x13, 0x0c, 0x10, // ...g............ + 0x0f, 0x1f, 0x39, 0x2c, 0x26, 0xc7, 0x6b, 0xfe, 0xc9, 0x9e, 0xeb, 0x2d, 0x07, 0x14, 0x0f, 0x06, // ..9,&.k....-.... + 0x05, 0x05, 0x1d, 0x1d, 0x1f, 0x0a, 0x01, 0x02, 0x03, 0x04, 0x0d, 0x02, 0x01, 0x0c, 0x07, 0x00, // ................ + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0xfa, 0x05, 0x80, 0x00, 0x69, 0x00, 0x85, 0x00, 0x00, // ...........i.... + 0x13, 0x17, 0x16, 0x3b, 0x01, 0x3f, 0x01, 0x17, 0x21, 0x17, 0x16, 0x36, 0x3f, 0x02, 0x32, 0x17, // ...;.?..!..6?.2. + 0x1c, 0x01, 0x1f, 0x01, 0x07, 0x14, 0x07, 0x06, 0x07, 0x26, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x27, // .........&'..'&' + 0x26, 0x22, 0x06, 0x23, 0x22, 0x07, 0x06, 0x1f, 0x01, 0x11, 0x13, 0x07, 0x06, 0x17, 0x16, 0x17, // &".#"........... + 0x32, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x23, // 2..........#"'&# + 0x22, 0x07, 0x06, 0x23, 0x26, 0x35, 0x27, 0x35, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, // "..#&5'56767676' + 0x03, 0x26, 0x36, 0x34, 0x26, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x02, 0x07, // .&64&'&'&#"..... + 0x0e, 0x01, 0x23, 0x26, 0x27, 0x11, 0x35, 0x01, 0x32, 0x16, 0x0f, 0x01, 0x06, 0x22, 0x2f, 0x01, // ..#&'.5.2...."/. + 0x26, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x3f, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x06, // &6;..#"&?.62.... + 0x2b, 0x01, 0x11, 0x51, 0x36, 0x14, 0xbf, 0x82, 0x13, 0x73, 0xd7, 0x01, 0x25, 0x22, 0x0e, 0x1c, // +..Q6....s..%".. + 0x07, 0x07, 0x2a, 0x0f, 0x0d, 0x01, 0x01, 0x01, 0x04, 0x27, 0x1d, 0x19, 0x1d, 0x08, 0x0f, 0x08, // ..*......'...... + 0x02, 0x0d, 0x0e, 0x07, 0x47, 0x88, 0x2b, 0x22, 0x21, 0x0a, 0x02, 0x01, 0x03, 0x01, 0x01, 0x0c, // ....G.+"!....... + 0x31, 0x28, 0x02, 0x20, 0x38, 0x0f, 0x1e, 0x14, 0x05, 0x03, 0x0e, 0x14, 0x6e, 0x4d, 0x48, 0xa6, // 1(. 8.......nMH. + 0x58, 0x91, 0x30, 0x16, 0x02, 0x01, 0x15, 0x3a, 0x8b, 0x14, 0x09, 0x03, 0x08, 0x02, 0x05, 0x01, // X.0....:........ + 0x01, 0x04, 0x04, 0x06, 0x08, 0x26, 0x6e, 0x2b, 0x72, 0x10, 0x0d, 0x12, 0x1a, 0x0b, 0x06, 0x1b, // .....&n+r....... + 0x07, 0x2c, 0x0c, 0x06, 0xd0, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, // .,...!..~.:.~..! + 0x50, 0x50, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, 0x50, 0x05, 0x7f, // PP!..~.:.~..!P.. + 0x1b, 0x05, 0x03, 0x01, 0x01, 0x02, 0x01, 0x10, 0x08, 0x08, 0x01, 0x01, 0x1a, 0x9d, 0x35, 0x64, // ..............5d + 0x3a, 0x20, 0x13, 0x0f, 0x03, 0x2b, 0x55, 0x18, 0x4d, 0x36, 0x02, 0x0f, 0x04, 0x02, 0x02, 0x05, // : ...+U.M6...... + 0x61, 0x27, 0x98, 0xfe, 0xb4, 0xfe, 0x99, 0x93, 0x2e, 0x27, 0x19, 0x07, 0x0a, 0x10, 0x04, 0x08, // a'.......'...... + 0x0a, 0x2d, 0x05, 0x0a, 0x13, 0x01, 0x0a, 0x08, 0x0e, 0x04, 0x16, 0x04, 0x1a, 0x09, 0x21, 0x10, // .-............!. + 0x26, 0x0c, 0x15, 0x23, 0xc0, 0xf1, 0x01, 0xac, 0x3e, 0x71, 0x5c, 0x16, 0x04, 0x05, 0x01, 0x06, // &..#....>q...... + 0x1b, 0x0b, 0x09, 0x30, 0x66, 0x21, 0x13, 0x1a, 0x1b, 0x11, 0x01, 0x29, 0x56, 0xfb, 0x02, 0x25, // ...0f!.....)V..% + 0x1a, 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0x04, 0x00, 0x25, 0x1a, 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, // ......%..%...... + 0x25, 0xfc, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x86, 0x06, 0x00, 0x05, 0x80, 0x00, 0x68, // %..............h + 0x00, 0x84, 0x00, 0x00, 0x13, 0x17, 0x16, 0x3b, 0x01, 0x3f, 0x01, 0x05, 0x21, 0x17, 0x16, 0x36, // .......;.?..!..6 + 0x3f, 0x02, 0x32, 0x17, 0x1c, 0x01, 0x1f, 0x01, 0x07, 0x14, 0x07, 0x06, 0x07, 0x26, 0x27, 0x2e, // ?.2..........&'. + 0x02, 0x27, 0x26, 0x27, 0x26, 0x22, 0x06, 0x23, 0x22, 0x07, 0x06, 0x1f, 0x01, 0x35, 0x13, 0x07, // .'&'&".#"....5.. + 0x06, 0x17, 0x16, 0x17, 0x32, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, // ....2..........# + 0x22, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x23, 0x26, 0x35, 0x27, 0x35, 0x36, 0x37, 0x36, 0x37, // "'&#"..#&5'56767 + 0x36, 0x37, 0x36, 0x11, 0x27, 0x10, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x23, 0x22, 0x06, 0x07, // 676.'.'&'&'&#".. + 0x0e, 0x02, 0x07, 0x0e, 0x01, 0x23, 0x26, 0x27, 0x11, 0x35, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, // .....#&'.5...... + 0x26, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x06, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x16, 0x1d, // &=.!.../.&4?.6.. + 0x01, 0x21, 0x35, 0x34, 0x36, 0x17, 0x51, 0x36, 0x14, 0xbf, 0x82, 0x13, 0x73, 0x01, 0xbe, 0x01, // .!546.Q6....s... + 0x3e, 0x22, 0x0e, 0x1c, 0x07, 0x07, 0x2a, 0x0f, 0x0d, 0x01, 0x01, 0x01, 0x04, 0x27, 0x1d, 0x19, // >"....*......'.. + 0x1d, 0x08, 0x0f, 0x08, 0x02, 0x0d, 0x0e, 0x07, 0x67, 0xae, 0x29, 0x5e, 0x21, 0x0a, 0x02, 0x01, // ........g.)^!... + 0x03, 0x01, 0x01, 0x0c, 0x31, 0x28, 0x02, 0x20, 0x38, 0x0f, 0x1e, 0x14, 0x05, 0x03, 0x0e, 0x14, // ....1(. 8....... + 0x6e, 0x4d, 0x48, 0xa6, 0x52, 0x97, 0x2d, 0x19, 0x02, 0x01, 0x15, 0x3a, 0x8b, 0x14, 0x09, 0x03, // nMH.R.-....:.... + 0x06, 0x05, 0x02, 0x02, 0x04, 0x06, 0x08, 0x26, 0x6e, 0x32, 0xed, 0x0e, 0x0d, 0x12, 0x1a, 0x0b, // .......&n2...... + 0x06, 0x1b, 0x07, 0x2c, 0x0c, 0x05, 0xe1, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0xfc, 0x00, 0x25, 0x1a, // ...,.......%..%. + 0xa2, 0x1a, 0x1a, 0xa2, 0x1a, 0x25, 0x04, 0x00, 0x25, 0x1a, 0x05, 0x7f, 0x1b, 0x05, 0x03, 0x01, // .....%..%....... + 0x01, 0x02, 0x01, 0x10, 0x08, 0x08, 0x01, 0x01, 0x1a, 0x9d, 0x35, 0x64, 0x3a, 0x20, 0x13, 0x0f, // ..........5d: .. + 0x03, 0x2b, 0x55, 0x18, 0x4d, 0x36, 0x02, 0x0f, 0x04, 0x02, 0x02, 0x05, 0x61, 0x27, 0x98, 0x34, // .+U.M6......a'.4 + 0xfe, 0x99, 0x93, 0x2e, 0x27, 0x19, 0x07, 0x0a, 0x10, 0x04, 0x08, 0x0a, 0x2d, 0x05, 0x0a, 0x13, // ....'.......-... + 0x01, 0x0a, 0x08, 0x0d, 0x05, 0x16, 0x04, 0x1a, 0x09, 0x21, 0x10, 0x26, 0x0c, 0x15, 0x23, 0x89, // .........!.&..#. + 0x01, 0x28, 0x2c, 0x01, 0x09, 0x0d, 0x0b, 0x04, 0x05, 0x01, 0x06, 0x1c, 0x0a, 0x09, 0x30, 0x66, // .(,...........0f + 0x21, 0x13, 0x1a, 0x1b, 0x11, 0x01, 0x29, 0x56, 0xfa, 0xf3, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, // !.....)V...:.~.. + 0x21, 0x50, 0x50, 0x21, 0x12, 0x14, 0x7e, 0x14, 0x3a, 0x14, 0x7e, 0x14, 0x12, 0x21, 0x50, 0x50, // !PP!..~.:.~..!PP + 0x21, 0x12, 0x14, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // !............... + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .../.?..%...#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, // =.463!2...&....& + 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, // &....&..&....&&. + 0x05, 0x00, 0x1a, 0x26, 0x01, 0x00, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, // ...&..&....&&... + 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfb, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, // .&..&....&&....& + 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, // ...&&...&&.f..&& + 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ...&&.f..&&...&& + 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x04, 0x00, 0x00, // .f..&&...&&..... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, // .........../.?.. + 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // %...#!"&=.463!2. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xfe, 0x80, // ..&....&&....&.. + 0x26, 0x1a, 0xfc, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x80, 0x1a, 0x26, 0x01, 0x00, 0x26, 0x1a, // &....&&....&..&. + 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xfe, 0x80, 0x26, 0x1a, 0xfd, 0x80, // ...&&....&..&... + 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, // .&&....&...&&... + 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, // &&.f..&&...&&.f. + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // .&&...&&.f..&&.. + 0x1a, 0x26, 0x26, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // .&&............. + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .../.?..%...#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, // =.463!2...&....& + 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, // &....&&....&&... + 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0x26, 0x1a, // .&&....&&....&&. + 0xfb, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ...&&....&...&&. + 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, // ..&&.f..&&...&&. + 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, // f..&&...&&.f..&& + 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ...&&........... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, // ......./.?..%... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x26, 0x1a, // #!"&=.463!2...&. + 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, // ...&&....&&....& + 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, // &....&&....&&... + 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0xc0, 0x80, // .&&....&&....&.. + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // .&&...&&.f..&&.. + 0x1a, 0x26, 0x26, 0x01, 0x66, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x66, // .&&.f..&&...&&.f + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // ..&&...&&....... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // ._.o....%...+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;.2.....+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.46;.2.....+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.46;.2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // =.463!2.....+."& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.46;.2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // =.463!2.....#!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x00, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // =.463!2......... + 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // ................ + 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x06, 0x00, 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, // ................ + 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xfa, 0x00, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // ...@............ + 0x0d, 0x13, 0x06, 0x00, 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, // .............@.. + 0x13, 0x0d, 0xfa, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfa, 0xc0, // .........@...... + 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xe0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, // .....@.......... + 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, // ...s..........s. + 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // ................ + 0x0d, 0x13, 0x13, 0x04, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0xfc, 0xf3, // ....s........... + 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // ..........s..... + 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, // .....s.......... + 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, // .?.O......#"'.&4 + 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 7.632.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x0e, 0x09, 0xfe, 0xe0, 0x09, 0x09, // 463!2........... + 0x01, 0x20, 0x09, 0x0e, 0x0d, 0x13, 0x05, 0x80, 0x13, 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, // . .........@.... + 0x06, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, // .............@.. + 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xf9, 0x40, // .........@.....@ + 0x0d, 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x03, 0xe0, 0xfd, 0xc0, 0x0d, 0x13, 0x09, 0x01, // ................ + 0x20, 0x09, 0x1c, 0x09, 0x01, 0x20, 0x09, 0x13, 0xfc, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, // .... .......... + 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, // ....s..........s + 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, // ..........s..... + 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, // .../.?.O.......# + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x09, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // "&5.4632......#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.....#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x60, 0x09, 0xfe, 0xe0, 0x09, // "&=.463!2..`.... + 0x0e, 0x0d, 0x13, 0x13, 0x0d, 0x0e, 0x09, 0x01, 0x20, 0x05, 0xa9, 0x13, 0x0d, 0xf9, 0x40, 0x0d, // ........ .....@. + 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, // ................ + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0x40, 0x0d, 0x13, 0x13, // @...........@... + 0x0d, 0xf9, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0xc0, 0x0d, 0x13, 0x02, 0xce, 0x1c, 0x09, 0xfe, // ..@............. + 0xe0, 0x09, 0x13, 0x0d, 0x02, 0x40, 0x0d, 0x13, 0x09, 0xfe, 0xe0, 0xfe, 0x09, 0xc0, 0x0d, 0x13, // .....@.......... + 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, // .......s........ + 0x13, 0x01, 0x73, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0x73, 0xc0, 0x0d, // ..s..........s.. + 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ................ + 0x05, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x15, // ...........#"'.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, // ..#!"&5.463!2... + 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, 0x07, 0x00, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x6d, 0xa9, // .632....'.....m. + 0x77, 0xfd, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x02, 0xc0, 0x77, 0xa9, 0x01, 0x93, 0x12, 0x1b, 0x0c, // w.@w..w..w...... + 0x0d, 0x27, 0x04, 0xa0, 0xfb, 0xc0, 0x2a, 0x11, 0x05, 0x13, 0x01, 0x93, 0xa6, 0x77, 0xa9, 0xa9, // .'....*......w.. + 0x77, 0x02, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0xa5, 0x01, 0x92, 0x13, 0x05, 0x11, 0x00, 0x00, 0x00, // w..w..w......... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x1e, // ................ + 0x00, 0x2e, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x11, 0x21, 0x35, // ......."&462..!5 + 0x01, 0x17, 0x09, 0x01, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x35, // ....!".....3!265 + 0x11, 0x34, 0x26, 0x17, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, // .4&....#!"&5.463 + 0x21, 0x32, 0x16, 0x02, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x04, 0x70, 0xfa, 0x80, 0x01, 0x40, // !2...p.pp..p...@ + 0xa0, 0x02, 0x00, 0x02, 0x00, 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, 0x0d, 0x13, 0x13, // ............@... + 0x93, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x04, 0x10, 0xa0, // .^B..B^^B.@B^... + 0x70, 0x70, 0xa0, 0x70, 0xfd, 0xc0, 0xfe, 0x40, 0xc0, 0x01, 0x40, 0xa0, 0x02, 0x00, 0x01, 0x20, // pp.p...@..@.... + 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x20, 0xfb, 0x40, 0x42, // ...@........ .@B + 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x05, 0xeb, // ^^B..B^^........ + 0x05, 0x6b, 0x00, 0x06, 0x00, 0x14, 0x00, 0x19, 0x00, 0x25, 0x00, 0x00, 0x21, 0x37, 0x27, 0x07, // .k.......%..!7'. + 0x15, 0x33, 0x15, 0x01, 0x34, 0x23, 0x22, 0x07, 0x01, 0x06, 0x15, 0x14, 0x33, 0x32, 0x37, 0x01, // .3..4#".....327. + 0x36, 0x27, 0x09, 0x01, 0x21, 0x11, 0x01, 0x14, 0x0f, 0x01, 0x01, 0x37, 0x36, 0x33, 0x32, 0x1f, // 6'..!......7632. + 0x01, 0x16, 0x01, 0x6b, 0x5b, 0xeb, 0x5b, 0x80, 0x02, 0x76, 0x16, 0x0a, 0x07, 0xfd, 0xe2, 0x07, // ...k[.[..v...... + 0x16, 0x0a, 0x07, 0x02, 0x1e, 0x07, 0x36, 0x01, 0xa0, 0xfc, 0xc0, 0xfe, 0x60, 0x05, 0xeb, 0x25, // ......6.....`..% + 0xa6, 0xfe, 0x60, 0xa6, 0x24, 0x36, 0x35, 0x26, 0xeb, 0x25, 0x5b, 0xeb, 0x5b, 0x6b, 0x80, 0x03, // ..`.$65&.%[.[k.. + 0xa0, 0x16, 0x07, 0xfd, 0xe2, 0x07, 0x0a, 0x16, 0x07, 0x02, 0x1e, 0x07, 0xca, 0xfe, 0x60, 0xfc, // ..............`. + 0xc0, 0x01, 0xa0, 0x02, 0xe0, 0x35, 0x25, 0xa6, 0x01, 0xa0, 0xa5, 0x26, 0x26, 0xea, 0x27, 0x00, // .....5%....&&.'. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x17, 0x00, 0x00, // ................ + 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, 0x07, 0x01, 0x0e, 0x01, 0x22, 0x26, // .4&"...2......"& + 0x27, 0x01, 0x26, 0x35, 0x34, 0x00, 0x20, 0x00, 0x03, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x01, // '.&54. ......... + 0x96, 0x21, 0xfe, 0x94, 0x10, 0x3f, 0x48, 0x3f, 0x0f, 0xfe, 0x93, 0x21, 0x01, 0x2c, 0x01, 0xa8, // .!...?H?...!.,.. + 0x01, 0x2c, 0x03, 0x16, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x00, 0x6d, 0x46, 0xfc, 0xfa, 0x21, // .,.........mF..! + 0x26, 0x26, 0x21, 0x03, 0x06, 0x46, 0x6d, 0xd4, 0x01, 0x2c, 0xfe, 0xd4, 0x00, 0x02, 0x00, 0x00, // &&!..Fm..,...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x13, 0x00, 0x00, 0x25, 0x11, 0x22, 0x0e, // ............%.". + 0x01, 0x10, 0x1e, 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // ........ $...$ . + 0x03, 0x00, 0x94, 0xfa, 0x92, 0x92, 0xfa, 0x03, 0x94, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .............^.. + 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x60, 0x04, 0x40, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, // ...a...a`.@..... + 0x92, 0x02, 0xf1, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // ....^.....a...a. + 0xce, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x05, 0xc0, 0x00, 0x15, // ................ + 0x00, 0x2d, 0x00, 0x00, 0x01, 0x34, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x22, 0x07, 0x0e, 0x03, 0x07, // .-...4'..'&".... + 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x25, 0x14, 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, 0x3e, 0x03, // ....26%.. .547>. + 0x37, 0x3e, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x02, 0x00, 0x14, 0x01, 0x1d, 0x16, // 7>.2............ + 0x1c, 0x07, 0x04, 0x22, 0x04, 0x07, 0x1c, 0x16, 0x1d, 0x01, 0x14, 0x4b, 0x6a, 0x4b, 0x02, 0x00, // ...".......KjK.. + 0xfe, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0x51, 0x06, 0x71, 0x59, 0x6e, 0x1c, 0x09, 0x32, 0x34, 0x33, // ...X..Q.qYn..243 + 0x08, 0x1c, 0x6e, 0x59, 0x71, 0x06, 0x51, 0x01, 0x80, 0x24, 0x21, 0x01, 0x2b, 0x21, 0x37, 0x17, // ..nYq.Q..$!.+!7. + 0x10, 0x10, 0x17, 0x37, 0x21, 0x2b, 0x01, 0x21, 0x24, 0x35, 0x4b, 0x4b, 0xb5, 0xd4, 0xfe, 0xd4, // ...7!+.!$5KK.... + 0x01, 0x2c, 0xd4, 0x91, 0x82, 0x09, 0xa3, 0x8b, 0xd9, 0x5d, 0x1e, 0x22, 0x22, 0x1e, 0x5d, 0xd9, // .,.......]."".]. + 0x8b, 0xa3, 0x09, 0x7f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf8, 0x05, 0x80, 0x00, 0x06, // ................ + 0x00, 0x0e, 0x00, 0x39, 0x00, 0x3e, 0x00, 0x48, 0x00, 0x00, 0x01, 0x37, 0x27, 0x07, 0x15, 0x33, // ...9.>.H...7'..3 + 0x15, 0x00, 0x26, 0x07, 0x01, 0x06, 0x16, 0x37, 0x01, 0x13, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, // ..&....7.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, 0x16, 0x17, 0x16, 0x0f, 0x01, 0x06, 0x27, // &5.463!2.......' + 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, // &#!".....3!26=.4 + 0x3f, 0x01, 0x36, 0x16, 0x03, 0x09, 0x01, 0x21, 0x11, 0x01, 0x07, 0x01, 0x37, 0x36, 0x32, 0x1f, // ?.6....!....762. + 0x01, 0x16, 0x14, 0x03, 0x78, 0x74, 0x98, 0x74, 0x60, 0x02, 0x00, 0x20, 0x11, 0xfe, 0xa2, 0x11, // ....xt.t`.. .... + 0x20, 0x11, 0x01, 0x5e, 0x51, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x3f, // ..^Q.w..w..w.@? + 0x36, 0x0f, 0x03, 0x03, 0x0c, 0x31, 0x0e, 0x12, 0x17, 0x16, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, // 6....1......B^^B + 0x03, 0x40, 0x42, 0x5e, 0x09, 0x40, 0x0f, 0x28, 0x60, 0x01, 0x20, 0xfd, 0x60, 0xfe, 0xe0, 0x04, // .@B^.@.(`. .`... + 0x5c, 0x5c, 0xfe, 0xe0, 0x5c, 0x1c, 0x50, 0x1c, 0x98, 0x1c, 0x01, 0x60, 0x74, 0x98, 0x74, 0x38, // ......P....`t.t8 + 0x60, 0x02, 0xc0, 0x20, 0x11, 0xfe, 0xa2, 0x11, 0x20, 0x11, 0x01, 0x5e, 0xfd, 0xcf, 0xbe, 0x77, // `.. .... ..^...w + 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x19, 0x07, 0x10, 0x11, 0x0c, 0x31, 0x0e, 0x06, 0x06, // ..w.@w......1... + 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x7e, 0x0d, 0x09, 0x40, 0x0f, 0x10, 0x02, 0xcd, // ^B..B^^B~..@.... + 0xfe, 0xe0, 0xfd, 0x60, 0x01, 0x20, 0x02, 0x1c, 0x5c, 0x01, 0x20, 0x5c, 0x1c, 0x1c, 0x98, 0x1c, // ...`. .... ..... + 0x50, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x2b, // P..............+ + 0x00, 0x5a, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .Z......#!"&5.46 + 0x33, 0x21, 0x31, 0x32, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x06, 0x15, // 3!12.......+.".. + 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, // ...3!26=.47676.. + 0x13, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x23, 0x20, 0x07, 0x06, 0x13, 0x16, 0x07, // ...#"'&=.# ..... + 0x06, 0x23, 0x22, 0x27, 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x07, 0x3b, 0x01, 0x35, 0x34, 0x37, 0x36, // .#"'..54>.;.5476 + 0x33, 0x32, 0x17, 0x01, 0x16, 0x14, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, // 32.......w..w..w + 0x00, 0xff, 0x0d, 0x13, 0x1a, 0x4d, 0x38, 0x0a, 0x06, 0x70, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, // .....M8..pB^^B.@ + 0x42, 0x5e, 0x12, 0x1c, 0x1a, 0x10, 0x13, 0x15, 0xed, 0xfe, 0x80, 0x12, 0x1b, 0x0c, 0x0d, 0x27, // B^.............' + 0xa0, 0xfe, 0xbd, 0x73, 0x77, 0x2d, 0x03, 0x17, 0x08, 0x04, 0x10, 0x0a, 0x0a, 0x16, 0x39, 0x2a, // ...sw-........9* + 0x23, 0x07, 0x15, 0x23, 0x3b, 0x4e, 0x6f, 0x8a, 0xb5, 0x6a, 0xa0, 0x27, 0x0d, 0x0c, 0x1a, 0x13, // #..#;No..j.'.... + 0x01, 0x80, 0x13, 0x02, 0x23, 0xfe, 0xfd, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x13, // ....#..w..w.@w.. + 0x0d, 0x1b, 0x05, 0x1a, 0x22, 0x04, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0xd6, 0x13, // ....".^B..B^^B.. + 0x0a, 0x0d, 0x18, 0x10, 0x08, 0x09, 0x01, 0xdc, 0xfe, 0x80, 0x13, 0x05, 0x11, 0x2a, 0xc0, 0x83, // .............*.. + 0x89, 0xfe, 0xb0, 0x17, 0x0b, 0x02, 0x0d, 0x0e, 0x22, 0x67, 0x60, 0x84, 0x38, 0x31, 0x54, 0x60, // ........"g`.81T` + 0x50, 0x53, 0x41, 0x3a, 0x27, 0x16, 0xc0, 0x2a, 0x11, 0x05, 0x13, 0xfe, 0x80, 0x13, 0x34, 0x00, // PSA:'..*......4. + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7f, 0x05, 0x80, 0x00, 0x2f, 0x00, 0x44, 0x00, 0x00, // .........../.D.. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, // ....#!"&5.463!2. + 0x16, 0x17, 0x16, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // ......#"'&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, // ..3!26=.4?.632.. + 0x13, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, // ..."'.&4?.62...6 + 0x32, 0x1f, 0x01, 0x16, 0x14, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, // 2.......w..w..w. + 0x40, 0x3f, 0x36, 0x0f, 0x03, 0x03, 0x0c, 0x31, 0x0a, 0x0d, 0x03, 0x06, 0x17, 0x16, 0xfc, 0xc0, // @?6....1........ + 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0x09, 0x40, 0x0a, 0x0d, 0x06, 0x06, 0x14, 0xe7, // B^^B.@B^.@...... + 0xfc, 0xd2, 0x18, 0x42, 0x18, 0xfe, 0x52, 0x18, 0x18, 0x6e, 0x18, 0x42, 0x18, 0x01, 0x07, 0x02, // ...B..R..n.B.... + 0x87, 0x18, 0x42, 0x18, 0x6e, 0x18, 0x02, 0x5e, 0xfe, 0xc2, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, // ..B.n..^..w..w.@ + 0x77, 0xa9, 0x19, 0x07, 0x10, 0x11, 0x0c, 0x31, 0x0a, 0x02, 0x06, 0x5e, 0x42, 0xfc, 0xc0, 0x42, // w......1...^B..B + 0x5e, 0x5e, 0x42, 0xfe, 0x0d, 0x09, 0x40, 0x0a, 0x03, 0x08, 0x01, 0xd4, 0xfc, 0xd2, 0x18, 0x18, // ^^B...@......... + 0x01, 0xae, 0x18, 0x42, 0x18, 0x6e, 0x18, 0x18, 0xfe, 0xf9, 0x02, 0x87, 0x18, 0x18, 0x6e, 0x18, // ...B.n........n. + 0x42, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x43, // B..............C + 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x11, 0x33, 0x32, 0x16, // ......."&=.!.32. + 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x21, 0x15, 0x14, // ...."'.&46;..!.. + 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x11, 0x23, // ."'.&47.62...!.# + 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x21, // "&47.62.....+..! + 0x35, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfe, 0x80, // 5462........4&.. + 0x80, 0x1a, 0x26, 0x13, 0xff, 0x00, 0x13, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0xfe, // ..&....4....&... + 0x80, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x01, 0x80, 0x80, // .&4........4&... + 0x1a, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x01, 0x80, // .&....4....&.... + 0x26, 0x34, 0x13, 0x01, 0x00, 0x02, 0x9a, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0xfe, // &4.....4....&... + 0x80, 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x01, 0x80, 0x80, // .&4........4&... + 0x1a, 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x01, 0x80, // .&....4....&.... + 0x26, 0x34, 0x13, 0x01, 0x00, 0x13, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfe, 0x80, 0x80, 0x1a, // &4........4&.... + 0x26, 0x13, 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x1d, // &............... + 0x00, 0x00, 0x01, 0x36, 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, // ...6.....'.&'... + 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x36, 0x37, // +."&5.46;.2...67 + 0x03, 0xd3, 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // .......:..&...&& + 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x09, 0x05, 0x73, 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, // ...&...s....@... + 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x5a, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .....Z.&&....&&. + 0xfd, 0x5a, 0x0b, 0x08, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2b, // .Z.............+ + 0x00, 0x00, 0x01, 0x36, 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, // ...6.....'.&'... + 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, // '.&'...+."&5.46; + 0x01, 0x32, 0x16, 0x15, 0x11, 0x36, 0x37, 0x01, 0x36, 0x16, 0x15, 0x11, 0x36, 0x37, 0x06, 0xd3, // .2...67.6...67.. + 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x1a, 0x13, 0xfd, 0x3a, 0x09, 0x04, 0x26, 0x1a, // .....:.....:..&. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x04, 0x09, 0x02, 0xc6, 0x13, 0x1a, 0x04, 0x09, // ..&&...&........ + 0x05, 0x73, 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x3a, // .s....@........: + 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x5a, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, // ........Z.&&.... + 0x26, 0x26, 0x1a, 0xfd, 0x5a, 0x0b, 0x08, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfd, 0x3a, 0x0b, 0x08, // &&..Z........:.. + 0x00, 0x01, 0x00, 0x7a, 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x19, 0x00, 0x00, 0x01, 0x36, // ...z...........6 + 0x16, 0x15, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x34, // .....'.&'...'.&4 + 0x37, 0x01, 0x36, 0x16, 0x15, 0x11, 0x36, 0x37, 0x06, 0x53, 0x13, 0x1a, 0x1a, 0x13, 0xfd, 0x3a, // 7.6...67.S.....: + 0x08, 0x05, 0x1a, 0x13, 0xfd, 0x3a, 0x13, 0x13, 0x02, 0xc6, 0x13, 0x1a, 0x05, 0x08, 0x05, 0x73, // .....:.........s + 0x13, 0x0c, 0x1a, 0xfa, 0x40, 0x1a, 0x0c, 0x13, 0x02, 0xc6, 0x09, 0x0a, 0xfd, 0x3a, 0x1a, 0x0c, // ....@........:.. + 0x13, 0x02, 0xc6, 0x13, 0x34, 0x13, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfd, 0x3a, 0x0b, 0x08, 0x00, // ....4.......:... + 0x00, 0x01, 0x00, 0x00, 0xff, 0x7c, 0x05, 0x7f, 0x05, 0x84, 0x00, 0x0b, 0x00, 0x00, 0x09, 0x01, // .....|.......... + 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x05, 0x68, 0xfa, 0xd0, 0x17, 0x21, // .&5.46.....h...! + 0x21, 0x17, 0x05, 0x30, 0x17, 0x02, 0x61, 0xfd, 0x1e, 0x0d, 0x14, 0x1a, 0x05, 0xc0, 0x1a, 0x14, // !..0..a......... + 0x0d, 0xfd, 0x1e, 0x0d, 0x24, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ....$........... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ............#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // 5.463!2.....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, // 5.463!2...&....& + 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0xfc, 0x80, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x26, 0x1a, // &....&..&....&&. + 0x02, 0x00, 0x1a, 0x26, 0x05, 0x40, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, // ...&.@...&&....& + 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, // &....&&....&&... + 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x11, // ................ + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, // ..#!"&5.463!2... + 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x05, 0x40, 0xfa, 0x80, // &....&&....&.@.. + 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .&&....&&....... + 0xff, 0x80, 0x06, 0x06, 0x05, 0x80, 0x00, 0x19, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, // ............&5.4 + 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x07, 0x01, 0x06, 0x26, // 6.....46.......& + 0x35, 0x11, 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x08, 0x05, 0x1a, 0x13, 0x02, // 5...-........... + 0xc6, 0x13, 0x13, 0xfd, 0x3a, 0x13, 0x1a, 0x05, 0x08, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, // ....:....s...... + 0x0c, 0x13, 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xc6, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x13, 0x34, 0x13, // ...:........:.4. + 0xfd, 0x3a, 0x13, 0x0c, 0x1a, 0x02, 0xc6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .:.............. + 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, // .......+....&5.4 + 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x3b, // 6.....46.....46; + 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x06, 0x07, 0x01, // .2.....+."&5.... + 0x06, 0x26, 0x35, 0x11, 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x08, 0x05, 0x1a, // .&5...-......... + 0x13, 0x02, 0xc6, 0x08, 0x05, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, // .....&...&&...&. + 0x08, 0xfd, 0x3a, 0x13, 0x1a, 0x05, 0x08, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, 0x0c, 0x13, // ..:....s........ + 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xc6, 0x1a, 0x0c, 0x13, 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xa6, 0x1a, // .:........:..... + 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0xa6, 0x0a, 0x09, 0xfd, 0x3a, 0x13, // &&....&&......:. + 0x0c, 0x1a, 0x02, 0xc6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, // ................ + 0x05, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x17, 0x06, 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, // ........&5.46... + 0x17, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, // ..46;.2.....+."& + 0x35, 0x11, 0x06, 0x07, 0x2d, 0x13, 0x1a, 0x1a, 0x13, 0x02, 0xc6, 0x08, 0x05, 0x26, 0x1a, 0x80, // 5...-........&.. + 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x05, 0x08, 0x73, 0x13, 0x0c, 0x1a, 0x05, 0xc0, 0x1a, // .&&...&..s...... + 0x0c, 0x13, 0xfd, 0x3a, 0x08, 0x0b, 0x02, 0xa6, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, // ...:.....&&....& + 0x26, 0x1a, 0x02, 0xa6, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x06, 0x01, // &............... + 0x05, 0x06, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x00, 0x13, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x06, // ..........62.... + 0x23, 0x21, 0x22, 0x26, 0x01, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // #!"&.!"&5.463!2. + 0x15, 0x11, 0x14, 0x06, 0x0e, 0x02, 0xc6, 0x13, 0x34, 0x13, 0x02, 0xc6, 0x13, 0x0c, 0x1a, 0xfa, // ........4....... + 0x40, 0x1a, 0x0c, 0x05, 0xc6, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0x26, // @.......&&....&& + 0x02, 0x2d, 0x02, 0xc6, 0x13, 0x13, 0xfd, 0x3a, 0x13, 0x1a, 0x1a, 0xfd, 0xe6, 0x26, 0x1a, 0x01, // .-.....:.....&.. + 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x35, // ..&&....&......5 + 0xff, 0xb6, 0x04, 0x0b, 0x05, 0xcb, 0x00, 0x14, 0x00, 0x00, 0x05, 0x01, 0x26, 0x34, 0x37, 0x01, // ............&47. + 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x02, // 62............". + 0xe6, 0xfd, 0x74, 0x25, 0x25, 0x02, 0x8c, 0x25, 0x6b, 0x25, 0x4b, 0x25, 0x25, 0xfe, 0x1a, 0x01, // ..t%%..%k%K%%... + 0xe6, 0x25, 0x25, 0x4b, 0x25, 0x6b, 0x25, 0x02, 0x8b, 0x25, 0x6b, 0x25, 0x02, 0x8b, 0x25, 0x25, // .%%K%k%..%k%..%% + 0x4b, 0x25, 0x6b, 0x25, 0xfe, 0x1a, 0xfe, 0x1b, 0x26, 0x6a, 0x25, 0x4b, 0x25, 0x00, 0x00, 0x00, // K%k%....&j%K%... + 0x00, 0x01, 0x00, 0x75, 0xff, 0xb5, 0x04, 0x4b, 0x05, 0xcb, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, // ...u...K........ + 0x07, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x09, 0x01, 0x26, 0x35, 0x34, 0x3f, // ..."/.&547..&54? + 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x04, 0x4b, 0x25, 0xfd, 0x74, 0x25, 0x6a, 0x25, 0x4c, 0x25, // .62....K%.t%j%L% + 0x25, 0x01, 0xe6, 0xfe, 0x1a, 0x25, 0x25, 0x4c, 0x24, 0x6c, 0x24, 0x02, 0x8c, 0x25, 0x02, 0xc0, // %....%%L$l$..%.. + 0x34, 0x27, 0xfd, 0x75, 0x25, 0x25, 0x4b, 0x27, 0x34, 0x35, 0x25, 0x01, 0xe6, 0x01, 0xe5, 0x27, // 4'.u%%K'45%....' + 0x34, 0x35, 0x25, 0x4b, 0x26, 0x26, 0xfd, 0x75, 0x25, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // 45%K&&.u%....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // .......#./...54& + 0x23, 0x21, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x21, 0x22, 0x06, 0x1d, 0x01, // #!.4&+."...!"... + 0x14, 0x16, 0x33, 0x21, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x21, 0x32, 0x36, // ..3!...;.265.!26 + 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0xc0, 0x26, 0x1a, // .... $...$ ...&. + 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x26, // ..&...&...&&...& + 0x1a, 0x80, 0x1a, 0x26, 0x01, 0x00, 0x1a, 0x26, 0x01, 0x40, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // ...&...&.@....^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, 0x1a, 0x26, 0x01, 0x00, // ....a...a.@..&.. + 0x1a, 0x26, 0x26, 0x1a, 0xff, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xff, 0x00, 0x1a, 0x26, 0x26, // .&&...&...&...&& + 0x1a, 0x01, 0x00, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // ...&.+.^.....a.. + 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // .a.............. + 0x00, 0x1b, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, // .....54&#!"..... + 0x33, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // 3!26.... $...$ . + 0x04, 0xc0, 0x26, 0x1a, 0xfd, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0x01, 0x40, // ..&....&&....&.@ + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, // ....^.....a...a. + 0x40, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, // @..&&...&&.+.^.. + 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ...a...a........ + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x2b, 0x00, 0x37, 0x00, 0x00, 0x01, 0x34, 0x2f, 0x01, // .......+.7...4/. + 0x37, 0x36, 0x35, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x27, 0x26, 0x23, 0x22, 0x0f, // 7654/.&#"..'&#". + 0x01, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x07, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x3f, // .............32? + 0x01, 0x17, 0x16, 0x33, 0x32, 0x3f, 0x01, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ...32?.6.... $.. + 0x12, 0x24, 0x20, 0x04, 0x04, 0x7d, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, 0x1b, 0x1a, 0x13, // .$ ..}.....Z.... + 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, 0x1b, // ......Z......Z.. + 0x1a, 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x01, 0x83, 0xce, 0xfe, 0x9f, 0xfe, // ........Z....... + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0x9e, 0x1a, 0x13, 0xb5, // ^.....a...a..... + 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, 0x1b, 0x1a, // .....Z......Z... + 0x13, 0xb5, 0xb5, 0x13, 0x1a, 0x1b, 0x13, 0x5a, 0x13, 0x13, 0xb5, 0xb5, 0x13, 0x13, 0x5a, 0x13, // .......Z......Z. + 0x01, 0xce, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // ...^.....a...a.. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, 0x00, 0x23, 0x00, 0x00, // .............#.. + 0x01, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, // .4/.&"..'&"..... + 0x17, 0x01, 0x16, 0x33, 0x32, 0x37, 0x01, 0x3e, 0x01, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ...327.>.... $.. + 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0x5b, 0x13, 0x34, 0x13, 0xfe, 0x68, 0xe2, 0x13, 0x34, // .$ ....[.4..h..4 + 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x13, 0x1a, 0x1b, 0x13, 0x02, 0x1f, 0x12, 0xfc, 0xce, 0xfe, // .[...j.......... + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, 0x22, 0x1c, // ..^.....a...a.". + 0x12, 0x5a, 0x13, 0x13, 0xfe, 0x69, 0xe2, 0x13, 0x13, 0x5a, 0x12, 0x1c, 0x1b, 0x12, 0xfe, 0x96, // .Z...i...Z...... + 0x13, 0x13, 0x02, 0x1f, 0x12, 0x4a, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // .....J.^.....a.. + 0x01, 0x61, 0xce, 0xce, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // .a.............. + 0x00, 0x3a, 0x00, 0x46, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // .:.F..%54&+."... + 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x07, 0x06, 0x1f, 0x01, // ..;.26.4..#".... + 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, // .32767632....... + 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x04, 0x24, 0x10, // ....;.265467>.$. + 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x80, 0x12, 0x0e, 0xc0, 0x0e, // .. $...$ ....... + 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x01, 0x00, 0x6f, 0xa6, 0x57, 0xf3, 0x80, 0x0f, 0x17, 0x84, // ........o.W..... + 0x07, 0x0c, 0x10, 0x09, 0x35, 0x21, 0x22, 0x34, 0x30, 0x4b, 0x28, 0x30, 0x3f, 0x69, 0x12, 0x0e, // ....5!"40K(0?i.. + 0xc0, 0x0e, 0x12, 0x2b, 0x21, 0x20, 0x22, 0x3a, 0x1f, 0x19, 0x01, 0x80, 0xce, 0xfe, 0x9f, 0xfe, // ...+! ":........ + 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xa0, 0xc0, 0x0e, 0x12, 0x12, // ^.....a...a..... + 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x02, 0xae, 0x58, 0x96, 0x52, 0xd5, 0x18, 0x12, 0x64, 0x06, 0x0c, // .......X.R...d.. + 0x44, 0x18, 0x18, 0x34, 0x21, 0x26, 0x2e, 0x16, 0x1c, 0x75, 0x43, 0x24, 0x0e, 0x12, 0x12, 0x0e, // D..4!&...uC$.... + 0x13, 0x3d, 0x13, 0x12, 0x15, 0x31, 0x2f, 0x4a, 0x3d, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // .=...1/J=.^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // a...a........... + 0x05, 0x80, 0x00, 0x1e, 0x00, 0x2e, 0x00, 0x3a, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, // .......:..%54&+. + 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x11, 0x23, 0x22, // .4&#!".....;..#" + 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x03, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, // .....3!26.54&+." + 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x04, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // .....;.26.... $. + 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x00, 0x12, 0x0e, 0x60, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, // ..$ .....`...... + 0x12, 0x0e, 0x60, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc0, 0x0e, 0x12, 0x80, 0x12, 0x0e, 0xc0, // ..``............ + 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x02, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .............^.. + 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xa0, 0xa0, 0x0e, 0x12, 0x02, 0x00, 0x0e, 0x12, // ...a...a........ + 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0xfe, 0xc0, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0x03, 0x8e, 0xa0, // ................ + 0x0e, 0x12, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x12, 0xc1, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..........^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // a...a........... + 0x05, 0x80, 0x00, 0x2f, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .../._...#"&=.46 + 0x3b, 0x01, 0x2e, 0x01, 0x27, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x0e, 0x01, // ;...'...+."&=... + 0x07, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x1e, 0x01, 0x17, 0x35, 0x34, 0x36, // .32.....+....546 + 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x3e, 0x01, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x0e, 0x01, // ;.2...>.....+... + 0x07, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x2e, 0x01, 0x27, 0x23, 0x22, 0x26, // ....+."&=...'#"& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x3e, 0x01, 0x37, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, // =.46;.>.7546;.2. + 0x1d, 0x01, 0x1e, 0x01, 0x17, 0x33, 0x32, 0x16, 0x04, 0xad, 0x6d, 0x1a, 0x26, 0x26, 0x1a, 0x6d, // .....32...m.&&.m + 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, 0x26, 0x1a, // .l&...&l. m.&&. + 0x6d, 0x20, 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x01, 0x73, 0x26, 0x1a, 0x8f, // m .l&...&l..s&.. + 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x26, 0x1a, // %..&...&..%..&&. + 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x02, // .%..&...&..%..&. + 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, 0x26, 0x1a, 0x6d, 0x20, // .&...&l. m.&&.m + 0xa1, 0x6c, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x6c, 0xa1, 0x20, 0x6d, 0x1a, 0x26, 0x26, 0x1a, 0x6d, // .l&...&l. m.&&.m + 0x20, 0xa1, 0x01, 0x2c, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x26, 0x1a, 0x8f, // ..,..&..%..&&.. + 0x25, 0xeb, 0xa1, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa1, 0xeb, 0x25, 0x8f, 0x1a, 0x26, 0x26, 0x1a, // %..&...&..%..&&. + 0x8f, 0x25, 0xeb, 0xa1, 0x26, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .%..&........... + 0x05, 0x80, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x06, 0x22, 0x2f, 0x01, // ...#./.;....."/. + 0x07, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, // .."/.&4?.'&4?.62 + 0x1f, 0x01, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x17, 0x16, 0x14, 0x36, 0x10, // ..762.........6. + 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, // .. ..... 6.... $ + 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x49, 0x92, 0x0a, 0x1a, 0x0a, 0x89, 0x89, 0x0a, 0x1a, // ...$ ..I........ + 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, 0x0a, 0x89, 0x89, 0x0a, 0x1a, // ................ + 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0xcd, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, // ................ + 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // .(..r....^.....a + 0x01, 0xa2, 0x01, 0x61, 0x01, 0xc9, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, // ...a............ + 0x0a, 0x89, 0x89, 0x0a, 0x1a, 0x0a, 0x92, 0x0a, 0x0a, 0x89, 0x89, 0x0a, 0x0a, 0x92, 0x0a, 0x1a, // ................ + 0x0a, 0x89, 0x89, 0x0a, 0x1a, 0x19, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, // .......(........ + 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // .._.^.....a...a. + 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // ................ + 0x00, 0x20, 0x00, 0x2c, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, // . .,....."'.&4?. + 0x36, 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x16, 0x10, 0x2e, 0x01, 0x20, // 62...62........ + 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, // ..... 6.... $... + 0x24, 0x20, 0x04, 0x04, 0x93, 0xfe, 0x5a, 0x13, 0x34, 0x13, 0xfe, 0xda, 0x13, 0x13, 0x66, 0x13, // $ ....Z.4.....f. + 0x34, 0x13, 0x93, 0x01, 0x13, 0x13, 0x34, 0x13, 0x66, 0x13, 0x7a, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, // 4.....4.f.z..... + 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // ....(..r....^... + 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xd3, 0xfe, 0x5a, 0x13, 0x13, 0x01, 0x26, 0x13, // ..a...a...Z...&. + 0x34, 0x13, 0x66, 0x13, 0x13, 0x93, 0x01, 0x13, 0x13, 0x13, 0x66, 0x13, 0x34, 0xfa, 0x01, 0x28, // 4.f.......f.4..( + 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // .........._.^... + 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..a...a......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x85, 0x00, 0x09, 0x00, 0x12, 0x00, 0x22, 0x00, 0x00, 0x01, 0x34, // ..........."...4 + 0x27, 0x01, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x05, 0x01, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x15, 0x14, // '..32>...&#".... + 0x00, 0x10, 0x02, 0x06, 0x04, 0x20, 0x24, 0x26, 0x02, 0x10, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, // ..... $&...6$ .. + 0x05, 0x20, 0x57, 0xfd, 0x0e, 0x89, 0xa0, 0x6f, 0xc9, 0x92, 0x56, 0xfc, 0x19, 0x02, 0xf3, 0x87, // . W....o..V..... + 0xa5, 0x94, 0xfa, 0x92, 0x05, 0x20, 0x7a, 0xcd, 0xfe, 0xe3, 0xfe, 0xc8, 0xfe, 0xe3, 0xcd, 0x7a, // ..... z........z + 0x7a, 0xcd, 0x01, 0x1d, 0x01, 0x38, 0x01, 0x1d, 0xcd, 0x02, 0x83, 0xa1, 0x86, 0xfd, 0x0f, 0x59, // z....8.........Y + 0x57, 0x92, 0xcb, 0xbc, 0x02, 0xf2, 0x5b, 0x92, 0xfc, 0x94, 0xa2, 0x01, 0x3f, 0xfe, 0xc6, 0xfe, // W.....[.....?... + 0xe2, 0xce, 0x7a, 0x7a, 0xce, 0x01, 0x1e, 0x01, 0x3a, 0x01, 0x1d, 0xce, 0x7a, 0x7a, 0xce, 0x00, // ..zz....:...zz.. + 0x00, 0x01, 0x00, 0x40, 0xff, 0x35, 0x06, 0x00, 0x05, 0x4b, 0x00, 0x20, 0x00, 0x00, 0x01, 0x15, // ...@.5...K. .... + 0x14, 0x06, 0x23, 0x21, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, // ..#!......#"'.&5 + 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x01, 0x21, 0x32, 0x16, 0x06, // 47.632......!2.. + 0x00, 0x41, 0x34, 0xfd, 0x40, 0x01, 0x25, 0x26, 0x26, 0x4b, 0x25, 0x35, 0x34, 0x27, 0xfd, 0x75, // .A4.@.%&&K%54'.u + 0x25, 0x25, 0x02, 0x8b, 0x26, 0x35, 0x34, 0x26, 0x4b, 0x26, 0x26, 0xfe, 0xdb, 0x02, 0xc0, 0x34, // %%..&54&K&&....4 + 0x41, 0x02, 0x80, 0x80, 0x35, 0x4b, 0xfe, 0xda, 0x24, 0x6c, 0x24, 0x4c, 0x25, 0x25, 0x02, 0x8c, // A...5K..$l$L%%.. + 0x25, 0x35, 0x34, 0x27, 0x02, 0x8a, 0x26, 0x26, 0x4a, 0x26, 0x6a, 0x26, 0xfe, 0xdb, 0x4b, 0x00, // %54'..&&J&j&..K. + 0x00, 0x01, 0x00, 0x00, 0xff, 0x35, 0x05, 0xc0, 0x05, 0x4b, 0x00, 0x20, 0x00, 0x00, 0x01, 0x14, // .....5...K. .... + 0x07, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x21, 0x22, 0x26, 0x3d, 0x01, // ...#"/.&47.!"&=. + 0x34, 0x36, 0x33, 0x21, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x05, // 463!.&4?.632.... + 0xc0, 0x25, 0xfd, 0x75, 0x27, 0x34, 0x33, 0x27, 0x4b, 0x26, 0x26, 0x01, 0x25, 0xfd, 0x40, 0x34, // .%.u'43'K&&.%.@4 + 0x41, 0x41, 0x34, 0x02, 0xc0, 0xfe, 0xdb, 0x26, 0x26, 0x4b, 0x26, 0x34, 0x35, 0x26, 0x02, 0x8b, // AA4....&&K&45&.. + 0x25, 0x02, 0x40, 0x36, 0x25, 0xfd, 0x75, 0x25, 0x25, 0x4b, 0x26, 0x6a, 0x26, 0x01, 0x25, 0x4b, // %.@6%.u%%K&j&.%K + 0x35, 0x80, 0x35, 0x4b, 0x01, 0x26, 0x24, 0x6c, 0x24, 0x4b, 0x26, 0x26, 0xfd, 0x75, 0x23, 0x00, // 5.5K.&$l$K&&.u#. + 0x00, 0x01, 0x00, 0x35, 0xff, 0x80, 0x06, 0x4b, 0x05, 0x40, 0x00, 0x21, 0x00, 0x00, 0x01, 0x14, // ...5...K.@.!.... + 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // ...#"'....+."&5. + 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, // .."/.&547.632... + 0x06, 0x4b, 0x25, 0x4b, 0x26, 0x35, 0x36, 0x24, 0xfe, 0xda, 0x4b, 0x35, 0x80, 0x35, 0x4b, 0xfe, // .K%K&56$..K5.5K. + 0xda, 0x24, 0x6c, 0x24, 0x4b, 0x26, 0x26, 0x02, 0x8b, 0x23, 0x37, 0x36, 0x25, 0x02, 0x8b, 0x25, // .$l$K&&..#76%..% + 0x02, 0x35, 0x33, 0x27, 0x4b, 0x26, 0x26, 0x01, 0x25, 0xfd, 0x40, 0x34, 0x41, 0x41, 0x34, 0x02, // .53'K&&.%.@4AA4. + 0xc0, 0xfe, 0xdb, 0x26, 0x26, 0x4b, 0x26, 0x34, 0x35, 0x26, 0x02, 0x8b, 0x25, 0x25, 0xfd, 0x75, // ...&&K&45&..%%.u + 0x27, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x35, 0xff, 0xb5, 0x06, 0x4b, 0x05, 0x80, 0x00, 0x22, // '......5...K..." + 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x3f, 0x01, // .......#"'.&54?. + 0x36, 0x33, 0x32, 0x17, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x01, 0x36, // 632...46;.2....6 + 0x33, 0x32, 0x1f, 0x01, 0x16, 0x06, 0x4b, 0x25, 0xfd, 0x75, 0x27, 0x34, 0x35, 0x25, 0xfd, 0x75, // 32....K%.u'45%.u + 0x26, 0x26, 0x4a, 0x27, 0x34, 0x35, 0x25, 0x01, 0x26, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0x01, 0x26, // &&J'45%.&L4.4L.& + 0x25, 0x35, 0x34, 0x27, 0x4b, 0x25, 0x02, 0xc0, 0x35, 0x25, 0xfd, 0x74, 0x25, 0x25, 0x02, 0x8c, // %54'K%..5%.t%%.. + 0x24, 0x36, 0x35, 0x26, 0x4b, 0x25, 0x25, 0xfe, 0xda, 0x02, 0xc0, 0x34, 0x4c, 0x4c, 0x34, 0xfd, // $65&K%%....4LL4. + 0x40, 0x01, 0x26, 0x25, 0x25, 0x4b, 0x27, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // @.&%%K'......... + 0x05, 0xc0, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, // ...,......."&5.# + 0x22, 0x0e, 0x05, 0x15, 0x14, 0x17, 0x14, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x02, // "..........#"'.. + 0x27, 0x02, 0x35, 0x34, 0x37, 0x12, 0x21, 0x33, 0x11, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, // '.547.!3.462.... + 0x13, 0xfe, 0x00, 0x13, 0x34, 0x26, 0xe0, 0x62, 0x9b, 0x99, 0x71, 0x62, 0x3e, 0x23, 0x05, 0x05, // ....4&.b..qb>#.. + 0x11, 0x0f, 0x10, 0x0c, 0x07, 0x0c, 0x0f, 0x03, 0x7f, 0x35, 0xa2, 0x02, 0xc9, 0xe0, 0x26, 0x34, // .........5....&4 + 0x13, 0x02, 0x00, 0x03, 0x9a, 0x34, 0x13, 0xfe, 0x00, 0x13, 0x26, 0x1a, 0x01, 0x00, 0x0c, 0x1f, // .....4....&..... + 0x36, 0x55, 0x75, 0xa0, 0x65, 0x37, 0x44, 0x06, 0x23, 0x09, 0x0f, 0x14, 0x11, 0x09, 0x1a, 0x22, // 6Uu.e7D.#......" + 0x07, 0x01, 0x1d, 0xa6, 0xc7, 0x86, 0x01, 0x93, 0x01, 0x00, 0x1a, 0x26, 0x13, 0xfe, 0x00, 0x00, // ...........&.... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, 0x00, 0x2f, 0x00, 0x00, // ............./.. + 0x00, 0x14, 0x07, 0x01, 0x17, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ........#!"&5.46 + 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x11, 0x14, 0x06, 0x22, 0x2f, 0x01, 0x01, // 2...62......"/.. + 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x27, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ."/.&47.'&463!2. + 0x02, 0xf3, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x26, 0x1a, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x34, 0x13, // .......&..@.&&4. + 0x90, 0x01, 0x4c, 0x0a, 0x1a, 0x0a, 0x72, 0x03, 0x17, 0x26, 0x34, 0x13, 0x90, 0xfe, 0xb4, 0x0a, // ..L...r..&4..... + 0x1a, 0x0a, 0x72, 0x0a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x01, // ..r...L..&....&. + 0xed, 0x1a, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x34, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, // .......4&&....&. + 0x90, 0x01, 0x4c, 0x0a, 0x0a, 0x72, 0x03, 0x49, 0xfe, 0x40, 0x1a, 0x26, 0x13, 0x90, 0xfe, 0xb4, // ..L..r.I.@.&.... + 0x0a, 0x0a, 0x72, 0x0a, 0x1a, 0x0a, 0x01, 0x4c, 0x90, 0x13, 0x34, 0x26, 0x26, 0x00, 0x00, 0x00, // ..r....L..4&&... + 0x00, 0x02, 0x00, 0x0d, 0xff, 0x8d, 0x05, 0xf3, 0x05, 0x73, 0x00, 0x17, 0x00, 0x2f, 0x00, 0x00, // .........s.../.. + 0x01, 0x11, 0x14, 0x06, 0x22, 0x2f, 0x01, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, // ...."/..."/.&47. + 0x27, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x07, 0x01, 0x17, 0x16, 0x14, 0x06, // '&463!2......... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x32, 0x1f, 0x01, 0x01, 0x36, 0x32, 0x1f, 0x01, // #!"&5.462...62.. + 0x03, 0x00, 0x26, 0x34, 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x1a, 0x0a, 0x72, 0x0a, 0x0a, 0x01, 0x4c, // ..&4.......r...L + 0x90, 0x13, 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x02, 0xf3, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x26, // ..&....&.......& + 0x1a, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x34, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x1a, 0x0a, 0x72, 0x02, // ..@.&&4...L...r. + 0x40, 0xfe, 0x40, 0x1a, 0x26, 0x13, 0x90, 0xfe, 0xb4, 0x0a, 0x0a, 0x72, 0x0a, 0x1a, 0x0a, 0x01, // @.@.&......r.... + 0x4c, 0x90, 0x13, 0x34, 0x26, 0x26, 0x02, 0x93, 0x1a, 0x0a, 0xfe, 0xb4, 0x90, 0x13, 0x34, 0x26, // L..4&&........4& + 0x26, 0x1a, 0x01, 0xc0, 0x1a, 0x26, 0x13, 0x90, 0x01, 0x4c, 0x0a, 0x0a, 0x72, 0x00, 0x00, 0x00, // &....&...L..r... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x23, 0x00, 0x00, 0x01, 0x15, // ...........#.... + 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, // ..#!...+."&5.!"& + 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x21, // =.463!.46;.2...! + 0x32, 0x16, 0x05, 0x80, 0x38, 0x28, 0xfe, 0x60, 0x38, 0x28, 0xc0, 0x28, 0x38, 0xfe, 0x60, 0x28, // 2...8(.`8(.(8.`( + 0x38, 0x38, 0x28, 0x01, 0xa0, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x01, 0xa0, 0x28, 0x38, 0x03, 0x20, // 88(..8(.(8..(8. + 0xc0, 0x28, 0x38, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x38, 0x28, 0xc0, 0x28, 0x38, // .(8.`(88(..8(.(8 + 0x01, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xfe, 0x60, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ..(88(.`8....... + 0x02, 0x00, 0x05, 0x80, 0x03, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ..............#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x80, 0x38, 0x28, 0xfb, 0x40, // "&=.463!2...8(.@ + 0x28, 0x38, 0x38, 0x28, 0x04, 0xc0, 0x28, 0x38, 0x03, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // (88(..(8. .(88(. + 0x28, 0x38, 0x38, 0x00, 0x00, 0x01, 0x00, 0x7a, 0xff, 0x80, 0x06, 0x06, 0x05, 0x80, 0x00, 0x35, // (88....z.......5 + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x27, 0x25, 0x11, 0x14, 0x06, 0x2b, 0x01, // .........'%...+. + 0x22, 0x26, 0x35, 0x11, 0x05, 0x06, 0x26, 0x2f, 0x01, 0x26, 0x36, 0x37, 0x2d, 0x01, 0x2e, 0x01, // "&5...&/.&67-... + 0x3f, 0x01, 0x3e, 0x01, 0x17, 0x05, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x25, // ?.>....46;.2...% + 0x36, 0x16, 0x1f, 0x01, 0x16, 0x06, 0x07, 0x05, 0x05, 0xca, 0x2e, 0x1b, 0x1a, 0x40, 0x1a, 0x67, // 6............@.g + 0x2e, 0xfe, 0xf6, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0xfe, 0xf6, 0x2e, 0x67, 0x1a, 0x40, 0x1a, 0x1b, // ...L4.4L...g.@.. + 0x2e, 0x01, 0x0a, 0xfe, 0xf6, 0x2e, 0x1b, 0x1a, 0x40, 0x1a, 0x67, 0x2e, 0x01, 0x0a, 0x4c, 0x34, // ........@.g...L4 + 0x80, 0x34, 0x4c, 0x01, 0x0a, 0x2e, 0x67, 0x1a, 0x40, 0x1a, 0x1b, 0x2e, 0xfe, 0xf6, 0x01, 0xe6, // .4L...g.@....... + 0x1a, 0x67, 0x2e, 0x6e, 0x2e, 0x1b, 0x1a, 0x99, 0xfe, 0xcd, 0x34, 0x4c, 0x4c, 0x34, 0x01, 0x33, // .g.n......4LL4.3 + 0x99, 0x1a, 0x1b, 0x2e, 0x6e, 0x2e, 0x67, 0x1a, 0x9a, 0x9a, 0x1a, 0x67, 0x2e, 0x6e, 0x2e, 0x1b, // ....n.g....g.n.. + 0x1a, 0x99, 0x01, 0x33, 0x34, 0x4c, 0x4c, 0x34, 0xfe, 0xcd, 0x99, 0x1a, 0x1b, 0x2e, 0x6e, 0x2e, // ...34LL4......n. + 0x67, 0x1a, 0x9a, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, // g............... + 0x00, 0x1b, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ...-... ..... $. + 0x10, 0x12, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // ...54&+.".....;. + 0x32, 0x36, 0x03, 0x13, 0x34, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, 0x15, 0x13, 0x14, 0x16, // 26..4'&+."...... + 0x3b, 0x01, 0x32, 0x36, 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // ;.26./...a.....^ + 0xfe, 0x9f, 0xce, 0xce, 0x02, 0xb2, 0x12, 0x0d, 0xc0, 0x0d, 0x14, 0x14, 0x0d, 0xc0, 0x0d, 0x12, // ................ + 0x02, 0x12, 0x0a, 0x0a, 0x0e, 0xdc, 0x0e, 0x0a, 0x0a, 0x11, 0x14, 0x0e, 0xb9, 0x0e, 0x13, 0x05, // ................ + 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .....^.....a...a + 0xfb, 0xef, 0xbe, 0x0e, 0x13, 0x14, 0x0d, 0xbe, 0x0d, 0x14, 0x13, 0x01, 0x66, 0x02, 0x6d, 0x0c, // ............f.m. + 0x06, 0x08, 0x08, 0x06, 0x0c, 0xfd, 0x93, 0x0a, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, // ................ + 0x00, 0x00, 0x06, 0x00, 0x05, 0x40, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x4a, 0x00, 0x00, // .....@.......J.. + 0x25, 0x35, 0x11, 0x35, 0x21, 0x15, 0x11, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x33, // %5.5!.....;.26.3 + 0x27, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x24, 0x34, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x33, 0x32, // '&#"...$4&#"..32 + 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, // ....+....#!"&5.# + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x1f, 0x01, // "&5.463!"&4632.. + 0x37, 0x36, 0x33, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x32, 0x16, 0x03, 0xa0, 0xfe, 0xc0, 0x24, // 7632...#!2.....$ + 0x1c, 0xc0, 0x1c, 0x24, 0xfe, 0x38, 0xc3, 0x7e, 0x1a, 0x2b, 0x28, 0x38, 0x38, 0x02, 0xd8, 0x38, // ...$.8.~.+(88..8 + 0x28, 0x2b, 0x1a, 0x7d, 0xc2, 0x28, 0x01, 0xb0, 0x12, 0x0e, 0x60, 0x38, 0x28, 0xfb, 0xc0, 0x28, // (+.}.(....`8(..( + 0x38, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xb8, 0x5d, 0x83, 0x83, 0x5d, 0x6b, 0x3d, 0x80, 0x80, // 8`......]..]k=.. + 0x3d, 0x6b, 0x5d, 0x83, 0x83, 0x5d, 0x01, 0xb8, 0x0e, 0x12, 0xb4, 0x38, 0x01, 0xd4, 0xc0, 0xc0, // =k]..].....8.... + 0xfe, 0x2c, 0x38, 0x19, 0x1b, 0x1b, 0x03, 0x65, 0xa1, 0x1f, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, // .,8....e..8P88P8 + 0x1f, 0xa1, 0xa0, 0xfe, 0xc0, 0x0e, 0x12, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, 0x12, // ........`(88(... + 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x83, 0xba, 0x83, 0x4d, 0xa5, 0xa5, 0x4d, 0x83, 0xba, 0x83, 0x12, // ..@.....M..M.... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x4f, 0x00, 0x00, // .............O.. + 0x00, 0x34, 0x26, 0x23, 0x22, 0x04, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x37, 0x3e, // .4&#".......327> + 0x01, 0x37, 0x36, 0x24, 0x33, 0x32, 0x01, 0x14, 0x07, 0x06, 0x00, 0x07, 0x06, 0x23, 0x22, 0x27, // .76$32.......#"' + 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, // ..#"..#"..'..54> + 0x02, 0x35, 0x34, 0x26, 0x27, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x04, 0x37, 0x3e, 0x04, // .54&'&54>.7>.7>. + 0x33, 0x32, 0x1e, 0x02, 0x05, 0x00, 0x26, 0x1a, 0xac, 0xfe, 0xdc, 0xe3, 0x7a, 0x13, 0x26, 0x1a, // 32....&.....z.&. + 0x18, 0x15, 0x1b, 0x5e, 0x14, 0x89, 0x01, 0x07, 0xb6, 0x1a, 0x02, 0x26, 0x14, 0x2e, 0xfe, 0xeb, // ...^.......&.... + 0xdb, 0xd6, 0xe0, 0x94, 0x8a, 0x0f, 0x92, 0x17, 0x10, 0x2f, 0x2b, 0x3e, 0x1d, 0x1e, 0x2a, 0x14, // ........./+>..*. + 0x11, 0x02, 0x08, 0x03, 0x03, 0x3e, 0x4a, 0x3e, 0x1c, 0x02, 0x09, 0x57, 0x97, 0xbe, 0x6d, 0x37, // .....>J>...W..m7 + 0xb4, 0xb3, 0xb2, 0x95, 0x27, 0x0a, 0x27, 0x14, 0x22, 0x27, 0x18, 0x27, 0x3f, 0x20, 0x10, 0x03, // ....'.'."'.'? .. + 0x26, 0x34, 0x26, 0x63, 0xa9, 0x87, 0x15, 0x18, 0x1a, 0x26, 0x13, 0x18, 0x5e, 0x13, 0x7c, 0x68, // &4&c.....&..^.|h + 0x01, 0x06, 0x5f, 0x62, 0xe0, 0xfe, 0xc2, 0x6d, 0x6c, 0x2f, 0x05, 0x4a, 0x40, 0x4c, 0x40, 0x16, // .._b...ml/.J@L@. + 0x1a, 0x1d, 0x04, 0x0e, 0x06, 0x0d, 0x07, 0x23, 0x4d, 0x36, 0x3a, 0x13, 0x04, 0x44, 0x0a, 0x33, // .......#M6:..D.3 + 0x35, 0x73, 0xd2, 0x9f, 0x77, 0x24, 0x12, 0x0f, 0x03, 0x09, 0x27, 0x25, 0x0a, 0x27, 0x11, 0x17, // 5s..w$....'%.'.. + 0x09, 0x5c, 0x84, 0x74, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, 0x06, 0x00, 0x00, 0x0f, // ...t............ + 0x00, 0x33, 0x00, 0x00, 0x05, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // .3......#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x14, 0x0e, 0x05, 0x15, 0x14, 0x17, 0x27, 0x17, 0x2e, 0x04, 0x35, // 3!2........'...5 + 0x34, 0x3e, 0x05, 0x35, 0x34, 0x27, 0x17, 0x27, 0x1e, 0x04, 0x05, 0x80, 0x13, 0x0d, 0xfa, 0xc0, // 4>.54'.'........ + 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x31, 0x4f, 0x60, 0x60, 0x4f, 0x31, // .....@....1O``O1 + 0x43, 0x04, 0x01, 0x5a, 0x8c, 0x89, 0x5a, 0x37, 0x31, 0x4f, 0x60, 0x60, 0x4f, 0x31, 0x42, 0x03, // C..Z..Z71O``O1B. + 0x01, 0x5a, 0x8c, 0x89, 0x5a, 0x37, 0xa0, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // .Z..Z7.@....@... + 0x04, 0x13, 0x4e, 0x84, 0x5d, 0x53, 0x48, 0x48, 0x5b, 0x33, 0x60, 0x80, 0x01, 0x01, 0x29, 0x54, // ..N.]SHH[3`...)T + 0x74, 0x81, 0xac, 0x62, 0x4e, 0x84, 0x5d, 0x53, 0x48, 0x48, 0x5b, 0x33, 0x5e, 0x82, 0x01, 0x01, // t..bN.]SHH[3^... + 0x29, 0x54, 0x74, 0x81, 0xac, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // )Tt............. + 0x04, 0x80, 0x00, 0x11, 0x00, 0x21, 0x00, 0x31, 0x00, 0x00, 0x01, 0x26, 0x27, 0x16, 0x15, 0x14, // .....!.1...&'... + 0x00, 0x20, 0x00, 0x35, 0x34, 0x37, 0x06, 0x07, 0x16, 0x04, 0x20, 0x24, 0x00, 0x34, 0x26, 0x23, // . .547.... $.4&# + 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, 0x33, 0x32, 0x00, 0x14, 0x07, 0x06, // "....2654632.... + 0x00, 0x20, 0x00, 0x27, 0x26, 0x34, 0x37, 0x36, 0x00, 0x20, 0x00, 0x17, 0x06, 0x80, 0x98, 0xe5, // . .'&476. ...... + 0x3d, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0x3d, 0xe5, 0x98, 0x85, 0x01, 0x91, 0x01, 0xd4, 0x01, // =......=........ + 0x91, 0xfd, 0xb5, 0x1c, 0x14, 0x7d, 0xb3, 0x1c, 0x28, 0x1c, 0x7a, 0x56, 0x14, 0x03, 0x6c, 0x14, // .....}..(.zV..l. + 0x8c, 0xfe, 0x27, 0xfd, 0xf2, 0xfe, 0x27, 0x8c, 0x14, 0x14, 0x8c, 0x01, 0xd9, 0x02, 0x0e, 0x01, // ..'...'......... + 0xd9, 0x8c, 0x02, 0x40, 0xec, 0x75, 0x68, 0x79, 0xb9, 0xfe, 0xf9, 0x01, 0x07, 0xb9, 0x79, 0x68, // ...@.uhy......yh + 0x75, 0xec, 0xcd, 0xf3, 0xf3, 0x02, 0x39, 0x28, 0x1c, 0xb3, 0x7d, 0x14, 0x1c, 0x1c, 0x14, 0x56, // u.....9(..}....V + 0x7a, 0xfe, 0xd2, 0x44, 0x23, 0xe6, 0xfe, 0xeb, 0x01, 0x16, 0xe5, 0x23, 0x44, 0x23, 0xe5, 0x01, // z..D#......#D#.. + 0x16, 0xfe, 0xea, 0xe5, 0x00, 0x05, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, 0x04, 0xe0, 0x00, 0x09, // ................ + 0x00, 0x19, 0x00, 0x3d, 0x00, 0x43, 0x00, 0x55, 0x00, 0x00, 0x25, 0x37, 0x2e, 0x01, 0x35, 0x34, // ...=.C.U..%7..54 + 0x37, 0x06, 0x07, 0x12, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, // 7....4&#"....265 + 0x34, 0x36, 0x33, 0x32, 0x25, 0x14, 0x07, 0x06, 0x00, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x26, // 4632%.......#"'& + 0x35, 0x34, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x34, 0x37, 0x36, 0x00, 0x21, 0x32, 0x17, 0x37, 0x36, // 547..'&476.!2.76 + 0x33, 0x32, 0x1e, 0x03, 0x17, 0x16, 0x13, 0x14, 0x06, 0x07, 0x01, 0x16, 0x04, 0x14, 0x07, 0x06, // 32.............. + 0x07, 0x06, 0x04, 0x23, 0x37, 0x36, 0x24, 0x37, 0x26, 0x27, 0x37, 0x1e, 0x01, 0x17, 0x02, 0x2b, // ...#76$7&'7....+ + 0x4e, 0x57, 0x62, 0x3d, 0xe5, 0x98, 0xa7, 0x02, 0x89, 0x1c, 0x14, 0x7d, 0xb3, 0x1c, 0x28, 0x1c, // NWb=.......}..(. + 0x7a, 0x56, 0x14, 0x01, 0x87, 0x01, 0x69, 0xfe, 0x5c, 0x6a, 0x31, 0x0a, 0x12, 0x0c, 0x7a, 0x10, // zV....i..j1...z. + 0x2c, 0x8f, 0xf1, 0x58, 0x14, 0x14, 0x99, 0x01, 0xc6, 0x01, 0x0d, 0x59, 0x5b, 0x36, 0x0a, 0x12, // ,..X.......Y[6.. + 0x05, 0x1a, 0x24, 0x1e, 0x21, 0x03, 0x10, 0x25, 0x9e, 0x82, 0x01, 0x18, 0x08, 0x01, 0xc0, 0x14, // ..$.!..%........ + 0x27, 0x46, 0x96, 0xfe, 0x75, 0xde, 0x4a, 0xd4, 0x01, 0x69, 0x79, 0x73, 0xa7, 0x3f, 0x5f, 0xaf, // 'F..u.J..iys.?_. + 0x39, 0xc9, 0x8d, 0x3f, 0xc0, 0x6b, 0x79, 0x68, 0x75, 0xec, 0xfe, 0xfe, 0x02, 0x6e, 0x28, 0x1c, // 9..?.kyhu....n(. + 0xb3, 0x7d, 0x14, 0x1c, 0x1c, 0x14, 0x56, 0x7a, 0xef, 0x07, 0x02, 0xbc, 0xfd, 0x0c, 0xbd, 0x59, // .}....Vz.......Y + 0x10, 0x46, 0x0a, 0x12, 0x0c, 0x4b, 0x41, 0xd8, 0x89, 0x1f, 0x4c, 0x1f, 0xeb, 0x01, 0x10, 0x11, // .F...KA...L..... + 0x61, 0x10, 0x0c, 0x13, 0x12, 0x13, 0x02, 0x0a, 0xfe, 0x30, 0x8b, 0xe5, 0x32, 0x01, 0xf6, 0x2d, // a........0..2..- + 0x84, 0x46, 0x22, 0x40, 0x51, 0xac, 0xbe, 0x84, 0x12, 0xee, 0xbc, 0xb3, 0x73, 0x70, 0x40, 0xb2, // .F"@Q.......sp@. + 0x5f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0xff, 0x80, 0x06, 0xf0, 0x06, 0x00, 0x00, 0x0f, // _............... + 0x00, 0x21, 0x00, 0x33, 0x00, 0x00, 0x25, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, // .!.3..%54&+."... + 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x03, 0x13, 0x34, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, // ..;.26..4'&+.".. + 0x15, 0x13, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x03, 0x01, 0x16, 0x07, 0x0e, 0x01, 0x23, 0x21, // ....;.26......#! + 0x22, 0x26, 0x27, 0x26, 0x37, 0x01, 0x3e, 0x01, 0x32, 0x16, 0x04, 0x00, 0x13, 0x0d, 0xc0, 0x0d, // "&'&7.>.2....... + 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x02, 0x12, 0x0a, 0x0d, 0x0b, 0xdc, 0x0b, 0x0d, 0x0a, 0x11, // ................ + 0x14, 0x0e, 0xb9, 0x0e, 0x13, 0x0d, 0x03, 0x00, 0x23, 0x25, 0x11, 0x3b, 0x22, 0xfa, 0x00, 0x22, // ........#%.;".." + 0x3b, 0x11, 0x25, 0x23, 0x03, 0x00, 0x11, 0x3c, 0x46, 0x3c, 0xa1, 0xbe, 0x0e, 0x13, 0x13, 0x0e, // ;.%#.....`,@L....... + 0x04, 0x03, 0x0f, 0x06, 0xfe, 0xe9, 0xfe, 0xfd, 0x35, 0x05, 0x0d, 0x60, 0x09, 0x0e, 0x02, 0x0f, // ........5..`.... + 0x09, 0xbd, 0xfc, 0x0b, 0x02, 0x01, 0x0a, 0x60, 0x09, 0x0e, 0x06, 0x02, 0xc2, 0x01, 0x03, 0xfe, // .......`........ + 0x04, 0x0e, 0x03, 0x02, 0x0b, 0x80, 0x0e, 0x10, 0x02, 0x99, 0xa0, 0x4c, 0xc0, 0x05, 0x60, 0x34, // ...........L..`4 + 0xc0, 0x4c, 0xa1, 0xfd, 0x48, 0x13, 0x0e, 0x60, 0x06, 0x01, 0x03, 0x0d, 0x01, 0xfc, 0xfe, 0xfd, // .L..H..`........ + 0xc2, 0x11, 0x0e, 0x60, 0x09, 0x02, 0x0b, 0xfc, 0xbd, 0x07, 0x10, 0x0d, 0x0c, 0x61, 0x09, 0x01, // ...`.........a.. + 0x35, 0x01, 0x03, 0x01, 0x17, 0x08, 0x10, 0x10, 0x0b, 0x80, 0x0d, 0x05, 0x9f, 0xa0, 0x4c, 0x40, // 5.............L@ + 0x00, 0x0f, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // ................ + 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x33, 0x00, 0x37, // ...........#.3.7 + 0x00, 0x3b, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x73, 0x00, 0x00, 0x17, 0x21, 0x11, 0x21, 0x01, 0x21, // .;.?.O.s...!.!.! + 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, // .!%!.!.!.!%!.!.! + 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x11, // .!.!.!.!.!%!.!.. + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x21, // 4&+.".....;.26.! + 0x11, 0x21, 0x25, 0x21, 0x11, 0x21, 0x01, 0x21, 0x11, 0x21, 0x37, 0x11, 0x34, 0x26, 0x2b, 0x01, // .!%!.!.!.!7.4&+. + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, // ".....;.26%...#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, // "&5.46;.546;.2.. + 0x01, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x80, 0x01, // .!546;.2...32... + 0x20, 0xfe, 0xe0, 0x01, 0x60, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x01, 0x20, 0xfe, 0xe0, 0x01, // ...`.@..... ... + 0x60, 0x01, 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x01, 0x20, 0xfe, 0xe0, 0x02, 0xe0, 0x01, 0x40, 0xfe, // `.@..... .....@. + 0xc0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0x03, 0x00, 0x01, 0x20, 0xfe, 0xe0, 0xfe, 0x80, 0x01, // ....@..... ..... + 0x40, 0xfe, 0xc0, 0xfe, 0xa0, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x02, // @......@....@... + 0xe0, 0x01, 0x20, 0xfe, 0xe0, 0xfe, 0x80, 0x01, 0x40, 0xfe, 0xc0, 0x01, 0x80, 0x01, 0x20, 0xfe, // .. .....@..... . + 0xe0, 0x20, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x01, 0x80, 0x4c, 0x34, // . ..@....@....L4 + 0xfa, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x80, 0x5e, 0x42, 0x40, 0x42, 0x5e, 0x01, 0x80, 0x5e, 0x42, // ..4LL4.^B@B^..^B + 0x40, 0x42, 0x5e, 0x80, 0x34, 0x4c, 0x80, 0x01, 0x20, 0xfe, 0xe0, 0x01, 0x20, 0x40, 0x01, 0x40, // @B^.4L.. ... @.@ + 0xfe, 0xc0, 0x01, 0x40, 0x40, 0x01, 0x20, 0xfc, 0x00, 0x01, 0x20, 0x01, 0xc0, 0x01, 0x20, 0xfc, // ...@@. ... ... . + 0x00, 0x01, 0x20, 0x40, 0x01, 0x40, 0x02, 0x20, 0x01, 0x20, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xe0, // .. @.@. . ...... + 0x0d, 0x13, 0x13, 0xfc, 0xad, 0x01, 0x40, 0x40, 0x01, 0x20, 0xfe, 0xe0, 0x01, 0x20, 0xc0, 0x01, // ......@@. ... .. + 0x20, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xe0, 0x0d, 0x13, 0x13, 0x4d, 0xfb, 0x00, 0x34, 0x4c, 0x4c, // .........M..4LL + 0x34, 0x05, 0x00, 0x34, 0x4c, 0x60, 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x60, 0x42, 0x5e, 0x5e, 0x42, // 4..4L`B^^B``B^^B + 0x60, 0x4c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, 0x05, 0xe0, 0x00, 0x12, // `L.............. + 0x00, 0x37, 0x00, 0x71, 0x00, 0x00, 0x01, 0x06, 0x07, 0x2e, 0x04, 0x2b, 0x01, 0x22, 0x26, 0x3d, // .7.q.......+."&= + 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, // .46;.2.....#"&=. + 0x22, 0x0e, 0x01, 0x2e, 0x06, 0x27, 0x36, 0x37, 0x1e, 0x04, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, // "....'67..3!5463 + 0x32, 0x17, 0x01, 0x12, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x22, 0x0e, // 2.......#"&=.!". + 0x02, 0x07, 0x06, 0x07, 0x0e, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // ......+."&=.46;. + 0x32, 0x3e, 0x02, 0x37, 0x36, 0x37, 0x3e, 0x06, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // 2>.767>.3!54632. + 0x01, 0x02, 0x9a, 0x3c, 0x4d, 0x16, 0x1e, 0x33, 0x33, 0x4b, 0x2c, 0xe0, 0x0e, 0x12, 0x12, 0x0e, // ....7> + 0x05, 0x37, 0x26, 0x02, 0x35, 0x34, 0x3e, 0x01, 0x24, 0x33, 0x32, 0x04, 0x07, 0x00, 0xf0, 0xfe, // .7&.54>.$32..... + 0x64, 0xf4, 0x46, 0x4b, 0xc6, 0xfe, 0xfa, 0x31, 0x41, 0x11, 0x1b, 0x04, 0x03, 0x05, 0x01, 0x0a, // d.FK...1A....... + 0x02, 0x0c, 0x02, 0x07, 0x30, 0x15, 0x29, 0x18, 0x1e, 0x0b, 0x9d, 0xb5, 0x8e, 0xf0, 0x01, 0x4c, // ....0.)........L + 0xb6, 0xf4, 0x01, 0x9c, 0x03, 0x2e, 0xfe, 0xa4, 0xfe, 0xd9, 0xab, 0x08, 0xaf, 0x43, 0x0e, 0x08, // .............C.. + 0x02, 0x16, 0x12, 0x01, 0x04, 0x10, 0x04, 0x0f, 0x03, 0x0e, 0x02, 0x08, 0x35, 0x17, 0x38, 0x2e, // ............5.8. + 0x48, 0x28, 0x59, 0x01, 0x06, 0x96, 0x82, 0xed, 0xac, 0x65, 0xab, 0x00, 0x00, 0x03, 0x00, 0x00, // H(Y......e...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, // .......#.3.C.... + 0x14, 0x02, 0x04, 0x20, 0x24, 0x02, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, // ... $.=.463!2... + 0x14, 0x1e, 0x03, 0x32, 0x3e, 0x03, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x11, // ...2>.=.463!2... + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x11, // ..#!"&5.463!2... + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, // ..#!"&5.463!2... + 0xc5, 0xfe, 0xa1, 0xfe, 0x48, 0xfe, 0xa1, 0xc5, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x2f, 0x3c, // ....H...&....&/< + 0x52, 0x2e, 0x2a, 0x2e, 0x52, 0x3c, 0x2f, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0xfc, 0x00, 0x26, // R.*.R.7.#"&463!2...! + 0x32, 0x16, 0x02, 0x80, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x03, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, // 2...KjKKj..KjKKj + 0xcb, 0x20, 0x19, 0xfb, 0xec, 0x01, 0x07, 0x05, 0x18, 0x03, 0x98, 0x1a, 0x26, 0x26, 0x1a, 0xfc, // . ..........&&.. + 0x00, 0x1a, 0x26, 0x16, 0x25, 0x02, 0xb1, 0xcc, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x10, 0x19, // ..&.%....&&..... + 0x0f, 0x0b, 0x04, 0x07, 0x01, 0x04, 0xb1, 0x1a, 0x26, 0x35, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, // ........&5jKKjKK + 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x03, 0xc0, 0xfe, 0x00, 0x18, 0x25, 0x03, 0x7a, 0x07, 0x1d, 0x18, // jKKjK.....%.z... + 0x0a, 0x10, 0x30, 0x26, 0x34, 0x26, 0x26, 0x1a, 0x0e, 0x33, 0x44, 0x04, 0x03, 0x37, 0x26, 0x34, // ..0&4&&..3D..7&4 + 0x26, 0x0d, 0x12, 0x1f, 0x16, 0x25, 0x07, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // &....%.&........ + 0x05, 0x80, 0x00, 0x14, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..........#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x06, 0x80, 0x84, 0x5c, 0xfb, // 463!2...!2...... + 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x01, 0x40, 0x5c, 0x84, 0x02, 0xa0, 0x5c, 0x84, 0x03, 0xa0, 0xfd, // @.....@......... + 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, 0x84, 0x00, 0x00, 0x00, // @.......... .... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x57, 0x05, 0x80, 0x00, 0x13, 0x00, 0x2a, 0x00, 0x00, // .......W.....*.. + 0x01, 0x14, 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x37, 0x01, 0x3e, 0x01, // ......#!"&547.>. + 0x33, 0x21, 0x32, 0x16, 0x01, 0x15, 0x21, 0x22, 0x06, 0x07, 0x01, 0x07, 0x34, 0x26, 0x35, 0x11, // 3!2...!"....4&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x07, 0x57, 0x1f, 0xfe, 0xb0, // 463!2...!2..W... + 0x2b, 0x9b, 0x42, 0xfb, 0xc0, 0x22, 0x35, 0x1f, 0x01, 0x50, 0x2b, 0x9b, 0x42, 0x04, 0x40, 0x22, // +.B.."5..P+.B.@" + 0x35, 0xfe, 0xa9, 0xfc, 0xc0, 0x5e, 0xce, 0x3d, 0xfe, 0xaf, 0x05, 0x01, 0x84, 0x5c, 0x01, 0x40, // 5....^.=.......@ + 0x5c, 0x84, 0x02, 0x20, 0x5c, 0x84, 0x02, 0x48, 0x1f, 0x23, 0xfe, 0x74, 0x33, 0x47, 0x1a, 0x1e, // ... ...H.#.t3G.. + 0x1f, 0x23, 0x01, 0x8c, 0x33, 0x47, 0x1a, 0x01, 0x3a, 0xa0, 0x5f, 0x48, 0xfe, 0x74, 0x06, 0x04, // .#..3G..:._H.t.. + 0x11, 0x04, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, 0x84, 0x00, 0x00, 0x00, 0x01, 0x00, 0x40, // ........ ......@ + 0xff, 0x00, 0x02, 0xc0, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, 0x06, 0x2b, 0x01, 0x11, // .............+.. + 0x33, 0x32, 0x16, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, // 32....."'.&46;.. + 0x23, 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x02, 0xc0, 0x26, 0x1a, 0x80, 0x80, // #"&47.62....&... + 0x1a, 0x26, 0x13, 0xff, 0x00, 0x13, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x80, 0x1a, // .&....4....&.... + 0x26, 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x04, 0xda, 0x34, 0x26, 0xfc, 0x00, 0x26, // &....4.....4&..& + 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x04, 0x00, 0x26, 0x34, 0x13, // 4........4&..&4. + 0x01, 0x00, 0x13, 0x13, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x40, 0x07, 0x00, // .............@.. + 0x03, 0xc0, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x21, // ..........."&=.! + 0x15, 0x14, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x21, // ..."'.&47.62...! + 0x35, 0x34, 0x36, 0x32, 0x17, 0x01, 0x07, 0x00, 0x13, 0xff, 0x00, 0x13, 0x34, 0x26, 0xfc, 0x00, // 5462........4&.. + 0x26, 0x34, 0x13, 0xff, 0x00, 0x13, 0x13, 0x01, 0x00, 0x13, 0x34, 0x26, 0x04, 0x00, 0x26, 0x34, // &4........4&..&4 + 0x13, 0x01, 0x00, 0x02, 0x9a, 0x34, 0x13, 0xff, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x80, 0x1a, 0x26, // .....4....&....& + 0x13, 0x01, 0x00, 0x13, 0x34, 0x13, 0x01, 0x00, 0x13, 0x26, 0x1a, 0x80, 0x80, 0x1a, 0x26, 0x13, // ....4....&....&. + 0xff, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x03, // ................ + 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, // ........./....!. + 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x34, 0x26, // ..!...!...!...4& + 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, // #!".....3!26.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x00, 0xff, 0x00, // #!"&5.463!2..... + 0x02, 0x80, 0xff, 0x00, 0x02, 0x80, 0xff, 0x00, 0x02, 0x80, 0xff, 0x00, 0x01, 0x80, 0x13, 0x0d, // ................ + 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xf9, 0xc0, 0x42, // .......@...^B..B + 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x02, 0x00, 0xfe, 0x80, 0x01, 0x80, 0x02, 0x00, 0xfc, // ^^B.@B^......... + 0x80, 0x03, 0x80, 0xff, 0x00, 0xfd, 0x80, 0x02, 0x80, 0x01, 0x80, 0xfc, 0x00, 0x04, 0x00, 0xfb, // ................ + 0xa0, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x04, 0xcd, 0xfb, 0x40, // ........@......@ + 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // B^^B..B^^....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x30, 0x00, 0x40, 0x00, 0x00, 0x01, 0x06, 0x07, 0x36, // .......0.@.....6 + 0x37, 0x06, 0x07, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x2e, 0x01, 0x27, 0x06, 0x15, 0x14, // 7..&#"......'... + 0x17, 0x26, 0x27, 0x15, 0x14, 0x16, 0x17, 0x06, 0x23, 0x22, 0x27, 0x1e, 0x01, 0x17, 0x06, 0x23, // .&'.....#"'....# + 0x22, 0x27, 0x16, 0x33, 0x32, 0x3e, 0x03, 0x35, 0x34, 0x27, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, // "'.32>.54'6....# + 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x38, 0x41, 0x44, // !"&5.463!2...8AD + 0x19, 0x41, 0x45, 0x3d, 0x5c, 0x57, 0x7b, 0x05, 0x81, 0xe2, 0x4f, 0x1d, 0x5b, 0x2f, 0x35, 0x64, // .AE=.W{...O.[/5d + 0x49, 0x1d, 0x16, 0x0d, 0x1a, 0x15, 0x6b, 0x44, 0x74, 0x91, 0x1a, 0x18, 0x94, 0xae, 0x70, 0xc4, // I.....kDt.....p. + 0x8c, 0x65, 0x31, 0x01, 0x3f, 0x01, 0x2a, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, // .e1.?.*.w.@w..w. + 0xc0, 0x77, 0xa9, 0x03, 0x9e, 0x19, 0x09, 0x28, 0x4d, 0x26, 0x0d, 0x42, 0x7b, 0x57, 0x1d, 0x13, // .w.....(M&.B{W.. + 0x07, 0x74, 0x61, 0x32, 0x38, 0x72, 0x3d, 0x01, 0x19, 0x02, 0x4b, 0x75, 0x0e, 0x08, 0x04, 0x3f, // .ta28r=...Ku...? + 0x52, 0x01, 0x5a, 0x03, 0x5e, 0x47, 0x77, 0x9b, 0xa9, 0x54, 0x12, 0x09, 0x2d, 0x01, 0x02, 0xfc, // R.Z.^Gw..T..-... + 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // @w..w..w........ + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x13, 0x00, 0x23, 0x00, 0x00, 0x01, 0x37, 0x23, 0x35, // .........#...7#5 + 0x34, 0x36, 0x3b, 0x01, 0x35, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x15, 0x33, 0x11, 0x21, 0x11, // 46;.5#"...#.3.!. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x05, 0x1b, 0x17, 0xc6, 0x1f, 0x38, 0x6e, 0xaf, 0x98, 0x84, 0x83, 0x83, 0x01, 0x06, 0x01, 0x94, // .....8n......... + 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x6a, 0xdb, 0x6d, // .w.@w..w..w..j.m + 0x31, 0x27, 0xdb, 0x90, 0x8d, 0x83, 0xdb, 0xfd, 0x85, 0x02, 0x7b, 0x01, 0xf6, 0xfc, 0x40, 0x77, // 1'........{...@w + 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ..w..w.......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x23, 0x00, 0x27, 0x00, 0x2e, 0x00, 0x3e, // .........#.'...> + 0x00, 0x00, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x36, // ...4&#"....26546 + 0x33, 0x32, 0x36, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x21, 0x35, 0x21, 0x00, 0x10, // 326.."&462.!5!.. + 0x26, 0x20, 0x06, 0x10, 0x16, 0x20, 0x01, 0x21, 0x35, 0x21, 0x03, 0x21, 0x3d, 0x01, 0x21, 0x07, // & ... .!5!.!=.!. + 0x21, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, // !%...#!"&5.463!2 + 0x16, 0x03, 0xa0, 0x12, 0x0e, 0x42, 0x5e, 0x12, 0x1c, 0x12, 0x38, 0x28, 0x0e, 0xf2, 0x96, 0xd4, // .....B^...8(.... + 0x96, 0x96, 0xd4, 0xfc, 0x96, 0x06, 0x00, 0xfa, 0x00, 0x04, 0x80, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, // ................ + 0x01, 0x3e, 0xfc, 0xe1, 0x01, 0x80, 0xfe, 0x80, 0x80, 0x06, 0x00, 0xfc, 0xc4, 0x40, 0xfd, 0x7c, // .>...........@.| + 0x06, 0x80, 0x4b, 0x35, 0xfa, 0x00, 0x35, 0x4b, 0x4b, 0x35, 0x06, 0x00, 0x35, 0x4b, 0x02, 0xb2, // ..K5..5KK5..5K.. + 0x1c, 0x12, 0x5e, 0x42, 0x0e, 0x12, 0x12, 0x0e, 0x28, 0x38, 0x08, 0xd4, 0x96, 0x96, 0xd4, 0x96, // ..^B....(8...... + 0xfc, 0xc2, 0x80, 0x01, 0x1f, 0x01, 0x3e, 0xe1, 0xe1, 0xfe, 0xc2, 0xe1, 0x04, 0x02, 0x80, 0xfe, // ......>......... + 0xc0, 0x76, 0x8a, 0x80, 0x80, 0xfb, 0x00, 0x35, 0x4b, 0x4b, 0x35, 0x05, 0x00, 0x35, 0x4b, 0x4b, // .v.....5KK5..5KK + 0x00, 0x02, 0x00, 0x00, 0xff, 0x48, 0x06, 0x93, 0x05, 0x80, 0x00, 0x15, 0x00, 0x47, 0x00, 0x00, // .....H.......G.. + 0x00, 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x17, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x32, 0x36, // .4&"....&#"...26 + 0x35, 0x34, 0x27, 0x16, 0x33, 0x32, 0x01, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x07, 0x17, // 54'.32...#"..'.. + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x12, 0x24, // ....#"'..#"&54.$ + 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x01, 0x37, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // 32.....7..54632. + 0x1e, 0x04, 0x03, 0x40, 0x70, 0xa0, 0x70, 0x13, 0x29, 0x2a, 0x50, 0x70, 0x70, 0xa0, 0x70, 0x13, // ...@p.p.)*Ppp.p. + 0x29, 0x2a, 0x50, 0x03, 0xc3, 0x62, 0x11, 0x09, 0x27, 0x22, 0x2b, 0x03, 0x60, 0xdc, 0x1c, 0x4e, // )*P..b..'"+.`..N + 0x2a, 0x28, 0x1c, 0xfd, 0x61, 0xb0, 0xbd, 0xa3, 0xcd, 0xbe, 0x01, 0x32, 0xa0, 0xa3, 0xcd, 0x83, // *(..a......2.... + 0x01, 0x63, 0x60, 0x03, 0x2e, 0x22, 0x20, 0x62, 0x11, 0x0d, 0x0a, 0x06, 0x50, 0x54, 0x59, 0x39, // .c`.." b....PTY9 + 0x03, 0xb0, 0xa0, 0x70, 0x70, 0x50, 0x2a, 0x29, 0x13, 0x70, 0xa0, 0x70, 0x70, 0x50, 0x2a, 0x29, // ...ppP*).p.ppP*) + 0x13, 0xfe, 0x00, 0x11, 0x62, 0x20, 0x22, 0x2e, 0x03, 0x60, 0xdc, 0x1c, 0x28, 0x2a, 0x4e, 0x1c, // ....b "..`..(*N. + 0x02, 0x9f, 0x83, 0xcd, 0xa3, 0xa0, 0x01, 0x32, 0xbe, 0xcd, 0xa3, 0xbd, 0xb0, 0xfe, 0x9d, 0x60, // .......2.......` + 0x03, 0x2b, 0x22, 0x27, 0x09, 0x11, 0x62, 0x0a, 0x06, 0x4d, 0x52, 0x5a, 0x42, 0x00, 0x00, 0x00, // .+"'..b..MRZB... + 0x00, 0x06, 0x00, 0x00, 0xff, 0x0f, 0x07, 0x80, 0x05, 0xf0, 0x00, 0x07, 0x00, 0x11, 0x00, 0x1b, // ................ + 0x00, 0x7f, 0x00, 0xbd, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .........4&"...2 + 0x01, 0x34, 0x26, 0x22, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, // .4&"....26.4&".. + 0x14, 0x16, 0x32, 0x36, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x16, 0x17, 0x16, 0x15, // ..26............ + 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x2f, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x22, // ....#"/......+." + 0x26, 0x2f, 0x01, 0x26, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, // &/.&'..#"'&547>. + 0x37, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x3f, 0x01, 0x36, 0x37, 0x26, 0x27, // 7&/...=.46?.67&' + 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x1f, 0x01, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3b, // &547>.32..67676; + 0x01, 0x32, 0x16, 0x1f, 0x01, 0x16, 0x17, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, // .2.....7632..... + 0x0e, 0x01, 0x07, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x01, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, // ................ + 0x14, 0x07, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, // ...#"&'."'..#"'& + 0x35, 0x34, 0x37, 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, // 547&'&=.4767&547 + 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x36, 0x32, 0x17, 0x36, 0x3f, 0x01, 0x32, 0x17, 0x16, 0x15, // >.32..62.6?.2... + 0x14, 0x07, 0x16, 0x17, 0x16, 0x11, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 0x06, // ................ + 0x23, 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, // #"&'."'..#"'&547 + 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x02, 0x33, // &'&=.4767&547>.3 + 0x32, 0x16, 0x17, 0x36, 0x32, 0x17, 0x36, 0x3f, 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, // 2..62.6?.2...... + 0x17, 0x16, 0x03, 0x80, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x03, 0x96, 0x4c, 0x68, 0x4c, 0x4b, 0x6a, // ...........LhLKj + 0x4b, 0x4c, 0x68, 0x4c, 0x4b, 0x6a, 0x4b, 0xfe, 0x80, 0x0e, 0x09, 0x9b, 0x0b, 0x15, 0x22, 0x38, // KLhLKjK......."8 + 0x07, 0x07, 0x17, 0x77, 0x13, 0x0b, 0x0a, 0x73, 0x25, 0x28, 0x0b, 0x0c, 0x07, 0x17, 0xba, 0x0b, // ...w...s%(...... + 0x12, 0x01, 0x17, 0x22, 0x29, 0x76, 0x07, 0x0d, 0x0b, 0x0a, 0x90, 0x07, 0x0a, 0x3e, 0x10, 0x17, // ...")v.......>.. + 0x0c, 0x98, 0x0a, 0x0e, 0x0e, 0x09, 0x9b, 0x0b, 0x15, 0x22, 0x38, 0x07, 0x07, 0x16, 0x78, 0x13, // ........."8...x. + 0x0b, 0x0a, 0x73, 0x22, 0x2b, 0x0b, 0x0c, 0x07, 0x17, 0xba, 0x0b, 0x12, 0x01, 0x17, 0x22, 0x29, // ..s"+.........") + 0x76, 0x08, 0x0c, 0x0b, 0x0a, 0x90, 0x07, 0x0c, 0x3c, 0x0f, 0x17, 0x0b, 0x98, 0x0a, 0x0e, 0x02, // v.......<....... + 0x80, 0x95, 0x0c, 0x12, 0x33, 0x04, 0x7a, 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x0e, 0x4c, // ....3.z..L.....L + 0x08, 0x02, 0x7a, 0x04, 0x33, 0x12, 0x0c, 0x95, 0x95, 0x0d, 0x11, 0x33, 0x04, 0x04, 0x3e, 0x38, // ..z.3......3..>8 + 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x33, 0x29, 0x06, 0x04, 0x78, 0x04, 0x33, 0x11, 0x0d, // ..L....3)..x.3.. + 0x95, 0x95, 0x0c, 0x12, 0x33, 0x04, 0x7a, 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x0e, 0x4c, // ....3.z..L.....L + 0x08, 0x02, 0x7a, 0x04, 0x33, 0x12, 0x0c, 0x95, 0x95, 0x0d, 0x11, 0x33, 0x04, 0x04, 0x3e, 0x38, // ..z.3......3..>8 + 0x02, 0x08, 0x4c, 0x0e, 0x14, 0x14, 0x14, 0x33, 0x29, 0x06, 0x04, 0x78, 0x04, 0x33, 0x11, 0x0d, // ..L....3)..x.3.. + 0x95, 0x02, 0x16, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0xff, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x35, 0x4b, // ..........4LL45K + 0x4b, 0x04, 0x35, 0x34, 0x4c, 0x4c, 0x34, 0x35, 0x4b, 0x4b, 0xfe, 0x90, 0xb9, 0x0a, 0x13, 0x01, // K.54LL45KK...... + 0x18, 0x23, 0x29, 0x30, 0x43, 0x0a, 0x0a, 0x0c, 0x07, 0x1e, 0x77, 0x07, 0x5a, 0x13, 0x0c, 0x6c, // .#)0C.....w.Z..l + 0x2f, 0x18, 0x0f, 0x0a, 0x99, 0x0a, 0x15, 0x59, 0x07, 0x08, 0x85, 0x1b, 0x09, 0x0a, 0x0e, 0x4e, // /......Y.......N + 0x16, 0x2c, 0x26, 0x18, 0x01, 0x11, 0x0b, 0xb9, 0x0a, 0x13, 0x01, 0x18, 0x23, 0x29, 0x30, 0x43, // .,&.........#)0C + 0x0b, 0x09, 0x0c, 0x08, 0x1e, 0x76, 0x07, 0x5a, 0x12, 0x0e, 0x6c, 0x2e, 0x18, 0x0f, 0x0a, 0x99, // .....v.Z..l..... + 0x0a, 0x15, 0x59, 0x07, 0x08, 0x85, 0x1b, 0x09, 0x0a, 0x10, 0x4c, 0x16, 0x30, 0x22, 0x17, 0x02, // ..Y.......L.0".. + 0x11, 0xfd, 0xe0, 0x8c, 0x10, 0x0f, 0x1b, 0x19, 0x71, 0x19, 0x04, 0x03, 0x47, 0x5e, 0x15, 0x02, // ........q...G^.. + 0x02, 0x15, 0x5e, 0x47, 0x03, 0x04, 0x19, 0x71, 0x19, 0x1b, 0x0f, 0x10, 0x8c, 0x10, 0x0f, 0x1d, // ..^G...q........ + 0x17, 0x71, 0x19, 0x04, 0x03, 0x02, 0x24, 0x20, 0x5d, 0x15, 0x02, 0x02, 0x47, 0x29, 0x02, 0x46, // .q....$ ]...G).F + 0x03, 0x04, 0x19, 0x71, 0x17, 0x1d, 0x0f, 0x03, 0xf0, 0x8c, 0x10, 0x0f, 0x1b, 0x19, 0x71, 0x19, // ...q..........q. + 0x04, 0x03, 0x47, 0x5e, 0x15, 0x02, 0x02, 0x15, 0x5e, 0x47, 0x03, 0x04, 0x19, 0x71, 0x19, 0x1b, // ..G^....^G...q.. + 0x0f, 0x10, 0x8c, 0x10, 0x0f, 0x1d, 0x17, 0x71, 0x19, 0x04, 0x03, 0x02, 0x24, 0x20, 0x5d, 0x15, // .......q....$ ]. + 0x02, 0x02, 0x47, 0x29, 0x02, 0x46, 0x03, 0x04, 0x19, 0x71, 0x17, 0x1d, 0x0f, 0x00, 0x00, 0x00, // ..G).F...q...... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x25, 0x00, 0x4f, 0x00, 0x00, // ...........%.O.. + 0x00, 0x10, 0x06, 0x04, 0x23, 0x22, 0x27, 0x06, 0x07, 0x06, 0x07, 0x23, 0x22, 0x26, 0x27, 0x26, // ....#"'....#"&'& + 0x34, 0x3e, 0x05, 0x37, 0x3e, 0x04, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x24, 0x20, 0x04, 0x01, // 4>.7>.7..546$ .. + 0x14, 0x06, 0x07, 0x1e, 0x04, 0x17, 0x1e, 0x06, 0x14, 0x07, 0x0e, 0x01, 0x27, 0x26, 0x27, 0x26, // ............'&'& + 0x27, 0x06, 0x23, 0x20, 0x27, 0x16, 0x33, 0x32, 0x24, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x1e, // '.# '.32$7>.54'. + 0x01, 0x05, 0x80, 0xbc, 0xfe, 0xbb, 0xbf, 0x56, 0x5a, 0x7c, 0x9a, 0x24, 0x32, 0x03, 0x0b, 0x13, // .......VZ|.$2... + 0x02, 0x01, 0x01, 0x03, 0x02, 0x05, 0x03, 0x06, 0x01, 0x05, 0x24, 0x10, 0x1d, 0x15, 0x0a, 0x7c, // ..........$....| + 0x8e, 0xbc, 0x01, 0x45, 0x01, 0x7e, 0x01, 0x45, 0x02, 0x3c, 0x8e, 0x7c, 0x0a, 0x15, 0x1d, 0x10, // ...E.~.E.<.|.... + 0x24, 0x05, 0x01, 0x06, 0x03, 0x05, 0x02, 0x03, 0x01, 0x01, 0x03, 0x14, 0x0c, 0x32, 0x24, 0x9a, // $............2$. + 0x7c, 0x5a, 0x56, 0xfe, 0xf1, 0xc9, 0x3a, 0x1e, 0xa1, 0x01, 0x28, 0x74, 0x7d, 0x86, 0x17, 0x81, // |ZV...:...(t}... + 0x96, 0x03, 0x8b, 0xfe, 0xea, 0xec, 0x89, 0x10, 0x58, 0x28, 0x09, 0x07, 0x10, 0x0d, 0x03, 0x07, // ........X(...... + 0x06, 0x06, 0x04, 0x07, 0x03, 0x07, 0x01, 0x06, 0x26, 0x15, 0x25, 0x28, 0x18, 0x48, 0xd2, 0x77, // ........&.%(.H.w + 0x8b, 0xec, 0x89, 0x89, 0xfd, 0x89, 0x78, 0xd1, 0x48, 0x18, 0x28, 0x25, 0x15, 0x26, 0x06, 0x01, // ......x.H.(%.&.. + 0x07, 0x03, 0x07, 0x04, 0x06, 0x06, 0x07, 0x03, 0x0e, 0x10, 0x01, 0x07, 0x09, 0x28, 0x58, 0x10, // .............(X. + 0x84, 0x04, 0x5a, 0x54, 0x5c, 0xf0, 0x86, 0x4d, 0x4b, 0x47, 0xd6, 0x00, 0x00, 0x03, 0x00, 0x00, // ..ZT...MKG...... + 0xff, 0x80, 0x06, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x3c, 0x00, 0x6d, 0x00, 0x00, 0x24, 0x34, // .........<.m..$4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x34, 0x26, 0x23, 0x21, 0x34, 0x36, 0x35, 0x34, 0x26, // &"...2.4&#!4654& + 0x23, 0x0e, 0x02, 0x07, 0x06, 0x07, 0x0e, 0x06, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x04, 0x17, // #.......+..32... + 0x16, 0x3b, 0x01, 0x32, 0x35, 0x34, 0x27, 0x3e, 0x01, 0x34, 0x27, 0x36, 0x35, 0x34, 0x26, 0x27, // .;.254'>.4'654&' + 0x3e, 0x01, 0x37, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x06, 0x2b, // >.7............+ + 0x02, 0x22, 0x26, 0x27, 0x26, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x36, // ."&'&#!"&5.463!6 + 0x37, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x01, 0x15, 0x14, 0x07, 0x33, 0x32, // 767>.7632.....32 + 0x16, 0x01, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x04, 0xa6, 0x4e, 0x32, 0xfe, 0xa0, 0x60, 0x40, // ...&4&&4..N2..`@ + 0x60, 0x1a, 0x18, 0x25, 0x29, 0x16, 0x37, 0x04, 0x26, 0x19, 0x2c, 0x24, 0x29, 0x27, 0x10, 0x20, // `..%).7.&.,$)'. + 0x20, 0x0d, 0x25, 0x1d, 0x2f, 0x17, 0x30, 0x05, 0xd3, 0x83, 0x79, 0xc0, 0x05, 0x1e, 0x23, 0x12, // .%./.0...y...#. + 0x35, 0x14, 0x0f, 0x20, 0x2b, 0x80, 0x31, 0x09, 0x26, 0x03, 0x3c, 0x01, 0xac, 0x8d, 0x24, 0x5d, // 5.. +.1.&.<...$] + 0x60, 0xbb, 0x7b, 0x74, 0x16, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x12, 0x24, 0x65, 0x3a, // `.{t...5KK5..$e: + 0x31, 0x18, 0x17, 0x26, 0x2b, 0x27, 0x33, 0x54, 0x86, 0x46, 0x30, 0xb0, 0x68, 0x98, 0xa6, 0x34, // 1..&+'3T.F0.h..4 + 0x26, 0x26, 0x34, 0x26, 0x02, 0x80, 0x33, 0x4d, 0x3a, 0xcb, 0x3b, 0x62, 0x5e, 0x1a, 0x76, 0x85, // &&4&..3M:.;b^.v. + 0x2b, 0x17, 0x44, 0x05, 0x32, 0x20, 0x35, 0x23, 0x24, 0x12, 0xfd, 0x80, 0x06, 0x07, 0x0f, 0x08, // +.D.2 5#$....... + 0x11, 0x02, 0x49, 0xa7, 0x1a, 0x1e, 0x10, 0x49, 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, 0x01, // ..I....IJ 2E.=.. + 0x5c, 0x24, 0x59, 0x4a, 0x21, 0x24, 0x4d, 0x43, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x2d, 0x2b, // .$YJ!$MC..eM..-+ + 0x28, 0x4b, 0x35, 0x02, 0x80, 0x35, 0x4b, 0x18, 0x83, 0x4b, 0x35, 0x19, 0x79, 0x84, 0x2a, 0x25, // (K5..5K..K5.y.*% + 0x41, 0x8a, 0x75, 0x5d, 0x63, 0x98, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, // A.u]c........... + 0x05, 0x80, 0x00, 0x07, 0x00, 0x3d, 0x00, 0x70, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // .....=.p...4&".. + 0x16, 0x32, 0x01, 0x34, 0x26, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x36, 0x34, 0x26, 0x27, 0x36, // .2.4&'>.54'64&'6 + 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x0e, 0x05, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x05, // 54&+."...+..32.. + 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x32, 0x36, 0x35, 0x34, 0x26, 0x35, 0x21, 0x32, 0x36, 0x37, // ......2654&5!267 + 0x14, 0x06, 0x2b, 0x01, 0x16, 0x15, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x27, 0x2e, 0x03, 0x27, // ..+.......#"'..' + 0x26, 0x27, 0x26, 0x27, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x37, 0x3e, // &'&'!"&5.463!27> + 0x01, 0x3b, 0x01, 0x32, 0x16, 0x07, 0x15, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, // .;.2............ + 0x01, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x04, 0xa6, 0x2b, 0x20, 0x0f, 0x14, 0x35, 0x12, 0x23, // ..&4&&4..+ ..5.# + 0x1e, 0x05, 0x62, 0x57, 0x80, 0x83, 0xd3, 0x05, 0x30, 0x17, 0x2f, 0x1d, 0x25, 0x0d, 0x20, 0x20, // ..bW....0./.%. + 0x10, 0x27, 0x29, 0x24, 0x2c, 0x19, 0x26, 0x04, 0x37, 0x16, 0x29, 0x25, 0x18, 0x1a, 0x60, 0x40, // .')$,.&.7.)%..`@ + 0x60, 0x01, 0x60, 0x32, 0x4e, 0x80, 0x98, 0x68, 0xb0, 0x30, 0x23, 0x23, 0x86, 0x54, 0x33, 0x27, // `.`2N..h.0##.T3' + 0x22, 0x28, 0x0b, 0x18, 0x13, 0x30, 0x3b, 0x65, 0x24, 0xfe, 0xee, 0x35, 0x4b, 0x4b, 0x35, 0x01, // "(...0;e$..5KK5. + 0x20, 0x16, 0x74, 0x80, 0xbe, 0x69, 0x70, 0x8c, 0xad, 0x01, 0x3c, 0x03, 0x26, 0x09, 0x31, 0x04, // .t..ip...<.&.1. + 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0x00, 0x23, 0x5c, 0x01, 0x11, 0x3d, 0x19, 0x45, 0x32, // &4&&4&..#...=.E2 + 0x20, 0x4a, 0x49, 0x10, 0x1e, 0x1a, 0x55, 0x52, 0x49, 0x02, 0x11, 0x08, 0x0f, 0x07, 0x06, 0xfd, // JI...URI....... + 0x80, 0x12, 0x24, 0x23, 0x35, 0x20, 0x32, 0x05, 0x44, 0x17, 0x2b, 0x85, 0x76, 0x1a, 0x5e, 0x62, // ..$#5 2.D.+.v.^b + 0x3b, 0xcb, 0x3a, 0x4d, 0x32, 0x67, 0x98, 0x63, 0x5d, 0x76, 0x44, 0x45, 0x41, 0x25, 0x21, 0x62, // ;.:M2g.c]vDEA%!b + 0x53, 0x56, 0x15, 0x32, 0x4d, 0x83, 0x18, 0x4b, 0x35, 0x02, 0x80, 0x35, 0x4b, 0x28, 0x2c, 0x2c, // SV.2M..K5..5K(,, + 0x9e, 0x89, 0x05, 0x4d, 0x65, 0x16, 0x15, 0x43, 0x4d, 0x24, 0x21, 0x4a, 0x00, 0x01, 0x00, 0x00, // ...Me..CM$!J.... + 0xff, 0xad, 0x03, 0x40, 0x05, 0xe0, 0x00, 0x12, 0x00, 0x00, 0x01, 0x11, 0x05, 0x06, 0x23, 0x22, // ...@..........#" + 0x26, 0x35, 0x34, 0x37, 0x13, 0x01, 0x26, 0x35, 0x34, 0x37, 0x25, 0x13, 0x36, 0x03, 0x40, 0xfe, // &547..&547%.6.@. + 0x3f, 0x16, 0x12, 0x15, 0x15, 0x02, 0x56, 0xfe, 0x94, 0x19, 0x38, 0x01, 0xf6, 0xe1, 0x13, 0x05, // ?.....V...8..... + 0xe0, 0xfa, 0xc5, 0xec, 0x0c, 0x1d, 0x15, 0x06, 0x0e, 0x01, 0xf4, 0x01, 0x62, 0x1b, 0x15, 0x25, // ............b..% + 0x09, 0x49, 0x01, 0xc7, 0x29, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // .I..)........... + 0x05, 0x80, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x03, 0x22, 0x0e, 0x02, 0x07, // .....9...4.."... + 0x06, 0x22, 0x27, 0x2e, 0x03, 0x22, 0x0e, 0x03, 0x15, 0x14, 0x17, 0x09, 0x01, 0x36, 0x37, 0x14, // ."'..".......67. + 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x17, // ..."'...54632... + 0x3e, 0x03, 0x33, 0x32, 0x16, 0x06, 0x80, 0x2b, 0x43, 0x60, 0x5c, 0x68, 0x78, 0x65, 0x48, 0x18, // >.32...+C`.hxeH. + 0x12, 0x3e, 0x12, 0x18, 0x48, 0x65, 0x78, 0x68, 0x5c, 0x60, 0x43, 0x2b, 0xbb, 0x02, 0x45, 0x02, // .>..Hexh.`C+..E. + 0x44, 0xbc, 0x80, 0xe5, 0xfd, 0x91, 0x12, 0x34, 0x12, 0xfd, 0x90, 0x0a, 0x23, 0x4c, 0x3c, 0x2f, // D......4....#L.oP$$Po.>.... + 0x51, 0x7c, 0x49, 0x2e, 0x10, 0x33, 0x4d, 0x43, 0x1c, 0x16, 0x16, 0x1c, 0x43, 0x4d, 0x33, 0x10, // Q|I..3MC....CM3. + 0x2e, 0x49, 0x7c, 0x51, 0xa8, 0xbb, 0xfd, 0xd0, 0x02, 0x2f, 0xbc, 0xa8, 0xdd, 0xe5, 0xfd, 0xa8, // .I|Q...../...... + 0x12, 0x12, 0x02, 0x5a, 0x08, 0x24, 0x5f, 0x64, 0x8e, 0x43, 0xdc, 0xf8, 0x2b, 0x49, 0x40, 0x24, // ...Z.$_d.C..+I@$ + 0x24, 0x40, 0x49, 0x2b, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x20, // $@I+........... + 0x05, 0x00, 0x00, 0x28, 0x00, 0x40, 0x00, 0x00, 0x25, 0x14, 0x16, 0x0e, 0x02, 0x23, 0x21, 0x22, // ...(.@..%....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x14, 0x16, 0x0e, 0x02, 0x23, 0x21, // &5.463!2......#! + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x3a, 0x02, 0x1e, 0x03, 0x00, 0x14, 0x07, 0x01, // ".....3!:....... + 0x06, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, // ."&5.!"&5.463!.4 + 0x36, 0x32, 0x17, 0x01, 0x02, 0x80, 0x02, 0x01, 0x05, 0x0f, 0x0d, 0xfe, 0xc0, 0x77, 0xa9, 0xa9, // 62...........w.. + 0x77, 0x01, 0x40, 0x0d, 0x13, 0x02, 0x01, 0x05, 0x0f, 0x0d, 0xfe, 0xc0, 0x42, 0x5e, 0x5e, 0x42, // w.@.........B^^B + 0x01, 0x20, 0x01, 0x14, 0x06, 0x11, 0x06, 0x0a, 0x04, 0x03, 0xa0, 0x13, 0xfd, 0xe0, 0x13, 0x34, // . .............4 + 0x26, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x26, 0x34, 0x13, 0x02, 0x20, 0x60, 0x04, // &.@.&&...&4.. `. + 0x20, 0x15, 0x1a, 0x0d, 0xa9, 0x77, 0x02, 0xc0, 0x77, 0xa9, 0x13, 0x0d, 0x04, 0x20, 0x15, 0x1a, // ....w..w.... .. + 0x0d, 0x5e, 0x42, 0xfd, 0x40, 0x42, 0x5e, 0x02, 0x04, 0x07, 0x0b, 0x02, 0x32, 0x34, 0x13, 0xfd, // .^B.@B^.....24.. + 0xe0, 0x13, 0x26, 0x1a, 0x01, 0x20, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x01, 0x20, 0x1a, 0x26, // ..&.. &....&. .& + 0x13, 0xfd, 0xe0, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, // ................ + 0x00, 0x0f, 0x00, 0x25, 0x00, 0x35, 0x00, 0x00, 0x37, 0x33, 0x11, 0x23, 0x37, 0x2e, 0x01, 0x22, // ...%.5..73.#7.." + 0x06, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x33, 0x11, 0x34, 0x26, 0x23, 0x22, 0x07, // ....;.26.3.4&#". + 0x33, 0x35, 0x23, 0x16, 0x03, 0x33, 0x11, 0x34, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x15, 0x01, 0x11, // 35#..3.47>.32... + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0xed, 0xe7, // ..#!"&5.463!2... + 0xe7, 0xf6, 0x01, 0x46, 0x74, 0x49, 0x47, 0x39, 0x01, 0x3b, 0x48, 0x02, 0x49, 0xe7, 0x92, 0x78, // ...FtIG9.;H.I..x + 0x88, 0x49, 0x02, 0xe7, 0x03, 0x03, 0xe7, 0x07, 0x0f, 0x3c, 0x2c, 0x74, 0x01, 0xd4, 0xa9, 0x77, // .I.......<,t...w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x7a, 0x02, 0xb6, 0xd6, 0x34, 0x44, // .@w..w..w.z...4D + 0x44, 0x34, 0x33, 0x45, 0x45, 0xfc, 0xa7, 0x01, 0x8e, 0x9a, 0x9e, 0x75, 0x65, 0x42, 0xfd, 0x8c, // D43EE......ueB.. + 0x01, 0x84, 0x26, 0x12, 0x23, 0x31, 0x9d, 0x02, 0x73, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, // ..&.#1..s.@w..w. + 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x04, 0x80, 0x05, 0x80, 0x00, 0x0b, // .w.............. + 0x00, 0x2e, 0x00, 0x00, 0x01, 0x11, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, // ......4&".....26 + 0x01, 0x14, 0x06, 0x23, 0x21, 0x03, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x27, 0x03, 0x21, 0x22, 0x26, // ...#!...+."'.!"& + 0x35, 0x34, 0x36, 0x33, 0x11, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x14, 0x06, 0x23, // 5463."&463!2...# + 0x11, 0x32, 0x16, 0x01, 0xe0, 0x12, 0x1c, 0x12, 0x12, 0x1c, 0x12, 0x02, 0xa0, 0x26, 0x1a, 0xfe, // .2...........&.. + 0x53, 0x33, 0x02, 0x11, 0x0c, 0x01, 0x1b, 0x05, 0x4c, 0xfe, 0x6c, 0x1a, 0x26, 0x9d, 0x63, 0x34, // S3......L.l.&.c4 + 0x4c, 0x4c, 0x34, 0x02, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x63, 0x9d, 0x02, 0xa0, 0x01, 0xc0, 0x0e, // LL4..4LL4c...... + 0x12, 0x12, 0x0e, 0xfe, 0x40, 0x0e, 0x12, 0x12, 0xfe, 0xae, 0x1a, 0x26, 0xfe, 0x1d, 0x0c, 0x11, // ....@......&.... + 0x1b, 0x01, 0xe5, 0x26, 0x1a, 0x7b, 0xc5, 0x02, 0x00, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0xfe, // ...&.{...LhLLhL. + 0x00, 0xc5, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x27, // ...............' + 0x00, 0x3f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .?......#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // 3!2.....#!"..... + 0x33, 0x21, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, // 3!265.46;.2..... + 0x22, 0x2f, 0x01, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x27, 0x26, 0x34, 0x36, // "/..."/.&47.'&46 + 0x33, 0x21, 0x32, 0x16, 0x05, 0x80, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x02, 0xc0, // 3!2....w..w..w.. + 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0x12, 0x0e, // .....@B^^B.@B^.. + 0x40, 0x0e, 0x12, 0x01, 0x80, 0x26, 0x34, 0x13, 0xb0, 0xfd, 0x74, 0x0a, 0x1a, 0x0a, 0x72, 0x0a, // @....&4...t...r. + 0x0a, 0x02, 0x8c, 0xb0, 0x13, 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x02, 0x60, 0xfe, 0xc0, 0x77, // .....&....&.`..w + 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x5e, 0x42, 0xfc, 0xc0, // ..w.@w...@..^B.. + 0x42, 0x5e, 0x5e, 0x42, 0x01, 0x40, 0x0e, 0x12, 0x12, 0x03, 0x52, 0xfe, 0x00, 0x1a, 0x26, 0x13, // B^^B.@....R...&. + 0xb0, 0xfd, 0x74, 0x0a, 0x0a, 0x72, 0x0a, 0x1a, 0x0a, 0x02, 0x8c, 0xb0, 0x13, 0x34, 0x26, 0x26, // ..t..r.......4&& + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x17, 0x00, 0x40, 0x00, 0x00, // .............@.. + 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ....."&5.!"&5.46 + 0x33, 0x21, 0x11, 0x34, 0x36, 0x32, 0x17, 0x09, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // 3!.462......#!"& + 0x35, 0x34, 0x26, 0x3e, 0x02, 0x33, 0x21, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x21, 0x2a, // 54&>.3!265.4&#!* + 0x02, 0x2e, 0x03, 0x35, 0x34, 0x26, 0x3e, 0x02, 0x33, 0x21, 0x32, 0x16, 0x04, 0xa0, 0x13, 0xfd, // ...54&>.3!2..... + 0xe0, 0x13, 0x34, 0x26, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x26, 0x34, 0x13, 0x02, // ..4&.@.&&...&4.. + 0x20, 0x01, 0x73, 0xa9, 0x77, 0xfe, 0xc0, 0x0d, 0x13, 0x02, 0x01, 0x05, 0x0f, 0x0d, 0x01, 0x40, // .s.w..........@ + 0x42, 0x5e, 0x5e, 0x42, 0xfe, 0xe0, 0x01, 0x14, 0x06, 0x11, 0x06, 0x0a, 0x04, 0x02, 0x01, 0x05, // B^^B............ + 0x0f, 0x0d, 0x01, 0x40, 0x77, 0xa9, 0x02, 0x9a, 0x34, 0x13, 0xfd, 0xe0, 0x13, 0x26, 0x1a, 0x01, // ...@w...4....&.. + 0x20, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x01, 0x20, 0x1a, 0x26, 0x13, 0xfd, 0xe0, 0x01, 0x33, // &....&. .&....3 + 0xfd, 0x40, 0x77, 0xa9, 0x13, 0x0d, 0x04, 0x20, 0x15, 0x1a, 0x0d, 0x5e, 0x42, 0x02, 0xc0, 0x42, // .@w.... ...^B..B + 0x5e, 0x02, 0x04, 0x07, 0x0b, 0x08, 0x04, 0x20, 0x15, 0x1a, 0x0d, 0xa9, 0x00, 0x03, 0x00, 0x00, // ^...... ........ + 0xff, 0x80, 0x06, 0x80, 0x05, 0x80, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x49, 0x00, 0x00, 0x01, 0x26, // ...........I...& + 0x35, 0x21, 0x15, 0x14, 0x16, 0x25, 0x35, 0x21, 0x14, 0x07, 0x3e, 0x01, 0x37, 0x15, 0x14, 0x0e, // 5!...%5!..>.7... + 0x02, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, // .........32..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, // #!"&=.4632654&'& + 0x27, 0x2e, 0x03, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // '..=.463!5463!2. + 0x1d, 0x01, 0x21, 0x32, 0x16, 0x01, 0xca, 0x4a, 0xff, 0x00, 0xbd, 0x04, 0xc3, 0xff, 0x00, 0x4a, // ..!2...J.......J + 0x8d, 0xbd, 0x80, 0x53, 0x8d, 0xcd, 0x71, 0x2a, 0x35, 0x26, 0x1d, 0x3d, 0x43, 0x4b, 0x75, 0x12, // ...S..q*5&.=CKu. + 0x0e, 0xfc, 0xc0, 0x0e, 0x12, 0x75, 0x4b, 0x43, 0x3d, 0x1d, 0x26, 0x35, 0x2a, 0x71, 0xcd, 0x8d, // .....uKC=.&5*q.. + 0x53, 0x38, 0x28, 0x01, 0x20, 0x5e, 0x42, 0x02, 0x40, 0x42, 0x5e, 0x01, 0x20, 0x28, 0x38, 0x02, // S8(. ^B.@B^. (8. + 0x8d, 0xa2, 0xd1, 0x60, 0x4e, 0xa8, 0xf6, 0x60, 0xd1, 0xa2, 0x1d, 0xa8, 0xce, 0x80, 0x47, 0x90, // ...`N..`......G. + 0x74, 0x4f, 0x05, 0x36, 0x29, 0x22, 0x4d, 0x33, 0x36, 0x4a, 0x5b, 0x45, 0x40, 0x0e, 0x12, 0x12, // tO.6)"M36J[E@... + 0x0e, 0x40, 0x45, 0x5b, 0x4a, 0x36, 0x33, 0x4d, 0x22, 0x29, 0x36, 0x05, 0x4f, 0x74, 0x90, 0x47, // .@E[J63M")6.Ot.G + 0x80, 0x28, 0x38, 0x60, 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, // .(8`B^^B`8...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0e, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x25, // ...............% + 0x00, 0x2d, 0x00, 0x33, 0x00, 0x8d, 0x00, 0x00, 0x25, 0x06, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, // .-.3....%.'&76.. + 0x27, 0x16, 0x07, 0x06, 0x26, 0x37, 0x36, 0x27, 0x06, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, 0x17, // '...&76'.'&76... + 0x06, 0x27, 0x26, 0x37, 0x36, 0x17, 0x16, 0x17, 0x06, 0x27, 0x26, 0x36, 0x17, 0x16, 0x17, 0x14, // .'&76....'&6.... + 0x23, 0x06, 0x35, 0x34, 0x33, 0x36, 0x17, 0x16, 0x06, 0x26, 0x37, 0x36, 0x01, 0x11, 0x14, 0x06, // #.5436...&76.... + 0x2b, 0x01, 0x22, 0x2e, 0x02, 0x3d, 0x01, 0x34, 0x27, 0x3e, 0x04, 0x35, 0x34, 0x27, 0x36, 0x27, // +."..=.4'>.54'6' + 0x26, 0x06, 0x0f, 0x01, 0x26, 0x22, 0x07, 0x2e, 0x02, 0x07, 0x06, 0x17, 0x06, 0x15, 0x14, 0x1e, // &...&".......... + 0x03, 0x17, 0x06, 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x06, 0x1e, // ......"&'../.".. + 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x3f, 0x01, 0x14, 0x16, 0x15, 0x14, 0x0e, // .........?...... + 0x01, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x8a, 0x08, // .+."&5.463!2.... + 0x0c, 0x0d, 0x09, 0x08, 0x0c, 0x0c, 0x32, 0x09, 0x09, 0x08, 0x12, 0x09, 0x09, 0x35, 0x05, 0x08, // ......2......5.. + 0x0a, 0x03, 0x03, 0x0a, 0x0a, 0x1c, 0x06, 0x0a, 0x09, 0x07, 0x06, 0x0a, 0x09, 0x7a, 0x04, 0x0f, // .............z.. + 0x11, 0x08, 0x0f, 0x10, 0x3c, 0x10, 0x11, 0x10, 0x11, 0x3a, 0x02, 0x20, 0x04, 0x10, 0x10, 0x03, // ....<....:. .... + 0xc6, 0xa9, 0x77, 0xe0, 0x10, 0x11, 0x16, 0x0a, 0x34, 0x39, 0x5b, 0x61, 0x41, 0x29, 0x4f, 0x25, // ..w.....49[aA)O% + 0x2d, 0x1c, 0x6a, 0x27, 0x26, 0x5d, 0xc6, 0x5d, 0x10, 0x35, 0x72, 0x1d, 0x2c, 0x25, 0x4f, 0x29, // -.j'&].].5r.,%O) + 0x40, 0x61, 0x5b, 0x39, 0x28, 0x09, 0x15, 0x30, 0x42, 0x41, 0x17, 0x13, 0x3b, 0x14, 0x14, 0x15, // @a[9(..0BA..;... + 0x10, 0x06, 0x0c, 0x07, 0x07, 0x16, 0x2b, 0x0a, 0x0a, 0x0d, 0x3e, 0x48, 0x43, 0x16, 0x17, 0x01, // ......+...>HC... + 0x16, 0x16, 0x16, 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xb8, 0x09, 0x0c, 0x0b, // ....w..w..w..... + 0x08, 0x09, 0x0c, 0x0b, 0x35, 0x0c, 0x07, 0x06, 0x1a, 0x05, 0x07, 0x2f, 0x07, 0x05, 0x05, 0x07, // ....5....../.... + 0x05, 0x03, 0x05, 0x29, 0x07, 0x0a, 0x0b, 0x05, 0x06, 0x09, 0x0b, 0x75, 0x0c, 0x06, 0x04, 0x16, // ...).......u.... + 0x04, 0x05, 0x10, 0x0b, 0x02, 0x0d, 0x0b, 0x02, 0x03, 0x0a, 0x08, 0x18, 0x03, 0x02, 0x03, 0xb1, // ................ + 0xfc, 0x40, 0x77, 0xa9, 0x02, 0x08, 0x15, 0x11, 0xef, 0x61, 0x2d, 0x06, 0x18, 0x36, 0x4f, 0x83, // .@w......a-..6O. + 0x55, 0x79, 0x55, 0x5b, 0x71, 0x09, 0x28, 0x18, 0x18, 0x1a, 0x1a, 0x0b, 0x20, 0x2d, 0x09, 0x71, // UyU[q.(..... -.q + 0x5b, 0x55, 0x79, 0x55, 0x82, 0x50, 0x36, 0x18, 0x06, 0x24, 0x43, 0x0a, 0x0a, 0x2b, 0x29, 0x20, // [UyU.P6..$C..+) + 0x28, 0x04, 0x03, 0x09, 0x0e, 0x0e, 0x05, 0x05, 0x0a, 0x38, 0x17, 0x17, 0x26, 0x2f, 0x0d, 0x01, // (........8..&/.. + 0x04, 0x04, 0x26, 0x82, 0x03, 0x16, 0x17, 0x03, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, // ..&......w..w... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, 0x05, 0xc0, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x27, // ...............' + 0x00, 0x3f, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, 0x26, 0x22, // .?..$4&"...2$4&" + 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // ...2....#!"&5.46 + 0x33, 0x21, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, 0x21, 0x32, 0x16, 0x01, 0x06, 0x23, 0x21, // 3!..3!267!2...#! + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x27, 0x26, 0x37, 0x01, 0x36, // ...#!"&5.!"'&7.6 + 0x32, 0x17, 0x01, 0x16, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x26, 0x34, 0x26, // 2.....&4&&4.&&4& + 0x26, 0x34, 0xa6, 0x38, 0x28, 0xfa, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, 0xab, 0x15, 0x63, 0x3d, // &4.8(.@(88(...c= + 0x01, 0x00, 0x3d, 0x63, 0x15, 0x01, 0xab, 0x28, 0x38, 0xfe, 0xbb, 0x11, 0x2a, 0xff, 0x00, 0x26, // ..=c...(8...*..& + 0x1a, 0xff, 0x00, 0x1a, 0x26, 0xff, 0x00, 0x2a, 0x11, 0x11, 0x1f, 0x01, 0xc0, 0x12, 0x36, 0x12, // ....&..*......6. + 0x01, 0xc0, 0x1f, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, // ...&4&&4&&4&&4&. + 0x20, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x48, 0x48, 0x38, 0x38, // ..(88(.@(88HH88 + 0x02, 0x60, 0x28, 0xfe, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xc0, 0x28, 0x27, 0x1e, 0x01, 0xc0, // .`(.@.&&...('... + 0x13, 0x13, 0xfe, 0x40, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0xff, // ...@............ + 0x05, 0x80, 0x00, 0x31, 0x00, 0x64, 0x00, 0x00, 0x01, 0x34, 0x26, 0x27, 0x2e, 0x02, 0x35, 0x34, // ...1.d...4&'..54 + 0x36, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x06, 0x23, 0x22, 0x26, 0x23, 0x22, 0x0e, 0x01, 0x07, // 654'&#".#"&#"... + 0x06, 0x07, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x15, 0x14, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x33, // ............3263 + 0x32, 0x16, 0x33, 0x32, 0x37, 0x3e, 0x01, 0x12, 0x37, 0x14, 0x02, 0x06, 0x07, 0x06, 0x23, 0x22, // 2.327>..7.....#" + 0x26, 0x23, 0x22, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x35, 0x34, 0x26, 0x35, 0x34, 0x3e, // &#".#"&54654&54> + 0x02, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // .767632.32632... + 0x06, 0x15, 0x14, 0x1e, 0x03, 0x17, 0x1e, 0x01, 0x05, 0x7f, 0x0e, 0x0b, 0x0c, 0x0a, 0x08, 0x0a, // ................ + 0x0a, 0x04, 0x09, 0x13, 0x4e, 0x14, 0x3c, 0xe8, 0x3b, 0x2b, 0x67, 0x43, 0x38, 0x89, 0x41, 0x60, // ....N.<.;+gC8.A` + 0x7f, 0x31, 0x19, 0x16, 0x18, 0x16, 0x18, 0x61, 0x19, 0x39, 0xe1, 0x39, 0xb5, 0x67, 0x81, 0xd5, // .1.....a.9.9.g.. + 0x77, 0x80, 0x8c, 0xfc, 0x9b, 0x7c, 0xca, 0x39, 0xe2, 0x38, 0x18, 0x61, 0x19, 0x49, 0x65, 0x16, // w....|.9.8.a.Ie. + 0x19, 0x24, 0x49, 0x80, 0x56, 0x4e, 0x9a, 0xc2, 0x7a, 0x3c, 0xe7, 0x3a, 0x13, 0x4c, 0x14, 0x51, // .$I.VN..z<.:.L.Q + 0x4a, 0x0a, 0x02, 0x04, 0x04, 0x09, 0x02, 0x10, 0x12, 0x02, 0xc6, 0x2c, 0x8b, 0x1b, 0x1e, 0x1c, // J..........,.... + 0x2d, 0x1a, 0x17, 0x5b, 0x16, 0x25, 0x12, 0x01, 0x09, 0x30, 0x17, 0x18, 0x16, 0x36, 0x31, 0x49, // -..[.%...0...61I + 0xe9, 0xef, 0x81, 0x28, 0xa0, 0x29, 0x17, 0x57, 0x2c, 0x1d, 0x16, 0x1f, 0x24, 0x2d, 0xd7, 0x01, // ...(.).W,...$-.. + 0x14, 0x8b, 0xa5, 0xfe, 0xbb, 0xfb, 0x37, 0x2c, 0x1d, 0x1d, 0x6f, 0x49, 0x18, 0x58, 0x17, 0x28, // ......7,..oI.X.( + 0xa1, 0x29, 0x6f, 0xd5, 0xce, 0xb6, 0x41, 0x3b, 0x3d, 0x4e, 0x30, 0x0a, 0x65, 0x54, 0x17, 0x5a, // .)o...A;=N0.eT.Z + 0x17, 0x0a, 0x11, 0x11, 0x0a, 0x16, 0x06, 0x28, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .......(........ + 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x06, 0x07, // .......O........ + 0x06, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x26, 0x00, 0x27, 0x26, 0x27, 0x2e, 0x04, 0x35, // .#"..'&'&.'&'..5 + 0x34, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x1e, 0x02, // 4767>.32........ + 0x15, 0x14, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x03, 0x33, 0x32, // ..............32 + 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x17, 0x16, 0x17, 0x16, 0x05, 0x80, 0x14, // >.32............ + 0x0b, 0x15, 0x65, 0x5e, 0x5c, 0x1b, 0x33, 0x40, 0x1f, 0x50, 0x09, 0x62, 0x4d, 0x80, 0xfe, 0xef, // ..e^..3@.P.bM... + 0x4f, 0x30, 0x23, 0x03, 0x1e, 0x0b, 0x12, 0x07, 0x33, 0x38, 0x32, 0x19, 0x57, 0x1b, 0x0e, 0x07, // O0#.....382.W... + 0x12, 0x23, 0x0b, 0x26, 0x20, 0x0f, 0x03, 0x1d, 0x0e, 0x39, 0x43, 0x39, 0x0a, 0x07, 0x15, 0x01, // .#.& ....9C9.... + 0x4c, 0xc4, 0x89, 0x02, 0x22, 0x0e, 0x1b, 0x09, 0x12, 0x38, 0x32, 0x3c, 0x14, 0x0e, 0x1d, 0x2a, // L..."....82<...* + 0x04, 0x19, 0x39, 0x46, 0x13, 0x46, 0x06, 0x03, 0x01, 0x28, 0x1b, 0x57, 0x19, 0x32, 0x38, 0x33, // ..9F.F...(.W.283 + 0x07, 0x12, 0x0b, 0x1e, 0x03, 0x23, 0x30, 0x4f, 0x01, 0x11, 0x80, 0x4d, 0x62, 0x09, 0x50, 0x1f, // .....#0O...Mb.P. + 0x40, 0x33, 0x1b, 0x5c, 0x5e, 0x65, 0x15, 0x0b, 0x14, 0x03, 0x06, 0x46, 0x13, 0x46, 0x39, 0x19, // @3..^e.....F.F9. + 0x04, 0x2a, 0x1d, 0x0e, 0x14, 0x3c, 0x32, 0x38, 0x12, 0x09, 0x1b, 0x0e, 0x22, 0x02, 0x89, 0xc4, // .*...<28...."... + 0x4c, 0x01, 0x15, 0x07, 0x0a, 0x39, 0x43, 0x39, 0x0e, 0x1d, 0x03, 0x0f, 0x20, 0x26, 0x0b, 0x23, // L....9C9.... &.# + 0x12, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x1f, 0x00, 0x00, 0x01, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .....!".....3!26 + 0x35, 0x11, 0x34, 0x26, 0x17, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 5.4&....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x04, 0x60, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, // 3!2..`..B^^B.@B^ + 0x5e, 0xde, 0xa9, 0x77, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x05, 0x00, // ^..w..w..w.@w... + 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0xa0, 0xfc, 0xc0, 0x77, // ^B..B^^B.@B^...w + 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0xa9, 0x00, 0x02, 0x00, 0x00, 0xff, 0x97, 0x05, 0x00, // ..w.@w.......... + 0x05, 0x80, 0x00, 0x06, 0x00, 0x23, 0x00, 0x00, 0x01, 0x21, 0x11, 0x01, 0x37, 0x17, 0x01, 0x13, // .....#...!..7... + 0x32, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x09, 0x01, 0x06, // 2.........#"'... + 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x36, 0x33, 0x04, 0x80, 0xfc, 0x00, // #"'..5.46763.... + 0x01, 0xa7, 0x59, 0x59, 0x01, 0xa7, 0x0c, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x13, 0x19, 0x30, // ..YY.....!''!..0 + 0x23, 0xfe, 0x47, 0xfe, 0x47, 0x24, 0x2f, 0x17, 0x15, 0x21, 0x27, 0x27, 0x21, 0x15, 0x17, 0x05, // #.G.G$/..!''!... + 0x00, 0xfb, 0x26, 0x01, 0x96, 0x55, 0x55, 0xfe, 0x6a, 0x05, 0x5a, 0x09, 0x0d, 0x38, 0x22, 0xfa, // ..&..UU.j.Z..8". + 0xf7, 0x22, 0x38, 0x0d, 0x08, 0x20, 0x01, 0xa8, 0xfe, 0x58, 0x21, 0x09, 0x0d, 0x38, 0x22, 0x05, // ."8.. ...X!..8". + 0x09, 0x22, 0x38, 0x0d, 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ."8............. + 0x05, 0x80, 0x00, 0x45, 0x00, 0x55, 0x00, 0x00, 0x01, 0x34, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x2e, // ...E.U...4'../.. + 0x02, 0x23, 0x22, 0x0e, 0x01, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x35, // .#"..#"..'..'..5 + 0x34, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x01, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x15, // 4>.54..'..#".... + 0x14, 0x1e, 0x04, 0x17, 0x16, 0x00, 0x17, 0x1e, 0x05, 0x33, 0x32, 0x36, 0x37, 0x36, 0x01, 0x11, // .........32676.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, // ..#!"&5.463!2... + 0x02, 0x03, 0x47, 0x35, 0x35, 0x05, 0x1c, 0x16, 0x0a, 0x12, 0x3a, 0x38, 0x10, 0x07, 0x13, 0x0c, // ..G55.....:8.... + 0x16, 0x03, 0x63, 0x8f, 0x37, 0x02, 0x0d, 0x06, 0x07, 0x29, 0x31, 0x29, 0x0a, 0x14, 0x03, 0x03, // ..c.7....)1).... + 0x18, 0x1a, 0x1b, 0x17, 0x0a, 0x0b, 0x30, 0x35, 0x2e, 0x44, 0x05, 0x05, 0x0d, 0x07, 0x12, 0x02, // ......05.D...... + 0x3c, 0x01, 0x39, 0xa4, 0x06, 0x30, 0x12, 0x29, 0x19, 0x24, 0x10, 0x39, 0x93, 0x15, 0x16, 0x01, // <.9..0.).$.9.... + 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0x57, 0x0b, // ..w.@w..w..w..W. + 0x05, 0x08, 0x2b, 0x1c, 0x1d, 0x03, 0x14, 0x0a, 0x41, 0x42, 0x07, 0x06, 0x0d, 0x02, 0x37, 0x8f, // ..+.....AB....7. + 0x63, 0x03, 0x16, 0x0c, 0x13, 0x07, 0x0d, 0x29, 0x24, 0x2b, 0x0f, 0x0a, 0x16, 0x1c, 0x05, 0x06, // c......)$+...... + 0x2d, 0x2e, 0x31, 0x20, 0x04, 0x16, 0x15, 0x93, 0x39, 0x10, 0x24, 0x19, 0x29, 0x12, 0x30, 0x06, // -.1 ....9.$.).0. + 0xa4, 0xfe, 0xc7, 0x3c, 0x02, 0x12, 0x07, 0x0d, 0x05, 0x05, 0x44, 0x2e, 0x35, 0x03, 0x39, 0xfc, // ...<......D.5.9. + 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2c, // @w..w..w......., + 0x00, 0x00, 0x06, 0x54, 0x05, 0x00, 0x00, 0x31, 0x00, 0x00, 0x01, 0x06, 0x07, 0x16, 0x15, 0x14, // ...T...1........ + 0x02, 0x0e, 0x01, 0x04, 0x23, 0x20, 0x27, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x01, 0x27, 0x16, 0x33, // ....# '.327..'.3 + 0x32, 0x37, 0x2e, 0x01, 0x3d, 0x01, 0x16, 0x17, 0x2e, 0x01, 0x35, 0x34, 0x37, 0x16, 0x04, 0x17, // 27..=.....547... + 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x37, 0x06, 0x07, 0x36, 0x06, 0x54, 0x43, 0x5f, // &54632.67..6.TC_ + 0x01, 0x4c, 0x9b, 0xd6, 0xfe, 0xd2, 0xac, 0xfe, 0xf1, 0xe1, 0x23, 0x2b, 0xe1, 0xb0, 0x69, 0xa6, // .L........#+..i. + 0x1f, 0x21, 0x1c, 0x2b, 0x2a, 0x70, 0x93, 0x44, 0x4e, 0x42, 0x4e, 0x2c, 0x79, 0x01, 0x5b, 0xc6, // .!.+*p.DNBN,y.[. + 0x08, 0xbd, 0x86, 0x8c, 0x60, 0x6d, 0x60, 0x25, 0x69, 0x5d, 0x04, 0x68, 0x62, 0x45, 0x0e, 0x1c, // ....`m`%i].hbE.. + 0x82, 0xfe, 0xfd, 0xee, 0xb7, 0x6d, 0x91, 0x04, 0x8a, 0x02, 0x7d, 0x61, 0x05, 0x0b, 0x17, 0xb1, // .....m....}a.... + 0x75, 0x04, 0x26, 0x03, 0x2c, 0x8e, 0x53, 0x58, 0x4b, 0x95, 0xb3, 0x0a, 0x26, 0x24, 0x86, 0xbd, // u.&.,.SXK...&$.. + 0x66, 0x15, 0x39, 0x73, 0x3f, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x03, 0x00, // f.9s?........... + 0x05, 0xf0, 0x00, 0x15, 0x00, 0x00, 0x01, 0x21, 0x03, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, // .......!.#.!.#.3 + 0x35, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0xff, 0x01, 0x01, 0x1e, // 546;..#"........ + 0xe3, 0xfe, 0xab, 0xaa, 0xaa, 0xac, 0xc5, 0xe3, 0x8e, 0x27, 0x2f, 0x15, 0x06, 0x03, 0xd4, 0xfe, // .........'/..... + 0xe4, 0xfc, 0xc8, 0x03, 0x38, 0x01, 0x1c, 0xab, 0xb6, 0xbb, 0xfe, 0xe4, 0x0d, 0x22, 0x23, 0x20, // ....8........"# + 0x00, 0x01, 0x00, 0x00, 0xff, 0xa7, 0x06, 0x00, 0x05, 0x80, 0x00, 0x52, 0x00, 0x00, 0x01, 0x14, // ...........R.... + 0x00, 0x07, 0x06, 0x26, 0x3d, 0x01, 0x34, 0x27, 0x3e, 0x04, 0x35, 0x34, 0x27, 0x36, 0x27, 0x26, // ...&=.4'>.54'6'& + 0x06, 0x0f, 0x01, 0x26, 0x22, 0x07, 0x2e, 0x02, 0x07, 0x06, 0x17, 0x06, 0x15, 0x14, 0x1e, 0x03, // ...&"........... + 0x17, 0x06, 0x07, 0x0e, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x06, 0x1e, 0x01, // ....."&'../."... + 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x3f, 0x01, 0x14, 0x16, 0x15, 0x14, 0x06, 0x27, // ........?......' + 0x26, 0x00, 0x35, 0x34, 0x12, 0x24, 0x20, 0x04, 0x12, 0x06, 0x00, 0xfe, 0xdb, 0xe8, 0x1b, 0x19, // &.54.$ ......... + 0x34, 0x39, 0x5b, 0x61, 0x41, 0x29, 0x4f, 0x25, 0x2d, 0x1c, 0x6a, 0x27, 0x26, 0x5d, 0xc6, 0x5d, // 49[aA)O%-.j'&].] + 0x10, 0x35, 0x72, 0x1d, 0x2c, 0x25, 0x4f, 0x29, 0x40, 0x61, 0x5b, 0x39, 0x28, 0x09, 0x15, 0x30, // .5r.,%O)@a[9(..0 + 0x42, 0x41, 0x17, 0x13, 0x3b, 0x14, 0x14, 0x15, 0x10, 0x06, 0x0c, 0x07, 0x07, 0x16, 0x2b, 0x0a, // BA..;.........+. + 0x0a, 0x0d, 0x3e, 0x48, 0x43, 0x16, 0x17, 0x01, 0x1a, 0x1b, 0xe8, 0xfe, 0xdb, 0xce, 0x01, 0x61, // ..>HC..........a + 0x01, 0xa2, 0x01, 0x61, 0xce, 0x02, 0x80, 0xfb, 0xfe, 0x6f, 0x4d, 0x05, 0x18, 0x12, 0xd3, 0x61, // ...a.....oM....a + 0x2d, 0x06, 0x18, 0x36, 0x4f, 0x83, 0x55, 0x79, 0x55, 0x5b, 0x71, 0x09, 0x28, 0x18, 0x18, 0x1a, // -..6O.UyU[q.(... + 0x1a, 0x0b, 0x20, 0x2d, 0x09, 0x71, 0x5b, 0x55, 0x79, 0x55, 0x82, 0x50, 0x36, 0x18, 0x06, 0x24, // .. -.q[UyU.P6..$ + 0x43, 0x0a, 0x0a, 0x2b, 0x29, 0x20, 0x28, 0x04, 0x03, 0x09, 0x0e, 0x0e, 0x05, 0x05, 0x0a, 0x38, // C..+) (........8 + 0x17, 0x17, 0x26, 0x2f, 0x0d, 0x01, 0x04, 0x04, 0x26, 0x66, 0x03, 0x12, 0x18, 0x05, 0x4d, 0x01, // ..&/....&f....M. + 0x91, 0xfb, 0xd1, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ....a........... + 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x25, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, // .......%......+. + 0x22, 0x26, 0x35, 0x11, 0x34, 0x26, 0x22, 0x06, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, // "&5.4&"...32.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x00, 0x20, 0x00, // .#!"&5.463!54. . + 0x06, 0x80, 0x26, 0x1a, 0x40, 0x1a, 0x26, 0x96, 0xd4, 0x96, 0x60, 0x28, 0x38, 0x38, 0x28, 0xfc, // ..&.@.&...`(88(. + 0x40, 0x28, 0x38, 0x38, 0x28, 0x02, 0xa0, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x03, 0xc0, 0xff, // @(88(.....r..... + 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x6a, 0x96, 0x96, 0x6a, 0xc0, 0x38, 0x28, 0xfd, 0xc0, // ..&&...j..j.8(.. + 0x28, 0x38, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0xc0, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0x00, 0x00, // (88(.@(8........ + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x19, 0x00, 0x23, // ...............# + 0x00, 0x27, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .'.+...2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x15, 0x22, 0x06, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x26, 0x23, // &5.463."...!54&# + 0x11, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x14, 0x16, 0x33, 0x37, 0x35, 0x21, 0x15, 0x33, 0x35, // .265.!...375!.35 + 0x21, 0x15, 0x06, 0xe0, 0x42, 0x5e, 0x5e, 0x42, 0xf9, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x0d, 0x13, // !...B^^B..B^^B.. + 0x06, 0x80, 0x13, 0x0d, 0x0d, 0x13, 0xf9, 0x80, 0x13, 0x0d, 0x60, 0x01, 0x00, 0x80, 0x01, 0x80, // ..........`..... + 0x05, 0x80, 0x5e, 0x42, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x80, 0x13, // ..^B.@B^^B..B^.. + 0x0d, 0xe0, 0xe0, 0x0d, 0x13, 0xfb, 0x00, 0x13, 0x0d, 0x02, 0x60, 0xfd, 0xa0, 0x0d, 0x13, 0x80, // ..........`..... + 0x80, 0x80, 0x80, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x07, // ................ + 0x00, 0x21, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x16, // .!.=....."&462.. + 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x26, 0x00, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x37, // ..+."&'&.'..=.47 + 0x36, 0x3b, 0x01, 0x16, 0x04, 0x17, 0x16, 0x12, 0x05, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x26, // 6;..........+."& + 0x27, 0x26, 0x02, 0x00, 0x24, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x3b, 0x01, 0x0c, // '&..$'..=.476;.. + 0x01, 0x17, 0x16, 0x12, 0x01, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x02, 0x70, 0x02, 0x13, 0x12, // ......p.pp..p... + 0x1d, 0x87, 0x19, 0x24, 0x02, 0x16, 0xfe, 0xbb, 0xe5, 0x19, 0x21, 0x15, 0x11, 0x1a, 0x05, 0xa0, // ...$......!..... + 0x01, 0x24, 0x71, 0x72, 0x87, 0x02, 0x0d, 0x02, 0x14, 0x12, 0x1c, 0x8f, 0x1a, 0x25, 0x01, 0x0c, // .$qr.........%.. + 0xb2, 0xfe, 0xe3, 0xfe, 0x7d, 0xd7, 0x19, 0x23, 0x14, 0x12, 0x1a, 0x03, 0x01, 0x06, 0x01, 0xdf, // ....}..#........ + 0xba, 0xbb, 0xd6, 0x01, 0x10, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfe, 0xc5, 0x1c, 0x14, 0x15, 0x21, // ......pp.p.....! + 0x19, 0xe5, 0x01, 0x45, 0x16, 0x02, 0x24, 0x19, 0x87, 0x1d, 0x12, 0x11, 0x0d, 0x87, 0x72, 0x71, // ...E..$.......rq + 0xfe, 0xdc, 0xa2, 0x1b, 0x14, 0x14, 0x23, 0x19, 0xd7, 0x01, 0x83, 0x01, 0x1d, 0xb2, 0x0d, 0x01, // ......#......... + 0x25, 0x19, 0x8f, 0x1c, 0x12, 0x12, 0x0d, 0xd6, 0xbb, 0xba, 0xfe, 0x21, 0x00, 0x05, 0x00, 0x00, // %..........!.... + 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x29, 0x00, 0x3f, // .............).? + 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, // ....."&462..."&4 + 0x36, 0x32, 0x17, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // 62..4&#!".....3! + 0x32, 0x36, 0x01, 0x21, 0x03, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x01, 0x11, 0x14, 0x06, // 26.!...#!"...... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, // #!"&5.47.>.3!2.. + 0x13, 0x16, 0x04, 0x10, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x01, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, // ..../B//B.//B//B + 0x9f, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xfb, 0x32, 0x04, // ....@.........2. + 0x9c, 0x9d, 0x04, 0x18, 0x0e, 0xfc, 0xf2, 0x0e, 0x18, 0x04, 0x04, 0xb1, 0x5e, 0x42, 0xfb, 0x40, // ............^B.@ + 0x42, 0x5e, 0x10, 0xc5, 0x11, 0x5c, 0x37, 0x03, 0x0e, 0x37, 0x5c, 0x11, 0xc5, 0x10, 0x01, 0x61, // B^....7..7.....a + 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0x2f, 0x42, 0x2f, 0xf0, 0x01, 0x40, 0x0d, 0x13, // B//B//B//B/..@.. + 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x01, 0xed, 0x01, 0xe2, 0x0d, 0x11, 0x11, 0x0d, 0xfd, // ................ + 0x7e, 0xfe, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0x40, 0x19, 0x32, 0x02, 0x5e, 0x35, 0x42, 0x42, // ~..B^^B.@.2.^5BB + 0x35, 0xfd, 0xa2, 0x32, 0x00, 0x02, 0x00, 0x00, 0xff, 0x83, 0x07, 0x00, 0x05, 0x80, 0x00, 0x2e, // 5..2............ + 0x00, 0x34, 0x00, 0x00, 0x01, 0x32, 0x16, 0x14, 0x06, 0x23, 0x11, 0x14, 0x06, 0x23, 0x00, 0x25, // .4...2...#...#.% + 0x0e, 0x01, 0x16, 0x17, 0x0e, 0x01, 0x1e, 0x02, 0x17, 0x0e, 0x01, 0x26, 0x27, 0x2e, 0x04, 0x36, // ...........&'..6 + 0x37, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x20, 0x01, 0x32, 0x16, 0x15, 0x03, // 7#"&=.463! .2... + 0x11, 0x00, 0x05, 0x11, 0x04, 0x06, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x4c, 0x34, 0xfe, 0x5f, 0xfe, // .......5KK5L4._. + 0x75, 0x3a, 0x42, 0x04, 0x26, 0x14, 0x06, 0x12, 0x31, 0x2f, 0x26, 0x1d, 0xa5, 0xac, 0x2e, 0x07, // u:B.&...1/&..... + 0x2d, 0x13, 0x1b, 0x03, 0x0a, 0x11, 0x7a, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0xe0, 0x01, 0xb3, 0x01, // -.....zB^^B..... + 0xcd, 0x34, 0x4c, 0x80, 0xfe, 0x76, 0xfe, 0x8a, 0x01, 0x79, 0x03, 0x80, 0x4b, 0x6a, 0x4b, 0xfe, // .4L..v...y..KjK. + 0x80, 0x34, 0x4c, 0x01, 0x5b, 0x21, 0x13, 0x5e, 0x6b, 0x27, 0x21, 0x41, 0x33, 0x3b, 0x29, 0x1e, // .4L.[!.^k'!A3;). + 0x3a, 0x32, 0x1b, 0x2a, 0x17, 0x81, 0x3c, 0x76, 0x54, 0x71, 0x36, 0x5e, 0x42, 0xc0, 0x42, 0x5e, // :2.*...54&#". + 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x01, 0x33, 0x32, // .......+..32..32 + 0x35, 0x34, 0x27, 0x3e, 0x01, 0x34, 0x27, 0x36, 0x35, 0x34, 0x26, 0x27, 0x21, 0x32, 0x36, 0x37, // 54'>.4'654&'!267 + 0x14, 0x06, 0x2b, 0x01, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x06, 0x23, 0x22, 0x27, 0x26, // ..+.........#"'& + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x3e, 0x05, 0x37, 0x36, 0x37, // #!"&5.463!2>.767 + 0x3e, 0x04, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x21, 0x32, 0x16, 0x01, 0x00, 0x26, 0x34, 0x26, // >.32....!2...&4& + 0x26, 0x34, 0x05, 0xa6, 0x4e, 0x32, 0xfd, 0xc0, 0x1e, 0x24, 0x1e, 0x59, 0x47, 0x18, 0x42, 0x18, // &4..N2...$.YG.B. + 0x0d, 0x28, 0x48, 0x47, 0x1e, 0x45, 0x47, 0x20, 0x20, 0x48, 0xbe, 0xc5, 0x51, 0xbd, 0x05, 0x1e, // .(HG.EG H..Q... + 0x23, 0x12, 0x35, 0x14, 0x0f, 0x01, 0x4b, 0x34, 0x4c, 0x80, 0x97, 0x69, 0xa9, 0x04, 0x21, 0x03, // #.5...K4L..i..!. + 0x3c, 0x01, 0xac, 0x8d, 0x85, 0xbd, 0xa4, 0x3b, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, 0x01, 0x20, // <......;..5KK5. + 0x0a, 0x17, 0x18, 0x15, 0x1b, 0x0e, 0x18, 0x02, 0x41, 0x23, 0x0d, 0x28, 0x22, 0x2f, 0x3f, 0x26, // ........A#.("/?& + 0x7d, 0xa3, 0x16, 0x01, 0x76, 0x68, 0x98, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x02, 0x80, 0x33, // }...vh..4&&4&..3 + 0x4d, 0x14, 0x39, 0x35, 0x53, 0x2b, 0x43, 0x3d, 0x8b, 0x2c, 0x15, 0x40, 0x51, 0x51, 0x19, 0x39, // M.95S+C=.,.@QQ.9 + 0xfd, 0x80, 0x40, 0x40, 0xa7, 0x1a, 0x1e, 0x10, 0x49, 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, // ..@@....IJ 2E.=. + 0x4c, 0x35, 0x69, 0x98, 0x3e, 0x39, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x45, 0x3b, 0x4b, 0x35, // L5i.>9..eM..E;K5 + 0x02, 0x80, 0x35, 0x4b, 0x09, 0x13, 0x11, 0x1c, 0x0f, 0x1c, 0x03, 0x4a, 0x37, 0x15, 0x52, 0x3e, // ..5K.......J7.R> + 0x40, 0x23, 0x86, 0x7a, 0x44, 0x3c, 0x98, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // @#.zD<.......... + 0x05, 0x80, 0x00, 0x37, 0x00, 0x3f, 0x00, 0x73, 0x00, 0x00, 0x25, 0x33, 0x11, 0x23, 0x22, 0x2e, // ...7.?.s..%3.#". + 0x02, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x27, 0x26, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x06, 0x15, 0x14, // .'..'&'&'..#"... + 0x1e, 0x02, 0x15, 0x21, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x21, 0x0e, 0x01, 0x15, 0x14, 0x17, // ...!"....3!..... + 0x06, 0x14, 0x16, 0x17, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x24, 0x34, 0x26, 0x22, // ........32>.$4&" + 0x06, 0x14, 0x16, 0x32, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x07, 0x06, 0x23, 0x22, 0x26, // ...2....#!"..#"& + 0x3f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x21, // ?.&547&'#"&5463! + 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x16, 0x17, 0x1e, 0x06, 0x33, 0x21, 0x32, // &54632.......3!2 + 0x16, 0x05, 0x60, 0x20, 0x20, 0x23, 0x41, 0x3c, 0x28, 0x1d, 0x02, 0x03, 0x05, 0x02, 0x48, 0x28, // ..` #A<(.....H( + 0x0e, 0x18, 0x01, 0x13, 0x12, 0x16, 0x15, 0x08, 0x47, 0x59, 0x1e, 0x24, 0x1e, 0xfd, 0xc0, 0x32, // ........GY.$...2 + 0x4e, 0x4c, 0x34, 0x01, 0x4b, 0x0f, 0x14, 0x35, 0x12, 0x23, 0x1e, 0x04, 0x61, 0x57, 0x54, 0xc6, // NL4.K..5.#..aWT. + 0xbe, 0x01, 0x68, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0x4b, 0x35, 0xfe, 0xe0, 0x3b, 0xa4, 0xbe, // ..h&4&&4.K5..;.. + 0x7f, 0x8e, 0xb0, 0x01, 0x01, 0x3d, 0x03, 0x21, 0x04, 0xa9, 0x69, 0x97, 0x98, 0x68, 0x01, 0x76, // .....=.!..i..h.v + 0x16, 0xa3, 0x7d, 0x26, 0x3f, 0x2f, 0x22, 0x28, 0x0d, 0x23, 0x41, 0x02, 0x18, 0x0e, 0x1b, 0x15, // ..}&?/"(.#A..... + 0x18, 0x17, 0x0a, 0x01, 0x20, 0x35, 0x4b, 0x80, 0x02, 0x80, 0x18, 0x32, 0x2a, 0x21, 0x03, 0x03, // .... 5K....2*!.. + 0x06, 0x02, 0x51, 0x40, 0x16, 0x2e, 0x03, 0x27, 0x21, 0x26, 0x17, 0x3d, 0x43, 0x2b, 0x53, 0x35, // ..Q@...'!&.=C+S5 + 0x39, 0x14, 0x4d, 0x33, 0x34, 0x4c, 0x11, 0x3d, 0x19, 0x45, 0x32, 0x20, 0x4a, 0x49, 0x10, 0x18, // 9.M34L.=.E2 JI.. + 0x20, 0x55, 0x52, 0x40, 0x40, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x02, 0x80, 0xfd, 0x80, 0x35, // UR@@&4&&4&....5 + 0x4b, 0x3b, 0x45, 0x9b, 0x8c, 0x05, 0x4c, 0x66, 0x16, 0x15, 0x39, 0x3e, 0x98, 0x69, 0x67, 0x98, // K;E...Lf..9>.ig. + 0x3c, 0x44, 0x7a, 0x86, 0x23, 0x40, 0x3e, 0x52, 0x15, 0x37, 0x4a, 0x03, 0x1c, 0x0f, 0x1c, 0x11, // R.7J..... + 0x13, 0x09, 0x4b, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x07, // ..K............. + 0x00, 0x35, 0x00, 0x68, 0x00, 0x00, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x13, 0x34, // .5.h...4&"...2.4 + 0x23, 0x22, 0x07, 0x2e, 0x01, 0x22, 0x07, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x34, 0x26, 0x23, // #"...".&#"...4&# + 0x22, 0x06, 0x15, 0x11, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, // "..."..#"....... + 0x17, 0x16, 0x17, 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x3e, 0x01, 0x37, 0x14, 0x07, 0x06, 0x15, // ......!54>.7.... + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x2e, 0x05, 0x27, 0x26, 0x27, 0x2e, // ...#!"&5.4..'&'. + 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x16, // .54632..4632.... + 0x17, 0x36, 0x33, 0x32, 0x17, 0x36, 0x16, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0xa6, 0xa7, // .632.6...&4&&4.. + 0x1a, 0x1e, 0x10, 0x49, 0x4a, 0x20, 0x32, 0x45, 0x19, 0x3d, 0x11, 0x4c, 0x34, 0x33, 0x4d, 0x14, // ...IJ 2E.=.L43M. + 0x39, 0x35, 0x53, 0x2b, 0x43, 0x3d, 0x8b, 0x2c, 0x15, 0x40, 0x51, 0x51, 0x19, 0x39, 0x02, 0x80, // 95S+C=.,.@QQ.9.. + 0x40, 0x40, 0x80, 0x45, 0x3b, 0x4b, 0x35, 0xfd, 0x80, 0x35, 0x4b, 0x09, 0x13, 0x11, 0x1c, 0x0f, // @@.E;K5..5K..... + 0x1c, 0x03, 0x4a, 0x37, 0x15, 0x52, 0x3e, 0x40, 0x23, 0x86, 0x7a, 0x44, 0x3c, 0x98, 0x67, 0x69, // ..J7.R>@#.zD<.gi + 0x98, 0x3e, 0x39, 0x15, 0x16, 0x65, 0x4d, 0x8b, 0xa1, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, // .>9..eM..Z4&&4&. + 0x3c, 0xbd, 0x05, 0x1e, 0x23, 0x12, 0x35, 0x14, 0x0f, 0x01, 0x4b, 0x34, 0x4c, 0x4e, 0x32, 0xfd, // <...#.5...K4LN2. + 0xc0, 0x1e, 0x24, 0x1e, 0x59, 0x47, 0x18, 0x42, 0x18, 0x0d, 0x28, 0x48, 0x47, 0x1e, 0x45, 0x47, // ..$.YG.B..(HG.EG + 0x20, 0x20, 0x48, 0xbe, 0xc5, 0x56, 0x85, 0xbd, 0xa4, 0x3b, 0xfe, 0xe0, 0x35, 0x4b, 0x4b, 0x35, // H..V...;..5KK5 + 0x01, 0x20, 0x0a, 0x17, 0x18, 0x15, 0x1b, 0x0e, 0x18, 0x02, 0x41, 0x23, 0x0d, 0x28, 0x22, 0x2f, // . ........A#.("/ + 0x3f, 0x26, 0x7d, 0xa3, 0x16, 0x01, 0x76, 0x68, 0x98, 0x97, 0x69, 0xa9, 0x04, 0x21, 0x03, 0x3c, // ?&}...vh..i..!.< + 0x01, 0xac, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x34, // ...............4 + 0x00, 0x3c, 0x00, 0x70, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x01, 0x3d, 0x01, 0x21, 0x15, 0x14, 0x0e, // .<.p...4..=.!... + 0x02, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x0e, 0x04, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, // .............32> + 0x02, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x16, 0x33, 0x32, 0x37, 0x16, 0x32, // .3...3265..327.2 + 0x36, 0x37, 0x16, 0x33, 0x32, 0x36, 0x02, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x14, // 67.326.4&"...2.. + 0x06, 0x2f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x06, 0x07, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, // ./..#"'.....#"&5 + 0x11, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x37, 0x36, 0x37, 0x3e, 0x06, 0x35, 0x11, // ..#"&54>.767>.5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x17, 0x16, 0x05, 0x80, 0x40, 0x40, 0xfd, // 463!2........@@. + 0x80, 0x18, 0x32, 0x2a, 0x21, 0x09, 0x05, 0x51, 0x40, 0x16, 0x2e, 0x03, 0x27, 0x21, 0x26, 0x17, // ..2*!..Q@...'!&. + 0x3d, 0x43, 0x2b, 0x53, 0x35, 0x39, 0x14, 0x4d, 0x33, 0x34, 0x4c, 0x2e, 0x39, 0x45, 0x32, 0x20, // =C+S59.M34L.9E2 + 0x4a, 0x49, 0x10, 0x18, 0x20, 0x55, 0x52, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x01, 0x26, 0x9b, // JI.. UR.&4&&4.&. + 0x8c, 0x05, 0x4c, 0x66, 0x16, 0x15, 0x36, 0x41, 0x98, 0x69, 0x67, 0x98, 0x36, 0x4a, 0x79, 0x87, // ..Lf..6A.ig.6Jy. + 0x23, 0x40, 0x3e, 0x52, 0x15, 0x37, 0x4a, 0x03, 0x1c, 0x0f, 0x1c, 0x11, 0x13, 0x09, 0x4b, 0x35, // #@>R.7J.......K5 + 0x02, 0x80, 0x35, 0x4b, 0x3b, 0x45, 0x02, 0x40, 0x54, 0xc6, 0xbe, 0x48, 0x20, 0x20, 0x23, 0x41, // ..5K;E.@T..H #A + 0x3c, 0x28, 0x1d, 0x08, 0x04, 0x48, 0x28, 0x0e, 0x18, 0x01, 0x13, 0x12, 0x16, 0x15, 0x08, 0x47, // <(...H(........G + 0x59, 0x1e, 0x24, 0x1e, 0xfd, 0xc0, 0x32, 0x4e, 0x4c, 0x34, 0x01, 0x4b, 0x23, 0x35, 0x12, 0x23, // Y.$...2NL4.K#5.# + 0x1e, 0x04, 0x61, 0x03, 0x3d, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfd, 0x44, 0x8e, 0xb0, 0x01, 0x01, // ..a.=4&&4&.D.... + 0x3d, 0x03, 0x1e, 0x07, 0xa9, 0x69, 0x97, 0x98, 0x68, 0x01, 0x76, 0x16, 0xa3, 0x7d, 0x26, 0x3f, // =....i..h.v..}&? + 0x2f, 0x22, 0x28, 0x0d, 0x23, 0x41, 0x02, 0x18, 0x0e, 0x1b, 0x15, 0x18, 0x17, 0x0a, 0x01, 0x20, // /"(.#A......... + 0x35, 0x4b, 0x4b, 0x35, 0xfe, 0xe0, 0x3b, 0xa4, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // 5KK5..;......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // .........+...54& + 0x23, 0x21, 0x37, 0x36, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x07, 0x06, 0x14, 0x1f, 0x01, // #!764/.&"....... + 0x01, 0x16, 0x32, 0x3f, 0x01, 0x36, 0x34, 0x2f, 0x01, 0x21, 0x32, 0x36, 0x00, 0x10, 0x02, 0x04, // ..2?.64/.!26.... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x05, 0x00, 0x26, 0x1a, 0xfe, 0x0a, 0xbd, 0x13, // $...$ ...&..... + 0x13, 0x5b, 0x12, 0x36, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x12, 0x5b, 0x01, 0x6a, 0x12, 0x36, 0x12, // .[.6...[..[.j.6. + 0x5b, 0x12, 0x12, 0xbd, 0x01, 0xf6, 0x1a, 0x26, 0x01, 0x00, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // [......&......^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x40, 0x80, 0x1a, 0x26, 0xbd, 0x13, // ....a...a.@..&.. + 0x34, 0x13, 0x5b, 0x12, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x12, // 4.[....[.6.[.... + 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x01, 0x2b, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // [.6..&.+.^.....a + 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ...a............ + 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x2f, 0x01, 0x01, 0x26, 0x22, 0x0f, // .....+...4/..&". + 0x01, 0x06, 0x14, 0x1f, 0x01, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x07, 0x06, // .....!".....3!.. + 0x14, 0x1f, 0x01, 0x16, 0x32, 0x37, 0x01, 0x37, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ....27.7$... $.. + 0x12, 0x24, 0x20, 0x04, 0x05, 0x05, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, // .$ ....[...6.[.. + 0xbd, 0xfe, 0x0a, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0xf6, 0xbd, 0x13, 0x13, 0x5b, 0x12, 0x36, 0x12, // ....&&......[.6. + 0x01, 0x6a, 0x5b, 0x01, 0x0d, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, // .j[......^.....a + 0x01, 0xa2, 0x01, 0x61, 0x02, 0x65, 0x36, 0x12, 0x5b, 0x01, 0x6a, 0x12, 0x12, 0x5b, 0x12, 0x36, // ...a.e6.[.j..[.6 + 0x12, 0xbd, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, // ..&...&..4.[...j + 0x5b, 0xfe, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, // [..^.....a...a.. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, // .............+.. + 0x00, 0x34, 0x27, 0x01, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x01, 0x06, 0x14, 0x1f, 0x01, 0x16, 0x32, // .4'.'&"........2 + 0x3f, 0x01, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x17, 0x16, 0x32, 0x3f, 0x01, // ?....;.265...2?. + 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0xfe, // $... $...$ ..... + 0x96, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, // .[.6.[....[.6..& + 0x1a, 0x80, 0x1a, 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x01, 0x0e, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, // ...&..4.[......^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x66, 0x36, 0x12, 0x01, 0x6a, // .....a...a.f6..j + 0x5b, 0x12, 0x12, 0x5b, 0xfe, 0x96, 0x12, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0xfe, 0x0a, 0x1a, // [..[...6.[...... + 0x26, 0x26, 0x1a, 0x01, 0xf6, 0xbd, 0x13, 0x13, 0x5b, 0xfd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // &&......[..^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .a...a.......... + 0x05, 0x80, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x0f, 0x01, // .....+...4/.&".. + 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x27, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, // .4&+."...'&".... + 0x17, 0x01, 0x17, 0x16, 0x32, 0x3f, 0x01, 0x01, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ....2?...... $.. + 0x12, 0x24, 0x20, 0x04, 0x05, 0x04, 0x12, 0x5b, 0x12, 0x36, 0x12, 0xbd, 0x26, 0x1a, 0x80, 0x1a, // .$ ....[.6..&... + 0x26, 0xbd, 0x13, 0x34, 0x13, 0x5b, 0x12, 0x12, 0x01, 0x6a, 0x5b, 0x12, 0x36, 0x12, 0x5b, 0x01, // &..4.[...j[.6.[. + 0x6a, 0x01, 0x0e, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // j......^.....a.. + 0x01, 0x61, 0x02, 0x64, 0x36, 0x12, 0x5b, 0x12, 0x12, 0xbd, 0x01, 0xf6, 0x1a, 0x26, 0x26, 0x1a, // .a.d6.[......&&. + 0xfe, 0x0a, 0xbd, 0x13, 0x13, 0x5b, 0x12, 0x36, 0x12, 0xfe, 0x96, 0x5b, 0x12, 0x12, 0x5b, 0x01, // .....[.6...[..[. + 0x6a, 0x00, 0xff, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, // j...^.....a...a. + 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, // ................ + 0x01, 0xd8, 0x02, 0x18, 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ....... ..... $. + 0x10, 0x12, 0x01, 0x0e, 0x01, 0x07, 0x32, 0x3e, 0x01, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x17, // ......2>.767676. + 0x26, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x06, 0x26, 0x27, 0x14, 0x07, 0x34, 0x26, 0x06, 0x27, // &67>.?..&'..4&.' + 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x22, 0x0e, 0x01, 0x23, 0x26, 0x0e, 0x02, 0x07, // ..'..'.."..#&... + 0x0e, 0x01, 0x07, 0x36, 0x27, 0x26, 0x07, 0x36, 0x26, 0x27, 0x33, 0x2e, 0x02, 0x27, 0x2e, 0x01, // ...6'&.6&'3..'.. + 0x07, 0x06, 0x1e, 0x01, 0x15, 0x16, 0x06, 0x15, 0x14, 0x16, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x16, // ................ + 0x17, 0x16, 0x0e, 0x02, 0x0f, 0x01, 0x06, 0x26, 0x27, 0x26, 0x27, 0x26, 0x07, 0x26, 0x27, 0x26, // .......&'&'&.&'& + 0x07, 0x36, 0x27, 0x26, 0x07, 0x3e, 0x01, 0x35, 0x36, 0x37, 0x3e, 0x02, 0x23, 0x16, 0x37, 0x3e, // .6'&.>.567>.#.7> + 0x01, 0x37, 0x36, 0x1e, 0x01, 0x33, 0x16, 0x36, 0x27, 0x16, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, // .76..3.6'.'&'&.. + 0x17, 0x26, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x22, 0x07, 0x36, 0x26, 0x27, 0x36, 0x27, 0x2e, // .&..'..'".6&'6'. + 0x01, 0x07, 0x0e, 0x01, 0x1e, 0x02, 0x17, 0x16, 0x07, 0x0e, 0x02, 0x07, 0x06, 0x16, 0x07, 0x2e, // ................ + 0x01, 0x27, 0x16, 0x2f, 0x01, 0x22, 0x06, 0x26, 0x27, 0x26, 0x37, 0x36, 0x17, 0x2e, 0x01, 0x27, // .'./.".&'&76...' + 0x06, 0x07, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x17, 0x37, 0x16, 0x17, 0x26, 0x07, 0x06, 0x07, // ...7>.76.7..&... + 0x16, 0x07, 0x2e, 0x02, 0x27, 0x22, 0x07, 0x06, 0x07, 0x16, 0x17, 0x1e, 0x02, 0x37, 0x16, 0x07, // ....'".......7.. + 0x36, 0x17, 0x16, 0x17, 0x16, 0x07, 0x2e, 0x01, 0x07, 0x06, 0x16, 0x37, 0x22, 0x06, 0x14, 0x07, // 6..........7"... + 0x17, 0x06, 0x16, 0x37, 0x06, 0x17, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x06, 0x16, // ...7............ + 0x07, 0x22, 0x06, 0x23, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x37, 0x36, 0x27, 0x26, 0x27, 0x2e, 0x01, // .".#.....76'&'.. + 0x27, 0x32, 0x1e, 0x02, 0x07, 0x06, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x23, 0x32, 0x16, 0x17, 0x1e, // '2.........#2... + 0x01, 0x17, 0x1e, 0x03, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x32, 0x36, 0x37, 0x36, 0x16, 0x17, 0x16, // .........2676... + 0x37, 0x06, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x17, 0x36, 0x37, 0x06, 0x16, 0x37, 0x36, 0x35, 0x06, // 7.......67..765. + 0x27, 0x34, 0x2e, 0x02, 0x36, 0x33, 0x32, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x06, 0x26, 0x27, // '4..6326&'..'.&' + 0x14, 0x06, 0x15, 0x22, 0x27, 0x3e, 0x01, 0x37, 0x3e, 0x03, 0x26, 0x07, 0x06, 0x07, 0x0e, 0x02, // ..."'>.7>.&..... + 0x07, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x01, 0x27, 0x3e, 0x01, 0x37, 0x3e, 0x01, // ..&'..54>.'>.7>. + 0x16, 0x36, 0x37, 0x26, 0x27, 0x26, 0x23, 0x16, 0x36, 0x17, 0x16, 0x37, 0x34, 0x26, 0x37, 0x16, // .67&'&#.6..74&7. + 0x37, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x36, 0x37, 0x16, 0x17, 0x16, 0x17, 0x16, 0x3e, 0x01, 0x26, // 7.....67.....>.& + 0x2f, 0x01, 0x34, 0x35, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x27, 0x32, 0x37, // /.45'..67>.76'27 + 0x22, 0x2e, 0x01, 0x23, 0x36, 0x27, 0x3e, 0x01, 0x37, 0x16, 0x37, 0x36, 0x27, 0x3e, 0x01, 0x37, // "..#6'>.7.76'>.7 + 0x16, 0x36, 0x34, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x36, 0x23, 0x16, 0x37, 0x36, 0x27, 0x36, 0x26, // .647>.?.6#.76'6& + 0x27, 0x36, 0x16, 0x37, 0x36, 0x27, 0x26, 0x03, 0x36, 0x37, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x36, // '6.76'&.67..'&'6 + 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x06, 0x23, 0x07, 0x0e, 0x03, 0x17, 0x26, 0x27, 0x2e, 0x02, 0x06, // ..'...#....&'... + 0x07, 0x0e, 0x01, 0x07, 0x26, 0x36, 0x27, 0x26, 0x0e, 0x04, 0x07, 0x0e, 0x01, 0x07, 0x2e, 0x01, // ....&6'&........ + 0x35, 0x1e, 0x01, 0x17, 0x16, 0x07, 0x06, 0x07, 0x06, 0x17, 0x14, 0x06, 0x17, 0x14, 0x02, 0x2f, // 5............../ + 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x03, 0x44, // ...a.....^.....D + 0x02, 0x0f, 0x06, 0x02, 0x05, 0x05, 0x01, 0x06, 0x10, 0x0e, 0x26, 0x22, 0x11, 0x02, 0x17, 0x03, // ..........&".... + 0x03, 0x18, 0x03, 0x02, 0x0c, 0x0b, 0x01, 0x06, 0x09, 0x0e, 0x02, 0x0a, 0x0a, 0x06, 0x01, 0x02, // ................ + 0x0f, 0x02, 0x01, 0x03, 0x03, 0x05, 0x06, 0x08, 0x07, 0x01, 0x03, 0x06, 0x03, 0x06, 0x02, 0x03, // ................ + 0x0b, 0x03, 0x0f, 0x10, 0x0a, 0x06, 0x09, 0x03, 0x07, 0x05, 0x01, 0x0f, 0x14, 0x03, 0x08, 0x34, // ...............4 + 0x07, 0x05, 0x01, 0x07, 0x01, 0x0d, 0x1c, 0x04, 0x03, 0x1a, 0x03, 0x05, 0x07, 0x07, 0x02, 0x01, // ................ + 0x06, 0x05, 0x04, 0x03, 0x0b, 0x13, 0x04, 0x07, 0x09, 0x17, 0x06, 0x05, 0x24, 0x19, 0x21, 0x06, // ............$.!. + 0x06, 0x07, 0x0c, 0x03, 0x02, 0x03, 0x09, 0x01, 0x0c, 0x07, 0x03, 0x23, 0x0f, 0x05, 0x0d, 0x04, // ...........#.... + 0x09, 0x0a, 0x13, 0x05, 0x0e, 0x03, 0x09, 0x0c, 0x09, 0x05, 0x03, 0x0c, 0x0f, 0x08, 0x0a, 0x01, // ................ + 0x11, 0x10, 0x08, 0x01, 0x09, 0x05, 0x08, 0x08, 0x03, 0x1c, 0x0a, 0x13, 0x1b, 0x07, 0x1b, 0x06, // ................ + 0x05, 0x01, 0x0b, 0x0a, 0x0d, 0x02, 0x0e, 0x06, 0x02, 0x0d, 0x0a, 0x01, 0x03, 0x06, 0x05, 0x05, // ................ + 0x08, 0x03, 0x07, 0x20, 0x0a, 0x04, 0x18, 0x11, 0x05, 0x04, 0x04, 0x01, 0x03, 0x04, 0x0e, 0x03, // ... ............ + 0x2e, 0x30, 0x06, 0x06, 0x05, 0x10, 0x02, 0x22, 0x08, 0x05, 0x0e, 0x06, 0x07, 0x17, 0x14, 0x02, // .0....."........ + 0x07, 0x02, 0x04, 0x0f, 0x0e, 0x08, 0x10, 0x06, 0x92, 0x59, 0x07, 0x05, 0x04, 0x02, 0x03, 0x0a, // .........Y...... + 0x09, 0x06, 0x01, 0x2b, 0x13, 0x02, 0x03, 0x0d, 0x01, 0x10, 0x01, 0x03, 0x07, 0x07, 0x07, 0x05, // ...+............ + 0x01, 0x02, 0x03, 0x11, 0x0d, 0x0d, 0x21, 0x06, 0x02, 0x03, 0x12, 0x0c, 0x04, 0x04, 0x0c, 0x08, // ......!......... + 0x02, 0x17, 0x01, 0x01, 0x03, 0x01, 0x03, 0x19, 0x03, 0x01, 0x02, 0x04, 0x06, 0x02, 0x1a, 0x0f, // ................ + 0x02, 0x03, 0x05, 0x02, 0x02, 0x08, 0x09, 0x06, 0x01, 0x03, 0x0a, 0x0e, 0x14, 0x02, 0x06, 0x10, // ................ + 0x08, 0x09, 0x16, 0x06, 0x05, 0x06, 0x02, 0x02, 0x0d, 0x0c, 0x14, 0x03, 0x05, 0x1b, 0x08, 0x0a, // ................ + 0x0c, 0x11, 0x05, 0x0f, 0x1c, 0x07, 0x24, 0x13, 0x02, 0x05, 0x0b, 0x07, 0x02, 0x05, 0x1a, 0x05, // ......$......... + 0x06, 0x01, 0x03, 0x14, 0x08, 0x0e, 0x1f, 0x12, 0x05, 0x03, 0x02, 0x02, 0x04, 0x09, 0x02, 0x06, // ................ + 0x01, 0x01, 0x14, 0x02, 0x05, 0x16, 0x05, 0x03, 0x0d, 0x02, 0x01, 0x03, 0x02, 0x01, 0x09, 0x06, // ................ + 0x02, 0x0b, 0x0c, 0x13, 0x07, 0x01, 0x04, 0x06, 0x06, 0x07, 0x22, 0x07, 0x0d, 0x13, 0x05, 0x01, // .........."..... + 0x06, 0x03, 0x0c, 0x04, 0x02, 0x05, 0x04, 0x04, 0x01, 0x01, 0x03, 0x03, 0x01, 0x07, 0x2b, 0x06, // ..............+. + 0x0f, 0x07, 0x05, 0x02, 0x05, 0x18, 0x03, 0x19, 0x05, 0x03, 0x08, 0x03, 0x07, 0x05, 0x0a, 0x02, // ................ + 0x0b, 0x08, 0x07, 0x08, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0f, 0x07, 0x0a, 0x0a, 0x01, 0x0e, 0x11, // ................ + 0x04, 0x15, 0x06, 0x07, 0x04, 0x01, 0x08, 0x07, 0x01, 0x09, 0x07, 0x05, 0x05, 0x05, 0x09, 0x0c, // ................ + 0x07, 0x06, 0x05, 0x1f, 0x03, 0x07, 0x02, 0x03, 0x04, 0x16, 0x02, 0x11, 0x03, 0x03, 0x12, 0x0d, // ................ + 0x0a, 0x10, 0x03, 0x0c, 0x09, 0x03, 0x11, 0x02, 0x0f, 0x16, 0x11, 0xbd, 0xce, 0x91, 0x03, 0x13, // ................ + 0x03, 0x12, 0x06, 0x01, 0x07, 0x09, 0x10, 0x03, 0x02, 0x0a, 0x04, 0x0b, 0x06, 0x07, 0x03, 0x03, // ................ + 0x05, 0x06, 0x02, 0x01, 0x15, 0x0f, 0x05, 0x0c, 0x09, 0x0b, 0x06, 0x05, 0x02, 0x01, 0x07, 0x0e, // ................ + 0x05, 0x03, 0x0f, 0x09, 0x0e, 0x04, 0x0d, 0x02, 0x03, 0x06, 0x02, 0x02, 0x13, 0x02, 0x04, 0x03, // ................ + 0x07, 0x13, 0x1b, 0x02, 0x04, 0x10, 0x10, 0x01, 0x05, 0x80, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // ..............^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xfe, 0xc5, 0x01, 0x11, 0x01, 0x0a, 0x0c, // ....a...a....... + 0x01, 0x07, 0x08, 0x06, 0x06, 0x08, 0x13, 0x02, 0x16, 0x01, 0x02, 0x05, 0x05, 0x16, 0x01, 0x10, // ................ + 0x0d, 0x02, 0x06, 0x07, 0x02, 0x04, 0x01, 0x03, 0x09, 0x18, 0x03, 0x05, 0x0b, 0x05, 0x02, 0x07, // ................ + 0x06, 0x05, 0x0a, 0x0a, 0x02, 0x01, 0x01, 0x05, 0x01, 0x02, 0x02, 0x01, 0x05, 0x06, 0x04, 0x01, // ................ + 0x04, 0x10, 0x06, 0x04, 0x09, 0x08, 0x02, 0x05, 0x09, 0x04, 0x06, 0x09, 0x13, 0x03, 0x06, 0x0e, // ................ + 0x05, 0x07, 0x11, 0x0d, 0x08, 0x10, 0x04, 0x08, 0x15, 0x06, 0x02, 0x04, 0x05, 0x03, 0x02, 0x02, // ................ + 0x05, 0x16, 0x0f, 0x19, 0x05, 0x08, 0x09, 0x0d, 0x0d, 0x09, 0x05, 0x01, 0x0e, 0x0f, 0x03, 0x06, // ................ + 0x17, 0x02, 0x0d, 0x0a, 0x01, 0x0f, 0x0c, 0x04, 0x0f, 0x05, 0x18, 0x05, 0x06, 0x01, 0x0a, 0x01, // ................ + 0x18, 0x08, 0x01, 0x12, 0x07, 0x02, 0x04, 0x09, 0x04, 0x04, 0x01, 0x17, 0x0c, 0x0b, 0x01, 0x19, // ................ + 0x01, 0x0f, 0x08, 0x0e, 0x01, 0x0c, 0x0f, 0x04, 0x02, 0x05, 0x07, 0x09, 0x07, 0x04, 0x04, 0x01, // ................ + 0x0a, 0x04, 0x01, 0x05, 0x04, 0x02, 0x04, 0x14, 0x04, 0x05, 0x19, 0x04, 0x09, 0x03, 0x01, 0x04, // ................ + 0x02, 0x07, 0x08, 0x0c, 0x04, 0x02, 0x03, 0x0d, 0x02, 0x0f, 0x1a, 0x01, 0x02, 0x02, 0x09, 0x01, // ................ + 0x0e, 0x07, 0x05, 0x10, 0x09, 0x04, 0x03, 0x06, 0x06, 0x0c, 0x06, 0x03, 0x0e, 0x08, 0x01, 0x01, // ................ + 0x50, 0x8e, 0x07, 0x01, 0x01, 0x10, 0x06, 0x06, 0x08, 0x0b, 0x01, 0x1c, 0x11, 0x04, 0x0b, 0x07, // P............... + 0x02, 0x0e, 0x03, 0x05, 0x1b, 0x01, 0x20, 0x27, 0x04, 0x01, 0x0c, 0x2d, 0x03, 0x03, 0x28, 0x08, // ...... '...-..(. + 0x01, 0x02, 0x0b, 0x09, 0x06, 0x05, 0x23, 0x06, 0x06, 0x1c, 0x09, 0x02, 0x07, 0x0e, 0x06, 0x03, // ......#......... + 0x0e, 0x08, 0x02, 0x14, 0x2a, 0x19, 0x04, 0x05, 0x15, 0x04, 0x03, 0x04, 0x04, 0x01, 0x07, 0x15, // ....*........... + 0x10, 0x16, 0x02, 0x06, 0x1b, 0x14, 0x0a, 0x08, 0x24, 0x06, 0x07, 0x0d, 0x06, 0x0a, 0x02, 0x02, // ........$....... + 0x11, 0x03, 0x04, 0x05, 0x01, 0x02, 0x22, 0x04, 0x13, 0x08, 0x01, 0x0d, 0x12, 0x0b, 0x03, 0x06, // ......"......... + 0x12, 0x06, 0x04, 0x05, 0x08, 0x18, 0x02, 0x03, 0x1d, 0x0f, 0x21, 0x01, 0x09, 0x08, 0x09, 0x06, // ..........!..... + 0x07, 0x12, 0x04, 0x08, 0x18, 0x03, 0x09, 0x02, 0x08, 0x01, 0x09, 0x02, 0x01, 0x03, 0x1d, 0x08, // ................ + 0x04, 0x10, 0x0d, 0x0c, 0x07, 0x01, 0x01, 0x13, 0x03, 0x0f, 0x08, 0x03, 0x03, 0x02, 0x04, 0x08, // ................ + 0x2a, 0x10, 0x0a, 0x21, 0x11, 0x10, 0x02, 0x0f, 0x03, 0x01, 0x01, 0x01, 0x04, 0x04, 0x01, 0x02, // *..!............ + 0x03, 0x03, 0x09, 0x06, 0x0b, 0x0d, 0x01, 0x11, 0x05, 0x1b, 0x12, 0x03, 0x04, 0x03, 0x02, 0x07, // ................ + 0x02, 0x03, 0x05, 0x0e, 0x0a, 0x28, 0x04, 0x03, 0x02, 0x11, 0x0b, 0x07, 0x08, 0x09, 0x09, 0x08, // .....(.......... + 0x03, 0x12, 0x13, 0x09, 0x01, 0x05, 0x08, 0x04, 0x13, 0x10, 0x09, 0x06, 0x04, 0x05, 0x0b, 0x03, // ................ + 0x10, 0x02, 0x0c, 0x0a, 0x08, 0x08, 0x07, 0x07, 0x06, 0x02, 0x08, 0x10, 0x04, 0x05, 0x08, 0x01, // ................ + 0x0b, 0x04, 0x02, 0x0d, 0x0b, 0x09, 0x06, 0x07, 0x02, 0x01, 0x01, 0x02, 0x0a, 0x06, 0x05, 0xfc, // ................ + 0x82, 0x24, 0x99, 0x03, 0x03, 0x02, 0x07, 0x01, 0x07, 0x0c, 0x06, 0x0a, 0x02, 0x02, 0x08, 0x03, // .$.............. + 0x06, 0x02, 0x01, 0x01, 0x03, 0x03, 0x03, 0x01, 0x11, 0x05, 0x01, 0x09, 0x05, 0x02, 0x06, 0x05, // ................ + 0x14, 0x03, 0x05, 0x19, 0x06, 0x06, 0x03, 0x06, 0x0b, 0x02, 0x09, 0x03, 0x04, 0x10, 0x03, 0x04, // ................ + 0x05, 0x03, 0x0a, 0x32, 0x0d, 0x1f, 0x11, 0x19, 0x0f, 0x16, 0x04, 0x07, 0x1b, 0x08, 0x06, 0x00, // ...2............ + 0x00, 0x03, 0x00, 0x15, 0xff, 0x15, 0x06, 0x7e, 0x05, 0x80, 0x00, 0x07, 0x00, 0x15, 0x00, 0x2f, // .......~......./ + 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x09, 0x01, 0x06, 0x23, 0x22, 0x2f, // ..$4&"...2...#"/ + 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x1e, 0x01, 0x01, 0x14, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x00, // .&547........#". + 0x10, 0x00, 0x33, 0x32, 0x16, 0x17, 0x16, 0x14, 0x07, 0x05, 0x15, 0x17, 0x3e, 0x02, 0x33, 0x32, // ..32........>.32 + 0x16, 0x01, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x02, 0xaa, 0xfd, 0x56, 0x25, 0x35, 0x34, 0x27, // ...&4&&4...V%54' + 0x6a, 0x26, 0x26, 0x02, 0xa9, 0x27, 0x97, 0x02, 0xdc, 0x17, 0x2f, 0xeb, 0x8d, 0xb9, 0xfe, 0xf9, // j&&..'..../..... + 0x01, 0x07, 0xb9, 0x3a, 0x7f, 0x2c, 0x10, 0x10, 0xfe, 0xdb, 0xc1, 0x05, 0x94, 0x7b, 0x09, 0x0f, // ...:.,.......{.. + 0x11, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0xe4, 0xfd, 0x56, 0x25, 0x25, 0x6c, 0x24, 0x36, // .&4&&4&...V%%l$6 + 0x35, 0x26, 0x02, 0xa9, 0x62, 0x97, 0x01, 0x8c, 0x27, 0x43, 0x86, 0xa7, 0x01, 0x07, 0x01, 0x72, // 5&..b...'C.....r + 0x01, 0x07, 0x21, 0x1e, 0x0b, 0x22, 0x0b, 0xa9, 0xe0, 0x6b, 0x03, 0x5b, 0x47, 0x14, 0x00, 0x00, // ..!.."...k.[G... + 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // ................ + 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x3b, 0x00, 0x00, 0x25, 0x21, 0x35, 0x21, 0x01, 0x21, 0x35, 0x21, // ...+.;..%!5!.!5! + 0x01, 0x21, 0x35, 0x21, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // .!5!....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x19, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!2.....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x04, 0x00, 0x02, 0x80, 0xfd, 0x80, 0xfe, 0x80, 0x04, 0x00, 0xfc, 0x00, // 3!2............. + 0x02, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x02, 0x00, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, // ........&....&&. + 0x06, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, // ...&&....&&....& + 0x26, 0x1a, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x80, 0x80, 0x01, 0x80, // &....&&....&.... + 0x80, 0x01, 0x80, 0x80, 0xfc, 0x40, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, // .....@...&&....& + 0x26, 0x01, 0xe6, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x01, 0xe6, // &.....&&....&&.. + 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x01, 0x00, 0x05, // ...&&....&&..... + 0xff, 0x80, 0x05, 0x7b, 0x05, 0x00, 0x00, 0x15, 0x00, 0x00, 0x01, 0x16, 0x07, 0x01, 0x11, 0x14, // ...{............ + 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x11, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, // ..#"'.&5..&763!2 + 0x05, 0x7b, 0x11, 0x1f, 0xfe, 0x13, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xff, 0x00, 0x13, 0xfe, 0x13, // .{....'......... + 0x1f, 0x11, 0x11, 0x2a, 0x05, 0x00, 0x2a, 0x04, 0xd9, 0x29, 0x1d, 0xfe, 0x13, 0xfd, 0x1a, 0x2a, // ...*..*..).....* + 0x11, 0x05, 0x13, 0x01, 0x00, 0x13, 0x1a, 0x01, 0xe6, 0x01, 0xed, 0x1d, 0x29, 0x27, 0x00, 0x00, // ............)'.. + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x17, 0x00, 0x1b, // ................ + 0x00, 0x2f, 0x00, 0x00, 0x01, 0x21, 0x35, 0x21, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ./...!5!....#!"& + 0x35, 0x11, 0x21, 0x15, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x3d, 0x01, 0x23, 0x15, 0x21, 0x35, // 5.!...3!26=.#.!5 + 0x01, 0x11, 0x21, 0x11, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, // ..!.463!5463!2.. + 0x01, 0x21, 0x32, 0x16, 0x02, 0x80, 0x02, 0x00, 0xfe, 0x00, 0x04, 0x80, 0x5e, 0x42, 0xfa, 0x40, // .!2.........^B.@ + 0x42, 0x5e, 0x02, 0xa0, 0x26, 0x1a, 0x01, 0x40, 0x1a, 0x26, 0x60, 0xff, 0x00, 0x04, 0x00, 0xf9, // B^..&..@.&`..... + 0x00, 0x5e, 0x42, 0x01, 0x60, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0x01, 0x60, 0x42, 0x5e, 0x05, // .^B.`8(.@(8.`B^. + 0x00, 0x80, 0xfd, 0x00, 0xfe, 0x20, 0x42, 0x5e, 0x5e, 0x42, 0x01, 0xe0, 0xa0, 0x1a, 0x26, 0x26, // ..... B^^B....&& + 0x1a, 0xa0, 0x80, 0x80, 0x01, 0xe0, 0xfe, 0x80, 0x01, 0x80, 0x42, 0x5e, 0xa0, 0x28, 0x38, 0x38, // ..........B^.(88 + 0x28, 0xa0, 0x5e, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x47, // (.^............G + 0x00, 0x00, 0x09, 0x02, 0x37, 0x36, 0x17, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x27, // ....76......#!"' + 0x26, 0x3f, 0x01, 0x09, 0x01, 0x17, 0x16, 0x07, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, // &?.......#!"&5.4 + 0x37, 0x36, 0x1f, 0x01, 0x09, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x36, // 76......#"'&5.46 + 0x33, 0x21, 0x32, 0x17, 0x16, 0x0f, 0x01, 0x09, 0x01, 0x27, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, // 3!2......'&763!2 + 0x16, 0x15, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x05, 0x03, 0xfe, 0x9d, 0x01, 0x63, 0x90, // ......#"'.....c. + 0x1d, 0x29, 0x27, 0x26, 0x1a, 0xfe, 0x40, 0x2a, 0x11, 0x11, 0x1f, 0x90, 0xfe, 0x9d, 0xfe, 0x9d, // .)'&..@*........ + 0x90, 0x1f, 0x11, 0x11, 0x2a, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x90, 0x01, 0x63, 0xfe, // ....*.@.&('...c. + 0x9d, 0x90, 0x13, 0x1a, 0x0c, 0x0c, 0x28, 0x26, 0x1a, 0x01, 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x90, // ......(&...*.... + 0x01, 0x63, 0x01, 0x63, 0x90, 0x1f, 0x11, 0x11, 0x2a, 0x01, 0xc0, 0x1a, 0x26, 0x27, 0x0d, 0x0c, // .c.c....*...&'.. + 0x1a, 0x13, 0x03, 0xe3, 0xfe, 0x9d, 0xfe, 0x9d, 0x90, 0x1f, 0x11, 0x11, 0x2a, 0xfe, 0x40, 0x1a, // ............*.@. + 0x26, 0x28, 0x27, 0x1e, 0x90, 0x01, 0x63, 0xfe, 0x9d, 0x90, 0x1e, 0x27, 0x28, 0x26, 0x1a, 0x01, // &('...c....'(&.. + 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x90, 0x01, 0x63, 0x01, 0x63, 0x90, 0x13, 0x05, 0x11, 0x2a, 0x01, // .*.....c.c....*. + 0xc0, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x90, 0xfe, 0x9d, 0x01, 0x63, 0x90, 0x1e, 0x27, 0x28, 0x26, // ..&('.....c..'(& + 0x1a, 0xfe, 0x40, 0x2a, 0x11, 0x05, 0x13, 0x00, 0x00, 0x06, 0x00, 0x00, 0xff, 0x00, 0x07, 0x80, // ..@*............ + 0x06, 0x00, 0x00, 0x11, 0x00, 0x31, 0x00, 0x39, 0x00, 0x41, 0x00, 0x53, 0x00, 0x5b, 0x00, 0x00, // .....1.9.A.S.[.. + 0x01, 0x06, 0x07, 0x23, 0x22, 0x26, 0x35, 0x10, 0x33, 0x32, 0x1e, 0x01, 0x33, 0x32, 0x37, 0x06, // ...#"&5.32..327. + 0x15, 0x14, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x05, 0x33, 0x32, 0x1e, // .....#!"&54>.32. + 0x02, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x05, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, // .2>.32....."&462 + 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x26, 0x27, 0x36, // ... &.6 ...+.&'6 + 0x35, 0x34, 0x27, 0x16, 0x33, 0x32, 0x3e, 0x01, 0x33, 0x32, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, // 54'.32>.32..."&4 + 0x36, 0x32, 0x02, 0x51, 0xa2, 0x67, 0x86, 0x52, 0x70, 0x7c, 0x06, 0x4b, 0x78, 0x3b, 0x43, 0x42, // 62.Q.g.Rp|.Kx;CB + 0x05, 0x04, 0x80, 0x92, 0x79, 0xfc, 0x96, 0x79, 0x92, 0x07, 0x15, 0x20, 0x36, 0x46, 0x65, 0x3d, // ....y..y... 6Fe= + 0x0a, 0x42, 0x50, 0x86, 0x88, 0x86, 0x50, 0x42, 0x0a, 0x3d, 0x65, 0x46, 0x36, 0x20, 0x15, 0x07, // .BP...PB.=eF6 .. + 0xfc, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x03, 0x56, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, // ........V......> + 0x03, 0x21, 0x70, 0x52, 0x86, 0x67, 0xa2, 0x51, 0x05, 0x42, 0x43, 0x3b, 0x78, 0x4b, 0x06, 0x7c, // .!pR.g.Q.BC;xK.| + 0x80, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x02, 0x80, 0x05, 0x7b, 0x51, 0x4e, 0x01, 0x61, 0x2a, 0x2b, // .........{QN.a*+ + 0x17, 0x25, 0x1d, 0x8b, 0xfd, 0x0e, 0x78, 0x8b, 0x8b, 0x78, 0x35, 0x65, 0x75, 0x64, 0x5f, 0x43, // .%....x..x5eud_C + 0x28, 0x2b, 0x35, 0x2b, 0x2b, 0x35, 0x2b, 0x28, 0x43, 0x5f, 0x64, 0x75, 0x65, 0x05, 0x32, 0xd4, // (+5++5+(C_due.2. + 0x96, 0x96, 0xd4, 0x96, 0xfe, 0x1f, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0xfd, 0x9f, 0x4e, // ...........>...N + 0x51, 0x7b, 0x05, 0x75, 0x8b, 0x1d, 0x25, 0x17, 0x2b, 0x2a, 0x01, 0x6a, 0xd4, 0x96, 0x96, 0xd4, // Q{.u..%.+*.j.... + 0x96, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0xff, 0x90, 0x06, 0x70, 0x05, 0xf0, 0x00, 0x21, // ...........p...! + 0x00, 0x43, 0x00, 0x69, 0x00, 0x00, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x07, 0x1e, 0x04, // .C.i...4/.&#"... + 0x15, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x27, 0x06, 0x15, 0x14, 0x1f, 0x01, 0x16, 0x33, 0x32, // ...#"..'......32 + 0x3f, 0x01, 0x36, 0x01, 0x34, 0x2f, 0x01, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, 0x1f, // ?.6.4/.&#"...... + 0x01, 0x16, 0x33, 0x32, 0x37, 0x2e, 0x04, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x03, 0x17, 0x36, // ..327..54632...6 + 0x00, 0x14, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x35, 0x34, 0x37, 0x27, 0x06, 0x23, // .....#"/.&547'.# + 0x22, 0x2f, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x16, 0x15, 0x14, 0x07, // "/.&4?.632...... + 0x17, 0x36, 0x33, 0x32, 0x1f, 0x01, 0x05, 0xb0, 0x1c, 0xd0, 0x1c, 0x28, 0x2a, 0x1e, 0x03, 0x20, // .632.......(*.. + 0x0b, 0x13, 0x07, 0x38, 0x28, 0x0f, 0x19, 0x1a, 0x0c, 0x1f, 0x03, 0x21, 0x1c, 0xce, 0x1b, 0x29, // ...8(......!...) + 0x28, 0x1c, 0x93, 0x1c, 0xfd, 0x41, 0x1c, 0xce, 0x1c, 0x28, 0x27, 0x1d, 0x93, 0x1c, 0x1c, 0xd0, // (....A...('..... + 0x1b, 0x29, 0x2a, 0x1e, 0x03, 0x20, 0x0b, 0x13, 0x07, 0x38, 0x28, 0x0f, 0x19, 0x1a, 0x0c, 0x1f, // .)*.. ...8(..... + 0x03, 0x21, 0x03, 0x7f, 0x55, 0x93, 0x53, 0x78, 0x79, 0x53, 0xce, 0x53, 0x58, 0x58, 0x56, 0x7a, // .!..U.SxyS.SXXVz + 0x78, 0x54, 0xd0, 0x54, 0x55, 0x93, 0x53, 0x78, 0x79, 0x53, 0xce, 0x53, 0x58, 0x58, 0x56, 0x7a, // xT.TU.SxyS.SXXVz + 0x78, 0x54, 0xd0, 0x01, 0x40, 0x28, 0x1c, 0xd0, 0x1c, 0x20, 0x03, 0x1f, 0x0c, 0x1a, 0x19, 0x0f, // xT..@(... ...... + 0x28, 0x38, 0x07, 0x13, 0x0b, 0x20, 0x03, 0x1f, 0x2a, 0x28, 0x1c, 0xcf, 0x1b, 0x1a, 0x92, 0x1c, // (8... ..*(...... + 0x02, 0xe8, 0x28, 0x1c, 0xcf, 0x1c, 0x1b, 0x92, 0x1c, 0x27, 0x28, 0x1c, 0xd0, 0x1b, 0x1f, 0x03, // ..(......'(..... + 0x1f, 0x0c, 0x1a, 0x19, 0x0f, 0x28, 0x38, 0x07, 0x13, 0x0b, 0x20, 0x03, 0x1f, 0xfd, 0xe1, 0xf0, // .....(8... ..... + 0x53, 0x92, 0x53, 0x55, 0xcf, 0x53, 0x78, 0x7b, 0x56, 0x58, 0x58, 0x54, 0xd0, 0x54, 0xf0, 0x53, // S.SU.Sx{VXXT.T.S + 0x92, 0x53, 0x55, 0xcf, 0x53, 0x78, 0x7b, 0x56, 0x58, 0x58, 0x54, 0xd0, 0x00, 0x01, 0x00, 0x00, // .SU.Sx{VXXT..... + 0x00, 0x00, 0x07, 0x80, 0x05, 0x80, 0x00, 0x1b, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, // .............#!" + 0x00, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x04, 0x17, 0x36, 0x33, 0x32, // .5467&54.32..632 + 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x07, 0x80, 0xe1, 0x9f, 0xfb, 0xc0, 0xb9, 0xfe, 0xf9, 0x8e, // ................ + 0x74, 0x02, 0x01, 0x2c, 0xd4, 0x9e, 0x01, 0x01, 0x3b, 0x46, 0x60, 0x6a, 0x96, 0x29, 0x81, 0xa8, // t..,....;F`j.).. + 0x01, 0x80, 0x9f, 0xe1, 0x01, 0x07, 0xb9, 0x84, 0xdb, 0x36, 0x1c, 0x0f, 0xd4, 0x01, 0x2c, 0xb0, // .........6....,. + 0x8e, 0x3e, 0x96, 0x6a, 0x4b, 0x3f, 0x1e, 0xd1, 0x00, 0x02, 0x00, 0x73, 0xff, 0x80, 0x06, 0x0d, // .>.jK?.....s.... + 0x05, 0x80, 0x00, 0x17, 0x00, 0x21, 0x00, 0x00, 0x25, 0x16, 0x06, 0x23, 0x21, 0x22, 0x26, 0x37, // .....!..%..#!"&7 + 0x01, 0x11, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x11, // ..#"&463!2...+.. + 0x05, 0x01, 0x21, 0x01, 0x27, 0x35, 0x11, 0x23, 0x11, 0x15, 0x05, 0xf7, 0x38, 0x45, 0x6a, 0xfb, // ..!.'5.#....8Ej. + 0x80, 0x6a, 0x45, 0x38, 0x01, 0xf7, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x00, 0x1a, 0x26, 0x26, // .jE8..@.&&....&& + 0x1a, 0x40, 0xfe, 0xec, 0xfe, 0xf0, 0x02, 0xc8, 0xfe, 0xf0, 0x14, 0x80, 0x58, 0x59, 0x7f, 0x7f, // .@..........XY.. + 0x59, 0x03, 0x19, 0x01, 0x8f, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfe, 0x71, 0x44, 0xfe, 0x53, // Y....&4&&4&.qD.S + 0x01, 0xad, 0x1f, 0x25, 0x01, 0x8f, 0xfe, 0x71, 0x25, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, // ...%...q%....... + 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x4e, 0x00, 0x5c, 0x00, 0x6a, 0x00, 0x78, // .........N...j.x + 0x00, 0x86, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x32, 0x16, 0x14, 0x06, 0x22, 0x26, 0x34, 0x05, 0x01, // .......2..."&4.. + 0x16, 0x07, 0x06, 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x07, 0x06, 0x07, 0x16, 0x07, 0x0e, // ......#"'....... + 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x33, 0x32, 0x17, 0x36, // ...#"'&7>.7632.6 + 0x3f, 0x01, 0x27, 0x26, 0x27, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x36, 0x37, 0x36, // ?.'&'.#"'..'&676 + 0x33, 0x32, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x07, 0x16, 0x1f, 0x01, 0x01, 0x36, 0x33, 0x32, 0x1f, // 32..........632. + 0x01, 0x16, 0x17, 0x16, 0x07, 0x05, 0x36, 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x16, 0x17, // ......6&'&#".... + 0x16, 0x33, 0x32, 0x03, 0x3e, 0x01, 0x27, 0x26, 0x23, 0x22, 0x07, 0x0e, 0x01, 0x17, 0x16, 0x33, // .32.>.'&#".....3 + 0x32, 0x01, 0x17, 0x35, 0x34, 0x3f, 0x01, 0x27, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x1f, // 2..54?.'........ + 0x01, 0x01, 0x27, 0x01, 0x15, 0x07, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x01, 0x37, 0x01, // ..'...........7. + 0x07, 0x06, 0x07, 0x03, 0xa6, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x6c, 0x01, 0xfb, 0x1c, 0x03, // .....4&&4&.l.... + 0x05, 0x1e, 0x80, 0x0d, 0x10, 0x11, 0x0e, 0xfd, 0x4e, 0x6e, 0x08, 0x04, 0x0e, 0x04, 0x07, 0x62, // ........Nn.....b + 0x53, 0x84, 0x91, 0x88, 0x56, 0x5a, 0x0b, 0x07, 0x62, 0x52, 0x84, 0x92, 0x53, 0x44, 0x09, 0x0d, // S...VZ..bR..SD.. + 0x7a, 0x7a, 0x0d, 0x09, 0x44, 0x53, 0x92, 0x84, 0x52, 0x62, 0x07, 0x05, 0x29, 0x2b, 0x55, 0x89, // zz..DS..Rb..)+U. + 0x91, 0x84, 0x53, 0x62, 0x07, 0x04, 0x0e, 0x04, 0x08, 0x6e, 0x02, 0xb2, 0x0e, 0x11, 0x10, 0x0d, // ..Sb.....n...... + 0x80, 0x1e, 0x05, 0x03, 0x1c, 0xfb, 0x5c, 0x2e, 0x32, 0x51, 0x5c, 0x64, 0x4a, 0x27, 0x2e, 0x32, // ........2Q.dJ'.2 + 0x51, 0x5c, 0x64, 0x4a, 0x2e, 0x51, 0x32, 0x2e, 0x27, 0x4a, 0x64, 0x5c, 0x51, 0x32, 0x2e, 0x27, // Q.dJ.Q2.'Jd.Q2.' + 0x4a, 0x64, 0x01, 0x0e, 0x60, 0x21, 0x0e, 0x4f, 0x1a, 0x03, 0x0e, 0x05, 0x02, 0x04, 0x01, 0xd7, // Jd..`!.O........ + 0x60, 0x02, 0xe0, 0x80, 0xfd, 0x00, 0xa0, 0x09, 0x02, 0x05, 0x04, 0x0e, 0x04, 0x1a, 0x03, 0x60, // `..............` + 0x80, 0xfd, 0xf8, 0xb1, 0x02, 0x0b, 0x02, 0x80, 0x26, 0x34, 0x26, 0x26, 0x34, 0x1a, 0xfe, 0x72, // ........&4&&4..r + 0x14, 0x24, 0x23, 0x10, 0x40, 0x07, 0x08, 0x01, 0x83, 0x42, 0x04, 0x01, 0x31, 0x30, 0x4d, 0x8d, // .$#.@....B..10M. + 0x35, 0x54, 0x4e, 0x54, 0x7b, 0x4c, 0x8e, 0x35, 0x54, 0x1f, 0x0d, 0x09, 0x49, 0x49, 0x09, 0x0d, // 5TNT{L.5T...II.. + 0x1f, 0x54, 0x35, 0x8e, 0x4c, 0x3b, 0x6c, 0x27, 0x4f, 0x54, 0x34, 0x8e, 0x4d, 0x30, 0x31, 0x01, // .T5.L;l'OT4.M01. + 0x04, 0x42, 0x01, 0x83, 0x08, 0x07, 0x40, 0x10, 0x23, 0x24, 0x14, 0x8a, 0x2a, 0x84, 0x33, 0x3b, // .B....@.#$..*.3; + 0x24, 0x2a, 0x84, 0x33, 0x3b, 0xfd, 0x3b, 0x33, 0x84, 0x2a, 0x24, 0x3b, 0x33, 0x84, 0x2a, 0x24, // $*.3;.;3.*$;3.*$ + 0x02, 0xa0, 0x3a, 0x0b, 0x24, 0x14, 0x08, 0x2f, 0x1a, 0x03, 0x10, 0x04, 0x02, 0x03, 0x01, 0xe9, // ..:.$../........ + 0x20, 0x02, 0x40, 0x40, 0xfe, 0x51, 0x71, 0x60, 0x08, 0x02, 0x04, 0x04, 0x10, 0x04, 0x1a, 0xfe, // .@@.Qq`........ + 0xc0, 0x40, 0x01, 0x98, 0x8a, 0x03, 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x00, 0x07, 0x00, // .@.............. + 0x06, 0x00, 0x00, 0x1f, 0x00, 0x22, 0x00, 0x25, 0x00, 0x33, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x32, // .....".%.3.<...2 + 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x21, 0x22, 0x26, 0x35, 0x11, // .....#!"&5.!"&5. + 0x34, 0x36, 0x37, 0x01, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x36, 0x33, 0x07, 0x01, // 467.>.3!2...63.. + 0x21, 0x09, 0x01, 0x21, 0x13, 0x01, 0x11, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x11, // !..!...!...#!.!. + 0x34, 0x36, 0x01, 0x11, 0x21, 0x11, 0x14, 0x06, 0x23, 0x21, 0x11, 0x06, 0xa0, 0x28, 0x38, 0x38, // 46..!...#!...(88 + 0x28, 0xfc, 0x40, 0x28, 0x38, 0xfd, 0xe0, 0x28, 0x38, 0x28, 0x1c, 0x01, 0x98, 0x1c, 0x60, 0x28, // (.@(8..(8(....`( + 0x01, 0xa0, 0x28, 0x38, 0x44, 0x3c, 0x80, 0xfe, 0xd5, 0x01, 0x2b, 0xfd, 0x80, 0xfe, 0xd5, 0x01, // ..(8D<....+..... + 0x2b, 0xc4, 0x01, 0x3c, 0xfe, 0x80, 0x38, 0x28, 0xfe, 0x60, 0x02, 0x00, 0x28, 0x03, 0xd8, 0xfe, // +..<..8(.`..(... + 0x80, 0x38, 0x28, 0xfe, 0x60, 0x04, 0x80, 0x38, 0x28, 0xfb, 0x40, 0x28, 0x38, 0x38, 0x28, 0x01, // .8(.`..8(.@(88(. + 0x20, 0x38, 0x28, 0x02, 0xa0, 0x28, 0x60, 0x1c, 0x01, 0x98, 0x1c, 0x28, 0x38, 0x28, 0xfe, 0xb8, // 8(..(`....(8(.. + 0x28, 0xd5, 0xfe, 0xd5, 0x02, 0xab, 0xfe, 0xd5, 0xfe, 0xa4, 0x01, 0x3c, 0x01, 0xa0, 0xfe, 0x60, // (..........<...` + 0x28, 0x38, 0xfd, 0x80, 0x01, 0x00, 0x28, 0x60, 0xfc, 0xf8, 0x04, 0x80, 0xfe, 0x60, 0x28, 0x38, // (8....(`.....`(8 + 0xfd, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0xff, 0x84, 0x05, 0x7c, 0x05, 0x7c, 0x00, 0x3f, // ...........|.|.? + 0x00, 0x00, 0x25, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // ..%..#"'.&54632. + 0x01, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, // .....#"'.&#".... + 0x01, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x27, 0x01, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, // ..32654'.&#".... + 0x01, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, // .....#"'.&54632. + 0x01, 0x16, 0x05, 0x7c, 0x9e, 0x75, 0x87, 0x64, 0xfc, 0xf7, 0x71, 0xdc, 0x9f, 0x9e, 0x73, 0x02, // ...|.u.d..q...s. + 0x5d, 0x0a, 0x3d, 0x10, 0x0d, 0x0a, 0xfd, 0xa2, 0x4f, 0x66, 0x6a, 0x92, 0x4c, 0x03, 0x08, 0x3f, // ].=.....Ofj.L..? + 0x52, 0x40, 0x54, 0x3f, 0xfd, 0xbb, 0x1a, 0x22, 0x1d, 0x26, 0x19, 0x01, 0x9a, 0x0a, 0x3e, 0x10, // R@T?...".&....>. + 0x0c, 0x0a, 0xfe, 0x66, 0x3f, 0x72, 0x52, 0x58, 0x3d, 0x02, 0x45, 0x64, 0x97, 0x75, 0x9e, 0x64, // ...f?rRX=.Ed.u.d + 0x03, 0x08, 0x73, 0x9c, 0x9f, 0xde, 0x71, 0xfd, 0xa2, 0x0a, 0x0c, 0x10, 0x3d, 0x0a, 0x02, 0x5f, // ..s...q.....=.._ + 0x4d, 0x96, 0x6a, 0x69, 0x4c, 0xfc, 0xf7, 0x3f, 0x54, 0x40, 0x52, 0x3f, 0x02, 0x45, 0x18, 0x26, // M.jiL..?T@R?.E.& + 0x1d, 0x20, 0x1b, 0xfe, 0x66, 0x0a, 0x0c, 0x10, 0x3e, 0x0a, 0x01, 0x9a, 0x3d, 0x58, 0x52, 0x72, // . ..f...>...=XRr + 0x3f, 0xfd, 0xbb, 0x62, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x03, // ?..b............ + 0x00, 0x21, 0x00, 0x31, 0x00, 0x45, 0x00, 0x00, 0x29, 0x01, 0x11, 0x21, 0x01, 0x33, 0x11, 0x34, // .!.1.E..)..!.3.4 + 0x26, 0x27, 0x01, 0x2e, 0x01, 0x23, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x23, // &'...#...#!"&5.# + 0x11, 0x33, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x01, 0x11, 0x34, 0x26, 0x2b, 0x01, // .3.463!2....4&+. + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, // ".....;.26....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x1e, 0x01, 0x01, 0x80, // "&5.463!2....... + 0x03, 0x00, 0xfd, 0x00, 0x03, 0x80, 0x80, 0x14, 0x0a, 0xfe, 0xe7, 0x0a, 0x30, 0x0f, 0x38, 0x28, // ............0.8( + 0xfd, 0xc0, 0x28, 0x38, 0x80, 0x80, 0x38, 0x28, 0x03, 0x40, 0x28, 0x38, 0xfe, 0x80, 0x13, 0x0d, // ..(8..8(.@(8.... + 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x02, 0x80, 0x38, 0x28, 0xfa, 0xc0, 0x28, 0x38, // ..........8(..(8 + 0x38, 0x28, 0x03, 0xa0, 0x28, 0x60, 0x1c, 0x01, 0x18, 0x1c, 0x28, 0x01, 0x80, 0xfe, 0x80, 0x03, // 8(..(`....(..... + 0x80, 0x0e, 0x31, 0x0a, 0x01, 0x19, 0x0a, 0x14, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0xa0, // ..1......`(88(.. + 0xfb, 0x00, 0x01, 0xa0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x00, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, // ....(88(...@.... + 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x13, 0xfc, 0x60, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, 0x28, 0x38, // .......`(88(.@(8 + 0x28, 0x1c, 0xfe, 0xe8, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // (....`.......... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..........#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // 463!2....w.@w..w + 0x03, 0xc0, 0x77, 0xa9, 0x04, 0x60, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // ..w..`.@w..w..w. + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0x00, 0x0f, // ................ + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // .../..%...#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // 463!2.....#!"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x06, 0x00, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, // 463!2...&....&&. + 0x05, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, // ...&&....&&....& + 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xc0, 0x80, 0x1a, 0x26, // &....&&....&...& + 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x01, 0xe6, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, // &...&&....&&...& + 0x26, 0x01, 0xe6, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x06, 0x00, 0x00, // &....&&...&&.... + 0xff, 0xc0, 0x07, 0x00, 0x05, 0x40, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x27, 0x00, 0x37, // .....@.......'.7 + 0x00, 0x47, 0x00, 0x00, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x12, 0x14, 0x06, 0x22, // .G..$.."&462..." + 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // &462....#!"&=.46 + 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0x15, 0x14, 0x06, // 3!2...."&462.... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, // #!"&=.463!2..... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x70, 0xa0, // #!"&=.463!2...p. + 0x70, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x05, 0xf0, 0x13, 0x0d, 0xfb, 0x40, 0x0d, // pp.pp.pp......@. + 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xfa, 0x80, 0x70, 0xa0, 0x70, 0x70, 0xa0, 0x05, 0xf0, // .........p.pp... + 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, // ...@...........@ + 0x0d, 0x13, 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0xd0, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0x01, 0x90, // ..........pp.p.. + 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfd, 0xa0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, // .pp.p........... + 0x03, 0xe3, 0xa0, 0x70, 0x70, 0xa0, 0x70, 0xfd, 0xa0, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, // ...pp.p......... + 0x13, 0x13, 0x01, 0xf3, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x00, // ................ + 0x00, 0x06, 0x00, 0x0f, 0xff, 0x00, 0x07, 0x00, 0x05, 0xf7, 0x00, 0x1e, 0x00, 0x3c, 0x00, 0x4c, // .............<.L + 0x00, 0x5c, 0x00, 0x6c, 0x00, 0x7c, 0x00, 0x00, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x37, 0x16, // ...l.|.....#"'7. + 0x33, 0x32, 0x36, 0x35, 0x34, 0x07, 0x27, 0x3e, 0x02, 0x37, 0x35, 0x22, 0x06, 0x23, 0x15, 0x23, // 32654.'>.75".#.# + 0x35, 0x21, 0x15, 0x07, 0x1e, 0x01, 0x13, 0x15, 0x21, 0x26, 0x35, 0x34, 0x3e, 0x03, 0x35, 0x34, // 5!......!&54>.54 + 0x26, 0x23, 0x22, 0x07, 0x27, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x33, // &#".'>.32......3 + 0x35, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, // 5....#!"&=.463!2 + 0x16, 0x01, 0x15, 0x21, 0x35, 0x33, 0x34, 0x36, 0x3d, 0x01, 0x23, 0x06, 0x07, 0x27, 0x37, 0x33, // ...!5346=.#..'73 + 0x11, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, // .....#!"&=.463!2 + 0x16, 0x11, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, // .....#!"&=.463!2 + 0x16, 0x01, 0x7d, 0x6d, 0x51, 0x6a, 0x42, 0x39, 0x31, 0x39, 0x1d, 0x2b, 0x69, 0x1a, 0x08, 0x31, // ..}mQjB919.+i..1 + 0x24, 0x13, 0x10, 0x41, 0x10, 0x6a, 0x01, 0x4d, 0x5f, 0x33, 0x3c, 0x02, 0xfe, 0x96, 0x06, 0x2f, // $..A.j.M_3<..../ + 0x42, 0x42, 0x2f, 0x1d, 0x19, 0x2e, 0x23, 0x55, 0x18, 0x5f, 0x3a, 0x49, 0x64, 0x44, 0x52, 0x45, // BB/...#U._:IdDRE + 0x01, 0x7f, 0x05, 0xea, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, 0x12, 0x0e, 0x04, 0xc0, 0x0d, 0x13, // .......@........ + 0xfa, 0x80, 0xfe, 0xb1, 0x6b, 0x01, 0x02, 0x08, 0x2a, 0x47, 0x88, 0x6a, 0x05, 0xec, 0x13, 0x0d, // ....k...*G.j.... + 0xfb, 0x40, 0x0d, 0x13, 0x12, 0x0e, 0x04, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfb, 0x40, 0x0d, 0x13, // .@...........@.. + 0x13, 0x0d, 0x04, 0xc0, 0x0d, 0x13, 0x54, 0x50, 0x5c, 0x42, 0x58, 0x2d, 0x1d, 0x1c, 0x40, 0x08, // ......TP.BX-..@. + 0x38, 0x0a, 0x43, 0x29, 0x12, 0x01, 0x02, 0x35, 0x98, 0x58, 0x73, 0x0c, 0x4a, 0x02, 0x40, 0x9f, // 8.C)...5.Xs.J.@. + 0x24, 0x12, 0x33, 0x54, 0x34, 0x2b, 0x2c, 0x17, 0x19, 0x1b, 0x3a, 0x3b, 0x33, 0x39, 0x53, 0x47, // $.3T4+,...:;39SG + 0x32, 0x53, 0x2e, 0x37, 0x19, 0x3c, 0xfe, 0xc1, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0e, 0x12, // 2S.7.<.......... + 0x13, 0x03, 0x76, 0x63, 0x63, 0x29, 0xa2, 0x28, 0x0c, 0x11, 0x25, 0x4c, 0x7f, 0xfe, 0x6c, 0xfe, // ..vcc).(..%L..l. + 0x7d, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xc0, 0x0e, 0x12, 0x13, 0x01, 0xf3, 0xc0, 0x0d, 0x13, 0x13, // }............... + 0x0d, 0xc0, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ................ + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x35, 0x00, 0x65, 0x00, 0x00, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x14, // .....5.e...2.... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x25, 0x26, 0x27, 0x26, 0x35, 0x34, // .#!"&=.463%&'&54 + 0x37, 0x36, 0x21, 0x32, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x0f, 0x01, 0x2f, 0x01, // 76!2........../. + 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, // &'&#"........... + 0x03, 0x21, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, // .!...........#"/ + 0x01, 0x26, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x27, 0x26, 0x3f, 0x01, 0x35, 0x37, 0x1e, 0x02, 0x17, // .&'&=.4'&?.57... + 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x06, // .....32767654'&. + 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xf9, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xc3, 0x1c, 0x17, 0x30, // ......@........0 + 0x86, 0x85, 0x01, 0x04, 0x32, 0x75, 0x42, 0x6f, 0x0a, 0x0b, 0x0e, 0x05, 0x0c, 0x54, 0x0e, 0x32, // ....2uBo.....T.2 + 0x35, 0x58, 0x7a, 0x72, 0x44, 0x43, 0x42, 0x42, 0xd5, 0x45, 0x68, 0x3a, 0x25, 0xec, 0x01, 0x9b, // 5XzrDCBB.Eh:%... + 0x07, 0x29, 0x17, 0x30, 0x25, 0x48, 0x50, 0x49, 0x50, 0x7b, 0x72, 0x51, 0x8c, 0x39, 0x0f, 0x08, // .).0%HPIP{rQ.9.. + 0x02, 0x01, 0x01, 0x02, 0x66, 0x0f, 0x1e, 0x0f, 0x05, 0x23, 0x2d, 0x2b, 0x3e, 0x3b, 0x49, 0x40, // ....f....#-+>;I@ + 0x4b, 0x4d, 0x2d, 0x2f, 0x51, 0x22, 0x02, 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // KM-/Q"....@....@ + 0x0e, 0x12, 0x40, 0x23, 0x2d, 0x61, 0x5b, 0xb5, 0x80, 0x7f, 0x13, 0x0c, 0x24, 0x26, 0x50, 0x7b, // ..@#-a[.....$&P{ + 0x3c, 0x12, 0x1b, 0x03, 0x06, 0x02, 0x95, 0x38, 0x5b, 0x3b, 0x3a, 0x58, 0x49, 0x43, 0x43, 0x3e, // <......8[;:XICC> + 0x14, 0x2e, 0x1c, 0x18, 0xff, 0x00, 0x27, 0x35, 0x6f, 0x65, 0x37, 0x31, 0x23, 0x2e, 0x30, 0x12, // ......'5oe71#.0. + 0x15, 0x17, 0x28, 0x10, 0x0c, 0x08, 0x0e, 0x0d, 0x6c, 0x30, 0x1e, 0x26, 0x25, 0x2c, 0x02, 0x22, // ..(.....l0.&%,." + 0x4a, 0x26, 0x08, 0x39, 0x25, 0x24, 0x15, 0x16, 0x1b, 0x1a, 0x3c, 0x3d, 0x44, 0x54, 0x49, 0x1d, // J&.9%$....<=DTI. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x63, 0x00, 0x73, 0x00, 0x00, // ...........c.s.. + 0x13, 0x26, 0x2f, 0x01, 0x36, 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x32, 0x37, // .&/.632..3276727 + 0x07, 0x17, 0x15, 0x06, 0x23, 0x22, 0x07, 0x06, 0x15, 0x14, 0x16, 0x15, 0x17, 0x13, 0x16, 0x17, // ....#".......... + 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x2e, // ...327676767654. + 0x01, 0x2f, 0x01, 0x26, 0x27, 0x26, 0x0f, 0x01, 0x27, 0x37, 0x33, 0x17, 0x16, 0x37, 0x17, 0x16, // ./.&'&..'73..7.. + 0x15, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x16, 0x15, 0x16, 0x13, 0x16, 0x07, // ................ + 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, 0x35, // .......#"'&'&'&5 + 0x11, 0x34, 0x27, 0x26, 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, // .4'&.54&#!"..... + 0x33, 0x21, 0x32, 0x36, 0x30, 0x25, 0x08, 0x03, 0x0d, 0x1b, 0x3c, 0x34, 0x84, 0x22, 0x56, 0x52, // 3!260%....<4."VR + 0x74, 0x1e, 0x38, 0x1e, 0x01, 0x02, 0x3c, 0x40, 0x3c, 0x13, 0x0d, 0x01, 0x01, 0x0e, 0x06, 0x2d, // t.8...<@<......- + 0x23, 0x3d, 0x58, 0x59, 0x68, 0x57, 0x38, 0x2b, 0x30, 0x11, 0x24, 0x11, 0x15, 0x07, 0x0f, 0x06, // #=XYhW8+0.$..... + 0x04, 0x05, 0x13, 0x22, 0x2b, 0x64, 0x0e, 0x02, 0x54, 0xcd, 0x4c, 0x78, 0x12, 0x06, 0x04, 0x2d, // ..."+d..T.Lx...- + 0x27, 0x49, 0x06, 0x0f, 0x03, 0x08, 0x0e, 0x06, 0x15, 0x0f, 0x1a, 0x26, 0x4a, 0x4b, 0x6b, 0x6d, // 'I.........&JKkm + 0x92, 0xa7, 0x75, 0x77, 0x3c, 0x3d, 0x16, 0x10, 0x11, 0x19, 0x05, 0x56, 0x12, 0x0e, 0xfa, 0x40, // ..uw<=.....V...@ + 0x0e, 0x12, 0x12, 0x0e, 0x05, 0xc0, 0x0e, 0x12, 0x05, 0x21, 0x02, 0x02, 0x58, 0x01, 0x04, 0x07, // .........!..X... + 0x03, 0x04, 0x01, 0x02, 0x0e, 0x40, 0x09, 0x09, 0x19, 0x0e, 0x76, 0x0d, 0x27, 0x06, 0xe5, 0xfe, // .....@....v.'... + 0xe8, 0x7c, 0x4e, 0x3b, 0x21, 0x2f, 0x1c, 0x12, 0x21, 0x24, 0x1c, 0x38, 0x3a, 0x49, 0x9c, 0x4f, // .|N;!/..!$.8:I.O + 0x62, 0x93, 0x56, 0x3b, 0x43, 0x15, 0x23, 0x01, 0x02, 0x03, 0x56, 0x0a, 0x03, 0x0d, 0x02, 0x26, // b.V;C.#...V....& + 0x0d, 0x07, 0x18, 0x0c, 0x01, 0x0b, 0x06, 0x0f, 0x1a, 0x07, 0x28, 0x0b, 0x13, 0xfe, 0x87, 0xc3, // ..........(..... + 0x6d, 0x4c, 0x2e, 0x41, 0x3a, 0x39, 0x20, 0x21, 0x2e, 0x2f, 0x4b, 0x4c, 0x77, 0x50, 0x9d, 0x01, // mL.A:9 !./KLwP.. + 0x4d, 0xbc, 0x19, 0x24, 0xfa, 0x82, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x00, // M..$..@....@.... + 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0x00, // .?.O._.o........ + 0x25, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // %54&#!".....3!26 + 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x01, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x11, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // .54&#!".....3!26 + 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, 0x0e, // ...........@.... + 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, // .......@........ + 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0xfe, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, // .....@.......... + 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, // ...@............ + 0x01, 0x40, 0x0e, 0x12, 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, // .@.............@ + 0x0e, 0x12, 0xfe, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, // .............@.. + 0x02, 0x00, 0x12, 0x0e, 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x12, 0x0e, // ...........@.... + 0xfe, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x40, 0x0e, 0x12, 0x80, 0x5e, 0x42, 0xfa, 0xc0, 0x42, // .......@...^B..B + 0x5e, 0x5e, 0x42, 0x05, 0x40, 0x42, 0x5e, 0xa0, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ^^B.@B^......... + 0x12, 0x01, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0xfe, 0x8e, 0xc0, 0x0e, // ................ + 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x03, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, // ................ + 0x12, 0x12, 0xfe, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0xfe, 0x8e, 0xc0, // ................ + 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x03, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // ................ + 0x0e, 0x12, 0x12, 0xfe, 0x8e, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x8e, // ................ + 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x12, 0x01, 0x4e, 0xfb, 0xc0, 0x42, 0x5e, 0x5e, // ..........N..B^^ + 0x42, 0x04, 0x40, 0x42, 0x5e, 0x5e, 0x00, 0x00, 0x00, 0x06, 0x00, 0x1b, 0xff, 0x9b, 0x06, 0x80, // B.@B^^.......... + 0x06, 0x00, 0x00, 0x03, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x00, // .........#.+.3.. + 0x09, 0x01, 0x27, 0x01, 0x24, 0x14, 0x07, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, // ..'.$...."/.&47. + 0x36, 0x32, 0x1f, 0x01, 0x25, 0x17, 0x0f, 0x01, 0x2f, 0x01, 0x3f, 0x01, 0x01, 0x17, 0x0f, 0x01, // 62..%.../.?..... + 0x2f, 0x01, 0x3f, 0x01, 0x01, 0x17, 0x0f, 0x01, 0x2f, 0x01, 0x3f, 0x01, 0x01, 0x17, 0x0f, 0x01, // /.?...../.?..... + 0x2f, 0x01, 0x3f, 0x01, 0x04, 0xa6, 0x01, 0x25, 0x6b, 0xfe, 0xdb, 0x02, 0x2a, 0x12, 0xfa, 0xfa, // /.?....%k...*... + 0x12, 0x36, 0x12, 0xc6, 0x12, 0x12, 0x05, 0x06, 0x12, 0x36, 0x12, 0xc6, 0xfa, 0xcb, 0x62, 0x62, // .6.......6....bb + 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x01, 0x7c, 0xc4, 0xc4, 0x3c, 0x3c, 0xc4, 0xc4, 0x3c, 0x03, 0xde, // ..bb..|..<<..<.. + 0x62, 0x62, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0xfd, 0x9e, 0x62, 0x62, 0x1e, 0x1e, 0x62, 0x62, 0x1e, // bb..bb...bb..bb. + 0x03, 0xbb, 0x01, 0x25, 0x6b, 0xfe, 0xdb, 0xd5, 0x36, 0x12, 0xfa, 0xfa, 0x12, 0x12, 0xc6, 0x12, // ...%k...6....... + 0x36, 0x12, 0x05, 0x06, 0x12, 0x12, 0xc6, 0x91, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x1e, 0x62, 0xfe, // 6.........bb..b. + 0xfc, 0x3c, 0x3c, 0xc4, 0xc4, 0x3c, 0x3c, 0xc4, 0xfd, 0x5e, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x1e, // .<<..<<..^..bb.. + 0x62, 0x02, 0x1e, 0x1e, 0x1e, 0x62, 0x62, 0x1e, 0x1e, 0x62, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, // b....bb..b.....@ + 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18, 0x00, 0x4d, 0x00, 0x00, // .............M.. + 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x21, 0x11, 0x23, 0x22, 0x0f, 0x01, 0x06, // $4&"...2.!.#"... + 0x15, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x11, 0x14, 0x0e, 0x04, 0x26, 0x23, // ..4&"...2.....&# + 0x14, 0x06, 0x22, 0x26, 0x35, 0x21, 0x14, 0x06, 0x22, 0x26, 0x35, 0x23, 0x22, 0x06, 0x2e, 0x04, // .."&5!.."&5#"... + 0x35, 0x34, 0x36, 0x33, 0x11, 0x34, 0x26, 0x3e, 0x03, 0x3f, 0x01, 0x3e, 0x01, 0x3b, 0x01, 0x35, // 5463.4&>.?.>.;.5 + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0xfe, 0xcc, 0x01, // 463!2...LhLLh... + 0x80, 0x9e, 0x0d, 0x09, 0xc3, 0x09, 0x05, 0x00, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x01, 0x4c, 0x08, // ........LhLLh.L. + 0x13, 0x0e, 0x21, 0x0c, 0x27, 0x03, 0x96, 0xd4, 0x96, 0xfe, 0x80, 0x96, 0xd4, 0x96, 0x40, 0x03, // ..!.'.........@. + 0x27, 0x0c, 0x21, 0x0e, 0x13, 0x08, 0x26, 0x1a, 0x01, 0x01, 0x04, 0x09, 0x13, 0x0d, 0xc6, 0x13, // '.!...&......... + 0x3f, 0x1b, 0xa0, 0x26, 0x1a, 0x04, 0x00, 0x1a, 0x26, 0x4c, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x02, // ?..&....&LhLLhL. + 0x80, 0x01, 0x00, 0x09, 0xc3, 0x09, 0x0d, 0xfd, 0xae, 0x68, 0x4c, 0x4c, 0x68, 0x4c, 0x04, 0xc0, // .........hLLhL.. + 0xfc, 0x00, 0x0f, 0x17, 0x0e, 0x09, 0x03, 0x01, 0x01, 0x6a, 0x96, 0x96, 0x6a, 0x6a, 0x96, 0x96, // .........j..jj.. + 0x6a, 0x01, 0x01, 0x03, 0x09, 0x0e, 0x17, 0x0f, 0x1a, 0x26, 0x01, 0x40, 0x08, 0x36, 0x16, 0x2f, // j........&.@.6./ + 0x1b, 0x22, 0x0d, 0xc6, 0x13, 0x1a, 0xc0, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ."......&&...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x10, 0x02, 0x04, 0x23, 0x22, // .......J......#" + 0x27, 0x36, 0x37, 0x36, 0x37, 0x1e, 0x01, 0x33, 0x32, 0x3e, 0x01, 0x35, 0x34, 0x2e, 0x01, 0x23, // '6767..32>.54..# + 0x22, 0x0e, 0x03, 0x15, 0x14, 0x16, 0x17, 0x16, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x27, 0x26, 0x35, // ".......7>.76'&5 + 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x02, 0x35, 0x34, // 4632....#"&7>.54 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x03, 0x06, 0x17, 0x26, 0x02, 0x35, 0x34, 0x12, 0x24, // &#".......&.54.$ + 0x20, 0x04, 0x06, 0x00, 0xce, 0xfe, 0x9f, 0xd1, 0x6f, 0x6b, 0x3b, 0x13, 0x09, 0x2d, 0x14, 0x6a, // .......ok;..-.j + 0x3d, 0x79, 0xbe, 0x68, 0x77, 0xe2, 0x8e, 0x69, 0xb6, 0x7f, 0x5b, 0x2b, 0x50, 0x4d, 0x1e, 0x08, // =y.hw..i..[+PM.. + 0x02, 0x0c, 0x02, 0x06, 0x11, 0x33, 0xd1, 0xa9, 0x97, 0xa9, 0x89, 0x6b, 0x3d, 0x4a, 0x0e, 0x08, // .....3.....k=J.. + 0x25, 0x17, 0x36, 0x32, 0x3e, 0x56, 0x19, 0x63, 0x11, 0x04, 0xce, 0xfe, 0xce, 0x01, 0x61, 0x01, // %.62>V.c......a. + 0xa2, 0x01, 0x61, 0x03, 0x51, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0x20, 0x5d, 0x47, 0x22, 0xb1, 0x27, // ..a.Q.^... ]G".' + 0x39, 0x89, 0xf0, 0x96, 0x72, 0xc8, 0x7e, 0x3a, 0x60, 0x7d, 0x86, 0x43, 0x68, 0x9e, 0x20, 0x0c, // 9...r.~:`}.Ch. . + 0x20, 0x07, 0x30, 0x06, 0x17, 0x14, 0x3d, 0x5a, 0x97, 0xd9, 0xa4, 0x83, 0xaa, 0xee, 0x57, 0x3d, // .0...=Z......W= + 0x23, 0x75, 0x59, 0x1f, 0x32, 0x42, 0x72, 0x55, 0x49, 0x31, 0xfe, 0x5e, 0x46, 0x6b, 0x5b, 0x01, // #uY.2BrUI1.^Fk[. + 0x7c, 0xe9, 0xd1, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // |...a........... + 0x05, 0x80, 0x00, 0x4c, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x36, // ...L...2.....#!6 + 0x37, 0x36, 0x37, 0x1e, 0x01, 0x33, 0x32, 0x12, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x03, // 767..32.54..#".. + 0x15, 0x14, 0x16, 0x17, 0x16, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, 0x26, 0x35, 0x34, 0x36, 0x33, // .....67676'&5463 + 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, // 2....#"&7>.54&#" + 0x06, 0x15, 0x14, 0x17, 0x03, 0x06, 0x17, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x04, // .......#"&5.463. + 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0xfd, 0x2b, 0x55, 0x17, 0x09, 0x2c, 0x15, 0x69, 0x3c, 0xb5, 0xe5, // .w..w.+U..,.i<.. + 0x46, 0x7b, 0xb6, 0x6a, 0x68, 0xb5, 0x7d, 0x5a, 0x2b, 0x4f, 0x4d, 0x0d, 0x15, 0x04, 0x0a, 0x05, // F{.jh.}Z+OM..... + 0x06, 0x11, 0x32, 0xcf, 0xa7, 0x95, 0xa7, 0x87, 0x6a, 0x3c, 0x4a, 0x0e, 0x08, 0x25, 0x16, 0x35, // ..2.....jX......W<"uW.1A + 0x71, 0x53, 0x48, 0x31, 0xfe, 0x62, 0x64, 0x9a, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x00, 0x00, // qSH1.bd..w..w... + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x17, 0x00, 0x22, 0x00, 0x33, // .............".3 + 0x00, 0x67, 0x00, 0x00, 0x05, 0x14, 0x07, 0x21, 0x22, 0x26, 0x27, 0x3e, 0x03, 0x33, 0x32, 0x17, // .g.....!"&'>.32. + 0x1e, 0x09, 0x01, 0x06, 0x07, 0x11, 0x16, 0x33, 0x32, 0x37, 0x06, 0x15, 0x14, 0x13, 0x14, 0x06, // .......327...... + 0x23, 0x22, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x25, 0x11, 0x14, 0x06, 0x23, // #"..54632..%...# + 0x21, 0x36, 0x35, 0x34, 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x03, 0x34, 0x26, 0x27, 0x2e, 0x03, 0x27, // !654..54>.4&'..' + 0x33, 0x37, 0x21, 0x22, 0x06, 0x07, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x11, // 37!"..463!2...!. + 0x23, 0x11, 0x21, 0x15, 0x21, 0x11, 0x33, 0x11, 0x02, 0xa6, 0x0a, 0xfe, 0x84, 0x5f, 0x99, 0x1b, // #.!.!.3......_.. + 0x18, 0x5a, 0x6e, 0x68, 0x37, 0x20, 0x11, 0x06, 0x31, 0x11, 0x2d, 0x13, 0x24, 0x11, 0x19, 0x0a, // .Znh7 ..1.-.$... + 0x09, 0xfe, 0xdb, 0xea, 0x97, 0x67, 0xaa, 0x20, 0x26, 0x15, 0xec, 0x57, 0x61, 0x33, 0x5c, 0x40, // .....g. &..Wa3.@ + 0x30, 0x17, 0x67, 0x5d, 0x42, 0x6a, 0x3e, 0x20, 0x03, 0xd2, 0xa9, 0x77, 0xfe, 0x2c, 0x27, 0x2c, // 0.g]Bj> ...w.,', + 0x43, 0x4d, 0x43, 0x2c, 0x2e, 0x42, 0x41, 0x2e, 0x35, 0x31, 0x06, 0x10, 0x09, 0x0b, 0x05, 0x87, // CMC,.BA.51...... + 0x87, 0xfe, 0x4b, 0x8a, 0xd5, 0x4c, 0xa2, 0x7e, 0x03, 0xc0, 0x77, 0xa9, 0xff, 0x00, 0x80, 0xff, // ..K..L.~..w..... + 0x00, 0x01, 0x00, 0x80, 0x39, 0x26, 0x21, 0x71, 0x5b, 0x2d, 0x41, 0x22, 0x0e, 0x02, 0x04, 0x22, // ....9&!q[-A"..." + 0x0c, 0x22, 0x11, 0x22, 0x19, 0x24, 0x21, 0x27, 0x01, 0x4a, 0x07, 0x4e, 0x01, 0xb1, 0x76, 0x05, // .".".$!'.J.N..v. + 0x3d, 0x19, 0x43, 0x01, 0xad, 0x64, 0x79, 0x34, 0x53, 0x68, 0x68, 0x2f, 0x60, 0x8a, 0x52, 0x7e, // =.C..dy4Shh/`.R~ + 0x86, 0x1e, 0xfd, 0x20, 0x77, 0xa9, 0x49, 0x54, 0x42, 0x71, 0x49, 0x45, 0x32, 0x3b, 0x1e, 0x24, // ... w.ITBqIE2;.$ + 0x40, 0x3b, 0x46, 0x74, 0x92, 0x91, 0x2e, 0x06, 0x0a, 0x05, 0x0e, 0x0a, 0x40, 0x4d, 0x5f, 0x7e, // @;Ft........@M_~ + 0xae, 0xa9, 0x77, 0x60, 0x01, 0x00, 0xff, 0x00, 0x80, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ..w`............ + 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x1c, 0x00, 0x2d, 0x00, 0x63, // .............-.c + 0x00, 0x6f, 0x00, 0x00, 0x25, 0x34, 0x2e, 0x08, 0x27, 0x26, 0x23, 0x22, 0x0e, 0x03, 0x15, 0x14, // .o..%4..'&#".... + 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, // ..32>..4..#".... + 0x03, 0x33, 0x32, 0x36, 0x03, 0x21, 0x07, 0x23, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x03, 0x15, 0x14, // .326.!.#........ + 0x1e, 0x05, 0x15, 0x14, 0x07, 0x06, 0x21, 0x22, 0x2e, 0x03, 0x35, 0x34, 0x37, 0x3e, 0x03, 0x37, // ......!"..547>.7 + 0x26, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x01, // &54>.7.#"&54676. + 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x03, 0x6c, 0x09, 0x0a, 0x19, // .!.#.!5!.3..l... + 0x11, 0x24, 0x13, 0x2d, 0x11, 0x31, 0x06, 0x11, 0x21, 0x36, 0x68, 0x70, 0x54, 0x36, 0x47, 0x73, // .$.-.1..!6hpT6Gs + 0x7e, 0x40, 0x3b, 0x6b, 0x5e, 0x37, 0x78, 0x21, 0x3d, 0x6b, 0x42, 0x5d, 0x66, 0x17, 0x30, 0x40, // ~@;k^7x!=kB]f.0@ + 0x5c, 0x33, 0x61, 0x57, 0x83, 0x01, 0xb5, 0x87, 0x87, 0x47, 0x4e, 0x2e, 0x42, 0x42, 0x2e, 0x21, // .3aW.....GN.BB.! + 0x35, 0x40, 0x40, 0x35, 0x21, 0x8c, 0x98, 0xfe, 0xf4, 0x3b, 0x79, 0x7b, 0x5e, 0x3c, 0x25, 0x20, // 5@@5!....;y{^<% + 0x80, 0xa2, 0x94, 0x4c, 0x40, 0x04, 0x06, 0x0a, 0x02, 0x28, 0x1e, 0x95, 0xd5, 0xbe, 0x8b, 0x5e, // ...L@....(.....^ + 0x04, 0x6c, 0xff, 0x00, 0x80, 0xff, 0x00, 0x01, 0x00, 0x80, 0x47, 0x15, 0x27, 0x21, 0x24, 0x19, // .l........G.'!$. + 0x22, 0x11, 0x22, 0x0c, 0x22, 0x04, 0x02, 0x0e, 0x24, 0x38, 0x5e, 0x3c, 0x44, 0x6b, 0x3d, 0x1e, // "."."...$8^.2.... + 0x22, 0x26, 0x35, 0x21, 0x14, 0x06, 0x23, 0x11, 0x32, 0x16, 0x15, 0x21, 0x34, 0x36, 0x13, 0x11, // "&5!..#.2..!46.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x00, // ..#!"&5.463!2... + 0x01, 0x80, 0x80, 0x72, 0x94, 0x4d, 0x2a, 0x0d, 0x02, 0x80, 0x02, 0x00, 0x2a, 0x4d, 0x7e, 0x96, // ...r.M*.....*M~. + 0x7e, 0x4d, 0x2a, 0x2a, 0x4d, 0x7e, 0x96, 0x7e, 0x4d, 0x02, 0x2a, 0x6a, 0x96, 0xfb, 0x80, 0x96, // ~M**M~.~M.*j.... + 0x6a, 0x6a, 0x96, 0x04, 0x80, 0x96, 0xea, 0x26, 0x1a, 0xf9, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x07, // jj.....&....&&.. + 0x00, 0x1a, 0x26, 0x01, 0x80, 0x60, 0x01, 0xc0, 0x89, 0x50, 0x25, 0x14, 0xfe, 0xe0, 0xe6, 0x8c, // ..&..`...P%..... + 0x90, 0x7c, 0x4e, 0x4e, 0x7c, 0x90, 0x8c, 0x90, 0x7c, 0x4e, 0x4e, 0x7c, 0xfe, 0x2a, 0x02, 0x00, // .|NN|...|NN|.*.. + 0x96, 0x6a, 0x6a, 0x96, 0xfe, 0x00, 0x96, 0x6a, 0x6a, 0x96, 0x03, 0x40, 0xfb, 0x80, 0x1a, 0x26, // .jj....jj..@...& + 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x40, 0x04, 0x00, // &....&&......@.. + 0x03, 0x80, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, // ..........."'.&4 + 0x36, 0x33, 0x21, 0x32, 0x04, 0x00, 0x13, 0xfe, 0x40, 0x13, 0x34, 0x13, 0xfe, 0x40, 0x13, 0x26, // 63!2....@.4..@.& + 0x1a, 0x03, 0x80, 0x1a, 0x03, 0x5a, 0x34, 0x13, 0xfe, 0x40, 0x13, 0x13, 0x01, 0xc0, 0x13, 0x34, // .....Z4..@.....4 + 0x26, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x03, 0x40, 0x00, 0x0d, // &............@.. + 0x00, 0x00, 0x00, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, // .....#!"&47.62.. + 0x04, 0x00, 0x26, 0x1a, 0xfc, 0x80, 0x1a, 0x26, 0x13, 0x01, 0xc0, 0x13, 0x34, 0x13, 0x01, 0xc0, // ..&....&....4... + 0x01, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x13, 0x01, 0xc0, 0x13, 0x13, 0xfe, 0x40, 0x00, 0x00, 0x00, // .Z4&&4......@... + 0x00, 0x01, 0x00, 0x40, 0x00, 0x80, 0x02, 0x80, 0x04, 0x80, 0x00, 0x0d, 0x00, 0x00, 0x01, 0x11, // ...@............ + 0x14, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x16, 0x02, 0x80, 0x26, 0x34, // .."'.&47.62...&4 + 0x13, 0xfe, 0x40, 0x13, 0x13, 0x01, 0xc0, 0x13, 0x34, 0x26, 0x04, 0x40, 0xfc, 0x80, 0x1a, 0x26, // ..@.....4&.@...& + 0x13, 0x01, 0xc0, 0x13, 0x34, 0x13, 0x01, 0xc0, 0x13, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ....4....&...... + 0x00, 0x80, 0x02, 0x40, 0x04, 0x80, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, // ...@..........." + 0x26, 0x35, 0x11, 0x34, 0x36, 0x32, 0x17, 0x01, 0x02, 0x40, 0x13, 0xfe, 0x40, 0x13, 0x34, 0x26, // &5.462...@..@.4& + 0x26, 0x34, 0x13, 0x01, 0xc0, 0x02, 0x9a, 0x34, 0x13, 0xfe, 0x40, 0x13, 0x26, 0x1a, 0x03, 0x80, // &4.....4..@.&... + 0x1a, 0x26, 0x13, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, // .&..@........... + 0x05, 0x80, 0x00, 0x06, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x00, 0x33, 0x21, 0x11, 0x21, 0x11, 0x14, // ..........3!.!.. + 0x16, 0x25, 0x11, 0x21, 0x11, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .%.!.!26....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0xa0, 0x02, 0x60, 0xfd, 0x80, 0x13, 0x05, 0x6d, // 5.463!2...`....m + 0xfd, 0x80, 0x02, 0x60, 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfa, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x05, // ...`...^B..B^^B. + 0x40, 0x42, 0x5e, 0x04, 0x80, 0xfb, 0xa0, 0x0d, 0x13, 0x20, 0x04, 0x60, 0xfb, 0x80, 0x13, 0x04, // @B^...... .`.... + 0xcd, 0xfb, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0x04, 0xc0, 0x42, 0x5e, 0x5e, 0x00, 0x02, 0x00, 0x00, // ..@B^^B..B^^.... + 0xff, 0xc0, 0x04, 0x00, 0x05, 0x40, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, // .....@.......... + 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x12, 0x14, 0x06, 0x23, 0x21, 0x22, // ."'.&463!2...#!" + 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x04, 0x00, 0x13, 0xfe, 0x40, 0x13, 0x34, 0x13, // &47.62......@.4. + 0xfe, 0x40, 0x13, 0x26, 0x1a, 0x03, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfc, 0x80, 0x1a, 0x26, 0x13, // .@.&....&&....&. + 0x01, 0xc0, 0x13, 0x34, 0x13, 0x01, 0xc0, 0x01, 0xda, 0x34, 0x13, 0xfe, 0x40, 0x13, 0x13, 0x01, // ...4.....4..@... + 0xc0, 0x13, 0x34, 0x26, 0x01, 0x5a, 0x34, 0x26, 0x26, 0x34, 0x13, 0x01, 0xc0, 0x13, 0x13, 0xfe, // ..4&.Z4&&4...... + 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xc0, 0x04, 0x00, 0x02, 0x00, 0x00, 0x0d, // @............... + 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, // ......."'.&463!2 + 0x04, 0x00, 0x13, 0xfe, 0x40, 0x13, 0x34, 0x13, 0xfe, 0x40, 0x13, 0x26, 0x1a, 0x03, 0x80, 0x1a, // ....@.4..@.&.... + 0x01, 0xda, 0x34, 0x13, 0xfe, 0x40, 0x13, 0x13, 0x01, 0xc0, 0x13, 0x34, 0x26, 0x00, 0x00, 0x00, // ..4..@.....4&... + 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x40, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x14, // .........@...... + 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x04, 0x00, 0x26, 0x1a, // .#!"&47.62....&. + 0xfc, 0x80, 0x1a, 0x26, 0x13, 0x01, 0xc0, 0x13, 0x34, 0x13, 0x01, 0xc0, 0x03, 0x5a, 0x34, 0x26, // ...&....4....Z4& + 0x26, 0x34, 0x13, 0x01, 0xc0, 0x13, 0x13, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // &4......@....... + 0xff, 0x80, 0x07, 0x00, 0x05, 0x00, 0x00, 0x1a, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, // .........:...... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x16, 0x17, 0x04, 0x17, 0x1e, 0x02, 0x3b, 0x02, 0x32, 0x3e, // #!"&5.......;.2> + 0x01, 0x37, 0x36, 0x25, 0x36, 0x13, 0x14, 0x06, 0x07, 0x00, 0x07, 0x0e, 0x04, 0x2b, 0x02, 0x22, // .76%6........+." + 0x2e, 0x03, 0x27, 0x26, 0x24, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, // ..'&$'..5463!2.. + 0x00, 0x5e, 0x42, 0xfa, 0x40, 0x42, 0x5e, 0x2c, 0x39, 0x01, 0x6a, 0x87, 0x39, 0x47, 0x76, 0x33, // .^B.@B^,9.j.9Gv3 + 0x01, 0x01, 0x33, 0x76, 0x47, 0x39, 0xaa, 0x01, 0x48, 0x39, 0x2b, 0x62, 0x49, 0xfe, 0x88, 0x5c, // ..3vG9..H9+bI... + 0x0a, 0x41, 0x2b, 0x3d, 0x36, 0x17, 0x01, 0x01, 0x17, 0x36, 0x3d, 0x2b, 0x41, 0x0a, 0x5b, 0xfe, // .A+=6....6=+A.[. + 0xaa, 0x22, 0x3e, 0x6e, 0x53, 0x4d, 0x05, 0xc0, 0x41, 0x5f, 0x03, 0x3a, 0xfc, 0xe6, 0x42, 0x5e, // .">nSM..A_.:..B^ + 0x5e, 0x42, 0x03, 0x1a, 0x31, 0x26, 0xf6, 0x63, 0x2a, 0x2f, 0x31, 0x31, 0x2f, 0x2a, 0x7b, 0xde, // ^B..1&.c*/11/*{. + 0x27, 0x01, 0x56, 0x4f, 0x90, 0x33, 0xfe, 0xfb, 0x40, 0x07, 0x2f, 0x1d, 0x24, 0x12, 0x12, 0x24, // '.VO.3..@./.$..$ + 0x1d, 0x2f, 0x07, 0x40, 0xed, 0x18, 0x2a, 0x93, 0x3f, 0x4e, 0x68, 0x5e, 0x00, 0x03, 0x00, 0x00, // ./.@..*.?Nh^.... + 0xff, 0xb0, 0x06, 0x00, 0x05, 0x6c, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x11, // .....l.....+.... + 0x21, 0x11, 0x01, 0x16, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x01, 0x11, // !....+."&5462... + 0x21, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x06, 0x15, 0x11, 0x21, 0x12, 0x10, 0x2f, 0x01, // !.4&#".....!../. + 0x21, 0x15, 0x23, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x01, 0x5d, 0xfe, 0xb6, 0x01, 0x5f, 0x01, 0x67, // !.#>.32..]..._.g + 0x54, 0x02, 0x52, 0x64, 0x67, 0xa6, 0x64, 0x04, 0x8f, 0xfe, 0xb7, 0x51, 0x56, 0x3f, 0x55, 0x15, // T.Rdg.d....QV?U. + 0x0b, 0xfe, 0xb7, 0x02, 0x01, 0x01, 0x01, 0x49, 0x02, 0x14, 0x2a, 0x47, 0x67, 0x3f, 0xab, 0xd0, // .......I..*Gg?.. + 0x03, 0x8f, 0xfc, 0x21, 0x03, 0xdf, 0x01, 0x32, 0x49, 0x62, 0x62, 0x49, 0x4a, 0x61, 0x61, 0xfc, // ...!...2IbbIJaa. + 0xdd, 0xfd, 0xc8, 0x02, 0x12, 0x69, 0x77, 0x45, 0x33, 0x1e, 0x33, 0xfd, 0xd7, 0x01, 0x8f, 0x01, // .....iwE3.3..... + 0xf0, 0x30, 0x30, 0x90, 0x20, 0x30, 0x38, 0x1f, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .00. 08......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x34, 0x00, 0x00, 0x00, 0x10, 0x02, 0x06, 0x04, 0x23, // .......4.......# + 0x22, 0x24, 0x27, 0x26, 0x36, 0x3f, 0x01, 0x36, 0x33, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x3e, // "$'&6?.63....32> + 0x02, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x17, 0x16, 0x07, 0x06, 0x23, 0x21, 0x22, 0x26, // .4..#"......#!"& + 0x35, 0x11, 0x34, 0x37, 0x36, 0x1f, 0x01, 0x36, 0x24, 0x33, 0x32, 0x04, 0x16, 0x06, 0x00, 0x7a, // 5.476..6$32....z + 0xce, 0xfe, 0xe4, 0x9c, 0xac, 0xfe, 0xca, 0x6d, 0x07, 0x01, 0x08, 0x89, 0x0a, 0x0f, 0x10, 0x07, // .......m........ + 0x49, 0xd4, 0x77, 0x68, 0xbd, 0x8a, 0x51, 0x51, 0x8a, 0xbd, 0x68, 0x62, 0xb4, 0x46, 0x89, 0x1f, // I.wh..QQ..hb.F.. + 0x11, 0x11, 0x2a, 0xfe, 0x40, 0x1a, 0x26, 0x28, 0x27, 0x1e, 0x82, 0x6b, 0x01, 0x13, 0x93, 0x9c, // ..*.@.&('..k.... + 0x01, 0x1c, 0xce, 0x03, 0x1c, 0xfe, 0xc8, 0xfe, 0xe4, 0xce, 0x7a, 0x91, 0x84, 0x0a, 0x19, 0x08, // ..........z..... + 0x8a, 0x09, 0x02, 0x0a, 0x5f, 0x68, 0x51, 0x8a, 0xbd, 0xd0, 0xbd, 0x8a, 0x51, 0x47, 0x42, 0x8a, // ...._hQ.....QGB. + 0x1e, 0x27, 0x28, 0x26, 0x1a, 0x01, 0xc0, 0x2a, 0x11, 0x11, 0x1f, 0x81, 0x65, 0x6f, 0x7a, 0xce, // .'(&...*....eoz. + 0x00, 0x01, 0x00, 0x28, 0xff, 0x15, 0x06, 0xeb, 0x05, 0xd8, 0x00, 0x71, 0x00, 0x00, 0x21, 0x14, // ...(.......q..!. + 0x0f, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x07, 0x06, 0x22, 0x27, // ...#"'.&547..."' + 0x1e, 0x06, 0x15, 0x14, 0x07, 0x0e, 0x05, 0x23, 0x22, 0x27, 0x01, 0x26, 0x35, 0x34, 0x3e, 0x04, // .......#"'.&54>. + 0x37, 0x36, 0x33, 0x32, 0x1e, 0x05, 0x17, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x2e, 0x06, // 7632...&47.62... + 0x35, 0x34, 0x37, 0x3e, 0x05, 0x33, 0x32, 0x17, 0x01, 0x16, 0x15, 0x14, 0x0e, 0x04, 0x07, 0x06, // 547>.32......... + 0x23, 0x22, 0x2e, 0x05, 0x27, 0x16, 0x14, 0x0f, 0x01, 0x01, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, // #"..'.....632... + 0x06, 0xeb, 0x25, 0x6b, 0x27, 0x34, 0x35, 0x25, 0xfe, 0x95, 0x26, 0x2b, 0xff, 0x00, 0x7e, 0x0e, // ..%k'45%..&+..~. + 0x28, 0x0e, 0x02, 0x15, 0x04, 0x10, 0x04, 0x08, 0x03, 0x1c, 0x03, 0x1b, 0x0b, 0x1a, 0x12, 0x1a, // (............... + 0x0d, 0x28, 0x1c, 0xfe, 0x68, 0x1c, 0x09, 0x09, 0x16, 0x0b, 0x1e, 0x03, 0x1e, 0x26, 0x0a, 0x10, // .(..h........&.. + 0x11, 0x0a, 0x11, 0x06, 0x14, 0x02, 0x0e, 0x0e, 0x01, 0x5c, 0x0e, 0x28, 0x0e, 0x02, 0x15, 0x04, // ...........(.... + 0x10, 0x04, 0x08, 0x03, 0x1c, 0x03, 0x1b, 0x0b, 0x1a, 0x12, 0x1a, 0x0d, 0x28, 0x1c, 0x01, 0x98, // ............(... + 0x1c, 0x09, 0x09, 0x16, 0x0b, 0x1e, 0x03, 0x1e, 0x26, 0x0a, 0x10, 0x11, 0x0a, 0x11, 0x06, 0x14, // ........&....... + 0x02, 0x0e, 0x0e, 0x7e, 0x01, 0x00, 0x2b, 0x35, 0x34, 0x27, 0x01, 0x6b, 0x25, 0x35, 0x25, 0x6c, // ...~..+54'.k%5%l + 0x25, 0x25, 0x01, 0x6c, 0x24, 0x36, 0x35, 0x2b, 0x01, 0x00, 0x7e, 0x0e, 0x0e, 0x02, 0x14, 0x06, // %%.l$65+..~..... + 0x11, 0x0a, 0x11, 0x10, 0x0a, 0x26, 0x1e, 0x03, 0x1e, 0x0b, 0x16, 0x09, 0x09, 0x1c, 0x01, 0x98, // .....&.......... + 0x1c, 0x28, 0x0d, 0x1a, 0x12, 0x1a, 0x0b, 0x1b, 0x03, 0x1c, 0x03, 0x08, 0x04, 0x10, 0x04, 0x15, // .(.............. + 0x02, 0x0e, 0x28, 0x0e, 0x01, 0x5c, 0x0e, 0x0e, 0x02, 0x14, 0x06, 0x11, 0x0a, 0x11, 0x10, 0x0a, // ..(............. + 0x26, 0x1e, 0x03, 0x1e, 0x0b, 0x16, 0x09, 0x09, 0x1c, 0xfe, 0x68, 0x1c, 0x28, 0x0d, 0x1a, 0x12, // &.........h.(... + 0x1a, 0x0b, 0x1b, 0x03, 0x1c, 0x03, 0x08, 0x04, 0x10, 0x04, 0x15, 0x02, 0x0e, 0x28, 0x0e, 0x7e, // .............(.~ + 0xff, 0x00, 0x2b, 0x25, 0xfe, 0x95, 0x27, 0x00, 0x00, 0x07, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ..+%..'......... + 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x21, 0x00, 0x29, 0x00, 0x31, 0x00, 0x39, 0x00, 0x4b, // .......!.).1.9.K + 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, // ...4&"...2.4&".. + 0x16, 0x32, 0x01, 0x13, 0x36, 0x2e, 0x01, 0x06, 0x07, 0x03, 0x0e, 0x01, 0x07, 0x06, 0x1e, 0x01, // .2..6........... + 0x36, 0x37, 0x36, 0x26, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, // 676&$4&"...2.4&" + 0x06, 0x14, 0x16, 0x32, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x10, 0x07, 0x06, // ...2.4&"...2.... + 0x23, 0x21, 0x22, 0x27, 0x26, 0x11, 0x34, 0x12, 0x36, 0x24, 0x20, 0x04, 0x16, 0x12, 0x01, 0x80, // #!"'&.4.6$ ..... + 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x0b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xf7, 0x65, 0x06, // KjKKj..KjKKj..e. + 0x1b, 0x32, 0x2e, 0x07, 0x65, 0x3c, 0x5e, 0x10, 0x14, 0x50, 0x9a, 0x8a, 0x14, 0x10, 0x2c, 0x02, // .2..e<^..P....,. + 0x62, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xfd, 0xcb, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, 0x0b, 0x4b, // bKjKKj..KjKKj..K + 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x8b, 0x8d, 0x13, 0x23, 0xfa, 0x86, 0x23, 0x13, 0x8d, 0x8e, 0xf0, // jKKj....#..#.... + 0x01, 0x4c, 0x01, 0x6c, 0x01, 0x4c, 0xf0, 0x8e, 0x01, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x02, // .L.l.L...KjKKjK. + 0x0b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfe, 0x9f, 0x01, 0x7e, 0x1a, 0x2d, 0x0e, 0x1b, 0x1a, 0xfe, // .jKKjK...~.-.... + 0x82, 0x05, 0x4d, 0x3c, 0x4d, 0x8a, 0x28, 0x50, 0x4d, 0x3c, 0x72, 0x0e, 0x6a, 0x4b, 0x4b, 0x6a, // ..M. + 0x37, 0x3e, 0x05, 0x37, 0x26, 0x02, 0x35, 0x34, 0x12, 0x24, 0x20, 0x04, 0x04, 0x4c, 0xfe, 0x68, // 7>.7&.54.$ ..L.h + 0xfe, 0x9d, 0xd1, 0x8f, 0x82, 0x57, 0x1b, 0x18, 0x2e, 0x98, 0x7b, 0x2b, 0x39, 0x45, 0x3d, 0xcc, // .....W....{+9E=. + 0x01, 0x63, 0xd1, 0xd1, 0x01, 0x51, 0xf0, 0xfe, 0x64, 0xf4, 0x46, 0x4b, 0xc6, 0xfe, 0xfa, 0x31, // .c...Q..d.FK...1 + 0x41, 0x05, 0x0f, 0x18, 0x04, 0x03, 0x05, 0x01, 0x0a, 0x02, 0x0c, 0x02, 0x07, 0x30, 0x15, 0x29, // A............0.) + 0x18, 0x1e, 0x0b, 0x9d, 0xb5, 0xf0, 0x01, 0x9c, 0x01, 0xe8, 0x01, 0x9c, 0x04, 0x80, 0x8b, 0xec, // ................ + 0x89, 0x70, 0xcb, 0x4a, 0x32, 0x60, 0x5b, 0x51, 0x3f, 0x6c, 0x26, 0x06, 0x08, 0x8b, 0xec, 0x01, // .p.J2`[Q?l&..... + 0x12, 0xec, 0xc7, 0xfe, 0xa4, 0xfe, 0xd9, 0xab, 0x08, 0xaf, 0x43, 0x0e, 0x08, 0x15, 0x11, 0x01, // ..........C..... + 0x04, 0x10, 0x04, 0x0f, 0x03, 0x0e, 0x02, 0x08, 0x35, 0x17, 0x38, 0x2e, 0x48, 0x28, 0x59, 0x01, // ........5.8.H(Y. + 0x06, 0x96, 0xae, 0x01, 0x27, 0xab, 0xab, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ....'........... + 0x05, 0x00, 0x00, 0x14, 0x00, 0x3a, 0x00, 0x64, 0x00, 0x00, 0x00, 0x20, 0x04, 0x06, 0x15, 0x14, // .....:.d... .... + 0x16, 0x1f, 0x01, 0x07, 0x36, 0x3f, 0x01, 0x17, 0x16, 0x33, 0x32, 0x24, 0x36, 0x34, 0x26, 0x24, // ....6?...32$64&$ + 0x20, 0x04, 0x16, 0x10, 0x06, 0x04, 0x23, 0x22, 0x27, 0x06, 0x07, 0x06, 0x07, 0x23, 0x22, 0x26, // .....#"'....#"& + 0x27, 0x26, 0x34, 0x3e, 0x05, 0x37, 0x3e, 0x04, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x01, 0x1e, // '&4>.7>.7..546.. + 0x04, 0x17, 0x1e, 0x06, 0x14, 0x07, 0x0e, 0x01, 0x27, 0x26, 0x27, 0x26, 0x27, 0x06, 0x23, 0x20, // ........'&'&'.# + 0x27, 0x16, 0x33, 0x32, 0x24, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x27, 0x1e, 0x01, 0x15, 0x14, 0x06, // '.32$7>.54'..... + 0x03, 0x59, 0xfe, 0xce, 0xfe, 0xf6, 0x9d, 0x6a, 0x60, 0x61, 0x23, 0x22, 0x1c, 0x2c, 0x35, 0x4e, // .Y.....j`a#".,5N + 0x4b, 0x99, 0x01, 0x0a, 0x9d, 0x9d, 0xfd, 0x9e, 0x01, 0x7e, 0x01, 0x45, 0xbc, 0xbc, 0xfe, 0xbb, // K........~.E.... + 0xbf, 0x56, 0x5a, 0x7c, 0x9a, 0x24, 0x32, 0x03, 0x0b, 0x13, 0x02, 0x01, 0x01, 0x03, 0x02, 0x05, // .VZ|.$2......... + 0x03, 0x06, 0x01, 0x05, 0x24, 0x10, 0x1d, 0x15, 0x0a, 0x7c, 0x8e, 0xbc, 0x05, 0x3a, 0x0a, 0x15, // ....$....|...:.. + 0x1d, 0x10, 0x24, 0x05, 0x01, 0x06, 0x03, 0x05, 0x02, 0x03, 0x01, 0x01, 0x03, 0x14, 0x0c, 0x32, // ..$............2 + 0x24, 0x9a, 0x7c, 0x5a, 0x56, 0xfe, 0xf1, 0xc9, 0x3a, 0x1e, 0xa1, 0x01, 0x28, 0x74, 0x7d, 0x86, // $.|ZV...:...(t}. + 0x17, 0x81, 0x96, 0x8e, 0x04, 0x80, 0x68, 0xb2, 0x66, 0x52, 0x98, 0x38, 0x38, 0x54, 0x14, 0x13, // ......h.fR.88T.. + 0x1f, 0x0a, 0x0e, 0x68, 0xb2, 0xcc, 0xb2, 0xe8, 0x89, 0xec, 0xfe, 0xea, 0xec, 0x89, 0x10, 0x58, // ...h...........X + 0x28, 0x09, 0x07, 0x10, 0x0d, 0x03, 0x07, 0x06, 0x06, 0x04, 0x07, 0x03, 0x07, 0x01, 0x06, 0x26, // (..............& + 0x15, 0x25, 0x28, 0x18, 0x48, 0xd2, 0x77, 0x8b, 0xec, 0xfb, 0xf8, 0x18, 0x28, 0x25, 0x15, 0x26, // .%(.H.w.....(%.& + 0x06, 0x01, 0x07, 0x03, 0x07, 0x04, 0x06, 0x06, 0x07, 0x03, 0x0e, 0x10, 0x01, 0x07, 0x09, 0x28, // ...............( + 0x58, 0x10, 0x84, 0x04, 0x5a, 0x54, 0x5c, 0xf0, 0x86, 0x4d, 0x4b, 0x47, 0xd6, 0x7b, 0x78, 0xd1, // X...ZT...MKG.{x. + 0x00, 0x01, 0x00, 0x01, 0xff, 0x00, 0x03, 0x7c, 0x05, 0x80, 0x00, 0x21, 0x00, 0x00, 0x01, 0x16, // .......|...!.... + 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x13, 0x05, 0x06, 0x23, 0x22, 0x27, 0x26, // ...#"'..7...#"'& + 0x37, 0x13, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x15, 0x14, 0x07, 0x03, 0x25, 0x36, 0x33, 0x32, // 7.>.3!2.....%632 + 0x03, 0x75, 0x12, 0x0b, 0xfd, 0xe4, 0x0d, 0x1d, 0x04, 0x0a, 0x11, 0x11, 0x04, 0xc5, 0xfe, 0x6a, // .u.............j + 0x04, 0x08, 0x12, 0x0d, 0x12, 0x05, 0xc9, 0x04, 0x18, 0x10, 0x01, 0x48, 0x13, 0x1a, 0x05, 0xab, // ...........H.... + 0x01, 0x8c, 0x08, 0x04, 0x13, 0x03, 0xca, 0x14, 0x18, 0xfb, 0x7b, 0x19, 0x02, 0x05, 0x1c, 0x10, // ..........{..... + 0x03, 0x28, 0x65, 0x01, 0x0b, 0x0f, 0x18, 0x03, 0x39, 0x0e, 0x12, 0x19, 0x11, 0x08, 0x0a, 0xfe, // .(e.....9....... + 0x31, 0x62, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x55, // 1b.............U + 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, // ......#!"&5.46;. + 0x35, 0x21, 0x15, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 5!.32.....#!"&5. + 0x34, 0x36, 0x3b, 0x01, 0x35, 0x21, 0x15, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, // 46;.5!.32.....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x33, 0x21, 0x35, 0x23, 0x22, // "&5.46;.5463!5#" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, // &5.463!2.....+.. + 0x21, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x07, 0x00, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // !2...32...8(..(8 + 0x38, 0x28, 0x60, 0xfe, 0x00, 0x60, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, // 8(`..`(88(..(88( + 0x60, 0xfe, 0x00, 0x60, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x60, 0x4c, // `..`(88(..(88(`L + 0x34, 0x02, 0x00, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0x60, 0x02, // 4..`(88(.@(88(`. + 0x00, 0x34, 0x4c, 0x60, 0x28, 0x38, 0x01, 0x20, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, // .4L`(8. ..(88(.@ + 0x28, 0x38, 0xc0, 0xc0, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, // (8..8(..(88(.@(8 + 0xc0, 0xc0, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0xc0, 0x34, // ..8(..(88(.@(8.4 + 0x4c, 0xc0, 0x38, 0x28, 0x01, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0xc0, 0x4c, // L.8(.@(88(..(8.L + 0x34, 0xc0, 0x38, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, 0x05, 0xc0, 0x00, 0x13, // 4.8............. + 0x00, 0x4f, 0x00, 0x59, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x34, 0x36, 0x32, // .O.Y......"&5462 + 0x16, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x36, 0x32, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, // ....265.62...#"' + 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x27, // ..#"......#"'..' + 0x2e, 0x01, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x27, 0x2e, // .."......#"'..'. + 0x01, 0x23, 0x22, 0x06, 0x07, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x36, 0x00, 0x24, 0x33, // .#"...#"&5476.$3 + 0x32, 0x04, 0x1e, 0x01, 0x17, 0x16, 0x01, 0x15, 0x26, 0x22, 0x07, 0x35, 0x34, 0x36, 0x32, 0x16, // 2.......&".5462. + 0x03, 0x80, 0x98, 0xd0, 0x98, 0x26, 0x34, 0x26, 0x4e, 0x64, 0x4e, 0x21, 0x3e, 0x03, 0x21, 0x13, // .....&4&NdN!>.!. + 0x0d, 0x0b, 0x0c, 0x31, 0x58, 0x3a, 0x44, 0x78, 0x2b, 0x07, 0x15, 0x04, 0x0b, 0x11, 0x12, 0x0b, // ...1X:Dx+....... + 0x04, 0x15, 0x07, 0x2b, 0x77, 0x88, 0x77, 0x2b, 0x07, 0x15, 0x04, 0x0b, 0x12, 0x11, 0x0b, 0x04, // ...+w.w+........ + 0x15, 0x07, 0x2b, 0x78, 0x44, 0x3a, 0x58, 0x31, 0x0c, 0x0b, 0x0d, 0x13, 0x01, 0x2d, 0x00, 0xff, // ..+xD:X1.....-.. + 0x01, 0x55, 0xbe, 0x8c, 0x01, 0x0d, 0xe0, 0xa5, 0x21, 0x01, 0xfd, 0x00, 0x2a, 0x2c, 0x2a, 0x26, // .U......!...*,*& + 0x34, 0x26, 0x02, 0xc4, 0xfd, 0xbc, 0x68, 0x98, 0x98, 0x68, 0x1a, 0x26, 0x26, 0x1a, 0x32, 0x4e, // 4&....h..h.&&.2N + 0x4e, 0x32, 0x02, 0x44, 0x0b, 0x26, 0x0d, 0x13, 0x0a, 0x2e, 0x2e, 0x4a, 0x3c, 0x0a, 0x24, 0x06, // N2.D.&.....J<.$. + 0x11, 0x11, 0x06, 0x24, 0x0a, 0x3c, 0x4a, 0x4a, 0x3c, 0x0a, 0x24, 0x06, 0x11, 0x11, 0x06, 0x24, // ...$..767...... + 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x07, 0x16, 0x15, 0x14, 0x06, 0x23, 0x0e, 0x01, 0x22, 0x26, // ...........#.."& + 0x27, 0x22, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x37, 0x2e, 0x02, // '"&547&547&547.. + 0x27, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x32, 0x1e, 0x02, 0x02, 0xe0, 0x13, 0x1a, 0x13, 0x6c, 0x34, // '&54>.2.......l4 + 0x0d, 0x13, 0x13, 0x0d, 0x32, 0x63, 0x4b, 0xa0, 0x45, 0x6f, 0x87, 0x8a, 0x87, 0x6f, 0x45, 0x44, // ....2cK.Eo...oED + 0x0a, 0x29, 0x0a, 0x80, 0x0d, 0xe4, 0x0d, 0x80, 0x0a, 0x29, 0x0a, 0x44, 0x80, 0x67, 0x2d, 0x3b, // .).......).D.g-; + 0x3c, 0x04, 0x2f, 0x19, 0x19, 0x2d, 0x0d, 0x3f, 0x2e, 0x14, 0x50, 0x5e, 0x50, 0x14, 0x2e, 0x3f, // <./..-.?..P^P..? + 0x0d, 0x2d, 0x19, 0x19, 0x2f, 0x04, 0x3c, 0x3b, 0x2d, 0x67, 0x59, 0x91, 0xb7, 0xbe, 0xb7, 0x91, // .-../.<;-gY..... + 0x59, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x2e, 0x32, 0x13, 0x1a, 0x13, 0x20, 0x4c, 0x34, 0x48, // Y.......2... L4H + 0x7c, 0x4f, 0x2d, 0x2d, 0x4f, 0x7c, 0x48, 0x65, 0x4f, 0x0b, 0x2c, 0x0b, 0x99, 0x91, 0x91, 0x99, // |O--O|HeO.,..... + 0x0b, 0x2c, 0x0b, 0x4f, 0x65, 0x9b, 0x71, 0x31, 0x4c, 0x73, 0x32, 0x1c, 0x36, 0x25, 0x1b, 0x1b, // .,.Oe.q1Ls2.6%.. + 0x25, 0x34, 0x1d, 0x17, 0x18, 0x2e, 0x32, 0x2c, 0x34, 0x34, 0x2c, 0x32, 0x2e, 0x18, 0x17, 0x1d, // %4....2,44,2.... + 0x34, 0x25, 0x1b, 0x1b, 0x25, 0x36, 0x1c, 0x32, 0x73, 0x4c, 0x31, 0x71, 0x9b, 0x63, 0xab, 0x71, // 4%..%6.2sL1q.c.q + 0x41, 0x41, 0x71, 0xab, 0x00, 0x02, 0x00, 0x00, 0xff, 0xa0, 0x07, 0x00, 0x04, 0xe0, 0x00, 0x1a, // AAq............. + 0x00, 0x34, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, // .4......#!...#"' + 0x01, 0x26, 0x35, 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x10, // .&547.632...!2.. + 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ....#"&=.!"&=.46 + 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x07, 0x00, 0x13, 0x0d, 0xfa, 0xa0, 0x13, // 3!54632......... + 0x0d, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x09, 0x0e, 0x0d, 0x13, 0x05, 0x60, 0x0d, // ........@.....`. + 0x13, 0x09, 0xfe, 0xc0, 0x09, 0x0e, 0x0d, 0x13, 0xfa, 0xa0, 0x0d, 0x13, 0x13, 0x0d, 0x05, 0x60, // ...............` + 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0x01, 0x60, 0xc0, 0x0d, 0x13, 0xc0, 0x0d, 0x13, 0x0a, 0x01, // .....?.`........ + 0x40, 0x09, 0x0d, 0x0e, 0x09, 0x01, 0x40, 0x09, 0x13, 0x0d, 0xc0, 0x13, 0x02, 0x21, 0x1c, 0x09, // @.....@......!.. + 0xfe, 0xc0, 0x09, 0x13, 0x0d, 0xc0, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xc0, 0x0e, 0x12, 0x0a, 0xfe, // ................ + 0xc1, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x05, 0x80, 0x00, 0x19, // ................ + 0x00, 0x35, 0x00, 0x00, 0x01, 0x34, 0x26, 0x2b, 0x01, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, // .5...4&+..4&+.". + 0x15, 0x11, 0x23, 0x22, 0x06, 0x15, 0x14, 0x17, 0x01, 0x16, 0x32, 0x37, 0x01, 0x36, 0x05, 0x14, // ..#"......27.6.. + 0x06, 0x23, 0x21, 0x22, 0x00, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, 0x00, 0x33, 0x32, 0x04, // .#!".5467&54.32. + 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x05, 0x00, 0x12, 0x0e, 0xe0, 0x13, // .632............ + 0x0d, 0xc0, 0x0d, 0x13, 0xe0, 0x0d, 0x13, 0x09, 0x01, 0x60, 0x09, 0x1c, 0x09, 0x01, 0x5f, 0x0a, // .........`...._. + 0x02, 0x80, 0xe1, 0x9f, 0xfb, 0xc0, 0xb9, 0xfe, 0xf9, 0x8c, 0x76, 0x02, 0x01, 0x2c, 0xd4, 0x9c, // ..........v..,.. + 0x01, 0x03, 0x3b, 0x47, 0x5f, 0x6a, 0x96, 0x29, 0x82, 0xa7, 0x02, 0x60, 0x0e, 0x12, 0x01, 0x60, // ..;G_j.)...`...` + 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xa0, 0x13, 0x0d, 0x0e, 0x09, 0xfe, 0xa0, 0x09, 0x09, 0x01, 0x5f, // ..............._ + 0x0c, 0xd4, 0x9f, 0xe1, 0x01, 0x07, 0xb9, 0x82, 0xdc, 0x37, 0x1e, 0x0d, 0xd4, 0x01, 0x2c, 0xae, // .........7....,. + 0x90, 0x3e, 0x96, 0x6a, 0x4c, 0x3e, 0x1f, 0xd1, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, // .>.jL>.......... + 0x05, 0x80, 0x00, 0x19, 0x00, 0x35, 0x00, 0x00, 0x01, 0x34, 0x27, 0x01, 0x26, 0x22, 0x07, 0x01, // .....5...4'.&".. + 0x06, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x33, // ....;....;.265.3 + 0x32, 0x36, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, 0x00, 0x35, 0x34, 0x36, 0x37, 0x26, 0x35, 0x34, // 26...#!".5467&54 + 0x00, 0x33, 0x32, 0x04, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x05, 0x00, // .32..632........ + 0x09, 0xfe, 0xa0, 0x09, 0x1c, 0x09, 0xfe, 0xa1, 0x0a, 0x12, 0x0e, 0xe0, 0x13, 0x0d, 0xc0, 0x0d, // ................ + 0x13, 0xe0, 0x0d, 0x13, 0x02, 0x80, 0xe1, 0x9f, 0xfb, 0xc0, 0xb9, 0xfe, 0xf9, 0x8c, 0x76, 0x02, // ..............v. + 0x01, 0x2c, 0xd4, 0x9c, 0x01, 0x03, 0x3b, 0x47, 0x5f, 0x6a, 0x96, 0x29, 0x82, 0xa7, 0x02, 0xa0, // .,....;G_j.).... + 0x0e, 0x09, 0x01, 0x60, 0x09, 0x09, 0xfe, 0xa1, 0x0c, 0x0c, 0x0e, 0x12, 0xfe, 0xa0, 0x0d, 0x13, // ...`............ + 0x13, 0x0d, 0x01, 0x60, 0x13, 0xfe, 0xed, 0x9f, 0xe1, 0x01, 0x07, 0xb9, 0x82, 0xdc, 0x37, 0x1e, // ...`..........7. + 0x0d, 0xd4, 0x01, 0x2c, 0xae, 0x90, 0x3e, 0x96, 0x6a, 0x4c, 0x3e, 0x1f, 0xd1, 0x00, 0x00, 0x00, // ...,..>.jL>..... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x58, 0x00, 0x60, // .............X.` + 0x00, 0x00, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x05, 0x14, 0x06, 0x23, 0x21, 0x22, // ..$.."&462...#!" + 0x26, 0x35, 0x34, 0x3e, 0x03, 0x37, 0x06, 0x1d, 0x01, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x32, 0x36, // &54>.7........26 + 0x35, 0x34, 0x26, 0x27, 0x35, 0x34, 0x37, 0x16, 0x20, 0x37, 0x16, 0x1d, 0x01, 0x22, 0x06, 0x1d, // 54&'547. 7...".. + 0x01, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x27, 0x35, 0x34, 0x36, 0x32, 0x16, 0x1d, // .....2654'5462.. + 0x01, 0x06, 0x15, 0x14, 0x16, 0x32, 0x36, 0x35, 0x34, 0x27, 0x35, 0x34, 0x26, 0x27, 0x34, 0x36, // .....2654'54&'46 + 0x2e, 0x02, 0x27, 0x1e, 0x04, 0x00, 0x10, 0x06, 0x20, 0x26, 0x10, 0x36, 0x20, 0x01, 0x80, 0x26, // ..'..... &.6 ..& + 0x34, 0x26, 0x26, 0x34, 0x04, 0x26, 0x92, 0x79, 0xfc, 0x96, 0x79, 0x92, 0x0b, 0x25, 0x3a, 0x68, // 4&&4.&.y..y..%:h + 0x44, 0x16, 0x3a, 0x46, 0x70, 0xa0, 0x70, 0x47, 0x39, 0x19, 0x84, 0x01, 0x46, 0x84, 0x19, 0x6a, // D.:Fp.pG9...F..j + 0x96, 0x20, 0x38, 0x50, 0x38, 0x20, 0x4c, 0x68, 0x4c, 0x20, 0x38, 0x50, 0x38, 0x20, 0x45, 0x3b, // . 8P8 LhL 8P8 E; + 0x01, 0x01, 0x04, 0x0a, 0x08, 0x44, 0x68, 0x3a, 0x25, 0x0b, 0xfe, 0xc0, 0xe1, 0xfe, 0xc2, 0xe1, // .....Dh:%....... + 0xe1, 0x01, 0x3e, 0xda, 0x34, 0x26, 0x26, 0x34, 0x26, 0x7d, 0x79, 0x8a, 0x8a, 0x79, 0x44, 0x7e, // ..>.4&&4&}y..yD~ + 0x96, 0x73, 0x5b, 0x0f, 0x34, 0x44, 0xcb, 0x14, 0x64, 0x3d, 0x50, 0x70, 0x70, 0x50, 0x3d, 0x64, // .s[.4D..d=PppP=d + 0x14, 0xcb, 0x3e, 0x1f, 0x68, 0x68, 0x1f, 0x3e, 0x40, 0x96, 0x6a, 0x59, 0x1d, 0x2a, 0x28, 0x38, // ..>.hh.>@.jY.*(8 + 0x38, 0x28, 0x2a, 0x1d, 0x59, 0x34, 0x4c, 0x4c, 0x34, 0x59, 0x1d, 0x2a, 0x28, 0x38, 0x38, 0x28, // 8(*.Y4LL4Y.*(88( + 0x2a, 0x1d, 0x59, 0x44, 0x77, 0x22, 0x0a, 0x41, 0x1f, 0x34, 0x2a, 0x13, 0x0f, 0x5b, 0x73, 0x96, // *.YDw".A.4*..[s. + 0x7e, 0x03, 0xd8, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0xe1, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ~.......>....... + 0xff, 0x80, 0x05, 0x80, 0x05, 0x80, 0x00, 0x07, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .........M...4&" + 0x06, 0x14, 0x16, 0x32, 0x37, 0x14, 0x06, 0x07, 0x11, 0x14, 0x04, 0x20, 0x24, 0x3d, 0x01, 0x2e, // ...27...... $=.. + 0x01, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x17, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x14, 0x06, 0x23, // .5.4632.>.32...# + 0x22, 0x27, 0x11, 0x14, 0x16, 0x20, 0x36, 0x35, 0x11, 0x06, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, // "'... 65..#"&463 + 0x32, 0x16, 0x17, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x07, 0x15, 0x14, 0x16, 0x20, // 2..632......... + 0x36, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x00, 0x26, 0x34, 0x26, 0x26, // 65...5462...&4&& + 0x34, 0xa6, 0x47, 0x39, 0xfe, 0xf9, 0xfe, 0x8e, 0xfe, 0xf9, 0xa4, 0xdc, 0x26, 0x1a, 0x06, 0x0a, // 4.G9........&... + 0x11, 0x3c, 0x23, 0x35, 0x4b, 0x4b, 0x35, 0x21, 0x1f, 0xbc, 0x01, 0x08, 0xbc, 0x1f, 0x21, 0x35, // .<#5KK5!......!5 + 0x4b, 0x4b, 0x35, 0x23, 0x3c, 0x11, 0x0a, 0x06, 0x1a, 0x26, 0xdc, 0xa4, 0xbc, 0x01, 0x08, 0xbc, // KK5#<....&...... + 0x39, 0x47, 0x70, 0xa0, 0x70, 0x03, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x40, 0x3e, 0x62, 0x15, // 9Gp.p.&4&&4&@>b. + 0xfe, 0x75, 0x9f, 0xe1, 0xe1, 0x9f, 0x84, 0x14, 0xd8, 0x90, 0x02, 0x00, 0x1a, 0x26, 0x02, 0x1e, // .u...........&.. + 0x24, 0x4b, 0x6a, 0x4b, 0x12, 0xfe, 0x6e, 0x6a, 0x96, 0x96, 0x6a, 0x01, 0x92, 0x12, 0x4b, 0x6a, // $KjK..nj..j...Kj + 0x4b, 0x24, 0x1e, 0x02, 0x26, 0x1a, 0xfe, 0x00, 0x90, 0xd8, 0x14, 0x84, 0x6a, 0x96, 0x96, 0x6a, // K$..&.......j..j + 0x01, 0x8b, 0x15, 0x62, 0x3e, 0x50, 0x70, 0x70, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ...b>Ppp........ + 0x05, 0x80, 0x00, 0x03, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x25, 0x00, 0x00, 0x01, 0x21, 0x35, 0x21, // .........%...!5! + 0x05, 0x11, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x11, 0x21, 0x11, 0x33, 0x35, // ..#"&5.463!.!.35 + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x33, // 463!2.......+..3 + 0x32, 0x16, 0x02, 0x80, 0x02, 0x00, 0xfe, 0x00, 0xfe, 0xa0, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x04, // 2.........@..... + 0xa0, 0xfc, 0x00, 0x80, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0x02, 0x00, 0x84, 0x5c, 0x40, 0x40, // ....8(.@(8....@@ + 0x5c, 0x84, 0x04, 0x80, 0x80, 0x80, 0xfb, 0x00, 0x84, 0x5c, 0x03, 0x40, 0x5c, 0x84, 0xfb, 0x00, // ...........@.... + 0x05, 0x00, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xa0, 0xe0, 0xfc, 0xc0, 0x5c, 0x84, 0x05, 0x00, 0x84, // ...(88(......... + 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x2d, 0x00, 0x00, // .............-.. + 0x04, 0x34, 0x23, 0x22, 0x26, 0x35, 0x34, 0x22, 0x15, 0x14, 0x16, 0x33, 0x01, 0x14, 0x06, 0x23, // .4#"&54"...3...# + 0x21, 0x14, 0x06, 0x22, 0x26, 0x35, 0x21, 0x22, 0x26, 0x35, 0x36, 0x12, 0x11, 0x34, 0x36, 0x37, // !.."&5!"&56..467 + 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x07, 0x1e, 0x01, 0x15, 0x10, 0x12, 0x03, 0x50, // &5462..........P + 0x10, 0x3b, 0x55, 0x20, 0x67, 0x49, 0x03, 0x40, 0x4c, 0x34, 0xfe, 0x40, 0x96, 0xd4, 0x96, 0xfe, // .;U gI.@L4.@.... + 0x40, 0x34, 0x4c, 0xbe, 0xc2, 0xc0, 0xa8, 0x08, 0x38, 0x50, 0x38, 0x08, 0xa8, 0xc0, 0xc2, 0xb0, // @4L.....8P8..... + 0x20, 0x55, 0x3b, 0x10, 0x10, 0x49, 0x67, 0x01, 0x30, 0x34, 0x4c, 0x6a, 0x96, 0x96, 0x6a, 0x4c, // U;..Ig.04Lj..jL + 0x34, 0xa1, 0x01, 0xd9, 0x01, 0x06, 0xa5, 0xc2, 0x14, 0x12, 0x13, 0x28, 0x38, 0x38, 0x28, 0x13, // 4..........(88(. + 0x12, 0x14, 0xc2, 0xa5, 0xfe, 0xfa, 0xfe, 0x27, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x07, 0x40, // .......'.......@ + 0x05, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x22, 0x00, 0x00, 0x00, 0x34, 0x26, 0x2b, 0x01, 0x11, // ......."...4&+.. + 0x33, 0x32, 0x01, 0x21, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x00, 0x10, 0x06, 0x2b, 0x01, 0x15, // 32.!..#!"&...+.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x06, 0x80, 0x70, // ..#!"&5.463!2..p + 0x50, 0x40, 0x40, 0x50, 0xf9, 0xf0, 0x07, 0x00, 0x96, 0x6a, 0xfb, 0x00, 0x6a, 0x96, 0x07, 0x40, // P@@P.....j..j..@ + 0xe1, 0x9f, 0x40, 0x84, 0x5c, 0xfd, 0x40, 0x5c, 0x84, 0x26, 0x1a, 0x04, 0x80, 0x9f, 0x03, 0x30, // ..@...@..&.....0 + 0xa0, 0x70, 0xfe, 0x80, 0xfd, 0xc0, 0x6a, 0x96, 0x96, 0x04, 0x09, 0xfe, 0xc2, 0xe1, 0x20, 0x5c, // .p....j....... . + 0x84, 0x84, 0x5c, 0x02, 0xe0, 0x1a, 0x26, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // ......&......... + 0x06, 0x00, 0x00, 0x2d, 0x00, 0x42, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, // ...-.B.......... + 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x15, 0x11, // +."&5...5.462... + 0x14, 0x16, 0x32, 0x36, 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x32, 0x36, // ..265.462.....26 + 0x35, 0x11, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, // 5.462.....+."&5. + 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, 0x47, 0x39, 0x4c, // #"&5.463!2...G9L + 0x34, 0x80, 0x34, 0x4c, 0x39, 0x47, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x26, // 4.4L9G&4&&4&&4&& + 0x34, 0x26, 0x26, 0x34, 0x26, 0x03, 0x00, 0x4c, 0x34, 0x80, 0x34, 0x4c, 0xe0, 0x0d, 0x13, 0xbc, // 4&&4&..L4.4L.... + 0x84, 0x01, 0x00, 0x1a, 0x26, 0x05, 0xc0, 0xfd, 0x80, 0x3d, 0x64, 0x14, 0xfc, 0xf5, 0x34, 0x4c, // ....&....=d...4L + 0x4c, 0x34, 0x03, 0x0b, 0x14, 0x64, 0x3d, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, // L4...d=...&&..`. + 0x26, 0x26, 0x1a, 0x01, 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x01, // &&....&&..`.&&.. + 0xa0, 0x1a, 0x26, 0x26, 0x1a, 0xf9, 0xc0, 0x34, 0x4c, 0x4c, 0x34, 0x02, 0x00, 0x13, 0x0d, 0x03, // ..&&...4LL4..... + 0x20, 0x84, 0xbc, 0x26, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x0f, // ..&............ + 0x00, 0x1f, 0x00, 0x28, 0x00, 0x2f, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, // ...(./.C......#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x23, 0x21, // "&=.463!2.5...#! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x21, 0x11, 0x21, 0x22, 0x26, // "&=.463!2..!.!"& + 0x35, 0x11, 0x21, 0x01, 0x21, 0x26, 0x27, 0x01, 0x26, 0x27, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // 5.!.!&'.&'....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0x1e, 0x01, 0x04, 0x00, // "&5.463!2....... + 0x12, 0x0e, 0xfd, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0x40, // ...@...........@ + 0x0e, 0x12, 0x12, 0x0e, 0x02, 0xc0, 0x0e, 0x12, 0xfc, 0x80, 0x04, 0x00, 0xfe, 0x60, 0x28, 0x38, // .............`(8 + 0xfe, 0x00, 0x02, 0x80, 0x01, 0x78, 0x0a, 0x0c, 0xfe, 0xc7, 0x0c, 0x1d, 0x02, 0x00, 0x38, 0x28, // .....x........8( + 0xfb, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, 0x80, 0x28, 0x60, 0x1c, 0x01, 0x38, 0x1c, 0x28, 0x01, // ..(88(..(`..8.(. + 0x60, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xf2, 0x40, 0x0e, 0x12, 0x12, 0x0e, // `@....@....@.... + 0x40, 0x0e, 0x12, 0x12, 0xfd, 0x92, 0x03, 0x00, 0x38, 0x28, 0x01, 0xa0, 0xfe, 0x80, 0x1d, 0x0c, // @.......8(...... + 0x01, 0x39, 0x0c, 0x0a, 0xfe, 0x68, 0xfc, 0x80, 0x28, 0x38, 0x38, 0x28, 0x05, 0x40, 0x28, 0x38, // .9...h..(88(.@(8 + 0x28, 0x1c, 0xfe, 0xc8, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0xff, 0x00, 0x05, 0x80, // (....`.......... + 0x06, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xaf, 0x00, 0xbf, 0x00, 0xcf, 0x00, 0xdf, 0x00, 0xef, // ................ + 0x00, 0xff, 0x01, 0x0f, 0x01, 0x1f, 0x01, 0x2d, 0x01, 0x3d, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, // .......-.=..%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, // +."&=.46;.2.5... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x15, 0x14, 0x06, // +."&=.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // +."&=.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // +."&=.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // +."&=.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, // +."&=.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, // +."&=.46;.2.%... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x15, 0x14, 0x06, // +."&=.46;.2..... + 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x21, 0x11, 0x21, // +."&=.46;.2..!.! + 0x11, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // .!5463!2......#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x40, 0x0d, // "&5.463!2.....@. + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // ...@....@....@.. + 0x01, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, // ....@....@...... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x03, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // @....@......@... + 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // .@......@....@.. + 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, // ....@....@...... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x03, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // @....@......@... + 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // .@......@....@.. + 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, // ....@....@...... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x03, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // @....@......@... + 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // .@......@....@.. + 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x02, 0x00, 0x13, 0x0d, // ....@....@...... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // @....@......@... + 0x0d, 0x40, 0x0d, 0x13, 0x01, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // .@......@....@.. + 0xff, 0x00, 0x01, 0x80, 0xfb, 0x80, 0x01, 0x80, 0x13, 0x0d, 0x01, 0x40, 0x0d, 0x13, 0x02, 0x00, // ...........@.... + 0x26, 0x1a, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, 0x1a, 0x26, 0xe0, 0x40, 0x0d, 0x13, // &....&&....&.@.. + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // ..@....@....@... + 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, // .@....@....@.... + 0x40, 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, // @.....@....@.... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // @....@....@....@ + 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, // ....@....@.....@ + 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ....@....@....@. + 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, // ...@....@....@.. + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // ..@.....@....@.. + 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, // ..@....@....@... + 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfe, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // .@.....@....@... + 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, // .@....@....@.... + 0x40, 0x0d, 0x13, 0x13, 0xfa, 0x93, 0x06, 0x00, 0xfa, 0x00, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0x05, // @............... + 0x60, 0xf9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x0d, 0x00, 0x00, // `...&&....&&.... + 0xff, 0x00, 0x05, 0x80, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, // .........../.?.O + 0x00, 0x5f, 0x00, 0x6f, 0x00, 0x7f, 0x00, 0x8f, 0x00, 0x9f, 0x00, 0xb7, 0x00, 0xdb, 0x00, 0xf5, // ._.o............ + 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // ..%...+."&=.46;. + 0x32, 0x16, 0x35, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.5...+."&=.46;. + 0x32, 0x16, 0x05, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&=.46;. + 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&=.46;. + 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&=.46;. + 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&=.46;. + 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&=.46;. + 0x32, 0x16, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&=.46;. + 0x32, 0x16, 0x25, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.%...+."&=.46;. + 0x32, 0x16, 0x05, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, // 2.....+."&=.46;. + 0x32, 0x16, 0x01, 0x21, 0x11, 0x21, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x21, // 2..!.!...#!"&=.! + 0x11, 0x21, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x19, 0x01, 0x34, 0x26, 0x2b, 0x01, // .!5463!2....4&+. + 0x22, 0x06, 0x1d, 0x01, 0x23, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // "...#54&+."..... + 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x33, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, // ;.26=.3...;.26%. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x11, 0x34, 0x36, 0x33, // ..#!"&5.463!.463 + 0x21, 0x32, 0x16, 0x15, 0x11, 0x21, 0x32, 0x16, 0x01, 0x80, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // !2...!2.....@... + 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x01, 0x00, // .@....@....@.... + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, // ..@....@......@. + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x03, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // ...@......@....@ + 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, // ......@....@.... + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x02, 0x00, 0x13, 0x0d, 0x40, 0x0d, // ..@....@......@. + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // ...@......@....@ + 0x0d, 0x13, 0x01, 0x00, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0xff, 0x00, // ......@....@.... + 0x01, 0x80, 0xff, 0x00, 0x38, 0x28, 0xfe, 0x40, 0x28, 0x38, 0xff, 0x00, 0x01, 0x80, 0x13, 0x0d, // ....8(.@(8...... + 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x80, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, // .@....@.....@... + 0x0d, 0x40, 0x0d, 0x13, 0x80, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x02, 0x00, 0x26, 0x1a, 0xfb, 0x00, // .@.....@....&... + 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x40, 0x38, 0x28, 0x01, 0xc0, 0x28, 0x38, 0x01, 0x40, 0x1a, 0x26, // .&&..@8(..(8.@.& + 0xe0, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, // .@....@....@.... + 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, // @....@....@....@ + 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfd, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, // ....@.....@....@ + 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xf3, 0x40, 0x0d, // ....@....@....@. + 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfe, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, // ...@.....@....@. + 0x13, 0x13, 0xf3, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x40, 0x0d, 0x13, // ...@....@....@.. + 0x13, 0x0d, 0x40, 0x0d, 0x13, 0x13, 0xfc, 0x93, 0x04, 0x80, 0x20, 0x28, 0x38, 0x38, 0x28, 0x20, // ..@....... (88( + 0xfb, 0x80, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x01, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x60, // ..........@....` + 0x60, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x60, 0x60, 0x0d, 0x13, 0x13, // `..........``... + 0x2d, 0xfb, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x00, 0x1a, 0x26, 0x01, 0x20, 0x28, 0x38, 0x38, // -...&&....&. (88 + 0x28, 0xfe, 0xe0, 0x26, 0x00, 0x05, 0x00, 0x40, 0xff, 0x80, 0x07, 0x80, 0x05, 0x80, 0x00, 0x07, // (..&...@........ + 0x00, 0x10, 0x00, 0x18, 0x00, 0x3c, 0x00, 0x63, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, // .....<.c..$4&".. + 0x16, 0x32, 0x01, 0x21, 0x11, 0x23, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x00, 0x34, 0x26, 0x22, 0x06, // .2.!.#......4&". + 0x14, 0x16, 0x32, 0x13, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, // ..2.54&+.54&+.". + 0x1d, 0x01, 0x23, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x15, 0x14, 0x16, 0x3b, 0x01, // ..#".....;....;. + 0x32, 0x36, 0x3d, 0x01, 0x33, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x14, 0x06, 0x22, // 26=.326....+..." + 0x26, 0x35, 0x21, 0x14, 0x06, 0x22, 0x26, 0x35, 0x23, 0x22, 0x26, 0x34, 0x36, 0x33, 0x11, 0x34, // &5!.."&5#"&463.4 + 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, // 6?.>.;..463!2... + 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xfe, 0xcb, 0x01, 0x80, 0x9e, 0x0e, 0x08, 0xc3, 0x07, 0x02, 0x05, // KjKKj........... + 0x00, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xcb, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, // .KjKKj.......... + 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x01, 0x00, 0x26, // ...............& + 0x1a, 0xc0, 0x96, 0xd4, 0x96, 0xfe, 0x80, 0x96, 0xd4, 0x96, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x1a, // ............&&.. + 0x13, 0xc6, 0x13, 0x40, 0x1a, 0xa0, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0x4b, 0x6a, 0x4b, 0x4b, // ...@..&....&KjKK + 0x6a, 0x4b, 0x02, 0x80, 0x01, 0x00, 0x02, 0x07, 0xc3, 0x0c, 0x0a, 0xfd, 0xad, 0x6a, 0x4b, 0x4b, // jK...........jKK + 0x6a, 0x4b, 0x03, 0x20, 0xc0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, // jK. ............ + 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x02, 0x2e, 0xfb, 0x80, 0x1a, 0x26, 0x6a, // ..............&j + 0x96, 0x96, 0x6a, 0x6a, 0x96, 0x96, 0x6a, 0x26, 0x34, 0x26, 0x01, 0xa0, 0x1a, 0x40, 0x13, 0xc6, // ..jj..j&4&...@.. + 0x13, 0x1a, 0x01, 0x40, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, // ...@.&&......... + 0x05, 0x80, 0x00, 0x23, 0x00, 0x27, 0x00, 0x31, 0x00, 0x3f, 0x00, 0x49, 0x00, 0x00, 0x01, 0x35, // ...#.'.1.?.I...5 + 0x34, 0x26, 0x2b, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x22, 0x06, // 4&+.54&+."...#". + 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x33, // ....;....;.26=.3 + 0x32, 0x36, 0x01, 0x21, 0x35, 0x21, 0x05, 0x11, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, // 26.!5!..#"&5.463 + 0x21, 0x11, 0x21, 0x11, 0x33, 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x05, 0x11, // !.!.35463!2..... + 0x14, 0x06, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x16, 0x05, 0x00, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, // ..+..32......... + 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, // ................ + 0xfd, 0x80, 0x02, 0x00, 0xfe, 0x00, 0xfe, 0x80, 0x20, 0x5c, 0x84, 0x84, 0x5c, 0x04, 0xc0, 0xfb, // ........ ....... + 0xc0, 0xa0, 0x38, 0x28, 0x02, 0x40, 0x28, 0x38, 0x02, 0x00, 0x84, 0x5c, 0x20, 0x20, 0x5c, 0x84, // ..8(.@(8.... .. + 0x01, 0xa0, 0xc0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ................ + 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x02, 0xee, 0x80, 0x80, 0xfb, 0x00, 0x84, 0x5c, 0x03, // ................ + 0x40, 0x5c, 0x84, 0xfb, 0x00, 0x05, 0x00, 0xa0, 0x28, 0x38, 0x38, 0x28, 0xa0, 0xe0, 0xfc, 0xc0, // @.......(88(.... + 0x5c, 0x84, 0x05, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, // ................ + 0x04, 0x80, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x06, 0x0d, 0x01, 0x07, 0x23, 0x01, 0x33, 0x32, 0x16, // ...:.......#.32. + 0x14, 0x06, 0x2b, 0x03, 0x35, 0x33, 0x11, 0x23, 0x07, 0x23, 0x27, 0x35, 0x33, 0x35, 0x33, 0x35, // ..+.53.#.#'53535 + 0x27, 0x35, 0x37, 0x35, 0x23, 0x35, 0x23, 0x35, 0x37, 0x33, 0x17, 0x33, 0x11, 0x23, 0x35, 0x3b, // '575#5#573.3.#5; + 0x02, 0x32, 0x16, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x33, 0x17, 0x05, 0x04, 0x17, 0x16, 0x07, 0x80, // .2...+..3....... + 0x01, 0xfe, 0xe1, 0xfe, 0xa0, 0xe0, 0x40, 0xfe, 0xdb, 0x45, 0x1a, 0x26, 0x26, 0x1a, 0x60, 0xa0, // ......@..E.&&.`. + 0x40, 0x40, 0xa0, 0xc0, 0x60, 0x20, 0x20, 0x80, 0xc0, 0xc0, 0x80, 0x20, 0x20, 0x60, 0xc0, 0xa0, // @@..` .... `.. + 0x40, 0x40, 0xa0, 0x60, 0x1a, 0x26, 0x26, 0x1a, 0x45, 0x01, 0x25, 0x40, 0xe0, 0x01, 0x60, 0x01, // @@.`.&&.E.%@..`. + 0x05, 0x1a, 0x01, 0x02, 0x40, 0x20, 0x40, 0x20, 0x40, 0xfe, 0xa0, 0x09, 0x0e, 0x09, 0x20, 0x01, // ....@ @ @..... . + 0xa0, 0xe0, 0x20, 0xc0, 0x20, 0x08, 0x18, 0x80, 0x18, 0x08, 0x20, 0xc0, 0x20, 0xe0, 0x01, 0xa0, // .. . ..... . ... + 0x20, 0x09, 0x0e, 0x09, 0xfe, 0xa0, 0x40, 0x20, 0x3a, 0x23, 0x03, 0x00, 0x00, 0x02, 0x00, 0x40, // .....@ :#.....@ + 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, // ..............!. + 0x14, 0x16, 0x33, 0x01, 0x15, 0x21, 0x35, 0x37, 0x23, 0x22, 0x26, 0x35, 0x11, 0x27, 0x37, 0x21, // ..3..!57#"&5.'7! + 0x37, 0x21, 0x17, 0x07, 0x11, 0x02, 0x80, 0xff, 0x00, 0x4b, 0x35, 0x04, 0x80, 0xfb, 0x80, 0x80, // 7!.......K5..... + 0x80, 0x9f, 0xe1, 0x40, 0x20, 0x01, 0xe0, 0x20, 0x03, 0xc0, 0x20, 0x40, 0x02, 0x80, 0x01, 0x80, // ...@ .. .. @.... + 0xff, 0x00, 0x35, 0x4b, 0xfe, 0x40, 0xc0, 0xc0, 0xc0, 0xe1, 0x9f, 0x01, 0x40, 0x40, 0x80, 0x80, // ..5K.@......@@.. + 0xc0, 0x20, 0xfc, 0xe0, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, // . .............# + 0x00, 0x33, 0x00, 0x00, 0x25, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x21, 0x11, // .3..%.4&+."...!. + 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, // 4&+.".....;.265. + 0x21, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // !...;.26....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xfe, // 5.463!2...&...&. + 0x00, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x02, 0x00, 0x26, 0x1a, 0x80, // .&...&&...&..&.. + 0x1a, 0x26, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // .&...w.@w..w..w. + 0xc0, 0x03, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0xc0, 0x01, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0xfc, // ....&&....@.&&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x40, 0xfe, 0xc0, 0x1a, 0x26, 0x26, 0x03, 0xba, 0xfc, 0x40, // ..&&..@...&&...@ + 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // w..w..w......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // .......#.3...54& + 0x23, 0x21, 0x11, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x21, 0x22, 0x06, 0x1d, 0x01, // #!.4&+."...!"... + 0x14, 0x16, 0x33, 0x21, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x35, 0x11, 0x21, 0x32, 0x36, // ..3!...;.265.!26 + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x05, 0x00, 0x26, 0x1a, 0xfe, 0xc0, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xfe, 0xc0, 0x1a, 0x26, 0x26, // ..&...&...&...&& + 0x1a, 0x01, 0x40, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x01, 0x40, 0x1a, 0x26, 0x01, 0x00, 0xa9, 0x77, // ..@&...&.@.&...w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x40, 0x80, 0x1a, 0x26, 0x01, // .@w..w..w..@..&. + 0x40, 0x1a, 0x26, 0x26, 0x1a, 0xfe, 0xc0, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xfe, 0xc0, 0x1a, 0x26, // @.&&...&...&...& + 0x26, 0x1a, 0x01, 0x40, 0x26, 0x02, 0x3a, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, // &..@&.:.@w..w..w + 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2d, 0x00, 0x4d, 0x03, 0xf3, 0x04, 0x33, 0x00, 0x14, // .......-.M...3.. + 0x00, 0x29, 0x00, 0x00, 0x24, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, // .)..$...."'.&47. + 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x04, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, // 62............"' + 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x02, 0x73, // .&47.62........s + 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, // .2............2. + 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x01, 0x8a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, // ..w.....2....... + 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0xad, 0x1a, 0x0a, 0x32, // .....2...w.....2 + 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, // ...........2.... + 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, // w.w...2......... + 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0d, // ..2....w.w...... + 0x00, 0x4d, 0x03, 0xd3, 0x04, 0x33, 0x00, 0x14, 0x00, 0x29, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, // .M...3...)...... + 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, // ."/.&47..&4?.62. + 0x01, 0x04, 0x14, 0x07, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, // ......"/.&47..&4 + 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x02, 0x53, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, // ?.62...S......2. + 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x01, 0x8a, 0x0a, // ....w..2........ + 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, // .....2.....w..2. + 0x1a, 0x0a, 0x01, 0xd2, 0x02, 0x4d, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, // .....M......2... + 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0xfe, // .......2........ + 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, // ...2..........2. + 0x0a, 0xfe, 0x2e, 0x00, 0x00, 0x02, 0x00, 0x4d, 0x00, 0x8d, 0x04, 0x33, 0x04, 0x53, 0x00, 0x14, // .......M...3.S.. + 0x00, 0x29, 0x00, 0x00, 0x24, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x09, 0x01, 0x06, 0x22, 0x2f, // .)..$...."'..."/ + 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x12, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, // .&47.62......."' + 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x04, 0x33, // ..."/.&47.62...3 + 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, // .2....w.w...2... + 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, // ........2....w.w + 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0xed, 0x1a, 0x0a, // ...2............ + 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, // 2.....w..2...... + 0x0a, 0xfe, 0x2e, 0x01, 0x76, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, // ....v..2.....w.. + 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0xfe, 0x2e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x4d, // 2..............M + 0x00, 0xad, 0x04, 0x33, 0x04, 0x73, 0x00, 0x14, 0x00, 0x29, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, // ...3.s...)...... + 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, 0x32, 0x1f, // ."'.&4?.62...62. + 0x01, 0x12, 0x14, 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, // ......"'.&4?.62. + 0x09, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x04, 0x33, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, // ..62...3........ + 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, // ..2..........2.. + 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, // .........2...... + 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x02, 0xad, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, // ....2........... + 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x0a, 0x0a, 0x32, 0x01, 0x76, 0x1a, 0x0a, // ..2...w....2.v.. + 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, // .........2...w.. + 0x0a, 0x0a, 0x32, 0x00, 0x00, 0x01, 0x00, 0x2d, 0x00, 0x4d, 0x02, 0x73, 0x04, 0x33, 0x00, 0x14, // ..2....-.M.s.3.. + 0x00, 0x00, 0x00, 0x14, 0x07, 0x09, 0x01, 0x16, 0x14, 0x0f, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, // ............"'.& + 0x34, 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x02, 0x73, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x0a, 0x0a, // 47.62...s..w.... + 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, 0x03, 0xed, // 2............2.. + 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, // ...w.w...2...... + 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x4d, 0x02, 0x53, // .....2.......M.S + 0x04, 0x33, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, // .3........."/.&4 + 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x02, 0x53, 0x0a, 0xfe, 0x2e, // 7..&4?.62...S... + 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, // ...2.....w..2... + 0x01, 0xd2, 0x02, 0x4d, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, // ...M......2..... + 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4d, // .....2.........M + 0x01, 0x0d, 0x04, 0x33, 0x03, 0x53, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x0f, 0x01, 0x06, 0x22, // ...3.S........." + 0x27, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x04, // '..."/.&47.62... + 0x33, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, // 3.2....w.w...2.. + 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x01, 0x6d, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, // ........m..2.... + 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0xfe, 0x2e, 0x00, 0x00, // .w..2........... + 0x00, 0x01, 0x00, 0x4d, 0x01, 0x2d, 0x04, 0x33, 0x03, 0x73, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, // ...M.-.3.s...... + 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x36, // ..."'.&4?.62...6 + 0x32, 0x1f, 0x01, 0x04, 0x33, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x32, // 2...3..........2 + 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x03, 0x2d, 0x1a, 0x0a, 0xfe, // ..........2.-... + 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x0a, // ........2...w... + 0x0a, 0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x80, 0x06, 0x00, 0x00, 0x0f, // .2.............. + 0x00, 0x2f, 0x00, 0x00, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // ./....4&#!"..... + 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x14, 0x1e, 0x01, 0x15, 0x14, 0x06, // 3!26....#!...... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x34, 0x3e, 0x01, 0x35, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // #!"&54>.5!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x07, 0x00, 0x13, 0x0d, 0xf9, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0x06, 0x40, // 3!2............@ + 0x0d, 0x13, 0x80, 0x5e, 0x42, 0xfd, 0xe0, 0x20, 0x20, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, 0x20, // ...^B.. &....& + 0x20, 0xfd, 0xe0, 0x42, 0x5e, 0x5e, 0x42, 0x06, 0x40, 0x42, 0x5e, 0x02, 0x20, 0x03, 0x40, 0x0d, // ..B^^B.@B^. .@. + 0x13, 0x13, 0x0d, 0xfc, 0xc0, 0x0d, 0x13, 0x13, 0x03, 0x4d, 0xfb, 0xc0, 0x42, 0x5e, 0x25, 0x51, // .........M..B^%Q + 0x3d, 0x0d, 0x1a, 0x26, 0x26, 0x1a, 0x0e, 0x3c, 0x50, 0x26, 0x5e, 0x42, 0x04, 0x40, 0x42, 0x5e, // =..&&....&.... $.. + 0x12, 0x24, 0x20, 0x04, 0x03, 0x94, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x92, // .$ ..........(.. + 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // ..r....^.....a.. + 0x01, 0x61, 0x04, 0xa0, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, // .a...........(.. + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, // .^.....a...a.... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x21, 0x00, 0x43, 0x00, 0x00, // ...........!.C.. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x3b, 0x01, 0x32, // ....#!"&5.4>.;.2 + 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, // .....+.".....;.2 + 0x16, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x3b, 0x01, // .....#!"&5.4>.;. + 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, // 2.....+.".....;. + 0x32, 0x16, 0x03, 0x00, 0x70, 0x50, 0xfe, 0x80, 0x50, 0x70, 0x51, 0x8a, 0xbd, 0x68, 0x40, 0x1a, // 2...pP..PpQ..h@. + 0x26, 0x26, 0x1a, 0x40, 0x6a, 0x96, 0x38, 0x28, 0xe0, 0x50, 0x70, 0x03, 0x80, 0x70, 0x50, 0xfe, // &&.@j.8(.Pp..pP. + 0x80, 0x50, 0x70, 0x51, 0x8a, 0xbd, 0x68, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x40, 0x6a, 0x96, 0x38, // .PpQ..h@.&&.@j.8 + 0x28, 0xe0, 0x50, 0x70, 0x02, 0x40, 0xfe, 0x80, 0x50, 0x70, 0x70, 0x50, 0x02, 0xc0, 0x68, 0xbd, // (.Pp.@..PppP..h. + 0x8a, 0x51, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x96, 0x6a, 0x20, 0x28, 0x38, 0x70, 0x50, 0xfe, 0x80, // .Q&...&.j (8pP.. + 0x50, 0x70, 0x70, 0x50, 0x02, 0xc0, 0x68, 0xbd, 0x8a, 0x51, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x96, // PppP..h..Q&...&. + 0x6a, 0x20, 0x28, 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, // j (8p........... + 0x05, 0x80, 0x00, 0x21, 0x00, 0x43, 0x00, 0x00, 0x01, 0x11, 0x14, 0x0e, 0x02, 0x2b, 0x01, 0x22, // ...!.C.......+." + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x26, 0x2b, 0x01, 0x22, // &=.46;.26=.4&+." + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x11, 0x14, 0x0e, 0x02, 0x2b, 0x01, // &5.463!2......+. + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x34, 0x26, 0x2b, 0x01, // "&=.46;.26=.4&+. + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x00, 0x51, 0x8a, 0xbd, 0x68, // "&5.463!2...Q..h + 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x40, 0x6a, 0x96, 0x38, 0x28, 0xe0, 0x50, 0x70, 0x70, 0x50, 0x01, // @.&&.@j.8(.PppP. + 0x80, 0x50, 0x70, 0x03, 0x80, 0x51, 0x8a, 0xbd, 0x68, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x40, 0x6a, // .Pp..Q..h@.&&.@j + 0x96, 0x38, 0x28, 0xe0, 0x50, 0x70, 0x70, 0x50, 0x01, 0x80, 0x50, 0x70, 0x04, 0xc0, 0xfd, 0x40, // .8(.PppP..Pp...@ + 0x68, 0xbd, 0x8a, 0x51, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x96, 0x6a, 0x20, 0x28, 0x38, 0x70, 0x50, // h..Q&...&.j (8pP + 0x01, 0x80, 0x50, 0x70, 0x70, 0x50, 0xfd, 0x40, 0x68, 0xbd, 0x8a, 0x51, 0x26, 0x1a, 0x80, 0x1a, // ..PppP.@h..Q&... + 0x26, 0x96, 0x6a, 0x20, 0x28, 0x38, 0x70, 0x50, 0x01, 0x80, 0x50, 0x70, 0x70, 0x00, 0x00, 0x00, // &.j (8pP..Ppp... + 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0xc0, 0x00, 0x09, 0x00, 0x11, 0x00, 0x19, // ................ + 0x00, 0x21, 0x00, 0x29, 0x00, 0x31, 0x00, 0x39, 0x00, 0x41, 0x00, 0x00, 0x24, 0x14, 0x06, 0x23, // .!.).1.9.A..$..# + 0x22, 0x26, 0x34, 0x36, 0x33, 0x32, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, // "&4632..."&462.. + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, // ."&462..."&462.. + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x24, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x14, // ."&462$.."&462.. + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x02, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x01, 0xf0, // ."&462..."&462.. + 0x55, 0x3b, 0x3c, 0x54, 0x54, 0x3c, 0x3b, 0x02, 0x05, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0xfd, 0xeb, // U;bq..b.&4....... + 0x13, 0x34, 0x26, 0xe0, 0x02, 0xc9, 0xa2, 0x35, 0x01, 0xa0, 0xa6, 0xfe, 0xe3, 0x07, 0x22, 0x1a, // .4&....5......". + 0x09, 0x11, 0x14, 0x0f, 0x09, 0x23, 0x06, 0x44, 0x37, 0x65, 0xa0, 0x75, 0x55, 0x36, 0x1f, 0x0c, // .....#.D7e.uU6.. + 0xff, 0x00, 0x1a, 0x26, 0x13, 0x02, 0x00, 0x13, 0x34, 0x13, 0x02, 0x00, 0x13, 0x26, 0x1a, 0xff, // ...&....4....&.. + 0x00, 0xfe, 0x6d, 0x86, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x80, 0x05, 0x00, 0x00, 0x0b, // ..m............. + 0x00, 0x17, 0x00, 0x31, 0x00, 0x58, 0x00, 0x00, 0x00, 0x14, 0x0e, 0x01, 0x22, 0x2e, 0x01, 0x34, // ...1.X......"..4 + 0x3e, 0x01, 0x32, 0x16, 0x04, 0x14, 0x0e, 0x01, 0x22, 0x2e, 0x01, 0x34, 0x3e, 0x01, 0x32, 0x16, // >.2....."..4>.2. + 0x17, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x22, 0x27, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, // .4&#".."'&#".... + 0x03, 0x3b, 0x01, 0x32, 0x3e, 0x03, 0x13, 0x14, 0x07, 0x0e, 0x04, 0x23, 0x22, 0x2e, 0x04, 0x27, // .;.2>......#"..' + 0x26, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x37, 0x32, 0x16, 0x17, 0x36, 0x33, 0x32, 0x17, 0x3e, // &547&5472..632.> + 0x01, 0x33, 0x16, 0x15, 0x14, 0x07, 0x16, 0x02, 0x80, 0x19, 0x3d, 0x54, 0x3d, 0x19, 0x19, 0x3d, // .3........=T=..= + 0x54, 0x3d, 0x02, 0x99, 0x19, 0x3d, 0x54, 0x3d, 0x19, 0x19, 0x3d, 0x54, 0x3d, 0xb9, 0x8a, 0x76, // T=...=T=..=T=..v + 0x29, 0x9a, 0x47, 0xac, 0x47, 0x98, 0x2b, 0x76, 0x8a, 0x40, 0x62, 0x92, 0x86, 0x52, 0xa8, 0x52, // ).G.G.+v.@b..R.R + 0x86, 0x92, 0x62, 0x40, 0xe0, 0x3d, 0x26, 0x87, 0x93, 0xc1, 0x96, 0x5c, 0x4e, 0x80, 0xa7, 0x8a, // ..b@.=&.....N... + 0x88, 0x6a, 0x21, 0x3e, 0x88, 0x1b, 0x33, 0x6c, 0xa4, 0x6b, 0x93, 0xa2, 0x94, 0x84, 0x69, 0xa4, // .j!>..3l.k....i. + 0x6b, 0x33, 0x1b, 0x88, 0x01, 0x68, 0x50, 0x54, 0x44, 0x44, 0x54, 0x50, 0x54, 0x44, 0x44, 0x54, // k3...hPTDDTPTDDT + 0x50, 0x54, 0x44, 0x44, 0x54, 0x50, 0x54, 0x44, 0x44, 0x7c, 0x78, 0xa8, 0x15, 0x0b, 0x0b, 0x15, // PTDDTPTDD|x..... + 0xa8, 0x78, 0x58, 0x83, 0x4b, 0x2d, 0x0e, 0x0e, 0x2d, 0x4b, 0x83, 0x01, 0x08, 0xcf, 0x7c, 0x4d, // .xX.K-..-K....|M + 0x70, 0x3c, 0x23, 0x09, 0x06, 0x13, 0x29, 0x3e, 0x64, 0x41, 0x7b, 0xd0, 0xed, 0x9f, 0x52, 0x58, // p<#...)>dA{...RX + 0x74, 0x66, 0x4f, 0x54, 0x23, 0x20, 0x52, 0x4e, 0x66, 0x74, 0x57, 0x51, 0xa0, 0x00, 0x00, 0x00, // tfOT# RNftWQ.... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x17, 0x00, 0x2c, 0x00, 0x00, // .............,.. + 0x25, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, // %.4&#!"&=.4&#!". + 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // ....3!26....#!"& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x06, 0x00, 0x38, // 5.463!2...!2...8 + 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x04, 0xc0, 0x28, // (.@(88(..(88(..( + 0x38, 0x80, 0x84, 0x5c, 0xfb, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x01, 0x40, 0x5c, 0x84, 0x02, 0xa0, // 8....@.....@.... + 0x5c, 0x84, 0xe0, 0x02, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfc, 0x40, // .....(88(@(88(.@ + 0x28, 0x38, 0x38, 0x02, 0xe8, 0xfd, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x03, 0xc0, 0x5c, 0x84, 0x84, // (88...@......... + 0x5c, 0x20, 0x84, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x07, 0x75, 0x05, 0x80, 0x00, 0x11, // . .........u.... + 0x00, 0x27, 0x00, 0x45, 0x00, 0x00, 0x01, 0x34, 0x23, 0x21, 0x22, 0x06, 0x07, 0x01, 0x06, 0x15, // .'.E...4#!"..... + 0x14, 0x33, 0x21, 0x32, 0x36, 0x37, 0x01, 0x36, 0x25, 0x21, 0x35, 0x34, 0x26, 0x23, 0x21, 0x22, // .3!267.6%!54&#!" + 0x26, 0x3d, 0x01, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x01, 0x3e, 0x01, 0x05, 0x14, // &=.4&#!"....>... + 0x07, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x1d, 0x01, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x17, 0x16, 0x06, 0xf5, 0x35, 0xfb, // ..!2...32.....5. + 0xc0, 0x28, 0x5b, 0x1a, 0xfe, 0xda, 0x12, 0x35, 0x04, 0x40, 0x28, 0x5c, 0x19, 0x01, 0x26, 0x12, // .([....5.@(...&. + 0xfb, 0x8b, 0x03, 0x00, 0x38, 0x28, 0xfd, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xfe, 0xc0, 0x28, 0x38, // ....8(..(88(..(8 + 0x01, 0x00, 0x2c, 0x90, 0x05, 0x39, 0x2e, 0xfe, 0xd9, 0x2b, 0x92, 0x43, 0xfb, 0xc0, 0x5c, 0x84, // ..,..9...+.C.... + 0x84, 0x5c, 0x01, 0x40, 0x5c, 0x84, 0x02, 0x20, 0x5c, 0x84, 0xc0, 0x36, 0x5a, 0x16, 0x0f, 0x02, // ...@... ...6Z... + 0x5d, 0x23, 0x2b, 0x1f, 0xfe, 0x95, 0x18, 0x10, 0x23, 0x2c, 0x1f, 0x01, 0x6b, 0x16, 0xb4, 0xa0, // ]#+.....#,..k... + 0x28, 0x38, 0x38, 0x28, 0x40, 0x28, 0x38, 0x38, 0x28, 0xfc, 0xab, 0x01, 0x3b, 0x35, 0x45, 0xa3, // (88(@(88(...;5E. + 0x3e, 0x3a, 0xfe, 0x95, 0x35, 0x45, 0x84, 0x5c, 0x03, 0xc0, 0x5c, 0x84, 0x84, 0x5c, 0x20, 0x84, // >:..5E........ . + 0x5c, 0xa0, 0x31, 0x2e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, // ..1. ........... + 0x04, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, // ...#.3.C......+. + 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, // ...+."&=.#"&=.46 + 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x13, 0x11, // ;.546;.2...32... + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, // 4&#!".....3!26.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x80, // ..#!"&5.463!2... + 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, // .....@.......... + 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x80, 0x38, 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x28, 0x02, // @......8(.@(88(. + 0xc0, 0x28, 0x38, 0x80, 0x83, 0x5d, 0xfd, 0x40, 0x5d, 0x83, 0x83, 0x5d, 0x02, 0xc0, 0x5d, 0x83, // .(8..].@]..]..]. + 0x02, 0x60, 0x40, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x40, 0x0e, 0x12, // .`@..........@.. + 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0xfe, 0x72, 0x02, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xfd, // ........r..(88(. + 0x40, 0x28, 0x38, 0x38, 0x02, 0xe8, 0xfd, 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x02, 0xc0, 0x5d, 0x83, // @(88...@......]. + 0x83, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x04, 0x80, 0x00, 0x0f, // ................ + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .../...2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // &5.463..4&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x03, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x22, // ..3!26.2.....#!" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x03, 0xa0, 0x5d, 0x83, 0x83, 0x5d, 0xfd, 0x40, 0x5d, 0x83, // &=.463..]..].@]. + 0x83, 0x5d, 0x03, 0x20, 0x38, 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x28, 0x02, 0xc0, 0x28, 0x38, // .]. 8(.@(88(..(8 + 0xa0, 0x0e, 0x12, 0x12, 0x0e, 0xfd, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0x80, 0x83, 0x5d, 0xfd, // ..............]. + 0x40, 0x5c, 0x84, 0x84, 0x5c, 0x02, 0xc0, 0x5d, 0x83, 0xfc, 0x60, 0x02, 0xc0, 0x28, 0x38, 0x38, // @......]..`..(88 + 0x28, 0xfd, 0x40, 0x28, 0x38, 0x38, 0x01, 0xc8, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, // (.@(88....@....@ + 0x0e, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // ................ + 0x00, 0x1c, 0x00, 0x24, 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x22, 0x26, 0x27, // ...$.4.@....."&' + 0x26, 0x36, 0x37, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x1e, 0x01, 0x00, // &676....267>.... + 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, // .."&462..."&462. + 0x10, 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, // ... ..... >..... + 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x6e, 0x25, 0xca, 0xfe, 0xca, 0x25, 0x08, // $...$ ..n%...%. + 0x18, 0x1a, 0x19, 0x2f, 0x08, 0x19, 0x87, 0xa8, 0x87, 0x19, 0x08, 0x30, 0x32, 0x18, 0xfe, 0x0a, // .../.......02... + 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, // KjKKj.KKjKKj.Kf. + 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, // .....ff......... + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0xcd, 0x79, // ..^.....a...a..y + 0x94, 0x94, 0x79, 0x19, 0x2f, 0x08, 0x08, 0x18, 0x1a, 0x50, 0x63, 0x63, 0x50, 0x1a, 0x18, 0x10, // ..y./....PccP... + 0x2f, 0x01, 0xcf, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, // /..jKKjKKjKKjK.. + 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, // ....ff......ff.. + 0x40, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, // @.^.....a...a... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, 0x00, 0x1c, 0x00, 0x24, // ...............$ + 0x00, 0x34, 0x00, 0x40, 0x00, 0x00, 0x01, 0x16, 0x0e, 0x01, 0x26, 0x27, 0x2e, 0x01, 0x22, 0x06, // .4.@......&'..". + 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, // ...'..7>.2...."& + 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x10, 0x2e, 0x02, 0x20, // 462..."&462.... + 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ..... >..... $.. + 0x12, 0x24, 0x20, 0x04, 0x04, 0x6e, 0x08, 0x18, 0x32, 0x30, 0x08, 0x19, 0x87, 0xa8, 0x87, 0x19, // .$ ..n..20...... + 0x08, 0x2f, 0x19, 0x1a, 0x18, 0x08, 0x25, 0xca, 0xfe, 0xca, 0xfe, 0x37, 0x4b, 0x6a, 0x4b, 0x4b, // ./....%....7KjKK + 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, // j.KKjKKj.Kf..... + 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, // .ff...........^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0x33, 0x19, 0x2f, 0x10, 0x18, 0x1a, // ....a...a.3./... + 0x50, 0x63, 0x63, 0x50, 0x1a, 0x18, 0x08, 0x08, 0x2f, 0x19, 0x79, 0x94, 0x94, 0x02, 0x09, 0x6a, // PccP..../.y....j + 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, 0x01, 0x04, 0xed, 0xab, // KKjKKjKKjK...... + 0x66, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, 0xfe, // ff......ff..@.^. + 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x05, 0x00, 0x00, // ....a...a....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, 0x00, 0x13, 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x37, // .............+.7 + 0x00, 0x00, 0x00, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, 0x36, 0x33, 0x21, 0x32, 0x00, 0x14, // .....#!"&463!2.. + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x04, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x10, // ."&462..."&462.. + 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, 0x20, // .. ..... >..... + 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x80, 0x26, 0x1a, 0xfd, 0x80, 0x1a, 0x26, 0x26, // $...$ ...&....&& + 0x1a, 0x02, 0x80, 0x1a, 0xfe, 0x26, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x02, 0x4b, 0x4b, 0x6a, 0x4b, // .....&KjKKj.KKjK + 0x4b, 0x6a, 0x01, 0x4b, 0x66, 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, // Kj.Kf......ff... + 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // ........^.....a. + 0xa2, 0x01, 0x61, 0x01, 0xda, 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0xb5, 0x6a, 0x4b, 0x4b, 0x6a, // ..a..4&&4&..jKKj + 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xfd, 0xfe, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, 0xab, // KKjKKjK......ff. + 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .....ff..@.^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, // .a...a.......... + 0x04, 0x00, 0x00, 0x23, 0x00, 0x2b, 0x00, 0x33, 0x00, 0x43, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // ...#.+.3.C...54& + 0x2b, 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x23, 0x22, 0x06, 0x1d, 0x01, // +.54&+."...#"... + 0x14, 0x16, 0x3b, 0x01, 0x15, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x3d, 0x01, 0x33, 0x32, 0x36, // ..;....;.26=.326 + 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .4&"...2.4&"...2 + 0x24, 0x10, 0x00, 0x23, 0x22, 0x27, 0x23, 0x06, 0x23, 0x22, 0x00, 0x10, 0x00, 0x33, 0x21, 0x32, // $..#"'#.#"...3!2 + 0x03, 0x40, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, // .@.............. + 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0x40, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, // .........@KjKKj. + 0x4b, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0x4b, 0xfe, 0xd4, 0xd4, 0xc0, 0x92, 0xdc, 0x92, 0xc0, // KKjKKj.K........ + 0xd4, 0xfe, 0xd4, 0x01, 0x2c, 0xd4, 0x03, 0x80, 0xd4, 0x01, 0xc0, 0x80, 0x0e, 0x12, 0xc0, 0x0e, // ....,........... + 0x12, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x12, // ................ + 0x67, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x01, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0xd4, 0xfe, 0x58, // gjKKjK.KjKKjK..X + 0xfe, 0xd4, 0x80, 0x80, 0x01, 0x2c, 0x01, 0xa8, 0x01, 0x2c, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, // .....,...,...... + 0x00, 0x00, 0x07, 0x80, 0x04, 0x80, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x3b, // ...........#./.; + 0x00, 0x47, 0x00, 0x53, 0x00, 0x5f, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x83, 0x00, 0x8f, 0x00, 0x9f, // .G.S._.k.w...... + 0x00, 0xa3, 0x00, 0xb3, 0x00, 0x00, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // .........+."=.4; + 0x01, 0x32, 0x37, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x27, 0x15, // .27..+."=.4;.2'. + 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, 0x14, 0x23, 0x21, 0x22, // .+."=.4;.2...#!" + 0x3d, 0x01, 0x34, 0x33, 0x21, 0x32, 0x25, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.43!2%..+."=.4; + 0x01, 0x32, 0x27, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, // .2'..+."=.4;.2.. + 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x27, 0x15, 0x14, 0x2b, 0x01, 0x22, // .+."=.4;.2'..+." + 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.4;.2...+."=.4; + 0x01, 0x32, 0x01, 0x15, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x01, 0x15, // .2...+."=.4;.2.. + 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x05, 0x15, 0x14, 0x2b, 0x01, 0x22, // .+."=.4;.2...+." + 0x3d, 0x01, 0x34, 0x3b, 0x01, 0x32, 0x05, 0x11, 0x14, 0x2b, 0x01, 0x22, 0x3d, 0x01, 0x34, 0x3b, // =.4;.2...+."=.4; + 0x01, 0x35, 0x34, 0x3b, 0x01, 0x32, 0x13, 0x11, 0x21, 0x11, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // .54;.2..!.....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, // "&5.463!2....`.. + 0x60, 0x10, 0x80, 0x10, 0xe0, 0x10, 0x10, 0xe0, 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, // `..........`..`. + 0x04, 0x00, 0x10, 0xfc, 0xa0, 0x10, 0x10, 0x03, 0x60, 0x10, 0xfd, 0x80, 0x10, 0x60, 0x10, 0x10, // ........`....`.. + 0x60, 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, // `...`..`....`..` + 0x10, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, // ...`..`....`..`. + 0x01, 0x80, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0x00, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, // ...`..`....`..`. + 0x01, 0x00, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x01, 0x00, 0x10, 0xe0, 0x10, 0x10, 0x70, 0x10, // ...`..`.......p. + 0x60, 0x10, 0x80, 0xf9, 0x80, 0x07, 0x00, 0x4b, 0x35, 0xf9, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x06, // `......K5..5KK5. + 0x80, 0x35, 0x4b, 0x01, 0x70, 0x60, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, // .5K.p`..`..`..`. + 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfd, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, // .`..`...`..`..`. + 0x10, 0x60, 0x10, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, // .`..`..`...`..`. + 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0xfe, 0xf0, 0x60, // .`..`...`..`...` + 0x10, 0x10, 0x60, 0x10, 0x01, 0xf0, 0x60, 0x10, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x10, 0x60, // ..`...`..`..`..` + 0x10, 0x10, 0xfe, 0xa0, 0x10, 0x10, 0x60, 0x10, 0xf0, 0x10, 0xfd, 0x00, 0x03, 0x80, 0xfc, 0x80, // ......`......... + 0x03, 0x80, 0xfc, 0x80, 0x35, 0x4b, 0x4b, 0x35, 0x03, 0x80, 0x35, 0x4b, 0x4b, 0x00, 0x00, 0x00, // ....5KK5..5KK... + 0x00, 0x03, 0x00, 0x40, 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x16, 0x00, 0x2a, 0x00, 0x56, // ...@.........*.V + 0x00, 0x00, 0x01, 0x11, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x07, 0x11, 0x36, 0x33, // .....#"'..#"..63 + 0x32, 0x1e, 0x02, 0x1f, 0x01, 0x16, 0x33, 0x32, 0x01, 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, 0x2b, // 2.....32.......+ + 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x07, // ."&5...5462..... + 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x2e, 0x02, 0x23, 0x22, 0x04, 0x07, 0x06, 0x23, 0x22, // ...#"/...#"...#" + 0x27, 0x26, 0x35, 0x11, 0x34, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, // '&5.47>.32...327 + 0x36, 0x37, 0x36, 0x17, 0x16, 0x06, 0x80, 0xa9, 0x89, 0x52, 0x3f, 0x64, 0xa8, 0x5e, 0xad, 0xe6, // 676......R?d.^.. + 0xf5, 0xbc, 0x37, 0x61, 0x63, 0x37, 0x37, 0x1c, 0x2c, 0x39, 0x78, 0xfb, 0x6d, 0x23, 0x1d, 0x12, // ..7ac77.,9x.m#.. + 0x0e, 0x40, 0x0e, 0x12, 0x1d, 0x23, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x23, 0x0a, 0x07, 0xda, 0x97, // .@...#KjK..#.... + 0x58, 0x46, 0x1c, 0x40, 0x46, 0x70, 0x3a, 0x66, 0xfe, 0xf5, 0x5f, 0x0f, 0x12, 0x10, 0x10, 0x20, // XF.@Fp:f.._.... + 0x1f, 0x23, 0x57, 0x8d, 0xa4, 0x49, 0x70, 0xc2, 0x70, 0x26, 0x33, 0x7a, 0xbc, 0x16, 0x09, 0x1f, // .#W..Ip.p&3z.... + 0x1f, 0x1f, 0x01, 0xeb, 0x02, 0x68, 0x5b, 0x20, 0x31, 0x37, 0x7f, 0xfd, 0xa9, 0x71, 0x0f, 0x25, // .....h[ 17...q.% + 0x19, 0x1b, 0x0e, 0x16, 0x03, 0x71, 0x23, 0x3a, 0x11, 0xfb, 0x0e, 0x0e, 0x12, 0x12, 0x0e, 0x04, // .....q#:........ + 0xf2, 0x11, 0x3a, 0x23, 0x35, 0x4b, 0x4b, 0x75, 0xfd, 0x05, 0x27, 0x12, 0x05, 0x04, 0x74, 0x23, // ..:#5KKu..'...t# + 0x0e, 0x21, 0x1e, 0x1c, 0x58, 0x3a, 0x09, 0x08, 0x13, 0x25, 0x02, 0xe6, 0x23, 0x14, 0x15, 0x2b, // .!..X:...%..#..+ + 0x3d, 0x26, 0x3e, 0x37, 0x13, 0x70, 0x0c, 0x05, 0x10, 0x12, 0x14, 0x00, 0x00, 0x06, 0x00, 0x40, // =&>7.p.........@ + 0xff, 0x80, 0x07, 0x00, 0x05, 0x80, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x2a, 0x00, 0x32, 0x00, 0x46, // ...........*.2.F + 0x00, 0x72, 0x00, 0x00, 0x01, 0x35, 0x06, 0x07, 0x15, 0x36, 0x13, 0x35, 0x06, 0x07, 0x15, 0x36, // .r...5...6.5...6 + 0x01, 0x35, 0x06, 0x27, 0x35, 0x26, 0x27, 0x2e, 0x09, 0x23, 0x22, 0x07, 0x15, 0x33, 0x32, 0x16, // .5.'5&'..#"..32. + 0x17, 0x16, 0x17, 0x15, 0x16, 0x33, 0x32, 0x13, 0x35, 0x06, 0x23, 0x22, 0x27, 0x15, 0x16, 0x01, // .....32.5.#"'... + 0x14, 0x06, 0x07, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x2e, 0x01, 0x35, 0x34, // ......+."&5...54 + 0x36, 0x32, 0x16, 0x05, 0x11, 0x14, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x2e, 0x02, // 62........#"/... + 0x23, 0x22, 0x04, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x34, 0x37, 0x3e, 0x03, 0x33, // #"...#"'&5.47>.3 + 0x32, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x03, 0x40, 0xb5, 0xcb, // 2...327676...@.. + 0xcd, 0xb3, 0xac, 0xd4, 0xd7, 0x03, 0xe9, 0xeb, 0x95, 0x14, 0x13, 0x05, 0x38, 0x0d, 0x32, 0x13, // ............8.2. + 0x2e, 0x1a, 0x2c, 0x23, 0x2c, 0x16, 0x17, 0x1a, 0x13, 0x66, 0xb5, 0x6b, 0x13, 0x14, 0x2a, 0x31, // ..,#,....f.k..*1 + 0x78, 0xad, 0xa9, 0x89, 0x2d, 0x21, 0x94, 0xfb, 0xac, 0x23, 0x1d, 0x12, 0x0e, 0x40, 0x0e, 0x12, // x...-!...#...@.. + 0x1d, 0x23, 0x4b, 0x6a, 0x4b, 0x05, 0xc0, 0x23, 0x0a, 0x07, 0xda, 0x97, 0x58, 0x46, 0x1c, 0x40, // .#KjK..#....XF.@ + 0x46, 0x70, 0x3a, 0x66, 0xfe, 0xf5, 0x5f, 0x0f, 0x12, 0x10, 0x10, 0x20, 0x1f, 0x23, 0x57, 0x8d, // Fp:f.._.... .#W. + 0xa4, 0x49, 0x70, 0xc2, 0x70, 0x26, 0x33, 0x7a, 0xbc, 0x16, 0x09, 0x1f, 0x1f, 0x1f, 0x02, 0x18, // .Ip.p&3z........ + 0xc0, 0x10, 0x65, 0xb9, 0x60, 0x01, 0xb0, 0xc5, 0x08, 0x76, 0xbd, 0x6f, 0xfe, 0x38, 0xb8, 0x74, // ..e.`....v.o.8.t + 0x2d, 0xe0, 0x06, 0x09, 0x03, 0x1c, 0x06, 0x18, 0x07, 0x13, 0x06, 0x0b, 0x04, 0x04, 0x03, 0xde, // -............... + 0x3a, 0x35, 0x09, 0x06, 0xbc, 0x11, 0x02, 0x07, 0xbd, 0x5b, 0x08, 0xc4, 0x2a, 0x01, 0xee, 0x23, // :5.......[..*..# + 0x3a, 0x11, 0xfb, 0x0e, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xf2, 0x11, 0x3a, 0x23, 0x35, 0x4b, 0x4b, // :..........:#5KK + 0x75, 0xfd, 0x05, 0x27, 0x12, 0x05, 0x04, 0x74, 0x23, 0x0e, 0x21, 0x1e, 0x1c, 0x58, 0x3a, 0x09, // u..'...t#.!..X:. + 0x08, 0x13, 0x25, 0x02, 0xe6, 0x23, 0x14, 0x15, 0x2b, 0x3d, 0x26, 0x3e, 0x37, 0x13, 0x70, 0x0c, // ..%..#..+=&>7.p. + 0x05, 0x10, 0x12, 0x14, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x00, 0x06, 0x80, 0x04, 0x33, 0x00, 0x14, // .............3.. + 0x00, 0x24, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, // .$....."/.&47..& + 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, // 4?.62........#!" + 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x49, 0xfe, 0x2e, 0x0a, 0x1a, 0x0a, // &=.463!2..I..... + 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, // 2.....w..2...... + 0x04, 0x2d, 0x12, 0x0e, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x02, 0x29, // .-...@.........) + 0xfe, 0x2e, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, // ....2..........2 + 0x0a, 0x0a, 0xfe, 0x2e, 0x0a, 0x1a, 0xfe, 0x2d, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, // .......-@....@.. + 0x12, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x2d, 0xff, 0x93, 0x07, 0x53, 0x04, 0xed, 0x00, 0x14, // .......-...S.... + 0x00, 0x24, 0x00, 0x39, 0x00, 0x00, 0x25, 0x07, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, // .$.9..%.."'.&47. + 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x07, 0x09, 0x01, 0x16, 0x14, 0x09, 0x01, 0x0e, 0x01, 0x2f, // 62............./ + 0x01, 0x2e, 0x01, 0x37, 0x01, 0x3e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x09, 0x01, 0x06, 0x22, 0x2f, // ...7.>........"/ + 0x01, 0x26, 0x34, 0x37, 0x09, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x14, // .&47..&4?.62.... + 0x02, 0x69, 0x32, 0x0a, 0x1a, 0x0a, 0xfe, 0x2e, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x32, // .i2............2 + 0x0a, 0x0a, 0xfe, 0x77, 0x01, 0x89, 0x0a, 0x02, 0x45, 0xfe, 0x8b, 0x04, 0x17, 0x0c, 0x3e, 0x0d, // ...w....E.....>. + 0x0d, 0x04, 0x01, 0x75, 0x04, 0x17, 0x0c, 0x3e, 0x0d, 0x0d, 0x02, 0x8d, 0xfe, 0x2e, 0x0a, 0x1a, // ...u...>........ + 0x0a, 0x32, 0x0a, 0x0a, 0x01, 0x89, 0xfe, 0x77, 0x0a, 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, // .2.....w..2..... + 0x0a, 0x89, 0x32, 0x0a, 0x0a, 0x01, 0xd2, 0x0a, 0x1a, 0x0a, 0x01, 0xd2, 0x0a, 0x0a, 0x32, 0x0a, // ..2...........2. + 0x1a, 0x0a, 0xfe, 0x77, 0xfe, 0x77, 0x0a, 0x1a, 0x04, 0x21, 0xfa, 0xf5, 0x0d, 0x0d, 0x04, 0x11, // ...w.w...!...... + 0x04, 0x17, 0x0d, 0x05, 0x0b, 0x0d, 0x0d, 0x04, 0x11, 0x04, 0x17, 0xfd, 0x68, 0xfe, 0x2e, 0x0a, // ............h... + 0x0a, 0x32, 0x0a, 0x1a, 0x0a, 0x01, 0x89, 0x01, 0x89, 0x0a, 0x1a, 0x0a, 0x32, 0x0a, 0x0a, 0xfe, // .2..........2... + 0x2e, 0x0a, 0x1a, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x07, 0x00, 0x05, 0xbb, 0x00, 0x15, // ................ + 0x00, 0x3b, 0x00, 0x00, 0x01, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, // .;.......#"'.&47 + 0x01, 0x36, 0x17, 0x16, 0x1d, 0x01, 0x01, 0x06, 0x14, 0x17, 0x01, 0x14, 0x0e, 0x03, 0x07, 0x06, // .6.............. + 0x23, 0x22, 0x27, 0x26, 0x37, 0x12, 0x27, 0x2e, 0x01, 0x27, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, // #"'&7.'..'....#" + 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x17, 0x16, 0x15, 0x11, 0x04, 0x17, 0x16, 0x02, 0x80, // '.&47.6......... + 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x00, 0x13, 0x13, 0x02, 0x00, 0x1d, 0x29, 0x27, 0xfe, 0x73, // '...........)'.s + 0x13, 0x13, 0x06, 0x0d, 0x22, 0x2b, 0x35, 0x1c, 0x06, 0x08, 0x14, 0x06, 0x03, 0x19, 0x02, 0x2b, // ...."+5........+ + 0x95, 0x40, 0xd5, 0xa1, 0x27, 0x0d, 0x0c, 0x1b, 0x12, 0xfe, 0x00, 0x13, 0x13, 0x02, 0x00, 0x1d, // .@..'........... + 0x29, 0x27, 0x01, 0x9b, 0xbc, 0xa9, 0x01, 0xc6, 0x46, 0x2a, 0x11, 0x05, 0x13, 0x02, 0x00, 0x13, // )'......F*...... + 0x34, 0x13, 0x02, 0x00, 0x1f, 0x11, 0x11, 0x2a, 0x45, 0xfe, 0x72, 0x13, 0x34, 0x13, 0xfe, 0x4d, // 4......*E.r.4..M + 0x3a, 0x97, 0x7d, 0x7d, 0x38, 0x0c, 0x11, 0x01, 0x08, 0x1a, 0x01, 0x90, 0xa5, 0x47, 0x4f, 0x0d, // :.}}8........GO. + 0xfb, 0x2a, 0x11, 0x05, 0x13, 0x02, 0x00, 0x13, 0x34, 0x13, 0x02, 0x00, 0x1f, 0x11, 0x11, 0x2a, // .*......4......* + 0xfe, 0xfa, 0x1c, 0xc1, 0xad, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0xff, 0xad, 0x06, 0x7e, // ...............~ + 0x05, 0xe0, 0x00, 0x0a, 0x00, 0x28, 0x00, 0x00, 0x01, 0x2d, 0x01, 0x2f, 0x01, 0x03, 0x11, 0x17, // .....(...-./.... + 0x05, 0x03, 0x27, 0x09, 0x01, 0x13, 0x16, 0x06, 0x23, 0x22, 0x27, 0x25, 0x05, 0x06, 0x23, 0x22, // ..'.....#"'%..#" + 0x26, 0x37, 0x13, 0x01, 0x26, 0x36, 0x37, 0x25, 0x13, 0x36, 0x33, 0x32, 0x17, 0x13, 0x05, 0x1e, // &7..&67%.632.... + 0x01, 0x04, 0xa2, 0x01, 0x01, 0xfe, 0x9c, 0x42, 0x1e, 0x9f, 0x3b, 0x01, 0x3e, 0x3c, 0x0c, 0x01, // .......B..;.><.. + 0xf5, 0xfe, 0x95, 0x56, 0x05, 0x16, 0x17, 0x11, 0x17, 0xfe, 0x3f, 0xfe, 0x3f, 0x17, 0x11, 0x17, // ...V......?.?... + 0x16, 0x05, 0x56, 0xfe, 0x94, 0x20, 0x12, 0x2d, 0x01, 0xf6, 0xe1, 0x14, 0x1d, 0x1c, 0x15, 0xe1, // ..V.. .-........ + 0x01, 0xf6, 0x2d, 0x12, 0x02, 0x43, 0xfa, 0x34, 0x0a, 0x3c, 0x01, 0x42, 0xfc, 0x3d, 0x1f, 0xa8, // ..-..C.4.<.B.=.. + 0x01, 0x63, 0x42, 0x01, 0x35, 0xfe, 0x9e, 0xfe, 0x0c, 0x21, 0x25, 0x0c, 0xec, 0xec, 0x0c, 0x25, // .cB.5....!%....% + 0x21, 0x01, 0xf4, 0x01, 0x62, 0x20, 0x37, 0x07, 0x49, 0x01, 0xc7, 0x29, 0x29, 0xfe, 0x39, 0x49, // !...b 7.I..)).9I + 0x07, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0xff, 0x80, 0x05, 0x80, 0x05, 0x00, 0x00, 0x16, // .7.............. + 0x00, 0x00, 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x21, 0x22, 0x2e, 0x01, // .....#"'..5.!".. + 0x36, 0x37, 0x01, 0x36, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x05, 0x79, 0xfd, 0x80, 0x11, 0x28, 0x05, // 67.632....y...(. + 0x0a, 0x16, 0x1b, 0xfd, 0xc0, 0x16, 0x23, 0x0a, 0x12, 0x14, 0x05, 0x00, 0x0d, 0x10, 0x1b, 0x12, // ......#......... + 0x0f, 0x07, 0x04, 0xa3, 0xfb, 0x00, 0x23, 0x02, 0x05, 0x23, 0x16, 0x02, 0x40, 0x1b, 0x2c, 0x28, // ......#..#..@.,( + 0x0a, 0x02, 0x80, 0x07, 0x13, 0x0e, 0x29, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, // ......)......... + 0x05, 0x80, 0x00, 0x02, 0x00, 0x05, 0x00, 0x38, 0x00, 0x00, 0x01, 0x21, 0x11, 0x09, 0x01, 0x21, // .......8...!...! + 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x21, // ....+....+."&=.! + 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, // "&5.#"&=.46;.546 + 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x37, 0x36, 0x32, 0x17, 0x16, 0x14, 0x0f, 0x01, 0x11, // ;.2...!762...... + 0x33, 0x32, 0x16, 0x02, 0x2d, 0x02, 0x53, 0xfd, 0x80, 0x02, 0x53, 0xfd, 0xad, 0x04, 0x80, 0x12, // 32..-.S...S..... + 0x0e, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xfc, 0xa0, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, // ................ + 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0x03, 0x53, 0xf6, 0x0a, 0x1a, 0x0a, 0x09, 0x09, 0xf7, 0xe0, // .......S........ + 0x0e, 0x12, 0x01, 0x00, 0x02, 0x53, 0xfd, 0xda, 0x02, 0x53, 0xfd, 0x60, 0xc0, 0x0e, 0x12, 0xe0, // .....S...S.`.... + 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0x12, 0x0e, 0x03, 0x60, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x0e, // ........`....... + 0x12, 0x12, 0x0e, 0xe0, 0xf7, 0x09, 0x09, 0x0a, 0x1a, 0x0a, 0xf6, 0xfc, 0xad, 0x12, 0x00, 0x00, // ................ + 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x04, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x17, // ................ + 0x00, 0x4b, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x12, 0x34, 0x26, 0x22, // .K..$4&"...2.4&" + 0x06, 0x14, 0x16, 0x32, 0x04, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x37, 0x14, 0x06, 0x07, // ...2.4&"...27... + 0x02, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x1d, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x22, 0x26, 0x35, // ............."&5 + 0x34, 0x36, 0x37, 0x11, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x11, // 467...5462...... + 0x36, 0x37, 0x3e, 0x05, 0x35, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, 0x01, 0x20, 0x38, 0x50, // 67>.5..5462.. 8P + 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x38, 0x38, 0x50, 0x02, 0xb8, 0x38, 0x50, 0x38, 0x38, 0x50, // 88P88P88P..8P88P + 0x98, 0x34, 0x2c, 0x02, 0xe0, 0x44, 0x87, 0x80, 0x53, 0x2c, 0x34, 0x70, 0xa0, 0x70, 0x34, 0x2c, // .4,..D..S,4p.p4, + 0x2c, 0x34, 0x70, 0xa0, 0x70, 0x34, 0x2c, 0x36, 0x64, 0x37, 0x41, 0x4c, 0x2a, 0x27, 0x11, 0x2c, // ,4p.p4,6d7AL*'., + 0x34, 0x70, 0xa0, 0x70, 0x18, 0x50, 0x38, 0x38, 0x50, 0x38, 0x04, 0xb8, 0x50, 0x38, 0x38, 0x50, // 4p.p.P88P8..P88P + 0x38, 0x48, 0x50, 0x38, 0x38, 0x50, 0x38, 0x60, 0x34, 0x59, 0x19, 0xfe, 0xe1, 0x7f, 0x26, 0x2b, // 8HP88P8`4Y....&+ + 0x28, 0x3e, 0x45, 0x1a, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x50, 0x34, 0x59, 0x19, 0x03, 0x34, // (>E..Y4PppP4Y..4 + 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x50, 0x34, 0x59, 0x19, 0xfe, 0x0f, 0x1a, 0x1f, 0x11, 0x19, // .Y4PppP4Y....... + 0x25, 0x2a, 0x3c, 0x4f, 0x34, 0x19, 0x59, 0x34, 0x50, 0x70, 0x70, 0x00, 0x00, 0x08, 0x00, 0x00, // %* + 0x01, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x2e, 0x01, // .54&#"....#"/... + 0x37, 0x12, 0x21, 0x32, 0x1e, 0x02, 0x02, 0xc0, 0x18, 0x10, 0xf0, 0x10, 0x18, 0x18, 0x10, 0xf0, // 7.!2............ + 0x10, 0x18, 0x01, 0x3c, 0x1f, 0x27, 0x47, 0x2c, 0x27, 0x29, 0x37, 0x18, 0x10, 0xf0, 0x0f, 0x15, // ...<.'G,')7..... + 0x82, 0x4e, 0x3b, 0x32, 0x5d, 0x3d, 0x41, 0x2b, 0x23, 0x48, 0x0d, 0x12, 0x0c, 0x0d, 0xa4, 0x0d, // .N;2]=A+#H...... + 0x05, 0x08, 0xa0, 0x01, 0x30, 0x50, 0xa2, 0x82, 0x52, 0x01, 0x18, 0xf0, 0x10, 0x18, 0x18, 0x10, // ....0P..R....... + 0xf0, 0x10, 0x18, 0x18, 0x02, 0x48, 0x36, 0x5e, 0x3b, 0x3c, 0x1b, 0x16, 0x17, 0x54, 0x19, 0x11, // .....H6^;<...T.. + 0x1f, 0x25, 0x13, 0x2d, 0x53, 0x93, 0x23, 0x1b, 0x3a, 0x2f, 0x2a, 0x40, 0x1d, 0x19, 0x5a, 0x10, // .%.-S.#.:/*@..Z. + 0x08, 0x7d, 0x0a, 0x1e, 0x0d, 0x01, 0x0a, 0x3e, 0x68, 0x97, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // .}.....>h....... + 0x00, 0x00, 0x02, 0x80, 0x05, 0x80, 0x00, 0x1e, 0x00, 0x2e, 0x00, 0x00, 0x25, 0x15, 0x14, 0x06, // ............%... + 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, // #!"&=.46;..#"&=. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x03, 0x15, 0x14, 0x06, 0x23, // 463!2...32.....# + 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0x80, 0x26, 0x1a, 0xfe, // !"&=.463!2...&.. + 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x40, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x80, 0x1a, 0x26, 0x40, // ..&&.@@.&&....&@ + 0x1a, 0x26, 0x80, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0xc0, // .&.&....&&....&. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x01, 0x80, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0x26, // ..&&...&..&...&& + 0x1a, 0xfd, 0xc0, 0x26, 0x04, 0x66, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xc0, 0x1a, 0x26, 0x26, 0x00, // ...&.f..&&...&&. + 0x00, 0x02, 0x00, 0x62, 0x00, 0x00, 0x02, 0x1e, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, // ...b............ + 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&=.463!2. + 0x13, 0x03, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x03, 0x26, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&'.&63!2. + 0x02, 0x00, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x1e, 0x1c, // ..&....&&....&.. + 0x01, 0x27, 0x1a, 0xff, 0x00, 0x1a, 0x27, 0x01, 0x1c, 0x01, 0x25, 0x1a, 0x01, 0x40, 0x1a, 0x25, // .'....'...%..@.% + 0x01, 0x20, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0xe0, 0x1a, 0x26, 0x26, 0x04, 0x06, 0xfd, 0x00, 0x1a, // . ..&&...&&..... + 0x26, 0x26, 0x1a, 0x03, 0x00, 0x1a, 0x26, 0x26, 0x00, 0x02, 0x00, 0x05, 0x00, 0x00, 0x05, 0xfe, // &&....&&........ + 0x05, 0x6b, 0x00, 0x22, 0x00, 0x47, 0x00, 0x00, 0x25, 0x15, 0x23, 0x2f, 0x01, 0x26, 0x27, 0x23, // .k.".G..%.#/.&'# + 0x07, 0x06, 0x0f, 0x01, 0x21, 0x35, 0x33, 0x13, 0x03, 0x23, 0x35, 0x21, 0x17, 0x16, 0x17, 0x16, // ....!53..#5!.... + 0x17, 0x33, 0x36, 0x3f, 0x02, 0x21, 0x15, 0x23, 0x03, 0x13, 0x01, 0x15, 0x21, 0x27, 0x26, 0x35, // .36?.!.#....!'&5 + 0x34, 0x3e, 0x04, 0x35, 0x34, 0x26, 0x23, 0x22, 0x07, 0x06, 0x07, 0x27, 0x36, 0x37, 0x36, 0x33, // 4>.54&#"...'6763 + 0x32, 0x16, 0x15, 0x14, 0x0e, 0x04, 0x07, 0x33, 0x35, 0x03, 0x81, 0xf8, 0x9f, 0x18, 0x08, 0x03, // 2......35....... + 0x03, 0x09, 0x0a, 0x0f, 0x9b, 0xfe, 0xfe, 0x80, 0xc5, 0xb9, 0x89, 0x01, 0x14, 0x8b, 0x02, 0x15, // ................ + 0x08, 0x03, 0x03, 0x03, 0x08, 0x19, 0x8c, 0x01, 0x01, 0x7d, 0xb8, 0xcc, 0x02, 0xea, 0xfd, 0xfe, // .........}...... + 0x03, 0x04, 0x34, 0x4e, 0x5a, 0x4e, 0x34, 0x3b, 0x29, 0x33, 0x2e, 0x0e, 0x16, 0x69, 0x1a, 0x25, // ..4NZN4;)3...i.% + 0x53, 0x69, 0x6e, 0x88, 0x31, 0x4b, 0x58, 0x4c, 0x37, 0x03, 0xe8, 0xa7, 0xa7, 0xfc, 0x2a, 0x09, // Sin.1KXL7.....*. + 0x0c, 0x15, 0x14, 0x18, 0xfa, 0xa7, 0x01, 0x23, 0x01, 0x10, 0xa8, 0xe4, 0x04, 0x26, 0x09, 0x0c, // .......#.....&.. + 0x09, 0x0c, 0x2a, 0xe4, 0xa8, 0xfe, 0xf5, 0xfe, 0xd8, 0x02, 0xa7, 0xce, 0x1b, 0x1c, 0x12, 0x40, // ..*............@ + 0x6a, 0x43, 0x3f, 0x2e, 0x3e, 0x21, 0x26, 0x31, 0x27, 0x0b, 0x1b, 0x5c, 0x25, 0x1d, 0x41, 0x77, // jC?.>!&1'...%.Aw + 0x63, 0x38, 0x5e, 0x3b, 0x3a, 0x2b, 0x3c, 0x21, 0x50, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x05, // c8^;:+.54&#"...' + 0x36, 0x37, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x03, 0x07, 0x33, 0x35, 0x03, 0x81, 0xf8, // 67632......35... + 0x9f, 0x18, 0x08, 0x03, 0x03, 0x09, 0x0a, 0x0f, 0x9b, 0xfe, 0xfe, 0x80, 0xc5, 0xb9, 0x89, 0x01, // ................ + 0x14, 0x8b, 0x02, 0x15, 0x08, 0x03, 0x03, 0x03, 0x08, 0x19, 0x8c, 0x01, 0x01, 0x7d, 0xb8, 0xcc, // .............}.. + 0x02, 0xec, 0xfd, 0xfe, 0x04, 0x03, 0x34, 0x4e, 0x5a, 0x4e, 0x34, 0x3b, 0x29, 0x33, 0x2e, 0x0e, // ......4NZN4;)3.. + 0x16, 0x69, 0x1a, 0x25, 0x50, 0x6c, 0x6e, 0x88, 0x45, 0x63, 0x64, 0x4a, 0x04, 0xe8, 0xa7, 0xa7, // .i.%Pln.EcdJ.... + 0xfc, 0x2a, 0x09, 0x0c, 0x15, 0x14, 0x18, 0xfa, 0xa7, 0x01, 0x23, 0x01, 0x10, 0xa8, 0xe4, 0x04, // .*........#..... + 0x26, 0x09, 0x0c, 0x09, 0x0c, 0x2a, 0xe4, 0xa8, 0xfe, 0xf5, 0xfe, 0xd8, 0xd9, 0xce, 0x1b, 0x2d, // &....*.........- + 0x01, 0x40, 0x6a, 0x43, 0x3f, 0x2e, 0x3e, 0x21, 0x26, 0x31, 0x27, 0x0b, 0x1b, 0x5c, 0x25, 0x1d, // .@jC?.>!&1'...%. + 0x41, 0x77, 0x63, 0x42, 0x69, 0x43, 0x3a, 0x44, 0x27, 0x50, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, // AwcBiC:D'P...... + 0x00, 0x00, 0x07, 0x7f, 0x05, 0x00, 0x00, 0x03, 0x00, 0x17, 0x00, 0x00, 0x25, 0x01, 0x21, 0x09, // ............%.!. + 0x01, 0x16, 0x06, 0x07, 0x01, 0x06, 0x23, 0x21, 0x22, 0x26, 0x27, 0x26, 0x36, 0x37, 0x01, 0x36, // ......#!"&'&67.6 + 0x33, 0x21, 0x32, 0x16, 0x03, 0x80, 0x01, 0x50, 0xfd, 0x00, 0xfe, 0xb0, 0x06, 0xf5, 0x0f, 0x0b, // 3!2....P........ + 0x19, 0xfc, 0x80, 0x26, 0x3a, 0xfd, 0x00, 0x26, 0x3f, 0x10, 0x0f, 0x0b, 0x19, 0x03, 0x80, 0x26, // ...&:..&?......& + 0x3a, 0x03, 0x00, 0x26, 0x3f, 0x80, 0x01, 0x80, 0xfe, 0x80, 0x04, 0x35, 0x22, 0x4b, 0x1c, 0xfc, // :..&?......5"K.. + 0x00, 0x2c, 0x29, 0x22, 0x22, 0x4b, 0x1c, 0x04, 0x00, 0x2c, 0x29, 0x00, 0x00, 0x01, 0x00, 0x00, // .,)""K...,)..... + 0xff, 0xdc, 0x06, 0x80, 0x06, 0x00, 0x00, 0x68, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x2e, // .......h.....#". + 0x02, 0x23, 0x22, 0x15, 0x14, 0x16, 0x07, 0x15, 0x22, 0x07, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x35, // .#"....."...#"&5 + 0x34, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x15, 0x14, 0x07, // 4>.54&#"........ + 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x22, 0x27, 0x22, 0x35, 0x11, 0x1e, 0x02, 0x17, // .#"'../."'"5.... + 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, // .327654..54632.. + 0x14, 0x0e, 0x02, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x15, 0x0e, 0x02, 0x07, 0x06, 0x15, // ......3267...... + 0x14, 0x17, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x06, 0x80, 0x59, 0x4f, 0x29, 0x49, // ...32>.32...YO)I + 0x2d, 0x44, 0x25, 0x6e, 0x20, 0x01, 0x16, 0x0b, 0x22, 0x7f, 0x68, 0x2e, 0x3d, 0x54, 0x23, 0x29, // -D%n ...".h.=T#) + 0x23, 0x6c, 0x51, 0x54, 0x76, 0x1e, 0x25, 0x1e, 0x2e, 0x25, 0x50, 0x5f, 0x96, 0x09, 0x25, 0x09, // #lQTv.%..%P_..%. + 0x0d, 0x01, 0x02, 0x02, 0x02, 0x1f, 0x25, 0x03, 0x96, 0x5f, 0x50, 0x25, 0x2e, 0x1e, 0x25, 0x1e, // ......%.._P%..%. + 0x76, 0x55, 0x50, 0x6c, 0x23, 0x29, 0x23, 0x54, 0x3d, 0x40, 0xe8, 0x2f, 0x01, 0x05, 0x05, 0x01, // vUPl#)#T=@./.... + 0x18, 0x23, 0x2c, 0x2d, 0x16, 0x39, 0x31, 0x50, 0x2b, 0x52, 0x5b, 0x01, 0xb6, 0x51, 0x6c, 0x23, // .#,-.91P+R[..Ql# + 0x29, 0x23, 0x7c, 0x27, 0x98, 0x27, 0x05, 0x01, 0x03, 0x11, 0x0a, 0x35, 0x39, 0x25, 0x44, 0x2d, // )#|'.'.....59%D- + 0x49, 0x29, 0x4f, 0x59, 0x5b, 0x52, 0x2b, 0x50, 0x31, 0x39, 0x16, 0x2d, 0x2c, 0x23, 0x18, 0x02, // I)OY[R+P19.-,#.. + 0x04, 0x02, 0x02, 0x01, 0x01, 0x04, 0x00, 0x01, 0x05, 0x05, 0x01, 0x18, 0x23, 0x2c, 0x2d, 0x16, // ............#,-. + 0x39, 0x31, 0x50, 0x2b, 0x52, 0x5b, 0x59, 0x4f, 0x29, 0x49, 0x2d, 0x44, 0x25, 0x39, 0x35, 0x1e, // 91P+R[YO)I-D%95. + 0x02, 0x02, 0x02, 0x1f, 0x25, 0x03, 0x96, 0x5f, 0x50, 0x25, 0x2e, 0x1e, 0x25, 0x1e, 0x76, 0x00, // ....%.._P%..%.v. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x04, 0x80, 0x06, 0x00, 0x00, 0x27, 0x00, 0x33, 0x00, 0x00, // ...........'.3.. + 0x01, 0x15, 0x14, 0x00, 0x07, 0x15, 0x21, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x34, // ......!2...#!"&4 + 0x36, 0x33, 0x21, 0x35, 0x26, 0x00, 0x3d, 0x01, 0x34, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x00, // 63!5&.=.462..... + 0x20, 0x00, 0x3d, 0x01, 0x34, 0x36, 0x32, 0x16, 0x01, 0x11, 0x14, 0x06, 0x20, 0x26, 0x35, 0x11, // .=.462..... &5. + 0x34, 0x36, 0x20, 0x16, 0x04, 0x80, 0xfe, 0xd9, 0xd9, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfd, // 46 .........&&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0xd9, 0xfe, 0xd9, 0x26, 0x34, 0x26, 0x01, 0x07, 0x01, // ..&&......&4&... + 0x72, 0x01, 0x07, 0x26, 0x34, 0x26, 0xff, 0x00, 0xbc, 0xfe, 0xf8, 0xbc, 0xbc, 0x01, 0x08, 0xbc, // r..&4&.......... + 0x03, 0x40, 0x80, 0xdd, 0xfe, 0xb9, 0x18, 0x84, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x84, 0x18, // .@......&4&&4&.. + 0x01, 0x47, 0xdd, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0xb9, 0xfe, 0xf9, 0x01, 0x07, 0xb9, 0x80, // .G...&&......... + 0x1a, 0x26, 0x26, 0x01, 0x66, 0xfe, 0x00, 0x84, 0xbc, 0xbc, 0x84, 0x02, 0x00, 0x84, 0xbc, 0xbc, // .&&.f........... + 0x00, 0x03, 0x00, 0x0d, 0xff, 0x80, 0x05, 0x73, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x43, 0x00, 0x4b, // .......s.....C.K + 0x00, 0x00, 0x01, 0x07, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x09, 0x01, // ....&=.462...... + 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x07, 0x16, 0x33, 0x32, 0x00, 0x3d, 0x01, 0x34, 0x36, 0x32, // ...#"'..32.=.462 + 0x16, 0x1d, 0x01, 0x14, 0x00, 0x07, 0x15, 0x21, 0x32, 0x16, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, // .......!2...#!"& + 0x34, 0x36, 0x33, 0x21, 0x35, 0x26, 0x27, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x26, 0x34, 0x37, 0x01, // 463!5&'.."/.&47. + 0x36, 0x32, 0x1f, 0x01, 0x16, 0x14, 0x25, 0x01, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x01, 0x0f, // 62....%..4632... + 0x65, 0x2a, 0x26, 0x34, 0x26, 0x04, 0x69, 0xfe, 0x97, 0xbc, 0x84, 0x37, 0x36, 0x60, 0x61, 0x6c, // e*&4&.i....76`al + 0xb9, 0x01, 0x07, 0x26, 0x34, 0x26, 0xfe, 0xd9, 0xd9, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0xfd, // ...&4&......&&.. + 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x7d, 0x6e, 0xfe, 0x0a, 0x1a, 0x0a, 0x52, 0x0a, 0x0a, // ..&&...}n....R.. + 0x04, 0xd2, 0x0a, 0x1a, 0x0a, 0x52, 0x0a, 0xfe, 0x7a, 0xfd, 0x93, 0xbc, 0x84, 0x66, 0xa5, 0x02, // .....R..z....f.. + 0x4f, 0x65, 0x67, 0x6f, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0x35, 0x02, 0x1e, 0xfe, 0x97, 0x80, // Oego..&&..5..... + 0x84, 0xbc, 0x13, 0x60, 0x33, 0x01, 0x07, 0xb9, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, 0xdd, 0xfe, // ...`3.....&&.... + 0xb9, 0x18, 0x84, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x84, 0x0d, 0x44, 0xfe, 0x0a, 0x0a, 0x52, // ...&4&&4&..D...R + 0x0a, 0x1a, 0x0a, 0x04, 0xd2, 0x0a, 0x0a, 0x52, 0x0a, 0x1a, 0x7a, 0xfd, 0x93, 0x02, 0x00, 0x84, // .......R..z..... + 0xbc, 0x76, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0x00, 0x05, 0x80, 0x00, 0x06, // .v.............. + 0x00, 0x22, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x36, 0x37, 0x36, 0x13, 0x11, 0x14, 0x0e, 0x05, // ."....!.676..... + 0x07, 0x06, 0x22, 0x27, 0x2e, 0x06, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x40, // .."'..5.463!2..@ + 0xfe, 0x40, 0x77, 0x5e, 0xeb, 0xc0, 0x43, 0x63, 0x89, 0x74, 0x7e, 0x35, 0x10, 0x0c, 0x1c, 0x0c, // .@w^..Cc.t~5.... + 0x10, 0x35, 0x7e, 0x74, 0x89, 0x63, 0x43, 0x26, 0x1a, 0x04, 0x80, 0x1a, 0x26, 0x02, 0x40, 0x02, // .5~t.cC&....&.@. + 0x80, 0xfb, 0x8f, 0x3f, 0x4a, 0xb8, 0x03, 0xb0, 0xfd, 0x00, 0x56, 0xa9, 0x83, 0x7c, 0x52, 0x49, // ...?J.....V..|RI + 0x1a, 0x07, 0x06, 0x06, 0x07, 0x1a, 0x49, 0x52, 0x7c, 0x83, 0xa9, 0x56, 0x03, 0x00, 0x1a, 0x26, // ......IR|..V...& + 0x26, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x00, 0x06, 0x80, 0x06, 0x00, 0x00, 0x03, // &............... + 0x00, 0x13, 0x00, 0x23, 0x00, 0x47, 0x00, 0x00, 0x17, 0x21, 0x11, 0x21, 0x25, 0x11, 0x34, 0x26, // ...#.G...!.!%.4& + 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, 0x34, 0x26, // +.".....;.26%.4& + 0x2b, 0x01, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x11, 0x14, 0x06, // +.".....;.26%... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, // #!"&5.46;.546;.2 + 0x16, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x33, 0x32, 0x16, // ...!546;.2...32. + 0x80, 0x05, 0x80, 0xfa, 0x80, 0x01, 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, // .........@....@. + 0x12, 0x03, 0x00, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x80, 0x4c, // .....@....@....L + 0x34, 0xfa, 0x80, 0x34, 0x4c, 0x4c, 0x34, 0x80, 0x5e, 0x42, 0x40, 0x42, 0x5e, 0x01, 0x80, 0x5e, // 4..4LL4.^B@B^..^ + 0x42, 0x40, 0x42, 0x5e, 0x80, 0x34, 0x4c, 0x80, 0x04, 0x00, 0xc0, 0x01, 0x20, 0x0e, 0x12, 0x12, // B@B^.4L..... ... + 0x0e, 0xfe, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0xe0, 0x0e, // ........ ....... + 0x12, 0x12, 0x4e, 0xfb, 0x00, 0x34, 0x4c, 0x4c, 0x34, 0x05, 0x00, 0x34, 0x4c, 0x60, 0x42, 0x5e, // ..N..4LL4..4L`B^ + 0x5e, 0x42, 0x60, 0x60, 0x42, 0x5e, 0x5e, 0x42, 0x60, 0x4c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, // ^B``B^^B`L...... + 0xff, 0x80, 0x05, 0x80, 0x05, 0xe0, 0x00, 0x07, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, // .........L...4&" + 0x06, 0x14, 0x16, 0x32, 0x25, 0x11, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x25, 0x2e, 0x01, 0x35, // ...2%....#"'%..5 + 0x21, 0x15, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // !.......#!"&5.46 + 0x37, 0x35, 0x23, 0x22, 0x0e, 0x03, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x04, // 75#"....#"'..7>. + 0x37, 0x26, 0x35, 0x34, 0x36, 0x32, 0x16, 0x15, 0x14, 0x07, 0x21, 0x34, 0x36, 0x37, 0x25, 0x36, // 7&5462....!467%6 + 0x33, 0x32, 0x17, 0x16, 0x02, 0x00, 0x26, 0x34, 0x26, 0x26, 0x34, 0x03, 0xa6, 0x0c, 0x08, 0x0c, // 32....&4&&4..... + 0x04, 0x03, 0xfe, 0x40, 0x0b, 0x0e, 0xff, 0x00, 0x6f, 0x91, 0x26, 0x1a, 0xfe, 0x00, 0x1a, 0x26, // ...@....o.&....& + 0x7d, 0x63, 0x20, 0x3b, 0x70, 0x47, 0x3d, 0x14, 0x04, 0x11, 0x28, 0x10, 0x0d, 0x17, 0x11, 0x0c, // }c ;pG=...(..... + 0x05, 0x13, 0x38, 0x41, 0x69, 0x38, 0x19, 0x5e, 0x84, 0x5e, 0x0e, 0x01, 0x2e, 0x0e, 0x0b, 0x01, // ..8Ai8.^.^...... + 0xc0, 0x03, 0x04, 0x0c, 0x08, 0x0c, 0x05, 0x26, 0x34, 0x26, 0x26, 0x34, 0x26, 0x60, 0xfe, 0xc0, // .......&4&&4&`.. + 0x10, 0x09, 0x07, 0x01, 0x60, 0x02, 0x12, 0x0b, 0x66, 0x17, 0xb0, 0x73, 0xfc, 0xe0, 0x1a, 0x26, // ....`...f..s...& + 0x26, 0x1a, 0x03, 0x20, 0x6a, 0xa9, 0x1e, 0x6f, 0x2f, 0x3b, 0x4a, 0x21, 0x08, 0x23, 0x07, 0x0c, // &.. j..o/;J!.#.. + 0x32, 0x18, 0x0a, 0x20, 0x4b, 0x41, 0x45, 0x12, 0x2a, 0x2c, 0x42, 0x5e, 0x5e, 0x42, 0x21, 0x1f, // 2.. KAE.*,B^^B!. + 0x0b, 0x12, 0x02, 0x60, 0x01, 0x07, 0x09, 0x00, 0x00, 0x02, 0x00, 0x24, 0xff, 0x20, 0x06, 0x80, // ...`.......$. .. + 0x05, 0x80, 0x00, 0x07, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, // .....-...4&"...2 + 0x01, 0x14, 0x02, 0x07, 0x06, 0x07, 0x03, 0x06, 0x07, 0x05, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, // ...........#"/.& + 0x37, 0x13, 0x01, 0x05, 0x06, 0x23, 0x22, 0x2f, 0x01, 0x26, 0x37, 0x13, 0x36, 0x37, 0x25, 0x36, // 7....#"/.&7.67%6 + 0x37, 0x36, 0x24, 0x21, 0x32, 0x16, 0x05, 0xa0, 0x38, 0x50, 0x38, 0x38, 0x50, 0x01, 0x18, 0x97, // 76$!2...8P88P... + 0xb2, 0x51, 0x72, 0x14, 0x02, 0x0e, 0xfe, 0x80, 0x07, 0x09, 0x0c, 0x0b, 0x40, 0x0d, 0x05, 0x55, // .Qr.........@..U + 0xfe, 0xe7, 0xfe, 0xec, 0x03, 0x06, 0x0e, 0x09, 0x40, 0x11, 0x0c, 0xe0, 0x0a, 0x10, 0x01, 0x7b, // ........@......{ + 0x60, 0x50, 0xbc, 0x01, 0x54, 0x01, 0x05, 0x0e, 0x14, 0x04, 0x18, 0x50, 0x38, 0x38, 0x50, 0x38, // `P..T......P88P8 + 0x01, 0x80, 0xf9, 0xfe, 0x95, 0xb3, 0x50, 0x60, 0xfe, 0x85, 0x10, 0x0a, 0xe0, 0x04, 0x09, 0x40, // ......P`.......@ + 0x0e, 0x12, 0x01, 0x14, 0x01, 0x19, 0x55, 0x01, 0x09, 0x40, 0x13, 0x14, 0x01, 0x80, 0x0e, 0x02, // ......U..@...... + 0x14, 0x72, 0x51, 0xbb, 0x8e, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd1, // .rQ............. + 0x05, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x03, 0x21, 0x13, 0x36, 0x27, 0x26, 0x2b, 0x01, 0x03, // ........!.6'&+.. + 0x21, 0x13, 0x21, 0x03, 0x21, 0x13, 0x03, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x06, 0xd1, 0xa4, // !.!.!..!2....... + 0xfe, 0xb2, 0xb2, 0x0d, 0x1c, 0x1b, 0x38, 0xa9, 0xcc, 0xfe, 0xb2, 0xcc, 0xfe, 0xe2, 0xcc, 0xfe, // ......8......... + 0xb2, 0xcc, 0x99, 0x04, 0xfc, 0x65, 0xb1, 0x3b, 0x3c, 0x2a, 0x02, 0xfb, 0xfd, 0x05, 0x03, 0x40, // .....e.;<*.....@ + 0x38, 0x20, 0x21, 0xfc, 0x47, 0x03, 0xb9, 0xfc, 0x47, 0x03, 0xb9, 0x01, 0x47, 0x51, 0x49, 0x49, // 8 !.G...G...GQII + 0xbf, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // ................ + 0x00, 0x20, 0x00, 0x00, 0x25, 0x37, 0x36, 0x34, 0x27, 0x09, 0x01, 0x36, 0x34, 0x2f, 0x01, 0x26, // . ..%764'..64/.& + 0x22, 0x07, 0x01, 0x06, 0x14, 0x17, 0x01, 0x16, 0x32, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ".......2.... $. + 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x8d, 0x66, 0x13, 0x13, 0xfe, 0xcd, 0x01, 0x33, 0x13, 0x13, // ..$ ...f.....3.. + 0x66, 0x13, 0x34, 0x13, 0xfe, 0x3a, 0x13, 0x13, 0x01, 0xc6, 0x13, 0x34, 0x02, 0x86, 0xce, 0xfe, // f.4..:.....4.... + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x8d, 0x66, 0x13, // ..^.....a...a.f. + 0x34, 0x13, 0x01, 0x33, 0x01, 0x33, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, 0xfe, 0x3a, 0x13, 0x34, // 4..3.3.4.f...:.4 + 0x13, 0xfe, 0x3a, 0x13, 0x02, 0xd7, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // ..:....^.....a.. + 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // .a.............. + 0x00, 0x20, 0x00, 0x00, 0x25, 0x01, 0x36, 0x34, 0x27, 0x01, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, // . ..%.64'.&".... + 0x17, 0x09, 0x01, 0x06, 0x14, 0x1f, 0x01, 0x16, 0x32, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ........2.... $. + 0x10, 0x12, 0x24, 0x20, 0x04, 0x02, 0xcd, 0x01, 0xc6, 0x13, 0x13, 0xfe, 0x3a, 0x13, 0x34, 0x13, // ..$ ........:.4. + 0x66, 0x13, 0x13, 0x01, 0x33, 0xfe, 0xcd, 0x13, 0x13, 0x66, 0x13, 0x34, 0x03, 0x46, 0xce, 0xfe, // f...3....f.4.F.. + 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x8d, 0x01, 0xc6, // ..^.....a...a... + 0x13, 0x34, 0x13, 0x01, 0xc6, 0x13, 0x13, 0x66, 0x13, 0x34, 0x13, 0xfe, 0xcd, 0xfe, 0xcd, 0x13, // .4.....f.4...... + 0x34, 0x13, 0x66, 0x13, 0x02, 0xd7, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // 4.f....^.....a.. + 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // .a.............. + 0x00, 0x20, 0x00, 0x00, 0x01, 0x37, 0x36, 0x34, 0x27, 0x01, 0x26, 0x22, 0x07, 0x01, 0x06, 0x14, // . ...764'.&".... + 0x1f, 0x01, 0x16, 0x32, 0x37, 0x09, 0x01, 0x16, 0x32, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ...27...2.... $. + 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x8d, 0x66, 0x13, 0x13, 0xfe, 0x3a, 0x13, 0x34, 0x13, 0xfe, // ..$ ...f...:.4.. + 0x3a, 0x13, 0x13, 0x66, 0x13, 0x34, 0x13, 0x01, 0x33, 0x01, 0x33, 0x13, 0x34, 0x01, 0x86, 0xce, // :..f.4..3.3.4... + 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x01, 0x8d, // ...^.....a...a.. + 0x66, 0x13, 0x34, 0x13, 0x01, 0xc6, 0x13, 0x13, 0xfe, 0x3a, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, // f.4......:.4.f.. + 0x01, 0x33, 0xfe, 0xcd, 0x13, 0x01, 0xd7, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // .3......^.....a. + 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..a............. + 0x05, 0x80, 0x00, 0x14, 0x00, 0x20, 0x00, 0x00, 0x25, 0x01, 0x36, 0x34, 0x2f, 0x01, 0x26, 0x22, // ..... ..%.64/.&" + 0x07, 0x09, 0x01, 0x26, 0x22, 0x0f, 0x01, 0x06, 0x14, 0x17, 0x01, 0x16, 0x32, 0x00, 0x10, 0x02, // ...&".......2... + 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x2d, 0x01, 0xc6, 0x13, 0x13, 0x66, // . $...$ ..-....f + 0x13, 0x34, 0x13, 0xfe, 0xcd, 0xfe, 0xcd, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, 0x01, 0xc6, 0x13, // .4......4.f..... + 0x34, 0x02, 0xe6, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, // 4......^.....a.. + 0x01, 0x61, 0xed, 0x01, 0xc6, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, 0xfe, 0xcd, 0x01, 0x33, 0x13, // .a....4.f.....3. + 0x13, 0x66, 0x13, 0x34, 0x13, 0xfe, 0x3a, 0x13, 0x02, 0x77, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .f.4..:..w.^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x02, 0x00, 0x00, 0xff, 0x40, 0x05, 0x80, // .a...a.......@.. + 0x05, 0x80, 0x00, 0x11, 0x00, 0x16, 0x00, 0x00, 0x01, 0x37, 0x21, 0x13, 0x21, 0x0f, 0x01, 0x2f, // .........7!.!../ + 0x01, 0x23, 0x13, 0x05, 0x33, 0x35, 0x25, 0x13, 0x21, 0x27, 0x01, 0x21, 0x03, 0x05, 0x25, 0x04, // .#..35%.!'.!..%. + 0x6a, 0x10, 0xfc, 0x8c, 0x2f, 0x02, 0x64, 0x16, 0xc5, 0xc4, 0x0d, 0xaf, 0x16, 0x01, 0x6a, 0x04, // j.../.d.......j. + 0x01, 0x67, 0x32, 0xfd, 0x7c, 0x0f, 0xfe, 0x38, 0x05, 0x80, 0x80, 0xfd, 0xbe, 0xfd, 0xc2, 0x03, // .g2.|..8........ + 0xab, 0xaf, 0xfd, 0xea, 0xe4, 0x35, 0x35, 0x8c, 0xfe, 0xea, 0x64, 0x01, 0x63, 0x02, 0x20, 0xb5, // .....55...d.c. . + 0x01, 0xd5, 0xfa, 0x62, 0xa2, 0xa2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0xff, 0x40, 0x06, 0xf4, // ...b.........@.. + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x21, 0x09, 0x02, 0x13, 0x21, 0x07, 0x05, 0x25, 0x13, // .......!...!..%. + 0x21, 0x13, 0x21, 0x37, 0x21, 0x01, 0x13, 0x05, 0xe1, 0xfe, 0xf6, 0xfc, 0xdc, 0xfd, 0x46, 0x47, // !.!7!.........FG + 0x01, 0x29, 0x1d, 0x01, 0xa6, 0x01, 0xe6, 0x44, 0xfb, 0x48, 0x3a, 0x04, 0xb9, 0x26, 0xfb, 0x48, // .).....D.H:..&.H + 0x05, 0x80, 0xfa, 0xcb, 0xfe, 0xf5, 0x01, 0x0b, 0x01, 0x64, 0x93, 0xa1, 0xa1, 0x01, 0x53, 0x01, // .........d....S. + 0x29, 0xbf, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x10, 0x07, 0x00, 0x06, 0x00, 0x00, 0x07, // )............... + 0x00, 0x55, 0x00, 0x00, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x01, 0x11, 0x14, 0x07, // .U...4&"...2.... + 0x06, 0x23, 0x22, 0x2f, 0x01, 0x06, 0x04, 0x20, 0x24, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, // .#"/... $'..#"'& + 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x17, 0x16, 0x0f, 0x01, 0x1e, 0x01, 0x17, 0x11, 0x23, // 5.463!2........# + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x32, 0x16, // "&=.46;.5..5462. + 0x15, 0x14, 0x06, 0x07, 0x15, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x3e, // .....32.....+..> + 0x01, 0x37, 0x27, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0xc0, 0x26, 0x34, 0x26, 0x26, // .7'&763!2...&4&& + 0x34, 0x03, 0x66, 0x14, 0x08, 0x04, 0x0d, 0x0a, 0x5d, 0x77, 0xfe, 0x71, 0xfe, 0x34, 0xfe, 0x71, // 4.f.....]w.q.4.q + 0x77, 0x5d, 0x09, 0x0e, 0x04, 0x08, 0x14, 0x12, 0x0e, 0x01, 0x60, 0x16, 0x08, 0x08, 0x0f, 0x64, // w]........`....d + 0x43, 0xf5, 0x95, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xc0, 0x3a, 0x46, 0x96, 0xd4, 0x96, 0x46, 0x3a, // C....&&..:F...F: + 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0xc0, 0x95, 0xf5, 0x43, 0x64, 0x0f, 0x08, 0x08, 0x16, 0x01, 0x60, // ..&&....Cd.....` + 0x0e, 0x12, 0x04, 0xe6, 0x34, 0x26, 0x26, 0x34, 0x26, 0xfc, 0xa0, 0xfe, 0xa0, 0x16, 0x08, 0x02, // ....4&&4&....... + 0x09, 0x5d, 0x8f, 0xa7, 0xa7, 0x8f, 0x5d, 0x09, 0x02, 0x08, 0x16, 0x01, 0x60, 0x0e, 0x12, 0x14, // .]....].....`... + 0x13, 0x10, 0x64, 0x5b, 0x7d, 0x14, 0x02, 0x87, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xa3, 0x22, 0x75, // ..d[}...&...&."u + 0x46, 0x6a, 0x96, 0x96, 0x6a, 0x46, 0x75, 0x22, 0xa3, 0x26, 0x1a, 0x80, 0x1a, 0x26, 0xfd, 0x79, // Fj..jFu".&...&.y + 0x14, 0x7d, 0x5b, 0x64, 0x10, 0x13, 0x14, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, // .}[d............ + 0x06, 0x00, 0x00, 0x23, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // ...#...2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x00, 0x20, 0x00, 0x15, 0x14, 0x06, 0x2b, // &5.46;..4. ....+ + 0x01, 0x22, 0x26, 0x35, 0x34, 0x26, 0x22, 0x06, 0x15, 0x11, 0x04, 0x20, 0x28, 0x38, 0x38, 0x28, // ."&54&".... (88( + 0xfc, 0x40, 0x28, 0x38, 0x38, 0x28, 0x20, 0x01, 0x07, 0x01, 0x72, 0x01, 0x07, 0x26, 0x1a, 0x40, // .@(88( ...r..&.@ + 0x1a, 0x26, 0x96, 0xd4, 0x96, 0x03, 0x00, 0x38, 0x28, 0xfd, 0xc0, 0x28, 0x38, 0x38, 0x28, 0x02, // .&.....8(..(88(. + 0x40, 0x28, 0x38, 0x01, 0x40, 0xb9, 0x01, 0x07, 0xfe, 0xf9, 0xb9, 0x1a, 0x26, 0x26, 0x1a, 0x6a, // @(8.@.......&&.j + 0x96, 0x96, 0x6a, 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..j............. + 0x05, 0x80, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x27, 0x00, 0x33, 0x00, 0x00, 0x00, 0x14, // .........'.3.... + 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x00, 0x10, 0x26, 0x20, 0x06, 0x10, 0x16, 0x20, 0x00, 0x10, // ."&462..& ... .. + 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x2e, 0x02, 0x20, 0x0e, 0x02, 0x10, 0x1e, 0x02, // . ... .... ..... + 0x20, 0x3e, 0x01, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, // >..... $...$ .. + 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x01, 0x16, 0xe1, 0xfe, 0xc2, 0xe1, 0xe1, 0x01, 0x3e, 0x01, // ..............>. + 0x61, 0xfe, 0xd4, 0xfe, 0x58, 0xfe, 0xd4, 0x01, 0x2c, 0x01, 0xa8, 0x01, 0xac, 0x66, 0xab, 0xed, // a...X...,....f.. + 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0xed, 0x01, 0x04, 0xed, 0xab, 0xe6, 0xce, 0xfe, 0x9f, // ....ff.......... + 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xea, 0xd4, 0x96, // .^.....a...a.... + 0x96, 0xd4, 0x96, 0xfe, 0x61, 0x01, 0x3e, 0xe1, 0xe1, 0xfe, 0xc2, 0xe1, 0x02, 0x54, 0xfe, 0x58, // ....a.>......T.X + 0xfe, 0xd4, 0x01, 0x2c, 0x01, 0xa8, 0x01, 0x2c, 0xfd, 0x7e, 0x01, 0x04, 0xed, 0xab, 0x66, 0x66, // ...,...,.~....ff + 0xab, 0xed, 0xfe, 0xfc, 0xed, 0xab, 0x66, 0x66, 0xab, 0x02, 0x40, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // ......ff..@.^... + 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..a...a......... + 0x02, 0x00, 0x05, 0x80, 0x03, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x15, // .........../.... + 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x15, // ..+."&=.46;.2... + 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x05, 0x15, // ..+."&=.46;.2... + 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x80, // ..+."&=.46;.2... + 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x02, 0x00, 0x38, 0x28, 0xc0, 0x28, // 8(.(88(.(8..8(.( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x02, 0x00, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // 88(.(8..8(.(88(. + 0x28, 0x38, 0x03, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, // (8. .(88(.(88(.( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, // 88(.(88(.(88(.(8 + 0x38, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x05, 0x80, 0x00, 0x0f, // 8............... + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // .../......+."&=. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // 46;.2.....+."&=. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x11, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // 46;.2.....+."&=. + 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x01, 0x80, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, // 46;.2...8(.(88(. + 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, // (88(.(88(.(88(.( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x01, 0x20, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, // 88(.(8. .(88(.(8 + 0x38, 0x01, 0xd8, 0xc0, 0x28, 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x01, 0xd8, 0xc0, 0x28, // 8...(88(.(88...( + 0x38, 0x38, 0x28, 0xc0, 0x28, 0x38, 0x38, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // 88(.(88......... + 0x05, 0x80, 0x00, 0x07, 0x00, 0x1b, 0x00, 0x35, 0x00, 0x45, 0x00, 0x00, 0x24, 0x34, 0x26, 0x22, // .......5.E..$4&" + 0x06, 0x14, 0x16, 0x32, 0x25, 0x26, 0x00, 0x27, 0x26, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x17, 0x1e, // ...2%&.'&....... + 0x01, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x32, 0x36, 0x25, 0x26, 0x02, 0x2e, 0x01, 0x24, 0x27, 0x26, // ....;.26%&...$'& + 0x07, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x17, 0x16, 0x04, 0x12, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x32, // .............;.2 + 0x37, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 76....#!"&5.463! + 0x32, 0x16, 0x02, 0x00, 0x4b, 0x6a, 0x4b, 0x4b, 0x6a, 0x01, 0xaa, 0x0d, 0xfe, 0xb8, 0xe8, 0x0e, // 2...KjKKj....... + 0x14, 0x11, 0x0d, 0x9a, 0xdc, 0x0b, 0x01, 0x12, 0x0d, 0x80, 0x0d, 0x14, 0x01, 0x7f, 0x05, 0x66, // ...............f + 0xb1, 0xe9, 0xfe, 0xe1, 0x9a, 0x0e, 0x09, 0x0a, 0x12, 0x0d, 0xcc, 0x01, 0x5c, 0xd1, 0x07, 0x01, // ................ + 0x12, 0x0d, 0x80, 0x0d, 0x0a, 0x0b, 0x01, 0x1f, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // .........w.@w..w + 0x03, 0xc0, 0x77, 0xa9, 0xcb, 0x6a, 0x4b, 0x4b, 0x6a, 0x4b, 0x22, 0xe8, 0x01, 0x48, 0x0d, 0x01, // ..w..jKKjK"..H.. + 0x14, 0x0d, 0x80, 0x0d, 0x12, 0x01, 0x0b, 0xdc, 0x9a, 0x0d, 0x11, 0x14, 0x0d, 0x9a, 0x01, 0x1f, // ................ + 0xe9, 0xb1, 0x66, 0x05, 0x01, 0x0a, 0x0a, 0x0d, 0x80, 0x0d, 0x12, 0x01, 0x07, 0xd1, 0xfe, 0xa4, // ..f............. + 0xcc, 0x0d, 0x12, 0x0a, 0x09, 0x03, 0xcd, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, // ........@w..w..w + 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0b, // ................ + 0x00, 0x1b, 0x00, 0x00, 0x00, 0x20, 0x04, 0x12, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, // ..... ..... $... + 0x01, 0x36, 0x34, 0x27, 0x01, 0x26, 0x07, 0x06, 0x15, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, // .64'.&.......327 + 0x02, 0x2f, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ./...a.....^.... + 0x03, 0xb2, 0x20, 0x20, 0xfd, 0xe0, 0x1f, 0x21, 0x20, 0x20, 0x10, 0x10, 0x11, 0x0f, 0x05, 0x80, // .. ...! ...... + 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xfd, // ....^.....a...a. + 0x97, 0x12, 0x4a, 0x12, 0x01, 0x40, 0x13, 0x12, 0x13, 0x25, 0xfd, 0x80, 0x25, 0x13, 0x08, 0x09, // ..J..@...%..%... + 0x00, 0x03, 0x00, 0x36, 0xff, 0x35, 0x06, 0xcb, 0x05, 0xca, 0x00, 0x03, 0x00, 0x13, 0x00, 0x2f, // ...6.5........./ + 0x00, 0x00, 0x09, 0x05, 0x36, 0x34, 0x27, 0x01, 0x26, 0x22, 0x07, 0x01, 0x06, 0x14, 0x17, 0x01, // ....64'.&"...... + 0x16, 0x32, 0x09, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x36, 0x34, 0x26, 0x22, 0x07, 0x27, 0x26, 0x34, // .2..."/.64&".'&4 + 0x37, 0x01, 0x36, 0x32, 0x1f, 0x01, 0x06, 0x14, 0x16, 0x32, 0x37, 0x17, 0x16, 0x14, 0x04, 0x00, // 7.62.....27..... + 0x01, 0x3c, 0xfd, 0xc4, 0xfe, 0xc4, 0x01, 0x69, 0x02, 0x6a, 0x13, 0x13, 0xfe, 0x96, 0x12, 0x36, // .<.....i.j.....6 + 0x12, 0xfd, 0x96, 0x13, 0x13, 0x01, 0x6a, 0x12, 0x36, 0x03, 0x8b, 0xfc, 0x75, 0x25, 0x6b, 0x25, // ......j.6...u%k% + 0x7e, 0x38, 0x70, 0xa0, 0x38, 0x7d, 0x25, 0x25, 0x03, 0x8b, 0x25, 0x6b, 0x25, 0x7d, 0x38, 0x70, // ~8p.8}%%..%k%}8p + 0xa0, 0x38, 0x7e, 0x25, 0x04, 0x3c, 0xfe, 0xc4, 0xfd, 0xc4, 0x01, 0x3c, 0xfe, 0x69, 0x02, 0x6a, // .8~%.<.....<.i.j + 0x13, 0x34, 0x13, 0x01, 0x6a, 0x12, 0x12, 0xfd, 0x96, 0x13, 0x34, 0x13, 0xfe, 0x96, 0x12, 0x02, // .4..j.....4..... + 0x8f, 0xfc, 0x74, 0x25, 0x25, 0x7e, 0x38, 0xa0, 0x70, 0x38, 0x7e, 0x25, 0x6b, 0x25, 0x03, 0x8a, // ..t%%~8.p8~%k%.. + 0x25, 0x25, 0x7d, 0x38, 0xa0, 0x70, 0x38, 0x7d, 0x25, 0x6b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // %%}8.p8}%k...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x35, 0x34, 0x26, // .............54& + 0x23, 0x21, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, // #!".....3!26.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x26, 0x1a, // #!"&5.463!2...&. + 0xfc, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0x80, 0x1a, 0x26, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, // ...&&....&...w.@ + 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x40, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x80, // w..w..w..@..&&.. + 0x1a, 0x26, 0x26, 0x02, 0x3a, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // .&&.:.@w..w..w.. + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x05, 0x80, 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, // .............../ + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, // ......#!"&=.463! + 0x32, 0x16, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, // 2...4&#!".....3! + 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 26....#!"&5.463! + 0x32, 0x16, 0x04, 0x80, 0x12, 0x0e, 0xfc, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0x40, 0x0e, 0x12, // 2............@.. + 0x80, 0x5e, 0x42, 0xfc, 0xc0, 0x42, 0x5e, 0x5e, 0x42, 0x03, 0x40, 0x42, 0x5e, 0x80, 0xa9, 0x77, // .^B..B^^B.@B^..w + 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0x02, 0xe0, 0x40, 0x0e, 0x12, 0x12, // ..w..w.@w...@... + 0x0e, 0x40, 0x0e, 0x12, 0x12, 0xfe, 0x32, 0x03, 0x40, 0x42, 0x5e, 0x5e, 0x42, 0xfc, 0xc0, 0x42, // .@....2.@B^^B..B + 0x5e, 0x5e, 0x03, 0x82, 0xfc, 0xc0, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0x40, 0x77, 0xa9, 0xa9, 0x00, // ^^....w..w.@w... + 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x03, 0xfa, 0x05, 0x7f, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x06, // ................ + 0x2b, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x27, 0x26, 0x3f, 0x01, 0x36, 0x33, 0x21, 0x11, // +....#!"'&?.63!. + 0x23, 0x22, 0x27, 0x26, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, 0x03, 0xfa, 0x12, 0x28, 0xc0, // #"'&7.62......(. + 0x12, 0x0e, 0xfd, 0x40, 0x15, 0x08, 0x08, 0x0c, 0xa0, 0x09, 0x10, 0x01, 0x40, 0xc0, 0x28, 0x12, // ...@........@.(. + 0x11, 0x1a, 0x01, 0x40, 0x12, 0x3e, 0x12, 0x01, 0x40, 0x1b, 0x03, 0xa5, 0x25, 0xfc, 0xa0, 0x0e, // ...@.>..@...%... + 0x12, 0x12, 0x14, 0x0f, 0xc0, 0x0b, 0x02, 0x80, 0x25, 0x25, 0x1f, 0x01, 0x80, 0x16, 0x16, 0xfe, // ........%%...... + 0x80, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0xff, 0x80, 0x03, 0xfa, 0x05, 0x00, 0x00, 0x1b, // . .............. + 0x00, 0x00, 0x13, 0x21, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, 0x16, 0x07, 0x01, 0x06, 0x22, 0x27, // ...!2...32...."' + 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x21, 0x22, 0x2f, 0x01, 0x26, 0x37, 0x36, 0x20, 0x02, // .&76;..!"/.&76 . + 0xc0, 0x0d, 0x13, 0xc0, 0x28, 0x24, 0x1b, 0xfe, 0xc0, 0x12, 0x3e, 0x12, 0xfe, 0xc0, 0x1a, 0x11, // ....($....>..... + 0x12, 0x28, 0xc0, 0xfe, 0xc0, 0x0e, 0x0b, 0xa0, 0x0d, 0x09, 0x09, 0x05, 0x00, 0x13, 0x0e, 0xfc, // .(.............. + 0xa1, 0x4a, 0x20, 0xfe, 0x80, 0x16, 0x16, 0x01, 0x80, 0x1f, 0x26, 0x25, 0x02, 0x80, 0x0b, 0xc0, // .J .......&%.... + 0x0e, 0x14, 0x13, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x14, // ................ + 0x00, 0x24, 0x00, 0x00, 0x25, 0x01, 0x36, 0x34, 0x2f, 0x01, 0x26, 0x22, 0x07, 0x01, 0x27, 0x26, // .$..%.64/.&"..'& + 0x22, 0x0f, 0x01, 0x06, 0x14, 0x17, 0x01, 0x16, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // ".......2....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xad, 0x02, 0x66, 0x13, 0x13, 0x66, // &5.463!2....f..f + 0x13, 0x34, 0x13, 0xfe, 0x2d, 0xd3, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, 0x01, 0x66, 0x13, 0x34, // .4..-..4.f...f.4 + 0x03, 0x66, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xed, 0x02, // .f.w.@w..w..w... + 0x66, 0x13, 0x34, 0x13, 0x66, 0x13, 0x13, 0xfe, 0x2d, 0xd3, 0x13, 0x13, 0x66, 0x13, 0x34, 0x13, // f.4.f...-...f.4. + 0xfe, 0x9a, 0x13, 0x03, 0x86, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // ......@w..w..w.. + 0x00, 0x05, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x06, 0x00, 0x10, 0x00, 0x15, // ................ + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x17, 0x07, 0x23, 0x35, 0x23, 0x35, 0x01, 0x16, 0x07, // .../.....#5#5... + 0x01, 0x06, 0x27, 0x26, 0x37, 0x01, 0x36, 0x09, 0x03, 0x11, 0x01, 0x37, 0x36, 0x34, 0x2f, 0x01, // ..'&7.6....764/. + 0x26, 0x22, 0x0f, 0x01, 0x25, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // &"..%...#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x01, 0x94, 0x98, 0x34, 0x38, 0x60, 0x01, 0xd2, 0x0e, 0x11, 0xfe, 0xdd, // 3!2....48`...... + 0x11, 0x0d, 0x0e, 0x11, 0x01, 0x23, 0x11, 0xfe, 0xfb, 0x02, 0x20, 0xfe, 0xe0, 0xfd, 0xe0, 0x03, // .....#.... ..... + 0x80, 0x5c, 0x1c, 0x1c, 0x98, 0x1c, 0x50, 0x1c, 0x5c, 0x02, 0xa0, 0xa9, 0x77, 0xfc, 0x40, 0x77, // ......P.....w.@w + 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0xac, 0x98, 0x34, 0x60, 0x38, 0x01, 0xba, 0x0d, // ..w..w....4`8... + 0x11, 0xfe, 0xdd, 0x11, 0x0e, 0x0d, 0x11, 0x01, 0x23, 0x11, 0xfd, 0x40, 0x02, 0x20, 0x01, 0x20, // ........#..@. . + 0xfd, 0xe0, 0xfe, 0xe0, 0x02, 0x60, 0x5c, 0x1c, 0x50, 0x1c, 0x98, 0x1c, 0x1c, 0x5c, 0x60, 0xfc, // .....`..P.....`. + 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // @w..w..w........ + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, 0x00, 0x29, 0x00, 0x00, 0x01, 0x11, 0x34, 0x26, // .........)....4& + 0x23, 0x21, 0x22, 0x07, 0x06, 0x1f, 0x01, 0x01, 0x06, 0x14, 0x1f, 0x01, 0x16, 0x32, 0x37, 0x01, // #!"..........27. + 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..3276....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 0x00, 0x26, 0x1a, 0xfe, 0x20, 0x2a, 0x11, 0x11, 0x1f, // 463!2...&.. *... + 0x90, 0xfd, 0xea, 0x13, 0x13, 0x66, 0x13, 0x34, 0x13, 0x02, 0x16, 0x90, 0x12, 0x1b, 0x0c, 0x0d, // .....f.4........ + 0x27, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, // '...w.@w..w..w.. + 0x60, 0x01, 0xe0, 0x1a, 0x26, 0x27, 0x29, 0x1d, 0x90, 0xfd, 0xea, 0x13, 0x34, 0x13, 0x66, 0x13, // `...&').....4.f. + 0x13, 0x02, 0x16, 0x90, 0x13, 0x05, 0x11, 0x02, 0x2a, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, // ........*.@w..w. + 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x25, // .w.............% + 0x00, 0x35, 0x00, 0x00, 0x09, 0x01, 0x36, 0x34, 0x27, 0x01, 0x26, 0x07, 0x06, 0x1d, 0x01, 0x22, // .5....64'.&...." + 0x0e, 0x05, 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x27, 0x02, 0x37, 0x3e, 0x01, 0x33, // ......3276'.7>.3 + 0x15, 0x14, 0x17, 0x16, 0x33, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ....32....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0xed, 0x01, 0x60, 0x13, 0x13, 0xfe, 0xa0, 0x1e, 0x27, // 463!2....`.....' + 0x28, 0x77, 0xc2, 0x83, 0x61, 0x38, 0x21, 0x0a, 0xa7, 0x0a, 0x0f, 0x07, 0x06, 0x16, 0x03, 0x2c, // (w..a8!........, + 0x6a, 0x2e, 0xa8, 0x8c, 0x28, 0x0c, 0x0c, 0x1a, 0x02, 0x26, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // j...(....&.w.@w. + 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0xb3, 0x01, 0x60, 0x13, 0x34, 0x13, 0x01, 0x60, 0x1f, // .w..w....`.4..`. + 0x11, 0x11, 0x2a, 0xa0, 0x27, 0x3f, 0x5f, 0x60, 0x7a, 0x65, 0x3c, 0xb5, 0xdf, 0x0c, 0x03, 0x09, // ..*.'?_`ze<..... + 0x18, 0x01, 0x62, 0x77, 0x34, 0x2f, 0xa0, 0x2a, 0x11, 0x05, 0x02, 0xc0, 0xfc, 0x40, 0x77, 0xa9, // ..bw4/.*.....@w. + 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x04, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // .w..w........... + 0x05, 0x80, 0x00, 0x02, 0x00, 0x06, 0x00, 0x12, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x2d, 0x01, 0x01, // .............-.. + 0x11, 0x01, 0x11, 0x00, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, // ....... ..... 6. + 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x02, 0x80, 0x01, 0x00, 0xff, // ... $...$ ...... + 0x00, 0x01, 0x80, 0xfe, 0x00, 0x03, 0x20, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, // ...... ......... + 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, // (..r....^.....a. + 0xa2, 0x01, 0x61, 0x01, 0xc0, 0x80, 0x80, 0x01, 0x4f, 0xfd, 0xe2, 0xff, 0x00, 0x02, 0x1e, 0xfe, // ..a.....O....... + 0xdd, 0x01, 0x28, 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, // ..(.........._.^ + 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x03, 0x00, 0x00, // .....a...a...... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x16, // ...........-.... + 0x07, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x33, 0x21, 0x32, 0x13, 0x11, 0x34, 0x26, // ..."'.&763!2..4& + 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, // #!".....3!26.... + 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x79, 0x12, 0x17, // #!"&5.463!2..y.. + 0xfe, 0xc0, 0x13, 0x42, 0x13, 0xfe, 0xc0, 0x17, 0x12, 0x11, 0x28, 0x02, 0x80, 0x28, 0x98, 0x13, // ...B......(..(.. + 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x01, 0x00, 0xa9, 0x77, 0xfc, // ..@...........w. + 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0x5d, 0x23, 0x1f, 0xfe, 0x40, 0x1b, // @w..w..w..]#..@. + 0x1b, 0x01, 0xc0, 0x1f, 0x23, 0x23, 0xfd, 0x20, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, // ....##. .......@ + 0x0d, 0x13, 0x13, 0x03, 0xcd, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // ......@w..w..w.. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x2d, // ...............- + 0x00, 0x00, 0x01, 0x06, 0x23, 0x21, 0x22, 0x27, 0x26, 0x37, 0x01, 0x36, 0x32, 0x17, 0x01, 0x16, // ....#!"'&7.62... + 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, // ..4&#!".....3!26 + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x04, 0x79, 0x11, 0x28, 0xfd, 0x80, 0x28, 0x11, 0x12, 0x17, 0x01, 0x40, 0x13, 0x42, 0x13, 0x01, // .y.(..(....@.B.. + 0x40, 0x17, 0x75, 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x01, // @.u...@......... + 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x01, 0xa3, 0x23, // ..w.@w..w..w...# + 0x23, 0x23, 0x1f, 0x01, 0xc0, 0x1b, 0x1b, 0xfe, 0x40, 0x1f, 0xfe, 0xda, 0x03, 0xc0, 0x0d, 0x13, // ##......@....... + 0x13, 0x0d, 0xfc, 0x40, 0x0d, 0x13, 0x13, 0x03, 0xcd, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, // ...@......@w..w. + 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0d, // .w.............. + 0x00, 0x1d, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x27, 0x26, 0x35, 0x11, 0x34, // ...-.......'&5.4 + 0x37, 0x36, 0x17, 0x01, 0x13, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, // 76....4&#!"..... + 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, // 3!26....#!"&5.46 + 0x33, 0x21, 0x32, 0x16, 0x04, 0x40, 0x1b, 0xfe, 0x40, 0x1f, 0x23, 0x23, 0x23, 0x23, 0x1f, 0x01, // 3!2..@..@.####.. + 0xc0, 0xdb, 0x12, 0x0e, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0x03, 0xc0, 0x0e, 0x12, 0x01, 0x00, // .....@.......... + 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, 0xa1, 0x42, 0x13, // .w.@w..w..w...B. + 0xfe, 0xc0, 0x17, 0x12, 0x11, 0x28, 0x02, 0x80, 0x28, 0x11, 0x12, 0x17, 0xfe, 0xc0, 0xfd, 0xec, // .....(..(....... + 0x03, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xfc, 0x40, 0x0e, 0x12, 0x12, 0x03, 0xce, 0xfc, 0x40, 0x77, // .......@......@w + 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, // ..w..w.......... + 0x05, 0x80, 0x00, 0x60, 0x00, 0x00, 0x25, 0x17, 0x16, 0x06, 0x0f, 0x01, 0x0e, 0x07, 0x23, 0x22, // ...`..%.......#" + 0x00, 0x27, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x26, 0x37, 0x23, 0x22, 0x26, // .'#"&=.46;.&7#"& + 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x36, 0x00, 0x33, 0x32, 0x17, 0x16, 0x17, 0x16, 0x0f, 0x01, // =.46;.6.32...... + 0x0e, 0x01, 0x2f, 0x01, 0x2e, 0x05, 0x23, 0x22, 0x06, 0x07, 0x21, 0x32, 0x17, 0x16, 0x0f, 0x01, // ../...#"..!2.... + 0x06, 0x23, 0x21, 0x06, 0x17, 0x21, 0x32, 0x17, 0x16, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x1e, // .#!..!2......#!. + 0x01, 0x33, 0x32, 0x3e, 0x04, 0x3f, 0x01, 0x36, 0x17, 0x16, 0x03, 0xd0, 0x23, 0x03, 0x0c, 0x0b, // .32>.?.6....#... + 0x05, 0x04, 0x0d, 0x13, 0x18, 0x1b, 0x21, 0x22, 0x27, 0x13, 0xea, 0xfe, 0xa2, 0x3f, 0x5f, 0x0d, // ......!"'....?_. + 0x13, 0x13, 0x0d, 0x42, 0x02, 0x03, 0x43, 0x0e, 0x12, 0x12, 0x0e, 0x62, 0x43, 0x01, 0x61, 0xe0, // ...B..C....bC.a. + 0x66, 0x5c, 0x0b, 0x09, 0x06, 0x03, 0x2b, 0x03, 0x16, 0x0d, 0x04, 0x04, 0x0f, 0x14, 0x19, 0x1b, // f.....+......... + 0x1f, 0x0e, 0x7e, 0xc8, 0x32, 0x01, 0xd4, 0x10, 0x09, 0x0a, 0x03, 0x18, 0x05, 0x1b, 0xfe, 0x18, // ..~.2........... + 0x03, 0x03, 0x01, 0xcb, 0x0f, 0x0a, 0x09, 0x03, 0x18, 0x02, 0x12, 0x0b, 0xfe, 0x7d, 0x30, 0xcb, // .............}0. + 0x7f, 0x12, 0x24, 0x1f, 0x1c, 0x15, 0x10, 0x04, 0x05, 0x0d, 0x0d, 0x0c, 0xe5, 0x9f, 0x0c, 0x15, // ..$............. + 0x04, 0x01, 0x02, 0x03, 0x06, 0x05, 0x05, 0x05, 0x04, 0x02, 0x01, 0x05, 0xdd, 0x13, 0x0d, 0x71, // ...............q + 0x0d, 0x13, 0x39, 0x30, 0x12, 0x0e, 0x72, 0x0e, 0x12, 0xd2, 0x01, 0x00, 0x17, 0x03, 0x0c, 0x0b, // ..90..r......... + 0x0d, 0x9f, 0x0d, 0x0d, 0x04, 0x01, 0x01, 0x03, 0x04, 0x03, 0x03, 0x02, 0x80, 0x70, 0x0c, 0x0c, // .............p.. + 0x0e, 0x72, 0x1a, 0x25, 0x44, 0x0c, 0x0c, 0x0f, 0x70, 0x0b, 0x0f, 0x75, 0x89, 0x03, 0x04, 0x05, // .r.%D...p..u.... + 0x05, 0x04, 0x01, 0x02, 0x05, 0x07, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfc, // ................ + 0x05, 0x80, 0x00, 0x3f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x3d, 0x01, // ...?......#!"&=. + 0x34, 0x36, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x34, // 46;..#"&=.46;.54 + 0x36, 0x33, 0x32, 0x17, 0x1e, 0x01, 0x0f, 0x01, 0x06, 0x07, 0x06, 0x27, 0x2e, 0x02, 0x23, 0x22, // 632........'..#" + 0x06, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x35, 0x34, // ...!2.....#!.!54 + 0x36, 0x3b, 0x01, 0x32, 0x16, 0x03, 0xfc, 0x12, 0x0e, 0xfc, 0x44, 0x0e, 0x12, 0x13, 0x0d, 0x61, // 6;.2......D....a + 0x5f, 0x0e, 0x12, 0x12, 0x0e, 0x5f, 0xf7, 0xbf, 0xb9, 0x96, 0x09, 0x02, 0x08, 0x67, 0x09, 0x0d, // _...._.......g.. + 0x0d, 0x0a, 0x05, 0x2a, 0x60, 0x2d, 0x55, 0x68, 0x01, 0x31, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xcf, // ...*`-Uh.1...... + 0x01, 0x9e, 0x12, 0x0e, 0xa2, 0x0e, 0x12, 0x01, 0x8f, 0xfe, 0x91, 0x0e, 0x12, 0x12, 0x0e, 0x96, // ................ + 0x0d, 0x13, 0x01, 0x7f, 0x13, 0x0d, 0x83, 0x0e, 0x12, 0xdf, 0xab, 0xde, 0x7d, 0x08, 0x19, 0x0a, // ............}... + 0x7f, 0x0b, 0x01, 0x02, 0x09, 0x05, 0x1c, 0x24, 0x5e, 0x4c, 0xd7, 0x12, 0x0e, 0x83, 0x0d, 0x13, // .......$^L...... + 0xfe, 0x85, 0xb5, 0x0d, 0x13, 0x13, 0x00, 0x00, 0x00, 0x01, 0x00, 0x34, 0xff, 0x00, 0x03, 0xd2, // ...........4.... + 0x06, 0x00, 0x00, 0x62, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, // ...b.........+." + 0x26, 0x3d, 0x01, 0x2e, 0x04, 0x27, 0x26, 0x3f, 0x01, 0x36, 0x37, 0x36, 0x17, 0x30, 0x17, 0x16, // &=...'&?.676.0.. + 0x17, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x03, 0x27, 0x2e, 0x08, 0x35, 0x34, 0x36, 0x37, // ..32654..'..5467 + 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x1d, 0x01, 0x1e, 0x04, 0x17, 0x16, 0x0f, 0x01, 0x06, // 546;.2.......... + 0x07, 0x06, 0x27, 0x2e, 0x04, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x04, 0x17, 0x1e, 0x06, 0x03, // ..'..#"......... + 0xd2, 0xc7, 0x9f, 0x12, 0x0e, 0x87, 0x0d, 0x13, 0x42, 0x7b, 0x50, 0x44, 0x19, 0x05, 0x11, 0x0f, // ........B{PD.... + 0x67, 0x07, 0x10, 0x0f, 0x09, 0x02, 0x71, 0x82, 0x25, 0x25, 0x51, 0x7b, 0x1e, 0x25, 0x50, 0x34, // g.....q.%%Q{.%P4 + 0x36, 0x27, 0x2d, 0x4e, 0x2f, 0x42, 0x29, 0x2e, 0x19, 0x11, 0xc4, 0x9d, 0x13, 0x0d, 0x87, 0x0e, // 6'-N/B)......... + 0x12, 0x39, 0x6b, 0x43, 0x3c, 0x12, 0x06, 0x11, 0x0c, 0x51, 0x08, 0x0f, 0x0e, 0x0d, 0x03, 0x17, // .9kC<....Q...... + 0x37, 0x3e, 0x57, 0x2a, 0x5f, 0x78, 0x11, 0x2a, 0x25, 0x4b, 0x2e, 0x2f, 0x35, 0x38, 0x60, 0x37, // 7>W*_x.*%K./58`7 + 0x45, 0x25, 0x1a, 0x01, 0x5f, 0x99, 0xdd, 0x1a, 0xaf, 0x0e, 0x12, 0x13, 0x0d, 0xaf, 0x09, 0x2c, // E%.._.........., + 0x2d, 0x33, 0x18, 0x06, 0x15, 0x14, 0x87, 0x0a, 0x02, 0x02, 0x0b, 0x02, 0x63, 0x1a, 0x08, 0x56, // -3..........c..V + 0x4f, 0x1c, 0x32, 0x22, 0x29, 0x17, 0x15, 0x10, 0x12, 0x23, 0x1b, 0x2c, 0x29, 0x39, 0x3b, 0x4a, // O.2")....#.,)9;J + 0x29, 0x8a, 0xd0, 0x1e, 0xb4, 0x0d, 0x13, 0x12, 0x0e, 0xb0, 0x06, 0x22, 0x21, 0x2a, 0x10, 0x06, // ).........."!*.. + 0x12, 0x14, 0x92, 0x0f, 0x01, 0x03, 0x0a, 0x03, 0x12, 0x23, 0x1d, 0x17, 0x56, 0x44, 0x1a, 0x2c, // .........#..VD., + 0x27, 0x1b, 0x23, 0x13, 0x12, 0x14, 0x17, 0x2f, 0x26, 0x3e, 0x41, 0x58, 0x00, 0x01, 0x00, 0x00, // '.#..../&>AX.... + 0x00, 0x00, 0x03, 0x82, 0x05, 0x80, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, // .......>......+. + 0x0e, 0x01, 0x07, 0x16, 0x01, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x00, 0x27, 0x26, 0x3d, // ........+."'.'&= + 0x01, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x36, 0x37, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, // .46;.267!"&=.463 + 0x21, 0x26, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1d, 0x01, // !&+."&=.463!2... + 0x14, 0x06, 0x2b, 0x01, 0x16, 0x17, 0x33, 0x32, 0x16, 0x03, 0x82, 0x12, 0x0e, 0xa8, 0x17, 0xd4, // ..+...32........ + 0xaa, 0xa7, 0x01, 0x24, 0x0e, 0x0a, 0x08, 0x15, 0xc3, 0x10, 0x09, 0xfe, 0xce, 0xc0, 0x09, 0x13, // ...$............ + 0x0d, 0x70, 0x84, 0xa1, 0x16, 0xfe, 0x55, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0x9d, 0x39, 0xd3, 0x91, // .p....U......9.. + 0x0d, 0x13, 0x12, 0x0e, 0x03, 0x40, 0x0e, 0x12, 0x12, 0x0e, 0xe9, 0x2f, 0x11, 0xab, 0x0e, 0x12, // .....@...../.... + 0x04, 0x2a, 0x66, 0x0e, 0x12, 0x90, 0xb4, 0x14, 0xb2, 0xfe, 0x9a, 0x10, 0x12, 0x12, 0x0c, 0x01, // .*f............. + 0x6f, 0xcc, 0x09, 0x0d, 0x7f, 0x0d, 0x13, 0x56, 0x52, 0x12, 0x0e, 0x66, 0x0e, 0x12, 0x71, 0x13, // o......VR..f..q. + 0x0d, 0x85, 0x0e, 0x12, 0x12, 0x0e, 0x66, 0x0e, 0x12, 0x3d, 0x53, 0x12, 0x00, 0x01, 0x00, 0x04, // ......f..=S..... + 0x00, 0x00, 0x03, 0xff, 0x05, 0x80, 0x00, 0x45, 0x00, 0x00, 0x21, 0x23, 0x22, 0x26, 0x35, 0x11, // .......E..!#"&5. + 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x21, 0x22, 0x26, 0x3d, 0x01, 0x34, // !"&=.463!5!"&=.4 + 0x36, 0x3b, 0x01, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x13, 0x16, 0x17, 0x3e, 0x01, // 6;..&76;.2....>. + 0x37, 0x13, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x16, 0x07, 0x01, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, // 7.6;.2....32.... + 0x06, 0x23, 0x21, 0x15, 0x21, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x11, 0x14, 0x06, // .#!.!2.....#!... + 0x02, 0x5b, 0xac, 0x0d, 0x13, 0xfe, 0xe0, 0x0d, 0x13, 0x13, 0x0d, 0x01, 0x20, 0xfe, 0xe0, 0x0d, // .[.......... ... + 0x13, 0x13, 0x0d, 0xd6, 0xfe, 0xbf, 0x08, 0x08, 0x0a, 0x12, 0xc2, 0x13, 0x0a, 0xd7, 0x13, 0x25, // ...............% + 0x0a, 0x29, 0x07, 0xbf, 0x08, 0x15, 0xbf, 0x11, 0x0a, 0x09, 0x08, 0xfe, 0xc7, 0xd7, 0x0d, 0x13, // .).............. + 0x13, 0x0d, 0xfe, 0xde, 0x01, 0x22, 0x0d, 0x13, 0x13, 0x0d, 0xfe, 0xde, 0x13, 0x12, 0x0e, 0x01, // .....".......... + 0x4a, 0x12, 0x0e, 0x67, 0x0d, 0x13, 0x55, 0x12, 0x0e, 0x68, 0x0d, 0x13, 0x02, 0x42, 0x10, 0x10, // J..g..U..h...B.. + 0x10, 0x12, 0xfe, 0x57, 0x26, 0x57, 0x18, 0x58, 0x11, 0x01, 0xa4, 0x13, 0x10, 0x0e, 0x11, 0xfd, // ...W&W.X........ + 0xbd, 0x13, 0x0d, 0x68, 0x0e, 0x12, 0x55, 0x13, 0x0d, 0x67, 0x0e, 0x12, 0xfe, 0xb6, 0x0d, 0x13, // ...h..U..g...... + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x38, 0x00, 0x00, // .............8.. + 0x00, 0x34, 0x26, 0x23, 0x21, 0x11, 0x21, 0x32, 0x00, 0x10, 0x06, 0x23, 0x21, 0x15, 0x21, 0x32, // .4&#!.!2...#!.!2 + 0x16, 0x1d, 0x01, 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x3d, 0x01, // .....#!...+."&=. + 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x35, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, // #"&=.46;.5#"&=.4 + 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x04, 0x13, 0x82, 0x6a, 0xfe, 0xc0, 0x01, // 6;..463!2...j... + 0x40, 0x6a, 0x01, 0x6f, 0xfd, 0xc8, 0xfe, 0xac, 0x01, 0xf9, 0x0e, 0x12, 0x12, 0x0e, 0xfe, 0x07, // @j.o............ + 0x13, 0x0d, 0xa7, 0x0e, 0x12, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xe0, 0xe0, 0x0e, 0x12, 0x12, 0x0e, // ................ + 0xe0, 0x12, 0x0e, 0x02, 0x1b, 0xc8, 0x03, 0x67, 0xc8, 0x7c, 0xfe, 0x40, 0x01, 0xa1, 0xfe, 0x7e, // .......g.|.@...~ + 0xf4, 0x76, 0x12, 0x0e, 0x80, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x12, 0x0e, 0xc0, 0x12, 0x0e, 0x80, // .v.............. + 0x0e, 0x12, 0x76, 0x12, 0x0e, 0x95, 0x0d, 0x13, 0x02, 0x75, 0x0e, 0x12, 0x00, 0x06, 0x00, 0x00, // ..v......u...... + 0x00, 0x00, 0x07, 0x00, 0x05, 0x80, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x19, 0x00, 0x1d, // ................ + 0x00, 0x6e, 0x00, 0x00, 0x01, 0x13, 0x23, 0x13, 0x16, 0x14, 0x17, 0x34, 0x36, 0x13, 0x37, 0x21, // .n....#....46.7! + 0x17, 0x21, 0x33, 0x27, 0x23, 0x01, 0x13, 0x23, 0x13, 0x14, 0x16, 0x17, 0x34, 0x36, 0x13, 0x37, // .!3'#..#....46.7 + 0x21, 0x17, 0x05, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x03, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x03, 0x23, // !.....+...+."'.# + 0x03, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x03, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, // ..+."&'.#"&=.46; + 0x01, 0x27, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x3b, 0x01, 0x03, 0x26, 0x37, 0x36, 0x3b, // .'#"&=.46;..&76; + 0x01, 0x32, 0x17, 0x13, 0x21, 0x13, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x13, 0x21, 0x13, 0x36, 0x3b, // .2..!.6;.2..!.6; + 0x01, 0x32, 0x17, 0x16, 0x07, 0x03, 0x33, 0x32, 0x16, 0x1d, 0x01, 0x14, 0x06, 0x2b, 0x01, 0x07, // .2....32.....+.. + 0x33, 0x32, 0x16, 0x02, 0x02, 0x51, 0x9f, 0x4b, 0x01, 0x01, 0x01, 0x74, 0x23, 0xfe, 0xdc, 0x20, // 32...Q.K...t#.. + 0x01, 0xa1, 0x8b, 0x23, 0x46, 0x01, 0x9f, 0x4e, 0xa2, 0x51, 0x01, 0x01, 0x01, 0x6f, 0x21, 0xfe, // ...#F..N.Q...o!. + 0xd7, 0x22, 0x02, 0x80, 0x12, 0x0e, 0xd5, 0xa4, 0x07, 0x18, 0x9f, 0x18, 0x07, 0xa6, 0xd1, 0xa7, // .".............. + 0x07, 0x18, 0x9f, 0x0b, 0x11, 0x02, 0xa0, 0xd0, 0x0e, 0x12, 0x12, 0x0e, 0xaf, 0x21, 0x8e, 0x0e, // .............!.. + 0x12, 0x12, 0x0e, 0x6d, 0x59, 0x05, 0x0a, 0x0a, 0x10, 0x89, 0x1a, 0x05, 0x5a, 0x01, 0x67, 0x61, // ...mY.......Z.ga + 0x07, 0x18, 0x7e, 0x18, 0x07, 0x62, 0x01, 0x6d, 0x5d, 0x05, 0x1a, 0x89, 0x10, 0x0a, 0x0a, 0x05, // ..~..b.m]....... + 0x5b, 0x6f, 0x0e, 0x12, 0x12, 0x0e, 0x91, 0x22, 0xb3, 0x0e, 0x12, 0x01, 0x55, 0x01, 0x2b, 0xfe, // [o....."....U.+. + 0xd4, 0x01, 0x04, 0x01, 0x01, 0x05, 0x01, 0xac, 0x80, 0x80, 0x80, 0xfd, 0xd4, 0x01, 0x2c, 0xfe, // ..............,. + 0xd5, 0x01, 0x05, 0x01, 0x01, 0x04, 0x01, 0xad, 0x80, 0x80, 0x20, 0x40, 0x0e, 0x12, 0xfd, 0x98, // .......... @.... + 0x18, 0x18, 0x02, 0x68, 0xfd, 0x98, 0x18, 0x0e, 0x0a, 0x02, 0x68, 0x12, 0x0e, 0x40, 0x0e, 0x12, // ...h......h..@.. + 0x80, 0x12, 0x0e, 0x40, 0x0e, 0x12, 0x01, 0x58, 0x0f, 0x0d, 0x0c, 0x18, 0xfe, 0x98, 0x01, 0x68, // ...@...X.......h + 0x18, 0x18, 0xfe, 0x98, 0x01, 0x68, 0x18, 0x0c, 0x0d, 0x0f, 0xfe, 0xa8, 0x12, 0x0e, 0x40, 0x0e, // .....h........@. + 0x12, 0x80, 0x12, 0x00, 0x00, 0x03, 0x00, 0x38, 0xff, 0x00, 0x04, 0xe8, 0x05, 0x80, 0x00, 0x33, // .......8.......3 + 0x00, 0x48, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x16, 0x07, 0x1e, 0x01, 0x07, 0x0e, 0x04, 0x07, 0x15, // .H.............. + 0x23, 0x35, 0x22, 0x27, 0x15, 0x23, 0x11, 0x22, 0x26, 0x2b, 0x01, 0x37, 0x33, 0x32, 0x37, 0x11, // #5"'.#."&+.7327. + 0x33, 0x26, 0x23, 0x11, 0x26, 0x2b, 0x01, 0x35, 0x17, 0x32, 0x37, 0x35, 0x33, 0x15, 0x36, 0x33, // 3&#.&+.5.2753.63 + 0x35, 0x33, 0x15, 0x1e, 0x03, 0x03, 0x34, 0x2e, 0x04, 0x22, 0x06, 0x23, 0x11, 0x32, 0x16, 0x32, // 53....4..".#.2.2 + 0x3e, 0x06, 0x03, 0x34, 0x2e, 0x04, 0x0e, 0x01, 0x23, 0x11, 0x32, 0x16, 0x3e, 0x06, 0x04, 0x8f, // >..4....#.2.>... + 0x12, 0x95, 0x75, 0x74, 0x0d, 0x07, 0x33, 0x4e, 0x74, 0x7f, 0x52, 0x9a, 0x50, 0x2a, 0x9a, 0x12, // ..ut..3Nt.R.P*.. + 0x48, 0x13, 0xc8, 0x1f, 0x6f, 0x32, 0x08, 0x10, 0x06, 0x0a, 0x0d, 0x4c, 0x6f, 0xd4, 0x40, 0x21, // H...o2.....Lo.@! + 0x9a, 0x52, 0x28, 0x9a, 0x4f, 0x7a, 0x68, 0x3d, 0xd1, 0x1e, 0x2c, 0x47, 0x3c, 0x58, 0x32, 0x4f, // .R(.Ozh=..,GID2F. + 0x9e, 0x0a, 0xfe, 0xc1, 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, // ................ + 0x0e, 0xc0, 0x0e, 0x12, 0xc0, 0x0e, 0x12, 0x02, 0xee, 0x1a, 0x38, 0x50, 0x75, 0x45, 0x3e, 0x2e, // ..........8PuE>. + 0x18, 0x12, 0x27, 0x0f, 0x10, 0x25, 0x26, 0x54, 0x65, 0x10, 0x02, 0x15, 0x51, 0x2c, 0x6a, 0x86, // ..'..%&Te...Q,j. + 0x90, 0x6d, 0x7b, 0xa4, 0x1e, 0xfe, 0x2b, 0xa7, 0x01, 0x02, 0x07, 0x08, 0x12, 0x3e, 0x52, 0xc0, // .m{...+......>R. + 0x7b, 0xdf, 0x3f, 0x6a, 0x4a, 0x72, 0x4c, 0x36, 0x56, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, // {.?jJrL6V....... + 0x40, 0x10, 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0x37, 0x3e, 0x77, // @....`.......7>w + 0x6d, 0x52, 0x31, 0x10, 0x08, 0x07, 0x71, 0x07, 0x04, 0x0d, 0x75, 0x57, 0x17, 0x1c, 0x8f, 0x65, // mR1...q...uW...e + 0x69, 0x92, 0xbd, 0x02, 0x2f, 0x72, 0x72, 0x01, 0xb0, 0x07, 0x18, 0x05, 0x10, 0x0c, 0x0d, 0x12, // i.../rr......... + 0x3a, 0x56, 0xb9, 0xfd, 0x72, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x22, 0xff, 0x00, 0x05, 0xce, // :V..r......".... + 0x06, 0x00, 0x00, 0x0a, 0x00, 0x24, 0x00, 0x37, 0x00, 0x56, 0x00, 0x00, 0x01, 0x34, 0x26, 0x23, // .....$.7.V...4&# + 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, 0x36, 0x01, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x27, 0x01, // "...326.....#"'. + 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, 0x11, 0x33, 0x32, // &76;..46;.2...32 + 0x16, 0x05, 0x15, 0x21, 0x35, 0x33, 0x11, 0x34, 0x36, 0x3d, 0x01, 0x23, 0x07, 0x06, 0x0f, 0x01, // ...!53.46=.#.... + 0x27, 0x37, 0x33, 0x11, 0x13, 0x14, 0x0e, 0x03, 0x23, 0x22, 0x27, 0x26, 0x27, 0x37, 0x16, 0x17, // '73.....#"'&'7.. + 0x16, 0x33, 0x32, 0x36, 0x37, 0x23, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, // .3267#..#"&54632 + 0x16, 0x05, 0x42, 0x58, 0x3b, 0x34, 0x3e, 0x49, 0x44, 0x32, 0x46, 0xfd, 0x9e, 0x0a, 0xfe, 0xc1, // ..BX;4>ID2F..... + 0x0a, 0x0d, 0x0c, 0x0b, 0xfe, 0xc0, 0x0f, 0x08, 0x08, 0x16, 0xc0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // ................ + 0xc0, 0x0e, 0x12, 0x02, 0xd0, 0xfe, 0x2b, 0xa7, 0x01, 0x02, 0x07, 0x08, 0x12, 0x3e, 0x52, 0xc0, // ......+......>R. + 0x7b, 0xc3, 0x1a, 0x38, 0x50, 0x75, 0x45, 0x3e, 0x2e, 0x18, 0x12, 0x27, 0x0f, 0x10, 0x25, 0x26, // {..8PuE>...'..%& + 0x54, 0x65, 0x10, 0x02, 0x15, 0x51, 0x2c, 0x6a, 0x86, 0x90, 0x6d, 0x7b, 0xa4, 0x04, 0xdf, 0x3f, // Te...Q,j..m{...? + 0x6a, 0x4a, 0x72, 0x4c, 0x36, 0xfb, 0xaa, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, 0x10, // jJrL6.........@. + 0x13, 0x14, 0x05, 0x60, 0x0e, 0x12, 0x12, 0x0e, 0xfa, 0xa0, 0x12, 0xfc, 0x72, 0x72, 0x01, 0xb0, // ...`........rr.. + 0x07, 0x18, 0x05, 0x10, 0x0c, 0x0d, 0x12, 0x3a, 0x56, 0xb9, 0xfd, 0x72, 0x05, 0x33, 0x3e, 0x77, // .......:V..r.3>w + 0x6d, 0x52, 0x31, 0x10, 0x08, 0x07, 0x71, 0x07, 0x04, 0x0d, 0x75, 0x57, 0x17, 0x1c, 0x8f, 0x65, // mR1...q...uW...e + 0x69, 0x92, 0xbd, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x40, 0x05, 0x80, 0x00, 0x0b, // i..........@.... + 0x00, 0x1b, 0x00, 0x5c, 0x00, 0x00, 0x25, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, // ......%4&#"....3 + 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, // 26....#!"&5.463! + 0x32, 0x16, 0x05, 0x14, 0x07, 0x16, 0x15, 0x16, 0x07, 0x16, 0x07, 0x06, 0x07, 0x16, 0x07, 0x06, // 2............... + 0x07, 0x2b, 0x02, 0x22, 0x2e, 0x01, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, // .+."..'&'..5.467 + 0x3e, 0x01, 0x37, 0x36, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x02, 0x37, 0x36, 0x33, 0x32, 0x1e, 0x05, // >.767>.7>.7632.. + 0x15, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x02, 0x07, 0x21, 0x32, 0x16, 0x01, 0x00, 0x26, 0x1a, 0x1b, // ........!2...&.. + 0x25, 0x25, 0x1b, 0x1a, 0x26, 0xa0, 0x26, 0x1a, 0xfe, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x20, // %%..&.&....&&.. + 0x1a, 0x26, 0x04, 0xa0, 0x37, 0x0f, 0x03, 0x2e, 0x11, 0x11, 0x0f, 0x27, 0x09, 0x3a, 0x40, 0x85, // .&..7......'.:@. + 0x24, 0x4c, 0x11, 0x42, 0x9c, 0x57, 0x4d, 0x7b, 0x23, 0x1a, 0x26, 0x24, 0x19, 0x18, 0x68, 0x31, // $L.B.WM{#.&$..h1 + 0x44, 0x21, 0x12, 0x1a, 0x09, 0x09, 0x07, 0x0b, 0x1c, 0x14, 0x13, 0x1a, 0x2e, 0x49, 0x2f, 0x21, // D!...........I/! + 0x0f, 0x09, 0x01, 0x13, 0x13, 0x12, 0x03, 0x0e, 0x08, 0x04, 0x01, 0x15, 0x4e, 0x72, 0xc0, 0x1a, // ............Nr.. + 0x26, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0x02, 0x1b, 0xfd, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x02, 0x80, // &&..%%.....&&... + 0x1a, 0x26, 0x26, 0x1a, 0x56, 0x3f, 0x2c, 0x20, 0x4c, 0x3d, 0x38, 0x3d, 0x39, 0x25, 0x70, 0x45, // .&&.V?, L=8=9%pE + 0x4c, 0x02, 0x1f, 0x1b, 0x1a, 0x2b, 0x01, 0x01, 0x25, 0x1a, 0x02, 0x81, 0x19, 0x25, 0x02, 0x02, // L....+..%....%.. + 0x72, 0x40, 0x57, 0x21, 0x12, 0x3c, 0x25, 0x2a, 0x27, 0x2c, 0x3c, 0x14, 0x13, 0x15, 0x1f, 0x32, // r@W!.<%*',<....2 + 0x28, 0x3c, 0x1e, 0x18, 0x26, 0x4c, 0x2c, 0x22, 0x06, 0x18, 0x14, 0x0e, 0x72, 0x00, 0x00, 0x00, // (<..&L,"....r... + 0x00, 0x03, 0x00, 0x00, 0xff, 0x00, 0x06, 0x40, 0x05, 0x00, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x5c, // .......@........ + 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x13, 0x11, // .....#"&54632... + 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x25, 0x16, // 4&#!".....3!26%. + 0x15, 0x0e, 0x01, 0x23, 0x21, 0x1e, 0x02, 0x17, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x05, 0x23, 0x22, // ...#!.........#" + 0x27, 0x2e, 0x02, 0x27, 0x2e, 0x02, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x11, // '..'..'&'..'..5. + 0x34, 0x36, 0x37, 0x36, 0x37, 0x3e, 0x02, 0x3b, 0x03, 0x16, 0x17, 0x16, 0x07, 0x16, 0x17, 0x16, // 46767>.;........ + 0x07, 0x16, 0x07, 0x14, 0x01, 0x00, 0x26, 0x1a, 0x1b, 0x25, 0x25, 0x1b, 0x1a, 0x26, 0xa0, 0x26, // ......&..%%..&.& + 0x1a, 0xfe, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x20, 0x1a, 0x26, 0x04, 0x69, 0x37, 0x01, 0x71, // ....&&.. .&.i7.q + 0x4e, 0xfe, 0xeb, 0x04, 0x08, 0x0e, 0x03, 0x12, 0x12, 0x14, 0x01, 0x09, 0x0f, 0x21, 0x2f, 0x49, // N............!/I + 0x2e, 0x1a, 0x13, 0x14, 0x1c, 0x0b, 0x07, 0x09, 0x09, 0x1a, 0x12, 0x21, 0x44, 0x31, 0x68, 0x18, // ...........!D1h. + 0x19, 0x24, 0x26, 0x1a, 0x23, 0x7b, 0x4d, 0x57, 0x9c, 0x42, 0x11, 0x4c, 0x24, 0x85, 0x40, 0x3a, // .$&.#{MW.B.L$.@: + 0x09, 0x27, 0x0f, 0x11, 0x11, 0x2e, 0x03, 0x03, 0xc0, 0x1a, 0x26, 0x26, 0x1a, 0x1b, 0x25, 0x25, // .'........&&..%% + 0xfd, 0xe5, 0x02, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0xfd, 0x80, 0x1a, 0x26, 0x26, 0xaf, 0x3d, 0x58, // .....&&....&&.=X + 0x4e, 0x72, 0x0e, 0x14, 0x18, 0x06, 0x25, 0x28, 0x4d, 0x26, 0x18, 0x1e, 0x3c, 0x28, 0x32, 0x1f, // Nr....%(M&..<(2. + 0x15, 0x13, 0x14, 0x3c, 0x2c, 0x27, 0x2a, 0x25, 0x3c, 0x12, 0x21, 0x57, 0x40, 0x72, 0x02, 0x02, // ...<,'*%<.!W@r.. + 0x25, 0x19, 0x02, 0x81, 0x1a, 0x25, 0x01, 0x01, 0x2b, 0x1a, 0x1b, 0x1f, 0x02, 0x4c, 0x45, 0x70, // %....%..+....LEp + 0x25, 0x39, 0x3d, 0x38, 0x3d, 0x4c, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // %9=8=L ......... + 0x05, 0x80, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x2b, 0x00, 0x3d, 0x00, 0x5c, 0x00, 0x64, // .........+.=...d + 0x00, 0x7f, 0x00, 0x8c, 0x00, 0x9e, 0x00, 0xb2, 0x00, 0xc2, 0x00, 0x00, 0x25, 0x35, 0x34, 0x23, // ............%54# + 0x22, 0x07, 0x15, 0x16, 0x33, 0x32, 0x37, 0x33, 0x35, 0x34, 0x22, 0x15, 0x25, 0x15, 0x23, 0x11, // "...327354".%.#. + 0x23, 0x11, 0x23, 0x35, 0x05, 0x11, 0x23, 0x35, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x33, // #.#5..#5.#"'&5.3 + 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x11, 0x05, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, // ....327......#"' + 0x15, 0x23, 0x11, 0x33, 0x15, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x15, 0x14, 0x07, 0x06, 0x07, // .#.3.632........ + 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x37, 0x36, 0x32, 0x17, 0x16, 0x1d, 0x01, 0x23, // .#"'&=.4762....# + 0x15, 0x14, 0x33, 0x32, 0x37, 0x34, 0x36, 0x34, 0x35, 0x01, 0x15, 0x14, 0x22, 0x3d, 0x01, 0x34, // ..3274645..."=.4 + 0x32, 0x01, 0x34, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x21, 0x20, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x15, // 2.4'..'&! ...... + 0x14, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x20, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x01, 0x13, 0x23, 0x07, // ...... 7>.76..#. + 0x27, 0x23, 0x1e, 0x01, 0x17, 0x16, 0x17, 0x15, 0x33, 0x25, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, // '#......3%54'&#" + 0x07, 0x06, 0x1d, 0x01, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x17, 0x33, 0x11, 0x23, 0x11, // .......3276.3.#. + 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x01, // .#"'&5.#....327. + 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, // ...#!"&5.463!2.. + 0x97, 0x1d, 0x11, 0x10, 0x10, 0x11, 0x1d, 0xb8, 0x42, 0x42, 0xfd, 0xc5, 0x50, 0x4a, 0x4e, 0x01, // ........BB..PJN. + 0xb1, 0x43, 0x27, 0x25, 0x21, 0x09, 0x06, 0x42, 0x01, 0x01, 0x0e, 0x14, 0x16, 0x01, 0x3f, 0x07, // .C'%!..B......?. + 0x0c, 0x29, 0x23, 0x21, 0x43, 0x43, 0x20, 0x24, 0x29, 0x0c, 0x07, 0xfb, 0x02, 0x03, 0x0c, 0x1b, // .)#!CC $)....... + 0x35, 0x34, 0x1d, 0x15, 0x14, 0x1d, 0x66, 0x1b, 0x15, 0x85, 0x22, 0x18, 0x06, 0x01, 0xfe, 0x81, // 54....f..."..... + 0x40, 0x40, 0x02, 0x15, 0x13, 0x0a, 0x42, 0x2b, 0x88, 0xfe, 0xec, 0xfe, 0xed, 0x88, 0x2c, 0x41, // @@....B+......,A + 0x0a, 0x14, 0x14, 0x0a, 0x41, 0x2b, 0x89, 0x02, 0x26, 0x89, 0x2b, 0x41, 0x0a, 0x14, 0xfd, 0x0d, // ....A+..&.+A.... + 0x5a, 0x4b, 0x33, 0x35, 0x4e, 0x08, 0x20, 0x07, 0x23, 0x0b, 0x4a, 0x01, 0x21, 0x15, 0x1d, 0x31, // ZK35N. .#.J.!..1 + 0x33, 0x1b, 0x15, 0x15, 0x1b, 0x33, 0x31, 0x1d, 0x15, 0xb5, 0x43, 0x43, 0x16, 0x14, 0x0f, 0x01, // 3....31...CC.... + 0x01, 0x43, 0x06, 0x0b, 0x20, 0x24, 0x29, 0x01, 0xf7, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // .C.. $)...w.@w.. + 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xe9, 0x9d, 0x32, 0x10, 0xe0, 0x10, 0xab, 0x22, 0x33, 0x33, 0xe8, // w..w...2...."33. + 0x46, 0xfe, 0x59, 0x01, 0xa7, 0x46, 0x7e, 0xfe, 0x91, 0x28, 0x2d, 0x1c, 0x10, 0x26, 0x01, 0x22, // F.Y..F~..(-..&." + 0xfe, 0xf2, 0x18, 0x02, 0x0f, 0x1f, 0x01, 0x18, 0x6f, 0x92, 0x34, 0x15, 0x2a, 0x29, 0x24, 0x01, // ........o.4.*)$. + 0xed, 0xa1, 0x28, 0x2a, 0x15, 0xb6, 0x09, 0x1d, 0x0e, 0x16, 0x12, 0x28, 0x26, 0x1b, 0x3b, 0x81, // ..(*.......(&.;. + 0x3b, 0x1b, 0x26, 0x26, 0x1c, 0x3a, 0x4c, 0x41, 0x33, 0x1a, 0x01, 0x0c, 0x15, 0x0b, 0x03, 0x38, // ;.&&.:LA3......8 + 0x9c, 0x33, 0x33, 0x9c, 0x34, 0xfd, 0x03, 0xb1, 0x53, 0x2c, 0x3b, 0x05, 0x0f, 0x0f, 0x05, 0x3b, // .33.4...S,;....; + 0x2c, 0x57, 0xad, 0xb0, 0x54, 0x2b, 0x3c, 0x05, 0x0f, 0x0f, 0x05, 0x3c, 0x2b, 0x54, 0x03, 0x3b, // ,W..T+<....<+T.; + 0x01, 0x28, 0xc3, 0xc3, 0x17, 0x5c, 0x17, 0x67, 0x37, 0xc9, 0x78, 0x82, 0x3a, 0x1d, 0x26, 0x26, // .(.....g7.x.:.&& + 0x1d, 0x3a, 0x82, 0x3a, 0x1d, 0x26, 0x26, 0x1b, 0x3c, 0x01, 0x72, 0xfe, 0xe5, 0x1f, 0x10, 0x02, // .:.:.&&.<.r..... + 0x18, 0x01, 0x10, 0xfe, 0xdb, 0x25, 0x12, 0x1b, 0x2d, 0x01, 0x08, 0xfc, 0x40, 0x77, 0xa9, 0xa9, // .....%..-...@w.. + 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x1b, 0xff, 0x00, 0x05, 0xe5, // w..w............ + 0x06, 0x00, 0x00, 0x09, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x2b, 0x00, 0x3d, 0x00, 0x5b, 0x00, 0x63, // .........+.=.[.c + 0x00, 0x7d, 0x00, 0x89, 0x00, 0x9b, 0x00, 0xaf, 0x00, 0x00, 0x01, 0x15, 0x14, 0x23, 0x22, 0x27, // .}...........#"' + 0x11, 0x36, 0x33, 0x32, 0x05, 0x15, 0x23, 0x35, 0x34, 0x32, 0x25, 0x33, 0x35, 0x21, 0x15, 0x33, // .632..#542%35!.3 + 0x11, 0x33, 0x21, 0x33, 0x11, 0x23, 0x11, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x11, 0x23, 0x11, // .3!3.#..#"'&5.#. + 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x25, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x35, 0x23, // ...327%54'&#".5# + 0x11, 0x33, 0x35, 0x16, 0x33, 0x32, 0x37, 0x36, 0x25, 0x35, 0x23, 0x14, 0x07, 0x06, 0x23, 0x22, // .35.3276%5#...#" + 0x3d, 0x01, 0x33, 0x35, 0x34, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x1d, 0x01, 0x14, 0x17, 0x16, // =.354'&#"....... + 0x33, 0x32, 0x37, 0x36, 0x37, 0x36, 0x01, 0x35, 0x34, 0x22, 0x1d, 0x01, 0x14, 0x32, 0x01, 0x14, // 327676.54"...2.. + 0x07, 0x0e, 0x01, 0x07, 0x06, 0x20, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x35, 0x34, 0x37, 0x3e, 0x01, // ..... '..'&547>. + 0x37, 0x36, 0x20, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x01, 0x33, 0x03, 0x11, 0x23, 0x11, 0x26, 0x27, // 76 ......3..#.&' + 0x26, 0x27, 0x33, 0x13, 0x05, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, // &'3......#"'&=.4 + 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x25, 0x11, 0x23, 0x35, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, // 7632..%.#5.#"'&5 + 0x11, 0x33, 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x11, 0x03, 0xcb, 0x27, 0x17, 0x16, 0x16, // .3....327...'... + 0x17, 0x27, 0x01, 0x52, 0x5a, 0x5a, 0xfc, 0x3a, 0x6b, 0xfe, 0xc8, 0x69, 0x64, 0x01, 0x20, 0x59, // .'.RZZ.:k..id. Y + 0x59, 0x1e, 0x1b, 0x12, 0x03, 0x01, 0x59, 0x08, 0x0c, 0x2e, 0x30, 0x36, 0x01, 0xad, 0x09, 0x11, // Y.....Y...06.... + 0x36, 0x32, 0x2b, 0x59, 0x59, 0x2d, 0x30, 0x36, 0x11, 0x09, 0x01, 0x52, 0x5b, 0x02, 0x07, 0x21, // 62+YY-06...R[..! + 0x2e, 0xb3, 0x1b, 0x27, 0x43, 0x44, 0x27, 0x1c, 0x1d, 0x27, 0x45, 0x48, 0x24, 0x12, 0x03, 0x02, // ...'CD'..'EH$... + 0xfd, 0xa0, 0x56, 0x56, 0x02, 0xcf, 0x1a, 0x0e, 0x58, 0x3a, 0xb8, 0xfd, 0x1a, 0xb8, 0x3a, 0x59, // ..VV....X:....:Y + 0x0d, 0x1a, 0x1a, 0x0e, 0x58, 0x3b, 0xb7, 0x02, 0xe6, 0xb8, 0x3a, 0x59, 0x0d, 0x1a, 0xfc, 0x1a, // ....X;....:Y.... + 0x66, 0x79, 0x64, 0x0e, 0x2f, 0x25, 0x1c, 0x6a, 0x47, 0x01, 0xb6, 0x1c, 0x25, 0x45, 0x43, 0x26, // fyd./%.jG...%EC& + 0x1c, 0x1c, 0x26, 0x43, 0x45, 0x25, 0x1c, 0x01, 0x4f, 0x5b, 0x35, 0x32, 0x2e, 0x0d, 0x08, 0x5b, // ..&CE%..O[52...[ + 0x01, 0x03, 0x12, 0x1b, 0x1e, 0x01, 0x24, 0xd3, 0x43, 0x16, 0x01, 0x2d, 0x16, 0x44, 0x2e, 0x2e, // ......$.C..-.D.. + 0x44, 0x96, 0x5e, 0x5e, 0xfd, 0xc7, 0x01, 0xee, 0xfe, 0x86, 0x2a, 0x15, 0x03, 0x20, 0x01, 0x6c, // D.^^......*.. .l + 0xfe, 0x79, 0x31, 0x18, 0x25, 0x3d, 0x5e, 0xc5, 0x49, 0x1a, 0x38, 0x36, 0xd9, 0xfd, 0x69, 0x30, // .y1.%=^.I.86..i0 + 0x37, 0x37, 0x1b, 0x53, 0x0d, 0x33, 0x0a, 0x24, 0x45, 0x57, 0x67, 0x4f, 0x25, 0x33, 0x33, 0x25, // 77.S.3.$EWgO%33% + 0x4f, 0xad, 0x4f, 0x25, 0x33, 0x35, 0x1b, 0x1b, 0x09, 0x03, 0xc2, 0xd2, 0x45, 0x45, 0xd2, 0x46, // O.O%35......EE.F + 0xfd, 0x57, 0xea, 0x74, 0x3b, 0x50, 0x06, 0x15, 0x15, 0x06, 0x50, 0x3b, 0x70, 0xee, 0xea, 0x74, // .W.t;P....P;p..t + 0x3b, 0x50, 0x07, 0x14, 0x14, 0x07, 0x50, 0x3b, 0x70, 0x04, 0x0e, 0xfe, 0x71, 0xfe, 0xf1, 0x01, // ;P....P;p...q... + 0x0f, 0x4a, 0x8a, 0x67, 0x54, 0xfe, 0xf9, 0x46, 0xaf, 0x51, 0x25, 0x33, 0x33, 0x26, 0x50, 0xaf, // .J.gT..F.Q%33&P. + 0x50, 0x25, 0x33, 0x33, 0x25, 0x52, 0xfe, 0x0d, 0x37, 0x3e, 0x25, 0x18, 0x33, 0x01, 0x8a, 0xfe, // P%33%R..7>%.3... + 0x91, 0x21, 0x02, 0x16, 0x2b, 0x01, 0x7d, 0x00, 0x00, 0x02, 0x00, 0x05, 0xff, 0x80, 0x05, 0x7b, // .!..+.}........{ + 0x05, 0xf6, 0x00, 0x13, 0x00, 0x27, 0x00, 0x00, 0x01, 0x06, 0x03, 0x06, 0x2b, 0x01, 0x22, 0x26, // .....'......+."& + 0x37, 0x13, 0x32, 0x27, 0x03, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x32, 0x17, 0x01, 0x16, 0x07, 0x01, // 7.2'.&76;.2..... + 0x15, 0x01, 0x16, 0x07, 0x06, 0x2b, 0x01, 0x22, 0x27, 0x01, 0x36, 0x01, 0x36, 0x3b, 0x01, 0x32, // .....+."'.6.6;.2 + 0x02, 0x55, 0x0a, 0xf7, 0x1b, 0x26, 0xef, 0x15, 0x14, 0x0a, 0xfd, 0x01, 0x01, 0xa1, 0x0c, 0x0b, // .U...&.......... + 0x09, 0x17, 0xef, 0x28, 0x1a, 0x03, 0xca, 0x0b, 0x0b, 0xfd, 0xf0, 0x01, 0x50, 0x0b, 0x0a, 0x0a, // ...(........P... + 0x16, 0xef, 0x2a, 0x18, 0xfe, 0xad, 0x12, 0x02, 0x01, 0x19, 0x27, 0xf1, 0x16, 0x03, 0x65, 0x12, // ..*.......'...e. + 0xfe, 0x4a, 0x2e, 0x22, 0x13, 0x01, 0xc0, 0x01, 0x01, 0x17, 0x16, 0x0f, 0x0f, 0x2d, 0x01, 0x64, // .J.".........-.d + 0x10, 0x15, 0xfc, 0x5a, 0x01, 0xfd, 0x99, 0x14, 0x11, 0x0f, 0x2d, 0x02, 0x6e, 0x20, 0x03, 0x8e, // ...Z......-.n .. + 0x2d, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x13, // -............... + 0x00, 0x27, 0x00, 0x37, 0x00, 0x00, 0x01, 0x34, 0x27, 0x26, 0x2b, 0x01, 0x22, 0x07, 0x06, 0x1f, // .'.7...4'&+."... + 0x01, 0x15, 0x03, 0x06, 0x17, 0x16, 0x3b, 0x01, 0x32, 0x37, 0x01, 0x26, 0x2b, 0x01, 0x22, 0x07, // ......;.27.&+.". + 0x01, 0x16, 0x01, 0x16, 0x3b, 0x01, 0x32, 0x37, 0x36, 0x27, 0x01, 0x35, 0x01, 0x36, 0x17, 0x11, // ....;.276'.5.6.. + 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xad, // ..#!"&5.463!2... + 0x7e, 0x15, 0x1f, 0xb8, 0x12, 0x08, 0x07, 0x08, 0x7d, 0xc4, 0x09, 0x09, 0x08, 0x10, 0xb9, 0x1f, // ~.......}....... + 0x13, 0x03, 0x37, 0x07, 0x11, 0xbb, 0x1e, 0x13, 0xfe, 0x65, 0x01, 0x01, 0x05, 0x14, 0x20, 0xb8, // ..7......e.... . + 0x12, 0x07, 0x08, 0x09, 0xfe, 0xfc, 0x01, 0x99, 0x08, 0xdb, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // ...........w.@w. + 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0x03, 0x01, 0xdd, 0x22, 0x0b, 0x0c, 0x11, 0xd8, 0x01, // .w..w....."..... + 0xfe, 0xa6, 0x0e, 0x0e, 0x0d, 0x24, 0x03, 0x51, 0x0c, 0x23, 0xfd, 0x27, 0x02, 0xfe, 0x21, 0x23, // .....$.Q.#.'..!# + 0x0c, 0x0d, 0x0f, 0x01, 0xdc, 0x01, 0x02, 0xd3, 0x10, 0x88, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // ...........@w..w + 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, // ..w............. + 0x05, 0x00, 0x00, 0x0f, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x34, 0x27, 0x01, 0x26, 0x07, 0x06, 0x15, // ...../...4'.&... + 0x11, 0x14, 0x17, 0x16, 0x33, 0x32, 0x37, 0x01, 0x24, 0x14, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, // ....327.$....... + 0x06, 0x20, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x02, 0x34, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, // . '..'..4>.7>.76 + 0x20, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x05, 0x00, 0x1e, 0xfe, 0x00, 0x1f, 0x22, 0x21, 0x21, // ............"!! + 0x10, 0x0f, 0x14, 0x0e, 0x02, 0x00, 0x02, 0x1e, 0x02, 0x0f, 0x0f, 0x10, 0x6a, 0x47, 0xde, 0xfc, // ............jG.. + 0x7e, 0xde, 0x47, 0x6b, 0x10, 0x0e, 0x0f, 0x02, 0x02, 0x0f, 0x0f, 0x10, 0x6a, 0x47, 0xde, 0x03, // ~.Gk........jG.. + 0x82, 0xde, 0x47, 0x6b, 0x10, 0x0e, 0x0f, 0x02, 0x5b, 0x4a, 0x11, 0x01, 0x40, 0x14, 0x12, 0x12, // ..Gk....[J..@... + 0x26, 0xfd, 0x80, 0x26, 0x12, 0x08, 0x0a, 0x01, 0x40, 0x96, 0xc0, 0x6c, 0xa5, 0x41, 0x49, 0x64, // &..&....@..l.AId + 0x08, 0x19, 0x19, 0x08, 0x64, 0x49, 0x41, 0xa5, 0x6c, 0xc0, 0x6c, 0xa5, 0x41, 0x49, 0x64, 0x08, // ....dIA.l.l.AId. + 0x19, 0x19, 0x08, 0x64, 0x49, 0x41, 0xa5, 0x00, 0x00, 0x05, 0x00, 0x40, 0xff, 0x80, 0x06, 0xc0, // ...dIA.....@.... + 0x05, 0x8a, 0x00, 0x03, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x00, 0x09, 0x04, // ................ + 0x15, 0x01, 0x15, 0x27, 0x07, 0x35, 0x01, 0x35, 0x17, 0x01, 0x35, 0x17, 0x37, 0x15, 0x09, 0x0c, // ...'.5.5..5.7... + 0x01, 0x92, 0x01, 0xee, 0xfe, 0xaa, 0xfe, 0x16, 0x05, 0x2c, 0xfe, 0x16, 0x01, 0x01, 0xfe, 0x17, // .........,...... + 0x93, 0x01, 0x56, 0x01, 0x01, 0x01, 0x57, 0xfd, 0x51, 0x01, 0x56, 0xfe, 0x12, 0xfe, 0xae, 0x05, // ..V...W.Q.V..... + 0x2e, 0x01, 0x52, 0xfe, 0x17, 0xfe, 0xa9, 0x01, 0x57, 0x01, 0xe9, 0xfe, 0xae, 0xfe, 0x12, 0x03, // ..R.....W....... + 0x3d, 0xfe, 0xcf, 0xfe, 0xe3, 0x01, 0x3f, 0xfe, 0xe4, 0x6c, 0xfe, 0xdb, 0x01, 0x01, 0x01, 0x01, // =.....?..l...... + 0x01, 0x25, 0x6c, 0x60, 0x01, 0x1c, 0x02, 0x01, 0x01, 0x02, 0xfe, 0xe4, 0x04, 0xd8, 0xfe, 0xe3, // .%l`............ + 0xfe, 0xd0, 0x01, 0x0e, 0xfe, 0xf2, 0xfe, 0xf1, 0xfe, 0xc1, 0x01, 0x1d, 0x03, 0x7e, 0xfe, 0xc1, // .............~.. + 0xfe, 0xf2, 0x01, 0x30, 0x00, 0x07, 0x00, 0x00, 0xff, 0x00, 0x05, 0x7e, 0x06, 0x00, 0x00, 0x03, // ...0.......~.... + 0x00, 0x0f, 0x00, 0x13, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x23, 0x00, 0x00, 0x25, 0x15, // ...........#..%. + 0x05, 0x35, 0x01, 0x11, 0x07, 0x15, 0x21, 0x27, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x0d, 0x01, // .5....!'#.3.!... + 0x07, 0x25, 0x13, 0x05, 0x07, 0x25, 0x13, 0x01, 0x07, 0x09, 0x02, 0x07, 0x01, 0x25, 0x13, 0x07, // .%...%.......%.. + 0x03, 0x03, 0xa0, 0xfd, 0x3d, 0x03, 0xb4, 0x01, 0xfb, 0x94, 0x23, 0x01, 0x79, 0x03, 0xa0, 0xfc, // ....=.....#.y... + 0xd8, 0x02, 0xc0, 0x0d, 0xfd, 0x3f, 0x52, 0x02, 0xab, 0x27, 0xfd, 0x55, 0xca, 0x02, 0x61, 0x4d, // .....?R..'.U..aM + 0xfd, 0x9f, 0x01, 0xb5, 0x01, 0x8e, 0x7c, 0xfe, 0x71, 0x02, 0x42, 0x79, 0x95, 0x79, 0x87, 0x97, // ......|.q.By.y.. + 0x01, 0x97, 0x01, 0x5b, 0xfd, 0x43, 0x23, 0x01, 0x01, 0x02, 0xe0, 0xfd, 0x96, 0x02, 0x6a, 0x58, // ...[.C#.......jX + 0x41, 0x96, 0x41, 0x01, 0xd2, 0xb7, 0x92, 0xb7, 0x01, 0xef, 0xfe, 0x98, 0x82, 0x01, 0x68, 0x01, // A.A...........h. + 0xcd, 0xfd, 0xb7, 0x55, 0x02, 0x48, 0xe9, 0xfd, 0x47, 0x1a, 0x02, 0xb9, 0x00, 0x04, 0x00, 0x00, // ...U.H..G....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x00, // .........../.?.. + 0x25, 0x11, 0x23, 0x16, 0x15, 0x14, 0x0e, 0x01, 0x23, 0x22, 0x00, 0x35, 0x34, 0x37, 0x23, 0x11, // %.#.....#".547#. + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x00, 0x34, 0x26, 0x23, 0x22, 0x06, 0x14, 0x16, 0x33, 0x32, // ..3!26.4&#"...32 + 0x01, 0x35, 0x34, 0x26, 0x2b, 0x01, 0x22, 0x06, 0x1d, 0x01, 0x14, 0x16, 0x3b, 0x01, 0x32, 0x36, // .54&+.".....;.26 + 0x37, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // 7...#!"&5.463!2. + 0x05, 0x52, 0x87, 0x14, 0x80, 0xdc, 0x82, 0xc5, 0xfe, 0xe8, 0x14, 0x8d, 0x23, 0x1a, 0x04, 0x2d, // .R..........#..- + 0x19, 0x24, 0xfe, 0xe4, 0xb5, 0x80, 0x7f, 0xb5, 0xb5, 0x7f, 0x80, 0x01, 0xd1, 0x28, 0x1d, 0xae, // .$...........(.. + 0x1d, 0x28, 0x28, 0x1d, 0xae, 0x1d, 0x28, 0xae, 0x74, 0x51, 0xfb, 0x8a, 0x51, 0x74, 0x74, 0x51, // .((...(.tQ..QttQ + 0x04, 0x76, 0x51, 0x74, 0x6e, 0x02, 0x88, 0x3f, 0x44, 0x7e, 0xd5, 0x7c, 0x01, 0x0f, 0xc0, 0x44, // .vQtn..?D~.|...D + 0x3f, 0xfd, 0x78, 0x1a, 0x23, 0x23, 0x01, 0xb3, 0xf8, 0xaf, 0xaf, 0xf8, 0xaf, 0x02, 0x93, 0xa5, // ?.x.##.......... + 0x1c, 0x29, 0x29, 0x1c, 0xa5, 0x1d, 0x28, 0x28, 0xed, 0xfb, 0x8a, 0x51, 0x74, 0x74, 0x51, 0x04, // .))...((...QttQ. + 0x76, 0x51, 0x74, 0x74, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // vQtt............ + 0x00, 0x17, 0x00, 0x1f, 0x00, 0x00, 0x01, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, // .......2.....#!" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x00, 0x34, 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x24, 0x34, // &5.463.4&"...2$4 + 0x26, 0x22, 0x06, 0x14, 0x16, 0x32, 0x04, 0xe0, 0x77, 0xa9, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // &"...2..w..w.@w. + 0xa9, 0x77, 0x01, 0x9a, 0x7c, 0xb0, 0x7c, 0x7c, 0xb0, 0x02, 0xb0, 0x7c, 0xb0, 0x7c, 0x7c, 0xb0, // .w..|.||...|.||. + 0x05, 0x80, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xfc, 0xa8, // ...w.@w..w..w... + 0xb0, 0x7c, 0x7c, 0xb0, 0x7c, 0x7c, 0xb0, 0x7c, 0x7c, 0xb0, 0x7c, 0x00, 0x00, 0x03, 0x00, 0x00, // .||.||.||.|..... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x02, 0x00, 0x09, 0x00, 0x15, 0x00, 0x00, 0x01, 0x13, // ................ + 0x21, 0x05, 0x33, 0x09, 0x01, 0x33, 0x37, 0x21, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // !.3..37!.... $.. + 0x12, 0x24, 0x20, 0x04, 0x03, 0x00, 0xc9, 0xfe, 0x6e, 0x02, 0x36, 0x5e, 0xfe, 0x35, 0xfe, 0x35, // .$ .....n.6^.5.5 + 0x5e, 0x68, 0x02, 0x0a, 0x01, 0xfb, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ^h........^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0x03, 0x92, 0xfe, 0xce, 0xe0, 0x02, 0xb3, 0xfd, 0x4d, 0xa0, 0x01, // a...a........M.. + 0x31, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, // 1.^.....a...a... + 0x00, 0x05, 0x00, 0x00, 0xff, 0x50, 0x05, 0x81, 0x05, 0xa3, 0x00, 0x0a, 0x00, 0x16, 0x00, 0x2a, // .....P.........* + 0x00, 0x43, 0x00, 0x67, 0x00, 0x00, 0x01, 0x16, 0x06, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x36, 0x1e, // .C.g.....'..676. + 0x01, 0x17, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x37, 0x3e, 0x01, 0x13, 0x2e, 0x02, // ..........7>.... + 0x27, 0x24, 0x05, 0x0e, 0x02, 0x07, 0x1e, 0x02, 0x17, 0x16, 0x37, 0x3e, 0x02, 0x13, 0x0e, 0x03, // '$........7>.... + 0x07, 0x0e, 0x01, 0x26, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x3f, 0x01, 0x16, 0x20, 0x37, 0x1e, // ...&'..'&'?.. 7. + 0x01, 0x06, 0x13, 0x06, 0x03, 0x0e, 0x02, 0x07, 0x06, 0x25, 0x26, 0x27, 0x2e, 0x04, 0x27, 0x2e, // .........%&'..'. + 0x03, 0x27, 0x3e, 0x04, 0x37, 0x36, 0x37, 0x24, 0x05, 0x16, 0x17, 0x1e, 0x01, 0x03, 0x2f, 0x08, // .'>.767$....../. + 0x75, 0x35, 0x27, 0x1d, 0x1c, 0x26, 0x24, 0x49, 0x37, 0x6f, 0x0e, 0xc6, 0x62, 0x3f, 0x4b, 0x03, // u5'..&$I7o..b?K. + 0x04, 0x93, 0x5c, 0x5b, 0x7a, 0xe4, 0x14, 0x48, 0x2c, 0x31, 0xfe, 0xdd, 0xfe, 0xed, 0x2b, 0x2e, // ...[z..H,1....+. + 0x40, 0x12, 0x1e, 0x5c, 0x37, 0x3c, 0xe4, 0xdc, 0x3f, 0x35, 0x5c, 0x56, 0x08, 0x0f, 0x0d, 0x2c, // @...7<..?5.V..., + 0x24, 0x56, 0xcf, 0xc5, 0x67, 0x2e, 0x47, 0x52, 0x40, 0x14, 0x19, 0x20, 0x06, 0x12, 0xdf, 0x02, // $V..g.GR@.. .... + 0x37, 0xe0, 0x15, 0x06, 0x10, 0xb5, 0x1a, 0x55, 0x05, 0x2c, 0x2b, 0x21, 0xfc, 0xfe, 0x9a, 0xf8, // 7......U.,+!.... + 0x92, 0x0f, 0x15, 0x0d, 0x05, 0x07, 0x02, 0x09, 0x23, 0x15, 0x1a, 0x09, 0x03, 0x1d, 0x22, 0x38, // ........#....."8 + 0x24, 0x1e, 0x7d, 0xbc, 0x01, 0x7b, 0x01, 0x29, 0x9b, 0x3c, 0x10, 0x01, 0x02, 0xa5, 0x3f, 0x4c, // $.}..{.).<....?L + 0x20, 0x11, 0x52, 0x52, 0x11, 0x12, 0x0c, 0x3b, 0x11, 0x6b, 0x72, 0x2c, 0x1c, 0x79, 0x45, 0x5b, // .RR...;.kr,.yE[ + 0x80, 0x08, 0x08, 0x98, 0x02, 0x7a, 0x1b, 0x23, 0x09, 0x08, 0x2f, 0x31, 0x07, 0x0a, 0x22, 0x1a, // .....z.#../1..". + 0x1c, 0x23, 0x09, 0x07, 0x1d, 0x1c, 0x08, 0x08, 0x23, 0xfc, 0x12, 0x1a, 0x65, 0x43, 0x49, 0x14, // .#......#...eCI. + 0x30, 0x2f, 0x03, 0x11, 0x08, 0x14, 0x22, 0x35, 0x23, 0x60, 0xc4, 0x10, 0x09, 0x94, 0x94, 0x06, // 0/...."5#`...... + 0x22, 0x38, 0x03, 0xb8, 0xa7, 0xfe, 0x18, 0x1e, 0x34, 0x1c, 0x11, 0x7e, 0x26, 0x1b, 0x70, 0x0c, // "8......4..~&.p. + 0x1d, 0x29, 0x1b, 0x34, 0x09, 0x32, 0xc8, 0x7b, 0xac, 0x48, 0x1a, 0x2d, 0x1e, 0x1e, 0x0f, 0x0b, // .).4.2.{.H.-.... + 0x2e, 0x12, 0x25, 0x57, 0x2e, 0x4c, 0x14, 0x3e, 0x00, 0x06, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // ..%W.L.>........ + 0x05, 0x80, 0x00, 0x08, 0x00, 0x13, 0x00, 0x27, 0x00, 0x3a, 0x00, 0x59, 0x00, 0x69, 0x00, 0x00, // .......'.:.Y.i.. + 0x01, 0x34, 0x26, 0x07, 0x06, 0x16, 0x17, 0x16, 0x36, 0x37, 0x16, 0x0e, 0x01, 0x26, 0x27, 0x26, // .4&.....67...&'& + 0x36, 0x37, 0x36, 0x16, 0x13, 0x0e, 0x02, 0x07, 0x06, 0x27, 0x2e, 0x02, 0x27, 0x3e, 0x02, 0x37, // 676......'..'>.7 + 0x36, 0x17, 0x1e, 0x02, 0x13, 0x34, 0x36, 0x26, 0x27, 0x06, 0x20, 0x27, 0x0f, 0x01, 0x16, 0x17, // 6....46&'. '.... + 0x16, 0x17, 0x16, 0x37, 0x3e, 0x02, 0x13, 0x36, 0x27, 0x26, 0x27, 0x26, 0x05, 0x06, 0x07, 0x0e, // ...7>..6'&'&.... + 0x02, 0x07, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x17, 0x04, 0x37, 0x3e, 0x02, 0x37, 0x12, // ...........7>.7. + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x03, 0x50, 0x52, 0x24, 0x2b, 0x01, 0x2b, 0x27, 0x54, 0x4a, 0x08, 0x58, 0x84, 0x6a, 0x03, 0x02, // .PR$+.+'TJ.X.j.. + 0x37, 0x2d, 0x46, 0x8f, 0xb6, 0x14, 0x43, 0x27, 0x2c, 0x9b, 0xa9, 0x2c, 0x26, 0x43, 0x15, 0x0d, // 7-F...C',..,&C.. + 0x2e, 0x22, 0x1e, 0xc6, 0xd2, 0x21, 0x24, 0x32, 0x38, 0x0b, 0x05, 0x0f, 0xa1, 0xfe, 0x68, 0xa2, // ."...!$28.....h. + 0x0c, 0x05, 0x1a, 0x0f, 0x2f, 0x9d, 0xf9, 0xb3, 0x22, 0x1e, 0x0f, 0x87, 0x09, 0x11, 0x2b, 0x70, // ..../...".....+p + 0xd8, 0xfe, 0xf1, 0x84, 0x5e, 0x26, 0x2b, 0x33, 0x04, 0x08, 0x16, 0x24, 0x06, 0x01, 0x08, 0x06, // ....^&+3...$.... + 0x12, 0x0d, 0x69, 0xb3, 0x01, 0x03, 0xb5, 0x18, 0x1f, 0x1f, 0x04, 0x30, 0x01, 0x28, 0xa9, 0x77, // ..i........0.(.w + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x02, 0x9a, 0x2b, 0x2e, 0x16, 0x14, // .@w..w..w...+... + 0x69, 0x12, 0x17, 0x36, 0x3d, 0x42, 0x6e, 0x0c, 0x5c, 0x43, 0x31, 0x58, 0x14, 0x1f, 0x52, 0x01, // i..6=Bn..C1X..R. + 0x3a, 0x15, 0x1a, 0x06, 0x05, 0x14, 0x14, 0x06, 0x07, 0x19, 0x14, 0x13, 0x18, 0x07, 0x05, 0x23, // :..............# + 0x22, 0x05, 0x07, 0x19, 0xfd, 0x03, 0x07, 0x27, 0x19, 0x04, 0x6a, 0x6a, 0x06, 0x0c, 0x9a, 0x38, // "......'..jj...8 + 0x51, 0x1b, 0x2e, 0x63, 0x13, 0x41, 0x6a, 0x02, 0xc7, 0x35, 0x16, 0x37, 0x21, 0x3f, 0x1b, 0x0c, // Q..c.Aj..5.7!?.. + 0x22, 0x0f, 0x14, 0x30, 0x1e, 0x44, 0x8c, 0xca, 0x24, 0x05, 0x34, 0x14, 0x22, 0x0b, 0x50, 0x14, // "..0.D..$.4.".P. + 0x1c, 0x5b, 0x0d, 0x14, 0x26, 0x15, 0x01, 0x0b, 0x01, 0x32, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, // .[..&....2.@w..w + 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4e, 0xff, 0x80, 0x04, 0x00, // ..w........N.... + 0x05, 0x80, 0x00, 0x23, 0x00, 0x00, 0x01, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x14, 0x17, 0x16, // ...#...3.!.!.... + 0x17, 0x16, 0x33, 0x32, 0x37, 0x15, 0x06, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x27, // ..327....#"'&'&' + 0x26, 0x35, 0x11, 0x23, 0x35, 0x36, 0x37, 0x36, 0x37, 0x36, 0x01, 0x86, 0xdb, 0x01, 0x6c, 0xfe, // &5.#567676....l. + 0x94, 0x0e, 0x0d, 0x27, 0x32, 0x43, 0x75, 0x73, 0x66, 0x4c, 0x4d, 0x60, 0x69, 0x51, 0x4e, 0x3c, // ...'2CusfLM`iQN< + 0x3a, 0x15, 0x16, 0xaa, 0x5b, 0x40, 0x40, 0x27, 0x27, 0x05, 0x80, 0xfe, 0x7c, 0xf1, 0xfe, 0x76, // :...[@@''...|..v + 0x88, 0x24, 0x25, 0x17, 0x1f, 0x4c, 0xf2, 0x30, 0x11, 0x13, 0x1b, 0x19, 0x32, 0x33, 0x36, 0x36, // .$%..L.0....2366 + 0x6b, 0x02, 0x1b, 0xd9, 0x1e, 0x36, 0x37, 0x4d, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // k....67MN....... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x23, 0x00, 0x33, 0x00, 0x00, 0x25, 0x35, 0x06, 0x23, // .......#.3..%5.# + 0x22, 0x27, 0x26, 0x27, 0x26, 0x35, 0x11, 0x21, 0x35, 0x21, 0x11, 0x23, 0x06, 0x07, 0x06, 0x07, // "'&'&5.!5!.#.... + 0x06, 0x07, 0x15, 0x33, 0x11, 0x14, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, // ...3........3276 + 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, // ....#!"&5.463!2. + 0x04, 0x63, 0x58, 0x56, 0x33, 0x25, 0x1d, 0x0a, 0x0b, 0x01, 0x12, 0xfe, 0xee, 0xa4, 0x0b, 0x1d, // .cXV3%.......... + 0x1d, 0x31, 0x30, 0x44, 0x7f, 0x11, 0x11, 0x2a, 0x2b, 0x3d, 0x3e, 0x4e, 0x43, 0x3e, 0x39, 0x01, // .10D...*+=>NC>9. + 0xea, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x7f, 0xb5, 0x38, // ..w.@w..w..w...8 + 0x17, 0x11, 0x1c, 0x1e, 0x63, 0x01, 0x27, 0xb5, 0x01, 0x23, 0x5a, 0x39, 0x39, 0x2a, 0x28, 0x17, // ....c.'..#Z99*(. + 0xa3, 0xfe, 0x6c, 0x4e, 0x2b, 0x2a, 0x24, 0x25, 0x14, 0x14, 0x0e, 0x0d, 0x04, 0x05, 0xfc, 0x40, // ..lN+*$%.......@ + 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, // w..w..w......... + 0xff, 0x40, 0x02, 0xfd, 0x06, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x16, 0x07, 0x01, 0x06, 0x23, // .@.............# + 0x22, 0x27, 0x01, 0x26, 0x37, 0x36, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x15, // "'.&76;..46;.2.. + 0x11, 0x33, 0x02, 0xf5, 0x10, 0x0d, 0xfe, 0xa2, 0x0a, 0x0d, 0x0e, 0x0a, 0xfe, 0x9d, 0x0d, 0x08, // .3.............. + 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, 0xe0, 0x01, 0x00, 0x26, 0x10, 0xfe, 0x80, 0x0a, // ...........&.... + 0x0a, 0x01, 0x80, 0x10, 0x13, 0x13, 0x04, 0xe0, 0x0e, 0x12, 0x12, 0x0e, 0xfb, 0x20, 0x00, 0x00, // ............. .. + 0x00, 0x01, 0x00, 0x03, 0xff, 0x00, 0x02, 0xfd, 0x05, 0xc0, 0x00, 0x17, 0x00, 0x00, 0x01, 0x06, // ................ + 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, 0x11, 0x23, 0x22, 0x26, 0x37, 0x01, // +....+."&5.#"&7. + 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x02, 0xfd, 0x09, 0x14, 0xe0, 0x12, 0x0e, 0xc0, 0x0e, 0x12, // 632............. + 0xe0, 0x15, 0x10, 0x0d, 0x01, 0x5e, 0x0a, 0x0d, 0x0e, 0x0a, 0x01, 0x63, 0x0d, 0x04, 0x13, 0x13, // .....^.....c.... + 0xfb, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xe0, 0x26, 0x10, 0x01, 0x80, 0x0a, 0x0a, 0xfe, 0x80, // . ......&....... + 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x40, 0x01, 0x03, 0x07, 0x00, 0x03, 0xfd, 0x00, 0x17, // .......@........ + 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x27, 0x01, 0x26, 0x35, 0x34, // ......#!...'.&54 + 0x37, 0x01, 0x36, 0x17, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x07, 0x00, 0x12, 0x0e, 0xfb, 0x20, // 7.6....!2...... + 0x26, 0x10, 0xfe, 0x80, 0x0a, 0x0a, 0x01, 0x80, 0x10, 0x13, 0x13, 0x04, 0xe0, 0x0e, 0x12, 0x02, // &............... + 0xe0, 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, 0x01, 0x5e, 0x0a, 0x0d, 0x0e, 0x0a, 0x01, 0x62, // .........^.....b + 0x0e, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x06, 0xc0, // ................ + 0x03, 0xfd, 0x00, 0x17, 0x00, 0x00, 0x01, 0x14, 0x07, 0x01, 0x06, 0x27, 0x26, 0x3d, 0x01, 0x21, // ...........'&=.! + 0x22, 0x26, 0x3d, 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x17, 0x01, 0x16, 0x06, 0xc0, // "&=.463!546..... + 0x0a, 0xfe, 0x80, 0x10, 0x13, 0x13, 0xfb, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x04, 0xe0, 0x26, 0x10, // ....... ......&. + 0x01, 0x80, 0x0a, 0x02, 0x83, 0x0e, 0x0a, 0xfe, 0x9e, 0x0e, 0x08, 0x09, 0x14, 0xe0, 0x12, 0x0e, // ................ + 0xc0, 0x0e, 0x12, 0xe0, 0x15, 0x10, 0x0d, 0xfe, 0xa2, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ................ + 0xff, 0x80, 0x05, 0x71, 0x06, 0x00, 0x00, 0x26, 0x00, 0x38, 0x00, 0x00, 0x01, 0x06, 0x07, 0x06, // ...q...&.8...... + 0x23, 0x22, 0x27, 0x26, 0x23, 0x22, 0x07, 0x06, 0x23, 0x22, 0x03, 0x02, 0x35, 0x34, 0x37, 0x36, // #"'&#"..#"..5476 + 0x33, 0x32, 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x33, 0x32, 0x17, 0x16, 0x17, 0x06, 0x07, 0x06, // 32..327632...... + 0x15, 0x14, 0x16, 0x01, 0x14, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x36, 0x37, 0x36, 0x37, // ............6767 + 0x1e, 0x01, 0x17, 0x14, 0x16, 0x05, 0x71, 0x27, 0x54, 0x81, 0x80, 0x31, 0x5b, 0x56, 0x41, 0x3d, // ......q'T..1[VA= + 0x51, 0x51, 0x33, 0x98, 0x95, 0x93, 0x71, 0x70, 0xac, 0x48, 0x69, 0x68, 0x22, 0x2d, 0x62, 0x66, // QQ3...qp.Hih"-bf + 0x47, 0x77, 0x5e, 0x34, 0x34, 0x4f, 0x23, 0x41, 0x8a, 0xfe, 0xe1, 0x1d, 0x1e, 0x3f, 0x36, 0x36, // Gw^44O#A.....?66 + 0x25, 0x43, 0x03, 0x4b, 0x4a, 0xb0, 0x01, 0x03, 0x01, 0x01, 0x01, 0x41, 0x7d, 0x7d, 0xc4, 0x20, // %C.KJ......A}}. + 0x20, 0x21, 0x22, 0x01, 0x03, 0x01, 0x05, 0xf2, 0xe4, 0x92, 0x90, 0x1e, 0x1e, 0x22, 0x22, 0x41, // !"..........""A + 0x24, 0x40, 0x43, 0x33, 0x5e, 0x71, 0x7c, 0xc6, 0x04, 0x7a, 0x3d, 0x4b, 0x4b, 0x3f, 0x36, 0x12, // $@C3^q|..z=KK?6. + 0x0b, 0x06, 0x95, 0x6c, 0x6b, 0x29, 0x03, 0x10, 0x03, 0x04, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, // ...lk).......... + 0xff, 0x00, 0x06, 0x80, 0x05, 0x80, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x00, // ................ + 0x01, 0x11, 0x25, 0x11, 0x01, 0x11, 0x21, 0x11, 0x01, 0x11, 0x25, 0x11, 0x01, 0x11, 0x21, 0x11, // ..%...!...%...!. + 0x02, 0xaa, 0xfd, 0x56, 0x02, 0xaa, 0xfd, 0x56, 0x06, 0x80, 0xfc, 0x75, 0x03, 0x8b, 0xfc, 0x75, // ...V...V...u...u + 0x02, 0x12, 0xfd, 0x75, 0x5e, 0x02, 0x2d, 0x02, 0xe7, 0xfd, 0x6d, 0x02, 0x35, 0xfd, 0x77, 0xfc, // ...u^.-...m.5.w. + 0xee, 0x7d, 0x02, 0x95, 0x03, 0x6e, 0xfc, 0xe6, 0x02, 0x9d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, // .}...n.......... + 0xff, 0x00, 0x05, 0x80, 0x05, 0x7e, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1c, 0x00, 0x37, 0x00, 0x4d, // .....~.......7.M + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x32, 0x36, 0x34, 0x26, 0x22, 0x06, 0x14, 0x04, 0x32, 0x36, 0x34, // .[...264&"...264 + 0x26, 0x22, 0x06, 0x14, 0x05, 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x34, // &"...2....."&5.4 + 0x36, 0x05, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x22, 0x26, 0x3d, 0x01, 0x23, 0x15, // 6....+...."&=.#. + 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x27, 0x23, 0x22, 0x26, 0x35, 0x11, 0x01, 0x1e, 0x01, 0x15, // ..#"&5'#"&5..... + 0x21, 0x34, 0x36, 0x37, 0x27, 0x26, 0x37, 0x36, 0x1f, 0x01, 0x36, 0x32, 0x17, 0x37, 0x36, 0x17, // !467'&76..62.76. + 0x16, 0x07, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, // ......#"&5.4632. + 0x01, 0xdd, 0x20, 0x17, 0x17, 0x20, 0x16, 0x01, 0xbc, 0x20, 0x16, 0x16, 0x20, 0x17, 0xfc, 0xfb, // .. .. ... .. ... + 0x2a, 0x3c, 0x3b, 0x56, 0x3c, 0x3c, 0x04, 0x4f, 0x40, 0x2d, 0x4b, 0x3c, 0x56, 0x3c, 0x8a, 0x3c, // *<;V<<.O@-K.<.&.4'>.&4.. + 0x27, 0x2e, 0x01, 0x27, 0x16, 0x17, 0x16, 0x07, 0x06, 0x07, 0x06, 0x2e, 0x01, 0x27, 0x2e, 0x04, // '..'.........'.. + 0x27, 0x2e, 0x03, 0x27, 0x26, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x36, // '..'&6&'..'..676 + 0x16, 0x07, 0x06, 0x16, 0x37, 0x36, 0x34, 0x35, 0x2e, 0x03, 0x27, 0x06, 0x17, 0x14, 0x23, 0x2e, // ....7645..'...#. + 0x01, 0x06, 0x27, 0x36, 0x26, 0x27, 0x26, 0x06, 0x07, 0x06, 0x1e, 0x01, 0x37, 0x36, 0x37, 0x36, // ..'6&'&.....7676 + 0x07, 0x22, 0x26, 0x27, 0x26, 0x36, 0x17, 0x32, 0x16, 0x06, 0x07, 0x06, 0x07, 0x0e, 0x01, 0x07, // ."&'&6.2........ + 0x0e, 0x01, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x37, 0x3e, 0x03, 0x37, 0x36, 0x17, 0x1e, 0x01, 0x06, // .......7>.76.... + 0x07, 0x0e, 0x01, 0x07, 0x06, 0x07, 0x06, 0x27, 0x26, 0x17, 0x16, 0x17, 0x16, 0x37, 0x3e, 0x05, // .......'&....7>. + 0x16, 0x17, 0x14, 0x0e, 0x05, 0x07, 0x0e, 0x02, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x15, 0x14, // ........'&'&.... + 0x0e, 0x02, 0x17, 0x0e, 0x01, 0x07, 0x06, 0x16, 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, 0x37, 0x36, // ..........'&'&76 + 0x0f, 0x01, 0x06, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x06, 0x07, 0x1e, 0x02, // ................ + 0x15, 0x36, 0x27, 0x2e, 0x02, 0x37, 0x3e, 0x01, 0x17, 0x16, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, // .6'..7>...7676.. + 0x07, 0x06, 0x07, 0x06, 0x16, 0x17, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x36, 0x37, 0x36, 0x33, 0x3e, // ......>.76&6763> + 0x01, 0x16, 0x01, 0x36, 0x26, 0x27, 0x26, 0x15, 0x16, 0x17, 0x32, 0x07, 0x06, 0x33, 0x32, 0x05, // ...6&'&...2..32. + 0x2e, 0x02, 0x27, 0x2e, 0x04, 0x07, 0x06, 0x16, 0x17, 0x16, 0x36, 0x27, 0x34, 0x2e, 0x01, 0x07, // ..'.......6'4... + 0x06, 0x17, 0x16, 0x17, 0x16, 0x17, 0x14, 0x3f, 0x01, 0x34, 0x2e, 0x01, 0x27, 0x26, 0x23, 0x0e, // .......?.4..'&#. + 0x01, 0x16, 0x07, 0x0e, 0x02, 0x17, 0x16, 0x3e, 0x01, 0x37, 0x36, 0x32, 0x36, 0x01, 0x1e, 0x02, // .......>.7626... + 0x0e, 0x05, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x03, 0x27, 0x26, 0x23, 0x22, 0x06, // ........'..'&#". + 0x07, 0x0e, 0x03, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x04, 0x27, 0x26, 0x36, 0x37, 0x36, 0x2e, 0x01, // ...'..'..'&676.. + 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x35, 0x16, 0x07, 0x06, 0x27, 0x26, 0x07, 0x06, 0x17, // 67>.7>.5...'&... + 0x1e, 0x03, 0x07, 0x14, 0x06, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x37, 0x3e, 0x02, // .............7>. + 0x2e, 0x01, 0x27, 0x26, 0x27, 0x26, 0x07, 0x06, 0x27, 0x26, 0x37, 0x3e, 0x02, 0x37, 0x3e, 0x03, // ..'&'&..'&7>.7>. + 0x37, 0x36, 0x37, 0x26, 0x27, 0x26, 0x36, 0x37, 0x36, 0x33, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x07, // 767&'&67636..... + 0x06, 0x17, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x27, 0x2e, 0x04, // .............'.. + 0x27, 0x26, 0x0e, 0x01, 0x17, 0x16, 0x07, 0x06, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, // '&.......67>.7>. + 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x36, 0x37, 0x1e, 0x05, 0x02, 0x97, 0x0b, 0x09, 0x04, 0x05, 0x13, // ..'..67......... + 0x05, 0x5c, 0x04, 0x0f, 0x0a, 0x18, 0x08, 0x03, 0xfe, 0x9b, 0x04, 0x04, 0x05, 0x03, 0x03, 0x07, // ................ + 0x07, 0x06, 0x04, 0x11, 0x04, 0x01, 0x02, 0x02, 0x01, 0x02, 0x03, 0x55, 0x37, 0x04, 0x07, 0x03, // ...........U7... + 0x03, 0x02, 0x07, 0x01, 0x09, 0x01, 0x0a, 0x4a, 0x23, 0x18, 0x21, 0x57, 0x21, 0x0b, 0x27, 0x1f, // .......J#.!W!.'. + 0x0f, 0x01, 0x0b, 0x09, 0x15, 0x12, 0x0d, 0x0d, 0x01, 0x0e, 0x22, 0x19, 0x16, 0x04, 0x04, 0x14, // .........."..... + 0x0b, 0x27, 0x0f, 0x3b, 0x06, 0x08, 0x06, 0x16, 0x19, 0x25, 0x1c, 0x0a, 0x0b, 0x12, 0x15, 0x0d, // .'.;.....%...... + 0x05, 0x11, 0x19, 0x16, 0x10, 0x6b, 0x12, 0x01, 0x09, 0x29, 0x19, 0x03, 0x01, 0x22, 0x1c, 0x1b, // .....k...)...".. + 0x1d, 0x02, 0x01, 0x09, 0x11, 0x07, 0x0a, 0x06, 0x04, 0x0b, 0x07, 0x11, 0x01, 0x01, 0x14, 0x18, // ................ + 0x11, 0x14, 0x01, 0x01, 0x16, 0x09, 0x08, 0x27, 0x01, 0x0d, 0x05, 0x0a, 0x0e, 0x16, 0x0a, 0x1b, // .......'........ + 0x16, 0x2f, 0x37, 0x02, 0x2a, 0x1b, 0x20, 0x05, 0x09, 0x0b, 0x05, 0x03, 0x09, 0x0c, 0x14, 0x49, // ./7.*. ........I + 0x09, 0x2c, 0x1a, 0x19, 0x36, 0x0a, 0x01, 0x01, 0x10, 0x19, 0x2a, 0x11, 0x26, 0x22, 0x21, 0x1b, // .,..6.....*.&"!. + 0x16, 0x0d, 0x02, 0x02, 0x06, 0x06, 0x0b, 0x07, 0x0d, 0x03, 0x1c, 0x4f, 0x36, 0x16, 0x15, 0x2a, // ...........O6..* + 0x16, 0x03, 0x01, 0x1e, 0x1d, 0x0d, 0x12, 0x17, 0x4f, 0x08, 0x02, 0x01, 0x06, 0x08, 0x15, 0x20, // ........O...... + 0x04, 0x02, 0x06, 0x04, 0x05, 0x04, 0x24, 0x2e, 0x05, 0x28, 0x04, 0x14, 0xa8, 0x09, 0x10, 0x03, // ......$..(...... + 0x1f, 0x1e, 0x08, 0x2a, 0x0e, 0x2e, 0x27, 0x04, 0x0d, 0x06, 0x01, 0x03, 0x14, 0x0a, 0x2e, 0x78, // ...*..'........x + 0x85, 0x2c, 0x17, 0x0b, 0x0c, 0x02, 0x01, 0x16, 0x09, 0x06, 0x15, 0x03, 0x17, 0x02, 0x02, 0x11, // .,.............. + 0x02, 0x16, 0x0f, 0x24, 0x01, 0x43, 0x4e, 0xfd, 0xa1, 0x03, 0x0b, 0x06, 0x09, 0x02, 0x03, 0x0a, // ...$.CN......... + 0x03, 0x03, 0x0b, 0x03, 0x01, 0xa3, 0x02, 0x09, 0x11, 0x06, 0x05, 0x09, 0x05, 0x06, 0x02, 0x03, // ................ + 0x0e, 0x2a, 0x12, 0x09, 0x0b, 0xb4, 0x0a, 0x0c, 0x03, 0x0e, 0x07, 0x02, 0x02, 0x0e, 0x04, 0x08, // .*.............. + 0x38, 0x05, 0x0d, 0x03, 0x0f, 0x09, 0x09, 0x05, 0x03, 0x02, 0x01, 0x0a, 0x02, 0x04, 0x04, 0x08, // 8............... + 0x0e, 0x08, 0x01, 0x10, 0x0e, 0x02, 0x37, 0x14, 0x16, 0x02, 0x07, 0x18, 0x17, 0x25, 0x1a, 0x26, // ......7......%.& + 0x08, 0x26, 0x5f, 0x1c, 0x11, 0x66, 0x26, 0x12, 0x17, 0x0a, 0x22, 0x1e, 0x2c, 0x56, 0x13, 0x4c, // .&_..f&...".,V.L + 0x14, 0x2c, 0x47, 0x24, 0x33, 0x1c, 0x1d, 0xa4, 0x40, 0x13, 0x40, 0x24, 0x2b, 0x18, 0x05, 0x0a, // .,G$3...@.@$+... + 0x22, 0x01, 0x01, 0x0a, 0x0a, 0x01, 0x0a, 0x0e, 0x56, 0x11, 0x1e, 0x18, 0x15, 0x35, 0x20, 0x33, // ".......V....5 3 + 0x22, 0x09, 0x0d, 0x12, 0x02, 0x0c, 0x05, 0x04, 0x01, 0x22, 0x03, 0x03, 0x22, 0x14, 0x81, 0x23, // "........".."..# + 0x18, 0x64, 0x41, 0x17, 0x2b, 0x2b, 0x03, 0x12, 0x14, 0x0a, 0x79, 0x30, 0x44, 0x2d, 0x0b, 0x04, // .dA.++....y0D-.. + 0x03, 0x01, 0x01, 0x12, 0x1e, 0x07, 0x08, 0x25, 0x16, 0x26, 0x14, 0x6e, 0x0e, 0x0c, 0x04, 0x02, // .......%.&.n.... + 0x34, 0x50, 0x27, 0x41, 0x35, 0x6a, 0x24, 0x39, 0x45, 0x05, 0x05, 0x23, 0x22, 0x63, 0x37, 0x59, // 4P'A5j$9E..#"c7Y + 0x0f, 0x08, 0x06, 0x12, 0x0b, 0x0a, 0x1b, 0x1b, 0x36, 0x22, 0x12, 0x1b, 0x12, 0x09, 0x0e, 0x02, // ........6"...... + 0x16, 0x26, 0x12, 0x10, 0x14, 0x13, 0x0a, 0x38, 0x5a, 0x28, 0x3b, 0x3d, 0x49, 0x35, 0x30, 0x0b, // .&.....8Z(;=I50. + 0x27, 0x20, 0x21, 0x21, 0x03, 0x0e, 0x01, 0x0e, 0x0f, 0x1a, 0x10, 0x1b, 0x04, 0x65, 0x01, 0x13, // ' !!.........e.. + 0x01, 0x06, 0x0c, 0x03, 0x0e, 0x01, 0x0f, 0x03, 0x0b, 0x0d, 0x06, 0xfe, 0x52, 0x01, 0x08, 0x11, // ............R... + 0x05, 0x05, 0x08, 0x0a, 0x02, 0x01, 0x10, 0x0a, 0x03, 0x08, 0x04, 0x05, 0x03, 0x03, 0x02, 0xfe, // ................ + 0x9a, 0x12, 0x18, 0x0f, 0x19, 0x1b, 0x10, 0x1d, 0x0a, 0x22, 0x07, 0x2b, 0x05, 0x30, 0x6e, 0x14, // .........".+.0n. + 0x14, 0x3f, 0xa2, 0x74, 0x28, 0x02, 0x04, 0x2d, 0x7a, 0x2e, 0x27, 0x3c, 0x1f, 0x12, 0x0c, 0x01, // .?.t(..-z.'<.... + 0x3e, 0x52, 0x1e, 0x24, 0x16, 0x15, 0x41, 0x22, 0x08, 0x03, 0x1e, 0x01, 0x01, 0x32, 0x34, 0x01, // >R.$..A".....24. + 0x03, 0x42, 0x19, 0x13, 0x0f, 0x07, 0x04, 0x40, 0x05, 0x1e, 0x28, 0x15, 0x09, 0x03, 0x08, 0x7e, // .B.....@..(....~ + 0x0f, 0x09, 0x03, 0x04, 0x07, 0x39, 0x42, 0x01, 0x01, 0x39, 0x1f, 0x0f, 0x2c, 0x1f, 0x02, 0x03, // .....9B..9..,... + 0x0b, 0x09, 0x01, 0x1d, 0x13, 0x16, 0x1e, 0x01, 0x2a, 0x24, 0x04, 0x0f, 0x0e, 0x0c, 0x17, 0x01, // ........*$...... + 0x0e, 0x1a, 0x05, 0x08, 0x17, 0x0f, 0x0b, 0x01, 0x02, 0x11, 0x01, 0x0c, 0x09, 0x11, 0x09, 0x0e, // ................ + 0x06, 0x03, 0x0b, 0x0d, 0x03, 0x06, 0x1f, 0x04, 0x13, 0x04, 0x05, 0x07, 0x02, 0x04, 0x04, 0x0f, // ................ + 0x17, 0x01, 0x01, 0x0c, 0x10, 0x13, 0x0f, 0x09, 0x04, 0x09, 0x02, 0x05, 0x05, 0x04, 0x06, 0x03, // ................ + 0x07, 0x01, 0x0e, 0x3c, 0x1a, 0x0c, 0x0b, 0x3e, 0x1f, 0x09, 0x03, 0x07, 0x19, 0x3f, 0x30, 0x44, // ...<...>.....?0D + 0x1d, 0x06, 0xa8, 0x39, 0x12, 0x66, 0x08, 0x18, 0x15, 0x1f, 0x3f, 0x1c, 0x1c, 0x13, 0x01, 0x05, // ...9.f....?..... + 0x41, 0x65, 0x0c, 0x20, 0x04, 0x17, 0x87, 0x09, 0x0f, 0x2e, 0x28, 0x03, 0x0f, 0x3b, 0x31, 0x2e, // Ae. ......(..;1. + 0x18, 0x44, 0x08, 0x10, 0x08, 0x02, 0x05, 0x09, 0x07, 0x34, 0x10, 0x0f, 0x48, 0x26, 0x08, 0x06, // .D.......4..H&.. + 0x2e, 0x19, 0x43, 0x17, 0x1d, 0x01, 0x13, 0x74, 0x20, 0x15, 0x69, 0x59, 0x1a, 0x12, 0x25, 0x20, // ..C....t .iY..% + 0x0b, 0x03, 0x2a, 0x11, 0x1a, 0x02, 0x02, 0x09, 0x05, 0x01, 0x0f, 0x14, 0xc2, 0x08, 0x07, 0x03, // ..*............. + 0x04, 0x03, 0x0a, 0x06, 0x07, 0x01, 0x02, 0x10, 0x37, 0x04, 0x01, 0x12, 0xe0, 0x0b, 0x11, 0x08, // ........7....... + 0x01, 0x01, 0x06, 0x01, 0x01, 0x04, 0x1b, 0x03, 0x05, 0xec, 0x02, 0x06, 0x08, 0x02, 0x0f, 0x01, // ................ + 0x0d, 0x0d, 0x06, 0x04, 0x0d, 0x05, 0x06, 0x03, 0x06, 0x0c, 0x03, 0x01, 0x04, 0xfa, 0xc8, 0x0c, // ................ + 0x19, 0x17, 0x16, 0x16, 0x11, 0x14, 0x0d, 0x12, 0x04, 0x13, 0x4a, 0x1b, 0x10, 0x07, 0x12, 0x09, // ..........J..... + 0x1d, 0x16, 0x11, 0x01, 0x01, 0x03, 0x01, 0x01, 0x1c, 0x20, 0x19, 0x01, 0x01, 0x3c, 0x0d, 0x04, // ......... ...<.. + 0x0b, 0x07, 0x0c, 0x11, 0x0b, 0x17, 0x57, 0x0b, 0x10, 0x30, 0x25, 0x24, 0x09, 0x0c, 0x04, 0x0a, // ......W..0%$.... + 0x12, 0x22, 0x22, 0x49, 0x21, 0x14, 0x05, 0x03, 0x0d, 0x0f, 0x2a, 0x06, 0x18, 0x0c, 0x16, 0x0b, // .""I!.....*..... + 0x0f, 0x44, 0x0e, 0x11, 0x09, 0x06, 0x19, 0x08, 0x06, 0x20, 0x0e, 0x03, 0x06, 0x2c, 0x34, 0x41, // .D....... ...,4A + 0x27, 0x11, 0xbe, 0x34, 0x4a, 0x22, 0x09, 0x18, 0x10, 0x16, 0x1d, 0x2e, 0x30, 0x12, 0x15, 0x66, // '..4J"......0..f + 0x36, 0x44, 0x14, 0x8f, 0x34, 0x70, 0xc6, 0x5a, 0x7b, 0x2b, 0x15, 0x01, 0x1d, 0x1b, 0x2a, 0x9f, // 6D..4p.Z{+....*. + 0x44, 0x5f, 0x77, 0x71, 0x69, 0x3b, 0xd0, 0x57, 0x31, 0x47, 0x28, 0x02, 0x02, 0x22, 0x25, 0x1e, // D_wqi;.W1G(.."%. + 0x01, 0x01, 0x08, 0x13, 0x0c, 0x1d, 0x05, 0x25, 0x0e, 0x54, 0x37, 0x46, 0x7d, 0x41, 0x47, 0x05, // .......%.T7F}AG. + 0x21, 0x31, 0x23, 0x19, 0x12, 0x25, 0x20, 0x19, 0x0b, 0x0b, 0x4a, 0x47, 0x0c, 0x1f, 0x33, 0x1e, // !1#..% ...JG..3. + 0x1b, 0x0b, 0x0f, 0x00, 0x00, 0x08, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0e, // ................ + 0x00, 0x20, 0x00, 0x27, 0x00, 0x2e, 0x00, 0x32, 0x00, 0x3e, 0x00, 0x56, 0x00, 0x62, 0x00, 0x00, // . .'...2.>.V.b.. + 0x25, 0x26, 0x03, 0x23, 0x07, 0x0e, 0x04, 0x07, 0x27, 0x16, 0x33, 0x32, 0x03, 0x26, 0x27, 0x04, // %&.#....'.32.&'. + 0x21, 0x06, 0x15, 0x14, 0x16, 0x17, 0x3e, 0x03, 0x3f, 0x01, 0x3e, 0x01, 0x27, 0x26, 0x27, 0x0e, // !.....>.?.>.'&'. + 0x01, 0x07, 0x20, 0x05, 0x26, 0x07, 0x16, 0x17, 0x3e, 0x01, 0x01, 0x22, 0x07, 0x36, 0x05, 0x26, // .. .&...>..".6.& + 0x23, 0x22, 0x07, 0x16, 0x17, 0x3e, 0x04, 0x13, 0x26, 0x27, 0x07, 0x0e, 0x04, 0x07, 0x16, 0x17, // #"...>..&'...... + 0x1e, 0x01, 0x17, 0x3e, 0x01, 0x32, 0x1e, 0x04, 0x17, 0x36, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, // ...>.2...6... $. + 0x10, 0x12, 0x24, 0x20, 0x04, 0x04, 0x00, 0x2a, 0x62, 0x02, 0x02, 0x10, 0x36, 0x94, 0x7e, 0x88, // ..$ ...*b...6.~. + 0x23, 0x0f, 0xb8, 0xea, 0x84, 0x3d, 0x15, 0x20, 0xfe, 0xc9, 0xfe, 0x96, 0x01, 0x58, 0x50, 0x32, // #....=. .....XP2 + 0x93, 0x8a, 0x7b, 0x26, 0x25, 0x04, 0x12, 0x67, 0x78, 0x7c, 0x8a, 0xc0, 0x20, 0x01, 0x2e, 0x03, // ..{&%..gx|.. ... + 0xdc, 0xd2, 0xc7, 0x57, 0x29, 0x6f, 0x94, 0xfc, 0xf1, 0x01, 0x01, 0x01, 0x02, 0x4f, 0xb9, 0xf8, // ...W)o.......O.. + 0x4c, 0x4f, 0x83, 0x73, 0x45, 0x7a, 0x47, 0x3c, 0x0f, 0xe4, 0x03, 0x92, 0x01, 0x09, 0x14, 0x43, // LO.sEzG<.......C + 0x4b, 0x7d, 0x45, 0x19, 0x13, 0x02, 0x09, 0x03, 0x24, 0x4d, 0x46, 0x44, 0x3c, 0x35, 0x2b, 0x1e, // K}E.....$MFD<5+. + 0x0a, 0x7a, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, // .z....^.....a... + 0x61, 0x24, 0xf1, 0x01, 0x01, 0x01, 0x06, 0x15, 0x4d, 0x57, 0x8e, 0x4d, 0x0b, 0x96, 0x02, 0x93, // a$......MW.M.... + 0x31, 0x3e, 0x5d, 0x07, 0x0e, 0x7c, 0xe1, 0x59, 0x59, 0x9b, 0x5e, 0x44, 0x0e, 0x0d, 0x01, 0x05, // 1>]..|.YY.^D.... + 0xd6, 0xd5, 0xa5, 0x41, 0xf2, 0x97, 0xef, 0x3c, 0x1f, 0xef, 0xe6, 0x4b, 0xe5, 0x03, 0x6d, 0x01, // ...A...<...K..m. + 0x01, 0x91, 0xa4, 0x13, 0xaa, 0xd4, 0x1a, 0x45, 0x36, 0x3c, 0x15, 0xfe, 0x22, 0xe8, 0xb2, 0x01, // .......E6<.."... + 0x0c, 0x19, 0x40, 0x39, 0x49, 0x1c, 0x35, 0x2a, 0x06, 0x17, 0x05, 0x05, 0x04, 0x03, 0x05, 0x06, // ..@9I.5*........ + 0x07, 0x05, 0x02, 0xc8, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, // .....^.....a...a + 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x3e, // ...............> + 0x00, 0x5e, 0x00, 0x00, 0x01, 0x34, 0x2e, 0x03, 0x2f, 0x01, 0x2e, 0x04, 0x35, 0x34, 0x33, 0x32, // .^...4../...5432 + 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x01, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, // ..32654..#"..... + 0x02, 0x1f, 0x01, 0x16, 0x17, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x03, 0x23, 0x22, 0x06, // .........#"..#". + 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x05, 0x14, 0x06, 0x23, 0x22, 0x27, 0x06, 0x23, 0x22, // ...32>....#"'.#" + 0x24, 0x26, 0x02, 0x35, 0x34, 0x37, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x36, 0x33, 0x32, // $&.547&54632.632 + 0x04, 0x16, 0x12, 0x15, 0x14, 0x07, 0x16, 0x04, 0x95, 0x27, 0x3a, 0x58, 0x4d, 0x31, 0x68, 0x1e, // .........':XM1h. + 0x1c, 0x2a, 0x12, 0x0f, 0x90, 0x2b, 0x44, 0x28, 0x24, 0x2c, 0x1a, 0x2f, 0x39, 0x70, 0xac, 0x60, // .*...+D($,./9p.` + 0x44, 0x80, 0x6f, 0x43, 0x26, 0x4a, 0x56, 0x3c, 0x92, 0x5a, 0x16, 0x20, 0x50, 0x41, 0x33, 0x51, // D.oC&JV<.Z. PA3Q + 0x31, 0x2a, 0x32, 0x1d, 0x32, 0x33, 0xf4, 0xa9, 0x49, 0x86, 0x6f, 0x42, 0x01, 0x6b, 0xe1, 0x9f, // 1*2.23..I.oB.k.. + 0x82, 0x68, 0x4d, 0x49, 0x8f, 0xfe, 0xfb, 0xbd, 0x6f, 0x10, 0x50, 0xe1, 0x9f, 0x82, 0x68, 0x4d, // .hMI....o.P...hM + 0x49, 0x8f, 0x01, 0x05, 0xbd, 0x6f, 0x10, 0x50, 0x01, 0xd9, 0x32, 0x53, 0x36, 0x2c, 0x18, 0x0b, // I....o.P..2S6,.. + 0x18, 0x07, 0x07, 0x10, 0x10, 0x1a, 0x11, 0x4d, 0x18, 0x21, 0x22, 0x18, 0x40, 0x2d, 0x37, 0x59, // .......M.!".@-7Y + 0x2e, 0x1f, 0x3f, 0x6f, 0x49, 0x3d, 0x5b, 0x3c, 0x25, 0x0e, 0x24, 0x16, 0x0e, 0x14, 0x28, 0x27, // ..?oI=[<%.$...(' + 0x33, 0x20, 0x2d, 0x2d, 0x20, 0x3c, 0x2d, 0x5c, 0x83, 0x25, 0x46, 0x75, 0x90, 0x9f, 0xe1, 0x50, // 3 -- <-..%Fu...P + 0x10, 0x6f, 0xbd, 0x01, 0x05, 0x8f, 0x49, 0x4d, 0x68, 0x82, 0x9f, 0xe1, 0x50, 0x10, 0x6f, 0xbd, // .o....IMh...P.o. + 0xfe, 0xfb, 0x8f, 0x49, 0x4d, 0x68, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x04, // ...IMh.......... + 0x05, 0x80, 0x00, 0x23, 0x00, 0x3c, 0x00, 0x00, 0x09, 0x01, 0x06, 0x22, 0x27, 0x01, 0x26, 0x34, // ...#.<....."'.&4 + 0x37, 0x01, 0x36, 0x32, 0x17, 0x09, 0x01, 0x27, 0x26, 0x23, 0x22, 0x0f, 0x01, 0x06, 0x15, 0x14, // 7.62...'&#"..... + 0x17, 0x01, 0x16, 0x1f, 0x01, 0x33, 0x32, 0x37, 0x01, 0x17, 0x16, 0x14, 0x03, 0x17, 0x16, 0x14, // .....327........ + 0x07, 0x01, 0x06, 0x23, 0x31, 0x22, 0x27, 0x26, 0x27, 0x01, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x32, // ...#1"'&'.&4?.62 + 0x1f, 0x01, 0x01, 0x36, 0x32, 0x05, 0xcb, 0xfd, 0xb5, 0x34, 0x97, 0x35, 0xfd, 0xb5, 0x35, 0x35, // ...62....4.5..55 + 0x02, 0x4b, 0x35, 0x96, 0x35, 0x01, 0x09, 0xfe, 0x72, 0xbc, 0x2a, 0x39, 0x3b, 0x29, 0x78, 0x2a, // .K5.5...r.*9;)x* + 0x2a, 0x01, 0x96, 0x1e, 0x25, 0x06, 0x1c, 0x3c, 0x27, 0x02, 0x6b, 0x02, 0x35, 0x82, 0x78, 0x0e, // *...%..<'.k.5.x. + 0x0e, 0xfd, 0x26, 0x11, 0x14, 0x04, 0x02, 0x12, 0x0c, 0xfe, 0x69, 0x0e, 0x0e, 0x79, 0x0d, 0x2c, // ..&.......i..y., + 0x0e, 0xfc, 0x02, 0x3e, 0x0f, 0x2a, 0x02, 0x00, 0xfd, 0xb5, 0x35, 0x35, 0x02, 0x4b, 0x35, 0x96, // ...>.*....55.K5. + 0x35, 0x02, 0x4b, 0x35, 0x35, 0xfe, 0xf7, 0xfe, 0x71, 0xbc, 0x2a, 0x29, 0x79, 0x28, 0x3b, 0x3a, // 5.K55...q.*)y(;: + 0x2a, 0xfe, 0x68, 0x1c, 0x09, 0x04, 0x29, 0x02, 0x6b, 0x03, 0x35, 0x96, 0x02, 0x3d, 0x78, 0x0f, // *.h...).k.5..=x. + 0x2a, 0x0f, 0xfd, 0x26, 0x0f, 0x01, 0x02, 0x0c, 0x01, 0x98, 0x0f, 0x2a, 0x0e, 0x78, 0x0f, 0x0f, // *..&.......*.x.. + 0xfc, 0x02, 0x3f, 0x0f, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x0f, // ..?............. + 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x25, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // .../..%.4&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, 0x22, 0x06, 0x15, 0x11, // ..3!26..4&#!"... + 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ..3!26....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x02, 0xc0, 0x12, 0x0e, 0xfe, 0x20, 0x0e, 0x12, 0x12, 0x0e, // 463!2...... .... + 0x01, 0xe0, 0x0e, 0x12, 0x02, 0xa0, 0x12, 0x0e, 0xfe, 0x20, 0x0e, 0x12, 0x12, 0x0e, 0x01, 0xe0, // ......... ...... + 0x0e, 0x12, 0xa0, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, 0x26, 0xc0, // ...&....&&....&. + 0x04, 0x00, 0x0e, 0x12, 0x12, 0x0e, 0xfc, 0x00, 0x0e, 0x12, 0x12, 0x01, 0x8e, 0x02, 0x80, 0x0e, // ................ + 0x12, 0x12, 0x0e, 0xfd, 0x80, 0x0e, 0x12, 0x12, 0x03, 0x0e, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, // .............&&. + 0x05, 0x80, 0x1a, 0x26, 0x26, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x05, 0x00, // ...&&........... + 0x05, 0xe0, 0x00, 0x31, 0x00, 0x39, 0x00, 0x00, 0x01, 0x14, 0x06, 0x23, 0x22, 0x27, 0x03, 0x23, // ...1.9.....#"'.# + 0x15, 0x13, 0x16, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x2b, 0x01, 0x22, 0x26, 0x35, // ......+....+."&5 + 0x11, 0x23, 0x22, 0x26, 0x35, 0x34, 0x37, 0x13, 0x35, 0x23, 0x03, 0x06, 0x23, 0x22, 0x26, 0x35, // .#"&547.5#..#"&5 + 0x34, 0x37, 0x01, 0x36, 0x33, 0x21, 0x32, 0x17, 0x01, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, // 47.63!2......"&4 + 0x36, 0x32, 0x05, 0x00, 0x38, 0x28, 0x33, 0x1d, 0xe3, 0x2d, 0xf7, 0x09, 0x26, 0x1a, 0xc0, 0x42, // 62..8(3..-..&..B + 0x2e, 0xa0, 0x2e, 0x42, 0xc0, 0x1a, 0x26, 0x09, 0xf7, 0x2d, 0xe3, 0x1d, 0x33, 0x28, 0x38, 0x10, // ...B..&..-..3(8. + 0x01, 0x00, 0x49, 0x67, 0x01, 0x80, 0x67, 0x49, 0x01, 0x00, 0x10, 0xfe, 0x60, 0x83, 0xba, 0x83, // ..Ig..gI....`... + 0x83, 0xba, 0x01, 0xe0, 0x28, 0x38, 0x2b, 0x01, 0x55, 0x84, 0xfe, 0x65, 0x0f, 0x12, 0x1a, 0x26, // ....(8+.U..e...& + 0xfe, 0xf0, 0x2e, 0x42, 0x42, 0x2e, 0x01, 0x10, 0x26, 0x1a, 0x12, 0x0f, 0x01, 0x9b, 0x84, 0xfe, // ...BB...&....... + 0xab, 0x2b, 0x38, 0x28, 0x1d, 0x18, 0x01, 0x80, 0x6b, 0x6b, 0xfe, 0x80, 0x18, 0x03, 0x60, 0xba, // .+8(....kk....`. + 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, 0xff, 0x00, 0x04, 0x00, 0x05, 0xe0, 0x00, 0x25, // ...............% + 0x00, 0x2d, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, // .-......"&5.#... + 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, 0x22, 0x26, 0x35, 0x11, 0x23, 0x11, 0x14, 0x06, // "&5.#..."&5.#... + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, // "&5.463!2...."&4 + 0x36, 0x32, 0x04, 0x00, 0x38, 0x50, 0x38, 0x40, 0x42, 0x5c, 0x42, 0x40, 0x42, 0x5c, 0x42, 0x40, // 62..8P8@B.B@B.B@ + 0x38, 0x50, 0x38, 0x70, 0x50, 0x02, 0x80, 0x50, 0x70, 0xfe, 0xe0, 0x83, 0xba, 0x83, 0x83, 0xba, // 8P8pP..Pp....... + 0x03, 0x40, 0xfe, 0x60, 0x28, 0x38, 0x38, 0x28, 0x01, 0x60, 0xfc, 0x70, 0x2e, 0x42, 0x42, 0x2e, // .@.`(88(.`.p.BB. + 0x01, 0xd0, 0xfe, 0x30, 0x2e, 0x42, 0x42, 0x2e, 0x03, 0x90, 0xfe, 0xa0, 0x28, 0x38, 0x38, 0x28, // ...0.BB.....(88( + 0x01, 0xa0, 0x50, 0x70, 0x70, 0x01, 0xcd, 0xba, 0x83, 0x83, 0xba, 0x83, 0x00, 0x02, 0x00, 0x00, // ..Ppp........... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x15, 0x00, 0x21, 0x00, 0x00, 0x25, 0x01, 0x3e, 0x01, // .........!..%.>. + 0x26, 0x27, 0x26, 0x0e, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, 0x02, 0x07, 0x0e, 0x01, 0x16, // &'&....#"'...... + 0x17, 0x24, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, 0x03, 0x05, 0x01, // .$... $...$ .... + 0x5e, 0x10, 0x11, 0x1d, 0x2f, 0x28, 0x56, 0x3d, 0x18, 0x24, 0x3c, 0x3b, 0x24, 0x18, 0x3d, 0x56, // ^.../(V=.$<;$.=V + 0x29, 0x2e, 0x1d, 0x11, 0x10, 0x04, 0x58, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // ).....X....^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xea, 0x01, 0xd9, 0x16, 0x4a, 0x60, 0x1f, 0x1a, 0x01, 0x22, // .a...a....J`..." + 0x1c, 0x28, 0x28, 0x1c, 0x22, 0x01, 0x1a, 0x1f, 0x60, 0x4a, 0x16, 0x8e, 0xfe, 0x5e, 0xfe, 0x9f, // .((."...`J...^.. + 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2c, // ...a...a......., + 0xff, 0x00, 0x06, 0xd4, 0x05, 0xff, 0x00, 0x0f, 0x00, 0x49, 0x00, 0x00, 0x00, 0x34, 0x2e, 0x02, // .........I...4.. + 0x22, 0x0e, 0x02, 0x14, 0x1e, 0x02, 0x32, 0x3e, 0x01, 0x25, 0x06, 0x07, 0x05, 0x11, 0x14, 0x07, // ".....2>.%...... + 0x06, 0x27, 0x25, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x05, 0x06, 0x27, 0x26, 0x35, 0x11, 0x25, 0x26, // .'%.."/...'&5.%& + 0x27, 0x26, 0x3f, 0x01, 0x27, 0x26, 0x37, 0x36, 0x37, 0x25, 0x11, 0x34, 0x37, 0x36, 0x17, 0x05, // '&?.'&767%.476.. + 0x37, 0x36, 0x32, 0x1f, 0x01, 0x25, 0x36, 0x17, 0x16, 0x15, 0x11, 0x05, 0x16, 0x17, 0x16, 0x0f, // 762..%6......... + 0x01, 0x17, 0x16, 0x05, 0xc0, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, // .....[.....[[... + 0xd5, 0x9b, 0x01, 0x6f, 0x04, 0x10, 0xfe, 0xdc, 0x0d, 0x0f, 0x0e, 0xfe, 0xdc, 0xb4, 0x0a, 0x20, // ...o........... + 0x0a, 0xb4, 0xfe, 0xdc, 0x0e, 0x0f, 0x0d, 0xfe, 0xdc, 0x10, 0x04, 0x05, 0x09, 0xb4, 0xb4, 0x09, // ................ + 0x05, 0x04, 0x10, 0x01, 0x24, 0x0d, 0x0f, 0x0e, 0x01, 0x24, 0xb4, 0x09, 0x22, 0x09, 0xb4, 0x01, // ....$....$.."... + 0x24, 0x0e, 0x0f, 0x0d, 0x01, 0x24, 0x10, 0x04, 0x05, 0x09, 0xb4, 0xb4, 0x09, 0x02, 0x0b, 0xea, // $....$.......... + 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0xd5, 0xea, 0xd5, 0x9b, 0x5b, 0x5b, 0x9b, 0x35, 0x0f, 0x05, 0x60, // ..[[.....[[.5..` + 0xfe, 0xce, 0x10, 0x0a, 0x0a, 0x06, 0x5e, 0xf8, 0x0d, 0x0d, 0xf8, 0x5e, 0x06, 0x0a, 0x0a, 0x10, // ......^....^.... + 0x01, 0x32, 0x60, 0x05, 0x0f, 0x11, 0x0c, 0xf8, 0xf8, 0x0d, 0x10, 0x0f, 0x05, 0x60, 0x01, 0x32, // .2`..........`.2 + 0x10, 0x0a, 0x0a, 0x06, 0x5e, 0xf8, 0x0c, 0x0c, 0xf8, 0x5e, 0x06, 0x0a, 0x0a, 0x10, 0xfe, 0xce, // ....^....^...... + 0x60, 0x05, 0x0f, 0x10, 0x0d, 0xf8, 0xf8, 0x0c, 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x05, 0xbe, // `............... + 0x05, 0x7f, 0x00, 0x12, 0x00, 0x31, 0x00, 0x00, 0x25, 0x06, 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, // .....1..%.#"$.54 + 0x37, 0x06, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x24, 0x25, 0x06, 0x04, 0x23, 0x22, 0x24, // 7......32$%..#"$ + 0x26, 0x02, 0x35, 0x34, 0x12, 0x36, 0x24, 0x37, 0x36, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x15, 0x14, // &.54.6$76....... + 0x1e, 0x01, 0x33, 0x32, 0x37, 0x36, 0x17, 0x1e, 0x01, 0x04, 0xee, 0x36, 0x38, 0xb6, 0xfe, 0xca, // ..3276.....68... + 0xb4, 0x68, 0xc9, 0xff, 0x66, 0xab, 0xed, 0x82, 0x90, 0x01, 0x03, 0x01, 0x26, 0x5e, 0xfe, 0x85, // .h..f.......&^.. + 0xe0, 0x9c, 0xfe, 0xe4, 0xce, 0x7a, 0x73, 0xc5, 0x01, 0x12, 0x99, 0x2c, 0x11, 0x12, 0x21, 0x56, // .....zs....,..!V + 0x5b, 0x92, 0xfa, 0x94, 0x76, 0x6e, 0x29, 0x1f, 0x0e, 0x07, 0xe9, 0x09, 0xb4, 0x01, 0x36, 0xb6, // [...vn).......6. + 0xc0, 0xa5, 0x3c, 0xfe, 0xae, 0xd7, 0x82, 0xed, 0xab, 0x66, 0x7b, 0xc3, 0xcb, 0xf3, 0x7a, 0xce, // ..<......f{...z. + 0x01, 0x1c, 0x9c, 0x99, 0x01, 0x17, 0xcc, 0x7d, 0x06, 0x02, 0x29, 0x29, 0x1f, 0x4e, 0xcf, 0x73, // .......}..)).N.s + 0x94, 0xfa, 0x92, 0x33, 0x12, 0x1f, 0x0e, 0x28, 0x00, 0x03, 0x00, 0x40, 0xff, 0x80, 0x06, 0xc0, // ...3...(...@.... + 0x05, 0x80, 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x34, 0x26, 0x23, 0x21, 0x22, // .......+...4&#!" + 0x06, 0x14, 0x16, 0x33, 0x21, 0x32, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // ...3!2....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x13, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 463!2.....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x40, 0x26, 0x1a, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, // 463!2..@&....&&. + 0x01, 0x00, 0x1a, 0x02, 0x66, 0x26, 0x1a, 0xfa, 0x80, 0x1a, 0x26, 0x26, 0x1a, 0x05, 0x80, 0x1a, // ....f&....&&.... + 0x26, 0x40, 0x26, 0x1a, 0xfa, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x06, 0x00, 0x1a, 0x26, 0x02, 0xa6, // &@&....&&....&.. + 0x34, 0x26, 0x26, 0x34, 0x26, 0x01, 0x00, 0xfc, 0x40, 0x1a, 0x26, 0x26, 0x1a, 0x03, 0xc0, 0x1a, // 4&&4&...@.&&.... + 0x26, 0x26, 0x01, 0xa6, 0xff, 0x00, 0x1a, 0x26, 0x26, 0x1a, 0x01, 0x00, 0x1a, 0x26, 0x26, 0x00, // &&.....&&....&&. + 0x00, 0x02, 0x00, 0x20, 0xff, 0xa0, 0x06, 0x60, 0x05, 0xc0, 0x00, 0x42, 0x00, 0x48, 0x00, 0x00, // ... ...`...B.H.. + 0x00, 0x14, 0x06, 0x2b, 0x01, 0x14, 0x07, 0x17, 0x16, 0x14, 0x07, 0x06, 0x22, 0x2f, 0x01, 0x0e, // ...+........"/.. + 0x04, 0x23, 0x11, 0x23, 0x11, 0x22, 0x2e, 0x02, 0x2f, 0x01, 0x07, 0x06, 0x23, 0x22, 0x27, 0x2e, // .#.#."../...#"'. + 0x01, 0x3f, 0x01, 0x26, 0x35, 0x23, 0x22, 0x26, 0x34, 0x36, 0x3b, 0x01, 0x11, 0x27, 0x26, 0x34, // .?.&5#"&46;..'&4 + 0x36, 0x32, 0x1f, 0x01, 0x21, 0x37, 0x36, 0x32, 0x16, 0x14, 0x0f, 0x01, 0x11, 0x33, 0x32, 0x01, // 62..!762.....32. + 0x21, 0x34, 0x36, 0x20, 0x16, 0x06, 0x60, 0x26, 0x1a, 0xe0, 0x43, 0xd0, 0x13, 0x13, 0x12, 0x36, // !46 ..`&..C....6 + 0x12, 0xc6, 0x05, 0x14, 0x40, 0x42, 0x62, 0x30, 0x80, 0x33, 0x65, 0x49, 0x3b, 0x0e, 0x0f, 0xb7, // ....@Bb0.3eI;... + 0x14, 0x1c, 0x18, 0x13, 0x13, 0x03, 0x11, 0xca, 0x3a, 0xe0, 0x1a, 0x26, 0x26, 0x1a, 0xe0, 0xad, // ........:..&&... + 0x13, 0x26, 0x34, 0x13, 0xad, 0x03, 0x4c, 0xad, 0x13, 0x34, 0x26, 0x13, 0xad, 0xe0, 0x1a, 0xfe, // .&4...L..4&..... + 0x46, 0xfd, 0x80, 0xbb, 0x01, 0x0a, 0xbb, 0x02, 0x5a, 0x34, 0x26, 0xab, 0x77, 0xd1, 0x13, 0x34, // F.......Z4&.w..4 + 0x13, 0x13, 0x13, 0xc5, 0x05, 0x10, 0x29, 0x20, 0x1a, 0x03, 0x80, 0xfc, 0x80, 0x1b, 0x27, 0x27, // ......) ......'' + 0x0d, 0x0e, 0xcf, 0x15, 0x10, 0x12, 0x35, 0x14, 0xe3, 0x72, 0xa0, 0x26, 0x34, 0x26, 0x01, 0x26, // ......5..r.&4&.& + 0xad, 0x13, 0x34, 0x26, 0x13, 0xad, 0xad, 0x13, 0x26, 0x34, 0x13, 0xad, 0xfe, 0xda, 0x02, 0x00, // ..4&....&4...... + 0x85, 0xbb, 0xbb, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x01, 0x07, 0x7d, 0x04, 0x47, 0x00, 0x86, // ...........}.G.. + 0x00, 0x00, 0x01, 0x16, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x17, 0x16, 0x17, 0x33, 0x1f, 0x02, // .............3.. + 0x16, 0x17, 0x1e, 0x02, 0x0e, 0x01, 0x23, 0x05, 0x06, 0x26, 0x2f, 0x01, 0x2e, 0x03, 0x07, 0x0e, // ......#..&/..... + 0x04, 0x17, 0x14, 0x06, 0x0f, 0x01, 0x06, 0x07, 0x23, 0x06, 0x2e, 0x02, 0x2f, 0x01, 0x2e, 0x03, // ........#.../... + 0x02, 0x27, 0x26, 0x34, 0x3f, 0x01, 0x36, 0x33, 0x25, 0x1e, 0x01, 0x1f, 0x01, 0x16, 0x17, 0x1e, // .'&4?.63%....... + 0x01, 0x1f, 0x01, 0x1e, 0x03, 0x32, 0x37, 0x3e, 0x04, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x26, 0x27, // .....27>.'../.&' + 0x26, 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x17, 0x1e, 0x03, 0x14, 0x0e, 0x01, 0x15, 0x14, 0x06, // &7676........... + 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x3e, 0x02, 0x37, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x02, // .....>.767>.?.>. + 0x17, 0x25, 0x36, 0x16, 0x17, 0x07, 0x7d, 0x17, 0xad, 0x18, 0x29, 0x4e, 0x0c, 0x11, 0x1f, 0x11, // .%6...}...)N.... + 0x40, 0x01, 0x01, 0x01, 0x02, 0x8d, 0x32, 0x03, 0x07, 0x07, 0x08, 0x2a, 0x26, 0xff, 0x00, 0x18, // @.....2....*&... + 0x40, 0x14, 0x14, 0x1e, 0x50, 0x39, 0x41, 0x18, 0x03, 0x0a, 0x18, 0x13, 0x0f, 0x01, 0x07, 0x04, // @...P9A......... + 0x04, 0x12, 0x23, 0x73, 0x47, 0x96, 0x71, 0x5d, 0x18, 0x19, 0x0a, 0x23, 0x6c, 0x68, 0x8d, 0x3c, // ..#sG.q]...#lh.< + 0x06, 0x03, 0x04, 0x0f, 0x2a, 0x01, 0x12, 0x0c, 0x16, 0x05, 0x05, 0x10, 0x08, 0x14, 0x34, 0x0f, // ....*.........4. + 0x10, 0x1d, 0x36, 0x2b, 0x28, 0x1c, 0x0d, 0x02, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x02, 0x0e, 0x07, // ..6+(........... + 0x06, 0x19, 0x3c, 0x0d, 0x12, 0x11, 0x15, 0x35, 0xba, 0x52, 0x35, 0x14, 0x1b, 0x0e, 0x07, 0x02, // ..<....5.R5..... + 0x03, 0x02, 0x01, 0x06, 0x11, 0x0e, 0x08, 0x12, 0x22, 0x2a, 0x3e, 0x25, 0x3c, 0x2f, 0x04, 0x0c, // ........"*>%"/.....+[ + 0x3e, 0x68, 0x79, 0x0a, 0x0f, 0x03, 0x03, 0x01, 0x03, 0x03, 0x01, 0x02, 0x05, 0x0f, 0x09, 0x00, // >hy............. + 0x00, 0x07, 0x00, 0x00, 0xff, 0xaa, 0x06, 0xf7, 0x05, 0x4b, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x21, // .........K.....! + 0x00, 0x2f, 0x00, 0x55, 0x00, 0x69, 0x00, 0x7f, 0x00, 0x00, 0x25, 0x36, 0x26, 0x27, 0x26, 0x06, // ./.U.i....%6&'&. + 0x07, 0x06, 0x1e, 0x01, 0x36, 0x37, 0x36, 0x26, 0x27, 0x26, 0x06, 0x07, 0x06, 0x17, 0x16, 0x36, // ....676&'&.....6 + 0x17, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x17, 0x1e, 0x01, 0x25, 0x2e, 0x01, 0x24, // ...'..7>....%..$ + 0x07, 0x06, 0x04, 0x17, 0x1e, 0x01, 0x04, 0x37, 0x36, 0x24, 0x25, 0x14, 0x0e, 0x02, 0x04, 0x20, // .......76$%.... + 0x24, 0x2e, 0x01, 0x35, 0x34, 0x12, 0x37, 0x36, 0x24, 0x17, 0x16, 0x07, 0x06, 0x1e, 0x01, 0x36, // $..54.76$......6 + 0x3f, 0x01, 0x36, 0x32, 0x17, 0x16, 0x07, 0x0e, 0x01, 0x1e, 0x01, 0x17, 0x1e, 0x02, 0x02, 0x1e, // ?.62............ + 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x36, 0x26, 0x07, 0x06, 0x26, 0x27, 0x26, 0x36, // ....'..76&..&'&6 + 0x37, 0x36, 0x25, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x2e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x2e, 0x01, // 76%.......76&'.. + 0x07, 0x06, 0x2e, 0x01, 0x36, 0x37, 0x36, 0x16, 0x02, 0xa3, 0x15, 0x14, 0x23, 0x22, 0x4e, 0x15, // ....676.....#"N. + 0x16, 0x12, 0x44, 0x51, 0x74, 0x08, 0x09, 0x0d, 0x0e, 0x1d, 0x07, 0x11, 0x1e, 0x0e, 0x1e, 0xb5, // ..DQt........... + 0x2d, 0xe2, 0x6f, 0x6b, 0x51, 0x2f, 0x2f, 0xd1, 0x6a, 0x6f, 0x5f, 0x01, 0x0b, 0x09, 0xa0, 0xfe, // -.okQ//.jo_..... + 0xff, 0x92, 0xdf, 0xfe, 0xdb, 0x0e, 0x09, 0xa0, 0x01, 0x01, 0x92, 0xdf, 0x01, 0x25, 0x01, 0x26, // .............%.& + 0x4a, 0x90, 0xc1, 0xfe, 0xfd, 0xfe, 0xe6, 0xfe, 0xf4, 0xd5, 0x82, 0x8b, 0x80, 0xa9, 0x01, 0x59, // J..............Y + 0x4a, 0x41, 0x2d, 0x04, 0x06, 0x0e, 0x0f, 0x06, 0x06, 0x8b, 0xd6, 0x2e, 0x2d, 0x2d, 0x02, 0x05, // JA-.........--.. + 0x0e, 0x0a, 0x0c, 0x39, 0x5c, 0x44, 0x74, 0x54, 0x19, 0x13, 0x08, 0x2b, 0x17, 0x17, 0x16, 0x07, // ...9.DtT...+.... + 0x14, 0x58, 0x3f, 0x18, 0x2a, 0x04, 0x05, 0x1a, 0x18, 0x3c, 0x01, 0x55, 0x57, 0x33, 0x27, 0x09, // .X?.*....<.UW3'. + 0x32, 0x36, 0x1a, 0x08, 0x1c, 0x24, 0x3e, 0x3e, 0xac, 0x57, 0x1c, 0x30, 0x0c, 0x1f, 0x1c, 0x7b, // 26...$>>.W.0...{ + 0xf2, 0xfc, 0x22, 0x46, 0x0f, 0x0e, 0x1a, 0x21, 0x22, 0x45, 0x20, 0x1b, 0x9b, 0x0d, 0x1b, 0x05, // .."F...!"E ..... + 0x05, 0x0b, 0x0d, 0x1f, 0x0e, 0x05, 0x0b, 0x5e, 0x66, 0x60, 0x24, 0x22, 0xb9, 0x5f, 0x5d, 0x5c, // .......^f`$"._]. + 0x1b, 0x1d, 0xb5, 0x3c, 0x60, 0x94, 0x46, 0x0e, 0x17, 0xed, 0x92, 0x60, 0x94, 0x46, 0x0e, 0x17, // ...<`.F....`.F.. + 0xed, 0x8e, 0x44, 0x8f, 0x83, 0x68, 0x3e, 0x43, 0x77, 0xb7, 0x6c, 0x73, 0x01, 0x04, 0x80, 0xa9, // ..D..h>Cw.ls.... + 0x86, 0x4a, 0x40, 0x91, 0x0e, 0x0c, 0x02, 0x03, 0x02, 0x02, 0x3b, 0x3d, 0x3f, 0x73, 0x0d, 0x0e, // .J@.......;=?s.. + 0x0b, 0x04, 0x04, 0x12, 0x3a, 0x69, 0x02, 0x5f, 0x5e, 0x7b, 0x38, 0x17, 0x16, 0x07, 0x08, 0x2b, // ....:i._^{8....+ + 0x17, 0x3f, 0x60, 0x0d, 0x05, 0x1a, 0x18, 0x18, 0x29, 0x05, 0x0d, 0x4f, 0x60, 0xfd, 0x73, 0x1b, // .?`.....)..O`.s. + 0x1a, 0x12, 0x32, 0x1b, 0x52, 0xb4, 0x44, 0x45, 0x35, 0x12, 0x06, 0x1f, 0x38, 0x2f, 0x06, 0x1a, // ..2.R.DE5...8/.. + 0x4b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x72, 0x00, 0x09, // K............r.. + 0x00, 0x13, 0x00, 0x1d, 0x00, 0x00, 0x05, 0x06, 0x23, 0x22, 0x27, 0x3e, 0x01, 0x37, 0x1e, 0x01, // ........#"'>.7.. + 0x01, 0x11, 0x14, 0x02, 0x07, 0x26, 0x11, 0x34, 0x12, 0x24, 0x01, 0x10, 0x07, 0x26, 0x02, 0x35, // .....&.4.$...&.5 + 0x11, 0x16, 0x04, 0x12, 0x04, 0x6d, 0xab, 0xc5, 0xc4, 0xab, 0x8a, 0xc3, 0x22, 0x23, 0xc3, 0xfe, // .....m......"#.. + 0x9b, 0xfd, 0xcc, 0xb5, 0xa7, 0x01, 0x24, 0x04, 0x35, 0xb5, 0xcc, 0xfd, 0xb3, 0x01, 0x24, 0xa7, // ......$.5.....$. + 0x22, 0x5e, 0x5e, 0x57, 0xf8, 0x90, 0x90, 0xf8, 0x05, 0x3d, 0xfe, 0x1b, 0xfc, 0xfe, 0x61, 0x63, // "^^W.....=....ac + 0xd7, 0x01, 0x18, 0xbb, 0x01, 0x45, 0xd6, 0xfd, 0x2a, 0xfe, 0xe8, 0xd7, 0x63, 0x01, 0x9f, 0xfc, // .....E..*...c... + 0x01, 0xe5, 0x1e, 0xd6, 0xfe, 0xbb, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x05, 0x7a, // ...............z + 0x06, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x01, 0x0e, 0x03, 0x2e, 0x03, 0x2f, 0x01, 0x06, 0x00, 0x07, // ...k......./.... + 0x22, 0x26, 0x34, 0x36, 0x33, 0x36, 0x24, 0x37, 0x0e, 0x02, 0x2e, 0x03, 0x27, 0x3e, 0x01, 0x1e, // "&4636$7....'>.. + 0x02, 0x17, 0x36, 0x37, 0x0e, 0x02, 0x2e, 0x05, 0x27, 0x3e, 0x01, 0x1e, 0x05, 0x1f, 0x01, 0x36, // ..67....'>.....6 + 0x35, 0x2e, 0x05, 0x36, 0x37, 0x1e, 0x04, 0x0e, 0x02, 0x0f, 0x01, 0x16, 0x14, 0x07, 0x3e, 0x05, // 5..67.........>. + 0x16, 0x17, 0x0e, 0x06, 0x26, 0x2f, 0x01, 0x06, 0x07, 0x3e, 0x05, 0x16, 0x05, 0x7a, 0x20, 0x58, // ....&/...>...z X + 0x5e, 0x68, 0x63, 0x5e, 0x4f, 0x3c, 0x10, 0x11, 0x71, 0xfe, 0x9f, 0xd0, 0x13, 0x1a, 0x1a, 0x13, // ^hc^O<..q....... + 0xad, 0x01, 0x2b, 0x66, 0x24, 0x48, 0x5e, 0x58, 0x62, 0x56, 0x53, 0x21, 0x72, 0xc8, 0x87, 0x72, // ..+f$H^XbVS!r..r + 0x3f, 0x19, 0x35, 0x1a, 0x07, 0x16, 0x47, 0x44, 0x5f, 0x52, 0x56, 0x40, 0x2d, 0x06, 0x46, 0x7f, // ?.5...GD_RV@-.F. + 0x62, 0x56, 0x3d, 0x33, 0x21, 0x16, 0x05, 0x04, 0x0c, 0x08, 0x1b, 0x47, 0x38, 0x34, 0x0e, 0x26, // bV=3!......G84.& + 0x33, 0x49, 0x6d, 0x3c, 0x24, 0x05, 0x06, 0x14, 0x12, 0x08, 0x07, 0x01, 0x01, 0x03, 0x0e, 0x2f, // 3Im<$........../ + 0x36, 0x58, 0x5f, 0x81, 0x44, 0x02, 0x27, 0x3d, 0x4e, 0x55, 0x54, 0x4c, 0x3b, 0x11, 0x11, 0x17, // 6X_.D.'=NUTL;... + 0x32, 0x06, 0x18, 0x4b, 0x50, 0x77, 0x74, 0x8e, 0x01, 0xb1, 0x50, 0x74, 0x3d, 0x20, 0x03, 0x0e, // 2..KPwt...Pt= .. + 0x1e, 0x19, 0x0a, 0x0a, 0xe4, 0xfe, 0xf9, 0x01, 0x1a, 0x26, 0x19, 0x01, 0xd5, 0xbc, 0x0e, 0x12, // .........&...... + 0x08, 0x0d, 0x2c, 0x4a, 0x7e, 0x53, 0x2f, 0x14, 0x23, 0x4e, 0x4c, 0x2c, 0x83, 0xa0, 0x01, 0x03, // ..,J~S/.#NL,.... + 0x02, 0x03, 0x11, 0x1d, 0x38, 0x4a, 0x73, 0x46, 0x1c, 0x11, 0x13, 0x29, 0x3b, 0x3f, 0x3f, 0x31, // ....8JsF...);??1 + 0x0f, 0x10, 0x7a, 0x49, 0x06, 0x14, 0x45, 0x4a, 0x70, 0x71, 0x8d, 0x44, 0x19, 0x49, 0x50, 0x5a, // ..zI..EJpq.D.IPZ + 0x58, 0x53, 0x46, 0x36, 0x0f, 0x0f, 0x05, 0x5b, 0x1a, 0x07, 0x17, 0x3f, 0x35, 0x3a, 0x1f, 0x02, // XSF6...[...?5:.. + 0x17, 0x4e, 0x7f, 0x52, 0x3d, 0x1e, 0x12, 0x01, 0x03, 0x03, 0x03, 0x93, 0x88, 0x07, 0x17, 0x3b, // .N.R=..........; + 0x2e, 0x26, 0x02, 0x31, 0x00, 0x04, 0x00, 0x15, 0xff, 0x00, 0x04, 0xeb, 0x05, 0x00, 0x00, 0x0c, // .&.1............ + 0x00, 0x10, 0x00, 0x14, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x2b, 0x01, 0x01, 0x11, // ............+... + 0x21, 0x22, 0x26, 0x3d, 0x01, 0x01, 0x15, 0x21, 0x11, 0x01, 0x15, 0x21, 0x11, 0x25, 0x15, 0x21, // !"&=...!...!.%.! + 0x35, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xeb, 0x73, 0x51, 0x39, 0xfe, 0xfc, 0xfd, 0xef, // 5463!2...sQ9.... + 0x51, 0x73, 0x04, 0xd6, 0xfb, 0x2a, 0x04, 0xd6, 0xfb, 0x2a, 0x04, 0xd6, 0xfb, 0x2a, 0x73, 0x51, // Qs...*...*...*sQ + 0x03, 0x4e, 0x51, 0x73, 0x01, 0x1b, 0x42, 0x55, 0x77, 0xfe, 0xf3, 0x01, 0x0d, 0x77, 0x55, 0x42, // .NQs..BUw....wUB + 0x01, 0x46, 0xff, 0x00, 0xff, 0x01, 0x48, 0xff, 0x00, 0xff, 0x8c, 0x43, 0x43, 0x54, 0x77, 0x77, // .F....H....CCTww + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, 0x00, 0x25, 0x00, 0x31, // .............%.1 + 0x00, 0x00, 0x00, 0x14, 0x07, 0x01, 0x06, 0x23, 0x22, 0x26, 0x3d, 0x01, 0x21, 0x22, 0x26, 0x3d, // .......#"&=.!"&= + 0x01, 0x34, 0x36, 0x33, 0x21, 0x35, 0x34, 0x36, 0x33, 0x32, 0x17, 0x01, 0x16, 0x10, 0x2e, 0x01, // .463!54632...... + 0x20, 0x0e, 0x01, 0x10, 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, // ..... 6.... $.. + 0x12, 0x24, 0x20, 0x04, 0x04, 0x80, 0x09, 0xfe, 0xc0, 0x09, 0x0e, 0x0d, 0x13, 0xfe, 0xa0, 0x0d, // .$ ............. + 0x13, 0x13, 0x0d, 0x01, 0x60, 0x12, 0x0e, 0x0c, 0x0c, 0x01, 0x3f, 0xa9, 0x92, 0xfa, 0xfe, 0xd8, // ....`.....?..... + 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, // .....(..r....^.. + 0xce, 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0x8e, 0x1c, 0x09, 0xfe, 0xc0, 0x09, 0x13, // ...a...a........ + 0x0d, 0xc0, 0x13, 0x0d, 0xc0, 0x0d, 0x13, 0xc0, 0x0e, 0x12, 0x0a, 0xfe, 0xc1, 0xab, 0x01, 0x28, // ...............( + 0xfa, 0x92, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // .........._.^... + 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, // ..a...a......... + 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x19, 0x00, 0x25, 0x00, 0x31, 0x00, 0x00, 0x01, 0x15, // .........%.1.... + 0x14, 0x06, 0x23, 0x21, 0x15, 0x14, 0x06, 0x23, 0x22, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, // ..#!...#"'.&47.6 + 0x33, 0x32, 0x16, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x12, 0x10, 0x2e, 0x01, 0x20, 0x0e, 0x01, 0x10, // 32...!2..... ... + 0x1e, 0x01, 0x20, 0x36, 0x00, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, 0x20, 0x04, // .. 6.... $...$ . + 0x04, 0x80, 0x13, 0x0d, 0xfe, 0xa0, 0x12, 0x0e, 0x0c, 0x0c, 0xfe, 0xc1, 0x09, 0x09, 0x01, 0x40, // ...............@ + 0x09, 0x0e, 0x0d, 0x13, 0x01, 0x60, 0x0d, 0x13, 0xa0, 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, // .....`.......... + 0xfa, 0x01, 0x28, 0xfa, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ..(..r....^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xe0, 0xc0, 0x0d, 0x13, 0xc0, 0x0e, 0x12, 0x0a, 0x01, 0x3f, // a...a..........? + 0x09, 0x1c, 0x09, 0x01, 0x40, 0x09, 0x13, 0x0d, 0xc0, 0x13, 0xfe, 0xff, 0x01, 0x28, 0xfa, 0x92, // ....@........(.. + 0x92, 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0x02, 0x5f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, 0x01, // ........_.^..... + 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, // a...a........... + 0x05, 0x80, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, // ......./......#" + 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x33, 0x32, 0x16, 0x01, 0x11, 0x34, 0x26, 0x23, 0x21, // '.&47.632...4&#! + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x21, 0x32, 0x36, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, // ".....3!26....#! + 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0x00, 0x26, 0x1a, 0x14, 0x11, // "&5.463!2...&... + 0xfe, 0x40, 0x1b, 0x1b, 0x01, 0xc0, 0x11, 0x14, 0x1a, 0x26, 0x01, 0x00, 0x13, 0x0d, 0xfc, 0x40, // .@.......&.....@ + 0x0d, 0x13, 0x13, 0x0d, 0x03, 0xc0, 0x0d, 0x13, 0x01, 0x00, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, // ...........w.@w. + 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0x03, 0xc0, 0xfd, 0x80, 0x1a, 0x26, 0x0c, 0x01, 0x40, 0x13, // .w..w......&..@. + 0x42, 0x13, 0x01, 0x40, 0x0c, 0x26, 0xfc, 0xc6, 0x03, 0xc0, 0x0d, 0x13, 0x13, 0x0d, 0xfc, 0x40, // B..@.&.........@ + 0x0d, 0x13, 0x13, 0x03, 0xcd, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, // ......@w..w..w.. + 0x00, 0x03, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x07, 0x00, 0x13, 0x00, 0x1f, // ................ + 0x00, 0x00, 0x00, 0x14, 0x06, 0x22, 0x26, 0x34, 0x36, 0x32, 0x12, 0x20, 0x0e, 0x01, 0x10, 0x1e, // ....."&462. .... + 0x01, 0x20, 0x3e, 0x01, 0x10, 0x26, 0x04, 0x10, 0x02, 0x04, 0x20, 0x24, 0x02, 0x10, 0x12, 0x24, // . >..&.... $...$ + 0x20, 0x04, 0x04, 0x00, 0x96, 0xd4, 0x96, 0x96, 0xd4, 0x2a, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, // ........*...... + 0x01, 0x28, 0xfa, 0x92, 0x92, 0x01, 0x72, 0xce, 0xfe, 0x9f, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, 0xce, // .(....r....^.... + 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0x02, 0xea, 0xd4, 0x96, 0x96, 0xd4, 0x96, 0x01, 0x20, 0x92, // .a...a........ . + 0xfa, 0xfe, 0xd8, 0xfa, 0x92, 0x92, 0xfa, 0x01, 0x28, 0xfa, 0xbd, 0xfe, 0x5e, 0xfe, 0x9f, 0xce, // ........(...^... + 0xce, 0x01, 0x61, 0x01, 0xa2, 0x01, 0x61, 0xce, 0xce, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, // ..a...a......... + 0xff, 0x00, 0x06, 0x5d, 0x05, 0xe0, 0x00, 0x15, 0x00, 0x36, 0x00, 0x00, 0x01, 0x17, 0x06, 0x04, // ...].....6...... + 0x23, 0x22, 0x24, 0x02, 0x35, 0x34, 0x12, 0x37, 0x17, 0x0e, 0x01, 0x15, 0x14, 0x00, 0x33, 0x32, // #"$.54.7......32 + 0x3e, 0x01, 0x25, 0x17, 0x05, 0x06, 0x23, 0x22, 0x27, 0x03, 0x21, 0x22, 0x26, 0x27, 0x03, 0x26, // >.%...#"'.!"&'.& + 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x27, 0x13, 0x21, 0x15, 0x21, 0x17, 0x21, // 7>.32....'.!.!.! + 0x32, 0x17, 0x13, 0x03, 0xff, 0x66, 0x3a, 0xfe, 0xd0, 0xbb, 0x9c, 0xfe, 0xf7, 0x9b, 0xd1, 0xaa, // 2....f:......... + 0x11, 0x7a, 0x92, 0x01, 0x07, 0xb9, 0x7e, 0xd5, 0x75, 0x02, 0x1b, 0x3a, 0xff, 0x00, 0x0d, 0x10, // .z....~.u..:.... + 0x28, 0x11, 0xef, 0xfe, 0x28, 0x18, 0x25, 0x03, 0x60, 0x02, 0x08, 0x0e, 0x56, 0x36, 0x42, 0x5e, // (...(.%.`...V6B^ + 0x68, 0x44, 0x25, 0x01, 0xa7, 0xfe, 0x69, 0x10, 0x01, 0xc7, 0x28, 0x11, 0xe4, 0x01, 0x5d, 0xcc, // hD%...i...(...]. + 0xb3, 0xde, 0x9b, 0x01, 0x09, 0x9c, 0xb5, 0x01, 0x2a, 0x3e, 0x83, 0x36, 0xdf, 0x85, 0xb9, 0xfe, // ........*>.6.... + 0xf9, 0x82, 0xdd, 0x1a, 0x72, 0x80, 0x07, 0x23, 0x01, 0xdd, 0x21, 0x18, 0x03, 0x0b, 0x10, 0x1a, // ....r..#..!..... + 0x33, 0x3f, 0x5e, 0x42, 0x45, 0x61, 0x07, 0xfe, 0xdf, 0x80, 0x80, 0x23, 0xfe, 0x39, 0x00, 0x00, // 3?^BEa.....#.9.. + 0x00, 0x02, 0x00, 0x00, 0xff, 0x80, 0x06, 0x00, 0x05, 0x80, 0x00, 0x3b, 0x00, 0x4b, 0x00, 0x00, // ...........;.K.. + 0x01, 0x36, 0x27, 0x26, 0x07, 0x0e, 0x04, 0x07, 0x36, 0x16, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, // .6'&....6....... + 0x27, 0x2e, 0x03, 0x27, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x07, 0x0e, 0x01, 0x07, 0x15, 0x1e, // '..'&'..'&...... + 0x01, 0x17, 0x16, 0x36, 0x16, 0x17, 0x1e, 0x02, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, 0x17, 0x16, // ...6............ + 0x36, 0x37, 0x36, 0x37, 0x36, 0x12, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, // 67676.....#!"&5. + 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x04, 0xe6, 0x10, 0x25, 0x34, 0x87, 0x11, 0x30, 0x43, 0x3e, // 463!2....%4..0C> + 0x39, 0x10, 0x50, 0x43, 0x07, 0x05, 0x2f, 0x2b, 0x1c, 0x2c, 0x2b, 0x17, 0x1d, 0x09, 0x0b, 0x03, // 9.PC../+.,+..... + 0x17, 0x0b, 0x0c, 0x2f, 0x1b, 0x39, 0x46, 0x36, 0xa5, 0x28, 0x10, 0x13, 0x0c, 0x15, 0x43, 0x31, // .../.9F6.(....C1 + 0x11, 0x0b, 0x0f, 0x0f, 0x05, 0x11, 0x24, 0x24, 0x15, 0x2a, 0x3d, 0x2b, 0x54, 0x22, 0x83, 0x77, // ......$$.*=+T".w + 0x68, 0x89, 0x01, 0x28, 0xa9, 0x77, 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, // h..(.w.@w..w..w. + 0x03, 0x83, 0x55, 0x2f, 0x41, 0x14, 0x03, 0x13, 0x2a, 0x37, 0x55, 0x31, 0x07, 0x2e, 0x4c, 0x34, // ..U/A...*7U1..L4 + 0x5b, 0x4e, 0x15, 0x20, 0x2e, 0x18, 0x51, 0x41, 0x67, 0x14, 0x81, 0x23, 0x25, 0x40, 0x08, 0x10, // [N. ..QAg..#%@.. + 0x29, 0x20, 0x94, 0x1c, 0x07, 0x08, 0x24, 0x02, 0x03, 0x17, 0x02, 0x1d, 0x12, 0x29, 0x37, 0x0d, // ) ....$......)7. + 0x2e, 0x8d, 0x92, 0x33, 0x63, 0x1a, 0x0c, 0x15, 0x15, 0x4d, 0xa0, 0x8b, 0x01, 0x33, 0x01, 0x26, // ...3c....M...3.& + 0xfc, 0x40, 0x77, 0xa9, 0xa9, 0x77, 0x03, 0xc0, 0x77, 0xa9, 0xa9, 0x00, 0x00, 0x01, 0x00, 0x00, // .@w..w..w....... + 0x00, 0x00, 0x04, 0x80, 0x05, 0x80, 0x00, 0x44, 0x00, 0x00, 0x01, 0x14, 0x02, 0x04, 0x2b, 0x01, // .......D......+. + 0x22, 0x26, 0x35, 0x11, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x35, // "&5...#"'&=.4?.5 + 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3d, 0x01, 0x34, 0x3f, 0x01, 0x35, 0x34, 0x36, 0x3b, 0x01, // ..#"'&=.4?.546;. + 0x32, 0x16, 0x1d, 0x01, 0x25, 0x36, 0x16, 0x1d, 0x01, 0x14, 0x07, 0x05, 0x15, 0x25, 0x36, 0x16, // 2...%6.......%6. + 0x1d, 0x01, 0x14, 0x07, 0x05, 0x11, 0x36, 0x00, 0x35, 0x34, 0x36, 0x3b, 0x01, 0x32, 0x16, 0x04, // ......6.546;.2.. + 0x80, 0xbd, 0xfe, 0xbc, 0xbf, 0xa0, 0x0e, 0x12, 0xd7, 0x03, 0x06, 0x0a, 0x09, 0x0d, 0x17, 0xe9, // ................ + 0xd7, 0x03, 0x06, 0x0a, 0x09, 0x0d, 0x17, 0xe9, 0x12, 0x0e, 0xa0, 0x0e, 0x12, 0x01, 0x77, 0x0f, // ..............w. + 0x1a, 0x17, 0xfe, 0x77, 0x01, 0x77, 0x0f, 0x1a, 0x17, 0xfe, 0x77, 0xbc, 0x01, 0x04, 0x12, 0x0e, // ...w.w....w..... + 0xa0, 0x0e, 0x12, 0x02, 0xc0, 0xbf, 0xfe, 0xbc, 0xbd, 0x12, 0x0e, 0x02, 0x63, 0x42, 0x01, 0x06, // ............cB.. + 0x0a, 0x10, 0x80, 0x17, 0x08, 0x47, 0x5d, 0x42, 0x01, 0x06, 0x0a, 0x10, 0x80, 0x17, 0x08, 0x47, // .....G]B.......G + 0xfa, 0x0e, 0x12, 0x12, 0x0e, 0xb5, 0x74, 0x05, 0x14, 0x10, 0x80, 0x17, 0x08, 0x79, 0x5d, 0x74, // ......t......y]t + 0x05, 0x14, 0x10, 0x80, 0x17, 0x08, 0x79, 0xfe, 0x19, 0x0d, 0x01, 0x14, 0xbe, 0x0e, 0x12, 0x12, // ......y......... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x83, 0xdd, 0xb2, 0x75, 0x64, 0x5f, 0x0f, 0x3c, 0xf5, // ..........ud_.<. + 0x00, 0x0b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x8c, 0xf1, 0xdb, 0x00, 0x00, 0x00, 0x00, // ................ + 0xce, 0x8c, 0xf1, 0xdb, 0xff, 0xff, 0xff, 0x00, 0x07, 0x80, 0x06, 0x00, 0x00, 0x00, 0x00, 0x08, // ................ + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0xfe, 0xdd, // ................ + 0x00, 0x00, 0x07, 0x80, 0xff, 0xff, 0xff, 0xff, 0x07, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x8d, 0x03, 0x80, 0x00, 0x70, // ...............p + 0x00, 0x00, 0x00, 0x00, 0x02, 0x55, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, // .....U.......... + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // ................ + 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x33, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, // .........3...U.. + 0x01, 0x33, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // .3.............. + 0x07, 0x00, 0x00, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x07, 0x00, 0x00, 0x5d, 0x06, 0x00, 0x00, 0x00, // ...........].... + 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x79, 0x05, 0x80, 0x00, 0x6e, // ...........y...n + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x1a, 0x05, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x32, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......2........ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x06, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x7a, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...z............ + 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x00, 0x01, // ................ + 0x04, 0x80, 0x00, 0x35, 0x04, 0x80, 0x00, 0x75, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...5...u........ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x35, 0x06, 0x80, 0x00, 0x35, // ...@.......5...5 + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0d, 0x05, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x7a, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // .......z........ + 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x10, 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x35, 0x06, 0x80, 0x00, 0x35, // ...........5...5 + 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x03, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...@............ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x2c, 0x03, 0x00, 0x00, 0x00, // ...........,.... + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x15, 0x07, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x05, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x10, // ................ + 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x73, 0x07, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, // .......s........ + 0x05, 0x80, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x1b, 0x07, 0x00, 0x00, 0x40, 0x06, 0x00, 0x00, 0x00, // ...........@.... + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, 0x02, 0x80, 0x00, 0x00, // ...........@.... + 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x28, // ...............( + 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x01, // ................ + 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, // ................ + 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x07, 0x80, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x40, // ...@...........@ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x2d, 0x04, 0x00, 0x00, 0x0d, // ...........-.... + 0x04, 0x80, 0x00, 0x4d, 0x04, 0x80, 0x00, 0x4d, 0x02, 0x80, 0x00, 0x2d, 0x02, 0x80, 0x00, 0x0d, // ...M...M...-.... + 0x04, 0x80, 0x00, 0x4d, 0x04, 0x80, 0x00, 0x4d, 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, // ...M...M........ + 0x04, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, // ..... .......... + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ + 0x04, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x07, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x40, // ...........@...@ + 0x06, 0x80, 0x00, 0x0d, 0x07, 0x80, 0x00, 0x2d, 0x07, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x02, // .......-........ + 0x05, 0x80, 0x00, 0x02, 0x06, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x60, 0x02, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x62, 0x06, 0x00, 0x00, 0x05, // ...`.......b.... + 0x06, 0x00, 0x00, 0x05, 0x07, 0x80, 0x00, 0x01, 0x06, 0x80, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x0d, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x03, // ................ + 0x06, 0x80, 0x00, 0x24, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ...$............ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0c, // ................ + 0x07, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, // ................ + 0x01, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x36, // ...............6 + 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x03, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x34, 0x03, 0x82, 0x00, 0x00, // ...........4.... + 0x04, 0x03, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x38, // ...............8 + 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x22, 0x06, 0x80, 0x00, 0x22, // ..........."..." + 0x07, 0x00, 0x00, 0x22, 0x07, 0x00, 0x00, 0x22, 0x06, 0x00, 0x00, 0x22, 0x06, 0x00, 0x00, 0x22, // ..."..."..."..." + 0x06, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x1b, // ................ + 0x05, 0x80, 0x00, 0x05, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, // ...............@ + 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x4e, 0x06, 0x00, 0x00, 0x00, // ...........N.... + 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, // ...........@.... + 0x05, 0x80, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0b, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x2c, // ..............., + 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x06, 0x80, 0x00, 0x20, 0x07, 0x80, 0xff, 0xff, // .......@... .... + 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x15, // ................ + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, // ................ + 0x06, 0x80, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x07, 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, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, // ................ + 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, // ................ + 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, // ................ + 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x16, 0x00, 0x1e, 0x00, 0x50, 0x00, 0x92, // .............P.. + 0x00, 0xd4, 0x01, 0x42, 0x01, 0x70, 0x01, 0xae, 0x02, 0x00, 0x02, 0x3c, 0x03, 0x24, 0x03, 0x82, // ...B.p.....<.$.. + 0x04, 0x48, 0x04, 0xce, 0x04, 0xfa, 0x05, 0x3c, 0x05, 0xa6, 0x05, 0xfc, 0x06, 0x54, 0x06, 0xc4, // .H.....<.....T.. + 0x07, 0x66, 0x07, 0xfc, 0x08, 0x54, 0x08, 0x92, 0x08, 0xe0, 0x09, 0x48, 0x09, 0xa8, 0x09, 0xfe, // .f...T.....H.... + 0x0a, 0x52, 0x0a, 0x90, 0x0a, 0xda, 0x0b, 0x2c, 0x0b, 0x9a, 0x0c, 0x44, 0x0c, 0x78, 0x0c, 0xca, // .R.....,...D.x.. + 0x0d, 0x36, 0x0d, 0x5c, 0x0d, 0xa4, 0x0e, 0x44, 0x0e, 0xa8, 0x0f, 0x16, 0x0f, 0x4c, 0x0f, 0xa6, // .6.....D.....L.. + 0x10, 0x58, 0x10, 0x8a, 0x10, 0xe2, 0x11, 0x2a, 0x11, 0xaa, 0x12, 0x44, 0x12, 0xb6, 0x13, 0x78, // .X.....*...D...x + 0x14, 0x38, 0x14, 0x94, 0x14, 0xf0, 0x15, 0x4a, 0x15, 0xa4, 0x16, 0x4e, 0x16, 0xc0, 0x17, 0x32, // .8.....J...N...2 + 0x17, 0x66, 0x17, 0xb2, 0x17, 0xf6, 0x18, 0x24, 0x18, 0x50, 0x18, 0x98, 0x19, 0x10, 0x19, 0x8e, // .f.....$.P...... + 0x19, 0xf8, 0x1a, 0x60, 0x1a, 0x90, 0x1a, 0xd6, 0x1b, 0x06, 0x1b, 0x22, 0x1b, 0x56, 0x1b, 0x74, // ...`.......".V.t + 0x1b, 0xa4, 0x1b, 0xea, 0x1c, 0x1a, 0x1c, 0x4c, 0x1c, 0x76, 0x1c, 0xa4, 0x1c, 0xf0, 0x1d, 0x24, // .......L.v.....$ + 0x1d, 0x7e, 0x1d, 0xc0, 0x1e, 0x2a, 0x1e, 0x82, 0x1f, 0x02, 0x1f, 0x68, 0x1f, 0xbc, 0x1f, 0xfe, // .~...*.....h.... + 0x20, 0x36, 0x20, 0x6e, 0x20, 0xa8, 0x20, 0xe2, 0x21, 0x26, 0x21, 0x76, 0x21, 0xc6, 0x21, 0xfc, // 6 n . .!&!v!.!. + 0x22, 0x18, 0x22, 0x70, 0x22, 0xbc, 0x23, 0x26, 0x23, 0x98, 0x23, 0xe2, 0x24, 0x38, 0x24, 0xc0, // "."p".#&#.#.$8$. + 0x25, 0x10, 0x25, 0x66, 0x26, 0x20, 0x26, 0xbc, 0x26, 0xfc, 0x27, 0x60, 0x27, 0x8c, 0x27, 0xbc, // %.%f& &.&.'`'.'. + 0x28, 0x2a, 0x28, 0x82, 0x28, 0xa6, 0x28, 0xec, 0x29, 0x22, 0x29, 0x58, 0x29, 0xac, 0x2a, 0x0c, // (*(.(.(.)")X).*. + 0x2a, 0x42, 0x2a, 0xa6, 0x2b, 0x0e, 0x2c, 0x6e, 0x2c, 0xe4, 0x2d, 0x7a, 0x2e, 0x14, 0x2e, 0x3a, // *B*.+.,n,.-z...: + 0x2e, 0x92, 0x2e, 0xf0, 0x2f, 0x40, 0x2f, 0x88, 0x2f, 0xe6, 0x30, 0x44, 0x30, 0xac, 0x31, 0x7e, // ..../@/./.0D0.1~ + 0x31, 0xe2, 0x32, 0x6c, 0x32, 0xe0, 0x33, 0x12, 0x33, 0x52, 0x33, 0xcc, 0x34, 0x1a, 0x34, 0x3e, // 1.2l2.3.3R3.4.4> + 0x34, 0xbc, 0x34, 0xf6, 0x35, 0x38, 0x35, 0x9c, 0x36, 0x00, 0x36, 0x56, 0x36, 0xac, 0x37, 0x22, // 4.4.585.6.6V6.7" + 0x37, 0xb2, 0x38, 0x50, 0x38, 0xe0, 0x39, 0x7c, 0x39, 0xca, 0x3a, 0x16, 0x3a, 0x62, 0x3a, 0xb0, // 7.8P8.9|9.:.:b:. + 0x3d, 0xbe, 0x3e, 0x0e, 0x3e, 0x6c, 0x3e, 0x96, 0x3e, 0xe0, 0x3f, 0x52, 0x3f, 0xd8, 0x40, 0x6c, // =.>.>l>.>.?R?.@l + 0x40, 0x9a, 0x40, 0xd4, 0x41, 0xb2, 0x42, 0x18, 0x42, 0x78, 0x42, 0xe2, 0x43, 0x00, 0x43, 0x44, // @.@.A.B.BxB.C.CD + 0x43, 0xae, 0x44, 0x5a, 0x44, 0xee, 0x45, 0x96, 0x46, 0x72, 0x46, 0xd4, 0x47, 0x44, 0x47, 0xb2, // C.DZD.E.FrF.GDG. + 0x48, 0x1e, 0x48, 0xae, 0x49, 0x46, 0x49, 0xa2, 0x49, 0xc0, 0x49, 0xde, 0x49, 0xfc, 0x4a, 0x1a, // H.H.IFI.I.I.I.J. + 0x4a, 0x4c, 0x4a, 0x80, 0x4a, 0x9e, 0x4a, 0xbc, 0x4b, 0x14, 0x4b, 0x5c, 0x4b, 0xae, 0x4c, 0x4a, // JLJ.J.J.K.K.K.LJ + 0x4c, 0xc8, 0x4d, 0x2a, 0x4d, 0xbe, 0x4d, 0xf8, 0x4e, 0x68, 0x4e, 0xec, 0x4f, 0x46, 0x4f, 0xc8, // L.M*M.M.NhN.OFO. + 0x50, 0x18, 0x50, 0x6a, 0x50, 0xbe, 0x51, 0x44, 0x51, 0xb2, 0x51, 0xee, 0x52, 0x32, 0x52, 0x6a, // P.PjP.QDQ.Q.R2Rj + 0x52, 0xc8, 0x53, 0x32, 0x54, 0xcc, 0x56, 0x08, 0x56, 0x92, 0x56, 0xfa, 0x57, 0x4c, 0x57, 0x78, // R.S2T.V.V.V.WLWx + 0x57, 0xc4, 0x58, 0x10, 0x58, 0x5c, 0x58, 0xa8, 0x58, 0xf4, 0x59, 0x40, 0x59, 0x6a, 0x59, 0x94, // W.X.X.X.X.Y@YjY. + 0x59, 0xbe, 0x59, 0xe8, 0x5a, 0x30, 0x5a, 0x7e, 0x5a, 0xbc, 0x5b, 0x04, 0x5b, 0x36, 0x5b, 0x92, // Y.Y.Z0Z~Z.[.[6[. + 0x5b, 0xee, 0x5c, 0x56, 0x5c, 0x74, 0x5c, 0xb8, 0x5d, 0x36, 0x5d, 0x78, 0x5d, 0xe2, 0x5e, 0x40, // [..V.t..]6]x].^@ + 0x5e, 0x88, 0x5e, 0xf6, 0x5f, 0x64, 0x5f, 0xc2, 0x60, 0x24, 0x61, 0x06, 0x61, 0x84, 0x62, 0x28, // ^.^._d_.`$a.a.b( + 0x62, 0x68, 0x62, 0xd0, 0x63, 0x32, 0x63, 0x80, 0x63, 0xaa, 0x63, 0xfe, 0x64, 0x6c, 0x65, 0x3c, // bhb.c2c.c.c.dle< + 0x65, 0x94, 0x65, 0xd6, 0x66, 0x0a, 0x66, 0x74, 0x66, 0xdc, 0x67, 0x0c, 0x67, 0x96, 0x67, 0xe6, // e.e.f.ftf.g.g.g. + 0x68, 0x58, 0x68, 0x90, 0x68, 0xf4, 0x69, 0x62, 0x69, 0xb2, 0x69, 0xe0, 0x6a, 0x20, 0x6a, 0x60, // hXh.h.ibi.i.j j` + 0x6a, 0xa2, 0x6a, 0xe2, 0x6b, 0x12, 0x6b, 0x38, 0x6b, 0xb2, 0x6b, 0xea, 0x6c, 0x4c, 0x6c, 0x90, // j.j.k.k8k.k.lLl. + 0x6c, 0xd2, 0x6d, 0x40, 0x6d, 0x76, 0x6d, 0xcc, 0x6d, 0xfe, 0x6e, 0x46, 0x6e, 0x78, 0x6e, 0xa8, // l.m@mvm.m.nFnxn. + 0x6e, 0xe6, 0x6f, 0x3c, 0x6f, 0x80, 0x6f, 0xd2, 0x70, 0x14, 0x70, 0x5e, 0x70, 0xa8, 0x70, 0xf2, // n.o + 0x01, 0x3f, 0x01, 0x40, 0x01, 0x41, 0x01, 0x42, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, // .?.@.A.B.C.D.E.F + 0x01, 0x47, 0x01, 0x48, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4b, 0x01, 0x4c, 0x01, 0x4d, 0x01, 0x4e, // .G.H.I.J.K.L.M.N + 0x01, 0x4f, 0x01, 0x50, 0x01, 0x51, 0x01, 0x52, 0x01, 0x53, 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, // .O.P.Q.R.S.T.U.V + 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5a, 0x01, 0x5b, 0x01, 0x5c, 0x01, 0x5d, 0x01, 0x5e, // .W.X.Y.Z.[...].^ + 0x01, 0x5f, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64, 0x01, 0x65, 0x01, 0x66, // ._.`.a.b.c.d.e.f + 0x01, 0x67, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6a, 0x01, 0x6b, 0x01, 0x6c, 0x01, 0x6d, 0x01, 0x6e, // .g.h.i.j.k.l.m.n + 0x01, 0x6f, 0x01, 0x70, 0x01, 0x71, 0x00, 0x0e, 0x00, 0xef, 0x00, 0x0d, 0x01, 0x72, 0x01, 0x73, // .o.p.q.......r.s + 0x01, 0x74, 0x01, 0x75, 0x01, 0x76, 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7b, // .t.u.v.w.x.y.z.{ + 0x01, 0x7c, 0x01, 0x7d, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x81, 0x01, 0x82, 0x01, 0x83, // .|.}.~.......... + 0x01, 0x84, 0x01, 0x85, 0x01, 0x86, 0x01, 0x87, 0x01, 0x88, 0x01, 0x89, 0x01, 0x8a, 0x01, 0x8b, // ................ + 0x01, 0x8c, 0x01, 0x8d, 0x01, 0x8e, 0x01, 0x8f, 0x01, 0x90, 0x01, 0x91, 0x01, 0x92, 0x01, 0x93, // ................ + 0x01, 0x94, 0x01, 0x95, 0x01, 0x96, 0x01, 0x97, 0x01, 0x98, 0x01, 0x99, 0x01, 0x9a, 0x01, 0x9b, // ................ + 0x01, 0x9c, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0x9f, 0x01, 0xa0, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, // ................ + 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, 0x01, 0xa7, 0x01, 0xa8, 0x01, 0xa9, 0x01, 0xaa, 0x01, 0xab, // ................ + 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb0, 0x01, 0xb1, 0x01, 0xb2, 0x01, 0xb3, // ................ + 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xb6, 0x01, 0xb7, 0x01, 0xb8, 0x01, 0xb9, 0x01, 0xba, 0x01, 0xbb, // ................ + 0x01, 0xbc, 0x01, 0xbd, 0x01, 0xbe, 0x01, 0xbf, 0x01, 0xc0, 0x01, 0xc1, 0x01, 0xc2, 0x01, 0xc3, // ................ + 0x01, 0xc4, 0x01, 0xc5, 0x01, 0xc6, 0x01, 0xc7, 0x01, 0xc8, 0x01, 0xc9, 0x01, 0xca, 0x01, 0xcb, // ................ + 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, 0x01, 0xcf, 0x01, 0xd0, 0x01, 0xd1, 0x01, 0xd2, 0x01, 0xd3, // ................ + 0x01, 0xd4, 0x01, 0xd5, 0x01, 0xd6, 0x01, 0xd7, 0x01, 0xd8, 0x01, 0xd9, 0x01, 0xda, 0x01, 0xdb, // ................ + 0x01, 0xdc, 0x01, 0xdd, 0x01, 0xde, 0x01, 0xdf, 0x01, 0xe0, 0x01, 0xe1, 0x01, 0xe2, 0x01, 0xe3, // ................ + 0x01, 0xe4, 0x01, 0xe5, 0x01, 0xe6, 0x01, 0xe7, 0x01, 0xe8, 0x01, 0xe9, 0x01, 0xea, 0x01, 0xeb, // ................ + 0x01, 0xec, 0x01, 0xed, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf0, 0x01, 0xf1, 0x01, 0xf2, 0x01, 0xf3, // ................ + 0x01, 0xf4, 0x01, 0xf5, 0x01, 0xf6, 0x01, 0xf7, 0x01, 0xf8, 0x01, 0xf9, 0x01, 0xfa, 0x01, 0xfb, // ................ + 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x02, 0x00, 0x02, 0x01, 0x02, 0x02, 0x02, 0x03, // ................ + 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, 0x02, 0x09, 0x02, 0x0a, 0x02, 0x0b, // ................ + 0x02, 0x0c, 0x02, 0x0d, 0x02, 0x0e, 0x02, 0x0f, 0x02, 0x10, 0x02, 0x11, 0x02, 0x12, 0x02, 0x13, // ................ + 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x00, 0x22, 0x02, 0x18, 0x02, 0x19, 0x02, 0x1a, // ........."...... + 0x02, 0x1b, 0x02, 0x1c, 0x02, 0x1d, 0x02, 0x1e, 0x02, 0x1f, 0x02, 0x20, 0x02, 0x21, 0x02, 0x22, // ........... .!." + 0x02, 0x23, 0x02, 0x24, 0x02, 0x25, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28, 0x02, 0x29, 0x02, 0x2a, // .#.$.%.&.'.(.).* + 0x02, 0x2b, 0x02, 0x2c, 0x02, 0x2d, 0x02, 0x2e, 0x02, 0x2f, 0x02, 0x30, 0x02, 0x31, 0x02, 0x32, // .+.,.-.../.0.1.2 + 0x02, 0x33, 0x02, 0x34, 0x02, 0x35, 0x02, 0x36, 0x02, 0x37, 0x02, 0x38, 0x02, 0x39, 0x02, 0x3a, // .3.4.5.6.7.8.9.: + 0x02, 0x3b, 0x02, 0x3c, 0x02, 0x3d, 0x02, 0x3e, 0x02, 0x3f, 0x02, 0x40, 0x02, 0x41, 0x02, 0x42, // .;.<.=.>.?.@.A.B + 0x02, 0x43, 0x02, 0x44, 0x02, 0x45, 0x02, 0x46, 0x02, 0x47, 0x02, 0x48, 0x02, 0x49, 0x02, 0x4a, // .C.D.E.F.G.H.I.J + 0x02, 0x4b, 0x02, 0x4c, 0x02, 0x4d, 0x02, 0x4e, 0x02, 0x4f, 0x02, 0x50, 0x02, 0x51, 0x02, 0x52, // .K.L.M.N.O.P.Q.R + 0x02, 0x53, 0x02, 0x54, 0x02, 0x55, 0x02, 0x56, 0x02, 0x57, 0x02, 0x58, 0x02, 0x59, 0x02, 0x5a, // .S.T.U.V.W.X.Y.Z + 0x02, 0x5b, 0x02, 0x5c, 0x02, 0x5d, 0x02, 0x5e, 0x02, 0x5f, 0x02, 0x60, 0x02, 0x61, 0x02, 0x62, // .[...].^._.`.a.b + 0x00, 0xd2, 0x02, 0x63, 0x02, 0x64, 0x02, 0x65, 0x02, 0x66, 0x02, 0x67, 0x02, 0x68, 0x02, 0x69, // ...c.d.e.f.g.h.i + 0x02, 0x6a, 0x02, 0x6b, 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x6e, 0x02, 0x6f, 0x02, 0x70, 0x02, 0x71, // .j.k.l.m.n.o.p.q + 0x02, 0x72, 0x02, 0x73, 0x02, 0x74, 0x02, 0x75, 0x02, 0x76, 0x02, 0x77, 0x02, 0x78, 0x02, 0x79, // .r.s.t.u.v.w.x.y + 0x02, 0x7a, 0x02, 0x7b, 0x02, 0x7c, 0x02, 0x7d, 0x02, 0x7e, 0x02, 0x7f, 0x02, 0x80, 0x02, 0x81, // .z.{.|.}.~...... + 0x02, 0x82, 0x02, 0x83, 0x02, 0x84, 0x02, 0x85, 0x00, 0x94, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, // ...........uni00 + 0x41, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // A0.uni2000.uni20 + 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 01.uni2002.uni20 + 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 03.uni2004.uni20 + 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 05.uni2006.uni20 + 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 07.uni2008.uni20 + 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 09.uni200A.uni20 + 0x32, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x35, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x45, 0x30, // 2F.uni205F.uniE0 + 0x30, 0x30, 0x05, 0x67, 0x6c, 0x61, 0x73, 0x73, 0x05, 0x6d, 0x75, 0x73, 0x69, 0x63, 0x06, 0x73, // 00.glass.music.s + 0x65, 0x61, 0x72, 0x63, 0x68, 0x08, 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x05, 0x68, // earch.envelope.h + 0x65, 0x61, 0x72, 0x74, 0x04, 0x73, 0x74, 0x61, 0x72, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x65, // eart.star.star_e + 0x6d, 0x70, 0x74, 0x79, 0x04, 0x75, 0x73, 0x65, 0x72, 0x04, 0x66, 0x69, 0x6c, 0x6d, 0x08, 0x74, // mpty.user.film.t + 0x68, 0x5f, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x02, 0x74, 0x68, 0x07, 0x74, 0x68, 0x5f, 0x6c, 0x69, // h_large.th.th_li + 0x73, 0x74, 0x02, 0x6f, 0x6b, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x07, 0x7a, 0x6f, 0x6f, // st.ok.remove.zoo + 0x6d, 0x5f, 0x69, 0x6e, 0x08, 0x7a, 0x6f, 0x6f, 0x6d, 0x5f, 0x6f, 0x75, 0x74, 0x03, 0x6f, 0x66, // m_in.zoom_out.of + 0x66, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x03, 0x63, 0x6f, 0x67, 0x05, 0x74, 0x72, 0x61, // f.signal.cog.tra + 0x73, 0x68, 0x04, 0x68, 0x6f, 0x6d, 0x65, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x74, // sh.home.file_alt + 0x04, 0x74, 0x69, 0x6d, 0x65, 0x04, 0x72, 0x6f, 0x61, 0x64, 0x0c, 0x64, 0x6f, 0x77, 0x6e, 0x6c, // .time.road.downl + 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, // oad_alt.download + 0x06, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x05, 0x69, 0x6e, 0x62, 0x6f, 0x78, 0x0b, 0x70, 0x6c, // .upload.inbox.pl + 0x61, 0x79, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x06, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, // ay_circle.repeat + 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, // .refresh.list_al + 0x74, 0x04, 0x6c, 0x6f, 0x63, 0x6b, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x0a, 0x68, 0x65, 0x61, 0x64, // t.lock.flag.head + 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x73, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6f, 0x66, // phones.volume_of + 0x66, 0x0b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x09, 0x76, 0x6f, // f.volume_down.vo + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x75, 0x70, 0x06, 0x71, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x07, 0x62, // lume_up.qrcode.b + 0x61, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x03, 0x74, 0x61, 0x67, 0x04, 0x74, 0x61, 0x67, 0x73, 0x04, // arcode.tag.tags. + 0x62, 0x6f, 0x6f, 0x6b, 0x08, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x05, 0x70, 0x72, // book.bookmark.pr + 0x69, 0x6e, 0x74, 0x06, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x04, 0x66, 0x6f, 0x6e, 0x74, 0x04, // int.camera.font. + 0x62, 0x6f, 0x6c, 0x64, 0x06, 0x69, 0x74, 0x61, 0x6c, 0x69, 0x63, 0x0b, 0x74, 0x65, 0x78, 0x74, // bold.italic.text + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x0a, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x77, 0x69, 0x64, // _height.text_wid + 0x74, 0x68, 0x0a, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0c, 0x61, 0x6c, // th.align_left.al + 0x69, 0x67, 0x6e, 0x5f, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x0b, 0x61, 0x6c, 0x69, 0x67, 0x6e, // ign_center.align + 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x0d, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x5f, 0x6a, 0x75, 0x73, // _right.align_jus + 0x74, 0x69, 0x66, 0x79, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, // tify.list.indent + 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x69, 0x67, // _left.indent_rig + 0x68, 0x74, 0x0e, 0x66, 0x61, 0x63, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x76, 0x69, 0x64, 0x65, // ht.facetime_vide + 0x6f, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x06, 0x70, 0x65, 0x6e, 0x63, 0x69, 0x6c, // o.picture.pencil + 0x0a, 0x6d, 0x61, 0x70, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x06, 0x61, 0x64, 0x6a, 0x75, // .map_marker.adju + 0x73, 0x74, 0x04, 0x74, 0x69, 0x6e, 0x74, 0x04, 0x65, 0x64, 0x69, 0x74, 0x05, 0x73, 0x68, 0x61, // st.tint.edit.sha + 0x72, 0x65, 0x05, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x04, 0x6d, 0x6f, 0x76, 0x65, 0x0d, 0x73, 0x74, // re.check.move.st + 0x65, 0x70, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x0d, 0x66, 0x61, 0x73, 0x74, // ep_backward.fast + 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, 0x72, 0x64, 0x08, 0x62, 0x61, 0x63, 0x6b, 0x77, 0x61, // _backward.backwa + 0x72, 0x64, 0x04, 0x70, 0x6c, 0x61, 0x79, 0x05, 0x70, 0x61, 0x75, 0x73, 0x65, 0x04, 0x73, 0x74, // rd.play.pause.st + 0x6f, 0x70, 0x07, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x0c, 0x66, 0x61, 0x73, 0x74, 0x5f, // op.forward.fast_ + 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x0c, 0x73, 0x74, 0x65, 0x70, 0x5f, 0x66, 0x6f, 0x72, // forward.step_for + 0x77, 0x61, 0x72, 0x64, 0x05, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x0c, 0x63, 0x68, 0x65, 0x76, 0x72, // ward.eject.chevr + 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0d, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, // on_left.chevron_ + 0x72, 0x69, 0x67, 0x68, 0x74, 0x09, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, // right.plus_sign. + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x76, // minus_sign.remov + 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x6f, 0x6b, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0d, 0x71, // e_sign.ok_sign.q + 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x09, 0x69, 0x6e, 0x66, // uestion_sign.inf + 0x6f, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x73, 0x68, 0x6f, // o_sign.screensho + 0x74, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x09, // t.remove_circle. + 0x6f, 0x6b, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x0a, 0x62, 0x61, 0x6e, 0x5f, 0x63, 0x69, // ok_circle.ban_ci + 0x72, 0x63, 0x6c, 0x65, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, // rcle.arrow_left. + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x08, 0x61, 0x72, 0x72, 0x6f, // arrow_right.arro + 0x77, 0x5f, 0x75, 0x70, 0x0a, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x09, // w_up.arrow_down. + 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x0b, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, // share_alt.resize + 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x0c, 0x72, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x6d, 0x61, // _full.resize_sma + 0x6c, 0x6c, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, // ll.exclamation_s + 0x69, 0x67, 0x6e, 0x04, 0x67, 0x69, 0x66, 0x74, 0x04, 0x6c, 0x65, 0x61, 0x66, 0x04, 0x66, 0x69, // ign.gift.leaf.fi + 0x72, 0x65, 0x08, 0x65, 0x79, 0x65, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x09, 0x65, 0x79, 0x65, 0x5f, // re.eye_open.eye_ + 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x0c, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, // close.warning_si + 0x67, 0x6e, 0x05, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x08, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, // gn.plane.calenda + 0x72, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, // r.random.comment + 0x06, 0x6d, 0x61, 0x67, 0x6e, 0x65, 0x74, 0x0a, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, // .magnet.chevron_ + 0x75, 0x70, 0x0c, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, // up.chevron_down. + 0x72, 0x65, 0x74, 0x77, 0x65, 0x65, 0x74, 0x0d, 0x73, 0x68, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, // retweet.shopping + 0x5f, 0x63, 0x61, 0x72, 0x74, 0x0c, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x6f, // _cart.folder_clo + 0x73, 0x65, 0x0b, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x0f, 0x72, // se.folder_open.r + 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x11, 0x72, // esize_vertical.r + 0x65, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, // esize_horizontal + 0x09, 0x62, 0x61, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x74, 0x0c, 0x74, 0x77, 0x69, 0x74, 0x74, // .bar_chart.twitt + 0x65, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0d, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, // er_sign.facebook + 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0c, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x74, // _sign.camera_ret + 0x72, 0x6f, 0x03, 0x6b, 0x65, 0x79, 0x04, 0x63, 0x6f, 0x67, 0x73, 0x08, 0x63, 0x6f, 0x6d, 0x6d, // ro.key.cogs.comm + 0x65, 0x6e, 0x74, 0x73, 0x0d, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x73, 0x5f, 0x75, 0x70, 0x5f, 0x61, // ents.thumbs_up_a + 0x6c, 0x74, 0x0f, 0x74, 0x68, 0x75, 0x6d, 0x62, 0x73, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, 0x61, // lt.thumbs_down_a + 0x6c, 0x74, 0x09, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x0b, 0x68, 0x65, 0x61, // lt.star_half.hea + 0x72, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x6f, 0x75, 0x74, // rt_empty.signout + 0x0d, 0x6c, 0x69, 0x6e, 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x70, // .linkedin_sign.p + 0x75, 0x73, 0x68, 0x70, 0x69, 0x6e, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, // ushpin.external_ + 0x6c, 0x69, 0x6e, 0x6b, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x06, 0x74, 0x72, 0x6f, 0x70, // link.signin.trop + 0x68, 0x79, 0x0b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0a, 0x75, // hy.github_sign.u + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x6c, 0x74, 0x05, 0x6c, 0x65, 0x6d, 0x6f, 0x6e, 0x05, // pload_alt.lemon. + 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x65, 0x6d, 0x70, 0x74, // phone.check_empt + 0x79, 0x0e, 0x62, 0x6f, 0x6f, 0x6b, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, // y.bookmark_empty + 0x0a, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x74, 0x77, 0x69, 0x74, // .phone_sign.twit + 0x74, 0x65, 0x72, 0x08, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x06, 0x67, 0x69, 0x74, // ter.facebook.git + 0x68, 0x75, 0x62, 0x06, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x0b, 0x63, 0x72, 0x65, 0x64, 0x69, // hub.unlock.credi + 0x74, 0x5f, 0x63, 0x61, 0x72, 0x64, 0x03, 0x72, 0x73, 0x73, 0x03, 0x68, 0x64, 0x64, 0x08, 0x62, // t_card.rss.hdd.b + 0x75, 0x6c, 0x6c, 0x68, 0x6f, 0x72, 0x6e, 0x04, 0x62, 0x65, 0x6c, 0x6c, 0x0b, 0x63, 0x65, 0x72, // ullhorn.bell.cer + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x0a, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x69, // tificate.hand_ri + 0x67, 0x68, 0x74, 0x09, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x07, 0x68, 0x61, // ght.hand_left.ha + 0x6e, 0x64, 0x5f, 0x75, 0x70, 0x09, 0x68, 0x61, 0x6e, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x11, // nd_up.hand_down. + 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, // circle_arrow_lef + 0x74, 0x12, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, // t.circle_arrow_r + 0x69, 0x67, 0x68, 0x74, 0x0f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, // ight.circle_arro + 0x77, 0x5f, 0x75, 0x70, 0x11, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x72, 0x6f, // w_up.circle_arro + 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x05, 0x67, 0x6c, 0x6f, 0x62, 0x65, 0x06, 0x77, 0x72, 0x65, // w_down.globe.wre + 0x6e, 0x63, 0x68, 0x05, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, // nch.tasks.filter + 0x09, 0x62, 0x72, 0x69, 0x65, 0x66, 0x63, 0x61, 0x73, 0x65, 0x0a, 0x66, 0x75, 0x6c, 0x6c, 0x73, // .briefcase.fulls + 0x63, 0x72, 0x65, 0x65, 0x6e, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x04, 0x6c, 0x69, 0x6e, 0x6b, // creen.group.link + 0x05, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x06, 0x62, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x03, 0x63, 0x75, // .cloud.beaker.cu + 0x74, 0x04, 0x63, 0x6f, 0x70, 0x79, 0x0a, 0x70, 0x61, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, // t.copy.paper_cli + 0x70, 0x04, 0x73, 0x61, 0x76, 0x65, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x62, 0x6c, 0x61, 0x6e, // p.save.sign_blan + 0x6b, 0x07, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x02, 0x75, 0x6c, 0x02, 0x6f, 0x6c, 0x0d, // k.reorder.ul.ol. + 0x73, 0x74, 0x72, 0x69, 0x6b, 0x65, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x09, 0x75, 0x6e, // strikethrough.un + 0x64, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x65, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x05, 0x6d, 0x61, // derline.table.ma + 0x67, 0x69, 0x63, 0x05, 0x74, 0x72, 0x75, 0x63, 0x6b, 0x09, 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, // gic.truck.pinter + 0x65, 0x73, 0x74, 0x0e, 0x70, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, // est.pinterest_si + 0x67, 0x6e, 0x10, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x5f, 0x73, // gn.google_plus_s + 0x69, 0x67, 0x6e, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x70, 0x6c, 0x75, 0x73, 0x05, // ign.google_plus. + 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x0a, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, // money.caret_down + 0x08, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x0a, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, // .caret_up.caret_ + 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x63, 0x61, 0x72, 0x65, 0x74, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, // left.caret_right + 0x07, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x73, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x09, 0x73, 0x6f, // .columns.sort.so + 0x72, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x07, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x75, 0x70, 0x0c, // rt_down.sort_up. + 0x65, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x6c, 0x69, 0x6e, // envelope_alt.lin + 0x6b, 0x65, 0x64, 0x69, 0x6e, 0x04, 0x75, 0x6e, 0x64, 0x6f, 0x05, 0x6c, 0x65, 0x67, 0x61, 0x6c, // kedin.undo.legal + 0x09, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x65, // .dashboard.comme + 0x6e, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, // nt_alt.comments_ + 0x61, 0x6c, 0x74, 0x04, 0x62, 0x6f, 0x6c, 0x74, 0x07, 0x73, 0x69, 0x74, 0x65, 0x6d, 0x61, 0x70, // alt.bolt.sitemap + 0x08, 0x75, 0x6d, 0x62, 0x72, 0x65, 0x6c, 0x6c, 0x61, 0x05, 0x70, 0x61, 0x73, 0x74, 0x65, 0x0a, // .umbrella.paste. + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x62, 0x75, 0x6c, 0x62, 0x08, 0x65, 0x78, 0x63, 0x68, 0x61, // light_bulb.excha + 0x6e, 0x67, 0x65, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, // nge.cloud_downlo + 0x61, 0x64, 0x0c, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x07, // ad.cloud_upload. + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6d, 0x64, 0x0b, 0x73, 0x74, 0x65, 0x74, 0x68, 0x6f, 0x73, 0x63, // user_md.stethosc + 0x6f, 0x70, 0x65, 0x08, 0x73, 0x75, 0x69, 0x74, 0x63, 0x61, 0x73, 0x65, 0x08, 0x62, 0x65, 0x6c, // ope.suitcase.bel + 0x6c, 0x5f, 0x61, 0x6c, 0x74, 0x06, 0x63, 0x6f, 0x66, 0x66, 0x65, 0x65, 0x04, 0x66, 0x6f, 0x6f, // l_alt.coffee.foo + 0x64, 0x0d, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x08, // d.file_text_alt. + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x08, 0x68, 0x6f, 0x73, 0x70, 0x69, 0x74, 0x61, // building.hospita + 0x6c, 0x09, 0x61, 0x6d, 0x62, 0x75, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x06, 0x6d, 0x65, 0x64, 0x6b, // l.ambulance.medk + 0x69, 0x74, 0x0b, 0x66, 0x69, 0x67, 0x68, 0x74, 0x65, 0x72, 0x5f, 0x6a, 0x65, 0x74, 0x04, 0x62, // it.fighter_jet.b + 0x65, 0x65, 0x72, 0x06, 0x68, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x04, 0x66, 0x30, 0x66, 0x65, 0x11, // eer.h_sign.f0fe. + 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x66, // double_angle_lef + 0x74, 0x12, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, // t.double_angle_r + 0x69, 0x67, 0x68, 0x74, 0x0f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, // ight.double_angl + 0x65, 0x5f, 0x75, 0x70, 0x11, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x67, 0x6c, // e_up.double_angl + 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0a, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6c, 0x65, 0x66, // e_down.angle_lef + 0x74, 0x0b, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x08, 0x61, 0x6e, // t.angle_right.an + 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x0a, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x77, // gle_up.angle_dow + 0x6e, 0x07, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x06, 0x6c, 0x61, 0x70, 0x74, 0x6f, 0x70, // n.desktop.laptop + 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x0c, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x5f, 0x70, // .tablet.mobile_p + 0x68, 0x6f, 0x6e, 0x65, 0x0c, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x62, 0x6c, 0x61, 0x6e, // hone.circle_blan + 0x6b, 0x0a, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x0b, 0x71, 0x75, 0x6f, // k.quote_left.quo + 0x74, 0x65, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x07, 0x73, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x72, // te_right.spinner + 0x06, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x0a, 0x67, 0x69, // .circle.reply.gi + 0x74, 0x68, 0x75, 0x62, 0x5f, 0x61, 0x6c, 0x74, 0x10, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x5f, // thub_alt.folder_ + 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x0f, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, // close_alt.folder + 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x0a, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x64, // _open_alt.expand + 0x5f, 0x61, 0x6c, 0x74, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x5f, 0x61, 0x6c, // _alt.collapse_al + 0x74, 0x05, 0x73, 0x6d, 0x69, 0x6c, 0x65, 0x05, 0x66, 0x72, 0x6f, 0x77, 0x6e, 0x03, 0x6d, 0x65, // t.smile.frown.me + 0x68, 0x07, 0x67, 0x61, 0x6d, 0x65, 0x70, 0x61, 0x64, 0x08, 0x6b, 0x65, 0x79, 0x62, 0x6f, 0x61, // h.gamepad.keyboa + 0x72, 0x64, 0x08, 0x66, 0x6c, 0x61, 0x67, 0x5f, 0x61, 0x6c, 0x74, 0x0e, 0x66, 0x6c, 0x61, 0x67, // rd.flag_alt.flag + 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x65, 0x64, 0x08, 0x74, 0x65, 0x72, 0x6d, 0x69, // _checkered.termi + 0x6e, 0x61, 0x6c, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x09, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x5f, 0x61, // nal.code.reply_a + 0x6c, 0x6c, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x5f, 0x68, 0x61, 0x6c, 0x66, 0x5f, 0x65, 0x6d, 0x70, // ll.star_half_emp + 0x74, 0x79, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x72, 0x72, 0x6f, // ty.location_arro + 0x77, 0x04, 0x63, 0x72, 0x6f, 0x70, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6b, // w.crop.code_fork + 0x06, 0x75, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x04, 0x5f, 0x32, 0x37, 0x39, 0x0b, 0x65, 0x78, 0x63, // .unlink._279.exc + 0x6c, 0x61, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0b, 0x73, 0x75, 0x70, 0x65, 0x72, 0x73, 0x63, // lamation.supersc + 0x72, 0x69, 0x70, 0x74, 0x09, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x04, 0x5f, // ript.subscript._ + 0x32, 0x38, 0x33, 0x0c, 0x70, 0x75, 0x7a, 0x7a, 0x6c, 0x65, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, // 283.puzzle_piece + 0x0a, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x0e, 0x6d, 0x69, 0x63, 0x72, // .microphone.micr + 0x6f, 0x70, 0x68, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x06, 0x73, 0x68, 0x69, 0x65, 0x6c, // ophone_off.shiel + 0x64, 0x0e, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, // d.calendar_empty + 0x11, 0x66, 0x69, 0x72, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x69, 0x6e, 0x67, 0x75, 0x69, 0x73, 0x68, // .fire_extinguish + 0x65, 0x72, 0x06, 0x72, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x06, 0x6d, 0x61, 0x78, 0x63, 0x64, 0x6e, // er.rocket.maxcdn + 0x11, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6c, 0x65, // .chevron_sign_le + 0x66, 0x74, 0x12, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x5f, // ft.chevron_sign_ + 0x72, 0x69, 0x67, 0x68, 0x74, 0x0f, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, // right.chevron_si + 0x67, 0x6e, 0x5f, 0x75, 0x70, 0x11, 0x63, 0x68, 0x65, 0x76, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x69, // gn_up.chevron_si + 0x67, 0x6e, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x05, 0x68, 0x74, 0x6d, 0x6c, 0x35, 0x04, 0x63, 0x73, // gn_down.html5.cs + 0x73, 0x33, 0x06, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x0a, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, // s3.anchor.unlock + 0x5f, 0x61, 0x6c, 0x74, 0x08, 0x62, 0x75, 0x6c, 0x6c, 0x73, 0x65, 0x79, 0x65, 0x13, 0x65, 0x6c, // _alt.bullseye.el + 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x5f, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, // lipsis_horizonta + 0x6c, 0x11, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x69, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x74, 0x69, // l.ellipsis_verti + 0x63, 0x61, 0x6c, 0x04, 0x5f, 0x33, 0x30, 0x33, 0x09, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x69, // cal._303.play_si + 0x67, 0x6e, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x0e, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x5f, // gn.ticket.minus_ + 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x61, 0x6c, 0x74, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x6d, // sign_alt.check_m + 0x69, 0x6e, 0x75, 0x73, 0x08, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, 0x75, 0x70, 0x0a, 0x6c, 0x65, // inus.level_up.le + 0x76, 0x65, 0x6c, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x73, // vel_down.check_s + 0x69, 0x67, 0x6e, 0x09, 0x65, 0x64, 0x69, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x04, 0x5f, 0x33, // ign.edit_sign._3 + 0x31, 0x32, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x63, 0x6f, // 12.share_sign.co + 0x6d, 0x70, 0x61, 0x73, 0x73, 0x08, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x0c, 0x63, // mpass.collapse.c + 0x6f, 0x6c, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x04, 0x5f, 0x33, 0x31, 0x37, // ollapse_top._317 + 0x03, 0x65, 0x75, 0x72, 0x03, 0x67, 0x62, 0x70, 0x03, 0x75, 0x73, 0x64, 0x03, 0x69, 0x6e, 0x72, // .eur.gbp.usd.inr + 0x03, 0x6a, 0x70, 0x79, 0x03, 0x72, 0x75, 0x62, 0x03, 0x6b, 0x72, 0x77, 0x03, 0x62, 0x74, 0x63, // .jpy.rub.krw.btc + 0x04, 0x66, 0x69, 0x6c, 0x65, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x10, // .file.file_text. + 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, // sort_by_alphabet + 0x04, 0x5f, 0x33, 0x32, 0x39, 0x12, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x61, 0x74, // ._329.sort_by_at + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x16, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, // tributes.sort_by + 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x61, 0x6c, 0x74, 0x0d, // _attributes_alt. + 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x11, 0x73, 0x6f, // sort_by_order.so + 0x72, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x61, 0x6c, 0x74, 0x04, // rt_by_order_alt. + 0x5f, 0x33, 0x33, 0x34, 0x04, 0x5f, 0x33, 0x33, 0x35, 0x0c, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, // _334._335.youtub + 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x07, 0x79, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x65, 0x04, 0x78, // e_sign.youtube.x + 0x69, 0x6e, 0x67, 0x09, 0x78, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0c, 0x79, 0x6f, // ing.xing_sign.yo + 0x75, 0x74, 0x75, 0x62, 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x79, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x62, // utube_play.dropb + 0x6f, 0x78, 0x0d, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, // ox.stackexchange + 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x72, 0x61, 0x6d, 0x06, 0x66, 0x6c, 0x69, 0x63, 0x6b, // .instagram.flick + 0x72, 0x03, 0x61, 0x64, 0x6e, 0x04, 0x66, 0x31, 0x37, 0x31, 0x0e, 0x62, 0x69, 0x74, 0x62, 0x75, // r.adn.f171.bitbu + 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x06, 0x74, 0x75, 0x6d, 0x62, 0x6c, 0x72, // cket_sign.tumblr + 0x0b, 0x74, 0x75, 0x6d, 0x62, 0x6c, 0x72, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x0f, 0x6c, 0x6f, 0x6e, // .tumblr_sign.lon + 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x0d, 0x6c, 0x6f, 0x6e, // g_arrow_down.lon + 0x67, 0x5f, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x75, 0x70, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, // g_arrow_up.long_ + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x10, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, // arrow_left.long_ + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x72, 0x69, 0x67, 0x68, 0x74, 0x07, 0x77, 0x69, 0x6e, 0x64, // arrow_right.wind + 0x6f, 0x77, 0x73, 0x07, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x05, 0x6c, 0x69, 0x6e, 0x75, // ows.android.linu + 0x78, 0x07, 0x64, 0x72, 0x69, 0x62, 0x62, 0x6c, 0x65, 0x05, 0x73, 0x6b, 0x79, 0x70, 0x65, 0x0a, // x.dribble.skype. + 0x66, 0x6f, 0x75, 0x72, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x06, 0x74, 0x72, 0x65, 0x6c, 0x6c, // foursquare.trell + 0x6f, 0x06, 0x66, 0x65, 0x6d, 0x61, 0x6c, 0x65, 0x04, 0x6d, 0x61, 0x6c, 0x65, 0x06, 0x67, 0x69, // o.female.male.gi + 0x74, 0x74, 0x69, 0x70, 0x03, 0x73, 0x75, 0x6e, 0x04, 0x5f, 0x33, 0x36, 0x36, 0x07, 0x61, 0x72, // ttip.sun._366.ar + 0x63, 0x68, 0x69, 0x76, 0x65, 0x03, 0x62, 0x75, 0x67, 0x02, 0x76, 0x6b, 0x05, 0x77, 0x65, 0x69, // chive.bug.vk.wei + 0x62, 0x6f, 0x06, 0x72, 0x65, 0x6e, 0x72, 0x65, 0x6e, 0x04, 0x5f, 0x33, 0x37, 0x32, 0x0e, 0x73, // bo.renren._372.s + 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x04, 0x5f, 0x33, // tack_exchange._3 + 0x37, 0x34, 0x15, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, // 74.arrow_circle_ + 0x61, 0x6c, 0x74, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x04, 0x5f, 0x33, 0x37, 0x36, 0x0e, 0x64, 0x6f, // alt_left._376.do + 0x74, 0x5f, 0x63, 0x69, 0x72, 0x63, 0x6c, 0x65, 0x5f, 0x61, 0x6c, 0x74, 0x04, 0x5f, 0x33, 0x37, // t_circle_alt._37 + 0x38, 0x0c, 0x76, 0x69, 0x6d, 0x65, 0x6f, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x04, 0x5f, // 8.vimeo_square._ + 0x33, 0x38, 0x30, 0x04, 0x5f, 0x33, 0x38, 0x31, 0x04, 0x5f, 0x33, 0x38, 0x32, 0x04, 0x5f, 0x33, // 380._381._382._3 + 0x38, 0x33, 0x04, 0x5f, 0x33, 0x38, 0x34, 0x04, 0x5f, 0x33, 0x38, 0x35, 0x04, 0x5f, 0x33, 0x38, // 83._384._385._38 + 0x36, 0x04, 0x5f, 0x33, 0x38, 0x37, 0x04, 0x5f, 0x33, 0x38, 0x38, 0x04, 0x5f, 0x33, 0x38, 0x39, // 6._387._388._389 + 0x00, 0x01, 0x52, 0x67, 0x41, 0x5b, 0x00, 0x00, // ..RgA[.. +}; diff --git a/3rdparty/bgfx/examples/common/imgui/icons_kenney.ttf.h b/3rdparty/bgfx/examples/common/imgui/icons_kenney.ttf.h new file mode 100644 index 00000000000..3d88393d2cb --- /dev/null +++ b/3rdparty/bgfx/examples/common/imgui/icons_kenney.ttf.h @@ -0,0 +1,2890 @@ +static const uint8_t s_iconsKenneyTtf[46184] = +{ + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x80, 0x00, 0x03, 0x00, 0x30, 0x4f, 0x53, 0x2f, 0x32, // ...........0OS/2 + 0x0f, 0x12, 0x07, 0x0b, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, // ...........`cmap + 0x17, 0x56, 0xd3, 0x6a, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x54, 0x67, 0x61, 0x73, 0x70, // .V.j.......Tgasp + 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x70, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, // .......p....glyf + 0xe9, 0x95, 0x01, 0xa3, 0x00, 0x00, 0x01, 0x78, 0x00, 0x00, 0xa8, 0x50, 0x68, 0x65, 0x61, 0x64, // .......x...Phead + 0x08, 0x18, 0x87, 0x75, 0x00, 0x00, 0xa9, 0xc8, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61, // ...u.......6hhea + 0x07, 0xbf, 0x04, 0xa9, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, // ...........$hmtx + 0x96, 0x00, 0x2c, 0x6a, 0x00, 0x00, 0xaa, 0x24, 0x00, 0x00, 0x03, 0xa0, 0x6c, 0x6f, 0x63, 0x61, // ..,j...$....loca + 0x60, 0xfb, 0x35, 0xe6, 0x00, 0x00, 0xad, 0xc4, 0x00, 0x00, 0x01, 0xd2, 0x6d, 0x61, 0x78, 0x70, // `.5.........maxp + 0x00, 0xf2, 0x01, 0x07, 0x00, 0x00, 0xaf, 0x98, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, // ........... name + 0x7a, 0x55, 0x5f, 0x41, 0x00, 0x00, 0xaf, 0xb8, 0x00, 0x00, 0x04, 0x8f, 0x70, 0x6f, 0x73, 0x74, // zU_A........post + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x48, 0x00, 0x00, 0x00, 0x20, 0x00, 0x03, 0x03, 0xfe, // .......H... .... + 0x01, 0x90, 0x00, 0x05, 0x00, 0x00, 0x02, 0x99, 0x02, 0xcc, 0x00, 0x00, 0x00, 0x8f, 0x02, 0x99, // ................ + 0x02, 0xcc, 0x00, 0x00, 0x01, 0xeb, 0x00, 0x33, 0x01, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......3........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xe9, 0xe3, // ...........@.... + 0x03, 0xc0, 0xff, 0xc0, 0x00, 0x40, 0x03, 0xc0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // .....@...@...... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ......... ...... + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, // ................ + 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x00, 0x38, 0x00, 0x00, 0x00, 0x0a, // ...........8.... + 0x00, 0x08, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x20, 0xe9, 0xe3, 0xff, 0xfd, 0xff, 0xff, // ......... ...... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xe9, 0x00, 0xff, 0xfd, 0xff, 0xff, 0x00, 0x01, 0xff, 0xe3, // ..... .......... + 0x17, 0x04, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x01, 0x00, 0x01, 0xff, 0xff, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x37, 0x39, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ......79........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x37, 0x39, 0x01, 0x00, 0x00, 0x00, // ..........79.... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x37, 0x39, // ..............79 + 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x19, // ................ + 0x00, 0x00, 0x05, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x23, 0x35, 0x09, 0x01, 0x15, // ...#"&'..5.#5... + 0x23, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x11, 0x23, 0x11, 0x01, 0x82, 0xbe, 0x0d, // #......+..#..... + 0x17, 0x0a, 0x09, 0x08, 0x7f, 0x01, 0xfa, 0x01, 0xfa, 0x7f, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0xbe, // ................ + 0xfc, 0x3a, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x3c, 0x7e, 0x01, 0xfa, 0xfe, 0x06, 0x7e, 0xfe, // .:......<~....~. + 0xc4, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x01, 0x7c, 0xfe, 0x84, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, // .......|........ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x2c, 0x00, 0x3d, 0x00, 0x00, 0x13, 0x35, 0x3e, 0x03, // .......,.=...5>. + 0x33, 0x17, 0x1e, 0x03, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x07, 0x23, // 3..............# + 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x33, 0x05, 0x27, 0x11, 0x37, // "..'..54>.73.'.7 + 0x3e, 0x01, 0x37, 0x33, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x9b, 0x25, 0x52, // >.73>.54&'..'.%R + 0x59, 0x61, 0x34, 0x20, 0x2f, 0x57, 0x52, 0x4b, 0x22, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, // Ya4 /WRK"%8%..%8 + 0x25, 0x22, 0x4b, 0x52, 0x57, 0x2f, 0x20, 0x34, 0x61, 0x59, 0x52, 0x25, 0x25, 0x38, 0x25, 0x13, // %"KRW/ 4aYR%%8%. + 0x13, 0x24, 0x38, 0x24, 0x02, 0x01, 0x85, 0x20, 0x20, 0x37, 0x60, 0x29, 0x02, 0x2e, 0x2e, 0x2e, // .$8$... 7`).... + 0x2e, 0x2a, 0x61, 0x37, 0x03, 0x25, 0x02, 0x24, 0x38, 0x24, 0x13, 0x02, 0x02, 0x15, 0x25, 0x35, // .*a7.%.$8$....%5 + 0x22, 0x25, 0x52, 0x59, 0x61, 0x34, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x22, 0x34, 0x25, 0x15, 0x03, // "%RYa45aZR%"4%.. + 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x34, 0x61, 0x59, 0x52, 0x25, 0x2b, 0x02, // .$8$%RZa54aYR%+. + 0xfd, 0x86, 0x02, 0x05, 0x2e, 0x29, 0x2d, 0x71, 0x42, 0x42, 0x70, 0x2e, 0x29, 0x2d, 0x04, 0x00, // .....)-qBBp.)-.. + 0x00, 0x02, 0x00, 0x08, 0xff, 0xca, 0x03, 0xfa, 0x03, 0xb6, 0x00, 0x16, 0x00, 0x5a, 0x00, 0x00, // .............Z.. + 0x25, 0x26, 0x22, 0x07, 0x15, 0x0f, 0x02, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, // %&".........3267 + 0x3e, 0x01, 0x35, 0x2f, 0x02, 0x01, 0x1e, 0x01, 0x17, 0x15, 0x07, 0x01, 0x1e, 0x01, 0x1f, 0x01, // >.5/............ + 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x35, 0x2f, 0x03, 0x17, 0x2e, 0x01, // ......#"&'5/.... + 0x27, 0x35, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x37, 0x35, // '5..7>.7>.?...75 + 0x37, 0x3e, 0x01, 0x2f, 0x03, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x33, 0x37, // 7>./.&67>.7>.737 + 0x1e, 0x01, 0x17, 0x23, 0x03, 0x60, 0x19, 0x33, 0x1a, 0x0f, 0x01, 0x03, 0x09, 0x0a, 0x0b, 0x1b, // ...#.`.3........ + 0x0e, 0x0f, 0x19, 0x0a, 0x0c, 0x0c, 0x03, 0x13, 0x02, 0xfe, 0xdf, 0x2c, 0x32, 0x07, 0x03, 0x01, // ...........,2... + 0x1b, 0x1b, 0x1e, 0x03, 0x02, 0x1e, 0x1e, 0x02, 0x1c, 0x4a, 0x2f, 0x29, 0x4a, 0x1f, 0xbc, 0x05, // .........J/)J... + 0x5d, 0x54, 0x03, 0x37, 0x5e, 0x27, 0x38, 0x31, 0x07, 0x01, 0x09, 0x09, 0x02, 0x05, 0x04, 0x10, // ]T.7^'81........ + 0x0c, 0xb5, 0x22, 0x20, 0x4c, 0x0c, 0x06, 0x06, 0x0e, 0xb4, 0x06, 0x02, 0x01, 0x02, 0x02, 0x05, // .." L........... + 0x04, 0x0b, 0x13, 0x0a, 0x01, 0x97, 0x31, 0x56, 0x25, 0x02, 0xc3, 0x16, 0x16, 0x01, 0x1b, 0x03, // ......1V%....... + 0x13, 0x0e, 0x19, 0x0c, 0x09, 0x0a, 0x09, 0x0a, 0x0c, 0x19, 0x0e, 0x14, 0x1d, 0x01, 0x02, 0x96, // ................ + 0x27, 0x61, 0x3a, 0x33, 0x24, 0xfe, 0xe8, 0x17, 0x3b, 0x23, 0x1c, 0x2c, 0x4a, 0x1d, 0x02, 0x1c, // 'a:3$...;#.,J... + 0x1c, 0x1c, 0x1c, 0x02, 0xba, 0x0d, 0x59, 0x04, 0x01, 0x08, 0x2e, 0x25, 0x02, 0x3a, 0x82, 0x47, // ......Y....%.:.G + 0x17, 0x2e, 0x17, 0x04, 0x08, 0x02, 0x03, 0x08, 0xb4, 0x13, 0x11, 0x02, 0x4f, 0x0b, 0x18, 0x0c, // ............O... + 0x17, 0xac, 0x0c, 0x05, 0x08, 0x03, 0x04, 0x06, 0x01, 0x06, 0x09, 0x03, 0x04, 0x08, 0x2f, 0x26, // ............../& + 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x18, 0x00, 0x31, 0x00, 0xb3, // .............1.. + 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, // ...2..........#" + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x35, 0x22, 0x06, 0x07, 0x0e, // &'..5467>.35"... + 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, // .......3267>.54& + 0x27, 0x2e, 0x01, 0x23, 0x05, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x07, // '..#.........+.. + 0x1f, 0x01, 0x16, 0x14, 0x07, 0x0e, 0x01, 0x0f, 0x01, 0x2f, 0x01, 0x07, 0x17, 0x16, 0x14, 0x0f, // ........./...... + 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x27, 0x0f, 0x01, 0x06, 0x22, // ...#"&'..=.'..." + 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x27, 0x07, 0x06, 0x22, 0x2f, // '..'..546?.'.."/ + 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x37, 0x2f, 0x01, 0x26, 0x34, // ...5467>.;.7/.&4 + 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x3e, 0x01, 0x37, 0x27, 0x26, // 7>.7>.32...>.7'& + 0x34, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x17, // 47>.7>.32....... + 0x37, 0x3e, 0x01, 0x37, 0x36, 0x32, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x0f, 0x01, // 7>.762.......... + 0x17, 0x37, 0x36, 0x32, 0x1f, 0x01, 0x02, 0x00, 0x19, 0x2c, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, // .762.....,...... + 0x2c, 0x19, 0x19, 0x2c, 0x12, 0x11, 0x12, 0x12, 0x11, 0x12, 0x2c, 0x19, 0x33, 0x56, 0x25, 0x23, // ,..,......,.3V%# + 0x24, 0x24, 0x23, 0x25, 0x56, 0x33, 0x33, 0x56, 0x25, 0x23, 0x24, 0x24, 0x23, 0x25, 0x56, 0x33, // $$#%V33V%#$$#%V3 + 0x01, 0xd4, 0x13, 0x13, 0x06, 0x05, 0x06, 0x0d, 0x08, 0x69, 0x0c, 0x62, 0x14, 0x03, 0x03, 0x12, // .........i.b.... + 0x38, 0x26, 0x19, 0x1b, 0x4a, 0x38, 0x29, 0x04, 0x04, 0x14, 0x2d, 0x62, 0x35, 0x08, 0x0d, 0x06, // 8&..J8)...-b5... + 0x05, 0x06, 0x41, 0x27, 0x15, 0x07, 0x0e, 0x07, 0x2e, 0x53, 0x25, 0x06, 0x05, 0x05, 0x06, 0x4a, // ..A'.....S%....J + 0x26, 0x62, 0x07, 0x0e, 0x07, 0x15, 0x13, 0x13, 0x06, 0x05, 0x06, 0x0d, 0x08, 0x69, 0x0c, 0x62, // &b...........i.b + 0x14, 0x03, 0x03, 0x12, 0x38, 0x26, 0x05, 0x0d, 0x07, 0x08, 0x0e, 0x05, 0x4a, 0x0e, 0x1b, 0x0f, // ....8&......J... + 0x29, 0x04, 0x04, 0x03, 0x0a, 0x07, 0x2d, 0x62, 0x35, 0x08, 0x0d, 0x06, 0x05, 0x06, 0x41, 0x29, // ).....-b5.....A) + 0x02, 0x0a, 0x07, 0x07, 0x0f, 0x08, 0x1d, 0x38, 0x1b, 0x34, 0x06, 0x05, 0x0b, 0x49, 0x25, 0x62, // .......8.4...I%b + 0x07, 0x0e, 0x07, 0x15, 0x02, 0x3a, 0x12, 0x11, 0x12, 0x2c, 0x19, 0x19, 0x2c, 0x12, 0x12, 0x12, // .....:...,..,... + 0x12, 0x12, 0x12, 0x2c, 0x19, 0x19, 0x2c, 0x12, 0x11, 0x12, 0x7b, 0x24, 0x23, 0x25, 0x56, 0x33, // ...,..,...{$#%V3 + 0x33, 0x56, 0x25, 0x23, 0x24, 0x24, 0x23, 0x25, 0x56, 0x33, 0x33, 0x56, 0x25, 0x23, 0x24, 0x31, // 3V%#$$#%V33V%#$1 + 0x2d, 0x62, 0x35, 0x08, 0x0d, 0x06, 0x05, 0x06, 0x41, 0x29, 0x14, 0x07, 0x0f, 0x07, 0x2d, 0x53, // -b5.....A)....-S + 0x26, 0x09, 0x09, 0x4b, 0x26, 0x61, 0x07, 0x0e, 0x07, 0x15, 0x13, 0x13, 0x06, 0x05, 0x06, 0x0e, // &..K&a.......... + 0x07, 0x69, 0x0b, 0x61, 0x14, 0x03, 0x03, 0x12, 0x37, 0x25, 0x06, 0x0d, 0x08, 0x08, 0x0e, 0x05, // .i.a....7%...... + 0x4b, 0x37, 0x29, 0x03, 0x03, 0x14, 0x2d, 0x62, 0x35, 0x08, 0x0d, 0x06, 0x05, 0x06, 0x41, 0x27, // K7)...-b5.....A' + 0x15, 0x07, 0x0e, 0x07, 0x2e, 0x53, 0x25, 0x06, 0x05, 0x05, 0x06, 0x4a, 0x0b, 0x13, 0x08, 0x62, // .....S%....J...b + 0x07, 0x0e, 0x07, 0x07, 0x0b, 0x03, 0x13, 0x13, 0x06, 0x05, 0x06, 0x0d, 0x08, 0x69, 0x0c, 0x62, // .............i.b + 0x07, 0x0a, 0x03, 0x03, 0x03, 0x0c, 0x20, 0x15, 0x2f, 0x05, 0x0e, 0x08, 0x19, 0x4a, 0x38, 0x29, // ...... ./....J8) + 0x04, 0x04, 0x14, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x14, // ................ + 0x00, 0x62, 0x00, 0x00, 0x01, 0x17, 0x11, 0x0f, 0x01, 0x23, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, // .b.......#'..5.4 + 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1f, 0x01, 0x15, 0x1e, 0x03, 0x15, 0x14, // 67>.;.2......... + 0x0e, 0x02, 0x0f, 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, // ......#"..'..54> + 0x02, 0x3f, 0x02, 0x3e, 0x01, 0x17, 0x32, 0x16, 0x1f, 0x02, 0x0f, 0x02, 0x0e, 0x01, 0x15, 0x14, // .?.>..2......... + 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x3f, 0x02, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x23, // ....326?.>.54&'# + 0x2f, 0x01, 0x34, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x17, 0x02, 0x51, 0x09, 0x09, 0x16, 0x79, // /.46?.>.3..Q...y + 0x16, 0x04, 0x05, 0x05, 0x04, 0x05, 0x0a, 0x07, 0x79, 0x06, 0x0b, 0x05, 0xfb, 0x1a, 0x25, 0x37, // ........y.....%7 + 0x25, 0x13, 0x13, 0x25, 0x37, 0x25, 0x02, 0x24, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, // %..%7%.$QYa55aYR + 0x25, 0x25, 0x37, 0x25, 0x13, 0x12, 0x24, 0x35, 0x23, 0x06, 0x18, 0x05, 0x0b, 0x07, 0x06, 0x0a, // %%7%..$5#....... + 0x04, 0x4e, 0x07, 0x0a, 0x0c, 0x05, 0x2d, 0x2d, 0x2f, 0x30, 0x2f, 0x72, 0x43, 0x41, 0x70, 0x2f, // .N....--/0/rCAp/ + 0x04, 0x05, 0x2d, 0x2d, 0x2f, 0x30, 0x01, 0x0e, 0x0a, 0x03, 0x04, 0x4f, 0x04, 0x0b, 0x07, 0x15, // ..--/0.....O.... + 0x03, 0xb1, 0x15, 0xfe, 0x00, 0x15, 0x09, 0x09, 0x04, 0x0b, 0x06, 0x02, 0x00, 0x06, 0x0a, 0x05, // ................ + 0x04, 0x05, 0x05, 0x04, 0x7d, 0x17, 0x01, 0x25, 0x51, 0x58, 0x60, 0x34, 0x34, 0x60, 0x58, 0x50, // ....}..%QX`44`XP + 0x24, 0x02, 0x24, 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x24, 0x25, 0x51, 0x58, 0x60, 0x34, 0x33, // $.$7$..$7$%QX`43 + 0x5e, 0x57, 0x4f, 0x25, 0x07, 0x15, 0x04, 0x03, 0x01, 0x05, 0x05, 0x5c, 0x15, 0x15, 0x0b, 0x04, // ^WO%............ + 0x2f, 0x6f, 0x41, 0x42, 0x71, 0x2f, 0x2e, 0x2f, 0x2c, 0x2d, 0x04, 0x05, 0x2e, 0x6e, 0x41, 0x42, // /oABq/./,-...nAB + 0x71, 0x2f, 0x0d, 0x15, 0x06, 0x0b, 0x04, 0x5c, 0x05, 0x06, 0x06, 0x00, 0x00, 0x04, 0x00, 0x06, // q/.............. + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x20, 0x00, 0x2b, 0x00, 0x00, // ........... .+.. + 0x01, 0x33, 0x17, 0x35, 0x33, 0x11, 0x21, 0x35, 0x33, 0x27, 0x35, 0x21, 0x33, 0x15, 0x37, 0x33, // .3.53.!53'5!3.73 + 0x15, 0x07, 0x33, 0x15, 0x21, 0x11, 0x01, 0x37, 0x23, 0x35, 0x21, 0x11, 0x23, 0x35, 0x07, 0x23, // ..3.!..7#5!.#5.# + 0x35, 0x21, 0x15, 0x23, 0x11, 0x21, 0x15, 0x23, 0x17, 0x15, 0x23, 0x27, 0x02, 0x7e, 0x7f, 0x7e, // 5!.#.!.#..#'.~.~ + 0x7f, 0xfe, 0x84, 0x7f, 0x7f, 0xfd, 0x88, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0xfe, 0x84, 0x02, 0x78, // ........~......x + 0x7f, 0x7f, 0x01, 0x7c, 0x7f, 0x7e, 0x7f, 0xfe, 0x07, 0x7f, 0x01, 0x7c, 0x7f, 0x7f, 0x7f, 0x7e, // ...|.~.....|...~ + 0x01, 0x42, 0x7f, 0x7f, 0xfe, 0x84, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x01, 0x7c, // .B.....~....~..| + 0x01, 0x7b, 0x7e, 0x7f, 0xfe, 0x84, 0x7f, 0x7f, 0x7f, 0x7f, 0x01, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, // .{~........|.~.. + 0x00, 0x04, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x0a, 0x00, 0x15, 0x00, 0x20, // ............... + 0x00, 0x2b, 0x00, 0x00, 0x25, 0x17, 0x15, 0x23, 0x27, 0x15, 0x23, 0x11, 0x21, 0x15, 0x23, 0x25, // .+..%..#'.#.!.#% + 0x21, 0x11, 0x23, 0x35, 0x07, 0x23, 0x35, 0x37, 0x23, 0x35, 0x01, 0x11, 0x21, 0x35, 0x33, 0x27, // !.#5.#57#5..!53' + 0x35, 0x33, 0x17, 0x35, 0x33, 0x21, 0x15, 0x07, 0x33, 0x15, 0x21, 0x11, 0x33, 0x15, 0x37, 0x33, // 53.53!..3.!.3.73 + 0x03, 0x7b, 0x7f, 0x7f, 0x7e, 0x7f, 0x01, 0x7c, 0x7f, 0xfc, 0x8b, 0x01, 0x7c, 0x7f, 0x7e, 0x7f, // .{..~..|....|.~. + 0x7f, 0x7f, 0x01, 0x7c, 0xfe, 0x84, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x02, 0x78, 0x7f, 0x7f, 0xfe, // ...|.....~..x... + 0x84, 0x7f, 0x7e, 0x7f, 0xc3, 0x7e, 0x7f, 0x7f, 0x7f, 0x01, 0x7c, 0x7f, 0x7f, 0xfe, 0x84, 0x7f, // ..~..~....|..... + 0x7f, 0x7f, 0x7e, 0x7f, 0x02, 0x78, 0xfe, 0x84, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7e, 0x7f, // ..~..x...~....~. + 0x01, 0x7c, 0x7f, 0x7f, 0x00, 0x09, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x04, // .|.............. + 0x00, 0x09, 0x00, 0x0e, 0x00, 0x13, 0x00, 0x18, 0x00, 0x1d, 0x00, 0x22, 0x00, 0x3f, 0x00, 0x44, // ...........".?.D + 0x00, 0x00, 0x13, 0x33, 0x35, 0x23, 0x15, 0x1d, 0x01, 0x33, 0x35, 0x23, 0x13, 0x35, 0x23, 0x15, // ...35#...35#.5#. + 0x33, 0x01, 0x11, 0x21, 0x11, 0x21, 0x13, 0x33, 0x35, 0x23, 0x15, 0x11, 0x33, 0x35, 0x23, 0x15, // 3..!.!.35#..35#. + 0x01, 0x11, 0x21, 0x11, 0x21, 0x25, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // ..!.!%......#!"& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, // '..5.467>.3!2... + 0x01, 0x15, 0x07, 0x23, 0x15, 0x33, 0x35, 0x64, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x01, // ...#.35d|||||||. + 0xdc, 0xfe, 0x85, 0x01, 0x7b, 0x5f, 0x7d, 0x7d, 0x7d, 0x7d, 0xfe, 0x26, 0x01, 0x7b, 0xfe, 0x85, // ....{_}}}}.&.{.. + 0x02, 0xb9, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, // ................ + 0x09, 0x17, 0x0e, 0x03, 0x74, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x62, 0x7d, 0x7d, 0x01, 0x81, 0x9e, // ....t.....b}}... + 0x9e, 0xbe, 0x9e, 0x9e, 0x01, 0xfa, 0x9e, 0x9e, 0xfd, 0x68, 0x01, 0x5c, 0xfe, 0xa4, 0x01, 0x5c, // .........h...... + 0x9e, 0x9e, 0xfe, 0xa4, 0x9e, 0x9e, 0x03, 0x36, 0xfe, 0x85, 0x01, 0x7b, 0x1f, 0xfc, 0x8c, 0x0e, // .......6...{.... + 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, 0x09, 0x0a, // ..........s..... + 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x1f, 0x9e, 0x9e, 0x00, 0x01, 0x00, 0x35, 0xff, 0xc6, 0x03, 0xcd, // ...........5.... + 0x03, 0xba, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x05, 0x21, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // ........!......# + 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x27, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x25, // !"&'..5.'&67>.7% + 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x03, 0xb1, 0xfd, 0x90, 0x02, 0x8c, 0x08, 0x09, 0x09, 0x14, 0x0b, // ................ + 0xfd, 0x0f, 0x0c, 0x15, 0x09, 0x08, 0x08, 0x34, 0x03, 0x02, 0x06, 0x06, 0x12, 0x0c, 0x02, 0xd6, // .......4........ + 0x2b, 0x0b, 0x0f, 0x03, 0x35, 0x02, 0xce, 0xa8, 0xfd, 0xda, 0x0c, 0x15, 0x09, 0x08, 0x08, 0x08, // +...5........... + 0x08, 0x09, 0x15, 0x0c, 0x01, 0xec, 0xc2, 0x0c, 0x17, 0x0a, 0x0b, 0x0e, 0x04, 0xc2, 0x06, 0x06, // ................ + 0x11, 0x0c, 0xc3, 0x00, 0x00, 0x03, 0x00, 0x06, 0xff, 0xf0, 0x03, 0xf9, 0x03, 0x90, 0x00, 0x18, // ................ + 0x00, 0x31, 0x00, 0x5c, 0x00, 0x00, 0x25, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, // .1....%467>.32.. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x21, // ........#"&'..5! + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, // 467>.32......... + 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x01, 0x17, 0x1e, 0x01, 0x07, 0x15, 0x03, 0x07, // .#"&'..5........ + 0x0e, 0x01, 0x0f, 0x02, 0x21, 0x22, 0x26, 0x27, 0x23, 0x2e, 0x01, 0x27, 0x35, 0x03, 0x23, 0x22, // ....!"&'#..'5.#" + 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x17, 0x21, 0x32, // &'..=.467>.3!.!2 + 0x16, 0x17, 0x02, 0xae, 0x12, 0x12, 0x12, 0x2c, 0x1a, 0x19, 0x2b, 0x12, 0x13, 0x12, 0x12, 0x13, // .......,..+..... + 0x12, 0x2b, 0x19, 0x1a, 0x2c, 0x12, 0x12, 0x12, 0xfe, 0x50, 0x11, 0x12, 0x13, 0x2c, 0x19, 0x1a, // .+..,....P...,.. + 0x2b, 0x12, 0x12, 0x13, 0x13, 0x12, 0x12, 0x2b, 0x1a, 0x19, 0x2c, 0x13, 0x12, 0x11, 0x02, 0xdd, // +......+..,..... + 0x02, 0x11, 0x0e, 0x03, 0x4e, 0x01, 0x03, 0x17, 0x14, 0x05, 0x3e, 0xfe, 0x31, 0x14, 0x1f, 0x0d, // ....N.....>.1... + 0x01, 0x15, 0x18, 0x03, 0x47, 0x8d, 0x06, 0x0b, 0x04, 0x05, 0x05, 0x05, 0x05, 0x04, 0x0b, 0x06, // ....G........... + 0x01, 0x71, 0x0a, 0x01, 0xe6, 0x1a, 0x2a, 0x11, 0x6b, 0x1a, 0x2c, 0x13, 0x11, 0x12, 0x12, 0x11, // .q....*.k.,..... + 0x13, 0x2c, 0x1a, 0x19, 0x2b, 0x12, 0x13, 0x12, 0x12, 0x13, 0x12, 0x2b, 0x19, 0x1a, 0x2c, 0x13, // .,..+......+..,. + 0x11, 0x12, 0x12, 0x11, 0x13, 0x2c, 0x1a, 0x19, 0x2b, 0x12, 0x13, 0x12, 0x12, 0x13, 0x12, 0x2b, // .....,..+......+ + 0x19, 0x03, 0x00, 0x01, 0x13, 0x2c, 0x19, 0x04, 0xfe, 0x67, 0x01, 0x13, 0x20, 0x0d, 0x01, 0x0e, // .....,...g.. ... + 0x07, 0x08, 0x0d, 0x20, 0x13, 0x01, 0x01, 0x81, 0x04, 0x05, 0x05, 0x0a, 0x07, 0x5c, 0x07, 0x0a, // ... ............ + 0x05, 0x05, 0x04, 0x01, 0x12, 0x12, 0x00, 0x00, 0x00, 0x03, 0x00, 0x22, 0xff, 0xc6, 0x03, 0xde, // ...........".... + 0x03, 0xba, 0x00, 0x18, 0x00, 0x33, 0x00, 0x4e, 0x00, 0x00, 0x17, 0x2e, 0x01, 0x27, 0x03, 0x26, // .....3.N.....'.& + 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x07, 0x03, 0x07, 0x0e, 0x01, // 67>.3!2......... + 0x23, 0x21, 0x27, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, // #!'..........#"& + 0x2f, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x07, 0x14, // /...5467>.32.... + 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, // .....#"&'..546?. + 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x86, 0x09, 0x0a, 0x01, 0x50, 0x02, 0x05, // >.32.........P.. + 0x07, 0x08, 0x16, 0x0e, 0x03, 0x4f, 0x0d, 0x15, 0x08, 0x08, 0x07, 0x02, 0x50, 0x15, 0x09, 0x13, // .....O......P... + 0x0b, 0xfd, 0x5b, 0x27, 0x02, 0x40, 0xe4, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x23, 0x14, 0x14, 0x22, // ..['.@......#.." + 0x0e, 0xe4, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x22, 0x14, 0x15, 0x22, 0x0f, 0xe9, 0x0e, 0x0d, 0xe4, // .......".."..... + 0x0f, 0x23, 0x14, 0x15, 0x22, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0xe4, 0x0e, 0x22, 0x15, 0x14, 0x23, // .#.."......."..# + 0x0f, 0x0d, 0x0e, 0x2e, 0x06, 0x0d, 0x08, 0x01, 0xa8, 0x0b, 0x15, 0x09, 0x09, 0x08, 0x09, 0x08, // ................ + 0x09, 0x14, 0x0b, 0xfe, 0x57, 0x1b, 0x06, 0x06, 0x0c, 0x03, 0xca, 0xe4, 0x0e, 0x22, 0x14, 0x14, // ....W........".. + 0x23, 0x0f, 0x0e, 0x0e, 0x0e, 0x0e, 0xe4, 0x0f, 0x23, 0x14, 0x14, 0x22, 0x0e, 0x0f, 0x0f, 0x0f, // #.......#..".... + 0x0f, 0x44, 0x14, 0x23, 0x0f, 0xe4, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x23, 0x14, 0x14, 0x23, 0x0d, // .D.#.......#..#. + 0xe4, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x22, 0x14, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ......"......... + 0x03, 0xba, 0x00, 0x1f, 0x00, 0x3d, 0x00, 0x00, 0x01, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x11, 0x0f, // .....=...!2..... + 0x01, 0x2f, 0x01, 0x0f, 0x01, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x27, 0x2e, // ./...'...546?.'. + 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x03, 0x23, 0x11, 0x21, 0x35, 0x33, 0x15, 0x14, // .5467>.3.#.!53.. + 0x06, 0x07, 0x23, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // ..#..#!"&'..5.46 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x15, 0x01, 0xa9, 0x02, 0x2e, 0x07, 0x0c, 0x05, 0x0b, 0x0b, 0x18, // 7>.;............ + 0x19, 0x73, 0xfe, 0x19, 0x18, 0xfe, 0xe9, 0x05, 0x06, 0x06, 0x05, 0xfe, 0x73, 0x05, 0x05, 0x05, // .s..........s... + 0x05, 0x06, 0x0c, 0x07, 0x8c, 0x8b, 0x02, 0x2e, 0x8b, 0x09, 0x0a, 0x02, 0x0a, 0x19, 0x0d, 0xfd, // ................ + 0x46, 0x0f, 0x19, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x19, 0x0f, 0xd1, 0x03, 0xba, 0x06, 0x05, // F............... + 0x18, 0xfd, 0xd2, 0x19, 0x0a, 0x0a, 0x73, 0xfe, 0x0b, 0x0b, 0x01, 0x17, 0x05, 0x0c, 0x07, 0x07, // ......s......... + 0x0c, 0x06, 0xfe, 0x73, 0x06, 0x0c, 0x07, 0x07, 0x0c, 0x05, 0x05, 0x06, 0xfe, 0xc6, 0xfd, 0xd2, // ...s............ + 0x8b, 0xd1, 0x0f, 0x19, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x19, 0x0f, 0x02, 0xb8, 0x0f, 0x19, // ................ + 0x0a, 0x0b, 0x0a, 0x8b, 0x00, 0x01, 0x00, 0x22, 0xff, 0xc6, 0x03, 0xde, 0x03, 0xba, 0x00, 0x48, // .......".......H + 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, // ...2..........#" + 0x26, 0x2f, 0x01, 0x07, 0x17, 0x07, 0x17, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, // &/.....7>.32.... + 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x37, 0x27, 0x07, // ......#"&'..57'. + 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, // ..#"&'..5467>.32 + 0x16, 0x1f, 0x01, 0x37, 0x27, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x03, 0x15, 0x29, 0x47, 0x1e, // ...7'467>.3..)G. + 0x1d, 0x1e, 0x1d, 0x1e, 0x1e, 0x47, 0x29, 0x2a, 0x48, 0x1d, 0x10, 0xc5, 0x04, 0x07, 0xc7, 0x11, // .....G)*H....... + 0x1d, 0x48, 0x2a, 0x29, 0x47, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e, 0x1e, 0x47, 0x29, 0x2a, 0x48, 0x1d, // .H*)G......G)*H. + 0x1d, 0x1d, 0x03, 0xd3, 0x03, 0x1e, 0x47, 0x29, 0x2a, 0x48, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, // ......G)*H...... + 0x48, 0x2a, 0x29, 0x47, 0x1e, 0x0b, 0xcb, 0x03, 0x1d, 0x1d, 0x1d, 0x48, 0x2a, 0x03, 0xba, 0x1d, // H*)G.......H*... + 0x1d, 0x1e, 0x48, 0x2b, 0x29, 0x47, 0x1e, 0x1d, 0x1e, 0x1e, 0x1d, 0x11, 0x88, 0x29, 0x36, 0x7e, // ..H+)G.......)6~ + 0x13, 0x1e, 0x1e, 0x1e, 0x1e, 0x1d, 0x48, 0x2a, 0x2a, 0x48, 0x1d, 0x1e, 0x1e, 0x1e, 0x1e, 0x1d, // ......H**H...... + 0x48, 0x2a, 0x1e, 0x85, 0x03, 0x1d, 0x1e, 0x1e, 0x1d, 0x1e, 0x48, 0x2a, 0x2a, 0x48, 0x1d, 0x1e, // H*........H**H.. + 0x1d, 0x1d, 0x1e, 0x0b, 0x8a, 0x20, 0x2b, 0x48, 0x1e, 0x1d, 0x1d, 0x00, 0x00, 0x01, 0x00, 0x07, // ..... +H........ + 0x00, 0x01, 0x03, 0xf9, 0x03, 0x7f, 0x00, 0x21, 0x00, 0x00, 0x13, 0x1e, 0x01, 0x1f, 0x01, 0x01, // .......!........ + 0x3e, 0x01, 0x37, 0x36, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x16, 0x06, 0x07, 0x01, 0x07, 0x23, // >.76...........# + 0x27, 0x01, 0x2e, 0x01, 0x37, 0x34, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x17, 0xf2, 0x0a, 0x10, 0x08, // '...746?.>...... + 0x9e, 0x01, 0x3c, 0x06, 0x0f, 0x09, 0x0a, 0x10, 0x07, 0xbd, 0x07, 0x08, 0x01, 0x05, 0x05, 0xfd, // ..<............. + 0xe6, 0x16, 0x19, 0x18, 0xfe, 0x83, 0x07, 0x05, 0x01, 0x08, 0x07, 0xbb, 0x08, 0x11, 0x08, 0x02, // ................ + 0xc4, 0x01, 0x08, 0x07, 0xbe, 0x01, 0x77, 0x08, 0x08, 0x02, 0x01, 0x06, 0x06, 0xa2, 0x05, 0x0f, // ......w......... + 0x0a, 0x09, 0x12, 0x07, 0xfd, 0x7d, 0x0e, 0x0e, 0x01, 0xc8, 0x08, 0x10, 0x09, 0x0a, 0x10, 0x06, // .....}.......... + 0xa1, 0x06, 0x06, 0x01, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x3c, // ...............< + 0x00, 0x00, 0x13, 0x34, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x37, 0x3e, // ...46?.>.32...7> + 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x17, 0x1e, 0x01, // .32............. + 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x07, 0x0e, 0x01, 0x23, // .......#"&/....# + 0x22, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x06, // "&/...546?.'..5. + 0x0a, 0x0b, 0xac, 0x09, 0x17, 0x0f, 0x0e, 0x18, 0x0b, 0xd9, 0xdd, 0x09, 0x18, 0x0e, 0x0d, 0x18, // ................ + 0x0a, 0xac, 0x09, 0x0a, 0x0a, 0x09, 0xdb, 0xdb, 0x09, 0x0a, 0x0a, 0x09, 0xac, 0x0a, 0x18, 0x0d, // ................ + 0x0e, 0x18, 0x09, 0xdd, 0xd9, 0x0b, 0x18, 0x0e, 0x0f, 0x17, 0x09, 0xac, 0x0a, 0x0b, 0x0a, 0x0b, // ................ + 0xdb, 0xdb, 0x0a, 0x0b, 0x02, 0xca, 0x0f, 0x17, 0x09, 0xac, 0x0a, 0x0b, 0x0a, 0x0b, 0xdb, 0xdb, // ................ + 0x0a, 0x0b, 0x0a, 0x0b, 0xac, 0x09, 0x17, 0x0f, 0x0d, 0x18, 0x0a, 0xdb, 0xdd, 0x09, 0x17, 0x0d, // ................ + 0x0f, 0x18, 0x0a, 0xac, 0x09, 0x0a, 0x0a, 0x09, 0xdd, 0xdd, 0x09, 0x0a, 0x0a, 0x09, 0xac, 0x0a, // ................ + 0x18, 0x0f, 0x0d, 0x17, 0x09, 0xdd, 0xdb, 0x0a, 0x18, 0x0d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x2e, 0x00, 0x6b, 0x00, 0x00, 0x01, 0x27, 0x2e, 0x03, // .........k...'.. + 0x27, 0x07, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x15, 0x14, 0x1e, 0x02, 0x1f, // '.#"............ + 0x01, 0x1e, 0x03, 0x17, 0x3e, 0x03, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x2e, 0x02, // ....>.7>.7>.54.. + 0x27, 0x03, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x06, 0x26, 0x2f, 0x01, // '..........#.&/. + 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x27, // ...#"&/...546?.' + 0x2e, 0x01, 0x37, 0x34, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x37, 0x32, 0x16, 0x1f, 0x01, 0x37, 0x3e, // ..746?.>.72...7> + 0x01, 0x33, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x16, 0x06, 0x0f, 0x01, 0x17, 0x03, 0x7b, // .3.............{ + 0x16, 0x25, 0x51, 0x59, 0x60, 0x34, 0x01, 0x02, 0x39, 0x67, 0x2f, 0x29, 0x4b, 0x22, 0x26, 0x37, // .%QY`4..9g/)K"&7 + 0x25, 0x12, 0x13, 0x25, 0x37, 0x25, 0x16, 0x23, 0x4e, 0x54, 0x5a, 0x30, 0x35, 0x61, 0x5a, 0x52, // %..%7%.#NTZ05aZR + 0x25, 0x22, 0x35, 0x12, 0x15, 0x16, 0x10, 0x20, 0x2f, 0x20, 0x8d, 0x0a, 0x09, 0x08, 0x08, 0x2e, // %"5.... / ...... + 0x09, 0x17, 0x0d, 0x0e, 0x17, 0x09, 0x6f, 0x6f, 0x09, 0x17, 0x0e, 0x0e, 0x16, 0x08, 0x2e, 0x09, // ......oo........ + 0x08, 0x09, 0x0a, 0x6e, 0x70, 0x09, 0x09, 0x01, 0x0a, 0x09, 0x2e, 0x08, 0x16, 0x0c, 0x0d, 0x16, // ...np........... + 0x0a, 0x70, 0x70, 0x0a, 0x16, 0x0d, 0x0c, 0x16, 0x0a, 0x2e, 0x08, 0x09, 0x01, 0x09, 0x09, 0x71, // .pp............q + 0x6f, 0x03, 0x0e, 0x16, 0x25, 0x37, 0x25, 0x14, 0x01, 0x02, 0x15, 0x15, 0x13, 0x35, 0x22, 0x25, // o...%7%......5"% + 0x52, 0x59, 0x61, 0x35, 0x34, 0x60, 0x58, 0x51, 0x25, 0x16, 0x1f, 0x2f, 0x20, 0x11, 0x01, 0x01, // RYa54`XQ%../ ... + 0x13, 0x25, 0x38, 0x25, 0x22, 0x4b, 0x29, 0x2e, 0x67, 0x39, 0x30, 0x5b, 0x53, 0x4d, 0x23, 0xfe, // .%8%"K).g90[SM#. + 0x3c, 0x0a, 0x16, 0x0c, 0x0e, 0x15, 0x08, 0x2d, 0x0a, 0x09, 0x01, 0x09, 0x09, 0x70, 0x6e, 0x0a, // <......-.....pn. + 0x09, 0x08, 0x07, 0x2e, 0x09, 0x17, 0x0e, 0x0c, 0x16, 0x0a, 0x6e, 0x70, 0x09, 0x18, 0x0e, 0x0c, // ..........np.... + 0x15, 0x0a, 0x2d, 0x08, 0x0a, 0x01, 0x0b, 0x09, 0x70, 0x70, 0x09, 0x0a, 0x01, 0x09, 0x09, 0x2e, // ..-.....pp...... + 0x09, 0x16, 0x0b, 0x0d, 0x16, 0x09, 0x70, 0x70, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ......pp........ + 0x03, 0xba, 0x00, 0x3c, 0x00, 0x00, 0x13, 0x21, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, // ...<...!.467>.;. + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x14, // 2......!2....... + 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, // ....#!......+."& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, // '..5.!"&'..=.467 + 0x3e, 0x01, 0x33, 0x46, 0x01, 0x3c, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, // >.3F.<.....~.... + 0x09, 0x01, 0x3c, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0xc4, 0x09, // ..<............. + 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0xfe, 0xc4, 0x0e, 0x17, 0x09, 0x09, // ....~........... + 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x02, 0x3e, 0x01, 0x3b, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, // .......>.;...... + 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0xc4, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, // ...........~.... + 0x08, 0xfe, 0xc4, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x3c, 0x08, // ..............<. + 0x09, 0x09, 0x17, 0x0e, 0x7d, 0x0d, 0x17, 0x09, 0x0a, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, // ....}........... + 0xff, 0xc3, 0x03, 0xfd, 0x03, 0xbd, 0x00, 0x2e, 0x00, 0x6b, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x27, // .........k.....' + 0x2e, 0x03, 0x2f, 0x01, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x23, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, // ../."....#...... + 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x3b, 0x01, 0x3e, 0x03, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x26, // ......;.>.7>.54& + 0x27, 0x07, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // '......+.......+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x35, // ."&'..=.#"&'..'5 + 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, // >.7>.;.5467>.;.2 + 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x03, 0xdd, // ......32........ + 0x12, 0x3b, 0x29, 0x22, 0x4c, 0x52, 0x58, 0x2f, 0x20, 0x34, 0x62, 0x5a, 0x52, 0x25, 0x02, 0x28, // .;)"LRX/ 4bZR%.( + 0x3a, 0x12, 0x10, 0x10, 0x13, 0x25, 0x38, 0x26, 0x25, 0x52, 0x5a, 0x62, 0x34, 0x20, 0x2f, 0x58, // :....%8&%RZb4 /X + 0x52, 0x4c, 0x22, 0x26, 0x38, 0x25, 0x13, 0x10, 0x10, 0x9f, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x9f, // RL"&8%.......... + 0x09, 0x0a, 0x0a, 0x16, 0x0b, 0x41, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x9f, 0x0e, 0x17, 0x0a, 0x07, // .....A.......... + 0x09, 0x01, 0x01, 0x09, 0x07, 0x0a, 0x17, 0x0e, 0x9f, 0x09, 0x0a, 0x08, 0x17, 0x0d, 0x41, 0x0c, // ..............A. + 0x16, 0x09, 0x0a, 0x09, 0x9f, 0x0d, 0x16, 0x0a, 0x0a, 0x09, 0x02, 0x75, 0x31, 0x59, 0x28, 0x23, // ...........u1Y(# + 0x35, 0x25, 0x15, 0x02, 0x02, 0x13, 0x25, 0x37, 0x25, 0x02, 0x28, 0x59, 0x31, 0x2a, 0x5a, 0x31, // 5%....%7%.(Y1*Z1 + 0x35, 0x62, 0x5a, 0x53, 0x25, 0x25, 0x37, 0x25, 0x13, 0x03, 0x15, 0x25, 0x35, 0x22, 0x25, 0x53, // 5bZS%%7%...%5"%S + 0x5a, 0x62, 0x35, 0x31, 0x5a, 0x2a, 0xde, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x9f, 0x0d, 0x16, 0x0a, // Zb51Z*.......... + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x9f, 0x0a, 0x09, 0x09, 0x16, 0x0e, 0x41, 0x0c, 0x15, // .............A.. + 0x0a, 0x09, 0x0a, 0x9f, 0x0d, 0x17, 0x0a, 0x08, 0x09, 0x09, 0x08, 0x0a, 0x17, 0x0d, 0x9f, 0x0a, // ................ + 0x09, 0x0b, 0x15, 0x0b, 0x41, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x01, 0x42, 0x03, 0xfa, // ....A........B.. + 0x02, 0x3e, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, // .>.............. + 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, // #!"&'..=.467>.3! + 0x32, 0x16, 0x17, 0x03, 0xe7, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, // 2............... + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x74, 0x0d, 0x16, 0x0a, 0x02, 0x2b, 0x09, // .........t....+. + 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7d, 0x0d, 0x17, // ..~..........}.. + 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ................ + 0x03, 0xba, 0x00, 0x2e, 0x00, 0x4b, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x03, 0x2f, 0x01, // .....K.....'../. + 0x22, 0x0e, 0x02, 0x07, 0x15, 0x23, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x1e, 0x02, 0x17, // "....#.......... + 0x1e, 0x03, 0x3b, 0x01, 0x3e, 0x03, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x26, 0x27, 0x07, 0x14, 0x06, // ..;.>.7>.54&'... + 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x35, 0x3e, 0x01, 0x37, 0x3e, // ...#!"&'..'5>.7> + 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x03, 0xda, 0x12, 0x3b, 0x28, 0x22, // .3!2.........;(" + 0x4b, 0x52, 0x57, 0x2f, 0x20, 0x34, 0x61, 0x59, 0x52, 0x25, 0x02, 0x27, 0x3a, 0x12, 0x10, 0x10, // KRW/ 4aYR%.':... + 0x13, 0x25, 0x38, 0x25, 0x25, 0x52, 0x59, 0x61, 0x34, 0x20, 0x2f, 0x57, 0x52, 0x4b, 0x22, 0x25, // .%8%%RYa4 /WRK"% + 0x38, 0x25, 0x13, 0x10, 0x10, 0x9e, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0xfe, 0x06, 0x0d, 0x17, 0x0a, // 8%.............. + 0x08, 0x08, 0x01, 0x01, 0x08, 0x08, 0x0a, 0x17, 0x0d, 0x01, 0xfa, 0x0c, 0x17, 0x09, 0x0a, 0x09, // ................ + 0x02, 0x74, 0x30, 0x59, 0x28, 0x22, 0x35, 0x25, 0x15, 0x02, 0x02, 0x13, 0x24, 0x38, 0x24, 0x02, // .t0Y("5%....$8$. + 0x28, 0x59, 0x30, 0x2a, 0x5a, 0x30, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x37, 0x25, 0x13, 0x03, // (Y0*Z05aZR%$7%.. + 0x15, 0x25, 0x34, 0x22, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x30, 0x5a, 0x2a, 0xdb, 0x0b, 0x14, 0x08, // .%4"%RZa50Z*.... + 0x08, 0x09, 0x09, 0x08, 0x08, 0x13, 0x0c, 0x4e, 0x0c, 0x13, 0x08, 0x08, 0x09, 0x09, 0x08, 0x08, // .......N........ + 0x14, 0x0b, 0x4e, 0x00, 0x00, 0x02, 0x00, 0xf4, 0xff, 0xc6, 0x03, 0x0c, 0x03, 0xba, 0x00, 0x31, // ..N............1 + 0x00, 0x4c, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x33, 0x32, 0x16, 0x17, // .L...2......32.. + 0x1e, 0x01, 0x1d, 0x01, 0x0f, 0x01, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, // ......!"&'..=.46 + 0x37, 0x35, 0x3e, 0x01, 0x3b, 0x01, 0x11, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, // 75>.;..#"&'..=.4 + 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, // 67>.3!'..5467>.3 + 0x32, 0x16, 0x17, 0x23, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x35, 0x0e, 0x01, 0x23, 0x22, 0x26, // 2..#......5..#"& + 0x27, 0x02, 0x3b, 0x12, 0x20, 0x0d, 0x0d, 0x0e, 0x1d, 0x12, 0x20, 0x0d, 0x0d, 0x0e, 0x09, 0x15, // '.;. ..... ..... + 0xfe, 0x24, 0x06, 0x0a, 0x05, 0x04, 0x05, 0x0d, 0x0d, 0x0d, 0x20, 0x13, 0x1d, 0x59, 0x06, 0x0a, // .$........ ..Y.. + 0x05, 0x04, 0x05, 0x05, 0x04, 0x05, 0x0a, 0x06, 0x01, 0x29, 0xa5, 0x15, 0x16, 0x16, 0x15, 0x17, // .........)...... + 0x34, 0x1f, 0x1f, 0x35, 0x16, 0x02, 0x16, 0x17, 0x17, 0x16, 0x15, 0x34, 0x1f, 0x1f, 0x35, 0x16, // 4..5.......4..5. + 0x02, 0x55, 0x0e, 0x0d, 0x0d, 0x20, 0x12, 0xfe, 0x7e, 0x0e, 0x0d, 0x0d, 0x20, 0x11, 0x3c, 0x15, // .U... ..~... .<. + 0x09, 0x05, 0x04, 0x05, 0x0a, 0x06, 0x3a, 0x13, 0x1f, 0x0d, 0x01, 0x0d, 0x0e, 0x01, 0x29, 0x05, // ......:.......). + 0x04, 0x05, 0x0a, 0x06, 0x77, 0x06, 0x0a, 0x05, 0x04, 0x05, 0x66, 0x17, 0x34, 0x1f, 0x1e, 0x34, // ....w.....f.4..4 + 0x16, 0x16, 0x17, 0x17, 0x16, 0x16, 0x34, 0x1e, 0x20, 0x36, 0x15, 0x01, 0x15, 0x16, 0x16, 0x15, // ......4. 6...... + 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x2c, 0x00, 0x47, 0x00, 0x79, // ...........,.G.y + 0x00, 0x00, 0x01, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x23, 0x0e, 0x03, 0x15, 0x14, 0x1e, 0x02, 0x17, // ..."....#....... + 0x1e, 0x03, 0x3b, 0x01, 0x3e, 0x03, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x03, // ..;.>.7>.54..'.. + 0x2f, 0x01, 0x15, 0x32, 0x16, 0x17, 0x23, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x35, 0x0e, 0x01, // /..2..#......5.. + 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x07, 0x33, 0x32, // #"&'..5467>.3.32 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x0f, 0x01, // ......32........ + 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x35, 0x3e, 0x01, 0x3b, 0x01, // !"&'..=.4675>.;. + 0x35, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x02, // 5#"&'..=.467>.3. + 0x00, 0x34, 0x61, 0x59, 0x52, 0x25, 0x02, 0x24, 0x38, 0x24, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, // .4aYR%.$8$..%8%% + 0x52, 0x59, 0x61, 0x34, 0x20, 0x2f, 0x57, 0x52, 0x4b, 0x22, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, // RYa4 /WRK"%8%..% + 0x38, 0x25, 0x22, 0x4b, 0x52, 0x57, 0x2f, 0x20, 0x15, 0x24, 0x0f, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, // 8%"KRW/ .$...... + 0x0f, 0x23, 0x15, 0x15, 0x24, 0x0f, 0x0f, 0x0e, 0x0e, 0x0f, 0x0f, 0x24, 0x15, 0xa2, 0xcb, 0x0c, // .#..$......$.... + 0x15, 0x09, 0x09, 0x09, 0x15, 0x0c, 0x15, 0x09, 0x09, 0x09, 0x06, 0x0e, 0xfe, 0xbc, 0x04, 0x07, // ................ + 0x03, 0x03, 0x03, 0x08, 0x09, 0x09, 0x16, 0x0c, 0x15, 0x3d, 0x04, 0x07, 0x03, 0x03, 0x03, 0x03, // .........=...... + 0x03, 0x03, 0x07, 0x04, 0x03, 0xba, 0x13, 0x24, 0x38, 0x24, 0x02, 0x25, 0x52, 0x59, 0x61, 0x34, // .......$8$.%RYa4 + 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x37, 0x25, 0x13, 0x03, 0x15, 0x25, 0x34, 0x22, 0x25, 0x52, // 5aZR%$7%...%4"%R + 0x5a, 0x61, 0x35, 0x34, 0x61, 0x59, 0x52, 0x25, 0x22, 0x35, 0x25, 0x15, 0x02, 0x02, 0xa2, 0x0f, // Za54aYR%"5%..... + 0x0f, 0x0f, 0x24, 0x14, 0x16, 0x24, 0x0f, 0x01, 0x0e, 0x0f, 0x0f, 0x0e, 0x0f, 0x24, 0x15, 0x15, // ..$..$.......$.. + 0x23, 0x0f, 0x0f, 0x0f, 0xf3, 0x09, 0x09, 0x09, 0x15, 0x0c, 0xfe, 0xf8, 0x09, 0x09, 0x09, 0x16, // #............... + 0x0c, 0x28, 0x0e, 0x06, 0x03, 0x03, 0x03, 0x07, 0x04, 0x27, 0x0d, 0x15, 0x09, 0x01, 0x09, 0x09, // .(.......'...... + 0xcb, 0x03, 0x03, 0x03, 0x07, 0x04, 0x51, 0x04, 0x07, 0x03, 0x03, 0x03, 0x00, 0x02, 0x00, 0xc4, // ......Q......... + 0xff, 0xc6, 0x03, 0x3c, 0x03, 0xba, 0x00, 0x18, 0x00, 0x5a, 0x00, 0x00, 0x25, 0x32, 0x16, 0x17, // ...<.....Z..%2.. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, // ........#"&'..54 + 0x36, 0x37, 0x3e, 0x01, 0x33, 0x03, 0x0e, 0x01, 0x2b, 0x01, 0x2f, 0x02, 0x3e, 0x01, 0x37, 0x3e, // 67>.3...+./.>.7> + 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x33, 0x0f, 0x02, 0x15, // .32.........3... + 0x0f, 0x01, 0x23, 0x15, 0x33, 0x0f, 0x01, 0x15, 0x0f, 0x01, 0x23, 0x27, 0x2e, 0x01, 0x27, 0x35, // ..#.3.....#'..'5 + 0x33, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x3f, 0x02, 0x27, 0x2e, 0x01, 0x07, 0x22, 0x06, 0x07, 0x35, // 3>.7>.?.'..."..5 + 0x0e, 0x01, 0x0f, 0x01, 0x02, 0x0d, 0x1e, 0x33, 0x15, 0x16, 0x15, 0x15, 0x16, 0x15, 0x33, 0x1e, // .......3......3. + 0x1d, 0x31, 0x14, 0x15, 0x14, 0x14, 0x15, 0x14, 0x31, 0x1d, 0x41, 0x06, 0x0d, 0x08, 0xc9, 0x13, // .1......1.A..... + 0x0e, 0x03, 0x06, 0x34, 0x2d, 0x2c, 0x6f, 0x43, 0x44, 0x6d, 0x2b, 0x2c, 0x2b, 0x09, 0x08, 0x12, // ...4-,oCDm+,+... + 0x02, 0x1d, 0x01, 0x19, 0x3b, 0x18, 0x09, 0x09, 0x06, 0x03, 0x0b, 0x1d, 0xc0, 0x1b, 0x06, 0x06, // ....;........... + 0x01, 0x05, 0x01, 0x07, 0x05, 0x07, 0x1f, 0x19, 0x55, 0x08, 0x0b, 0x04, 0x0b, 0x07, 0x07, 0x0d, // ........U....... + 0x06, 0x07, 0x08, 0x02, 0x0e, 0xe3, 0x14, 0x14, 0x14, 0x33, 0x1e, 0x1e, 0x33, 0x16, 0x14, 0x15, // .........3..3... + 0x15, 0x14, 0x15, 0x33, 0x1f, 0x1e, 0x33, 0x14, 0x14, 0x14, 0x01, 0x80, 0x05, 0x05, 0x07, 0x0e, // ...3..3......... + 0x18, 0x48, 0x71, 0x28, 0x2a, 0x29, 0x25, 0x24, 0x27, 0x6a, 0x43, 0x20, 0x30, 0x0f, 0x21, 0x2a, // .Hq(*)%$'jC 0.!* + 0x02, 0x1c, 0x02, 0x39, 0x1b, 0x01, 0x08, 0x1b, 0x16, 0x1a, 0x09, 0x09, 0x06, 0x0d, 0x07, 0x58, // ...9...........X + 0x0e, 0x17, 0x09, 0x0f, 0x29, 0x1a, 0x55, 0x23, 0x23, 0x06, 0x04, 0x01, 0x06, 0x06, 0x01, 0x0b, // ....).U##....... + 0x1d, 0x12, 0x19, 0x00, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x2c, // ..............., + 0x00, 0x6e, 0x00, 0x87, 0x00, 0x00, 0x01, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x23, 0x0e, 0x03, 0x15, // .n....."....#... + 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x3b, 0x01, 0x3e, 0x03, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x2e, // ......;.>.7>.54. + 0x02, 0x27, 0x2e, 0x03, 0x2f, 0x01, 0x17, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, // .'../..2........ + 0x01, 0x33, 0x0f, 0x02, 0x15, 0x0f, 0x01, 0x23, 0x15, 0x33, 0x0f, 0x01, 0x15, 0x0f, 0x01, 0x23, // .3.....#.3.....# + 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x33, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x3f, 0x02, 0x27, 0x2e, 0x01, // '..=.3>.7>.?.'.. + 0x07, 0x22, 0x06, 0x07, 0x35, 0x0e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x2b, 0x01, 0x2f, 0x02, 0x3e, // ."..5......+./.> + 0x01, 0x37, 0x3e, 0x01, 0x33, 0x13, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, // .7>.3.2......... + 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x02, 0x00, // .#"&'..5467>.3.. + 0x34, 0x61, 0x59, 0x52, 0x25, 0x02, 0x24, 0x38, 0x24, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x52, // 4aYR%.$8$..%8%%R + 0x59, 0x61, 0x34, 0x20, 0x2f, 0x57, 0x52, 0x4b, 0x22, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, // Ya4 /WRK"%8%..%8 + 0x25, 0x22, 0x4b, 0x52, 0x57, 0x2f, 0x20, 0x06, 0x2b, 0x47, 0x1b, 0x1c, 0x1c, 0x06, 0x06, 0x0b, // %"KRW/ .+G...... + 0x01, 0x12, 0x01, 0x10, 0x26, 0x0f, 0x06, 0x06, 0x04, 0x02, 0x07, 0x12, 0x7c, 0x11, 0x04, 0x04, // ....&.......|... + 0x03, 0x01, 0x04, 0x03, 0x05, 0x14, 0x10, 0x36, 0x05, 0x07, 0x02, 0x08, 0x04, 0x05, 0x08, 0x03, // .......6........ + 0x05, 0x05, 0x01, 0x0a, 0x03, 0x09, 0x05, 0x80, 0x0d, 0x09, 0x02, 0x04, 0x21, 0x1d, 0x1d, 0x47, // ............!..G + 0x2b, 0x02, 0x13, 0x21, 0x0e, 0x0e, 0x0d, 0x0d, 0x0e, 0x0e, 0x21, 0x13, 0x12, 0x20, 0x0d, 0x0d, // +..!......!.. .. + 0x0d, 0x0d, 0x0d, 0x0d, 0x20, 0x12, 0x03, 0xba, 0x13, 0x24, 0x38, 0x24, 0x02, 0x25, 0x52, 0x59, // .... ....$8$.%RY + 0x61, 0x34, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x37, 0x25, 0x13, 0x03, 0x15, 0x25, 0x34, 0x22, // a45aZR%$7%...%4" + 0x25, 0x52, 0x5a, 0x61, 0x35, 0x34, 0x61, 0x59, 0x52, 0x25, 0x22, 0x35, 0x25, 0x15, 0x02, 0x02, // %RZa54aYR%"5%... + 0xb6, 0x17, 0x17, 0x19, 0x44, 0x2b, 0x15, 0x1e, 0x0a, 0x15, 0x1c, 0x01, 0x12, 0x01, 0x24, 0x12, // ....D+........$. + 0x01, 0x05, 0x11, 0x0e, 0x10, 0x06, 0x06, 0x03, 0x08, 0x05, 0x39, 0x09, 0x0f, 0x05, 0x0a, 0x1a, // ..........9..... + 0x11, 0x36, 0x17, 0x16, 0x04, 0x03, 0x01, 0x04, 0x04, 0x01, 0x07, 0x13, 0x0c, 0x10, 0x03, 0x03, // .6.............. + 0x04, 0x09, 0x10, 0x2e, 0x49, 0x19, 0x1b, 0x1a, 0xfe, 0x2e, 0x0c, 0x0d, 0x0d, 0x21, 0x13, 0x13, // ....I........!.. + 0x21, 0x0e, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x21, 0x14, 0x13, 0x21, 0x0d, 0x0d, 0x0c, 0x00, 0x00, // !......!..!..... + 0x00, 0x02, 0x01, 0x79, 0xff, 0xc6, 0x02, 0x87, 0x03, 0xba, 0x00, 0x1a, 0x00, 0x37, 0x00, 0x00, // ...y.........7.. + 0x25, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x23, 0x1e, 0x01, 0x15, 0x14, 0x06, // %467>.32..#..... + 0x07, 0x35, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x13, 0x1e, 0x01, 0x15, 0x11, // .5..#"&'..5..... + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // .....+."&'..5.46 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x01, 0x79, 0x14, 0x13, 0x14, 0x30, 0x1c, 0x1d, // 7>.;.2...y...0.. + 0x30, 0x13, 0x02, 0x15, 0x14, 0x14, 0x15, 0x13, 0x2f, 0x1c, 0x1d, 0x30, 0x13, 0x13, 0x14, 0xfa, // 0......./..0.... + 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x17, 0x0e, 0x86, 0x0f, 0x18, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x0a, // ................ + 0x18, 0x0f, 0x86, 0x0e, 0x17, 0x0b, 0x4d, 0x1c, 0x2f, 0x14, 0x14, 0x14, 0x14, 0x14, 0x15, 0x2f, // ......M./....../ + 0x1b, 0x1c, 0x31, 0x15, 0x02, 0x13, 0x14, 0x14, 0x13, 0x14, 0x30, 0x1c, 0x03, 0x58, 0x0a, 0x17, // ..1.......0..X.. + 0x0e, 0xfe, 0x07, 0x0f, 0x18, 0x0a, 0x0a, 0x09, 0x09, 0x0a, 0x0a, 0x18, 0x0f, 0x01, 0xf8, 0x0e, // ................ + 0x18, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ................ + 0x03, 0xba, 0x00, 0x2a, 0x00, 0x47, 0x00, 0x62, 0x00, 0x00, 0x01, 0x22, 0x0e, 0x02, 0x07, 0x15, // ...*.G.b...".... + 0x23, 0x0e, 0x03, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x3e, // #.........32>.7> + 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x23, 0x07, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, // .54..'..#.32.... + 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, // .......+."&'..5. + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x13, 0x32, 0x16, 0x17, 0x23, 0x1e, 0x01, 0x15, 0x14, 0x06, // 467>.3.2..#..... + 0x07, 0x35, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, // .5..#"&'..5467>. + 0x33, 0x02, 0x00, 0x34, 0x61, 0x59, 0x52, 0x25, 0x02, 0x24, 0x38, 0x24, 0x13, 0x13, 0x25, 0x38, // 3..4aYR%.$8$..%8 + 0x25, 0x25, 0x52, 0x59, 0x61, 0x34, 0x34, 0x61, 0x59, 0x52, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, // %%RYa44aYR%%8%.. + 0x25, 0x38, 0x25, 0x25, 0x52, 0x59, 0x61, 0x34, 0x29, 0x52, 0x08, 0x0e, 0x06, 0x06, 0x06, 0x06, // %8%%RYa4)R...... + 0x06, 0x06, 0x0e, 0x08, 0x52, 0x08, 0x0f, 0x06, 0x05, 0x06, 0x05, 0x06, 0x06, 0x0f, 0x08, 0x29, // ....R..........) + 0x11, 0x1d, 0x0c, 0x01, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1c, 0x11, 0x11, 0x1d, 0x0c, 0x0b, 0x0c, // ................ + 0x0c, 0x0b, 0x0c, 0x1d, 0x11, 0x03, 0xba, 0x13, 0x24, 0x38, 0x24, 0x02, 0x25, 0x52, 0x59, 0x61, // ........$8$.%RYa + 0x34, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x37, 0x25, 0x13, 0x13, 0x25, 0x37, 0x24, 0x25, 0x52, // 45aZR%$7%..%7$%R + 0x5a, 0x61, 0x35, 0x34, 0x61, 0x59, 0x52, 0x25, 0x25, 0x38, 0x25, 0x13, 0xca, 0x06, 0x06, 0x06, // Za54aYR%%8%..... + 0x0e, 0x09, 0xfe, 0xd0, 0x08, 0x0f, 0x06, 0x06, 0x05, 0x05, 0x06, 0x06, 0x0f, 0x08, 0x01, 0x2f, // .............../ + 0x09, 0x0f, 0x06, 0x06, 0x06, 0xfe, 0x42, 0x0c, 0x0c, 0x0c, 0x1d, 0x10, 0x11, 0x1e, 0x0c, 0x01, // ......B......... + 0x0b, 0x0c, 0x0c, 0x0b, 0x0d, 0x1c, 0x11, 0x11, 0x1c, 0x0c, 0x0c, 0x0c, 0x00, 0x03, 0x00, 0x07, // ................ + 0xff, 0xe6, 0x03, 0xf9, 0x03, 0x93, 0x00, 0x1c, 0x00, 0x37, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x07, // .........7...... + 0x0e, 0x01, 0x15, 0x11, 0x14, 0x16, 0x1f, 0x02, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x11, // ........3267>.5. + 0x34, 0x26, 0x27, 0x2e, 0x01, 0x2b, 0x01, 0x22, 0x06, 0x07, 0x13, 0x22, 0x06, 0x07, 0x0e, 0x01, // 4&'..+."...".... + 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x15, 0x3e, 0x01, 0x35, 0x34, 0x26, // ......3267.>.54& + 0x27, 0x33, 0x2e, 0x01, 0x23, 0x03, 0x36, 0x32, 0x17, 0x33, 0x1e, 0x01, 0x17, 0x01, 0x1e, 0x01, // '3..#.62.3...... + 0x07, 0x15, 0x0e, 0x01, 0x07, 0x33, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x27, // .....3..#!"&'..' + 0x26, 0x36, 0x37, 0x33, 0x01, 0x35, 0x3e, 0x01, 0x37, 0x33, 0x01, 0xd1, 0x0c, 0x09, 0x08, 0x08, // &673.5>.73...... + 0x09, 0x0c, 0x1f, 0x20, 0x0c, 0x15, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x15, 0x0c, 0x20, 0x09, // ... .......... . + 0x0f, 0x07, 0x2f, 0x10, 0x1b, 0x0c, 0x0a, 0x0b, 0x0b, 0x0a, 0x0c, 0x1b, 0x10, 0x10, 0x1b, 0x0b, // ../............. + 0x0b, 0x0c, 0x0c, 0x0b, 0x01, 0x0a, 0x1c, 0x11, 0x1d, 0x0f, 0x1e, 0x0f, 0x02, 0x0c, 0x14, 0x07, // ................ + 0x01, 0xa5, 0x07, 0x06, 0x01, 0x02, 0x0e, 0x0b, 0x01, 0x0c, 0x1d, 0x11, 0xfc, 0xb7, 0x12, 0x1d, // ................ + 0x0c, 0x0a, 0x0d, 0x03, 0x02, 0x06, 0x07, 0x02, 0x01, 0xa5, 0x07, 0x15, 0x0d, 0x01, 0x02, 0x9d, // ................ + 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0xee, 0x0d, 0x16, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x16, 0x0d, // ................ + 0x01, 0x14, 0x0c, 0x15, 0x0a, 0x09, 0x09, 0x05, 0x04, 0xfe, 0x3e, 0x0c, 0x0b, 0x0b, 0x1b, 0x10, // ..........>..... + 0x0f, 0x1b, 0x0b, 0x0c, 0x0b, 0x0b, 0x0c, 0x02, 0x0c, 0x1b, 0x10, 0x10, 0x1a, 0x0c, 0x0b, 0x0c, // ................ + 0x02, 0xb8, 0x07, 0x07, 0x05, 0x14, 0x0f, 0xfd, 0x0c, 0x0e, 0x1f, 0x10, 0x01, 0x12, 0x1c, 0x0b, // ................ + 0x0d, 0x0d, 0x0e, 0x0d, 0x0c, 0x1b, 0x11, 0x10, 0x1f, 0x0f, 0x02, 0xf4, 0x02, 0x0e, 0x13, 0x05, // ................ + 0x00, 0x02, 0x00, 0x12, 0xff, 0xe8, 0x03, 0xfa, 0x03, 0x98, 0x00, 0x18, 0x00, 0x25, 0x00, 0x00, // .............%.. + 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, // ?.>.36.......... + 0x01, 0x07, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x01, 0x17, 0x06, 0x02, 0x0e, 0x01, 0x2f, // ..'..7>.7....../ + 0x01, 0x26, 0x3e, 0x01, 0x24, 0x37, 0x68, 0x03, 0x0e, 0x23, 0x15, 0x14, 0x24, 0x0f, 0x0e, 0x0e, // .&>.$7h..#..$... + 0x0e, 0x0e, 0x03, 0x1f, 0x3f, 0x21, 0x5f, 0x0f, 0x03, 0x0d, 0x0d, 0x2b, 0x1e, 0x03, 0x2e, 0x64, // ....?!_....+...d + 0x7b, 0xd9, 0xbe, 0xa3, 0x44, 0x2e, 0x18, 0x40, 0xb1, 0x01, 0x21, 0xc9, 0xc7, 0x03, 0x0e, 0x0e, // {...D..@..!..... + 0x01, 0x0e, 0x0e, 0x0e, 0x23, 0x15, 0x14, 0x23, 0x0e, 0x03, 0x1e, 0x2a, 0x0d, 0x03, 0x0e, 0x2f, // ....#..#...*.../ + 0x21, 0x21, 0x3f, 0x1e, 0x02, 0xd1, 0x5d, 0xc8, 0xfe, 0xe2, 0xab, 0x38, 0x1d, 0x2e, 0x4a, 0xa4, // !!?...]....8..J. + 0xb7, 0xc8, 0x6e, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x06, // ..n............. + 0x00, 0x00, 0x0d, 0x01, 0x27, 0x13, 0x09, 0x02, 0x01, 0x57, 0xfe, 0xe6, 0x37, 0x37, 0x02, 0xa3, // ....'....W..77.. + 0x01, 0x1a, 0xfd, 0x5d, 0x03, 0x37, 0x37, 0x01, 0x1a, 0x02, 0xa3, 0xfe, 0xe7, 0xfd, 0x5c, 0x00, // ...].77......... + 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, // .............!.. + 0x25, 0x11, 0x21, 0x11, 0x21, 0x13, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // %.!.!..........# + 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, // !"&'..5.467>.3!2 + 0x16, 0x17, 0x03, 0x51, 0xfd, 0x5e, 0x02, 0xa2, 0x94, 0x0a, 0x0b, 0x0b, 0x0a, 0x0a, 0x17, 0x0e, // ...Q.^.......... + 0xfc, 0x94, 0x0f, 0x18, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x18, 0x0f, 0x03, 0x6c, 0x0e, 0x17, // .............l.. + 0x0a, 0x6f, 0x02, 0xa2, 0xfd, 0x5e, 0x03, 0x36, 0x0a, 0x17, 0x0e, 0xfc, 0x94, 0x0f, 0x18, 0x0a, // .o...^.6........ + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x18, 0x0f, 0x03, 0x6b, 0x0e, 0x18, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, // ........k....... + 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x21, 0x00, 0x3e, 0x00, 0x5a, // ...........!.>.Z + 0x00, 0x00, 0x01, 0x17, 0x27, 0x35, 0x2e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x21, 0x11, // ....'5........!. + 0x33, 0x1f, 0x01, 0x33, 0x17, 0x33, 0x37, 0x33, 0x37, 0x21, 0x11, 0x3f, 0x01, 0x3e, 0x01, 0x3d, // 3..3.3737!.?.>.= + 0x01, 0x2e, 0x01, 0x27, 0x37, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, // ...'72.......... + 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, // .#!"&'..5.467>.3 + 0x21, 0x07, 0x1f, 0x02, 0x07, 0x01, 0x0f, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x03, 0x27, 0x3f, 0x03, // !.......'..'.'?. + 0x32, 0x16, 0x1f, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x37, 0x17, 0x03, 0x9f, 0x01, 0x7e, 0x14, 0x2c, // 2...?.>.7....~., + 0x18, 0x0c, 0x1f, 0x2d, 0x0f, 0x2f, 0xfe, 0x7b, 0xf3, 0x21, 0x04, 0x03, 0x20, 0x03, 0x10, 0x03, // ...-./.{.!.. ... + 0x27, 0x01, 0x2a, 0x5e, 0x07, 0x0c, 0x0c, 0x04, 0x18, 0x13, 0x17, 0x0e, 0x17, 0x0a, 0x0a, 0x0b, // '.*^............ + 0x0b, 0x0a, 0x0a, 0x17, 0x0e, 0xfc, 0x94, 0x0f, 0x18, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x18, // ................ + 0x0f, 0x03, 0x6c, 0xd6, 0x02, 0x7d, 0x0a, 0x07, 0xfe, 0x97, 0x0d, 0x07, 0x0a, 0x05, 0x09, 0x03, // ..l..}.......... + 0xfe, 0x09, 0x0c, 0x7d, 0x0a, 0x0c, 0x06, 0x0b, 0x04, 0x6b, 0xd4, 0x02, 0x03, 0x09, 0x06, 0x16, // ...}.....k...... + 0x02, 0xf6, 0x03, 0x6c, 0x01, 0x11, 0x10, 0x01, 0x01, 0x04, 0x1b, 0x17, 0x38, 0xfd, 0x5e, 0x0c, // ...l........8.^. + 0x02, 0x03, 0x03, 0x0e, 0x01, 0x5b, 0x71, 0x08, 0x13, 0x28, 0x15, 0x0b, 0x1e, 0x2c, 0x0e, 0xc4, // .....[q..(...,.. + 0x0a, 0x0b, 0x0a, 0x17, 0x0e, 0xfc, 0x94, 0x0f, 0x18, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x18, // ................ + 0x0f, 0x03, 0x6b, 0x0e, 0x18, 0x0a, 0x0a, 0x0b, 0xa7, 0x02, 0x6a, 0x14, 0x16, 0xfe, 0x52, 0x0a, // ..k.......j...R. + 0x02, 0x02, 0x01, 0x05, 0x04, 0x01, 0x2f, 0x18, 0x14, 0x6c, 0x05, 0x03, 0x06, 0x05, 0x7f, 0xfb, // ....../..l...... + 0x02, 0x04, 0x05, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ................ + 0x03, 0xba, 0x00, 0x28, 0x00, 0x41, 0x00, 0x00, 0x01, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x07, // ...(.A.....#"... + 0x0e, 0x03, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x3e, 0x03, // .........32>.7>. + 0x35, 0x34, 0x2e, 0x02, 0x27, 0x03, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, // 54..'...#"&'..54 + 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x03, 0x67, // 67>.32.........g + 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, // %RZa55aYR$%8%..% + 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, // 8%$RYa55aZR%%7$. + 0x13, 0x24, 0x37, 0x25, 0x78, 0x31, 0x78, 0x46, 0x46, 0x77, 0x31, 0x31, 0x32, 0x32, 0x31, 0x31, // .$7%x1xFFw112211 + 0x77, 0x46, 0x46, 0x78, 0x31, 0x31, 0x31, 0x31, 0x31, 0x03, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, // wFFx11111.%%8%.. + 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, // %8%$RYa55aZR%%7$ + 0x13, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0xfd, // ..$7%%RZa55aYR$. + 0xac, 0x31, 0x31, 0x31, 0x31, 0x31, 0x78, 0x46, 0x46, 0x77, 0x31, 0x31, 0x32, 0x32, 0x31, 0x31, // .11111xFFw112211 + 0x77, 0x46, 0x46, 0x78, 0x31, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // wFFx1........... + 0x03, 0xba, 0x00, 0x18, 0x00, 0x31, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, // .....1.Z........ + 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, // ...#"&'..5467>.3 + 0x32, 0x16, 0x17, 0x27, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, // 2..'"..........3 + 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x25, 0x3e, 0x03, 0x33, // 267>.54&'..#%>.3 + 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, // 2............#". + 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x02, 0xb4, 0x25, 0x24, 0x24, 0x25, 0x26, // .'..54>.7..%$$%& + 0x5a, 0x34, 0x34, 0x5a, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x5a, 0x34, 0x34, 0x5a, 0x26, 0xb4, // Z44Z%%%%%%Z44Z&. + 0x46, 0x77, 0x31, 0x31, 0x32, 0x32, 0x31, 0x31, 0x77, 0x46, 0x46, 0x78, 0x31, 0x31, 0x31, 0x31, // Fw112211wFFx1111 + 0x31, 0x31, 0x78, 0x46, 0xfe, 0x9b, 0x24, 0x52, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, // 11xF..$RYa55aZR% + 0x25, 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, // %7$..$7%%RZa55aY + 0x52, 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x02, 0x73, 0x25, 0x5a, 0x34, 0x34, // R$%8%..%8%.s%Z44 + 0x5a, 0x26, 0x25, 0x24, 0x24, 0x25, 0x26, 0x5a, 0x34, 0x34, 0x5a, 0x25, 0x25, 0x25, 0x25, 0x25, // Z&%$$%&Z44Z%%%%% + 0x9e, 0x32, 0x31, 0x31, 0x77, 0x46, 0x46, 0x78, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x78, 0x46, // .211wFFx111111xF + 0x46, 0x77, 0x31, 0x31, 0x32, 0x14, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, // Fw112.%8%..%8%$R + 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x25, // Ya55aZR%%7$..$7% + 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0x00, 0x00, 0x00, 0x02, 0x00, 0x4a, // %RZa55aYR$.....J + 0xff, 0xc6, 0x03, 0xb6, 0x03, 0xba, 0x00, 0x13, 0x00, 0x27, 0x00, 0x00, 0x13, 0x34, 0x36, 0x37, // .........'...467 + 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x1f, 0x01, 0x07, 0x01, 0x07, 0x27, 0x01, 0x2e, 0x01, 0x35, // >.3!2......'...5 + 0x25, 0x17, 0x0f, 0x01, 0x21, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x01, 0x3e, 0x01, 0x33, // %...!'..5467.>.3 + 0x32, 0x16, 0x17, 0x01, 0x4a, 0x05, 0x05, 0x05, 0x0c, 0x07, 0x03, 0x28, 0x07, 0x0c, 0x05, 0x0a, // 2...J......(.... + 0x0a, 0xfe, 0x6c, 0x18, 0x18, 0xfe, 0x6c, 0x05, 0x05, 0x03, 0x62, 0x0a, 0x0a, 0x18, 0xfc, 0xd8, // ..l...l...b..... + 0x18, 0x05, 0x05, 0x05, 0x05, 0x01, 0x94, 0x05, 0x0c, 0x07, 0x07, 0x0c, 0x05, 0x01, 0x94, 0x01, // ................ + 0x7d, 0x06, 0x0c, 0x05, 0x05, 0x05, 0x05, 0x05, 0x17, 0x18, 0xfe, 0x6c, 0x0b, 0x0a, 0x01, 0x95, // }..........l.... + 0x05, 0x0c, 0x07, 0x9e, 0x18, 0x17, 0x0a, 0x0a, 0x05, 0x0c, 0x06, 0x07, 0x0c, 0x05, 0x01, 0x94, // ................ + 0x06, 0x05, 0x05, 0x05, 0xfe, 0x6b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0a, 0x03, 0xfa, // .....k.......... + 0x03, 0x76, 0x00, 0x15, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x11, 0x0f, 0x01, // .v...+...2...... + 0x22, 0x26, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x01, 0x3e, 0x01, 0x33, 0x01, 0x07, // "&'...5467.>.3.. + 0x01, 0x07, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, // .."&'..5.467>.32 + 0x16, 0x17, 0x01, 0x17, 0x01, 0xbd, 0x06, 0x0c, 0x05, 0x0a, 0x0a, 0x17, 0x07, 0x0c, 0x05, 0xfe, // ................ + 0x6c, 0x06, 0x05, 0x05, 0x05, 0x01, 0x95, 0x05, 0x0c, 0x07, 0x02, 0x3d, 0x0a, 0xfe, 0x6b, 0x18, // l..........=..k. + 0x06, 0x0c, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x0c, 0x06, 0x07, 0x0c, 0x05, 0x01, 0x95, 0x0a, // ................ + 0x03, 0x76, 0x05, 0x05, 0x18, 0xfc, 0xd8, 0x18, 0x0a, 0x05, 0x05, 0x01, 0x94, 0x05, 0x0c, 0x07, // .v.............. + 0x07, 0x0c, 0x05, 0x01, 0x94, 0x05, 0x05, 0xfe, 0x4a, 0x18, 0xfe, 0x6c, 0x0a, 0x05, 0x05, 0x05, // ........J..l.... + 0x0c, 0x07, 0x03, 0x28, 0x07, 0x0c, 0x05, 0x05, 0x05, 0x05, 0x05, 0xfe, 0x6c, 0x18, 0x00, 0x00, // ...(........l... + 0x00, 0x09, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x56, // .............9.V + 0x00, 0x73, 0x00, 0x90, 0x00, 0xad, 0x00, 0xca, 0x00, 0xe7, 0x01, 0x04, 0x00, 0x00, 0x25, 0x15, // .s............%. + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, // .....+."&'..=.46 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x03, 0x32, 0x16, 0x17, 0x1e, // 7>.;.2......2... + 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, // ........+."&'..= + 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x13, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // .467>.;........+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, // ."&'..=.467>.;.2 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x01, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // ...............+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, // ."&'..=.467>.;.2 + 0x16, 0x17, 0x05, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, // .........+."&'.. + 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x01, // =.467>.;.2...... + 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, // .........+."&'.. + 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x37, 0x33, 0x32, 0x16, // =.467>.;.2..732. + 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, // ..........+."&'. + 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x03, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, // .=.467>.3....... + 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, // +."&'..=.467>.;. + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x21, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, // 2.....!......+." + 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, // &'..=.467>.;.2.. + 0x1e, 0x01, 0x15, 0x01, 0x03, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, // ..........~..... + 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x3f, 0x0d, 0x16, 0x09, 0x0a, // .....~.....?.... + 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, // ......~......... + 0x0e, 0x7e, 0x3f, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, // .~?.....~....... + 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x01, 0x68, 0x0a, 0x09, 0x09, 0x0a, 0x09, // ...~......h..... + 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, // ..~..........~.. + 0x09, 0x01, 0x8f, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0x0d, 0x17, 0x0a, 0x09, 0x08, 0x08, 0x09, // ........~....... + 0x0a, 0x17, 0x0d, 0x7e, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0xfe, 0x71, 0x0a, 0x09, 0x09, 0x0a, 0x09, // ...~......q..... + 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, // ..~..........~.. + 0x09, 0xd1, 0x7e, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0x0d, 0x17, // ..~..........~.. + 0x0a, 0x09, 0x08, 0x08, 0x09, 0x0a, 0x17, 0x0d, 0xbe, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, // ..............~. + 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x01, // .........~...... + 0x7c, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0x0d, 0x17, 0x0a, 0x09, 0x08, 0x08, 0x09, 0x0a, 0x17, // |.....~......... + 0x0d, 0x7e, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x84, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, // .~......~....... + 0x09, 0x17, 0x0e, 0x7c, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x01, 0xba, // ...|............ + 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, // .....~.......... + 0x7d, 0x0d, 0x17, 0x09, 0x0a, 0x09, 0x01, 0x3c, 0x7e, 0x0d, 0x17, 0x0a, 0x08, 0x09, 0x09, 0x08, // }......<~....... + 0x0a, 0x17, 0x0d, 0x7d, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfd, 0x36, // ...}...........6 + 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7c, 0x0e, // ...~..........|. + 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x2c, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, // ......,~........ + 0x17, 0x0e, 0x7c, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x01, 0xa7, 0x09, // ..|............. + 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7d, 0x0d, 0x17, // ..~..........}.. + 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x13, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, // ...........~.... + 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7d, 0x0d, 0x17, 0x09, 0x0a, 0x09, 0x01, 0x3c, 0x7e, 0x0d, // ......}......<~. + 0x17, 0x0a, 0x08, 0x09, 0x09, 0x08, 0x0a, 0x17, 0x0d, 0x7d, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, // .........}...... + 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0x0d, 0x17, 0x0a, 0x08, 0x09, 0x09, 0x08, 0x0a, 0x17, 0x0d, 0x7d, // ....~..........} + 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x56, 0x00, 0x73, 0x00, 0x90, // .........9.V.s.. + 0x00, 0xad, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, // ..........+."&'. + 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, // .=.467>.;.2..... + 0x01, 0x13, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, // ....=.467>.3!2.. + 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x27, 0x14, // .........#!"&''. + 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, // ....+."&'..=.467 + 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, // >.;.2........... + 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, // .+."&'..=.467>.; + 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x21, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, // .2......!.....#! + 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, // "&'..=.467>.3!2. + 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x07, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // ...............# + 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, // !"&'..=.467>.3!2 + 0x16, 0x17, 0x01, 0x03, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, // .........~...... + 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x90, 0x09, 0x08, 0x08, 0x09, 0x09, // ....~........... + 0x17, 0x0e, 0x01, 0xf9, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0x07, // ................ + 0x0e, 0x17, 0x09, 0x90, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, // .........~...... + 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, // ....~..........~ + 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, // ..........~..... + 0x02, 0xf7, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0x07, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, // ................ + 0x09, 0x17, 0x0e, 0x01, 0xf9, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x13, 0x09, 0x0a, 0x0a, 0x09, 0x0a, // ................ + 0x16, 0x0d, 0xfe, 0x07, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x01, 0xf9, // ................ + 0x0d, 0x16, 0x0a, 0x01, 0x81, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7d, // ...............} + 0x0d, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0xfe, 0x57, 0x09, 0x17, 0x0e, // ..........~.W... + 0x7c, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, // |..........~.... + 0x09, 0x09, 0x09, 0x2e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7c, 0x0e, // ..............|. + 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x02, 0xf6, 0x0d, 0x17, 0x0a, 0x09, // .........~...... + 0x08, 0x08, 0x09, 0x0a, 0x17, 0x0d, 0x7d, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, // ......}......... + 0x0d, 0x7e, 0x0d, 0x17, 0x0a, 0x09, 0x08, 0x08, 0x09, 0x0a, 0x17, 0x0d, 0x7d, 0x0d, 0x17, 0x0a, // .~..........}... + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0xd1, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, // .......~....~... + 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7d, 0x0d, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x00, // .......}........ + 0x00, 0x03, 0x00, 0x06, 0xff, 0xff, 0x03, 0xfa, 0x03, 0x81, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x56, // .............9.V + 0x00, 0x00, 0x37, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, // ..7..=.467>.3!2. + 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x01, // ..........#!"&'. + 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, // .........#!"&'.. + 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x37, 0x14, 0x06, 0x07, // =.467>.3!2..7... + 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, // ..#!"&'..=.467>. + 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x16, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, // 3!2............. + 0x0c, 0x03, 0x82, 0x0c, 0x13, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xfc, 0x7e, 0x0c, // ..............~. + 0x15, 0x08, 0x03, 0xd3, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xfc, 0x7e, 0x0c, 0x15, 0x08, // ............~... + 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0x03, 0x82, 0x0c, 0x13, 0x09, 0x11, 0x09, 0x08, 0x09, // ................ + 0x13, 0x0c, 0xfc, 0x7e, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0x03, 0x82, // ...~............ + 0x0c, 0x13, 0x09, 0x08, 0x09, 0x0e, 0x08, 0x15, 0x0c, 0x6f, 0x0c, 0x14, 0x08, 0x09, 0x08, 0x08, // .........o...... + 0x09, 0x08, 0x14, 0x0b, 0x70, 0x0c, 0x15, 0x08, 0x08, 0x07, 0x07, 0x08, 0x02, 0x11, 0x08, 0x14, // ....p........... + 0x0b, 0x70, 0x0c, 0x15, 0x08, 0x08, 0x07, 0x07, 0x08, 0x09, 0x14, 0x0c, 0x6f, 0x0c, 0x14, 0x08, // .p..........o... + 0x09, 0x08, 0x08, 0x09, 0xba, 0x0c, 0x14, 0x09, 0x08, 0x07, 0x07, 0x08, 0x09, 0x14, 0x0c, 0x6f, // ...............o + 0x0c, 0x14, 0x09, 0x08, 0x08, 0x08, 0x08, 0x09, 0x14, 0x0b, 0x70, 0x00, 0x00, 0x03, 0x00, 0x06, // ..........p..... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x56, 0x00, 0x00, 0x13, 0x3e, // .........9.V...> + 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // .;.2...........+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x21, 0x3e, 0x01, 0x3b, 0x01, // ."&'..5.467!>.;. + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, // 2...........+."& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x05, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // '..5.467.......+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, // ."&'..5.467>.;.2 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x18, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x09, // .........~...... + 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x01, 0x7b, 0x09, 0x17, // ....~........{.. + 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, // .~..........~... + 0x09, 0x08, 0x08, 0x09, 0x02, 0x67, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0x0d, 0x17, 0x0a, 0x09, // .....g.....~.... + 0x08, 0x08, 0x09, 0x0a, 0x17, 0x0d, 0x7e, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x03, 0xa7, 0x09, 0x0a, // ......~......... + 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, // ................ + 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, // ..s............. + 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, 0x2d, 0xfc, // ..........s...-. + 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, // ............s... + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x01, 0x03, // ................ + 0x01, 0xc0, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, // .............+." + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, // &'..5.467>.;.2.. + 0x1e, 0x01, 0x15, 0x01, 0x03, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, // ..........~..... + 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x01, 0x81, 0xfe, 0x85, 0x0e, // .....~.......... + 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x79, 0x0e, 0x17, 0x09, 0x0a, 0x09, // ..........y..... + 0x09, 0x0a, 0x09, 0x17, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x02, 0x7e, // ...............~ + 0x02, 0xbd, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x00, 0x17, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, // .....9..."&'..5. + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, // 467>.;.2........ + 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // ...+...........+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, // ."&'..5.467>.;.2 + 0x16, 0x17, 0x46, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, // ..F..........~.. + 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x02, 0x25, 0x0a, 0x09, 0x09, 0x0a, 0x09, // ........~.%..... + 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, // ..~..........~.. + 0x09, 0x3a, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x79, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, // .:......y....... + 0x09, 0x17, 0x0c, 0xfe, 0x85, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x02, 0xe4, 0x0a, 0x16, 0x0c, 0xfd, // ................ + 0x88, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x02, 0x76, 0x0d, 0x17, 0x0a, // ............v... + 0x09, 0x0a, 0x0a, 0x09, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1c, // ................ + 0x00, 0x39, 0x00, 0x56, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, // .9.V.........+." + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, // &'..5.467>.;.2.. + 0x1e, 0x01, 0x15, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, // .............+." + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, // &'..5.467>.;.2.. + 0x13, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, // .32...........+. + 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x01, 0x03, 0x09, // "&'..5.467>.3... + 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7e, // ....~..........~ + 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x01, 0x68, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x7e, 0x0e, // ......h.......~. + 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0xd1, 0x7e, 0x0d, // .........~....~. + 0x16, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x7e, 0x0d, 0x17, 0x0a, 0x09, 0x08, 0x08, // .........~...... + 0x09, 0x0a, 0x17, 0x0d, 0x01, 0x81, 0xfe, 0x85, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, // ................ + 0x17, 0x0e, 0x01, 0x79, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0x01, 0x29, // ...y...........) + 0x0a, 0x16, 0x0c, 0xfd, 0x88, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x02, // ................ + 0x76, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x01, 0x10, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, // v............... + 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, // ............s... + 0x09, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa5, 0xff, 0xc6, 0x03, 0x5b, 0x03, 0xba, 0x00, 0x10, // ...........[.... + 0x00, 0x31, 0x00, 0x00, 0x05, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x21, 0x11, 0x14, // .1...!"&'..5.!.. + 0x06, 0x07, 0x0e, 0x01, 0x23, 0x03, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x21, 0x35, // ....#.32......!5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, // 467>.;.5467>.;.2 + 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x03, 0x21, 0xfd, 0xbe, 0x0c, 0x15, 0x09, 0x08, 0x08, 0x02, // .......!........ + 0xb6, 0x09, 0x09, 0x08, 0x15, 0x0b, 0x91, 0x91, 0x0b, 0x15, 0x08, 0x09, 0x09, 0xfd, 0x4a, 0x08, // ..............J. + 0x08, 0x09, 0x15, 0x0c, 0x91, 0x08, 0x07, 0x09, 0x15, 0x0c, 0xae, 0x0b, 0x14, 0x09, 0x09, 0x08, // ................ + 0x3a, 0x08, 0x08, 0x09, 0x15, 0x0c, 0x02, 0x45, 0xfd, 0xbb, 0x0c, 0x15, 0x09, 0x08, 0x08, 0x03, // :......E........ + 0x9d, 0x09, 0x08, 0x09, 0x14, 0x0c, 0xaa, 0xa9, 0x0c, 0x15, 0x09, 0x08, 0x09, 0x1b, 0x0d, 0x15, // ................ + 0x08, 0x09, 0x09, 0x09, 0x09, 0x08, 0x15, 0x0b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb3, // ................ + 0xff, 0xc6, 0x03, 0x4f, 0x03, 0xb8, 0x00, 0x10, 0x00, 0x31, 0x00, 0x00, 0x17, 0x11, 0x21, 0x11, // ...O.....1....!. + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x03, 0x3e, 0x01, // .....#!"&'..5.>. + 0x3f, 0x01, 0x27, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x1f, // ?.'&67>.?.6..... + 0x01, 0x37, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x05, 0x27, 0x26, 0x36, 0x37, 0xda, 0x02, // .76.......'&67.. + 0x75, 0x08, 0x07, 0x08, 0x13, 0x0a, 0xfd, 0xf3, 0x0b, 0x13, 0x08, 0x07, 0x07, 0x23, 0x05, 0x10, // u............#.. + 0x0a, 0x7f, 0x05, 0x03, 0x02, 0x05, 0x05, 0x11, 0x0b, 0x98, 0x0a, 0x13, 0x0a, 0x09, 0x0c, 0x03, // ................ + 0x06, 0x7f, 0x0a, 0x15, 0x0a, 0x09, 0x0c, 0x03, 0x27, 0xfd, 0xa1, 0x27, 0x03, 0x02, 0x05, 0x05, // ........'..'.... + 0x02, 0x0f, 0xfd, 0xf1, 0x0b, 0x13, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0b, 0x02, 0xff, // ................ + 0x0a, 0x0d, 0x03, 0x22, 0x18, 0x0b, 0x14, 0x09, 0x0a, 0x0d, 0x02, 0x29, 0x03, 0x04, 0x06, 0x04, // ...".......).... + 0x0f, 0x0b, 0x19, 0x21, 0x03, 0x02, 0x06, 0x05, 0x10, 0x0b, 0x95, 0xa3, 0x95, 0x0b, 0x13, 0x09, // ...!............ + 0x00, 0x01, 0x00, 0x36, 0xff, 0xf7, 0x03, 0xfa, 0x03, 0x7c, 0x00, 0x4c, 0x00, 0x00, 0x13, 0x0f, // ...6.....|.L.... + 0x01, 0x0e, 0x01, 0x1e, 0x01, 0x17, 0x1e, 0x03, 0x17, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, // ..........67>.7> + 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x23, 0x2e, 0x01, 0x27, 0x17, 0x2e, 0x01, 0x37, 0x3e, // .'..'..#..'...7> + 0x01, 0x37, 0x33, 0x36, 0x16, 0x17, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x1f, 0x01, 0x01, 0x17, // .736............ + 0x3e, 0x01, 0x3f, 0x01, 0x03, 0x2f, 0x02, 0x0f, 0x01, 0x2e, 0x01, 0x27, 0x35, 0x2e, 0x02, 0x06, // >.?../.....'5... + 0x07, 0x0e, 0x03, 0x0f, 0x01, 0x5a, 0x23, 0x01, 0x1a, 0x18, 0x05, 0x20, 0x1f, 0x1e, 0x4b, 0x5a, // .....Z#.... ..KZ + 0x6a, 0x3c, 0x0a, 0x12, 0x08, 0x07, 0x08, 0x01, 0x09, 0x07, 0x01, 0x01, 0x07, 0x05, 0x07, 0x11, // j<.............. + 0x0b, 0x32, 0x4b, 0x19, 0x02, 0x19, 0x06, 0x12, 0x17, 0x50, 0x39, 0x01, 0x28, 0x45, 0x1d, 0x28, // .2K......P9.(E.( + 0x39, 0x10, 0x07, 0x08, 0x02, 0x02, 0x17, 0x01, 0xc6, 0x24, 0x09, 0x10, 0x06, 0x0c, 0x02, 0x07, // 9........$...... + 0x15, 0x18, 0x19, 0x72, 0x1f, 0x46, 0x26, 0x27, 0x4f, 0x51, 0x52, 0x2b, 0x28, 0x4a, 0x43, 0x3c, // ...r.F&'OQR+(JC< + 0x1a, 0x05, 0x02, 0xc0, 0x3f, 0x04, 0x33, 0x67, 0x68, 0x69, 0x35, 0x38, 0x54, 0x3a, 0x1e, 0x02, // ....?.3ghi58T:.. + 0x01, 0x05, 0x07, 0x07, 0x11, 0x0a, 0x3b, 0x57, 0x1c, 0x09, 0x11, 0x08, 0x07, 0x08, 0x04, 0x2e, // ......;W........ + 0x2b, 0x02, 0x29, 0x51, 0x29, 0x38, 0x3b, 0x03, 0x01, 0x1c, 0x1d, 0x17, 0x25, 0x0f, 0x05, 0x0e, // +.)Q)8;.....%... + 0x09, 0x20, 0x19, 0xfe, 0xf9, 0x05, 0x01, 0x08, 0x08, 0x20, 0x02, 0x15, 0x1c, 0x15, 0x07, 0x07, // . ....... ...... + 0x41, 0x29, 0x40, 0x16, 0x02, 0x17, 0x1e, 0x0c, 0x04, 0x0b, 0x09, 0x21, 0x2e, 0x3b, 0x24, 0x05, // A)@........!.;$. + 0x00, 0x01, 0x00, 0x06, 0xff, 0xf7, 0x03, 0xca, 0x03, 0x7c, 0x00, 0x4d, 0x00, 0x00, 0x01, 0x1f, // .........|.M.... + 0x01, 0x1e, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x07, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, // ..........&'..'. + 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x3e, 0x01, 0x37, 0x07, 0x3e, 0x01, 0x27, 0x2e, // .7>.7>.3>.7.>.'. + 0x01, 0x27, 0x23, 0x26, 0x06, 0x07, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x0f, 0x01, 0x01, 0x07, // .'#&............ + 0x2e, 0x01, 0x2f, 0x01, 0x13, 0x3f, 0x03, 0x1f, 0x01, 0x3e, 0x01, 0x37, 0x35, 0x3e, 0x02, 0x16, // ../..?...>.75>.. + 0x17, 0x1e, 0x03, 0x1f, 0x01, 0x03, 0xa6, 0x23, 0x01, 0x1a, 0x17, 0x04, 0x21, 0x1e, 0x1e, 0x4b, // .......#....!..K + 0x5b, 0x69, 0x3c, 0x0a, 0x12, 0x08, 0x07, 0x08, 0x01, 0x09, 0x07, 0x01, 0x01, 0x07, 0x05, 0x07, // [i<............. + 0x11, 0x0b, 0x31, 0x4c, 0x19, 0x02, 0x19, 0x06, 0x12, 0x17, 0x50, 0x39, 0x01, 0x28, 0x45, 0x1d, // ..1L......P9.(E. + 0x28, 0x39, 0x10, 0x07, 0x08, 0x01, 0x01, 0x17, 0xfe, 0x3a, 0x24, 0x09, 0x10, 0x06, 0x0c, 0x02, // (9.......:$..... + 0x07, 0x13, 0x02, 0x18, 0x19, 0x72, 0x1f, 0x46, 0x26, 0x27, 0x4f, 0x51, 0x52, 0x2a, 0x29, 0x4a, // .....r.F&'OQR*)J + 0x43, 0x3c, 0x1a, 0x05, 0x02, 0xc0, 0x3f, 0x04, 0x33, 0x67, 0x68, 0x69, 0x35, 0x38, 0x54, 0x3a, // C<....?.3ghi58T: + 0x1e, 0x02, 0x01, 0x05, 0x07, 0x07, 0x11, 0x0a, 0x3b, 0x57, 0x1c, 0x09, 0x11, 0x08, 0x07, 0x08, // ........;W...... + 0x04, 0x2e, 0x2b, 0x02, 0x29, 0x51, 0x29, 0x38, 0x3b, 0x03, 0x01, 0x1c, 0x1d, 0x17, 0x25, 0x0f, // ..+.)Q)8;.....%. + 0x05, 0x0e, 0x09, 0x20, 0x19, 0xfe, 0xf9, 0x05, 0x01, 0x08, 0x08, 0x20, 0x02, 0x15, 0x1c, 0x13, // ... ....... .... + 0x02, 0x07, 0x07, 0x41, 0x29, 0x40, 0x16, 0x02, 0x17, 0x1e, 0x0c, 0x04, 0x0b, 0x09, 0x21, 0x2e, // ...A)@........!. + 0x3b, 0x24, 0x05, 0x00, 0x00, 0x02, 0x00, 0x56, 0xff, 0xc6, 0x03, 0xaa, 0x03, 0xba, 0x00, 0x1c, // ;$.....V........ + 0x00, 0x3e, 0x00, 0x00, 0x05, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, // .>........#!"&'. + 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, // .=.467>.3!2..... + 0x01, 0x03, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // .......+.......+ + 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, // ."&'..=.#"&'..=. + 0x09, 0x01, 0x15, 0x03, 0xaa, 0x08, 0x08, 0x08, 0x13, 0x0a, 0xfd, 0x16, 0x0b, 0x13, 0x08, 0x07, // ................ + 0x08, 0x08, 0x07, 0x08, 0x13, 0x0b, 0x02, 0xea, 0x0a, 0x13, 0x08, 0x08, 0x08, 0x35, 0x08, 0x08, // .............5.. + 0x08, 0x14, 0x0b, 0x9e, 0x08, 0x08, 0x08, 0x14, 0x0b, 0xd3, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x9f, // ................ + 0x0c, 0x13, 0x08, 0x07, 0x08, 0x01, 0x75, 0x01, 0x75, 0x04, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x08, // ......u.u....... + 0x07, 0x08, 0x13, 0x0c, 0x69, 0x0b, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x12, 0x0b, 0x6a, // ....i..........j + 0x02, 0x14, 0x0b, 0x14, 0x08, 0x07, 0x07, 0xd5, 0x0c, 0x13, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, // ................ + 0x13, 0x0c, 0xd5, 0x07, 0x07, 0x08, 0x14, 0x0b, 0x35, 0x01, 0x75, 0xfe, 0x8b, 0x35, 0x00, 0x00, // ........5.u..5.. + 0x00, 0x02, 0x00, 0x56, 0xff, 0xc6, 0x03, 0xaa, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x3e, 0x00, 0x00, // ...V.........>.. + 0x17, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, // ...=.467>.3!2... + 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x01, 0x1e, 0x01, // ........#!"&'... + 0x1d, 0x01, 0x09, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, // ....5467>.;.5467 + 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x1e, 0x01, 0x17, 0x65, // >.;.2......3...e + 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0b, 0x02, 0xea, 0x0a, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08, // ................ + 0x08, 0x13, 0x0a, 0xfd, 0x16, 0x0b, 0x13, 0x08, 0x03, 0x00, 0x08, 0x08, 0xfe, 0x8b, 0xfe, 0x8b, // ................ + 0x08, 0x07, 0x08, 0x13, 0x0c, 0x9f, 0x08, 0x07, 0x08, 0x13, 0x0c, 0xd3, 0x0b, 0x14, 0x08, 0x08, // ................ + 0x08, 0x9e, 0x0b, 0x14, 0x08, 0x2b, 0x08, 0x13, 0x0c, 0x69, 0x0b, 0x13, 0x08, 0x08, 0x08, 0x08, // .....+...i...... + 0x08, 0x08, 0x12, 0x0b, 0x6a, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x08, 0x07, 0x02, 0xcc, 0x08, 0x13, // ....j........... + 0x0c, 0x35, 0xfe, 0x8c, 0x01, 0x74, 0x35, 0x0c, 0x13, 0x08, 0x07, 0x07, 0xd5, 0x0c, 0x13, 0x08, // .5...t5......... + 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0c, 0xd4, 0x01, 0x07, 0x07, 0x00, 0x00, 0x02, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x2c, 0x00, 0x36, 0x00, 0x00, 0x13, 0x32, 0x16, 0x17, // .......,.6...2.. + 0x1e, 0x01, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, // ....!5467>.;.2.. + 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, // .........#!"&'.. + 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x25, 0x15, 0x23, 0x35, 0x23, 0x35, 0x37, // 5.467>.;.%.#5#57 + 0x17, 0x15, 0x23, 0xc4, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x01, 0xfa, 0x08, 0x09, 0x0a, 0x17, 0x0d, // ..#............. + 0x7e, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, // ~............... + 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x01, 0xba, 0xfc, 0x7f, 0xfd, 0xfd, 0x7f, 0x01, // .......~........ + 0xc0, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0xbe, 0xbc, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, // ................ + 0x17, 0x0c, 0xfe, 0x85, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x79, // ...............y + 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x7e, 0xfc, 0xfc, 0x7f, 0xfd, 0xfd, 0x7f, 0x00, 0x02, 0x00, 0x06, // .....~.......... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x2c, 0x00, 0x36, 0x00, 0x00, 0x01, 0x15, 0x21, 0x35, // .......,.6....!5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, // 467>.;.2........ + 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, // ...#!"&'..5.467> + 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x01, 0x15, 0x07, 0x27, 0x35, 0x33, 0x35, // .;.2........'535 + 0x33, 0x15, 0x33, 0x01, 0x03, 0x01, 0xfa, 0x08, 0x09, 0x0a, 0x17, 0x0d, 0x7e, 0x0d, 0x16, 0x0a, // 3.3.........~... + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, // ................ + 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x01, 0xfa, 0xfd, 0xfd, 0x7f, 0xfc, 0x7f, // ...~............ + 0x01, 0x81, 0xbe, 0xbc, 0x0e, 0x17, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0xfe, 0x85, // ................ + 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x79, 0x0e, 0x17, 0x09, 0x0a, // ...........y.... + 0x09, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0x01, 0x3c, 0x7f, 0xfc, 0xfc, 0x7f, 0xfd, 0xfd, 0x00, 0x00, // .......<........ + 0x00, 0x01, 0x00, 0x06, 0x00, 0xc7, 0x03, 0xfa, 0x02, 0xfe, 0x00, 0x25, 0x00, 0x00, 0x01, 0x1e, // ...........%.... + 0x01, 0x17, 0x1e, 0x01, 0x15, 0x0f, 0x02, 0x0e, 0x01, 0x22, 0x26, 0x2f, 0x02, 0x2e, 0x01, 0x35, // ........."&/...5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, // 467>.7>.7>.32... + 0x01, 0x17, 0x02, 0xfd, 0x2f, 0x52, 0x23, 0x2c, 0x2d, 0x08, 0x07, 0x0f, 0x80, 0xf5, 0xea, 0xde, // ..../R#,-....... + 0x6a, 0x0b, 0x08, 0x0e, 0x0e, 0x1b, 0x1a, 0x13, 0x2a, 0x17, 0x05, 0x2f, 0x2a, 0x2f, 0x74, 0x44, // j.......*../*/tD + 0x43, 0x73, 0x30, 0x16, 0x21, 0x0c, 0x02, 0x42, 0x07, 0x2a, 0x23, 0x2b, 0x6a, 0x3f, 0x42, 0x0d, // Cs0.!..B.*#+j?B. + 0x04, 0x23, 0x22, 0x22, 0x23, 0x02, 0x07, 0x15, 0x30, 0x1a, 0x25, 0x3f, 0x1a, 0x12, 0x18, 0x06, // .#""#...0.%?.... + 0x38, 0x62, 0x29, 0x2f, 0x2f, 0x2f, 0x2f, 0x16, 0x2e, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // 8b)////......... + 0x00, 0x82, 0x03, 0xfa, 0x02, 0xfe, 0x00, 0x38, 0x00, 0x00, 0x25, 0x0e, 0x03, 0x07, 0x35, 0x33, // .......8..%...53 + 0x3f, 0x01, 0x35, 0x27, 0x07, 0x15, 0x14, 0x16, 0x1f, 0x01, 0x33, 0x15, 0x06, 0x2e, 0x02, 0x2f, // ?.5'......3..../ + 0x02, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, // ...5467>.7>.7>.3 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x0f, 0x02, 0x03, 0xdc, // 2............... + 0x29, 0x50, 0x4f, 0x4d, 0x27, 0x4a, 0x12, 0x07, 0xad, 0xac, 0x03, 0x04, 0x11, 0x4a, 0x3e, 0x78, // )POM'J.......J>x + 0x76, 0x73, 0x38, 0x0b, 0x08, 0x0e, 0x0e, 0x1b, 0x1a, 0x13, 0x2a, 0x17, 0x05, 0x2f, 0x2a, 0x2f, // vs8.......*../*/ + 0x74, 0x44, 0x43, 0x73, 0x30, 0x16, 0x21, 0x0c, 0x2f, 0x52, 0x23, 0x2c, 0x2d, 0x08, 0x07, 0x0f, // tDCs0.!./R#,-... + 0xc7, 0x0b, 0x12, 0x0f, 0x0b, 0x04, 0xcf, 0x06, 0x13, 0x18, 0xad, 0xad, 0x18, 0x06, 0x09, 0x04, // ................ + 0x06, 0xd9, 0x01, 0x08, 0x11, 0x1b, 0x12, 0x02, 0x08, 0x15, 0x2f, 0x1b, 0x25, 0x3f, 0x1a, 0x12, // ........../.%?.. + 0x18, 0x06, 0x38, 0x61, 0x2a, 0x2e, 0x2f, 0x2f, 0x2e, 0x16, 0x2f, 0x19, 0x08, 0x29, 0x23, 0x2c, // ..8a*.//../..)#, + 0x6a, 0x3e, 0x43, 0x0c, 0x05, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x94, 0x03, 0xfa, // j>C............. + 0x02, 0xfe, 0x00, 0x25, 0x00, 0x35, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, // ...%.5.....'..'. + 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, // .#"............. + 0x1f, 0x02, 0x1e, 0x01, 0x32, 0x36, 0x3f, 0x03, 0x34, 0x26, 0x27, 0x0f, 0x01, 0x27, 0x35, 0x34, // ....26?.4&'..'54 + 0x36, 0x3f, 0x01, 0x33, 0x35, 0x33, 0x17, 0x33, 0x1f, 0x01, 0x15, 0x03, 0xa1, 0x23, 0x52, 0x2f, // 6?.353.3.....#R/ + 0x0c, 0x21, 0x16, 0x30, 0x73, 0x43, 0x44, 0x74, 0x2f, 0x2a, 0x2f, 0x05, 0x17, 0x2a, 0x13, 0x1a, // .!.0sCDt/*/..*.. + 0x1b, 0x0e, 0x0e, 0x08, 0x0b, 0x6a, 0xde, 0xea, 0xf5, 0x80, 0x0f, 0x07, 0x08, 0x2d, 0x2c, 0xa2, // .....j.......-,. + 0xad, 0xac, 0x04, 0x03, 0x12, 0x4a, 0x93, 0x01, 0x49, 0x12, 0x07, 0x01, 0xef, 0x22, 0x2a, 0x07, // .....J..I...."*. + 0x1a, 0x2f, 0x15, 0x2f, 0x2f, 0x2f, 0x2f, 0x29, 0x61, 0x39, 0x06, 0x18, 0x12, 0x1a, 0x3f, 0x25, // ././///)a9....?% + 0x1a, 0x30, 0x15, 0x07, 0x02, 0x23, 0x22, 0x22, 0x23, 0x04, 0x0d, 0x42, 0x3f, 0x6a, 0x2c, 0xae, // .0...#""#..B?j,. + 0xad, 0xad, 0x18, 0x06, 0x09, 0x04, 0x06, 0xda, 0xda, 0x06, 0x13, 0x18, 0x00, 0x02, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1f, 0x00, 0x4a, 0x00, 0x00, 0x01, 0x22, 0x06, 0x0f, // .........J...".. + 0x01, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x33, // .........;.7>.73 + 0x3e, 0x01, 0x3f, 0x01, 0x35, 0x34, 0x26, 0x27, 0x35, 0x2e, 0x01, 0x23, 0x35, 0x32, 0x16, 0x17, // >.?.54&'5..#52.. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x14, 0x06, 0x07, 0x0e, 0x01, // ................ + 0x23, 0x22, 0x26, 0x2f, 0x01, 0x30, 0x06, 0x07, 0x0e, 0x01, 0x31, 0x22, 0x26, 0x27, 0x2e, 0x01, // #"&/.0....1"&'.. + 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x01, 0x8b, 0x35, 0x5c, 0x26, 0x01, 0x25, 0x24, 0x25, // 5467>.3..5.&.%$% + 0x25, 0x25, 0x5a, 0x35, 0x03, 0x49, 0x1e, 0x36, 0x17, 0x02, 0x17, 0x21, 0x09, 0x09, 0x26, 0x24, // %%Z5.I.6...!..&$ + 0x25, 0x5b, 0x36, 0x52, 0x8a, 0x38, 0x39, 0x38, 0x07, 0x07, 0x1f, 0xf1, 0x12, 0x13, 0x01, 0x12, // %[6R.898........ + 0x12, 0x12, 0x2b, 0x19, 0x1a, 0x2c, 0x11, 0xf0, 0x1b, 0x20, 0x1f, 0x54, 0x51, 0x8a, 0x3a, 0x38, // ..+..,... .TQ.:8 + 0x38, 0x38, 0x38, 0x3b, 0x8a, 0x50, 0x03, 0x35, 0x25, 0x24, 0x02, 0x25, 0x5c, 0x36, 0x35, 0x5a, // 888;.P.5%$.%.65Z + 0x25, 0x24, 0x26, 0x09, 0x09, 0x21, 0x17, 0x18, 0x34, 0x1e, 0x4a, 0x05, 0x35, 0x59, 0x24, 0x02, // %$&..!..4.J.5Y$. + 0x24, 0x25, 0x85, 0x39, 0x39, 0x39, 0x8a, 0x52, 0x1e, 0x39, 0x1a, 0x3b, 0xf1, 0x12, 0x2b, 0x19, // $%.999.R.9.;..+. + 0x19, 0x2b, 0x12, 0x12, 0x12, 0x12, 0x12, 0xf0, 0x11, 0x0b, 0x0a, 0x04, 0x38, 0x39, 0x39, 0x89, // .+..........899. + 0x50, 0x51, 0x8b, 0x39, 0x39, 0x39, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // PQ.999.......... + 0x03, 0xba, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x2d, 0x00, 0x58, 0x00, 0x00, 0x01, 0x35, 0x33, 0x15, // .......-.X...53. + 0x33, 0x15, 0x23, 0x15, 0x23, 0x35, 0x31, 0x23, 0x35, 0x33, 0x37, 0x22, 0x06, 0x0f, 0x01, 0x0e, // 3.#.#51#537".... + 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x33, 0x3e, 0x01, // .......;.7>.73>. + 0x3f, 0x01, 0x35, 0x34, 0x26, 0x27, 0x35, 0x2e, 0x01, 0x23, 0x35, 0x32, 0x16, 0x17, 0x1e, 0x01, // ?.54&'5..#52.... + 0x15, 0x14, 0x06, 0x0f, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, // ..............#" + 0x26, 0x2f, 0x01, 0x30, 0x06, 0x07, 0x0e, 0x01, 0x31, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, // &/.0....1"&'..54 + 0x36, 0x37, 0x3e, 0x01, 0x33, 0x01, 0x4d, 0x80, 0x60, 0x60, 0x80, 0x60, 0x60, 0x3e, 0x35, 0x5c, // 67>.3.M.``.``>5. + 0x26, 0x01, 0x25, 0x24, 0x25, 0x25, 0x25, 0x5a, 0x35, 0x03, 0x49, 0x1e, 0x36, 0x17, 0x02, 0x17, // &.%$%%%Z5.I.6... + 0x21, 0x09, 0x09, 0x26, 0x24, 0x26, 0x5a, 0x36, 0x52, 0x8a, 0x38, 0x39, 0x38, 0x07, 0x07, 0x1f, // !..&$&Z6R.898... + 0xf1, 0x12, 0x13, 0x01, 0x12, 0x12, 0x12, 0x2b, 0x19, 0x1a, 0x2c, 0x11, 0xf0, 0x1b, 0x20, 0x1f, // .......+..,... . + 0x54, 0x51, 0x8a, 0x3a, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x8a, 0x50, 0x02, 0x70, 0x60, 0x60, 0x80, // TQ.:8888;.P.p``. + 0x60, 0x60, 0x80, 0xc5, 0x25, 0x24, 0x02, 0x25, 0x5c, 0x36, 0x35, 0x5a, 0x25, 0x24, 0x26, 0x09, // ``..%$.%.65Z%$&. + 0x09, 0x21, 0x17, 0x18, 0x34, 0x1e, 0x4a, 0x05, 0x35, 0x59, 0x24, 0x02, 0x24, 0x25, 0x85, 0x39, // .!..4.J.5Y$.$%.9 + 0x39, 0x39, 0x8a, 0x52, 0x1e, 0x39, 0x1a, 0x3b, 0xf1, 0x12, 0x2b, 0x19, 0x19, 0x2b, 0x12, 0x12, // 99.R.9.;..+..+.. + 0x12, 0x12, 0x12, 0xf0, 0x11, 0x0b, 0x0a, 0x04, 0x38, 0x39, 0x39, 0x89, 0x50, 0x51, 0x8b, 0x39, // ........899.PQ.9 + 0x39, 0x39, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x04, // 99.............. + 0x00, 0x24, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x21, 0x35, 0x21, 0x15, 0x03, 0x22, 0x06, 0x0f, 0x01, // .$.O...!5!.."... + 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x33, 0x3e, // ........;.7>.73> + 0x01, 0x3f, 0x01, 0x35, 0x34, 0x26, 0x27, 0x35, 0x2e, 0x01, 0x23, 0x35, 0x32, 0x16, 0x17, 0x1e, // .?.54&'5..#52... + 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // ...............# + 0x22, 0x26, 0x2f, 0x01, 0x30, 0x06, 0x07, 0x0e, 0x01, 0x31, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, // "&/.0....1"&'..5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x02, 0x2f, 0xfe, 0xbc, 0x01, 0x44, 0xa4, 0x35, 0x5c, 0x26, // 467>.3./...D.5.& + 0x01, 0x25, 0x24, 0x25, 0x25, 0x25, 0x5a, 0x35, 0x03, 0x49, 0x1e, 0x36, 0x17, 0x02, 0x17, 0x21, // .%$%%%Z5.I.6...! + 0x09, 0x09, 0x26, 0x24, 0x26, 0x5a, 0x36, 0x52, 0x8a, 0x38, 0x39, 0x38, 0x07, 0x07, 0x1f, 0xf1, // ..&$&Z6R.898.... + 0x12, 0x13, 0x01, 0x12, 0x12, 0x12, 0x2b, 0x19, 0x1a, 0x2c, 0x11, 0xf0, 0x1b, 0x20, 0x1f, 0x54, // ......+..,... .T + 0x51, 0x8a, 0x3a, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x8a, 0x50, 0x01, 0xf1, 0x81, 0x81, 0x01, 0x44, // Q.:8888;.P.....D + 0x25, 0x24, 0x02, 0x25, 0x5c, 0x36, 0x35, 0x5a, 0x25, 0x24, 0x26, 0x09, 0x09, 0x21, 0x17, 0x18, // %$.%.65Z%$&..!.. + 0x34, 0x1e, 0x4a, 0x05, 0x35, 0x59, 0x24, 0x02, 0x24, 0x25, 0x85, 0x39, 0x39, 0x39, 0x8a, 0x52, // 4.J.5Y$.$%.999.R + 0x1e, 0x39, 0x1a, 0x3b, 0xf1, 0x12, 0x2b, 0x19, 0x19, 0x2b, 0x12, 0x12, 0x12, 0x12, 0x12, 0xf0, // .9.;..+..+...... + 0x11, 0x0b, 0x0a, 0x04, 0x38, 0x39, 0x39, 0x89, 0x50, 0x51, 0x8b, 0x39, 0x39, 0x39, 0x00, 0x00, // ....899.PQ.999.. + 0x00, 0x04, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1f, 0x00, 0x4a, 0x00, 0x4f, // .............J.O + 0x00, 0x54, 0x00, 0x00, 0x01, 0x22, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, // .T...".......... + 0x01, 0x3b, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x33, 0x3e, 0x01, 0x3f, 0x01, 0x35, 0x34, 0x26, 0x27, // .;.7>.73>.?.54&' + 0x35, 0x2e, 0x01, 0x23, 0x35, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x17, // 5..#52.......... + 0x1e, 0x01, 0x17, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x30, 0x06, 0x07, // ........#"&/.0.. + 0x0e, 0x01, 0x31, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x13, // ..1"&'..5467>.3. + 0x21, 0x35, 0x21, 0x15, 0x15, 0x21, 0x35, 0x21, 0x15, 0x01, 0x8b, 0x35, 0x5c, 0x26, 0x01, 0x25, // !5!..!5!...5.&.% + 0x24, 0x25, 0x25, 0x25, 0x5a, 0x35, 0x03, 0x49, 0x1e, 0x36, 0x17, 0x02, 0x17, 0x21, 0x09, 0x09, // $%%%Z5.I.6...!.. + 0x26, 0x24, 0x26, 0x5a, 0x36, 0x52, 0x8a, 0x38, 0x39, 0x38, 0x07, 0x07, 0x1f, 0xf1, 0x12, 0x13, // &$&Z6R.898...... + 0x01, 0x12, 0x12, 0x12, 0x2b, 0x19, 0x1a, 0x2c, 0x11, 0xf0, 0x1b, 0x20, 0x1f, 0x54, 0x51, 0x8a, // ....+..,... .TQ. + 0x3a, 0x38, 0x38, 0x38, 0x38, 0x3b, 0x8a, 0x50, 0xa4, 0xfe, 0xbc, 0x01, 0x44, 0xfe, 0xbc, 0x01, // :8888;.P....D... + 0x44, 0x03, 0x35, 0x25, 0x24, 0x02, 0x25, 0x5c, 0x36, 0x35, 0x5a, 0x25, 0x24, 0x26, 0x09, 0x09, // D.5%$.%.65Z%$&.. + 0x21, 0x17, 0x18, 0x34, 0x1e, 0x4a, 0x05, 0x35, 0x59, 0x24, 0x02, 0x24, 0x25, 0x85, 0x39, 0x39, // !..4.J.5Y$.$%.99 + 0x39, 0x8a, 0x52, 0x1e, 0x39, 0x1a, 0x3b, 0xf1, 0x12, 0x2b, 0x19, 0x19, 0x2b, 0x12, 0x12, 0x12, // 9.R.9.;..+..+... + 0x12, 0x12, 0xf0, 0x11, 0x0b, 0x0a, 0x04, 0x38, 0x39, 0x39, 0x89, 0x50, 0x51, 0x8b, 0x39, 0x39, // .......899.PQ.99 + 0x39, 0xfe, 0xa0, 0x61, 0x61, 0xa2, 0x61, 0x61, 0x00, 0x03, 0x00, 0x56, 0xff, 0xc7, 0x03, 0xaa, // 9..aa.aa...V.... + 0x03, 0x1a, 0x00, 0x08, 0x00, 0x29, 0x00, 0x2e, 0x00, 0x00, 0x25, 0x33, 0x35, 0x23, 0x15, 0x33, // .....)....%35#.3 + 0x15, 0x33, 0x35, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, // .35.......#!"&'. + 0x01, 0x35, 0x11, 0x33, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, // .5.35467>.3!2... + 0x01, 0x1d, 0x01, 0x33, 0x27, 0x21, 0x15, 0x21, 0x35, 0x02, 0x35, 0x35, 0xd4, 0x35, 0x6a, 0x01, // ...3'!.!5.55.5j. + 0x75, 0x08, 0x08, 0x08, 0x13, 0x0a, 0xfd, 0x16, 0x0b, 0x13, 0x08, 0x07, 0x08, 0x6b, 0x0f, 0x0f, // u............k.. + 0x10, 0x26, 0x16, 0x01, 0xaa, 0x16, 0x25, 0x0f, 0x10, 0x10, 0x6b, 0xd5, 0xfe, 0x56, 0x01, 0xaa, // .&....%...k..V.. + 0x9b, 0x6b, 0x6b, 0x6a, 0x6a, 0x01, 0x40, 0xfe, 0x21, 0x0b, 0x14, 0x08, 0x07, 0x07, 0x07, 0x07, // .kkjj.@.!....... + 0x08, 0x14, 0x0b, 0x01, 0xdf, 0xd5, 0x16, 0x25, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x25, 0x15, // .......%......%. + 0xd5, 0xd5, 0xd5, 0xd5, 0x00, 0x03, 0x00, 0x56, 0xff, 0xc6, 0x03, 0xaa, 0x03, 0xba, 0x00, 0x08, // .......V........ + 0x00, 0x0d, 0x00, 0x32, 0x00, 0x00, 0x25, 0x35, 0x23, 0x15, 0x33, 0x15, 0x33, 0x35, 0x33, 0x13, // ...2..%5#.3.353. + 0x35, 0x33, 0x15, 0x23, 0x37, 0x15, 0x23, 0x35, 0x21, 0x11, 0x21, 0x11, 0x14, 0x06, 0x07, 0x0e, // 53.#7.#5!.!..... + 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x33, 0x11, 0x34, 0x36, 0x37, 0x3e, // .#!"&'..5.3.467> + 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x02, 0x6a, 0xd4, 0x35, 0x6a, 0x35, 0x6b, // .3!2......j.5j5k + 0x6a, 0x6a, 0x6a, 0x6a, 0xfe, 0x56, 0x02, 0x7f, 0x08, 0x08, 0x08, 0x13, 0x0a, 0xfd, 0x16, 0x0b, // jjjj.V.......... + 0x13, 0x08, 0x07, 0x08, 0x6b, 0x0f, 0x0f, 0x10, 0x26, 0x16, 0x01, 0xaa, 0x16, 0x25, 0x0f, 0x10, // ....k...&....%.. + 0x10, 0x9b, 0x6b, 0x6b, 0x6a, 0x6a, 0x01, 0xfa, 0x4e, 0x4e, 0xba, 0x6a, 0x6a, 0xfe, 0x8c, 0xfe, // ..kkjj..NN.jj... + 0x21, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0c, 0x01, 0xdf, 0x01, 0x74, 0x16, // !.............t. + 0x25, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x26, 0x15, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, // %......&.......F + 0xff, 0xc6, 0x03, 0xba, 0x03, 0xba, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x17, 0x1e, 0x03, // ................ + 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x3e, 0x02, // ......#"&'..54>. + 0x37, 0x3e, 0x01, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, // 7>.7..5467>.32.. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x02, 0xa9, 0x27, 0x48, 0x21, 0x20, 0x31, 0x20, 0x10, 0x40, // ........'H! 1 .@ + 0x41, 0x40, 0x9d, 0x5c, 0x5c, 0x9c, 0x41, 0x40, 0x41, 0x10, 0x20, 0x31, 0x20, 0x21, 0x47, 0x28, // A@....A@A. 1 !G( + 0x21, 0x21, 0x22, 0x23, 0x22, 0x53, 0x31, 0x32, 0x53, 0x22, 0x23, 0x23, 0x22, 0x22, 0x02, 0x36, // !!"#"S12S"##"".6 + 0x10, 0x2f, 0x1f, 0x1f, 0x46, 0x4b, 0x53, 0x2d, 0x2f, 0x50, 0x20, 0x21, 0x22, 0x22, 0x21, 0x20, // ./..FKS-/P !""! + 0x50, 0x2f, 0x2d, 0x53, 0x4b, 0x46, 0x1f, 0x1f, 0x2f, 0x11, 0x21, 0x4f, 0x2e, 0x2f, 0x51, 0x21, // P/-SKF../.!O./Q! + 0x22, 0x22, 0x22, 0x22, 0x22, 0x50, 0x2f, 0x2e, 0x4f, 0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, // """""P/.O"...... + 0x00, 0x65, 0x03, 0xfa, 0x03, 0x1b, 0x00, 0x2c, 0x00, 0x55, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x1f, // .e.....,.U...... + 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, // ..........#"&'.. + 0x27, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, // '467>.7..5467>.3 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x37, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, // 2........7467>.3 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, // 2............... + 0x06, 0x07, 0x0e, 0x01, 0x23, 0x27, 0x3e, 0x01, 0x27, 0x34, 0x26, 0x27, 0x3e, 0x01, 0x37, 0x2e, // ....#'>.'4&'>.7. + 0x01, 0x35, 0x01, 0x99, 0x1a, 0x30, 0x16, 0x07, 0x27, 0x27, 0x27, 0x27, 0x07, 0x2b, 0x67, 0x3d, // .5...0..''''.+g= + 0x3c, 0x68, 0x2a, 0x2a, 0x2b, 0x01, 0x2b, 0x2b, 0x15, 0x2f, 0x1a, 0x16, 0x16, 0x17, 0x17, 0x17, // .7..5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x05, 0x1e, 0x01, 0x17, 0x1e, 0x01, // 467>.32......... + 0x1d, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x35, 0x34, // .......#"&'..'54 + 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, // 67>.?...5467>.32 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x17, 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, // .........?.>.32. + 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, // ................ + 0x07, 0x0e, 0x01, 0x07, 0x35, 0x34, 0x26, 0x27, 0x35, 0x27, 0x3f, 0x01, 0x27, 0x3e, 0x01, 0x35, // ....54&'5'?.'>.5 + 0x34, 0x26, 0x27, 0x01, 0x3c, 0x08, 0x08, 0x05, 0x05, 0x04, 0x07, 0x06, 0x0e, 0x19, 0x0c, 0x33, // 4&'.<..........3 + 0x33, 0x1b, 0x2f, 0x15, 0x20, 0x20, 0x01, 0x21, 0x20, 0x0f, 0x23, 0x14, 0x11, 0x10, 0x10, 0x11, // 3./. .! .#..... + 0x11, 0x2a, 0x18, 0x18, 0x29, 0x11, 0x0a, 0x01, 0x4a, 0x13, 0x23, 0x10, 0x2b, 0x2b, 0x03, 0x2b, // .*..)...J.#.++.+ + 0x28, 0x2a, 0x65, 0x3c, 0x3c, 0x67, 0x2a, 0x28, 0x2a, 0x02, 0x2a, 0x2a, 0x10, 0x24, 0x12, 0x18, // (*e<.;.5467>.;.2 + 0x16, 0x17, 0x01, 0x17, 0x13, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, // ..............#! + 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x32, 0x16, 0x17, 0x03, 0x15, 0x0a, 0xfe, 0xba, 0x17, 0x82, // 5!.!5!2......... + 0x17, 0x0a, 0xe4, 0x07, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x0b, 0x07, 0xe4, 0x05, 0x05, // ................ + 0x05, 0x0b, 0x07, 0x82, 0x07, 0x0b, 0x05, 0x01, 0x47, 0x09, 0xd3, 0x09, 0x09, 0x09, 0x09, 0x0a, // ........G....... + 0x18, 0x0e, 0xfe, 0xba, 0x01, 0x05, 0xfe, 0xfb, 0x01, 0x46, 0x0e, 0x18, 0x0a, 0x01, 0xc0, 0x17, // .........F...... + 0xfe, 0xba, 0x0a, 0x0a, 0x17, 0xa3, 0x05, 0x05, 0x05, 0x0b, 0x07, 0x01, 0x04, 0x07, 0x0b, 0x05, // ................ + 0x05, 0x05, 0xa3, 0x07, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x05, 0xfe, 0xba, 0x17, 0x01, 0xb5, 0x0a, // ................ + 0x17, 0x0e, 0xfc, 0xf3, 0x0e, 0x18, 0x0a, 0x09, 0x09, 0x83, 0x02, 0x8c, 0x83, 0x0a, 0x0a, 0x00, // ................ + 0x00, 0x02, 0x00, 0x06, 0xff, 0xf7, 0x03, 0xfa, 0x03, 0x89, 0x00, 0x23, 0x00, 0x38, 0x00, 0x00, // ...........#.8.. + 0x13, 0x37, 0x01, 0x37, 0x33, 0x1f, 0x01, 0x15, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, // .7.73...32...... + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, // .....+.......+." + 0x26, 0x27, 0x01, 0x27, 0x03, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, // &'.'...5.467>.3! + 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x22, 0x26, 0x27, 0xeb, 0x0a, 0x01, 0x46, 0x17, 0x82, 0x17, // .!.!.!"&'...F... + 0x0a, 0xe4, 0x07, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x0b, 0x07, 0xe4, 0x05, 0x05, 0x05, // ................ + 0x0b, 0x07, 0x82, 0x07, 0x0b, 0x05, 0xfe, 0xba, 0x0a, 0xd3, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x18, // ................ + 0x0e, 0x01, 0x46, 0xfe, 0xfb, 0x01, 0x05, 0xfe, 0xba, 0x0e, 0x18, 0x0a, 0x01, 0xc0, 0x17, 0x01, // ..F............. + 0x46, 0x0a, 0x0a, 0x17, 0xa3, 0x05, 0x05, 0x05, 0x0b, 0x07, 0xfe, 0xfc, 0x07, 0x0b, 0x05, 0x05, // F............... + 0x05, 0xa3, 0x07, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x46, 0x17, 0xfe, 0x4b, 0x0a, 0x17, // ..........F..K.. + 0x0e, 0x03, 0x0d, 0x0e, 0x18, 0x0a, 0x09, 0x09, 0x83, 0xfd, 0x74, 0x83, 0x0a, 0x0a, 0x00, 0x00, // ..........t..... + 0x00, 0x02, 0x00, 0x06, 0xff, 0xf7, 0x03, 0xfa, 0x03, 0x89, 0x00, 0x14, 0x00, 0x38, 0x00, 0x00, // .............8.. + 0x01, 0x21, 0x11, 0x21, 0x15, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, // .!.!.!"&'..5.467 + 0x3e, 0x01, 0x33, 0x21, 0x15, 0x01, 0x07, 0x01, 0x07, 0x23, 0x2f, 0x01, 0x35, 0x23, 0x22, 0x26, // >.3!.....#/.5#"& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, // '..5.467>.;.5467 + 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x01, 0x17, 0x01, 0x8e, 0xfe, 0xfb, 0x01, 0x05, 0xfe, // >.;.2........... + 0xba, 0x0e, 0x18, 0x0a, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x18, 0x0e, 0x01, 0x46, 0x02, 0x6c, 0x0a, // ............F.l. + 0xfe, 0xba, 0x17, 0x83, 0x17, 0x09, 0xe5, 0x06, 0x0c, 0x04, 0x05, 0x05, 0x05, 0x05, 0x04, 0x0c, // ................ + 0x06, 0xe5, 0x05, 0x04, 0x05, 0x0c, 0x06, 0x83, 0x06, 0x0c, 0x05, 0x01, 0x46, 0x0a, 0x03, 0x06, // ............F... + 0xfd, 0x74, 0x83, 0x09, 0x09, 0x0a, 0x18, 0x0e, 0x03, 0x0d, 0x0e, 0x17, 0x0a, 0x0a, 0x0a, 0x83, // .t.............. + 0xfe, 0xba, 0x17, 0xfe, 0xba, 0x0a, 0x0a, 0x17, 0xa3, 0x05, 0x05, 0x05, 0x0b, 0x07, 0x01, 0x04, // ................ + 0x07, 0x0b, 0x05, 0x05, 0x05, 0xa3, 0x07, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x05, 0xfe, 0xba, 0x17, // ................ + 0x00, 0x02, 0x00, 0x06, 0xff, 0xf7, 0x03, 0xfa, 0x03, 0x89, 0x00, 0x14, 0x00, 0x36, 0x00, 0x00, // .............6.. + 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x35, 0x21, 0x11, 0x21, // ..........#!5!.! + 0x35, 0x21, 0x32, 0x16, 0x17, 0x03, 0x17, 0x11, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x0f, 0x01, // 5!2........+.... + 0x23, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x01, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, // #'...5467.>.;.2. + 0x1f, 0x01, 0x15, 0x33, 0x32, 0x16, 0x17, 0x03, 0xe8, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x18, 0x0e, // ...32........... + 0xfe, 0xba, 0x01, 0x05, 0xfe, 0xfb, 0x01, 0x46, 0x0e, 0x18, 0x0a, 0xdd, 0x0a, 0x0a, 0x04, 0x0c, // .......F........ + 0x06, 0xe5, 0x09, 0x17, 0x83, 0x17, 0xfe, 0xba, 0x05, 0x05, 0x05, 0x05, 0x01, 0x46, 0x05, 0x0c, // .............F.. + 0x06, 0x83, 0x06, 0x0c, 0x05, 0x09, 0xe5, 0x06, 0x0c, 0x04, 0x03, 0x75, 0x0a, 0x17, 0x0e, 0xfc, // ...........u.... + 0xf3, 0x0e, 0x18, 0x0a, 0x09, 0x09, 0x83, 0x02, 0x8c, 0x83, 0x0a, 0x0a, 0xfe, 0xe4, 0x17, 0xfe, // ................ + 0xfc, 0x17, 0x05, 0x05, 0xa3, 0x17, 0x0a, 0x0a, 0x01, 0x46, 0x05, 0x0b, 0x07, 0x07, 0x0b, 0x05, // .........F...... + 0x01, 0x46, 0x05, 0x05, 0x05, 0x05, 0x17, 0xa3, 0x05, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, // .F.............` + 0xff, 0xc6, 0x03, 0xa0, 0x03, 0xba, 0x00, 0x21, 0x00, 0x00, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, // .......!........ + 0x01, 0x2b, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, // .+.......+."&'.. + 0x35, 0x11, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x09, 0x01, 0x03, 0xa0, 0x09, 0x08, // 5.#"&'..=....... + 0x09, 0x16, 0x0d, 0xb1, 0x08, 0x09, 0x09, 0x16, 0x0d, 0xec, 0x0d, 0x15, 0x09, 0x08, 0x08, 0xb3, // ................ + 0x0d, 0x15, 0x09, 0x08, 0x08, 0x01, 0xa0, 0x01, 0xa0, 0x02, 0x19, 0x3b, 0x0d, 0x15, 0x09, 0x09, // ...........;.... + 0x08, 0xfe, 0x60, 0x0d, 0x15, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x15, 0x0d, 0x01, 0xa0, 0x08, // ..`............. + 0x09, 0x09, 0x15, 0x0d, 0x3b, 0x01, 0xa1, 0xfe, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // ....;..._....... + 0x00, 0x20, 0x03, 0xfa, 0x03, 0x60, 0x00, 0x21, 0x00, 0x00, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, // . ...`.!...467>. + 0x3b, 0x01, 0x09, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x21, 0x22, 0x26, 0x27, // ;...#"&'..=.!"&' + 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x35, 0x01, 0xe2, 0x08, 0x09, // ..=.467>.3!5.... + 0x09, 0x15, 0x0d, 0x3b, 0x01, 0xa1, 0xfe, 0x5f, 0x3b, 0x0d, 0x15, 0x09, 0x09, 0x08, 0xfe, 0x60, // ...;..._;......` + 0x0d, 0x15, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x15, 0x0d, 0x01, 0xa0, 0x03, 0x23, 0x0d, 0x16, // .............#.. + 0x09, 0x08, 0x09, 0xfe, 0x60, 0xfe, 0x60, 0x08, 0x08, 0x09, 0x15, 0x0d, 0xb3, 0x08, 0x08, 0x09, // ....`.`......... + 0x15, 0x0d, 0xec, 0x0d, 0x16, 0x09, 0x09, 0x08, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, // ...............` + 0xff, 0xc6, 0x03, 0xa0, 0x03, 0xba, 0x00, 0x21, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x1d, 0x01, 0x09, // .......!........ + 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, // .5467>.;..467>.; + 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x33, 0x32, 0x16, 0x17, 0x03, 0x8f, 0x08, 0x09, // .2......32...... + 0xfe, 0x60, 0xfe, 0x60, 0x08, 0x08, 0x09, 0x15, 0x0d, 0xb3, 0x08, 0x08, 0x09, 0x15, 0x0d, 0xec, // .`.`............ + 0x0d, 0x16, 0x09, 0x09, 0x08, 0xb1, 0x0d, 0x16, 0x09, 0x01, 0xcd, 0x09, 0x15, 0x0d, 0x3b, 0xfe, // ..............;. + 0x5f, 0x01, 0xa1, 0x3b, 0x0d, 0x15, 0x09, 0x09, 0x08, 0x01, 0xa0, 0x0d, 0x15, 0x09, 0x08, 0x09, // _..;............ + 0x09, 0x08, 0x09, 0x15, 0x0d, 0xfe, 0x60, 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // ......`......... + 0x00, 0x20, 0x03, 0xfa, 0x03, 0x60, 0x00, 0x21, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, // . ...`.!...2.... + 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // .......#!......+ + 0x01, 0x09, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x21, 0x03, 0xbe, 0x0d, 0x15, // ...32......!.... + 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x15, 0x0d, 0xfe, 0x60, 0x08, 0x09, 0x09, 0x15, 0x0d, 0x3b, // .........`.....; + 0xfe, 0x5f, 0x01, 0xa1, 0x3b, 0x0d, 0x15, 0x09, 0x09, 0x08, 0x01, 0xa0, 0x02, 0x72, 0x08, 0x09, // ._..;........r.. + 0x09, 0x16, 0x0c, 0xed, 0x0d, 0x15, 0x09, 0x08, 0x08, 0xb3, 0x0d, 0x15, 0x09, 0x08, 0x08, 0x01, // ................ + 0xa0, 0x01, 0xa0, 0x09, 0x08, 0x09, 0x16, 0x0d, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x21, 0x00, 0x00, 0x09, 0x01, 0x1e, 0x01, 0x17, 0x14, // .......!........ + 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x07, 0x2e, 0x01, 0x27, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x22, 0x26, // ........'....."& + 0x2f, 0x01, 0x11, 0x21, 0x17, 0x1e, 0x01, 0x15, 0x0e, 0x01, 0x0f, 0x01, 0x02, 0x75, 0x01, 0x6d, // /..!.........u.m + 0x0b, 0x0c, 0x01, 0x0b, 0x0b, 0xd0, 0x0b, 0x1a, 0x0f, 0x0f, 0x1b, 0x0b, 0xfe, 0x94, 0x9c, 0x0a, // ................ + 0x1b, 0x0f, 0x0f, 0x1a, 0x0b, 0x35, 0x02, 0xda, 0x34, 0x0b, 0x0b, 0x01, 0x0c, 0x0b, 0x9d, 0x02, // .....5..4....... + 0x81, 0xfe, 0x93, 0x0a, 0x1b, 0x0f, 0x0e, 0x1a, 0x0b, 0xcf, 0x0b, 0x0c, 0x01, 0x01, 0x0c, 0x0b, // ................ + 0x01, 0x6d, 0x9c, 0x0a, 0x0d, 0x02, 0x0b, 0x0b, 0x34, 0x02, 0xda, 0x35, 0x0b, 0x1a, 0x0f, 0x0f, // .m......4..5.... + 0x19, 0x0b, 0x9d, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x21, // ...............! + 0x00, 0x00, 0x25, 0x2e, 0x01, 0x2f, 0x01, 0x01, 0x0e, 0x01, 0x07, 0x2e, 0x01, 0x2f, 0x01, 0x2e, // ..%../......./.. + 0x01, 0x27, 0x34, 0x36, 0x37, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x3e, 0x01, 0x3f, 0x01, 0x21, 0x11, // .'467.'..'>.?.!. + 0x07, 0x0e, 0x01, 0x07, 0x03, 0x8f, 0x0f, 0x1a, 0x0b, 0x9d, 0xfe, 0x95, 0x0b, 0x19, 0x0f, 0x0f, // ................ + 0x1a, 0x0b, 0xce, 0x0b, 0x0c, 0x01, 0x0b, 0x0b, 0x01, 0x6b, 0x99, 0x0b, 0x0c, 0x01, 0x01, 0x0c, // .........k...... + 0x0b, 0x32, 0x02, 0xda, 0x35, 0x0b, 0x1b, 0x10, 0x96, 0x01, 0x0d, 0x0b, 0x9c, 0xfe, 0x95, 0x0c, // .2..5........... + 0x0d, 0x01, 0x01, 0x0d, 0x0c, 0xce, 0x0a, 0x1b, 0x0f, 0x0e, 0x1b, 0x0b, 0x01, 0x6b, 0x9b, 0x0b, // .............k.. + 0x1a, 0x10, 0x10, 0x1b, 0x0b, 0x33, 0xfd, 0x28, 0x33, 0x0b, 0x0d, 0x01, 0x00, 0x01, 0x00, 0x06, // .....3.(3....... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x21, 0x00, 0x00, 0x13, 0x3e, 0x01, 0x37, 0x32, 0x16, // .......!...>.72. + 0x17, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x1e, 0x01, 0x1f, 0x01, 0x11, 0x21, 0x27, 0x2e, 0x01, 0x27, // ..7>.7.....!'..' + 0x3e, 0x01, 0x3f, 0x01, 0x01, 0x2e, 0x01, 0x27, 0x3e, 0x01, 0x3f, 0x01, 0xec, 0x0b, 0x1a, 0x0f, // >.?....'>.?..... + 0x0f, 0x1b, 0x0a, 0x01, 0x6b, 0x9c, 0x0b, 0x1a, 0x0f, 0x10, 0x1b, 0x0b, 0x35, 0xfd, 0x26, 0x32, // ....k.......5.&2 + 0x0b, 0x0c, 0x01, 0x01, 0x0c, 0x0b, 0x9b, 0xfe, 0x95, 0x0b, 0x0c, 0x01, 0x01, 0x0c, 0x0b, 0xce, // ................ + 0x03, 0xa2, 0x0b, 0x0c, 0x01, 0x0b, 0x0b, 0xfe, 0x93, 0x9b, 0x0b, 0x0c, 0x01, 0x01, 0x0c, 0x0b, // ................ + 0x34, 0xfd, 0x28, 0x35, 0x0b, 0x1a, 0x0f, 0x0f, 0x1c, 0x0b, 0x9c, 0x01, 0x6c, 0x0b, 0x19, 0x0d, // 4.(5........l... + 0x10, 0x1b, 0x0b, 0xce, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x21, // ...............! + 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x0e, 0x01, 0x0f, 0x01, 0x21, // ...............! + 0x11, 0x37, 0x3e, 0x01, 0x37, 0x1e, 0x01, 0x1f, 0x01, 0x01, 0x3e, 0x01, 0x37, 0x1e, 0x01, 0x1f, // .7>.7.....>.7... + 0x01, 0x1e, 0x01, 0x17, 0x03, 0xfa, 0x0c, 0x0c, 0xfe, 0x95, 0x9a, 0x0b, 0x0b, 0x01, 0x01, 0x0b, // ................ + 0x0b, 0x33, 0xfd, 0x28, 0x33, 0x0b, 0x1b, 0x10, 0x0f, 0x1b, 0x0b, 0x9d, 0x01, 0x6b, 0x0a, 0x1a, // .3.(3........k.. + 0x0e, 0x0f, 0x1b, 0x0a, 0xce, 0x0b, 0x0d, 0x02, 0x02, 0x9e, 0x0e, 0x1a, 0x0a, 0xfe, 0x93, 0x9c, // ................ + 0x0a, 0x1b, 0x0f, 0x0f, 0x1b, 0x0c, 0x33, 0x02, 0xd8, 0x34, 0x0b, 0x0c, 0x01, 0x01, 0x0c, 0x0b, // ......3..4...... + 0x9d, 0x01, 0x6d, 0x0b, 0x0c, 0x01, 0x01, 0x0c, 0x0b, 0xce, 0x0b, 0x1c, 0x0f, 0x00, 0x00, 0x00, // ..m............. + 0x00, 0x01, 0x00, 0x06, 0x00, 0x84, 0x03, 0xfa, 0x02, 0xfc, 0x00, 0x11, 0x00, 0x00, 0x25, 0x0e, // ..............%. + 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x09, 0x01, 0x15, 0x14, 0x06, 0x07, // .#!"&'..=....... + 0x03, 0xe7, 0x0a, 0x17, 0x0d, 0xfc, 0x8d, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x01, 0xfa, 0x01, 0xfa, // ................ + 0x0a, 0x09, 0x95, 0x08, 0x09, 0x09, 0x08, 0x0a, 0x17, 0x0d, 0x3f, 0x01, 0xfa, 0xfe, 0x06, 0x3f, // ..........?....? + 0x0d, 0x17, 0x0a, 0x00, 0x00, 0x01, 0x00, 0xc4, 0xff, 0xc6, 0x03, 0x3c, 0x03, 0xba, 0x00, 0x11, // ...........<.... + 0x00, 0x00, 0x13, 0x3e, 0x01, 0x3b, 0x01, 0x09, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, // ...>.;...#"&'..5 + 0x11, 0x34, 0x36, 0x37, 0xd5, 0x0a, 0x17, 0x0d, 0x3f, 0x01, 0xfa, 0xfe, 0x06, 0x3f, 0x0d, 0x17, // .467....?....?.. + 0x0a, 0x08, 0x09, 0x09, 0x08, 0x03, 0xa7, 0x09, 0x0a, 0xfe, 0x06, 0xfe, 0x06, 0x09, 0x09, 0x09, // ................ + 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x84, 0x03, 0xfa, // ...s............ + 0x02, 0xfc, 0x00, 0x11, 0x00, 0x00, 0x01, 0x15, 0x09, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, // ..........5467>. + 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x03, 0xfa, 0xfe, 0x06, 0xfe, 0x06, 0x09, 0x09, // 3!2............. + 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x02, 0xbd, 0x3f, 0xfe, 0x06, 0x01, // ....s.......?... + 0xfa, 0x3f, 0x0d, 0x17, 0x0a, 0x08, 0x09, 0x09, 0x08, 0x0a, 0x17, 0x0d, 0x00, 0x01, 0x00, 0xc4, // .?.............. + 0xff, 0xc6, 0x03, 0x3c, 0x03, 0xba, 0x00, 0x11, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, // ...<............ + 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x09, 0x01, 0x33, 0x32, 0x16, 0x17, 0x03, 0x2b, 0x08, 0x09, // ....+...32...+.. + 0x09, 0x08, 0x0a, 0x17, 0x0d, 0x3f, 0xfe, 0x06, 0x01, 0xfa, 0x3f, 0x0d, 0x17, 0x0a, 0x03, 0xa7, // .....?....?..... + 0x0a, 0x17, 0x0d, 0xfc, 0x8d, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x01, 0xfa, 0x01, 0xfa, 0x0a, 0x09, // ................ + 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x11, 0x00, 0x00, 0x05, 0x09, // ................ + 0x01, 0x23, 0x15, 0x23, 0x35, 0x23, 0x11, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x3b, 0x01, 0x15, 0x33, // .#.#5#......;..3 + 0x02, 0x00, 0x01, 0xfa, 0xfe, 0x06, 0x7e, 0x7f, 0xfd, 0x13, 0x12, 0x13, 0x2d, 0x1a, 0xfd, 0x7e, // ......~.....-..~ + 0x3a, 0x01, 0xfa, 0x01, 0xfa, 0xfd, 0x7e, 0xfe, 0x07, 0x1a, 0x2d, 0x12, 0x13, 0x13, 0xfd, 0x00, // :.....~...-..... + 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x11, 0x00, 0x00, 0x09, 0x02, // ................ + 0x23, 0x35, 0x23, 0x15, 0x23, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x33, 0x02, // #5#.#.467>.;.53. + 0x00, 0x01, 0xfa, 0xfe, 0x06, 0x7e, 0x7f, 0xfd, 0x13, 0x12, 0x13, 0x2d, 0x1a, 0xfd, 0x7e, 0x03, // .....~.....-..~. + 0xba, 0xfe, 0x06, 0xfe, 0x06, 0xfd, 0x7e, 0x01, 0xf9, 0x1a, 0x2d, 0x12, 0x13, 0x13, 0xfd, 0x00, // ......~...-..... + 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x11, 0x00, 0x00, 0x09, 0x02, // ................ + 0x33, 0x35, 0x33, 0x15, 0x33, 0x11, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x2b, 0x01, 0x35, 0x23, 0x02, // 353.3.4&'..+.5#. + 0x00, 0xfe, 0x06, 0x01, 0xfa, 0x7e, 0x7f, 0xfd, 0x13, 0x12, 0x13, 0x2d, 0x1a, 0xfd, 0x7e, 0x03, // .....~.....-..~. + 0xba, 0xfe, 0x06, 0xfe, 0x06, 0xfd, 0x7e, 0x01, 0xf9, 0x1a, 0x2d, 0x12, 0x13, 0x13, 0xfd, 0x00, // ......~...-..... + 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x11, 0x00, 0x00, 0x05, 0x09, // ................ + 0x01, 0x33, 0x15, 0x33, 0x35, 0x33, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x23, // .3.353......+..# + 0x02, 0x00, 0xfe, 0x06, 0x01, 0xfa, 0x7e, 0x7f, 0xfd, 0x13, 0x12, 0x13, 0x2d, 0x1a, 0xfd, 0x7e, // ......~.....-..~ + 0x3a, 0x01, 0xfa, 0x01, 0xfa, 0xfd, 0x7e, 0xfe, 0x07, 0x1a, 0x2d, 0x12, 0x13, 0x13, 0xfd, 0x00, // :.....~...-..... + 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x18, 0x00, 0x35, 0x00, 0x00, // .............5.. + 0x17, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, // ."&'..5467>.32.. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, // ........#.>.32.. + 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x01, 0x0e, 0x01, 0x07, 0x2e, 0x01, 0x27, 0x01, 0x2e, // .............'.. + 0x01, 0x27, 0x34, 0x36, 0x37, 0x01, 0x73, 0x17, 0x27, 0x0f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x27, // .'467.s.'......' + 0x17, 0x17, 0x26, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x26, 0x17, 0x01, 0x81, 0x09, 0x13, 0x0c, // ..&......&...... + 0x0b, 0x14, 0x08, 0x01, 0xa8, 0x08, 0x07, 0x09, 0x08, 0xfe, 0xa7, 0x09, 0x13, 0x0c, 0x0a, 0x13, // ................ + 0x08, 0xfe, 0x59, 0x08, 0x09, 0x01, 0x08, 0x09, 0x01, 0x59, 0x3a, 0x27, 0x26, 0x25, 0x5b, 0x36, // ..Y......Y:'&%[6 + 0x36, 0x5c, 0x26, 0x25, 0x26, 0x26, 0x25, 0x26, 0x5c, 0x36, 0x36, 0x5b, 0x25, 0x27, 0x26, 0x03, // 6.&%&&%&.66[%'&. + 0xe3, 0x08, 0x09, 0x08, 0x07, 0xfe, 0x58, 0x08, 0x14, 0x0b, 0x0b, 0x13, 0x08, 0xfe, 0xa6, 0x08, // ......X......... + 0x09, 0x01, 0x01, 0x09, 0x08, 0x01, 0xa6, 0x08, 0x13, 0x0b, 0x0c, 0x13, 0x09, 0x01, 0x59, 0x00, // ..............Y. + 0x00, 0x02, 0x00, 0x6c, 0xff, 0xc6, 0x03, 0x95, 0x03, 0xba, 0x00, 0x25, 0x00, 0x2d, 0x00, 0x00, // ...l.......%.-.. + 0x01, 0x2e, 0x01, 0x2f, 0x01, 0x33, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x01, 0x0e, 0x01, 0x07, // .../.3..#"...... + 0x35, 0x0e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x35, // 5..........32675 + 0x01, 0x37, 0x35, 0x37, 0x35, 0x27, 0x01, 0x2f, 0x01, 0x37, 0x1f, 0x02, 0x07, 0x03, 0x7c, 0x03, // .7575'./.7....|. + 0x0c, 0x0a, 0x8f, 0x02, 0x0d, 0x1e, 0x12, 0x12, 0x1e, 0x0c, 0xfe, 0x29, 0x08, 0x0a, 0x03, 0x03, // ...........).... + 0x03, 0x01, 0x18, 0x02, 0x0c, 0x0b, 0x8c, 0x0c, 0x1e, 0x11, 0x12, 0x1f, 0x0d, 0x01, 0xda, 0x14, // ................ + 0x05, 0x19, 0xfd, 0xf2, 0x86, 0x16, 0xd0, 0x17, 0x05, 0x86, 0xd6, 0x02, 0xdf, 0x10, 0x1a, 0x09, // ................ + 0x8e, 0x0d, 0x0d, 0x0d, 0x0d, 0xfe, 0x27, 0x07, 0x11, 0x0a, 0x01, 0x09, 0x13, 0x0a, 0xe1, 0x0f, // ......'......... + 0x19, 0x0a, 0x8e, 0x0c, 0x0d, 0x0c, 0x0c, 0x01, 0x01, 0xdb, 0x21, 0x02, 0x23, 0x01, 0xde, 0xfd, // ..........!.#... + 0x4d, 0x87, 0xd2, 0xd1, 0xc1, 0x09, 0x88, 0xd8, 0x00, 0x04, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // M............... + 0x03, 0xba, 0x00, 0x04, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x14, 0x00, 0x00, 0x37, 0x21, 0x11, 0x21, // ............7!.! + 0x11, 0x01, 0x11, 0x21, 0x11, 0x21, 0x17, 0x05, 0x35, 0x33, 0x15, 0x23, 0x37, 0x21, 0x15, 0x21, // ...!.!..53.#7!.! + 0x35, 0x85, 0x02, 0xf6, 0xfd, 0x0a, 0x03, 0x75, 0xfc, 0x0c, 0x02, 0xf7, 0xfd, 0xfe, 0x45, 0x7f, // 5......u......E. + 0x7f, 0xbe, 0xfe, 0x06, 0x01, 0xfa, 0x45, 0x01, 0x7b, 0xfe, 0x85, 0x02, 0x78, 0xfd, 0x09, 0x03, // ......E.{...x... + 0xf4, 0xfd, 0x3f, 0x7e, 0x7e, 0xbd, 0xfd, 0xfd, 0x00, 0x02, 0x00, 0x46, 0xff, 0xc6, 0x03, 0xba, // ..?~~......F.... + 0x03, 0xba, 0x00, 0x11, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, // .........2...... + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x09, 0x01, 0x33, 0x05, 0x34, 0x36, 0x37, 0x3e, 0x01, // .....+...3.467>. + 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, // ;.2...........+. + 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x03, 0x7b, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, // "&'..5..{....... + 0x09, 0x17, 0x0e, 0x3f, 0xfe, 0x06, 0x01, 0xfa, 0x3f, 0xfc, 0xcb, 0x09, 0x0a, 0x09, 0x16, 0x0d, // ...?....?....... + 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, 0x09, 0x0a, // ~..........~.... + 0x09, 0x03, 0xba, 0x0a, 0x09, 0x0a, 0x17, 0x0d, 0xfc, 0x8d, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x01, // ................ + 0xfa, 0x01, 0xfa, 0x40, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x17, 0x0d, 0xfc, 0x8d, // ...@............ + 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x74, 0x00, 0x01, 0x00, 0x06, // ...........t.... + 0x00, 0x16, 0x03, 0xfa, 0x03, 0x6a, 0x00, 0x23, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, // .....j.#........ + 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x09, // ....+........+.. + 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x01, 0x33, 0x32, 0x16, 0x17, 0x03, 0xeb, // .32.......32.... + 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0c, 0x35, 0xfe, 0x8c, 0x08, 0x07, 0x08, 0x13, 0x0c, 0x35, // .......5.......5 + 0xfe, 0x56, 0x01, 0xaa, 0x35, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x01, 0x74, 0x35, 0x0c, 0x13, 0x08, // .V..5......t5... + 0x03, 0x5a, 0x08, 0x13, 0x0c, 0xfd, 0x18, 0x0b, 0x13, 0x08, 0x07, 0x08, 0x01, 0x75, 0xfe, 0xc0, // .Z...........u.. + 0x0b, 0x13, 0x08, 0x07, 0x08, 0x01, 0xaa, 0x01, 0xaa, 0x08, 0x08, 0x08, 0x13, 0x0c, 0xfe, 0xc2, // ................ + 0x01, 0x75, 0x08, 0x08, 0x00, 0x02, 0x00, 0x46, 0xff, 0xc6, 0x03, 0xba, 0x03, 0xba, 0x00, 0x1c, // .u.....F........ + 0x00, 0x39, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, // .9............+. + 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, // "&'..5.467>.;.2. + 0x17, 0x05, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, // ........+."&'..5 + 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x01, 0xae, // .467>.;.2....... + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0c, 0xfd, 0x0e, 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, // ................ + 0x17, 0x0e, 0xfd, 0x0c, 0x16, 0x0a, 0x02, 0x0c, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0xfd, 0x0d, 0x17, // ................ + 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0d, 0xfd, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x03, 0xa7, // ................ + 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, // ................ + 0x73, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x2d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, // s.......-....... + 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, // ......s......... + 0x0d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x16, 0x03, 0xfa, 0x03, 0x6a, 0x00, 0x23, // .............j.# + 0x00, 0x00, 0x13, 0x33, 0x01, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x09, 0x01, 0x23, // ...3..467>.;...# + 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, // "&'..5..#"&'..5. + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x3c, 0x35, 0x01, 0x74, 0x08, 0x07, 0x08, 0x13, 0x0c, 0x35, // 467>.3<5.t.....5 + 0x01, 0xaa, 0xfe, 0x56, 0x35, 0x0c, 0x13, 0x08, 0x07, 0x08, 0xfe, 0x8c, 0x35, 0x0c, 0x13, 0x08, // ...V5.......5... + 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0c, 0x03, 0x6a, 0xfe, 0x8b, 0x01, 0x3e, 0x0c, 0x13, 0x08, // ........j...>... + 0x08, 0x08, 0xfe, 0x56, 0xfe, 0x56, 0x08, 0x07, 0x08, 0x13, 0x0b, 0x01, 0x40, 0xfe, 0x8b, 0x08, // ...V.V......@... + 0x07, 0x08, 0x13, 0x0b, 0x02, 0xe8, 0x0c, 0x13, 0x08, 0x08, 0x08, 0x00, 0x00, 0x01, 0x00, 0x46, // ...............F + 0xff, 0xc6, 0x03, 0xba, 0x03, 0xba, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, // ................ + 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x01, 0x23, 0x22, // ....+."&'..5..#" + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x01, 0x11, 0x34, // &'..5.467>.;...4 + 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x03, 0xa7, 0x0a, 0x09, 0x09, 0x0a, 0x09, // 67>.;.2......... + 0x16, 0x0d, 0x7e, 0x0e, 0x17, 0x09, 0x09, 0x08, 0xfe, 0x06, 0x3f, 0x0e, 0x17, 0x09, 0x09, 0x08, // ..~.......?..... + 0x08, 0x09, 0x09, 0x17, 0x0e, 0x3f, 0x01, 0xfa, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x7e, 0x0d, 0x16, // .....?.......~.. + 0x09, 0x03, 0xa7, 0x0a, 0x16, 0x0d, 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, // ................ + 0x17, 0x0e, 0x01, 0xba, 0xfe, 0x06, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x03, 0x73, 0x0d, 0x17, 0x0a, // ............s... + 0x09, 0x0a, 0xfe, 0x06, 0x01, 0xb9, 0x0d, 0x17, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x00, 0x00, 0x00, // ................ + 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x1e, // ................ + 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, // ........#!"&'..5 + 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x03, 0xe5, 0x0a, 0x0b, 0x0b, // .467>.3!2....... + 0x0a, 0x0a, 0x17, 0x0e, 0xfc, 0x94, 0x0f, 0x18, 0x0a, 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x18, 0x0f, // ................ + 0x03, 0x6c, 0x0e, 0x17, 0x0a, 0x03, 0xa5, 0x0a, 0x17, 0x0e, 0xfc, 0x94, 0x0f, 0x18, 0x0a, 0x09, // .l.............. + 0x0a, 0x0a, 0x09, 0x0a, 0x18, 0x0f, 0x03, 0x6b, 0x0e, 0x18, 0x0a, 0x0a, 0x0b, 0x0b, 0x0a, 0x00, // .......k........ + 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x26, 0x00, 0x00, 0x01, 0x1e, // ...........&.... + 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, // ........#"..'..5 + 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x1f, 0x01, 0x03, 0xa5, 0x2a, 0x2b, // 4>.7>.32......*+ + 0x2b, 0x2a, 0x3f, 0x25, 0x51, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x51, 0x25, 0x25, 0x37, 0x25, // +*?%QZa55aZQ%%7% + 0x13, 0x13, 0x25, 0x37, 0x25, 0x25, 0x51, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x51, 0x25, 0x3f, // ..%7%%QZa55aZQ%? + 0x02, 0xda, 0x3d, 0x8d, 0x50, 0x50, 0x8d, 0x3d, 0x4c, 0x25, 0x37, 0x25, 0x13, 0x13, 0x25, 0x37, // ..=.PP.=L%7%..%7 + 0x25, 0x25, 0x51, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x51, 0x25, 0x25, 0x37, 0x25, 0x13, 0x13, // %%QZa55aZQ%%7%.. + 0x25, 0x37, 0x25, 0x4c, 0x00, 0x01, 0x00, 0x88, 0xff, 0xc6, 0x03, 0x78, 0x03, 0xb8, 0x00, 0x27, // %7%L.......x...' + 0x00, 0x00, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x13, 0x17, 0x0f, 0x03, 0x2e, 0x01, 0x27, 0x03, 0x07, // .............'.. + 0x0e, 0x01, 0x23, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x03, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, // ..#..'..5.467>.7 + 0x36, 0x16, 0x17, 0x01, 0x1e, 0x01, 0x17, 0x07, 0x03, 0x73, 0x07, 0x12, 0x0b, 0x8d, 0x95, 0x08, // 6........s...... + 0x0b, 0x19, 0xd8, 0x2c, 0x0c, 0x12, 0x06, 0xac, 0x73, 0x0a, 0x16, 0x0c, 0x0b, 0x15, 0x09, 0x09, // ...,....s....... + 0x09, 0x05, 0x09, 0x08, 0x07, 0x12, 0x0b, 0x0c, 0x16, 0x0a, 0x02, 0x73, 0x0a, 0x0e, 0x04, 0x05, // ...........s.... + 0x01, 0xdf, 0x0a, 0x0f, 0x04, 0x35, 0xfe, 0xf6, 0x21, 0x1f, 0x17, 0x62, 0x04, 0x04, 0x0e, 0x09, // .....5..!..b.... + 0x01, 0x09, 0x5e, 0x07, 0x06, 0x01, 0x09, 0x08, 0x09, 0x16, 0x0c, 0x02, 0xc0, 0x0c, 0x14, 0x09, // ..^............. + 0x08, 0x0a, 0x01, 0x03, 0x04, 0x07, 0xfe, 0x81, 0x06, 0x13, 0x0c, 0x2d, 0x00, 0x01, 0x00, 0x08, // ...........-.... + 0xff, 0xf5, 0x03, 0xea, 0x03, 0x89, 0x00, 0x38, 0x00, 0x00, 0x01, 0x13, 0x16, 0x06, 0x07, 0x0e, // .......8........ + 0x01, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x26, 0x2f, 0x02, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x3f, 0x02, // ......&/...'..?. + 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x17, 0x03, 0x2e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x3f, 0x01, // >.?.>.....?.>.?. + 0x3e, 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x33, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x16, // >......3>.7>.76. + 0x17, 0x03, 0x1a, 0xd0, 0x14, 0x0a, 0x1d, 0x1e, 0x5c, 0x3e, 0x3e, 0x76, 0x37, 0x38, 0x4c, 0x12, // .........>>v78L. + 0x1d, 0xf4, 0x1b, 0x28, 0x0e, 0x0c, 0x07, 0x04, 0x03, 0x03, 0x04, 0x13, 0x0e, 0x13, 0x17, 0x31, // ...(...........1 + 0x1b, 0xb8, 0x0a, 0x07, 0x03, 0x03, 0x06, 0x1a, 0x14, 0x02, 0x14, 0x2c, 0x17, 0x17, 0x23, 0x0c, // ...........,..#. + 0x61, 0x01, 0x13, 0x2c, 0x1a, 0x3e, 0x77, 0x39, 0x36, 0x4a, 0x13, 0x02, 0xf3, 0xfe, 0x96, 0x21, // a..,.>w96J.....! + 0x51, 0x2f, 0x31, 0x55, 0x24, 0x23, 0x25, 0x01, 0x03, 0x1e, 0x20, 0x30, 0x45, 0x05, 0x1d, 0x18, // Q/1U$#%... 0E... + 0x13, 0x2a, 0x16, 0x0c, 0x05, 0x10, 0x1e, 0x0d, 0x11, 0x0c, 0x06, 0x07, 0x01, 0x42, 0x12, 0x24, // .*...........B.$ + 0x12, 0x12, 0x17, 0x22, 0x0b, 0x03, 0x0b, 0x06, 0x05, 0x06, 0x1c, 0x15, 0xac, 0x11, 0x20, 0x0e, // ...".......... . + 0x23, 0x27, 0x03, 0x01, 0x20, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7e, 0xff, 0xc8, 0x03, 0x82, // #'.. .....~.... + 0x03, 0xba, 0x00, 0x10, 0x00, 0x25, 0x00, 0x3f, 0x00, 0x00, 0x01, 0x3e, 0x01, 0x37, 0x25, 0x11, // .....%.?...>.7%. + 0x05, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x27, 0x33, 0x15, 0x23, 0x11, // ..&'..5.467'3.#. + 0x33, 0x15, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, // 3.#"&'..5.467>.3 + 0x01, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x33, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, // .>.54&'3..#".... + 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x01, 0xa5, 0x09, 0x16, 0x0c, 0x01, // ......3267...... + 0xb2, 0xfe, 0x4e, 0x0c, 0x16, 0x09, 0x09, 0x08, 0x08, 0x09, 0xe9, 0x99, 0x5c, 0x5c, 0x99, 0x0d, // ..N............. + 0x17, 0x09, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0d, 0x01, 0x9e, 0x09, 0x09, 0x09, 0x09, 0x01, // ................ + 0x09, 0x17, 0x0d, 0x0c, 0x16, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x15, 0x0d, 0x0d, 0x16, 0x09, // ................ + 0x03, 0x4c, 0x0b, 0x0d, 0x02, 0x54, 0xfc, 0x61, 0x53, 0x03, 0x05, 0x07, 0x08, 0x14, 0x0e, 0x03, // .L...T.aS....... + 0x21, 0x0d, 0x18, 0x0b, 0x6b, 0x7c, 0xfd, 0x1b, 0x7c, 0x09, 0x08, 0x09, 0x17, 0x0d, 0x03, 0x5f, // !...k|..|......_ + 0x0d, 0x17, 0x09, 0x09, 0x0a, 0xfd, 0xe4, 0x0a, 0x16, 0x0d, 0x0d, 0x15, 0x09, 0x0a, 0x09, 0x09, // ................ + 0x0a, 0x09, 0x15, 0x0d, 0x0d, 0x16, 0x0a, 0x08, 0x09, 0x09, 0x08, 0x00, 0x00, 0x01, 0x01, 0x03, // ................ + 0xff, 0xc6, 0x02, 0xfd, 0x03, 0xba, 0x00, 0x32, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x17, 0x1e, 0x03, // .......2........ + 0x17, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x3e, // .......#"&'..=.> + 0x03, 0x37, 0x3e, 0x01, 0x37, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, // .7>.7'..5467>.32 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x02, 0x6a, 0x14, 0x24, 0x10, 0x13, 0x1b, // ..........j.$... + 0x13, 0x09, 0x01, 0x25, 0x26, 0x24, 0x59, 0x35, 0x35, 0x5a, 0x25, 0x24, 0x25, 0x01, 0x09, 0x12, // ...%&$Y55Z%$%... + 0x1b, 0x12, 0x11, 0x25, 0x14, 0x1d, 0x1d, 0x1c, 0x1c, 0x1d, 0x1b, 0x44, 0x28, 0x28, 0x45, 0x1c, // ...%.......D((E. + 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x02, 0x5b, 0x14, 0x39, 0x24, 0x29, 0x5a, 0x63, 0x6b, 0x39, 0x03, // ......[.9$)Zck9. + 0x1f, 0x35, 0x16, 0x16, 0x17, 0x17, 0x16, 0x16, 0x35, 0x1f, 0x03, 0x39, 0x6b, 0x63, 0x5a, 0x29, // .5......5..9kcZ) + 0x24, 0x39, 0x15, 0x18, 0x1c, 0x44, 0x27, 0x28, 0x43, 0x1b, 0x1c, 0x1d, 0x1d, 0x1c, 0x1b, 0x43, // $9...D'(C......C + 0x28, 0x27, 0x44, 0x1c, 0x19, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x55, 0x03, 0xfa, // ('D..........U.. + 0x03, 0x2b, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x60, 0x00, 0x00, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, // .+...9.`...>.32. + 0x17, 0x35, 0x1e, 0x01, 0x15, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, // .5.........#"&'. + 0x01, 0x27, 0x35, 0x27, 0x34, 0x36, 0x37, 0x05, 0x34, 0x36, 0x37, 0x15, 0x3e, 0x01, 0x33, 0x32, // .'5'467.467.>.32 + 0x16, 0x17, 0x15, 0x1e, 0x01, 0x15, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, // ............#"&' + 0x2e, 0x01, 0x2f, 0x01, 0x37, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x17, 0x27, 0x11, 0x37, 0x13, // ../.7"......'.7. + 0x21, 0x13, 0x17, 0x03, 0x27, 0x37, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, // !...'74&'..#"... + 0x01, 0x15, 0x17, 0x27, 0x37, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x02, 0x9a, 0x12, 0x2c, 0x19, // ...'74&'..#...,. + 0x1a, 0x2d, 0x13, 0x11, 0x12, 0x02, 0x04, 0x10, 0x0d, 0x13, 0x2d, 0x1a, 0x19, 0x2c, 0x12, 0x0d, // .-........-..,.. + 0x12, 0x04, 0x02, 0x12, 0x13, 0xfd, 0xf5, 0x12, 0x13, 0x12, 0x2b, 0x1a, 0x19, 0x2d, 0x13, 0x13, // ..........+..-.. + 0x12, 0x02, 0x03, 0x12, 0x0e, 0x12, 0x2d, 0x1a, 0x1a, 0x2b, 0x12, 0x0f, 0x13, 0x02, 0x01, 0x7c, // ......-..+.....| + 0x23, 0x3c, 0x1a, 0x18, 0x19, 0x01, 0x5c, 0xdd, 0x77, 0x01, 0x35, 0x72, 0xf9, 0x11, 0x51, 0x03, // #<......w.5r..Q. + 0x19, 0x18, 0x19, 0x3c, 0x24, 0x23, 0x3b, 0x19, 0x19, 0x1a, 0x04, 0x98, 0x02, 0x19, 0x18, 0x1a, // ...<$#;......... + 0x3c, 0x23, 0x01, 0x2a, 0x12, 0x13, 0x13, 0x12, 0x01, 0x13, 0x2d, 0x19, 0x1e, 0x11, 0x1d, 0x0e, // <#.*......-..... + 0x11, 0x12, 0x12, 0x11, 0x0e, 0x20, 0x12, 0x01, 0x19, 0x19, 0x2c, 0x13, 0x58, 0x19, 0x2d, 0x13, // ..... ....,.X.-. + 0x01, 0x12, 0x13, 0x12, 0x12, 0x01, 0x13, 0x2c, 0x19, 0x17, 0x13, 0x22, 0x0e, 0x11, 0x12, 0x12, // .......,...".... + 0x11, 0x10, 0x23, 0x13, 0x14, 0xa9, 0x18, 0x19, 0x19, 0x3c, 0x23, 0x19, 0x02, 0x01, 0x3b, 0x18, // ..#......<#...;. + 0x01, 0x1d, 0xfe, 0xf2, 0x27, 0xfe, 0xb3, 0x02, 0x27, 0x22, 0x3d, 0x19, 0x19, 0x18, 0x18, 0x19, // ....'...'"=..... + 0x19, 0x3d, 0x22, 0x22, 0x04, 0x1e, 0x22, 0x3d, 0x19, 0x19, 0x18, 0x00, 0x00, 0x04, 0x00, 0x06, // .="".."=........ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x18, 0x00, 0x41, 0x00, 0x5a, 0x00, 0x5f, 0x00, 0x00, // .........A.Z._.. + 0x25, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, // %>.54&'..#"..... + 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, // .....3267...#".. + 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, // '..54>.7>.32.... + 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, // ......'..#"&'..5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x27, // 467>.32........' + 0x11, 0x23, 0x11, 0x33, 0x03, 0x0d, 0x37, 0x37, 0x37, 0x37, 0x38, 0x86, 0x4f, 0x4f, 0x86, 0x38, // .#.3..77778.OO.8 + 0x37, 0x37, 0x37, 0x37, 0x38, 0x86, 0x4f, 0x4f, 0x86, 0x38, 0x58, 0x25, 0x51, 0x59, 0x61, 0x35, // 77778.OO.8X%QYa5 + 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, // 5aZR%$8$..$8$%RZ + 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x9b, // a55aYQ%%8%..%8%. + 0x2a, 0x65, 0x3b, 0x3b, 0x65, 0x29, 0x2a, 0x29, 0x29, 0x2a, 0x29, 0x65, 0x3b, 0x3b, 0x65, 0x2a, // *e;;e)*))*)e;;e* + 0x29, 0x29, 0x29, 0x29, 0x8b, 0x7e, 0x7e, 0xb3, 0x38, 0x86, 0x4f, 0x4f, 0x86, 0x38, 0x37, 0x37, // )))).~~.8.OO.877 + 0x37, 0x37, 0x38, 0x86, 0x4f, 0x4f, 0x86, 0x38, 0x37, 0x37, 0x37, 0x37, 0x58, 0x25, 0x38, 0x25, // 778.OO.87777X%8% + 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, // ..%8%%QYa55aZR%$ + 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, // 8$..$8$%RZa55aYQ + 0x25, 0x9b, 0x29, 0x29, 0x29, 0x29, 0x2a, 0x65, 0x3b, 0x3b, 0x65, 0x29, 0x2a, 0x29, 0x29, 0x2a, // %.))))*e;;e)*))* + 0x29, 0x65, 0x3b, 0x3b, 0x65, 0x2a, 0x2c, 0x01, 0x3c, 0xfe, 0xc4, 0x00, 0x00, 0x02, 0x00, 0x09, // )e;;e*,.<....... + 0x00, 0x07, 0x03, 0xe7, 0x03, 0x7d, 0x00, 0x1d, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x27, // .....}...^.....' + 0x26, 0x06, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x16, 0x36, // &..............6 + 0x37, 0x3e, 0x01, 0x27, 0x35, 0x2e, 0x01, 0x2f, 0x02, 0x01, 0x16, 0x06, 0x07, 0x17, 0x16, 0x14, // 7>.'5../........ + 0x0f, 0x02, 0x2f, 0x01, 0x07, 0x1f, 0x01, 0x0f, 0x01, 0x06, 0x22, 0x2f, 0x01, 0x07, 0x1e, 0x01, // ../......."/.... + 0x17, 0x07, 0x16, 0x06, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x27, 0x35, // .......'../...'5 + 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x17, 0x33, 0x1e, 0x01, 0x17, 0x01, 0x3e, // ..7>.7>.7.3....> + 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x01, 0x5b, 0x18, 0x30, 0x19, 0x10, 0x1c, // ..........[.0... + 0x0b, 0x08, 0x05, 0x03, 0x05, 0x1b, 0x17, 0x0b, 0x15, 0x2c, 0x19, 0x04, 0x0f, 0x18, 0x09, 0x07, // .........,...... + 0x06, 0x01, 0x06, 0x15, 0x10, 0x0b, 0x04, 0x02, 0x18, 0x01, 0x05, 0x06, 0x7e, 0x13, 0x13, 0x1c, // ............~... + 0x0d, 0x0c, 0x14, 0x43, 0x14, 0x04, 0x06, 0x1b, 0x13, 0x26, 0x12, 0x7f, 0x78, 0x13, 0x19, 0x06, // ...C.....&..x... + 0x03, 0x0c, 0x1d, 0x29, 0x26, 0x67, 0x40, 0x32, 0x5c, 0x2a, 0x0c, 0x2c, 0x35, 0x09, 0x03, 0x01, // ...)&g@2.*.,5... + 0x03, 0x02, 0x1f, 0x1c, 0x1b, 0x43, 0x26, 0x49, 0x05, 0x20, 0x3e, 0x1d, 0x01, 0x53, 0x0a, 0x1c, // .....C&I. >..S.. + 0x12, 0x11, 0x1c, 0x0c, 0x0d, 0x08, 0x07, 0x01, 0x5f, 0x15, 0x1b, 0x06, 0x03, 0x06, 0x09, 0x0a, // ........_....... + 0x1a, 0x10, 0x1b, 0x34, 0x17, 0x0c, 0x12, 0x16, 0x05, 0x01, 0x02, 0x07, 0x08, 0x0a, 0x17, 0x0f, // ...4............ + 0x06, 0x17, 0x2d, 0x15, 0x0c, 0x02, 0x01, 0xc7, 0x0e, 0x18, 0x0b, 0x80, 0x12, 0x25, 0x13, 0x1c, // ..-..........%.. + 0x08, 0x06, 0x14, 0x46, 0x12, 0x0c, 0x0d, 0x1c, 0x14, 0x14, 0x7f, 0x7d, 0x1e, 0x41, 0x23, 0x02, // ...F.......}.A#. + 0x40, 0x65, 0x26, 0x2b, 0x20, 0x0b, 0x09, 0x2f, 0x27, 0x0c, 0x2b, 0x61, 0x36, 0x02, 0x15, 0x26, // @e&+ ../'.+a6..& + 0x11, 0x28, 0x43, 0x1b, 0x1c, 0x20, 0x03, 0x03, 0x05, 0x19, 0x13, 0x01, 0x58, 0x0b, 0x09, 0x02, // .(C.. ......X... + 0x03, 0x0e, 0x0d, 0x0c, 0x0a, 0x16, 0x0d, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x06, 0x03, 0xfa, // ................ + 0x03, 0x7a, 0x00, 0x04, 0x00, 0x09, 0x00, 0x3e, 0x00, 0x00, 0x13, 0x23, 0x15, 0x33, 0x35, 0x21, // .z.....>...#.35! + 0x23, 0x15, 0x33, 0x35, 0x37, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x33, 0x32, // #.357......+..32 + 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x21, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, // ......!5467>.;.5 + 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, // #"&'..5.467>.;.5 + 0x21, 0x15, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0xc4, 0x3f, 0x3f, 0x02, 0xb7, 0x3f, 0x3f, // !.32......??..?? + 0x7f, 0x13, 0x13, 0x13, 0x2c, 0x1a, 0xfd, 0xbe, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0xfd, 0x0a, 0x08, // ....,........... + 0x09, 0x0a, 0x17, 0x0d, 0xbe, 0xfd, 0x1b, 0x2d, 0x12, 0x12, 0x13, 0x09, 0x09, 0x09, 0x17, 0x0e, // .......-........ + 0x7e, 0x02, 0x78, 0x7e, 0x0d, 0x16, 0x0a, 0x09, 0x0a, 0x02, 0x7e, 0xfd, 0xfd, 0xfd, 0xfd, 0x3f, // ~.x~......~....? + 0xfe, 0xc4, 0x1b, 0x2d, 0x12, 0x12, 0x13, 0x7e, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0x3f, 0x3d, 0x0e, // ...-...~.....?=. + 0x17, 0x09, 0x0a, 0x09, 0x7e, 0x13, 0x12, 0x13, 0x2d, 0x1a, 0x01, 0x3a, 0x0e, 0x17, 0x09, 0x0a, // ....~...-..:.... + 0x09, 0x7e, 0x7e, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0x00, 0x01, 0x00, 0x07, 0x00, 0x23, 0x03, 0xf9, // .~~..........#.. + 0x03, 0x5d, 0x00, 0x1c, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x16, 0x06, 0x07, 0x01, 0x07, 0x23, // .].............# + 0x2e, 0x01, 0x27, 0x01, 0x2e, 0x01, 0x37, 0x34, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x21, 0x32, // ..'...746?.>.3!2 + 0x16, 0x1f, 0x01, 0x03, 0xe6, 0x09, 0x0a, 0x01, 0x07, 0x07, 0xfe, 0x43, 0x1d, 0x23, 0x09, 0x0f, // ...........C.#.. + 0x05, 0xfe, 0x44, 0x09, 0x07, 0x01, 0x09, 0x09, 0xb2, 0x09, 0x15, 0x0c, 0x02, 0x08, 0x0c, 0x15, // ..D............. + 0x08, 0xc0, 0x02, 0x9c, 0x08, 0x15, 0x0d, 0x0b, 0x15, 0x0a, 0xfd, 0xef, 0x14, 0x03, 0x0a, 0x07, // ................ + 0x02, 0x11, 0x0a, 0x15, 0x0b, 0x0c, 0x14, 0x08, 0xb0, 0x0a, 0x09, 0x09, 0x08, 0xb0, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0x9b, 0xff, 0xc6, 0x03, 0x65, 0x03, 0xba, 0x00, 0x18, 0x00, 0x3b, 0x00, 0x00, // .......e.....;.. + 0x01, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, // ."..........3267 + 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x05, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, // >.54&'..#....... + 0x11, 0x0f, 0x01, 0x2f, 0x01, 0x0f, 0x01, 0x2f, 0x01, 0x11, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, // .../.../....'..5 + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x02, 0x00, 0x26, 0x40, // 467>.32.......&@ + 0x1a, 0x19, 0x1a, 0x1a, 0x19, 0x1a, 0x40, 0x26, 0x25, 0x40, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, 0x1a, // ......@&%@...... + 0x40, 0x25, 0x01, 0x65, 0x34, 0x34, 0x18, 0x34, 0x1c, 0x08, 0x13, 0x13, 0x67, 0x67, 0x13, 0x13, // @%.e44.4....gg.. + 0x08, 0x1d, 0x36, 0x18, 0x33, 0x32, 0x32, 0x33, 0x34, 0x80, 0x4c, 0x4a, 0x7f, 0x34, 0x34, 0x34, // ..6.32234.LJ.444 + 0x03, 0x07, 0x1a, 0x1a, 0x1a, 0x40, 0x25, 0x24, 0x3f, 0x1a, 0x1b, 0x1b, 0x1b, 0x1b, 0x1a, 0x3f, // .....@%$?......? + 0x24, 0x25, 0x40, 0x1a, 0x1a, 0x1a, 0xb1, 0x4a, 0x7e, 0x34, 0x19, 0x26, 0x0d, 0xfe, 0xd3, 0x13, // $%@....J~4.&.... + 0x08, 0x06, 0x67, 0x67, 0x06, 0x08, 0x13, 0x01, 0x2b, 0x0f, 0x26, 0x19, 0x34, 0x7e, 0x4a, 0x4a, // ..gg....+.&.4~JJ + 0x7f, 0x34, 0x33, 0x34, 0x34, 0x33, 0x34, 0x7f, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x39, // .434434.J......9 + 0xff, 0xc6, 0x03, 0xc8, 0x03, 0xba, 0x00, 0x2e, 0x00, 0x47, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, // .........G...... + 0x17, 0x13, 0x17, 0x0f, 0x01, 0x27, 0x0f, 0x02, 0x27, 0x03, 0x27, 0x07, 0x27, 0x07, 0x03, 0x07, // .....'..'.'.'... + 0x2f, 0x02, 0x07, 0x2f, 0x01, 0x26, 0x36, 0x37, 0x13, 0x37, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, // /../.&67.7..5467 + 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x07, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, // >.32......4&'..# + 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, // "..........3267> + 0x01, 0x35, 0x03, 0x6e, 0x23, 0x23, 0x02, 0x99, 0x05, 0x10, 0x13, 0x8f, 0x26, 0x0f, 0x14, 0x11, // .5.n##......&... + 0x99, 0x01, 0x20, 0x22, 0x03, 0x99, 0x11, 0x14, 0x0f, 0x26, 0x8e, 0x14, 0x0f, 0x01, 0x02, 0x03, // .. ".....&...... + 0x9a, 0x03, 0x23, 0x22, 0x34, 0x33, 0x36, 0x82, 0x4e, 0x4c, 0x81, 0x35, 0x35, 0x35, 0xb6, 0x1b, // ..#"436.NL.555.. + 0x1a, 0x1b, 0x40, 0x26, 0x27, 0x41, 0x1b, 0x1a, 0x1a, 0x1a, 0x1a, 0x1b, 0x41, 0x27, 0x26, 0x40, // ..@&'A......A'&@ + 0x1b, 0x1a, 0x1b, 0x02, 0x4f, 0x3d, 0x6c, 0x2f, 0x02, 0xfe, 0xf5, 0x13, 0x11, 0x05, 0x26, 0x8e, // ....O=l/......&. + 0x10, 0x03, 0x0c, 0x01, 0x0c, 0x04, 0x01, 0x01, 0x04, 0xfe, 0xf4, 0x0c, 0x03, 0x10, 0x8e, 0x26, // ...............& + 0x05, 0x11, 0x05, 0x0a, 0x04, 0x01, 0x0c, 0x03, 0x2e, 0x6b, 0x3d, 0x4c, 0x81, 0x35, 0x34, 0x35, // .........k=L.545 + 0x35, 0x34, 0x35, 0x81, 0x4c, 0x02, 0x26, 0x41, 0x1a, 0x1b, 0x1a, 0x1a, 0x1b, 0x1a, 0x41, 0x26, // 545.L.&A......A& + 0x25, 0x40, 0x1a, 0x1c, 0x1b, 0x1b, 0x1c, 0x1a, 0x40, 0x25, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06, // %@......@%...... + 0x00, 0x6f, 0x03, 0xfa, 0x03, 0x11, 0x00, 0x04, 0x00, 0x09, 0x00, 0x12, 0x00, 0x17, 0x00, 0x00, // .o.............. + 0x13, 0x33, 0x35, 0x23, 0x15, 0x01, 0x23, 0x15, 0x33, 0x35, 0x27, 0x21, 0x11, 0x21, 0x11, 0x21, // .35#..#.35'!.!.! + 0x11, 0x21, 0x35, 0x01, 0x15, 0x33, 0x35, 0x23, 0x77, 0x70, 0x70, 0x01, 0xc1, 0x70, 0x70, 0xe1, // .!5..35#wpp..pp. + 0x01, 0x52, 0x01, 0x51, 0xfc, 0x0c, 0x01, 0x51, 0x01, 0xc2, 0x70, 0x70, 0x01, 0x50, 0x70, 0x70, // .R.Q...Q..pp.Ppp + 0x01, 0x51, 0x71, 0x71, 0x70, 0xfe, 0xaf, 0xfe, 0xaf, 0x01, 0xc1, 0xe1, 0xfe, 0x3f, 0x71, 0x71, // .Qqqp........?qq + 0x00, 0x04, 0x00, 0x06, 0x00, 0x20, 0x03, 0xfa, 0x03, 0x60, 0x00, 0x06, 0x00, 0x23, 0x00, 0x47, // ..... ...`...#.G + 0x00, 0x74, 0x00, 0x00, 0x01, 0x15, 0x33, 0x15, 0x33, 0x35, 0x23, 0x03, 0x34, 0x26, 0x27, 0x2e, // .t....3.35#.4&'. + 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x17, 0x3e, 0x01, 0x33, 0x1f, 0x01, 0x0f, 0x02, // .#"......>.3.... + 0x15, 0x33, 0x35, 0x23, 0x3f, 0x02, 0x05, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x37, 0x35, 0x23, // .35#?..4&'..'75# + 0x15, 0x33, 0x07, 0x15, 0x37, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x0f, 0x01, 0x22, 0x26, 0x27, // .3..72......."&' + 0x07, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x03, 0x1e, 0x01, 0x15, 0x11, 0x33, // ...3267>.5.....3 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // 2...........#!"& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x11, 0x34, 0x36, 0x37, // '..5.467>.;..467 + 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x01, 0xc5, 0x2b, 0x2e, 0x59, 0x9b, 0x0b, 0x0a, 0x0a, // >.3!2....+.Y.... + 0x17, 0x0d, 0x0d, 0x16, 0x08, 0x09, 0x10, 0x08, 0x25, 0x09, 0x12, 0x09, 0x12, 0x07, 0x09, 0x19, // ........%....... + 0x3b, 0x90, 0x52, 0x25, 0x1e, 0x09, 0x02, 0x3b, 0x07, 0x07, 0x06, 0x14, 0x0c, 0x2b, 0x80, 0x42, // ;.R%...;.....+.B + 0x29, 0x1d, 0x09, 0x0e, 0x05, 0x05, 0x05, 0x09, 0x17, 0x0c, 0x1a, 0x0e, 0x14, 0x12, 0x23, 0x11, // ).............#. + 0x11, 0x1c, 0x0c, 0x0b, 0x0b, 0xa7, 0x09, 0x09, 0xee, 0x0c, 0x15, 0x09, 0x09, 0x09, 0x09, 0x09, // ................ + 0x09, 0x15, 0x0c, 0xfc, 0x84, 0x0d, 0x15, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x15, 0x0d, 0xd0, // ................ + 0x08, 0x08, 0x09, 0x16, 0x0d, 0x01, 0x47, 0x0c, 0x14, 0x09, 0x02, 0xcc, 0x28, 0xa9, 0xd1, 0xfe, // ......G.....(... + 0x5c, 0x0f, 0x18, 0x09, 0x07, 0x08, 0x06, 0x06, 0x05, 0x11, 0x0b, 0x16, 0x0e, 0x0e, 0x06, 0x12, // ................ + 0x16, 0x1c, 0x3d, 0x22, 0x29, 0x25, 0x26, 0x1d, 0x4d, 0x0b, 0x14, 0x08, 0x08, 0x0a, 0x02, 0x30, // ..=")%&.M......0 + 0x21, 0x28, 0x2f, 0x20, 0x04, 0x03, 0x04, 0x04, 0x0a, 0x07, 0x13, 0x06, 0x0a, 0x0b, 0x26, 0x0b, // !(/ ..........&. + 0x0c, 0x09, 0x08, 0x09, 0x1a, 0x10, 0x02, 0x74, 0x09, 0x15, 0x0c, 0xfe, 0xb9, 0x09, 0x09, 0x09, // .......t........ + 0x15, 0x0c, 0xfe, 0xb9, 0x0d, 0x15, 0x09, 0x08, 0x08, 0x08, 0x08, 0x09, 0x15, 0x0d, 0x01, 0x46, // ...............F + 0x0c, 0x16, 0x09, 0x09, 0x09, 0x01, 0x45, 0x0d, 0x16, 0x09, 0x08, 0x09, 0x09, 0x08, 0x00, 0x00, // ......E......... + 0x00, 0x02, 0x00, 0x17, 0xff, 0xc6, 0x03, 0xe9, 0x03, 0xba, 0x00, 0x14, 0x00, 0x35, 0x00, 0x00, // .............5.. + 0x13, 0x32, 0x16, 0x1f, 0x01, 0x11, 0x0f, 0x01, 0x23, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // .2......#'..5.46 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x17, 0x1e, 0x03, 0x17, 0x32, 0x16, 0x1f, 0x01, 0x15, 0x07, 0x0e, // 7>.;.....2...... + 0x03, 0x27, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, // .'"&'..5.467>.76 + 0x16, 0x17, 0xaf, 0x06, 0x0a, 0x05, 0x09, 0x09, 0x15, 0x7b, 0x14, 0x05, 0x04, 0x04, 0x05, 0x04, // .........{...... + 0x0a, 0x06, 0x7b, 0x86, 0x51, 0xa3, 0xa6, 0xaa, 0x56, 0x06, 0x09, 0x04, 0x07, 0x06, 0x48, 0xa0, // ..{.Q...V.....H. + 0xb0, 0xbf, 0x68, 0x06, 0x0a, 0x04, 0x04, 0x04, 0x03, 0x04, 0x04, 0x09, 0x06, 0x05, 0x0a, 0x04, // ..h............. + 0x03, 0xba, 0x05, 0x04, 0x15, 0xfc, 0x48, 0x15, 0x09, 0x09, 0x05, 0x0a, 0x06, 0x03, 0xb8, 0x06, // ......H......... + 0x0a, 0x05, 0x04, 0x05, 0x2a, 0x35, 0x55, 0x3e, 0x27, 0x08, 0x06, 0x04, 0x13, 0x12, 0x13, 0x5a, // ....*5U>'......Z + 0x81, 0x51, 0x1f, 0x09, 0x05, 0x03, 0x05, 0x0a, 0x06, 0x02, 0x47, 0x05, 0x09, 0x05, 0x04, 0x05, // .Q........G..... + 0x01, 0x01, 0x03, 0x04, 0x00, 0x05, 0x00, 0x06, 0xff, 0xd8, 0x03, 0xfa, 0x03, 0xa8, 0x00, 0x04, // ................ + 0x00, 0x09, 0x00, 0x0e, 0x00, 0x1d, 0x00, 0x22, 0x00, 0x00, 0x13, 0x37, 0x01, 0x07, 0x01, 0x3f, // ......."...7...? + 0x01, 0x17, 0x07, 0x27, 0x13, 0x01, 0x37, 0x01, 0x07, 0x01, 0x1f, 0x01, 0x07, 0x17, 0x01, 0x23, // ...'..7........# + 0x07, 0x27, 0x01, 0x27, 0x07, 0x27, 0x01, 0x37, 0x0f, 0x01, 0x27, 0x37, 0x17, 0x7d, 0x57, 0x01, // .'.'.'.7..'7.}W. + 0x56, 0x56, 0xfe, 0xa9, 0x79, 0x55, 0xab, 0x55, 0xab, 0x67, 0xfe, 0xa9, 0x55, 0x01, 0x57, 0x55, // VV..yU.U.g..U.WU + 0x01, 0xf0, 0xab, 0x02, 0x57, 0x55, 0xfe, 0xfe, 0xa9, 0x45, 0x7d, 0x01, 0x9b, 0x62, 0xac, 0x54, // ....WU...E}..b.T + 0x01, 0x01, 0x88, 0xde, 0x57, 0xab, 0x57, 0xab, 0x02, 0x5d, 0x57, 0xfe, 0xa3, 0x57, 0x01, 0x5d, // ....W.W..]W..W.] + 0x7b, 0x56, 0xae, 0x57, 0xaf, 0xfd, 0xae, 0x01, 0x5d, 0x57, 0xfe, 0xa3, 0x57, 0x02, 0xaa, 0xaf, // {V.W....]W..W... + 0xb0, 0x56, 0x57, 0xfe, 0xfa, 0x46, 0x7f, 0x01, 0xa3, 0x63, 0xae, 0x58, 0x01, 0x05, 0x24, 0x36, // .VW..F...c.X..$6 + 0x56, 0xae, 0x56, 0xae, 0x00, 0x06, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x04, // V.V............. + 0x00, 0x2d, 0x00, 0x32, 0x00, 0x41, 0x00, 0x46, 0x00, 0x4b, 0x00, 0x00, 0x13, 0x17, 0x37, 0x27, // .-.2.A.F.K....7' + 0x07, 0x07, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, // ..4>.7>.32...... + 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x25, 0x17, // ......#"..'..5%. + 0x37, 0x27, 0x07, 0x25, 0x0f, 0x01, 0x17, 0x37, 0x17, 0x07, 0x17, 0x37, 0x33, 0x37, 0x27, 0x37, // 7'.%...7...737'7 + 0x2f, 0x01, 0x27, 0x07, 0x17, 0x37, 0x27, 0x0f, 0x01, 0x17, 0x37, 0x27, 0xd4, 0xbd, 0x2f, 0xbd, // /.'..7'...7'../. + 0x2f, 0xce, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x34, 0x61, 0x59, 0x52, 0x24, // /..$8$%RZa54aYR$ + 0x26, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x26, 0x24, 0x52, 0x59, 0x61, 0x34, 0x35, 0x61, 0x5a, // &8%..%8&$RYa45aZ + 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x01, 0x10, 0xbd, 0x31, 0xbf, 0x2f, 0x01, 0x8e, 0x4b, 0x8e, // R%$8$....1./..K. + 0x2f, 0x5e, 0x36, 0xe4, 0x46, 0x27, 0x5e, 0x8e, 0x2f, 0x30, 0x01, 0x5f, 0xd9, 0x30, 0x5f, 0x2f, // /^6.F'^./0._.0_/ + 0x5e, 0x43, 0x2f, 0x5f, 0x2f, 0x5f, 0x01, 0xd8, 0xc1, 0x31, 0xc0, 0x30, 0x18, 0x34, 0x62, 0x59, // ^C/_/_...1.0.4bY + 0x52, 0x26, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x26, 0x52, 0x59, 0x62, 0x34, 0x35, // R&$8$..$8$&RYb45 + 0x61, 0x59, 0x52, 0x25, 0x25, 0x37, 0x25, 0x13, 0x13, 0x25, 0x37, 0x25, 0x25, 0x52, 0x59, 0x61, // aYR%%7%..%7%%RYa + 0x35, 0x5d, 0xc2, 0x30, 0xc1, 0x2f, 0x73, 0x13, 0x90, 0x32, 0x62, 0x38, 0xe8, 0x46, 0x27, 0x91, // 5].0./s..2b8.F'. + 0x2f, 0x30, 0x62, 0x60, 0x44, 0x30, 0x61, 0x30, 0x61, 0x44, 0x30, 0x60, 0x2f, 0x61, 0x00, 0x00, // /0b`D0a0aD0`/a.. + 0x00, 0x01, 0x00, 0x06, 0x00, 0x05, 0x03, 0xfa, 0x03, 0x7b, 0x00, 0x25, 0x00, 0x00, 0x25, 0x01, // .........{.%..%. + 0x23, 0x3e, 0x01, 0x35, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x0f, // #>.5..'..'...... + 0x01, 0x31, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x14, // .1'..'&......... + 0x16, 0x17, 0x23, 0x01, 0x02, 0x00, 0x01, 0xbf, 0x02, 0x1f, 0x1e, 0x02, 0x2c, 0x2b, 0x0e, 0x1e, // ..#.........,+.. + 0x11, 0x20, 0x49, 0x29, 0x3c, 0x66, 0x2a, 0x06, 0x06, 0x2a, 0x66, 0x3c, 0x29, 0x49, 0x20, 0x11, // . I).7>.7>.. + 0x1e, 0x01, 0x1f, 0x01, 0x31, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, // ....17>.76...... + 0x01, 0x17, 0x16, 0x06, 0x07, 0x33, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x0f, // .....3'..'..#".. + 0x02, 0x11, 0x01, 0x3e, 0x01, 0x3d, 0x01, 0x02, 0x00, 0x01, 0xbf, 0xfe, 0x41, 0xfe, 0x41, 0x02, // ...>.=......A.A. + 0x1f, 0x1f, 0x01, 0x02, 0x2c, 0x2b, 0x0e, 0x1e, 0x11, 0x20, 0x49, 0x29, 0x3c, 0x66, 0x2a, 0x06, // ....,+... I) + 0x01, 0x35, 0x07, 0x14, 0x06, 0x07, 0x09, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, // .5........=.467> + 0x01, 0x33, 0x32, 0x16, 0x1f, 0x02, 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, // .32...?.>.32.... + 0x17, 0x15, 0x03, 0xfa, 0x02, 0x2c, 0x2b, 0x0e, 0x1e, 0x11, 0x20, 0x49, 0x29, 0x3c, 0x66, 0x2a, // .....,+... I).54&'..'?.>.54& + 0x27, 0x2e, 0x01, 0x27, 0x07, 0x33, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x23, 0x35, // '..'.3........#5 + 0x35, 0x33, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x23, 0x35, 0x13, 0x32, 0x1e, 0x02, // 53........#5.2.. + 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, // ..........#"..'. + 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x02, 0x58, 0x4d, 0xa9, 0xbf, 0x2d, 0x3f, // .54>.7>.3.XM..-? + 0x13, 0x0f, 0x0f, 0x0c, 0x0c, 0x0d, 0x20, 0x14, 0x10, 0x10, 0x10, 0x11, 0x0f, 0x0f, 0x08, 0x18, // ...... ......... + 0x10, 0x96, 0x3b, 0x45, 0x0c, 0x0c, 0x0b, 0x0b, 0x3e, 0x44, 0x30, 0x3d, 0x09, 0x09, 0x0a, 0x09, // ..;E....>D0=.... + 0x3c, 0x30, 0x3e, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, // <0>5aYQ%%8%..%8% + 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, // %QYa55aZR%$8$..$ + 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x02, 0x84, 0x09, 0xfe, 0x66, 0x13, 0x14, 0x10, 0x26, // 8$%RZa5....f...& + 0x16, 0x13, 0x20, 0x0e, 0x0c, 0x11, 0x04, 0x06, 0x0b, 0x0c, 0x24, 0x17, 0x14, 0x24, 0x11, 0x09, // .. .......$..$.. + 0x0d, 0x05, 0xe5, 0x0a, 0x04, 0x12, 0x0e, 0x0e, 0x14, 0x05, 0x0a, 0x5f, 0xa1, 0x08, 0x05, 0x13, // ..........._.... + 0x0e, 0x0d, 0x11, 0x05, 0x08, 0x59, 0x01, 0x7a, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, // .....Y.z.$8$%RZa + 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, // 55aYQ%%8%..%8%%Q + 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x00, 0x01, 0x00, 0x19, // Ya55aZR%$8$..... + 0xff, 0xc7, 0x03, 0x88, 0x03, 0xba, 0x00, 0x38, 0x00, 0x00, 0x01, 0x11, 0x0e, 0x01, 0x07, 0x23, // .......8.......# + 0x0e, 0x01, 0x07, 0x23, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, // ...#.&'..7>.7>.7 + 0x33, 0x35, 0x21, 0x11, 0x16, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x07, 0x23, 0x06, 0x26, 0x27, 0x2e, // 35!........#.&'. + 0x01, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x37, 0x33, 0x17, 0x11, 0x26, 0x36, 0x17, 0x21, // .7>.?.>.73..&6.! + 0x32, 0x16, 0x15, 0x03, 0x88, 0x05, 0x20, 0x1c, 0x03, 0x1e, 0x45, 0x28, 0x02, 0x29, 0x46, 0x1b, // 2..... ...E(.)F. + 0x1b, 0x17, 0x04, 0x04, 0x21, 0x1c, 0x1c, 0x3c, 0x21, 0x2c, 0xfe, 0xba, 0x01, 0x21, 0x23, 0x02, // ....!..... .....D* + 0x29, 0x47, 0x1e, 0x01, 0x1b, 0x20, 0x07, 0x04, 0x02, 0x0b, 0x32, 0x31, 0x01, 0x30, 0x2f, 0x00, // )G... ....21.0/. + 0x00, 0x04, 0x00, 0x19, 0xff, 0xc7, 0x03, 0xe9, 0x03, 0xba, 0x00, 0x07, 0x00, 0x22, 0x00, 0x3d, // .............".= + 0x00, 0x4d, 0x00, 0x00, 0x01, 0x17, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x37, 0x05, 0x37, 0x3e, 0x01, // .M.....&'..7.7>. + 0x37, 0x33, 0x17, 0x35, 0x17, 0x11, 0x16, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x07, 0x23, 0x06, 0x26, // 73.5.........#.& + 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x13, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x01, 0x1e, // '..7>.7.>.32.... + 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x34, // .......#"&'...54 + 0x36, 0x37, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x15, 0x11, 0x07, 0x27, 0x37, 0x33, 0x35, // 677>.3!2....'735 + 0x23, 0x27, 0x01, 0xff, 0xb2, 0x28, 0x42, 0x1a, 0x19, 0x17, 0x02, 0xfe, 0x59, 0x04, 0x1b, 0x3a, // #'...(B.....Y..: + 0x20, 0x02, 0x49, 0x83, 0x01, 0x21, 0x23, 0x02, 0x1d, 0x44, 0x26, 0x02, 0x2a, 0x46, 0x1a, 0x1c, // .I..!#..D&.*F.. + 0x17, 0x05, 0x03, 0x20, 0x1c, 0x31, 0x0a, 0x18, 0x0e, 0x0e, 0x16, 0x09, 0x02, 0xef, 0x0a, 0x0a, // ... .1.......... + 0x0a, 0x0a, 0x09, 0x17, 0x0e, 0x0d, 0x18, 0x0a, 0xfd, 0x11, 0x09, 0x09, 0x09, 0x09, 0x9a, 0x07, // ................ + 0x25, 0x1d, 0x01, 0xba, 0x31, 0x31, 0x09, 0xde, 0x18, 0x2c, 0xee, 0xd4, 0x01, 0x38, 0xb2, 0x01, // %...11...,...8.. + 0x1a, 0x1c, 0x17, 0x3f, 0x27, 0x2a, 0x01, 0x1b, 0x20, 0x07, 0x04, 0xce, 0x82, 0xfe, 0xf1, 0x1f, // ...?'*.. ....... + 0x3e, 0x1f, 0x05, 0x1d, 0x20, 0x05, 0x04, 0x18, 0x1c, 0x1b, 0x44, 0x2a, 0x29, 0x47, 0x1e, 0x02, // >... .....D*)G.. + 0x58, 0x0a, 0x0a, 0x0a, 0x0a, 0xfd, 0x12, 0x09, 0x17, 0x0e, 0x0e, 0x17, 0x0a, 0x09, 0x09, 0x09, // X............... + 0x09, 0x02, 0xee, 0x0a, 0x18, 0x0e, 0x0e, 0x16, 0x09, 0x23, 0x19, 0x18, 0x30, 0x2f, 0xfe, 0x08, // .........#..0/.. + 0x36, 0xde, 0x06, 0xa3, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // 6............... + 0x03, 0xba, 0x00, 0x14, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, // .....+...2...... + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x01, 0x23, 0x35, 0x33, 0x01, 0x33, 0x13, 0x37, 0x1f, // .....+..#53.3.7. + 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x02, 0x27, 0x3f, 0x01, 0x3e, 0x01, 0x35, 0x34, 0x26, // ........'?.>.54& + 0x2f, 0x02, 0x02, 0x40, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0x09, 0x0a, 0x09, 0x16, 0x0d, 0x3f, 0xfe, // /..@..........?. + 0x84, 0x7f, 0x7f, 0x01, 0x7c, 0x3f, 0xd7, 0x49, 0x30, 0x01, 0x34, 0x35, 0x35, 0x34, 0x03, 0x2e, // ....|?.I0.4554.. + 0x49, 0x1d, 0x01, 0x23, 0x23, 0x23, 0x23, 0x01, 0x1d, 0x03, 0xba, 0x0a, 0x09, 0x0a, 0x16, 0x0d, // I..####......... + 0xfc, 0x8c, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x01, 0x7c, 0xfc, 0x01, 0x7c, 0xfe, 0xc2, 0x68, 0x29, // ........|..|..h) + 0x01, 0x35, 0x7f, 0x4b, 0x4b, 0x7f, 0x34, 0x03, 0x28, 0x68, 0x18, 0x02, 0x23, 0x53, 0x31, 0x30, // .5.KK.4.(h..#S10 + 0x53, 0x23, 0x03, 0x18, 0x00, 0x04, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x0a, // S#.............. + 0x00, 0x1d, 0x00, 0x2c, 0x00, 0x47, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, // ...,.G...2...... + 0x01, 0x37, 0x33, 0x13, 0x37, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x27, 0x3e, 0x01, // .73.7........'>. + 0x35, 0x34, 0x26, 0x2f, 0x02, 0x25, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x01, // 54&/.%.......+.. + 0x23, 0x35, 0x33, 0x37, 0x37, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, // #5377.........#" + 0x26, 0x27, 0x01, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x02, // &'...5467>.32... + 0x40, 0x0d, 0x16, 0x09, 0x0a, 0x09, 0xfe, 0xfe, 0x84, 0x3f, 0xd7, 0x49, 0x30, 0x01, 0x34, 0x35, // @........?.I0.45 + 0x1d, 0x1c, 0x5e, 0x0c, 0x0c, 0x23, 0x23, 0x01, 0x1d, 0xfd, 0xb2, 0x01, 0xb6, 0x09, 0x0a, 0x09, // ..^..##......... + 0x16, 0x0d, 0x3f, 0xfe, 0x84, 0x7f, 0x7f, 0x44, 0x44, 0x02, 0xd8, 0x09, 0x0a, 0x09, 0x0a, 0x09, // ..?....DD....... + 0x16, 0x0d, 0x0e, 0x17, 0x09, 0xfd, 0x28, 0x09, 0x08, 0x08, 0x09, 0x09, 0x17, 0x0e, 0x0d, 0x16, // ......(......... + 0x09, 0x03, 0xba, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0xbb, 0x01, 0x01, 0x84, 0xfe, 0xc2, 0x68, // ...............h + 0x29, 0x01, 0x35, 0x7f, 0x4b, 0x38, 0x63, 0x2c, 0x5d, 0x19, 0x35, 0x1c, 0x30, 0x53, 0x23, 0x03, // ).5.K8c,].5.0S#. + 0x18, 0x06, 0xfe, 0x4b, 0xc7, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x01, 0x7c, 0xfc, 0x44, 0xcb, 0xfd, // ...K.......|.D.. + 0x29, 0x09, 0x16, 0x0d, 0x0e, 0x17, 0x09, 0x09, 0x09, 0x09, 0x09, 0x02, 0xd6, 0x0a, 0x17, 0x0d, // )............... + 0x0e, 0x16, 0x09, 0x09, 0x0a, 0x0a, 0x09, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x02, 0x80, // ................ + 0x03, 0xba, 0x00, 0x14, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, // .......2........ + 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x01, 0x23, 0x35, 0x33, 0x01, 0x33, 0x02, 0x40, 0x0d, 0x16, 0x0a, // ...+..#53.3.@... + 0x09, 0x0a, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0x3f, 0xfe, 0x84, 0x7f, 0x7f, 0x01, 0x7c, 0x3f, 0x03, // .......?.....|?. + 0xba, 0x09, 0x0a, 0x09, 0x17, 0x0c, 0xfc, 0x8a, 0x0d, 0x17, 0x0a, 0x08, 0x09, 0x01, 0x7b, 0xfe, // ..............{. + 0x01, 0x7b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x9e, 0xff, 0xc6, 0x03, 0x62, 0x03, 0xba, 0x00, 0x04, // .{.........b.... + 0x00, 0x3c, 0x00, 0x00, 0x01, 0x21, 0x11, 0x21, 0x11, 0x05, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, // .<...!.!.......+ + 0x01, 0x07, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, // .............#"& + 0x27, 0x2e, 0x01, 0x27, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x27, 0x23, 0x22, 0x26, 0x27, 0x2e, // '..'467>.7'#"&'. + 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, // .5.467>.3!2..... + 0x11, 0x01, 0x68, 0x01, 0x30, 0xfe, 0xd0, 0x01, 0x95, 0x08, 0x07, 0x08, 0x12, 0x0a, 0x3c, 0x07, // ..h.0.........<. + 0x20, 0x39, 0x1a, 0x34, 0x34, 0x34, 0x34, 0x33, 0x7d, 0x4a, 0x49, 0x7d, 0x34, 0x33, 0x34, 0x01, // 9.44443}JI}434. + 0x34, 0x34, 0x1a, 0x39, 0x20, 0x07, 0x3c, 0x0b, 0x12, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x12, // 44.9 .<......... + 0x0b, 0x01, 0x94, 0x0a, 0x12, 0x08, 0x07, 0x08, 0x02, 0x25, 0x01, 0x2f, 0xfe, 0xd1, 0x32, 0x0b, // .........%./..2. + 0x13, 0x07, 0x07, 0x07, 0x06, 0x0e, 0x26, 0x18, 0x32, 0x79, 0x48, 0x26, 0x40, 0x1a, 0x1a, 0x1b, // ......&.2yH&@... + 0x1b, 0x1a, 0x1a, 0x40, 0x26, 0x48, 0x79, 0x32, 0x19, 0x25, 0x0e, 0x06, 0x07, 0x07, 0x08, 0x12, // ...@&Hy2.%...... + 0x0b, 0x01, 0x93, 0x0b, 0x12, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x0a, 0xfe, 0x6c, 0x00, // ..............l. + 0x00, 0x04, 0x00, 0x85, 0xff, 0xc6, 0x03, 0x7b, 0x03, 0xba, 0x00, 0x04, 0x00, 0x09, 0x00, 0x26, // .......{.......& + 0x00, 0x41, 0x00, 0x00, 0x13, 0x11, 0x21, 0x11, 0x21, 0x01, 0x15, 0x33, 0x35, 0x23, 0x25, 0x21, // .A....!.!..35#%! + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // 2...........#!"& + 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x11, 0x21, 0x32, 0x16, 0x17, // '..=.467>.3.!2.. + 0x1e, 0x01, 0x15, 0x11, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x2f, 0x02, 0x11, 0x34, // ........#!"&/..4 + 0x36, 0x37, 0x3e, 0x01, 0x33, 0xea, 0x02, 0x2c, 0xfd, 0xd4, 0x01, 0xae, 0x65, 0x65, 0xfe, 0x1f, // 67>.3..,....ee.. + 0x02, 0x92, 0x0a, 0x11, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x11, 0x0a, 0xfd, 0x6e, 0x0a, 0x13, // .............n.. + 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x13, 0x0a, 0x02, 0x92, 0x0a, 0x11, 0x08, 0x08, 0x07, 0x05, // ................ + 0x0a, 0x08, 0x11, 0x0a, 0xfd, 0x6e, 0x0a, 0x13, 0x07, 0x09, 0x05, 0x07, 0x07, 0x07, 0x13, 0x0a, // .....n.......... + 0x03, 0x54, 0xfe, 0x6c, 0x01, 0x94, 0xfd, 0x3d, 0x65, 0x65, 0x65, 0x08, 0x07, 0x08, 0x12, 0x0a, // .T.l...=eee..... + 0xca, 0x0b, 0x12, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x12, 0x0b, 0xc9, 0x0b, 0x12, 0x08, 0x07, // ................ + 0x08, 0x02, 0xc4, 0x08, 0x08, 0x07, 0x12, 0x0a, 0xfd, 0xd4, 0x18, 0x0d, 0x07, 0x07, 0x07, 0x07, // ................ + 0x0d, 0x18, 0x02, 0x2b, 0x0b, 0x12, 0x07, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6e, // ...+...........n + 0xff, 0xc6, 0x03, 0x92, 0x03, 0xba, 0x00, 0x04, 0x00, 0x24, 0x00, 0x00, 0x01, 0x21, 0x11, 0x21, // .........$...!.! + 0x11, 0x37, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x15, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // .7..........#!"& + 0x2f, 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x35, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, // /...5.4675>.3!2. + 0x17, 0x02, 0xdf, 0xfe, 0x42, 0x01, 0xbe, 0x98, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x1f, 0x12, 0xfd, // ....B........... + 0x90, 0x13, 0x1f, 0x0d, 0x01, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x20, 0x13, 0x02, 0x70, 0x12, 0x1f, // .......... ..p.. + 0x0e, 0x03, 0x07, 0xfd, 0xad, 0x02, 0x53, 0x98, 0x0e, 0x1f, 0x12, 0xfc, 0xc0, 0x13, 0x20, 0x0d, // ......S....... . + 0x02, 0x0c, 0x0c, 0x0c, 0x0c, 0x02, 0x0d, 0x20, 0x13, 0x03, 0x3f, 0x12, 0x20, 0x0c, 0x02, 0x0d, // ....... ..?. ... + 0x0e, 0x0e, 0x0d, 0x00, 0x00, 0x02, 0x00, 0xaa, 0xff, 0xc6, 0x03, 0x56, 0x03, 0xba, 0x00, 0x04, // ...........V.... + 0x00, 0x24, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x21, 0x27, 0x35, 0x3e, 0x01, 0x33, 0x21, 0x32, // .$....!.!'5>.3!2 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x15, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // ............#!"& + 0x2f, 0x01, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x01, 0x5c, 0x01, 0x48, 0xfe, 0xb8, 0x99, // /...5.467...H... + 0x0e, 0x20, 0x12, 0x01, 0xfa, 0x12, 0x1f, 0x0d, 0x0e, 0x0d, 0x0d, 0x0e, 0x0d, 0x1f, 0x12, 0xfe, // . .............. + 0x06, 0x12, 0x20, 0x0c, 0x02, 0x0c, 0x0d, 0x0d, 0x0c, 0x03, 0x07, 0xfd, 0xad, 0x02, 0x53, 0x96, // .. ...........S. + 0x02, 0x0d, 0x0e, 0x0e, 0x0d, 0x0e, 0x1f, 0x12, 0xfc, 0xc0, 0x13, 0x20, 0x0d, 0x02, 0x0c, 0x0c, // ........... .... + 0x0c, 0x0c, 0x02, 0x0d, 0x20, 0x13, 0x03, 0x3f, 0x12, 0x20, 0x0c, 0x00, 0x00, 0x02, 0x00, 0x06, // .... ..?. ...... + 0x00, 0xc3, 0x03, 0xfa, 0x02, 0xbd, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x13, 0x21, 0x11, 0x21, // .........!...!.! + 0x11, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, // ...........#!"&' + 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x6c, 0x03, // ..5.467>.3!2..l. + 0x28, 0xfc, 0xd8, 0x03, 0x7e, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x0a, 0xfc, 0x72, 0x0b, 0x12, // (...~........r.. + 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x12, 0x0b, 0x03, 0x8e, 0x0a, 0x12, 0x07, 0x01, 0x28, 0x01, // ..............(. + 0x30, 0xfe, 0xd0, 0x01, 0x86, 0x08, 0x12, 0x0a, 0xfe, 0x6c, 0x0b, 0x12, 0x08, 0x07, 0x07, 0x07, // 0........l...... + 0x07, 0x08, 0x12, 0x0b, 0x01, 0x93, 0x0b, 0x12, 0x08, 0x07, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, // ................ + 0x00, 0x03, 0x00, 0x0d, 0xff, 0xc6, 0x03, 0xf3, 0x03, 0xba, 0x00, 0x04, 0x00, 0x1f, 0x00, 0x53, // ...............S + 0x00, 0x00, 0x25, 0x03, 0x05, 0x13, 0x25, 0x03, 0x36, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x13, 0x16, // ..%...%.6....... + 0x06, 0x07, 0x0e, 0x01, 0x07, 0x05, 0x27, 0x2e, 0x01, 0x27, 0x03, 0x26, 0x36, 0x37, 0x3e, 0x01, // ......'..'.&67>. + 0x37, 0x25, 0x27, 0x16, 0x06, 0x0f, 0x02, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x23, 0x07, 0x17, // 7%'.....&'..'#.. + 0x1e, 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x2b, 0x01, 0x27, 0x23, 0x2e, 0x01, 0x27, 0x17, 0x2e, 0x01, // ......+.'#..'... + 0x37, 0x35, 0x37, 0x3e, 0x01, 0x37, 0x33, 0x32, 0x16, 0x1f, 0x02, 0x3e, 0x01, 0x17, 0x1e, 0x01, // 757>.732...>.... + 0x17, 0x1e, 0x01, 0x17, 0x03, 0x8c, 0x48, 0xfd, 0x30, 0x48, 0x02, 0xd0, 0x33, 0x09, 0x12, 0x08, // ......H.0H..3... + 0x09, 0x0b, 0x02, 0x61, 0x02, 0x03, 0x05, 0x05, 0x0e, 0x09, 0xfc, 0xd6, 0x24, 0x08, 0x0b, 0x02, // ...a........$... + 0x61, 0x02, 0x02, 0x05, 0x05, 0x0f, 0x09, 0x03, 0x2a, 0x2a, 0x01, 0x04, 0x05, 0x48, 0x15, 0x07, // a.......**...H.. + 0x0e, 0x07, 0x16, 0x31, 0x1a, 0x01, 0x77, 0x1a, 0x07, 0x01, 0x06, 0x01, 0x07, 0x0f, 0x09, 0x02, // ...1..w......... + 0xf7, 0x02, 0x09, 0x0c, 0x04, 0x03, 0x06, 0x02, 0x03, 0x59, 0x01, 0x0f, 0x0e, 0x02, 0x0a, 0x0f, // .........Y...... + 0x05, 0x02, 0x16, 0x3e, 0x84, 0x46, 0x2f, 0x55, 0x26, 0x09, 0x09, 0x01, 0xee, 0x01, 0x0f, 0xc3, // ...>.F/U&....... + 0xfe, 0xf3, 0xc1, 0x01, 0x75, 0x02, 0x02, 0x06, 0x04, 0x0e, 0x0a, 0xfe, 0x98, 0x09, 0x12, 0x09, // ....u........... + 0x08, 0x0a, 0x03, 0xda, 0x05, 0x05, 0x0f, 0x09, 0x01, 0x67, 0x0a, 0x12, 0x08, 0x09, 0x0b, 0x02, // .........g...... + 0xda, 0xcf, 0x05, 0x0e, 0x07, 0x78, 0x11, 0x01, 0x03, 0x05, 0x0f, 0x15, 0x05, 0x07, 0x24, 0x09, // .....x........$. + 0x14, 0x0b, 0x02, 0x07, 0x07, 0x20, 0x01, 0x0a, 0x07, 0x02, 0x06, 0x0e, 0x08, 0x02, 0xf7, 0x0b, // ..... .......... + 0x0c, 0x02, 0x09, 0x09, 0x03, 0x32, 0x1c, 0x0e, 0x0d, 0x08, 0x24, 0x1b, 0x04, 0x0c, 0x07, 0x00, // .....2....$..... + 0x00, 0x03, 0x00, 0x0c, 0xff, 0xc6, 0x03, 0xf4, 0x03, 0xba, 0x00, 0x32, 0x00, 0x4d, 0x00, 0x52, // ...........2.M.R + 0x00, 0x00, 0x01, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x15, 0x16, 0x06, 0x07, // ...7>.;......... + 0x37, 0x07, 0x23, 0x07, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x26, 0x36, 0x3f, 0x01, 0x27, 0x0e, 0x01, // 7.#.#"&/.&6?.'.. + 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, // ...'../...7>.7>. + 0x37, 0x36, 0x16, 0x17, 0x37, 0x01, 0x3e, 0x01, 0x17, 0x05, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x07, // 76..7.>......... + 0x03, 0x0e, 0x01, 0x0f, 0x01, 0x25, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x13, 0x3e, 0x01, 0x37, // .....%..'..7.>.7 + 0x17, 0x03, 0x05, 0x13, 0x25, 0x02, 0xab, 0x01, 0x05, 0x0f, 0x0a, 0x02, 0x0f, 0x0f, 0x01, 0x59, // ....%..........Y + 0x02, 0x02, 0x05, 0x02, 0x18, 0x03, 0xf7, 0x03, 0x08, 0x10, 0x06, 0x01, 0x06, 0x01, 0x07, 0x1a, // ................ + 0x78, 0x1b, 0x30, 0x16, 0x07, 0x0e, 0x07, 0x07, 0x0b, 0x03, 0x49, 0x05, 0x04, 0x01, 0x01, 0x09, // x.0.......I..... + 0x09, 0x26, 0x56, 0x2e, 0x46, 0x85, 0x3e, 0x17, 0xfd, 0xd7, 0x0a, 0x12, 0x0a, 0x03, 0x2b, 0x09, // .&V.F.>.......+. + 0x0e, 0x05, 0x05, 0x02, 0x02, 0x61, 0x03, 0x0b, 0x08, 0x23, 0xfc, 0xd3, 0x09, 0x0f, 0x05, 0x04, // .....a...#...... + 0x02, 0x02, 0x61, 0x03, 0x0a, 0x08, 0x39, 0x48, 0x02, 0xd3, 0x47, 0xfd, 0x2e, 0x03, 0xa5, 0x03, // ..a...9H..G..... + 0x09, 0x09, 0x02, 0x0c, 0x0b, 0xf7, 0x03, 0x07, 0x0e, 0x07, 0x03, 0x13, 0x20, 0x07, 0x07, 0x03, // ............ ... + 0x0a, 0x14, 0x09, 0x25, 0x07, 0x06, 0x14, 0x0f, 0x05, 0x04, 0x02, 0x02, 0x08, 0x06, 0x78, 0x08, // ...%..........x. + 0x0d, 0x06, 0x07, 0x0b, 0x04, 0x1c, 0x23, 0x09, 0x0d, 0x0f, 0x1c, 0x33, 0xfe, 0xb7, 0x06, 0x03, // ......#....3.... + 0x03, 0xd9, 0x03, 0x0b, 0x08, 0x08, 0x12, 0x09, 0xfe, 0x96, 0x09, 0x0e, 0x05, 0x04, 0xd8, 0x03, // ................ + 0x0b, 0x09, 0x08, 0x12, 0x0a, 0x01, 0x67, 0x0a, 0x0e, 0x04, 0x60, 0xfe, 0xf1, 0xc1, 0x01, 0x0f, // ......g...`..... + 0xc1, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0x00, 0xc3, 0x03, 0xfa, 0x02, 0xbd, 0x00, 0x1c, // ................ + 0x00, 0x29, 0x00, 0x42, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, // .).B.[...2...... + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // .....#!"&'..5.46 + 0x37, 0x3e, 0x01, 0x33, 0x21, 0x05, 0x23, 0x15, 0x23, 0x15, 0x33, 0x15, 0x33, 0x35, 0x33, 0x35, // 7>.3!.#.#.3.3535 + 0x23, 0x35, 0x05, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, // #5.>.54&'..#"... + 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x23, 0x3e, 0x01, 0x35, 0x34, // .......3267#>.54 + 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, // &'..#".......... + 0x33, 0x32, 0x36, 0x37, 0x03, 0xc7, 0x0a, 0x12, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x0a, // 3267............ + 0xfc, 0x72, 0x0b, 0x12, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x12, 0x0b, 0x03, 0x8e, 0xfd, 0x55, // .r.............U + 0x65, 0x65, 0x65, 0x65, 0x64, 0x64, 0x02, 0x83, 0x07, 0x08, 0x08, 0x07, 0x08, 0x12, 0x0a, 0x0b, // eeeedd.......... + 0x12, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x12, 0x0b, 0x0a, 0x12, 0x08, 0xb1, 0x07, 0x08, 0x08, // ................ + 0x07, 0x08, 0x12, 0x0a, 0x0b, 0x12, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x12, 0x0b, 0x0a, 0x12, // ................ + 0x08, 0x02, 0xbd, 0x08, 0x07, 0x08, 0x12, 0x0a, 0xfe, 0x6c, 0x0b, 0x12, 0x08, 0x07, 0x07, 0x07, // .........l...... + 0x07, 0x08, 0x12, 0x0b, 0x01, 0x93, 0x0b, 0x12, 0x08, 0x07, 0x08, 0x65, 0x64, 0x65, 0x65, 0x65, // ...........edeee + 0x65, 0x64, 0xbb, 0x07, 0x11, 0x0b, 0x0a, 0x12, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x0a, // ed.............. + 0x0b, 0x11, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x11, 0x0b, 0x0a, 0x12, 0x07, 0x08, 0x08, 0x08, // ................ + 0x08, 0x07, 0x12, 0x0a, 0x0b, 0x11, 0x07, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x04, 0x00, 0x06, // ................ + 0x00, 0x6b, 0x03, 0xfa, 0x03, 0x15, 0x00, 0x2b, 0x00, 0x38, 0x00, 0x51, 0x00, 0x6a, 0x00, 0x00, // .k.....+.8.Q.j.. + 0x01, 0x37, 0x35, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x21, 0x32, 0x16, 0x17, 0x1e, // .7532......!2... + 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, // ........#!"&'..5 + 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x35, 0x34, 0x36, 0x37, 0x03, 0x23, 0x15, 0x23, // .467>.3!5467.#.# + 0x15, 0x33, 0x15, 0x33, 0x35, 0x33, 0x35, 0x23, 0x35, 0x05, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, // .3.3535#5."..... + 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, // .....3267>.54&'. + 0x01, 0x23, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, // .#.........3267> + 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x01, 0xdb, 0x0c, 0x19, 0x0a, // .54&'..#"....... + 0x12, 0x07, 0x08, 0x08, 0x01, 0x94, 0x0a, 0x12, 0x07, 0x08, 0x08, 0x08, 0x08, 0x07, 0x12, 0x0a, // ................ + 0xfc, 0x72, 0x0b, 0x12, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x12, 0x0b, 0x01, 0x94, 0x07, 0x07, // .r.............. + 0xbf, 0x65, 0x65, 0x65, 0x65, 0x64, 0x64, 0x02, 0x5f, 0x0b, 0x12, 0x07, 0x07, 0x07, 0x07, 0x07, // .eeeedd._....... + 0x07, 0x12, 0x0b, 0x0a, 0x12, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x12, 0x0a, 0xd5, 0x07, 0x07, // ................ + 0x07, 0x07, 0x07, 0x12, 0x0b, 0x0a, 0x12, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x12, 0x0a, 0x0b, // ................ + 0x12, 0x07, 0x03, 0x06, 0x09, 0x06, 0x07, 0x08, 0x07, 0x12, 0x0a, 0x7f, 0x07, 0x08, 0x07, 0x12, // ................ + 0x0a, 0xfe, 0x6b, 0x0a, 0x13, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x13, 0x0a, 0x01, 0x94, 0x0a, // ..k............. + 0x13, 0x07, 0x08, 0x07, 0x7d, 0x0b, 0x13, 0x07, 0xfe, 0xf9, 0x64, 0x65, 0x65, 0x65, 0x65, 0x64, // ....}.....deeeed + 0x65, 0x08, 0x07, 0x08, 0x11, 0x0a, 0x0b, 0x12, 0x07, 0x07, 0x08, 0x08, 0x07, 0x07, 0x12, 0x0b, // e............... + 0x0a, 0x11, 0x08, 0x07, 0x08, 0x0f, 0x08, 0x11, 0x0a, 0x0b, 0x12, 0x07, 0x07, 0x08, 0x08, 0x07, // ................ + 0x07, 0x12, 0x0b, 0x0a, 0x11, 0x08, 0x08, 0x07, 0x07, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, // ................ + 0xff, 0xc6, 0x03, 0xf4, 0x03, 0xba, 0x00, 0x14, 0x00, 0x29, 0x00, 0x36, 0x00, 0x69, 0x00, 0x84, // .........).6.i.. + 0x00, 0x00, 0x25, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x07, 0x0e, 0x01, 0x07, // ..%>.76&'..'.... + 0x06, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x37, 0x37, 0x2e, 0x01, 0x27, 0x07, 0x0e, 0x01, 0x07, 0x06, // ......77..'..... + 0x16, 0x17, 0x1e, 0x01, 0x17, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x25, 0x27, 0x07, 0x17, // .....7>.76&'%'.. + 0x07, 0x17, 0x37, 0x17, 0x37, 0x27, 0x37, 0x27, 0x07, 0x01, 0x33, 0x1e, 0x01, 0x1f, 0x01, 0x15, // ..7.7'7'..3..... + 0x16, 0x06, 0x07, 0x37, 0x07, 0x23, 0x07, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x26, 0x36, 0x3f, 0x01, // ...7.#.#"&/.&6?. + 0x27, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x37, 0x3e, 0x01, // '.....'../...7>. + 0x37, 0x3e, 0x01, 0x37, 0x36, 0x16, 0x17, 0x3f, 0x01, 0x3e, 0x01, 0x33, 0x01, 0x1e, 0x01, 0x07, // 7>.76..?.>.3.... + 0x03, 0x0e, 0x01, 0x0f, 0x01, 0x25, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x13, 0x3e, 0x01, 0x37, // .....%..'..7.>.7 + 0x3e, 0x01, 0x17, 0x05, 0x1e, 0x01, 0x17, 0x02, 0xcc, 0x09, 0x0a, 0x02, 0x03, 0x03, 0x04, 0x05, // >............... + 0x0e, 0x09, 0x24, 0x09, 0x0a, 0x01, 0x03, 0x01, 0x05, 0x05, 0x0e, 0x09, 0x24, 0xae, 0x04, 0x0e, // ..$.........$... + 0x0a, 0x24, 0x08, 0x0a, 0x02, 0x03, 0x02, 0x05, 0x04, 0x0e, 0x0a, 0x24, 0x09, 0x0a, 0x02, 0x03, // .$.........$.... + 0x02, 0x06, 0xfd, 0x6e, 0x5a, 0x1a, 0x5a, 0x16, 0x59, 0x18, 0x59, 0x18, 0x58, 0x18, 0x5b, 0x17, // ...nZ.Z.Y.Y.X.[. + 0x01, 0xe2, 0x02, 0x0e, 0x10, 0x01, 0x58, 0x03, 0x02, 0x05, 0x02, 0x18, 0x03, 0xf7, 0x03, 0x08, // ......X......... + 0x10, 0x06, 0x01, 0x06, 0x01, 0x07, 0x1a, 0x78, 0x1b, 0x30, 0x16, 0x07, 0x0e, 0x07, 0x07, 0x0b, // .......x.0...... + 0x03, 0x49, 0x05, 0x04, 0x01, 0x01, 0x09, 0x09, 0x26, 0x56, 0x2e, 0x46, 0x85, 0x3e, 0x17, 0x01, // .I......&V.F.>.. + 0x05, 0x0f, 0x0a, 0x01, 0x25, 0x05, 0x02, 0x02, 0x61, 0x03, 0x0b, 0x08, 0x23, 0xfc, 0xd3, 0x09, // ....%...a...#... + 0x0f, 0x05, 0x04, 0x02, 0x02, 0x61, 0x03, 0x0a, 0x08, 0x0a, 0x12, 0x0a, 0x03, 0x2b, 0x09, 0x0e, // .....a.......+.. + 0x05, 0xbc, 0x04, 0x0e, 0x0a, 0x08, 0x12, 0x09, 0x08, 0x0b, 0x03, 0x04, 0x05, 0x0f, 0x09, 0x0a, // ................ + 0x11, 0x08, 0x09, 0x0b, 0x02, 0x05, 0x16, 0x07, 0x0b, 0x03, 0x05, 0x05, 0x0e, 0x09, 0x0a, 0x11, // ................ + 0x08, 0x09, 0x0b, 0x03, 0x06, 0x04, 0x0e, 0x0a, 0x08, 0x12, 0x0a, 0xbe, 0x1a, 0x5a, 0x1a, 0x5a, // .............Z.Z + 0x17, 0x5a, 0x19, 0x5a, 0x18, 0x5b, 0x17, 0x5a, 0x02, 0x2a, 0x02, 0x0c, 0x0b, 0xf7, 0x03, 0x07, // .Z.Z.[.Z.*...... + 0x0e, 0x07, 0x03, 0x13, 0x20, 0x07, 0x07, 0x03, 0x0a, 0x14, 0x09, 0x25, 0x07, 0x06, 0x14, 0x0f, // .... ......%.... + 0x05, 0x04, 0x02, 0x02, 0x08, 0x06, 0x78, 0x08, 0x0d, 0x06, 0x07, 0x0b, 0x04, 0x1c, 0x23, 0x09, // ......x.......#. + 0x0d, 0x0f, 0x1c, 0x33, 0x03, 0x09, 0x09, 0xfd, 0xb9, 0x08, 0x12, 0x09, 0xfe, 0x96, 0x09, 0x0e, // ...3............ + 0x05, 0x04, 0xd8, 0x03, 0x0b, 0x09, 0x08, 0x12, 0x0a, 0x01, 0x67, 0x0a, 0x0e, 0x04, 0x06, 0x03, // ..........g..... + 0x03, 0xd9, 0x03, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0d, 0xff, 0xc6, 0x03, 0xf3, // ................ + 0x03, 0xba, 0x00, 0x14, 0x00, 0x29, 0x00, 0x36, 0x00, 0x51, 0x00, 0x85, 0x00, 0x00, 0x01, 0x2e, // .....).6.Q...... + 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x3e, 0x01, 0x37, // ./...........>.7 + 0x3e, 0x01, 0x27, 0x07, 0x3e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, // >.'.>.'../...... + 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x3e, 0x01, 0x37, 0x05, 0x07, 0x27, 0x07, 0x17, 0x07, 0x17, 0x37, // .....>.7..'....7 + 0x17, 0x37, 0x27, 0x37, 0x27, 0x01, 0x1e, 0x01, 0x17, 0x13, 0x16, 0x06, 0x07, 0x0e, 0x01, 0x07, // .7'7'........... + 0x05, 0x27, 0x2e, 0x01, 0x27, 0x03, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x25, 0x36, 0x16, 0x17, // .'..'.&67>.7%6.. + 0x27, 0x16, 0x06, 0x0f, 0x02, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x23, 0x07, 0x17, 0x1e, 0x01, // '.....&'..'#.... + 0x0f, 0x01, 0x0e, 0x01, 0x2b, 0x01, 0x27, 0x23, 0x2e, 0x01, 0x27, 0x17, 0x2e, 0x01, 0x37, 0x35, // ....+.'#..'...75 + 0x37, 0x3e, 0x01, 0x37, 0x33, 0x32, 0x16, 0x1f, 0x02, 0x3e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x1e, // 7>.732...>...... + 0x01, 0x17, 0x03, 0x7e, 0x02, 0x0b, 0x09, 0x23, 0x09, 0x0f, 0x05, 0x04, 0x02, 0x02, 0x03, 0x0b, // ...~...#........ + 0x07, 0x25, 0x09, 0x0e, 0x05, 0x05, 0x02, 0x03, 0xa2, 0x05, 0x03, 0x03, 0x02, 0x0b, 0x09, 0x23, // .%.............# + 0x09, 0x0f, 0x05, 0x04, 0x02, 0x02, 0x03, 0x0b, 0x07, 0x24, 0x0a, 0x0e, 0x04, 0xfe, 0xa6, 0x58, // .........$.....X + 0x19, 0x5a, 0x19, 0x5b, 0x17, 0x5b, 0x19, 0x59, 0x18, 0x59, 0x18, 0x01, 0xfa, 0x09, 0x0b, 0x02, // .Z.[.[.Y.Y...... + 0x61, 0x02, 0x03, 0x05, 0x05, 0x0e, 0x09, 0xfc, 0xd6, 0x24, 0x08, 0x0b, 0x02, 0x61, 0x02, 0x02, // a........$...a.. + 0x05, 0x05, 0x0f, 0x09, 0x03, 0x2a, 0x09, 0x12, 0x08, 0x4d, 0x01, 0x04, 0x05, 0x48, 0x15, 0x07, // .....*...M...H.. + 0x0e, 0x07, 0x16, 0x31, 0x1a, 0x01, 0x77, 0x1a, 0x07, 0x01, 0x06, 0x01, 0x07, 0x0f, 0x09, 0x02, // ...1..w......... + 0xf7, 0x02, 0x09, 0x0c, 0x04, 0x03, 0x06, 0x02, 0x03, 0x59, 0x01, 0x0f, 0x0e, 0x02, 0x0a, 0x0f, // .........Y...... + 0x05, 0x02, 0x16, 0x3e, 0x84, 0x46, 0x2f, 0x55, 0x26, 0x09, 0x09, 0x01, 0x01, 0x7c, 0x09, 0x0e, // ...>.F/U&....|.. + 0x05, 0x04, 0x02, 0x0b, 0x08, 0x09, 0x11, 0x09, 0x0a, 0x0e, 0x04, 0x06, 0x03, 0x0b, 0x09, 0x08, // ................ + 0x12, 0x09, 0x4e, 0x08, 0x11, 0x0a, 0x09, 0x0e, 0x05, 0x05, 0x02, 0x0b, 0x08, 0x09, 0x11, 0x09, // ..N............. + 0x0a, 0x0e, 0x04, 0x06, 0x03, 0x0b, 0x08, 0x0a, 0x17, 0x59, 0x18, 0x5a, 0x17, 0x5a, 0x17, 0x59, // .........Y.Z.Z.Y + 0x18, 0x5a, 0x17, 0x5a, 0x01, 0x39, 0x04, 0x0e, 0x0a, 0xfe, 0x98, 0x09, 0x12, 0x09, 0x08, 0x0a, // .Z.Z.9.......... + 0x03, 0xda, 0x05, 0x05, 0x0f, 0x09, 0x01, 0x67, 0x0a, 0x12, 0x08, 0x09, 0x0b, 0x02, 0xda, 0x02, // .......g........ + 0x02, 0x06, 0xd5, 0x05, 0x0e, 0x07, 0x78, 0x11, 0x01, 0x03, 0x05, 0x0f, 0x15, 0x05, 0x07, 0x24, // ......x........$ + 0x09, 0x14, 0x0b, 0x02, 0x07, 0x07, 0x20, 0x01, 0x0a, 0x07, 0x02, 0x06, 0x0e, 0x08, 0x02, 0xf7, // ...... ......... + 0x0b, 0x0c, 0x02, 0x09, 0x09, 0x03, 0x32, 0x1c, 0x0e, 0x0d, 0x08, 0x24, 0x1b, 0x04, 0x0c, 0x07, // ......2....$.... + 0x00, 0x05, 0x00, 0x08, 0xff, 0xed, 0x03, 0xfa, 0x03, 0x93, 0x00, 0x0c, 0x00, 0x2e, 0x00, 0x47, // ...............G + 0x00, 0x5a, 0x00, 0x6d, 0x00, 0x00, 0x01, 0x07, 0x27, 0x07, 0x17, 0x07, 0x17, 0x37, 0x17, 0x37, // .Z.m....'....7.7 + 0x27, 0x37, 0x27, 0x01, 0x1e, 0x01, 0x17, 0x13, 0x0f, 0x01, 0x05, 0x27, 0x2e, 0x01, 0x27, 0x03, // '7'........'..'. + 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x25, 0x27, 0x26, 0x36, 0x3f, 0x01, 0x27, 0x37, 0x17, 0x1e, // &67>.7%'&6?.'7.. + 0x01, 0x1f, 0x01, 0x25, 0x17, 0x13, 0x11, 0x0f, 0x01, 0x23, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x23, // ...%.....#'..5.# + 0x2f, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x01, 0x1e, // /.5467>.;.2..... + 0x01, 0x1f, 0x01, 0x3f, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, // ...?...'........ + 0x17, 0x07, 0x3e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, // ..>.'../........ + 0x01, 0x1f, 0x01, 0x37, 0x01, 0x50, 0x4e, 0x14, 0x50, 0x14, 0x4f, 0x15, 0x50, 0x15, 0x50, 0x16, // ...7.PN.P.O.P.P. + 0x4f, 0x16, 0x01, 0xc0, 0x07, 0x0a, 0x02, 0x56, 0x04, 0x19, 0xfd, 0x33, 0x1e, 0x08, 0x09, 0x02, // O......V...3.... + 0x56, 0x02, 0x02, 0x03, 0x05, 0x0d, 0x08, 0x01, 0x3e, 0x1a, 0x03, 0x02, 0x05, 0x06, 0x01, 0x14, // V.......>....... + 0x1f, 0x07, 0x0a, 0x02, 0x1b, 0x01, 0x3e, 0x1f, 0xea, 0x08, 0x12, 0x32, 0x12, 0x04, 0x04, 0x32, // ......>....2...2 + 0x12, 0x07, 0x03, 0x04, 0x04, 0x09, 0x05, 0x7e, 0x05, 0x09, 0x04, 0x08, 0xfe, 0xc9, 0x02, 0x09, // .......~........ + 0x08, 0x1f, 0x19, 0x04, 0x02, 0x09, 0x08, 0x08, 0x10, 0x07, 0x09, 0x0d, 0x04, 0x03, 0x02, 0x02, // ................ + 0x41, 0x05, 0x02, 0x02, 0x02, 0x0a, 0x08, 0x20, 0x08, 0x0c, 0x04, 0x03, 0x02, 0x02, 0x01, 0x0a, // A...... ........ + 0x08, 0x1e, 0x19, 0x02, 0x51, 0x16, 0x4f, 0x15, 0x4e, 0x15, 0x4f, 0x16, 0x50, 0x14, 0x50, 0x15, // ....Q.O.N.O.P.P. + 0x4f, 0x01, 0x12, 0x04, 0x0c, 0x08, 0xfe, 0xc4, 0x20, 0x13, 0xbd, 0x04, 0x03, 0x0c, 0x09, 0x01, // O....... ....... + 0x3a, 0x09, 0x11, 0x07, 0x07, 0x0a, 0x02, 0x55, 0x62, 0x09, 0x0f, 0x07, 0x0a, 0x05, 0x05, 0x05, // :......Ub....... + 0x04, 0x0d, 0x08, 0x63, 0x55, 0x04, 0xfe, 0x05, 0xfe, 0x9e, 0x11, 0x08, 0x08, 0x03, 0x09, 0x05, // ...cU........... + 0x01, 0x16, 0x08, 0x12, 0x32, 0x05, 0x09, 0x04, 0x04, 0x03, 0x03, 0x04, 0x12, 0x01, 0x1f, 0x08, // ....2........... + 0x0c, 0x04, 0x04, 0x12, 0x20, 0x08, 0x0c, 0x04, 0x05, 0x03, 0x02, 0x03, 0x0a, 0x07, 0x08, 0x10, // .... ........... + 0x08, 0x2f, 0x08, 0x10, 0x08, 0x08, 0x0c, 0x04, 0x05, 0x02, 0x0a, 0x08, 0x07, 0x0f, 0x09, 0x08, // ./.............. + 0x0c, 0x05, 0x04, 0x13, 0x00, 0x05, 0x00, 0x08, 0xff, 0xe1, 0x03, 0xfa, 0x03, 0x9f, 0x00, 0x34, // ...............4 + 0x00, 0x47, 0x00, 0x5e, 0x00, 0x80, 0x00, 0x8d, 0x00, 0x00, 0x01, 0x3e, 0x01, 0x3b, 0x01, 0x32, // .G.^.......>.;.2 + 0x16, 0x1f, 0x01, 0x15, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x15, // .......+..32.... + 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, // ...+."&'..=.467> + 0x01, 0x3b, 0x01, 0x35, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x27, // .;.5#"&'..=.467' + 0x37, 0x3e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, // 7>.'../......... + 0x1f, 0x01, 0x37, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x01, // ..7............. + 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x25, 0x37, 0x17, 0x1e, 0x01, 0x1f, 0x01, // >.7>.'..'%7..... + 0x25, 0x17, 0x1e, 0x01, 0x17, 0x13, 0x0f, 0x01, 0x05, 0x27, 0x2e, 0x01, 0x27, 0x03, 0x26, 0x36, // %........'..'.&6 + 0x37, 0x3e, 0x01, 0x37, 0x25, 0x27, 0x26, 0x36, 0x3f, 0x01, 0x27, 0x03, 0x27, 0x07, 0x17, 0x07, // 7>.7%'&6?.'.'... + 0x17, 0x37, 0x17, 0x37, 0x27, 0x37, 0x27, 0x07, 0x02, 0xfe, 0x04, 0x09, 0x05, 0xd0, 0x05, 0x09, // .7.7'7'......... + 0x04, 0x08, 0x08, 0x04, 0x09, 0x05, 0x82, 0x82, 0x05, 0x09, 0x04, 0x08, 0x08, 0x04, 0x09, 0x05, // ................ + 0xd0, 0x05, 0x09, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0x82, 0x82, 0x05, 0x09, 0x04, // ................ + 0x04, 0x04, 0x04, 0x04, 0x85, 0x1a, 0x04, 0x03, 0x02, 0x02, 0x0b, 0x08, 0x21, 0x08, 0x0c, 0x04, // ............!... + 0x04, 0x02, 0x02, 0x02, 0x0a, 0x07, 0x20, 0x9a, 0x09, 0x10, 0x08, 0x09, 0x0d, 0x04, 0x03, 0x02, // ...... ......... + 0x02, 0x02, 0x09, 0x08, 0x21, 0x07, 0x0d, 0x05, 0x04, 0x02, 0x02, 0x02, 0x09, 0x08, 0xfe, 0x47, // ....!..........G + 0x15, 0x20, 0x07, 0x0a, 0x03, 0x1b, 0x01, 0x47, 0x1f, 0x07, 0x0a, 0x02, 0x58, 0x04, 0x1a, 0xfd, // . .....G....X... + 0x21, 0x1f, 0x07, 0x0a, 0x02, 0x58, 0x02, 0x02, 0x04, 0x04, 0x0d, 0x09, 0x01, 0x46, 0x1b, 0x03, // !....X.......F.. + 0x02, 0x05, 0x06, 0x01, 0x52, 0x14, 0x52, 0x15, 0x52, 0x16, 0x52, 0x16, 0x51, 0x16, 0x51, 0x16, // ....R.R.R.R.Q.Q. + 0x51, 0x01, 0x78, 0x04, 0x04, 0x04, 0x04, 0x12, 0xcf, 0x13, 0x03, 0x04, 0x34, 0x04, 0x04, 0x12, // Q.x.........4... + 0x34, 0x12, 0x04, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xcf, 0x06, 0x09, 0x03, 0x04, 0x04, 0x34, // 4..............4 + 0x04, 0x04, 0x04, 0x09, 0x05, 0x34, 0x05, 0x09, 0x04, 0xd1, 0x13, 0x08, 0x10, 0x09, 0x08, 0x0c, // .....4.......... + 0x04, 0x05, 0x02, 0x0a, 0x08, 0x07, 0x10, 0x08, 0x09, 0x0d, 0x04, 0x04, 0x72, 0x05, 0x03, 0x02, // ............r... + 0x02, 0x0b, 0x07, 0x08, 0x10, 0x09, 0x08, 0x0d, 0x03, 0x04, 0x02, 0x09, 0x07, 0x08, 0x10, 0x08, // ................ + 0x09, 0x0c, 0x04, 0xdf, 0x05, 0x05, 0x05, 0x0d, 0x08, 0x65, 0x57, 0x04, 0x04, 0x0d, 0x08, 0xfe, // .........eW..... + 0xbc, 0x20, 0x14, 0xc2, 0x04, 0x03, 0x0d, 0x08, 0x01, 0x43, 0x09, 0x11, 0x08, 0x07, 0x0a, 0x02, // . .......C...... + 0x57, 0x65, 0x08, 0x10, 0x07, 0x0b, 0x05, 0xfe, 0xa4, 0x51, 0x15, 0x50, 0x16, 0x51, 0x16, 0x51, // We.......Q.P.Q.Q + 0x14, 0x52, 0x16, 0x50, 0x16, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0xff, 0xe1, 0x03, 0xfa, // .R.P............ + 0x03, 0x9f, 0x00, 0x30, 0x00, 0x43, 0x00, 0x58, 0x00, 0x65, 0x00, 0x89, 0x00, 0x00, 0x01, 0x17, // ...0.C.X.e...... + 0x11, 0x0f, 0x01, 0x23, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, // ...#'..=.467>.;. + 0x35, 0x23, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x23, // 5#'..=.467>.;.5# + 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x01, // '..=.467>.;.2... + 0x1e, 0x01, 0x1f, 0x01, 0x3f, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, // ....?...'....... + 0x01, 0x17, 0x07, 0x2e, 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, 0x1f, // ...../.......... + 0x01, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x27, 0x05, 0x17, 0x37, 0x17, 0x37, 0x27, 0x37, 0x27, 0x07, // .>.7>.'..7.7'7'. + 0x27, 0x07, 0x17, 0x07, 0x27, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x25, 0x27, 0x26, 0x36, 0x3f, // '...'&67>.7%'&6? + 0x01, 0x27, 0x37, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x25, 0x17, 0x1e, 0x01, 0x17, 0x13, 0x07, 0x0e, // .'7.....%....... + 0x01, 0x07, 0x05, 0x27, 0x2e, 0x01, 0x27, 0x03, 0x03, 0xf2, 0x08, 0x08, 0x12, 0xd0, 0x12, 0x04, // ...'..'......... + 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0x82, 0x82, 0x12, 0x04, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, // ................ + 0x82, 0x82, 0x12, 0x04, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0xd0, 0x05, 0x09, 0x04, 0xfe, 0xe3, // ................ + 0x02, 0x09, 0x08, 0x20, 0x1a, 0x04, 0x02, 0x09, 0x08, 0x09, 0x10, 0x08, 0x09, 0x0d, 0x03, 0x04, // ... ............ + 0x02, 0x02, 0x3d, 0x02, 0x0b, 0x08, 0x20, 0x09, 0x0c, 0x04, 0x04, 0x02, 0x02, 0x02, 0x0a, 0x08, // ..=... ......... + 0x1f, 0x08, 0x0d, 0x04, 0x05, 0x03, 0x02, 0xfd, 0xcd, 0x16, 0x52, 0x16, 0x51, 0x16, 0x51, 0x16, // ..........R.Q.Q. + 0x51, 0x14, 0x52, 0x15, 0x52, 0x5d, 0x02, 0x02, 0x04, 0x04, 0x0d, 0x09, 0x01, 0x46, 0x1b, 0x03, // Q.R.R].......F.. + 0x02, 0x05, 0x06, 0x01, 0x15, 0x20, 0x07, 0x0a, 0x03, 0x1b, 0x01, 0x47, 0x1f, 0x07, 0x0a, 0x02, // ..... .....G.... + 0x58, 0x04, 0x05, 0x0d, 0x08, 0xfd, 0x21, 0x1f, 0x07, 0x0a, 0x02, 0x58, 0x01, 0x78, 0x12, 0xfe, // X.....!....X.x.. + 0x95, 0x12, 0x08, 0x08, 0x04, 0x09, 0x05, 0x34, 0x05, 0x09, 0x04, 0x04, 0x04, 0x34, 0x07, 0x04, // .......4.....4.. + 0x09, 0x05, 0x34, 0x06, 0x09, 0x03, 0x04, 0x04, 0x34, 0x08, 0x04, 0x09, 0x05, 0x34, 0x05, 0x09, // ..4.....4....4.. + 0x04, 0x04, 0x04, 0x04, 0x04, 0x01, 0x14, 0x08, 0x0d, 0x03, 0x04, 0x12, 0x20, 0x09, 0x0c, 0x04, // ............ ... + 0x05, 0x03, 0x02, 0x02, 0x0b, 0x07, 0x08, 0x10, 0x09, 0x0f, 0x08, 0x0c, 0x04, 0x05, 0x02, 0x0a, // ................ + 0x08, 0x07, 0x10, 0x08, 0x09, 0x0d, 0x04, 0x04, 0x02, 0x0a, 0x07, 0x08, 0x10, 0x09, 0x69, 0x51, // ..............iQ + 0x16, 0x51, 0x14, 0x52, 0x16, 0x50, 0x16, 0x51, 0x15, 0x50, 0x16, 0x66, 0x09, 0x11, 0x08, 0x07, // .Q.R.P.Q.P.f.... + 0x0a, 0x02, 0x57, 0x65, 0x09, 0x0f, 0x07, 0x0b, 0x05, 0x05, 0x05, 0x05, 0x0d, 0x08, 0x65, 0x57, // ..We..........eW + 0x04, 0x04, 0x0d, 0x08, 0xfe, 0xbc, 0x20, 0x08, 0x09, 0x03, 0xc2, 0x04, 0x03, 0x0d, 0x08, 0x01, // ...... ......... + 0x43, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0xff, 0xe1, 0x03, 0xfa, 0x03, 0x9f, 0x00, 0x12, // C............... + 0x00, 0x34, 0x00, 0x63, 0x00, 0x76, 0x00, 0x83, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x1f, 0x01, 0x37, // .4.c.v.........7 + 0x3e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x13, 0x1e, 0x01, // >.'../.......... + 0x17, 0x13, 0x0f, 0x01, 0x05, 0x27, 0x2e, 0x01, 0x27, 0x03, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, // .....'..'.&67>.7 + 0x25, 0x27, 0x26, 0x36, 0x3f, 0x01, 0x27, 0x37, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x25, 0x17, 0x13, // %'&6?.'7.....%.. + 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, // ..+."&'..=.#"&'. + 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x15, 0x33, // .=.467>.;.2....3 + 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x1f, 0x01, 0x11, 0x07, 0x01, 0x17, // 5467>.;.2....... + 0x3f, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x17, 0x1e, 0x01, // ?...'........... + 0x17, 0x05, 0x07, 0x27, 0x07, 0x17, 0x07, 0x17, 0x37, 0x17, 0x37, 0x27, 0x37, 0x27, 0x02, 0x46, // ...'....7.7'7'.F + 0x02, 0x0a, 0x07, 0x20, 0x1a, 0x04, 0x03, 0x02, 0x02, 0x0b, 0x08, 0x21, 0x08, 0x0c, 0x04, 0x04, // ... .......!.... + 0x02, 0x02, 0xde, 0x07, 0x0a, 0x02, 0x58, 0x04, 0x1a, 0xfd, 0x21, 0x1f, 0x07, 0x0a, 0x02, 0x58, // ......X...!....X + 0x02, 0x02, 0x04, 0x04, 0x0d, 0x09, 0x01, 0x46, 0x1b, 0x03, 0x02, 0x05, 0x06, 0x01, 0x15, 0x20, // .......F....... + 0x07, 0x0a, 0x03, 0x1b, 0x01, 0x47, 0x1f, 0xce, 0x04, 0x09, 0x05, 0x34, 0x05, 0x09, 0x04, 0x04, // .....G.....4.... + 0x04, 0x82, 0x05, 0x09, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x09, 0x05, 0x34, 0x05, 0x09, 0x04, // ............4... + 0x08, 0x34, 0x04, 0x04, 0x04, 0x09, 0x05, 0x34, 0x05, 0x09, 0x04, 0x08, 0x08, 0xfe, 0xf6, 0x20, // .4.....4....... + 0x1a, 0x04, 0x02, 0x09, 0x08, 0x09, 0x10, 0x08, 0x09, 0x0d, 0x03, 0x04, 0x02, 0x02, 0x02, 0x09, // ................ + 0x08, 0xfe, 0x71, 0x51, 0x14, 0x52, 0x15, 0x52, 0x16, 0x52, 0x16, 0x51, 0x16, 0x51, 0x16, 0x02, // ..qQ.R.R.R.Q.Q.. + 0x67, 0x09, 0x0d, 0x04, 0x04, 0x13, 0x08, 0x10, 0x09, 0x08, 0x0c, 0x04, 0x05, 0x01, 0x0b, 0x08, // g............... + 0x07, 0x10, 0x08, 0x01, 0x07, 0x04, 0x0c, 0x09, 0xfe, 0xbc, 0x20, 0x14, 0xc2, 0x04, 0x04, 0x0c, // .......... ..... + 0x08, 0x01, 0x43, 0x09, 0x11, 0x08, 0x07, 0x0a, 0x02, 0x57, 0x65, 0x09, 0x0f, 0x07, 0x0b, 0x05, // ..C......We..... + 0x05, 0x05, 0x05, 0x0d, 0x08, 0x65, 0x57, 0x04, 0xfc, 0x7b, 0x04, 0x04, 0x04, 0x04, 0x04, 0x09, // .....eW..{...... + 0x05, 0x82, 0x03, 0x04, 0x04, 0x09, 0x05, 0xd0, 0x05, 0x09, 0x04, 0x04, 0x04, 0x04, 0x04, 0x12, // ................ + 0x82, 0x82, 0x05, 0x09, 0x04, 0x04, 0x04, 0x04, 0x04, 0x12, 0xfe, 0x95, 0x12, 0x02, 0x8b, 0x04, // ................ + 0x12, 0x20, 0x09, 0x0c, 0x04, 0x05, 0x03, 0x02, 0x02, 0x0b, 0x07, 0x08, 0x10, 0x09, 0x08, 0x0d, // . .............. + 0x03, 0x20, 0x16, 0x51, 0x15, 0x50, 0x16, 0x51, 0x16, 0x51, 0x14, 0x52, 0x16, 0x50, 0x00, 0x00, // . .Q.P.Q.Q.R.P.. + 0x00, 0x01, 0x00, 0x4e, 0xff, 0xc6, 0x03, 0xb2, 0x03, 0xba, 0x00, 0x32, 0x00, 0x00, 0x17, 0x35, // ...N.......2...5 + 0x34, 0x36, 0x37, 0x35, 0x3e, 0x01, 0x33, 0x21, 0x11, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, // 4675>.3!...'..54 + 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, // 67>.32.......... + 0x07, 0x11, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x0f, 0x01, 0x21, 0x27, 0x2e, 0x01, // ..!2........!'.. + 0x35, 0x4e, 0x0c, 0x0d, 0x0d, 0x1f, 0x12, 0x01, 0x03, 0x12, 0x22, 0x10, 0x1f, 0x1f, 0x1f, 0x1f, // 5N........"..... + 0x20, 0x4e, 0x2d, 0x2c, 0x4d, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0f, 0x22, 0x12, 0x01, 0x06, 0x12, // N-,M .".... + 0x1e, 0x0d, 0x0d, 0x0d, 0x09, 0x14, 0xfc, 0xd6, 0x14, 0x05, 0x04, 0x1d, 0xc5, 0x12, 0x1e, 0x0d, // ................ + 0x01, 0x0d, 0x0d, 0x01, 0x19, 0x08, 0x17, 0x0f, 0x20, 0x4d, 0x2d, 0x2c, 0x4d, 0x20, 0x20, 0x20, // ........ M-,M + 0x20, 0x20, 0x20, 0x4d, 0x2c, 0x2d, 0x4d, 0x20, 0x0f, 0x17, 0x08, 0xfe, 0xe7, 0x0d, 0x0d, 0x0d, // M,-M ........ + 0x1e, 0x11, 0xc7, 0x14, 0x09, 0x09, 0x04, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x04, 0x00, 0x33, 0x00, 0x00, 0x25, 0x23, 0x15, 0x33, // .........3..%#.3 + 0x35, 0x03, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x15, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, // 5......#.!2..... + 0x11, 0x21, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x35, 0x22, 0x26, 0x27, 0x2e, 0x01, // .!.467>.3!5"&'.. + 0x3d, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, // =.467>.;.2...... + 0x03, 0x7b, 0x7e, 0x7e, 0x7e, 0x13, 0x13, 0x12, 0x2d, 0x1a, 0x01, 0x3c, 0x0d, 0x16, 0x0a, 0x09, // .{~~~...-..<.... + 0x0a, 0xfc, 0x0c, 0x09, 0x09, 0x09, 0x17, 0x0e, 0x01, 0x3c, 0x1b, 0x2d, 0x12, 0x13, 0x12, 0x12, // .........<.-.... + 0x13, 0x13, 0x2d, 0x1a, 0xfc, 0x1a, 0x2d, 0x12, 0x13, 0x13, 0xc3, 0x7e, 0x7e, 0x01, 0xfa, 0x1b, // ..-...-....~~... + 0x2d, 0x12, 0x12, 0x13, 0xfc, 0x0a, 0x09, 0x0a, 0x16, 0x0d, 0xfe, 0xc4, 0x01, 0x3b, 0x0d, 0x17, // -............;.. + 0x0a, 0x09, 0x0a, 0xfc, 0x13, 0x12, 0x13, 0x2d, 0x1a, 0x7e, 0x1a, 0x2d, 0x12, 0x13, 0x13, 0x13, // .......-.~.-.... + 0x13, 0x13, 0x2d, 0x19, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4e, 0xff, 0xc6, 0x03, 0xb2, // ..-.~......N.... + 0x03, 0xaa, 0x00, 0x30, 0x00, 0x00, 0x01, 0x07, 0x13, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, // ...0.....32..... + 0x01, 0x0f, 0x01, 0x21, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x35, 0x3e, 0x01, 0x33, // ...!'..=.4675>.3 + 0x21, 0x03, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x16, // !...'..'&67>.76. + 0x17, 0x1e, 0x01, 0x17, 0x16, 0x06, 0x07, 0x02, 0x48, 0x34, 0x51, 0xf6, 0x12, 0x1e, 0x0d, 0x0d, // ........H4Q..... + 0x0d, 0x09, 0x14, 0xfc, 0xd6, 0x14, 0x05, 0x04, 0x0c, 0x0d, 0x0d, 0x1f, 0x12, 0x01, 0x0d, 0x46, // ...............F + 0x13, 0x27, 0x14, 0x26, 0x32, 0x0c, 0x0b, 0x0a, 0x16, 0x18, 0x43, 0x2b, 0x2c, 0x51, 0x27, 0x27, // .'.&2.....C+,Q'' + 0x32, 0x0c, 0x0c, 0x0b, 0x17, 0x02, 0x6d, 0x3e, 0xfe, 0xd1, 0x0d, 0x0d, 0x0d, 0x1e, 0x11, 0xc7, // 2.....m>........ + 0x14, 0x09, 0x09, 0x04, 0x0b, 0x05, 0xc5, 0x12, 0x1f, 0x0c, 0x01, 0x0d, 0x0d, 0x01, 0x02, 0x03, // ................ + 0x0d, 0x0b, 0x17, 0x42, 0x2b, 0x2b, 0x52, 0x28, 0x26, 0x32, 0x0c, 0x0b, 0x0a, 0x15, 0x18, 0x41, // ...B++R(&2.....A + 0x2b, 0x2b, 0x53, 0x27, 0x00, 0x01, 0x00, 0x4e, 0xff, 0xc6, 0x03, 0xb2, 0x03, 0xaa, 0x00, 0x34, // ++S'...N.......4 + 0x00, 0x00, 0x01, 0x3e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, // ...>............ + 0x01, 0x07, 0x03, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x21, // ...!2.........#! + 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0x35, 0x3e, 0x01, 0x3b, 0x01, 0x13, 0x2e, 0x01, // '..=.4675>.;.... + 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x02, 0x01, 0x28, 0x53, 0x2c, 0x2b, 0x42, 0x16, 0x18, // '..7>.7..(S,+B.. + 0x0b, 0x0b, 0x0c, 0x33, 0x28, 0x12, 0x26, 0x13, 0x44, 0x01, 0x0e, 0x12, 0x1e, 0x0d, 0x0d, 0x0d, // ...3(.&.D....... + 0x09, 0x04, 0x0a, 0x06, 0xfc, 0xd6, 0x14, 0x05, 0x04, 0x0c, 0x0c, 0x0e, 0x1f, 0x12, 0xf3, 0x51, // ...............Q + 0x10, 0x1c, 0x0b, 0x15, 0x0a, 0x0c, 0x0c, 0x31, 0x25, 0x03, 0x96, 0x15, 0x0a, 0x0b, 0x0c, 0x32, // .......1%......2 + 0x26, 0x28, 0x52, 0x2b, 0x2b, 0x42, 0x17, 0x0a, 0x0e, 0x03, 0xfe, 0xfe, 0x0d, 0x0d, 0x0d, 0x1e, // &(R++B.......... + 0x11, 0xc7, 0x14, 0x04, 0x05, 0x09, 0x04, 0x0b, 0x05, 0xc5, 0x12, 0x1f, 0x0c, 0x01, 0x0d, 0x0d, // ................ + 0x01, 0x2f, 0x0c, 0x1f, 0x13, 0x27, 0x52, 0x2c, 0x2b, 0x41, 0x18, 0x00, 0x00, 0x03, 0x00, 0x69, // ./...'R,+A.....i + 0xff, 0xc6, 0x03, 0x97, 0x03, 0xba, 0x00, 0x14, 0x00, 0x32, 0x00, 0x4d, 0x00, 0x00, 0x13, 0x33, // .........2.M...3 + 0x15, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x37, 0x16, 0x36, 0x37, 0x07, 0x3e, 0x01, 0x3d, 0x01, 0x33, // ......7.67.>.=.3 + 0x11, 0x21, 0x11, 0x03, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x23, // .!..>.3!2......# + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // .....+."&'..5.46 + 0x37, 0x05, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x14, 0x06, 0x07, 0x0e, // 7.>.32.......... + 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x34, 0x36, 0x37, 0xc0, 0x90, 0x01, 0x18, // .#"&'..=.467.... + 0x17, 0x1a, 0x3f, 0x26, 0x25, 0x40, 0x1a, 0x03, 0x19, 0x19, 0x93, 0xfd, 0x80, 0x47, 0x09, 0x15, // ..?&%@.......G.. + 0x0c, 0x02, 0xba, 0x0b, 0x15, 0x08, 0x09, 0x09, 0x02, 0x3b, 0x3c, 0x3b, 0x8f, 0x54, 0x01, 0x55, // .........;<;.T.U + 0x90, 0x3b, 0x3b, 0x3b, 0x08, 0x08, 0x01, 0x47, 0x0d, 0x1f, 0x13, 0x12, 0x1e, 0x0d, 0x0d, 0x0d, // .;;;...G........ + 0x0d, 0x0d, 0x0d, 0x1e, 0x12, 0x13, 0x1f, 0x0d, 0x0c, 0x0d, 0x0d, 0x0c, 0x02, 0x44, 0x6d, 0x24, // .............Dm$ + 0x3f, 0x1a, 0x1e, 0x1d, 0x01, 0x01, 0x1e, 0x1f, 0x05, 0x1b, 0x40, 0x25, 0x6d, 0x01, 0x1e, 0xfe, // ?.........@%m... + 0xe2, 0x01, 0x64, 0x09, 0x09, 0x09, 0x09, 0x09, 0x14, 0x0c, 0xfd, 0xdd, 0x55, 0x8f, 0x3a, 0x3c, // ..d.........U.:< + 0x3c, 0x3c, 0x3c, 0x3a, 0x90, 0x54, 0x02, 0x22, 0x0c, 0x15, 0x09, 0xb5, 0x0d, 0x0e, 0x0e, 0x0d, // <<<:.T."........ + 0x0e, 0x22, 0x13, 0xd9, 0x13, 0x22, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0x0e, 0x22, 0x13, 0xd9, 0x13, // ."..."......"... + 0x22, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x69, 0xff, 0xc6, 0x03, 0x97, 0x03, 0xba, 0x00, 0x1c, // "......i........ + 0x00, 0x3a, 0x00, 0x45, 0x00, 0x51, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, // .:.E.Q.....#"... + 0x01, 0x0f, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x3d, // .........3267>.= + 0x01, 0x27, 0x2e, 0x01, 0x27, 0x25, 0x11, 0x23, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, // .'..'%.#.....+." + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, // &'..5.467>.3!2.. + 0x1e, 0x01, 0x15, 0x01, 0x35, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x11, 0x33, 0x01, 0x21, // ....5>.7>.3!.3.! + 0x32, 0x16, 0x17, 0x27, 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x11, 0x02, 0x3c, 0x0d, 0x1e, 0x12, 0x13, // 2..'....3..<.... + 0x1f, 0x0d, 0x08, 0x0a, 0x02, 0x05, 0x0d, 0x0c, 0x0d, 0x1f, 0x12, 0x13, 0x1e, 0x0d, 0x0d, 0x0d, // ................ + 0x03, 0x04, 0x0b, 0x08, 0x01, 0x5b, 0x02, 0x3b, 0x3c, 0x3b, 0x8f, 0x54, 0x01, 0x55, 0x90, 0x3b, // .....[.;<;.T.U.; + 0x3b, 0x3b, 0x08, 0x08, 0x09, 0x15, 0x0c, 0x02, 0xba, 0x0b, 0x15, 0x08, 0x09, 0x09, 0xfd, 0xb9, // ;;.............. + 0x01, 0x18, 0x17, 0x19, 0x3b, 0x23, 0xfe, 0xc9, 0x90, 0x01, 0xf0, 0xfe, 0xc6, 0x23, 0x3d, 0x18, // ....;#.......#=. + 0x03, 0x19, 0x19, 0x93, 0x02, 0xf1, 0x0e, 0x0e, 0x0e, 0x0e, 0x09, 0x13, 0x0b, 0x1a, 0xd9, 0x13, // ................ + 0x22, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0x0e, 0x22, 0x13, 0xd9, 0x1a, 0x0b, 0x13, 0x09, 0x8e, 0xfd, // "......"........ + 0xdd, 0x55, 0x8f, 0x3a, 0x3c, 0x3c, 0x3c, 0x3c, 0x3a, 0x90, 0x54, 0x02, 0x22, 0x0c, 0x15, 0x09, // .U.:<<<<:.T."... + 0x09, 0x09, 0x09, 0x09, 0x09, 0x14, 0x0c, 0xfe, 0xc5, 0x6c, 0x23, 0x3d, 0x1a, 0x1b, 0x1d, 0xfe, // .........l#=.... + 0xe2, 0x01, 0x1e, 0x1d, 0x1d, 0x05, 0x1a, 0x3f, 0x24, 0x6c, 0x01, 0x1e, 0x00, 0x03, 0x00, 0x69, // .......?$l.....i + 0xff, 0xc6, 0x03, 0x97, 0x03, 0xba, 0x00, 0x1a, 0x00, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x0e, // .........&.D.... + 0x01, 0x0f, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x3d, // .........3267>.= + 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x37, 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x11, // ./...#"..7....3. + 0x21, 0x32, 0x16, 0x17, 0x27, 0x25, 0x1e, 0x01, 0x15, 0x11, 0x23, 0x14, 0x06, 0x07, 0x0e, 0x01, // !2..'%....#..... + 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, // +."&'..5.467>.3! + 0x32, 0x16, 0x17, 0x01, 0xc0, 0x08, 0x0a, 0x02, 0x05, 0x0d, 0x0c, 0x0d, 0x1f, 0x12, 0x13, 0x1e, // 2............... + 0x0d, 0x0d, 0x0d, 0x03, 0x18, 0x0c, 0x1e, 0x13, 0x12, 0x1f, 0x0d, 0xbb, 0x19, 0x19, 0x93, 0xfe, // ................ + 0xc6, 0x23, 0x3d, 0x18, 0x03, 0x01, 0x0a, 0x09, 0x09, 0x02, 0x3b, 0x3c, 0x3b, 0x8f, 0x54, 0x01, // .#=.......;<;.T. + 0x55, 0x90, 0x3b, 0x3b, 0x3b, 0x08, 0x08, 0x09, 0x15, 0x0c, 0x02, 0xba, 0x0b, 0x15, 0x08, 0x02, // U.;;;........... + 0xf1, 0x09, 0x13, 0x0b, 0x1a, 0xd9, 0x13, 0x22, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0x0e, 0x22, 0x13, // ......."......". + 0xd9, 0x1a, 0x27, 0x0e, 0x0e, 0x0e, 0x0e, 0x3c, 0x1a, 0x3f, 0x24, 0x6c, 0x01, 0x1e, 0x1d, 0x1d, // ..'....<.?$l.... + 0x05, 0x7b, 0x09, 0x14, 0x0c, 0xfd, 0xdd, 0x55, 0x8f, 0x3a, 0x3c, 0x3c, 0x3c, 0x3c, 0x3a, 0x90, // .{.....U.:<<<<:. + 0x54, 0x02, 0x22, 0x0c, 0x15, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x69, // T."............i + 0xff, 0xc6, 0x03, 0x97, 0x03, 0xba, 0x00, 0x0a, 0x00, 0x28, 0x00, 0x43, 0x00, 0x00, 0x13, 0x33, // .........(.C...3 + 0x35, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x11, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x23, 0x14, // 5>.7>.3!......#. + 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, // ....+."&'..5.467 + 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x05, 0x07, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, // >.3!2..........3 + 0x32, 0x36, 0x37, 0x3e, 0x01, 0x3d, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, // 267>.=./...#"... + 0x01, 0x07, 0xc0, 0x90, 0x01, 0x18, 0x17, 0x19, 0x3b, 0x23, 0xfe, 0xc9, 0x02, 0xc5, 0x09, 0x09, // ........;#...... + 0x02, 0x3b, 0x3c, 0x3b, 0x8f, 0x54, 0x01, 0x55, 0x90, 0x3b, 0x3b, 0x3b, 0x08, 0x08, 0x09, 0x15, // .;<;.T.U.;;;.... + 0x0c, 0x02, 0xba, 0x0b, 0x15, 0x08, 0xfe, 0x27, 0x05, 0x0d, 0x0c, 0x0d, 0x1f, 0x12, 0x13, 0x1e, // .......'........ + 0x0d, 0x0d, 0x0d, 0x03, 0x18, 0x0c, 0x1e, 0x13, 0x12, 0x1f, 0x0d, 0x08, 0x0a, 0x02, 0x02, 0x44, // ...............D + 0x6c, 0x23, 0x3d, 0x1a, 0x1b, 0x1d, 0xfe, 0xe2, 0x01, 0x64, 0x09, 0x14, 0x0c, 0xfd, 0xdd, 0x55, // l#=......d.....U + 0x8f, 0x3a, 0x3c, 0x3c, 0x3c, 0x3c, 0x3a, 0x90, 0x54, 0x02, 0x22, 0x0c, 0x15, 0x09, 0x09, 0x09, // .:<<<<:.T."..... + 0x09, 0x09, 0xde, 0x1a, 0xd9, 0x13, 0x22, 0x0e, 0x0e, 0x0f, 0x0f, 0x0e, 0x0e, 0x22, 0x13, 0xd9, // ......"......".. + 0x1a, 0x27, 0x0e, 0x0e, 0x0e, 0x0e, 0x09, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, // .'.............. + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x28, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x1e, 0x03, 0x15, // .......(./...... + 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, // ......#"..'..54> + 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x05, 0x15, 0x33, 0x11, 0x33, 0x11, 0x23, // .7>.32.....3.3.# + 0x03, 0x65, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, // .e%8%..%8%%QYa55 + 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, // aZR%$8$..$8$%RZa + 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0xfe, 0x3c, 0x4a, 0x54, 0x9e, 0x03, 0x27, 0x25, 0x52, 0x5a, // 55aYQ%..7>.32. + 0x02, 0x17, 0x1e, 0x03, 0x15, 0x25, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x17, 0x3e, 0x01, 0x33, // .....%"......>.3 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x02, 0x15, 0x21, 0x35, 0x23, 0x3f, 0x01, // 2..........!5#?. + 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x03, 0xfa, 0x13, 0x25, 0x38, 0x25, 0x25, // >.54&'..#...%8%% + 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, // QYa55aZR%$8$..$8 + 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0xfe, // $%RZa55aYQ%%8%.. + 0x09, 0x1c, 0x30, 0x13, 0x12, 0x22, 0x10, 0x4f, 0x13, 0x26, 0x15, 0x0c, 0x13, 0x07, 0x08, 0x08, // ..0..".O.&...... + 0x09, 0x09, 0x37, 0x80, 0x01, 0x32, 0xac, 0x4f, 0x41, 0x08, 0x08, 0x16, 0x15, 0x15, 0x31, 0x1c, // ..7..2.OA.....1. + 0x01, 0xc0, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, // ..5aYQ%%8%..%8%% + 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, // QYa55aZR%$8$..$8 + 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0xdd, 0x0c, 0x0b, 0x0d, 0x24, 0x18, 0x2e, 0x1e, 0x1e, 0x08, // $%RZa5....$..... + 0x08, 0x07, 0x11, 0x0b, 0x0b, 0x17, 0x0b, 0x3e, 0x83, 0x47, 0x57, 0x50, 0x4e, 0x10, 0x20, 0x10, // .......>.GWPN. . + 0x1f, 0x31, 0x11, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // .1.............. + 0x03, 0xba, 0x00, 0x27, 0x00, 0x50, 0x00, 0x00, 0x01, 0x35, 0x21, 0x15, 0x33, 0x07, 0x15, 0x37, // ...'.P...5!.3..7 + 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x07, // 2..........#"&'. + 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x37, // ..3267>.54&'..'7 + 0x37, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, // 7.........#"..'. + 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x02, 0x89, 0xfe, // .54>.7>.32...... + 0xf2, 0x8b, 0x55, 0x3a, 0x14, 0x1f, 0x0b, 0x0a, 0x0b, 0x09, 0x09, 0x0a, 0x19, 0x0f, 0x18, 0x37, // ..U:...........7 + 0x20, 0x29, 0x26, 0x4a, 0x24, 0x25, 0x3c, 0x18, 0x17, 0x18, 0x0f, 0x0f, 0x0d, 0x29, 0x1b, 0x5a, // )&J$%<......).Z + 0xdc, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, // .%8%..%8%%QYa55a + 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, // ZR%$8$..$8$%RZa5 + 0x35, 0x61, 0x59, 0x51, 0x25, 0x02, 0x3e, 0x40, 0x4e, 0x5b, 0x44, 0x0c, 0x08, 0x08, 0x07, 0x13, // 5aYQ%.>@N[D..... + 0x0d, 0x0d, 0x13, 0x08, 0x06, 0x06, 0x14, 0x13, 0x47, 0x17, 0x18, 0x12, 0x12, 0x12, 0x32, 0x20, // ........G.....2 + 0x15, 0x26, 0x11, 0x10, 0x15, 0x04, 0x5e, 0xe9, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, // .&....^.%RZa55aY + 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, // Q%%8%..%8%%QYa55 + 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x00, 0x03, 0x00, 0x06, // aZR%$8$..$8$.... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x00, 0x01, 0x1e, // .......(.1.5.... + 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, // ........#"..'..5 + 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x05, 0x23, 0x03, 0x33, 0x37, // 4>.7>.32....#.37 + 0x33, 0x17, 0x33, 0x03, 0x07, 0x17, 0x23, 0x37, 0x03, 0x65, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, // 3.3...#7.e%8%..% + 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, // 8%%QYa55aZR%$8$. + 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0xfe, 0xc7, // .$8$%RZa55aYQ%.. + 0x58, 0xb1, 0x62, 0x26, 0xaa, 0x28, 0x60, 0xb1, 0x2a, 0x32, 0x68, 0x36, 0x03, 0x27, 0x25, 0x52, // X.b&.(`.*2h6.'%R + 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, // Za55aYQ%%8%..%8% + 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, // %QYa55aZR%$8$..$ + 0x38, 0x24, 0x9a, 0xfe, 0x66, 0x58, 0x58, 0x01, 0x9a, 0x79, 0x78, 0x78, 0x00, 0x02, 0x00, 0x06, // 8$..fXX..yxx.... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x0c, 0x00, 0x35, 0x00, 0x00, 0x01, 0x23, 0x07, 0x27, // .........5...#.' + 0x23, 0x17, 0x07, 0x33, 0x37, 0x17, 0x33, 0x27, 0x37, 0x37, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, // #..37.3'77...... + 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, // ...#"..'..54>.7> + 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x02, 0xc2, 0x71, 0x51, 0x52, 0x72, 0x86, 0x8f, 0x71, 0x5c, // .32.....qQRr..q. + 0x5a, 0x73, 0x8e, 0x83, 0xa3, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, // Zs...%8%..%8%%QY + 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x25, // a55aZR%$8$..$8$% + 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x02, 0x8d, 0x79, 0x79, 0xc8, 0xd2, 0x87, // RZa55aYQ%..yy... + 0x87, 0xd3, 0xc7, 0x9a, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, // ....%RZa55aYQ%%8 + 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, // %..%8%%QYa55aZR% + 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // $8$..$8$........ + 0x03, 0xba, 0x00, 0x09, 0x00, 0x32, 0x00, 0x00, 0x01, 0x23, 0x07, 0x27, 0x23, 0x17, 0x15, 0x33, // .....2...#.'#..3 + 0x35, 0x37, 0x03, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, // 57.2............ + 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x02, // #"..'..54>.7>.3. + 0xbe, 0x64, 0x5a, 0x5a, 0x64, 0x90, 0x5c, 0x90, 0xbe, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, // .dZZd....5aYQ%%8 + 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, // %..%8%%QYa55aZR% + 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x02, 0x7e, 0x98, // $8$..$8$%RZa5.~. + 0x98, 0xf8, 0xa3, 0xa3, 0xf8, 0x01, 0x3c, 0x13, 0x24, 0x38, 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, // ......<.$8$%RZa5 + 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, // 5aYQ%%8%..%8%%QY + 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x00, 0x00, 0x02, 0x00, 0x06, // a55aZR%$8$...... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x28, 0x00, 0x65, 0x00, 0x00, 0x01, 0x2e, 0x03, 0x23, // .......(.e.....# + 0x22, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x33, 0x32, 0x3e, // "............32> + 0x02, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x03, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, // .7>.54..'....... + 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x2f, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x2f, 0x01, // ...#"&/....#"&/. + 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x3f, 0x01, 0x3e, // ..546?.'..546?.> + 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x1e, 0x01, // .32...7>.32..... + 0x15, 0x14, 0x06, 0x0f, 0x01, 0x17, 0x03, 0x67, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, // .......g%RZa55aY + 0x52, 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, 0x35, // R$%8%..%8%$RYa55 + 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x25, 0x3c, 0x02, 0x02, 0x02, // aZR%%7$..$7%<... + 0x02, 0x18, 0x03, 0x06, 0x03, 0x03, 0x06, 0x03, 0xfb, 0xfe, 0x02, 0x06, 0x04, 0x03, 0x06, 0x02, // ................ + 0x18, 0x02, 0x03, 0x03, 0x02, 0xfe, 0xfb, 0x03, 0x02, 0x02, 0x03, 0x17, 0x03, 0x06, 0x03, 0x04, // ................ + 0x06, 0x02, 0xfc, 0xfd, 0x02, 0x06, 0x04, 0x03, 0x06, 0x02, 0x18, 0x02, 0x03, 0x03, 0x02, 0xfe, // ................ + 0xfc, 0x03, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, // ..%%8%..%8%$RYa5 + 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, // 5aZR%%7$..$7%%RZ + 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0xfd, 0x9d, 0x02, 0x06, 0x04, 0x03, 0x06, 0x02, 0x18, // a55aYR$......... + 0x02, 0x03, 0x03, 0x02, 0xfe, 0xfc, 0x02, 0x02, 0x02, 0x02, 0x18, 0x03, 0x06, 0x03, 0x04, 0x05, // ................ + 0x03, 0xfb, 0xfe, 0x02, 0x06, 0x04, 0x03, 0x06, 0x02, 0x18, 0x02, 0x03, 0x03, 0x02, 0xfe, 0xfb, // ................ + 0x03, 0x02, 0x02, 0x03, 0x17, 0x03, 0x06, 0x03, 0x04, 0x06, 0x02, 0xfb, 0xfe, 0x00, 0x00, 0x00, // ................ + 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x21, 0x00, 0x4a, // .............!.J + 0x00, 0x00, 0x01, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, // ...4&'..#!"..... + 0x11, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x11, 0x05, // ......3!267>.5.. + 0x21, 0x11, 0x21, 0x11, 0x05, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, // !.!........#"..' + 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, // ..54>.7>.32..... + 0x15, 0x03, 0x30, 0x06, 0x06, 0x06, 0x0e, 0x09, 0xfd, 0xf2, 0x09, 0x0f, 0x06, 0x05, 0x06, 0x06, // ..0............. + 0x05, 0x06, 0x0f, 0x09, 0x02, 0x0e, 0x09, 0x0e, 0x06, 0x06, 0x06, 0xfd, 0xe3, 0x01, 0xda, 0xfe, // ................ + 0x26, 0x02, 0xe7, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, // &...$7%%RZa55aYR + 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, 0x35, 0x61, // $%8%..%8%$RYa55a + 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0x02, 0xc7, 0x09, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, // ZR%%7$.......... + 0x06, 0x0f, 0x09, 0xfd, 0xf3, 0x09, 0x0f, 0x06, 0x05, 0x06, 0x06, 0x05, 0x06, 0x0f, 0x09, 0x02, // ................ + 0x0e, 0x1a, 0xfe, 0x26, 0x01, 0xda, 0xed, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, // ...&...5aZR%%7$. + 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0x25, 0x38, // .$7%%RZa55aYR$%8 + 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, 0x00, 0x00, 0x03, 0x00, 0x06, // %..%8%$RYa5..... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x1a, 0x00, 0x43, 0x00, 0x5e, 0x00, 0x00, 0x01, 0x14, // .........C.^.... + 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, // .....#"&'..5467> + 0x01, 0x33, 0x32, 0x16, 0x1f, 0x01, 0x1e, 0x01, 0x15, 0x33, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, // .32......3...... + 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, // #"..'..54>.7>.32 + 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x23, 0x34, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x23, 0x22, 0x06, // ......#4&/...#". + 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x3f, 0x01, 0x3e, 0x01, // .........326?.>. + 0x35, 0x03, 0x50, 0x1c, 0x1c, 0x2a, 0x31, 0x77, 0x46, 0x46, 0x77, 0x31, 0x31, 0x31, 0x31, 0x31, // 5.P..*1wFFw11111 + 0x31, 0x77, 0x46, 0x46, 0x77, 0x31, 0x2a, 0x1c, 0x1c, 0xaa, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, // 1wFFw1*....$7%%R + 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, // Za55aYR$%8%..%8% + 0x24, 0x52, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0x6a, 0x21, // $RYa55aZR%%7$.j! + 0x22, 0x32, 0x3a, 0x8e, 0x53, 0x53, 0x8e, 0x3a, 0x3b, 0x3a, 0x3a, 0x3b, 0x3a, 0x8e, 0x53, 0x53, // "2:.SS.:;::;:.SS + 0x8e, 0x3a, 0x32, 0x22, 0x21, 0x01, 0xc0, 0x35, 0x5e, 0x29, 0x32, 0x31, 0x31, 0x31, 0x31, 0x31, // .:2"!..5^)211111 + 0x77, 0x46, 0x46, 0x77, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x29, 0x5e, 0x35, 0x35, 0x61, 0x5a, // wFFw111112)^55aZ + 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, // R%%7$..$7%%RZa55 + 0x61, 0x59, 0x52, 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, // aYR$%8%..%8%$RYa + 0x35, 0x3f, 0x70, 0x30, 0x3c, 0x3b, 0x3a, 0x3a, 0x3b, 0x3a, 0x8e, 0x53, 0x53, 0x8e, 0x3a, 0x3b, // 5?p0<;::;:.SS.:; + 0x3a, 0x3a, 0x3b, 0x3c, 0x30, 0x70, 0x3f, 0x00, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ::;<0p?......... + 0x03, 0xba, 0x00, 0x03, 0x00, 0x2c, 0x00, 0x51, 0x00, 0x00, 0x01, 0x13, 0x21, 0x13, 0x01, 0x14, // .....,.Q....!... + 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, // .....#"..'..54>. + 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x07, 0x36, 0x26, 0x27, 0x01, // 7>.32.......6&'. + 0x2e, 0x01, 0x27, 0x23, 0x26, 0x22, 0x07, 0x23, 0x0e, 0x01, 0x07, 0x15, 0x01, 0x23, 0x0e, 0x01, // ..'#&".#.....#.. + 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, 0x23, 0x3e, 0x01, 0x37, 0x35, // ......3!267#>.75 + 0x02, 0x00, 0xf1, 0xfe, 0x1e, 0xf1, 0x01, 0xfa, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, // .........$7%%RZa + 0x35, 0x35, 0x61, 0x59, 0x52, 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, // 55aYR$%8%..%8%$R + 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, 0x37, 0x24, 0x13, 0xb8, 0x01, 0x04, 0x04, // Ya55aZR%%7$..... + 0xfe, 0xf3, 0x04, 0x0d, 0x08, 0x01, 0x0a, 0x13, 0x09, 0x01, 0x09, 0x0d, 0x05, 0xfe, 0xf4, 0x01, // ................ + 0x05, 0x03, 0x01, 0x02, 0x08, 0x07, 0x07, 0x13, 0x0b, 0x02, 0x19, 0x0b, 0x12, 0x08, 0x01, 0x07, // ................ + 0x09, 0x01, 0x02, 0xc0, 0xfe, 0x40, 0x01, 0xc0, 0xff, 0x00, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x25, // .....@....5aZR%% + 0x37, 0x24, 0x13, 0x13, 0x24, 0x37, 0x25, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x52, // 7$..$7%%RZa55aYR + 0x24, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x24, 0x52, 0x59, 0x61, 0x35, 0xd9, 0x0b, // $%8%..%8%$RYa5.. + 0x13, 0x09, 0x01, 0xe3, 0x09, 0x0d, 0x03, 0x05, 0x05, 0x03, 0x0d, 0x08, 0x01, 0xfe, 0x1d, 0x0a, // ................ + 0x14, 0x0a, 0x0a, 0x12, 0x07, 0x09, 0x09, 0x09, 0x08, 0x07, 0x12, 0x0b, 0x01, 0x00, 0x00, 0x00, // ................ + 0x00, 0x01, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x07, 0x00, 0x00, 0x13, 0x34, // ...............4 + 0x36, 0x33, 0x21, 0x11, 0x21, 0x11, 0x06, 0x43, 0x42, 0x03, 0x6f, 0xfc, 0x0c, 0x02, 0x7a, 0x43, // 63!.!..CB.o...zC + 0x42, 0xfd, 0x82, 0x01, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, // B............... + 0x02, 0xff, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x01, 0x35, 0x23, 0x11, 0x33, 0x35, 0x23, 0x01, // .........5#.35#. + 0x34, 0x36, 0x33, 0x21, 0x11, 0x21, 0x11, 0x01, 0xf1, 0x40, 0xbb, 0x7b, 0xfe, 0x15, 0x43, 0x42, // 463!.!...@.{..CB + 0x03, 0x6f, 0xfc, 0x0c, 0x01, 0x74, 0xea, 0xfe, 0xdc, 0x3a, 0x01, 0x06, 0x43, 0x42, 0xfd, 0x82, // .o...t...:..CB.. + 0x01, 0xf9, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x06, // ................ + 0x00, 0x0e, 0x00, 0x15, 0x00, 0x00, 0x01, 0x23, 0x15, 0x33, 0x15, 0x33, 0x11, 0x01, 0x11, 0x34, // .......#.3.3...4 + 0x36, 0x33, 0x21, 0x11, 0x21, 0x01, 0x11, 0x33, 0x35, 0x23, 0x35, 0x23, 0x02, 0xa1, 0x68, 0x31, // 63!.!..35#5#..h1 + 0x37, 0xfd, 0x65, 0x43, 0x42, 0x03, 0x6f, 0xfc, 0x0c, 0x01, 0x76, 0xa7, 0x6e, 0x39, 0x02, 0x44, // 7.eCB.o...v.n9.D + 0x34, 0xd6, 0x01, 0x0a, 0xfe, 0x3d, 0x01, 0xf9, 0x43, 0x42, 0xfd, 0x82, 0x01, 0xc3, 0xfe, 0xf6, // 4....=..CB...... + 0x35, 0xd5, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x07, // 5............... + 0x00, 0x0e, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x34, 0x36, 0x33, 0x21, 0x05, 0x23, // ...-....!.463!.# + 0x11, 0x33, 0x35, 0x23, 0x35, 0x37, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x17, 0x3e, 0x01, 0x33, // .35#57"......>.3 + 0x32, 0x16, 0x1f, 0x01, 0x0f, 0x02, 0x15, 0x33, 0x35, 0x23, 0x3f, 0x02, 0x34, 0x26, 0x27, 0x2e, // 2......35#?.4&'. + 0x01, 0x23, 0x03, 0xfa, 0xfc, 0x0c, 0x43, 0x42, 0x03, 0x6f, 0xfd, 0x85, 0x38, 0xa4, 0x6c, 0xe3, // .#....CB.o..8.l. + 0x10, 0x1b, 0x0b, 0x0a, 0x13, 0x0a, 0x2e, 0x0a, 0x17, 0x0c, 0x06, 0x0b, 0x04, 0x08, 0x09, 0x20, // ............... + 0x4b, 0xb3, 0x64, 0x2d, 0x25, 0x0a, 0x0c, 0x0c, 0x0d, 0x1d, 0x10, 0x02, 0xff, 0xfd, 0x82, 0x01, // K.d-%........... + 0xf9, 0x43, 0x42, 0xc1, 0xfe, 0xfc, 0x34, 0xd0, 0x06, 0x08, 0x07, 0x07, 0x16, 0x0e, 0x1b, 0x12, // .CB...4......... + 0x11, 0x04, 0x05, 0x15, 0x1c, 0x25, 0x4d, 0x2c, 0x34, 0x31, 0x2e, 0x27, 0x12, 0x1e, 0x0a, 0x0b, // .....%M,41.'.... + 0x0b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x07, // ................ + 0x00, 0x0e, 0x00, 0x2a, 0x00, 0x36, 0x00, 0x42, 0x00, 0x00, 0x37, 0x11, 0x34, 0x36, 0x33, 0x21, // ...*.6.B..7.463! + 0x11, 0x21, 0x01, 0x11, 0x33, 0x35, 0x23, 0x35, 0x23, 0x05, 0x27, 0x23, 0x11, 0x33, 0x32, 0x36, // .!..35#5#.'#.326 + 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x3f, 0x01, 0x3e, 0x01, 0x35, 0x34, // 7>.54&'..'?.>.54 + 0x26, 0x27, 0x2e, 0x01, 0x27, 0x07, 0x33, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x23, // &'..'.3........# + 0x35, 0x35, 0x33, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x23, 0x35, 0x06, 0x43, 0x42, // 553........#5.CB + 0x03, 0x6f, 0xfc, 0x0c, 0x01, 0x2e, 0xa6, 0x6d, 0x39, 0x01, 0x5c, 0x32, 0x6e, 0x7c, 0x1d, 0x29, // .o.....m9..2n|.) + 0x0c, 0x0a, 0x0a, 0x08, 0x08, 0x08, 0x15, 0x0d, 0x0a, 0x0b, 0x0a, 0x0b, 0x0a, 0x09, 0x05, 0x10, // ................ + 0x0a, 0x61, 0x26, 0x2d, 0x07, 0x08, 0x07, 0x07, 0x28, 0x2c, 0x1f, 0x27, 0x06, 0x06, 0x06, 0x07, // .a&-....(,.'.... + 0x26, 0x1f, 0x81, 0x01, 0xf9, 0x43, 0x42, 0xfd, 0x82, 0x01, 0xc3, 0xfe, 0xf6, 0x35, 0xd5, 0x06, // &....CB......5.. + 0x06, 0xfe, 0xf6, 0x0c, 0x0d, 0x0a, 0x19, 0x0e, 0x0d, 0x15, 0x08, 0x09, 0x0a, 0x03, 0x04, 0x07, // ................ + 0x08, 0x17, 0x0f, 0x0d, 0x17, 0x0b, 0x06, 0x08, 0x04, 0x95, 0x06, 0x02, 0x0c, 0x09, 0x0a, 0x0c, // ................ + 0x04, 0x06, 0x3d, 0x69, 0x06, 0x03, 0x0c, 0x09, 0x08, 0x0c, 0x03, 0x05, 0x3a, 0x00, 0x00, 0x00, // ..=i........:... + 0x00, 0x03, 0x00, 0xe6, 0xff, 0xc6, 0x03, 0x1a, 0x03, 0xba, 0x00, 0x1c, 0x00, 0x23, 0x00, 0x2c, // .............#., + 0x00, 0x00, 0x17, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, // ....467>.3!2.... + 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x13, // .......#!"&'..5. + 0x35, 0x23, 0x15, 0x33, 0x35, 0x23, 0x37, 0x15, 0x33, 0x35, 0x33, 0x35, 0x23, 0x15, 0x33, 0xe6, // 5#.35#7.3535#.3. + 0x07, 0x07, 0x07, 0x10, 0x0a, 0x01, 0xd6, 0x0a, 0x11, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07, 0x11, // ................ + 0x0a, 0xfe, 0x2b, 0x0a, 0x11, 0x07, 0x07, 0x07, 0xc0, 0x29, 0x74, 0x4b, 0x80, 0x29, 0x34, 0x92, // ..+......)tK.)4. + 0x35, 0x0b, 0x03, 0x96, 0x09, 0x10, 0x07, 0x08, 0x07, 0x07, 0x08, 0x07, 0x10, 0x09, 0xfc, 0x6a, // 5..............j + 0x0a, 0x11, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x11, 0x0a, 0x01, 0x91, 0x9a, 0xc0, 0x26, 0x74, // ..............&t + 0x9a, 0x9a, 0x26, 0x26, 0x00, 0x04, 0x00, 0xe6, 0xff, 0xc6, 0x03, 0x1a, 0x03, 0xba, 0x00, 0x1c, // ..&&............ + 0x00, 0x2e, 0x00, 0x37, 0x00, 0x3f, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x23, 0x21, 0x22, 0x06, 0x07, // ...7.?.....#!".. + 0x0e, 0x01, 0x15, 0x11, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, 0x3e, 0x01, // .........3!267>. + 0x35, 0x11, 0x34, 0x26, 0x27, 0x01, 0x27, 0x23, 0x15, 0x23, 0x35, 0x33, 0x32, 0x16, 0x17, 0x1e, // 5.4&'.'#.#532... + 0x01, 0x15, 0x14, 0x06, 0x07, 0x17, 0x23, 0x37, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x15, // ......#7#.#5#53. + 0x07, 0x17, 0x0f, 0x01, 0x23, 0x35, 0x33, 0x17, 0x03, 0x0d, 0x07, 0x11, 0x0a, 0xfe, 0x2a, 0x0a, // ....#53.......*. + 0x10, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x11, 0x0a, 0x01, 0xd5, 0x0a, 0x11, 0x07, 0x07, 0x06, // ................ + 0x06, 0x07, 0xfe, 0xc9, 0x29, 0x1c, 0x29, 0x45, 0x15, 0x1f, 0x09, 0x09, 0x09, 0x11, 0x12, 0x2e, // ....).)E........ + 0x31, 0xc2, 0x33, 0x29, 0x35, 0x91, 0xcd, 0x08, 0x08, 0x1c, 0x1e, 0x1e, 0x1c, 0x03, 0xab, 0x08, // 1.3)5........... + 0x07, 0x07, 0x08, 0x07, 0x10, 0x09, 0xfc, 0x6a, 0x0a, 0x11, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, // .......j........ + 0x11, 0x0a, 0x03, 0x96, 0x09, 0x10, 0x07, 0xfd, 0xb6, 0x3d, 0x3d, 0xc0, 0x08, 0x08, 0x08, 0x18, // .........==..... + 0x10, 0x17, 0x1e, 0x08, 0x43, 0x98, 0x9a, 0x9a, 0x26, 0x26, 0x04, 0x14, 0x19, 0x06, 0x39, 0x06, // ....C...&&....9. + 0x00, 0x06, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x07, 0x00, 0x23, 0x00, 0x2f, // .............#./ + 0x00, 0x3b, 0x00, 0x49, 0x00, 0x5b, 0x00, 0x00, 0x13, 0x21, 0x32, 0x16, 0x15, 0x11, 0x21, 0x11, // .;.I.[...!2...!. + 0x05, 0x27, 0x23, 0x11, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, // .'#.3267>.54&'.. + 0x27, 0x3f, 0x01, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x07, 0x33, 0x17, 0x1e, // '?.>.54&'..'.3.. + 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x23, 0x35, 0x35, 0x33, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, // ......#553...... + 0x0f, 0x01, 0x23, 0x35, 0x07, 0x14, 0x06, 0x0f, 0x01, 0x23, 0x35, 0x33, 0x32, 0x16, 0x17, 0x1e, // ..#5.....#532... + 0x01, 0x15, 0x27, 0x23, 0x11, 0x33, 0x35, 0x33, 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x26, // ..'#.353.3'>.54& + 0x27, 0x2e, 0x01, 0x23, 0x06, 0x03, 0x6f, 0x42, 0x43, 0xfc, 0x0c, 0x02, 0xb9, 0x32, 0x6d, 0x7b, // '..#..oBC....2m{ + 0x1e, 0x29, 0x0b, 0x0a, 0x0a, 0x08, 0x08, 0x08, 0x15, 0x0d, 0x0b, 0x0a, 0x0b, 0x0a, 0x09, 0x0a, // .).............. + 0x05, 0x10, 0x0a, 0x61, 0x26, 0x2d, 0x08, 0x07, 0x07, 0x07, 0x28, 0x2c, 0x1f, 0x28, 0x05, 0x06, // ...a&-....(,.(.. + 0x06, 0x06, 0x27, 0x1f, 0xa0, 0x04, 0x05, 0x26, 0x2a, 0x2a, 0x0e, 0x13, 0x05, 0x05, 0x04, 0x32, // ..'....&**.....2 + 0x60, 0x39, 0x27, 0x36, 0x47, 0x40, 0x18, 0x18, 0x0d, 0x0c, 0x0d, 0x2a, 0x1d, 0x02, 0xff, 0x42, // `9'6G@.....*...B + 0x43, 0xfe, 0x07, 0x02, 0x7e, 0xc1, 0x06, 0xfe, 0xf6, 0x0c, 0x0d, 0x0a, 0x19, 0x0e, 0x0d, 0x15, // C...~........... + 0x08, 0x09, 0x0a, 0x03, 0x04, 0x07, 0x08, 0x17, 0x0f, 0x0d, 0x17, 0x0b, 0x06, 0x08, 0x04, 0x95, // ................ + 0x06, 0x02, 0x0c, 0x09, 0x0a, 0x0c, 0x04, 0x06, 0x3d, 0x69, 0x06, 0x03, 0x0c, 0x09, 0x08, 0x0c, // ........=i...... + 0x03, 0x05, 0x3a, 0x27, 0x0b, 0x10, 0x05, 0x0a, 0x4f, 0x04, 0x04, 0x04, 0x0f, 0x0a, 0x59, 0xfe, // ..:'....O.....Y. + 0xf6, 0x53, 0x53, 0x5e, 0x09, 0x2a, 0x20, 0x17, 0x21, 0x0a, 0x0b, 0x0c, 0x00, 0x04, 0x00, 0x06, // .SS^.* .!....... + 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x0b, 0x00, 0x1d, 0x00, 0x3e, 0x00, 0x46, 0x00, 0x00, // ...........>.F.. + 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x23, 0x35, 0x33, 0x27, 0x23, 0x11, 0x33, // .........#53'#.3 + 0x35, 0x33, 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x25, 0x22, // 53.3'>.54&'..#%" + 0x06, 0x07, 0x0e, 0x01, 0x07, 0x17, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x0f, // ......>.32...... + 0x02, 0x15, 0x33, 0x35, 0x23, 0x3f, 0x02, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x25, 0x21, 0x32, // ..35#?.4&'..#%!2 + 0x16, 0x15, 0x11, 0x21, 0x11, 0x01, 0x78, 0x2a, 0x05, 0x05, 0x05, 0x05, 0x2a, 0x2a, 0x2a, 0x02, // ...!..x*....***. + 0x64, 0x3c, 0x28, 0x3a, 0x49, 0x42, 0x19, 0x19, 0x0e, 0x0e, 0x0c, 0x2c, 0x1f, 0x01, 0x03, 0x12, // d<(:IB.....,.... + 0x1c, 0x0b, 0x0b, 0x14, 0x0a, 0x30, 0x0a, 0x18, 0x0d, 0x07, 0x0b, 0x04, 0x04, 0x05, 0x0b, 0x21, // .....0.........! + 0x4e, 0xbb, 0x69, 0x30, 0x28, 0x09, 0x0d, 0x0d, 0x0d, 0x1d, 0x11, 0xfd, 0x8d, 0x03, 0x6f, 0x42, // N.i0(.........oB + 0x43, 0xfc, 0x0c, 0x02, 0x0c, 0x08, 0x04, 0x0e, 0x0a, 0x0b, 0x10, 0x05, 0x09, 0x4d, 0x32, 0xfe, // C............M2. + 0xfc, 0x52, 0x52, 0x5d, 0x09, 0x29, 0x1f, 0x17, 0x20, 0x0a, 0x0b, 0x0a, 0x06, 0x08, 0x07, 0x07, // .RR].).. ....... + 0x16, 0x0e, 0x1b, 0x12, 0x12, 0x05, 0x05, 0x04, 0x0a, 0x07, 0x1c, 0x25, 0x4d, 0x2c, 0x34, 0x31, // ...........%M,41 + 0x2e, 0x27, 0x12, 0x1e, 0x0a, 0x0b, 0x0b, 0xbb, 0x42, 0x43, 0xfe, 0x07, 0x02, 0x7e, 0x00, 0x00, // .'......BC...~.. + 0x00, 0x04, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x07, 0x00, 0x15, 0x00, 0x27, // ...............' + 0x00, 0x2e, 0x00, 0x00, 0x13, 0x21, 0x32, 0x16, 0x15, 0x11, 0x21, 0x11, 0x01, 0x14, 0x06, 0x0f, // .....!2...!..... + 0x01, 0x23, 0x35, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x27, 0x23, 0x11, 0x33, 0x35, 0x33, // .#532.....'#.353 + 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x33, 0x23, 0x15, 0x33, // .3'>.54&'..#3#.3 + 0x15, 0x33, 0x11, 0x06, 0x03, 0x6f, 0x42, 0x43, 0xfc, 0x0c, 0x01, 0xd3, 0x04, 0x05, 0x26, 0x2a, // .3...oBC......&* + 0x2a, 0x0d, 0x14, 0x05, 0x05, 0x04, 0x32, 0x60, 0x39, 0x27, 0x36, 0x47, 0x40, 0x18, 0x18, 0x0d, // *.....2`9'6G@... + 0x0c, 0x0d, 0x2a, 0x1d, 0xfa, 0x66, 0x2f, 0x37, 0x02, 0xff, 0x42, 0x43, 0xfe, 0x07, 0x02, 0x7e, // ..*..f/7..BC...~ + 0xfe, 0xec, 0x0b, 0x10, 0x05, 0x0a, 0x4f, 0x04, 0x04, 0x04, 0x0f, 0x0a, 0x59, 0xfe, 0xf6, 0x53, // ......O.....Y..S + 0x53, 0x5e, 0x09, 0x2a, 0x20, 0x17, 0x21, 0x0a, 0x0b, 0x0c, 0x34, 0xd6, 0x01, 0x0a, 0x00, 0x00, // S^.* .!...4..... + 0x00, 0x03, 0x00, 0x06, 0x00, 0x81, 0x03, 0xfa, 0x02, 0xff, 0x00, 0x07, 0x00, 0x17, 0x00, 0x29, // ...............) + 0x00, 0x00, 0x01, 0x11, 0x21, 0x11, 0x21, 0x32, 0x16, 0x15, 0x05, 0x33, 0x32, 0x16, 0x17, 0x1e, // ....!.!2...32... + 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x35, 0x37, 0x23, 0x11, 0x33, 0x35, 0x33, // .......+.57#.353 + 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x03, 0xfa, 0xfc, 0x0c, // .3'>.54&'..#.... + 0x03, 0x6f, 0x42, 0x43, 0xfd, 0xdb, 0x2e, 0x0e, 0x15, 0x06, 0x05, 0x06, 0x06, 0x05, 0x05, 0x16, // .oBC............ + 0x10, 0x2c, 0x2a, 0x68, 0x3e, 0x2a, 0x3c, 0x4b, 0x45, 0x1b, 0x1a, 0x0e, 0x0e, 0x0e, 0x2d, 0x20, // .,*h>*.35........ + 0x08, 0x07, 0x10, 0x09, 0xfc, 0x6a, 0x0a, 0x11, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x11, 0x0a, // .....j.......... + 0x02, 0xda, 0x07, 0x07, 0x07, 0x10, 0x0a, 0xfe, 0x2a, 0x0a, 0x11, 0x07, 0x07, 0x06, 0x06, 0x07, // ........*....... + 0x07, 0x11, 0x0a, 0x01, 0xd5, 0x0a, 0x11, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x06, // ................ + 0x00, 0xa6, 0x03, 0xfa, 0x02, 0xda, 0x00, 0x1c, 0x00, 0x25, 0x00, 0x29, 0x00, 0x31, 0x00, 0x43, // .........%.).1.C + 0x00, 0x4c, 0x00, 0x7c, 0x00, 0x85, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // .L.|...........# + 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, // !"&'..5.467>.3!2 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x05, 0x23, 0x07, 0x33, 0x37, 0x33, 0x17, 0x33, 0x27, 0x07, 0x17, // ......#.373.3'.. + 0x23, 0x37, 0x37, 0x1f, 0x01, 0x0f, 0x01, 0x23, 0x35, 0x33, 0x17, 0x34, 0x26, 0x27, 0x2e, 0x01, // #77....#53.4&'.. + 0x2b, 0x01, 0x15, 0x33, 0x35, 0x33, 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x37, 0x15, 0x33, 0x35, // +..353.3'>.57.35 + 0x33, 0x35, 0x23, 0x15, 0x33, 0x25, 0x27, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, // 35#.3%'"........ + 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x01, 0x0f, 0x01, 0x22, 0x26, 0x27, 0x07, 0x1e, 0x01, 0x33, // ........."&'...3 + 0x32, 0x36, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x02, 0x3f, 0x01, 0x32, // 267>.54&'../.?.2 + 0x16, 0x17, 0x37, 0x27, 0x17, 0x35, 0x23, 0x15, 0x33, 0x15, 0x33, 0x35, 0x33, 0x03, 0xfa, 0x07, // ..7'.5#.3.353... + 0x08, 0x07, 0x10, 0x09, 0xfc, 0x6a, 0x0a, 0x11, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x11, 0x0a, // .....j.......... + 0x03, 0x96, 0x09, 0x10, 0x07, 0x08, 0x07, 0xfd, 0xff, 0x1c, 0x3a, 0x20, 0x0c, 0x37, 0x0c, 0x1f, // ..........: .7.. + 0x38, 0x0e, 0x10, 0x21, 0x11, 0x88, 0x14, 0x06, 0x06, 0x14, 0x15, 0x15, 0x37, 0x06, 0x06, 0x07, // 8..!........7... + 0x16, 0x0f, 0x31, 0x1d, 0x14, 0x1d, 0x24, 0x21, 0x0c, 0x0c, 0x39, 0x1d, 0x26, 0x69, 0x26, 0xfe, // ..1...$!..9.&i&. + 0x2d, 0x1a, 0x0a, 0x11, 0x06, 0x06, 0x07, 0x06, 0x05, 0x05, 0x10, 0x0b, 0x07, 0x0a, 0x03, 0x04, // -............... + 0x04, 0x0d, 0x09, 0x13, 0x0a, 0x11, 0x0c, 0x1c, 0x0f, 0x0a, 0x11, 0x07, 0x07, 0x07, 0x05, 0x06, // ................ + 0x05, 0x0f, 0x09, 0x18, 0x05, 0x04, 0x0c, 0x09, 0x12, 0x08, 0x10, 0x18, 0x90, 0x69, 0x26, 0x1d, // .............i&. + 0x26, 0x02, 0xab, 0xfe, 0x2a, 0x0a, 0x11, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07, 0x11, 0x0a, 0x01, // &...*........... + 0xd5, 0x0a, 0x11, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x10, 0x0a, 0xa7, 0x89, 0x1d, 0x1d, 0x89, // ................ + 0x29, 0x28, 0x28, 0x0e, 0x05, 0x0e, 0x11, 0x05, 0x29, 0x13, 0x0c, 0x11, 0x05, 0x06, 0x06, 0x89, // )((.....)....... + 0x2b, 0x2b, 0x30, 0x05, 0x16, 0x10, 0x13, 0x6e, 0x6e, 0x1b, 0x1b, 0x1a, 0x04, 0x06, 0x05, 0x05, // ++0....nn....... + 0x10, 0x0a, 0x09, 0x0e, 0x05, 0x05, 0x07, 0x02, 0x02, 0x04, 0x02, 0x0a, 0x09, 0x03, 0x09, 0x09, // ................ + 0x17, 0x0b, 0x0c, 0x06, 0x05, 0x05, 0x0f, 0x09, 0x0a, 0x0e, 0x05, 0x04, 0x08, 0x03, 0x08, 0x0a, // ................ + 0x0a, 0x03, 0x07, 0x08, 0x18, 0x0e, 0x1a, 0x1b, 0x1b, 0x6e, 0x6e, 0x00, 0x00, 0x07, 0x00, 0x06, // .........nn..... + 0x00, 0xa6, 0x03, 0xfa, 0x02, 0xda, 0x00, 0x1c, 0x00, 0x25, 0x00, 0x32, 0x00, 0x39, 0x00, 0x46, // .........%.2.9.F + 0x00, 0x6d, 0x00, 0x9b, 0x00, 0x00, 0x13, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, // .m.....!2....... + 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, // ....#!"&'..5.467 + 0x3e, 0x01, 0x33, 0x05, 0x23, 0x15, 0x33, 0x15, 0x33, 0x35, 0x33, 0x35, 0x05, 0x35, 0x23, 0x15, // >.3.#.3.3535.5#. + 0x33, 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x17, 0x35, 0x23, 0x15, 0x33, 0x35, 0x23, // 35#535#53.5#.35# + 0x37, 0x35, 0x23, 0x15, 0x33, 0x35, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x37, 0x32, 0x16, // 75#.35#535#5372. + 0x17, 0x37, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, // .7..#".......... + 0x33, 0x32, 0x36, 0x37, 0x27, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, // 3267'..#"&'..546 + 0x37, 0x3e, 0x01, 0x33, 0x05, 0x37, 0x2f, 0x01, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, // 7>.3.7/."....... + 0x17, 0x1e, 0x01, 0x1f, 0x02, 0x0f, 0x01, 0x22, 0x26, 0x27, 0x07, 0x1e, 0x01, 0x33, 0x32, 0x36, // ......."&'...326 + 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x02, 0x3f, 0x01, 0x1e, 0x01, 0x17, // 7>.54&'../.?.... + 0x35, 0x03, 0x96, 0x09, 0x10, 0x07, 0x08, 0x07, 0x07, 0x08, 0x07, 0x10, 0x09, 0xfc, 0x6a, 0x0a, // 5.............j. + 0x11, 0x07, 0x06, 0x07, 0x07, 0x06, 0x07, 0x11, 0x0a, 0x03, 0x20, 0x67, 0x25, 0x1e, 0x24, 0xfe, // .......... g%.$. + 0x1c, 0x5d, 0x5f, 0x42, 0x3a, 0x3a, 0x40, 0x3a, 0x1d, 0x53, 0x36, 0xaa, 0x5d, 0x5f, 0x42, 0x3a, // .]_B::@:.S6.]_B: + 0x3a, 0x40, 0x5a, 0x0a, 0x11, 0x07, 0x13, 0x0b, 0x1b, 0x10, 0x0f, 0x18, 0x09, 0x0a, 0x0a, 0x0a, // :@Z............. + 0x0a, 0x09, 0x18, 0x0f, 0x0f, 0x1b, 0x0b, 0x13, 0x06, 0x12, 0x0b, 0x08, 0x0d, 0x06, 0x06, 0x05, // ................ + 0x06, 0x06, 0x06, 0x0e, 0x08, 0xfe, 0x3b, 0x0f, 0x17, 0x1a, 0x0a, 0x11, 0x07, 0x06, 0x07, 0x06, // ......;......... + 0x05, 0x05, 0x11, 0x0b, 0x14, 0x05, 0x05, 0x0d, 0x09, 0x13, 0x0b, 0x11, 0x0c, 0x1c, 0x10, 0x0b, // ................ + 0x11, 0x06, 0x07, 0x06, 0x05, 0x04, 0x06, 0x0e, 0x0a, 0x17, 0x06, 0x05, 0x0b, 0x09, 0x12, 0x08, // ................ + 0x02, 0xda, 0x07, 0x07, 0x07, 0x10, 0x0a, 0xfe, 0x2a, 0x0a, 0x11, 0x07, 0x07, 0x06, 0x06, 0x07, // ........*....... + 0x07, 0x11, 0x0a, 0x01, 0xd5, 0x0a, 0x11, 0x07, 0x07, 0x07, 0xd6, 0x1b, 0x6e, 0x6e, 0x1b, 0x1b, // ............nn.. + 0x1b, 0x89, 0x1b, 0x1c, 0x1b, 0x1c, 0x53, 0x6e, 0x89, 0x1b, 0x53, 0x1b, 0x89, 0x1b, 0x1c, 0x1b, // ......Sn..S..... + 0x1c, 0x01, 0x09, 0x0a, 0x16, 0x0d, 0x0d, 0x0a, 0x0a, 0x0b, 0x1a, 0x0f, 0x0f, 0x1a, 0x0a, 0x09, // ................ + 0x0a, 0x0d, 0x0d, 0x14, 0x08, 0x09, 0x05, 0x05, 0x06, 0x10, 0x0a, 0x09, 0x0f, 0x05, 0x07, 0x06, // ................ + 0x0d, 0x18, 0x0e, 0x03, 0x05, 0x05, 0x05, 0x10, 0x0a, 0x09, 0x0e, 0x05, 0x05, 0x07, 0x02, 0x08, // ................ + 0x0a, 0x09, 0x04, 0x0a, 0x09, 0x17, 0x0b, 0x0c, 0x06, 0x05, 0x05, 0x0f, 0x09, 0x0a, 0x0e, 0x05, // ................ + 0x04, 0x08, 0x03, 0x08, 0x0a, 0x0a, 0x03, 0x01, 0x07, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x11, 0x14, 0x06, 0x07, 0x0e, // .......<........ + 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, // .+.......#!"&'.. + 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, // =.#"&'..5.467>.; + 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, // .5467>.3!2...... + 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x03, 0xfa, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x09, // 32.............. + 0x08, 0x09, 0x13, 0x0b, 0xfe, 0xae, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xe0, 0x0c, 0x15, 0x08, 0x08, // ................ + 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, 0x08, 0x08, 0x08, 0x15, 0x0b, 0x01, 0x52, 0x0b, 0x13, // .............R.. + 0x09, 0x08, 0x09, 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, 0x02, 0x69, 0xfe, 0xae, 0x0b, 0x13, 0x09, // ..........i..... + 0x08, 0x09, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, 0x09, 0x08, // ................ + 0x09, 0x13, 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, // ....R........... + 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x08, 0x08, 0x08, 0x15, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x0d, 0x00, 0x19, 0x00, 0x23, 0x00, 0x60, 0x00, 0x6c, // ...........#.`.l + 0x00, 0x00, 0x25, 0x15, 0x17, 0x37, 0x35, 0x2f, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, // ..%..75/.#"..... + 0x03, 0x27, 0x2e, 0x01, 0x2b, 0x01, 0x07, 0x17, 0x33, 0x3f, 0x01, 0x35, 0x37, 0x17, 0x33, 0x3f, // .'..+...3?.57.3? + 0x01, 0x35, 0x27, 0x07, 0x15, 0x17, 0x05, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, // .5'............. + 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, // +.......#!"&'..= + 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, // .#"&'..5.467>.;. + 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x33, // 5467>.3!2......3 + 0x32, 0x16, 0x17, 0x07, 0x15, 0x1f, 0x01, 0x33, 0x37, 0x27, 0x23, 0x22, 0x06, 0x0f, 0x01, 0x01, // 2......37'#".... + 0x90, 0x70, 0x70, 0x04, 0x0a, 0xc4, 0x03, 0x05, 0x02, 0x02, 0x02, 0xa9, 0x04, 0x02, 0x05, 0x03, // .pp............. + 0x0e, 0x70, 0x70, 0x0e, 0x0a, 0x04, 0xad, 0x0a, 0xc4, 0x0a, 0x04, 0x70, 0x70, 0x04, 0x02, 0x55, // .pp........pp..U + 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x09, 0x08, 0x09, 0x13, 0x0b, 0xfe, 0xae, 0x0b, // ................ + 0x15, 0x08, 0x08, 0x08, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, // ................ + 0x08, 0x08, 0x08, 0x15, 0x0b, 0x01, 0x52, 0x0b, 0x13, 0x09, 0x08, 0x09, 0xdf, 0x0c, 0x14, 0x09, // ......R......... + 0xd0, 0x04, 0x0a, 0x0e, 0x70, 0x70, 0x0e, 0x03, 0x05, 0x02, 0x04, 0x99, 0x0e, 0x70, 0x70, 0x0e, // ....pp.......pp. + 0x0a, 0x04, 0x02, 0x02, 0x02, 0x05, 0x03, 0x01, 0x89, 0x0a, 0x02, 0x02, 0x70, 0x70, 0x04, 0x0a, // ............pp.. + 0xc4, 0xbb, 0x04, 0x04, 0x0a, 0x0e, 0x70, 0x70, 0x0e, 0x0a, 0x4c, 0x08, 0x15, 0x0b, 0xfe, 0xae, // ......pp..L..... + 0x0b, 0x13, 0x09, 0x08, 0x09, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, // ................ + 0xe0, 0x09, 0x08, 0x09, 0x13, 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xdf, 0x0c, 0x14, // .......R........ + 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x08, 0x08, 0x6f, 0xc4, 0x0a, 0x04, 0x70, // ...........o...p + 0x70, 0x02, 0x02, 0x0a, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x09, // p............... + 0x00, 0x46, 0x00, 0x00, 0x01, 0x37, 0x35, 0x27, 0x07, 0x15, 0x1f, 0x01, 0x33, 0x37, 0x25, 0x3e, // .F...75'....37%> + 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, // .3!2......32.... + 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // .......+.......# + 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, // !"&'..=.#"&'..5. + 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, 0x02, 0x6c, 0x04, 0x70, 0x70, // 467>.;.5467.l.pp + 0x04, 0x0a, 0xc4, 0x0a, 0xfe, 0xc3, 0x08, 0x15, 0x0b, 0x01, 0x52, 0x0b, 0x13, 0x09, 0x08, 0x09, // ..........R..... + 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x09, 0x08, 0x09, 0x13, // ................ + 0x0b, 0xfe, 0xae, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, // ................ + 0x08, 0x15, 0x0c, 0xe0, 0x08, 0x08, 0x02, 0xdd, 0x0a, 0x0e, 0x70, 0x70, 0x0e, 0x0a, 0x04, 0x04, // ..........pp.... + 0xcc, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x08, 0x08, 0x08, 0x15, 0x0b, 0xfe, 0xae, // ................ + 0x0b, 0x13, 0x09, 0x08, 0x09, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, // ................ + 0xe0, 0x09, 0x08, 0x09, 0x13, 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xdf, 0x0c, 0x14, // .......R........ + 0x09, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x09, // ................ + 0x00, 0x46, 0x00, 0x00, 0x01, 0x15, 0x1f, 0x01, 0x33, 0x37, 0x27, 0x23, 0x0f, 0x01, 0x37, 0x11, // .F......37'#..7. + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, // .....+.......#!" + 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // &'..=.#"&'..5.46 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, // 7>.;.5467>.3!2.. + 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x03, 0x19, 0x04, 0x0a, 0x0e, // ....32.......... + 0x70, 0x70, 0x0e, 0x0a, 0x04, 0xe1, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x08, 0x08, 0x08, 0x14, // pp.............. + 0x0c, 0xfe, 0xae, 0x0b, 0x13, 0x09, 0x08, 0x09, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, // ................ + 0x08, 0x15, 0x0c, 0xe0, 0x09, 0x08, 0x09, 0x13, 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, 0x08, // ..........R..... + 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, 0x02, 0x22, 0xc4, 0x0a, 0x04, 0x70, 0x70, 0x04, 0x0a, 0x47, // ......."...pp..G + 0xfe, 0xae, 0x0b, 0x13, 0x09, 0x08, 0x09, 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, // ................ + 0x13, 0x0c, 0xe0, 0x09, 0x08, 0x09, 0x13, 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xe0, // .........R...... + 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, 0x08, 0x08, 0x08, 0x15, 0x0b, // ................ + 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x0d, 0x00, 0x4a, 0x00, 0x00, // .............J.. + 0x25, 0x17, 0x37, 0x35, 0x2f, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x1d, 0x01, 0x01, 0x32, // %.75/.#".......2 + 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, // ...........+.... + 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, // ...#!"&'..=.#"&' + 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, // ..5.467>.;.5467> + 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x01, 0x90, 0x70, 0x70, 0x04, // .3!2......3..pp. + 0x0a, 0xc4, 0x03, 0x05, 0x02, 0x02, 0x02, 0x02, 0x31, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, // ........1....... + 0x08, 0x15, 0x0c, 0xe0, 0x08, 0x08, 0x08, 0x14, 0x0c, 0xfe, 0xae, 0x0b, 0x13, 0x09, 0x08, 0x09, // ................ + 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x09, 0x08, 0x09, 0x13, // ................ + 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xe0, 0x8b, 0x70, 0x70, 0x0e, 0x0a, 0x04, 0x02, // ..R.......pp.... + 0x02, 0x02, 0x05, 0x03, 0x0e, 0x02, 0x16, 0x09, 0x08, 0x09, 0x13, 0x0b, 0xfe, 0xae, 0x0b, 0x15, // ................ + 0x08, 0x08, 0x08, 0xdf, 0x0c, 0x14, 0x09, 0x08, 0x09, 0x09, 0x08, 0x09, 0x13, 0x0c, 0xe0, 0x08, // ................ + 0x08, 0x08, 0x15, 0x0b, 0x01, 0x52, 0x0b, 0x13, 0x09, 0x08, 0x09, 0xe0, 0x0c, 0x15, 0x08, 0x08, // .....R.......... + 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ................ + 0x03, 0xba, 0x00, 0x3c, 0x00, 0x46, 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, // ...<.F...2...... + 0x14, 0x06, 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, // .....+.......#!" + 0x26, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, // &'..=.#"&'..5.46 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, // 7>.;.5467>.3!2.. + 0x1e, 0x01, 0x1d, 0x01, 0x33, 0x05, 0x27, 0x23, 0x07, 0x17, 0x33, 0x3f, 0x01, 0x35, 0x27, 0x03, // ....3.'#..3?.5'. + 0xc1, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, 0x09, 0x08, 0x09, 0x13, // ................ + 0x0b, 0xfe, 0xae, 0x0b, 0x15, 0x08, 0x08, 0x08, 0xe0, 0x0c, 0x13, 0x09, 0x08, 0x09, 0x09, 0x08, // ................ + 0x09, 0x14, 0x0c, 0xdf, 0x08, 0x08, 0x08, 0x15, 0x0b, 0x01, 0x52, 0x0b, 0x13, 0x09, 0x08, 0x09, // ..........R..... + 0xe0, 0xfd, 0x22, 0x0a, 0x0e, 0x70, 0x70, 0x0e, 0x0a, 0x04, 0x04, 0x02, 0xa1, 0x08, 0x08, 0x08, // .."..pp......... + 0x15, 0x0b, 0xfe, 0xae, 0x0b, 0x13, 0x09, 0x08, 0x09, 0xe0, 0x0c, 0x13, 0x09, 0x08, 0x09, 0x09, // ................ + 0x08, 0x09, 0x14, 0x0c, 0xdf, 0x09, 0x08, 0x09, 0x13, 0x0b, 0x01, 0x52, 0x0b, 0x15, 0x08, 0x08, // ...........R.... + 0x08, 0xe0, 0x0c, 0x15, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x15, 0x0c, 0xe0, 0x75, 0x04, 0x70, // .............u.p + 0x70, 0x04, 0x0a, 0xc4, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x09, 0x03, 0xfa, // p............... + 0x03, 0x77, 0x00, 0x1c, 0x00, 0x39, 0x00, 0x00, 0x25, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, // .w...9..%..#!"&' + 0x2e, 0x01, 0x35, 0x11, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, 0x3e, 0x01, // ..5......3!267>. + 0x35, 0x11, 0x14, 0x06, 0x07, 0x13, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, // 5...........#!"& + 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, // '..5.467>.3!2... + 0x01, 0x15, 0x03, 0xea, 0x08, 0x13, 0x0b, 0xfc, 0x78, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x08, 0x07, // ........x....... + 0x08, 0x13, 0x0c, 0x03, 0x88, 0x0b, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x08, 0x08, 0x08, // ................ + 0x13, 0x0b, 0xfc, 0x78, 0x0c, 0x13, 0x08, 0x07, 0x08, 0x08, 0x07, 0x08, 0x13, 0x0c, 0x03, 0x88, // ...x............ + 0x0b, 0x13, 0x08, 0x08, 0x08, 0x18, 0x08, 0x07, 0x07, 0x08, 0x08, 0x13, 0x0b, 0x01, 0x52, 0x07, // ..............R. + 0x10, 0x07, 0x08, 0x07, 0x07, 0x08, 0x07, 0x10, 0x07, 0xfe, 0xae, 0x0b, 0x13, 0x08, 0x03, 0x2a, // ...............* + 0xfe, 0xa5, 0x0b, 0x13, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x13, 0x0b, 0x01, 0x5a, 0x0b, 0x13, // .............Z.. + 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x13, 0x0a, 0x00, 0x02, 0x00, 0x07, 0x00, 0x56, 0x03, 0xf9, // .............V.. + 0x03, 0x2a, 0x00, 0x04, 0x00, 0x20, 0x00, 0x00, 0x01, 0x13, 0x21, 0x13, 0x21, 0x13, 0x16, 0x06, // .*... ....!.!... + 0x07, 0x0e, 0x01, 0x07, 0x21, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x13, 0x06, 0x16, 0x17, 0x1e, // ....!..'..7..... + 0x01, 0x17, 0x21, 0x3f, 0x01, 0x3e, 0x01, 0x27, 0x13, 0x03, 0x93, 0x37, 0xfc, 0x6f, 0x36, 0x03, // ..!?.>.'...7.o6. + 0x24, 0x66, 0x02, 0x05, 0x07, 0x07, 0x11, 0x0a, 0xfc, 0x66, 0x0b, 0x12, 0x06, 0x06, 0x05, 0x02, // $f.......f...... + 0x2c, 0x01, 0x05, 0x05, 0x05, 0x12, 0x0c, 0x03, 0x42, 0x23, 0x02, 0x04, 0x04, 0x01, 0x2c, 0x03, // ,.......B#....,. + 0x2a, 0xfe, 0x8b, 0x01, 0x75, 0xfd, 0x5f, 0x0a, 0x12, 0x08, 0x06, 0x08, 0x01, 0x01, 0x08, 0x06, // *...u._......... + 0x08, 0x12, 0x0a, 0x01, 0x11, 0x05, 0x0b, 0x05, 0x05, 0x09, 0x04, 0x12, 0x03, 0x06, 0x0b, 0x06, // ................ + 0xfe, 0xea, 0x00, 0x00, 0x00, 0x02, 0x00, 0x71, 0x00, 0x09, 0x03, 0x8f, 0x03, 0x77, 0x00, 0x1c, // .......q.....w.. + 0x00, 0x39, 0x00, 0x00, 0x37, 0x11, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x21, 0x32, 0x36, 0x37, // .9..7......3!267 + 0x3e, 0x01, 0x35, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, 0x2e, 0x01, // >.5......#!"&'.. + 0x35, 0x01, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x21, 0x22, 0x26, 0x27, // 5..........#!"&' + 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x71, 0x07, // ..5.467>.3!2..q. + 0x08, 0x08, 0x13, 0x0b, 0x02, 0xb4, 0x0a, 0x13, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x13, 0x0a, // ................ + 0xfd, 0x4c, 0x0b, 0x13, 0x08, 0x08, 0x07, 0x03, 0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x13, 0x0a, // .L.............. + 0xfd, 0x4c, 0x0b, 0x13, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x13, 0x0b, 0x02, 0xb4, 0x0a, 0x13, // .L.............. + 0x08, 0x3e, 0x01, 0x56, 0x09, 0x11, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x11, 0x09, 0xfe, 0xaa, // .>.V............ + 0x0b, 0x13, 0x08, 0x08, 0x07, 0x07, 0x08, 0x08, 0x13, 0x0b, 0x03, 0x29, 0x08, 0x13, 0x0a, 0xfe, // ...........).... + 0xa5, 0x0b, 0x13, 0x08, 0x07, 0x07, 0x07, 0x07, 0x08, 0x13, 0x0b, 0x01, 0x59, 0x0c, 0x13, 0x08, // ............Y... + 0x08, 0x08, 0x08, 0x08, 0x00, 0x02, 0x00, 0x8b, 0x00, 0x56, 0x03, 0x75, 0x03, 0x2a, 0x00, 0x04, // .........V.u.*.. + 0x00, 0x20, 0x00, 0x00, 0x01, 0x13, 0x21, 0x13, 0x21, 0x13, 0x37, 0x3e, 0x01, 0x35, 0x13, 0x16, // . ....!.!.7>.5.. + 0x06, 0x07, 0x0e, 0x01, 0x07, 0x21, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x13, 0x14, 0x16, 0x17, // .....!..'..7.... + 0x1e, 0x01, 0x17, 0x21, 0x37, 0x03, 0x0f, 0x37, 0xfd, 0x77, 0x36, 0x02, 0x1c, 0x31, 0x02, 0x04, // ...!7..7.w6..1.. + 0x03, 0x2c, 0x01, 0x05, 0x06, 0x07, 0x11, 0x0a, 0xfd, 0x6e, 0x0b, 0x11, 0x07, 0x06, 0x04, 0x01, // .,.......n...... + 0x2c, 0x04, 0x05, 0x05, 0x12, 0x0c, 0x02, 0x3a, 0x23, 0x03, 0x2a, 0xfe, 0x8b, 0x01, 0x75, 0xfe, // ,......:#.*...u. + 0x5b, 0x03, 0x06, 0x0b, 0x06, 0xfe, 0xeb, 0x0b, 0x12, 0x07, 0x07, 0x08, 0x01, 0x01, 0x08, 0x07, // [............... + 0x07, 0x12, 0x0b, 0x01, 0x10, 0x05, 0x0b, 0x05, 0x05, 0x09, 0x04, 0x12, 0x00, 0x02, 0x00, 0x06, // ................ + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x28, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x32, 0x1e, 0x02, // .......(./...2.. + 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, // ..........#"..'. + 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x03, 0x23, 0x11, 0x21, 0x35, 0x23, 0x11, // .54>.7>.3.#.!5#. + 0x02, 0x00, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, // ..5aYQ%%8%..%8%% + 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, // QYa55aZR%$8$..$8 + 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x1e, 0x60, 0x01, 0x1c, 0xbc, 0x03, 0xba, 0x13, 0x24, 0x38, // $%RZa5.`......$8 + 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, // $%RZa55aYQ%%8%.. + 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, // %8%%QYa55aZR%$8$ + 0x13, 0xfe, 0xc4, 0xfe, 0x65, 0x52, 0x01, 0x49, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc7, 0x03, 0xfa, // ....eR.I........ + 0x03, 0xb9, 0x00, 0x06, 0x00, 0x35, 0x00, 0x00, 0x01, 0x11, 0x33, 0x35, 0x23, 0x35, 0x23, 0x05, // .....5....35#5#. + 0x16, 0x06, 0x07, 0x33, 0x0e, 0x01, 0x07, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x2b, 0x01, // ...3..........+. + 0x22, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x26, 0x36, // "&/...=...'..7&6 + 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x07, 0x01, 0xbd, 0xa6, 0x6c, 0x3a, // 7>.32.........l: + 0x02, 0x3d, 0x02, 0x50, 0x51, 0x01, 0x22, 0x4c, 0x29, 0x10, 0x11, 0x02, 0x11, 0x27, 0x16, 0xa8, // .=.PQ."L)....'.. + 0x17, 0x28, 0x10, 0x03, 0x0f, 0x10, 0x29, 0x4c, 0x22, 0x50, 0x4f, 0x01, 0x01, 0x4f, 0x50, 0x24, // .(....)L"PO..OP$ + 0x50, 0x57, 0x5e, 0x33, 0x33, 0x5e, 0x57, 0x4f, 0x24, 0x51, 0x4f, 0x01, 0x02, 0xe8, 0xff, 0x00, // PW^33^WO$QO..... + 0x33, 0xcd, 0x80, 0x49, 0x7b, 0x32, 0x16, 0x21, 0x0b, 0xf9, 0x17, 0x29, 0x11, 0x01, 0x0f, 0x0f, // 3..I{2.!...).... + 0x0f, 0x0f, 0x04, 0x10, 0x27, 0x17, 0xf9, 0x0b, 0x21, 0x16, 0x32, 0x7b, 0x49, 0x4a, 0x7b, 0x32, // ....'...!.2{IJ{2 + 0x16, 0x22, 0x17, 0x0b, 0x0b, 0x17, 0x22, 0x16, 0x32, 0x7b, 0x4a, 0x00, 0x00, 0x03, 0x00, 0x06, // ."....".2{J..... + 0xff, 0xc7, 0x03, 0xfa, 0x03, 0xb9, 0x00, 0x2e, 0x00, 0x3e, 0x00, 0x50, 0x00, 0x00, 0x01, 0x16, // .........>.P.... + 0x06, 0x07, 0x33, 0x0e, 0x01, 0x07, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x2b, 0x01, 0x22, // ..3..........+." + 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x26, 0x36, 0x37, // &/...=...'..7&67 + 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x07, 0x25, 0x1e, 0x01, 0x15, 0x14, 0x06, // >.32......%..... + 0x07, 0x0e, 0x01, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x16, 0x17, 0x17, 0x34, 0x26, 0x27, 0x2e, 0x01, // ...+.532...4&'.. + 0x2b, 0x01, 0x11, 0x33, 0x35, 0x33, 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x03, 0xfa, 0x02, 0x50, // +..353.3'>.5...P + 0x51, 0x01, 0x22, 0x4c, 0x29, 0x10, 0x11, 0x02, 0x11, 0x27, 0x16, 0xa8, 0x17, 0x28, 0x10, 0x03, // Q."L)....'...(.. + 0x0f, 0x10, 0x29, 0x4c, 0x22, 0x50, 0x4f, 0x01, 0x01, 0x4f, 0x50, 0x24, 0x50, 0x57, 0x5e, 0x33, // ..)L"PO..OP$PW^3 + 0x33, 0x5e, 0x57, 0x4f, 0x24, 0x51, 0x4f, 0x01, 0xfe, 0x28, 0x05, 0x05, 0x05, 0x05, 0x06, 0x14, // 3^WO$QO..(...... + 0x0e, 0x2a, 0x2a, 0x0e, 0x14, 0x06, 0x45, 0x0d, 0x0d, 0x0c, 0x2b, 0x1e, 0x61, 0x39, 0x28, 0x38, // .**...E...+.a9(8 + 0x46, 0x41, 0x19, 0x19, 0x02, 0x68, 0x49, 0x7b, 0x32, 0x16, 0x21, 0x0b, 0xf9, 0x17, 0x29, 0x11, // FA...hI{2.!...). + 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x04, 0x10, 0x27, 0x17, 0xf9, 0x0b, 0x21, 0x16, 0x32, 0x7b, 0x49, // .......'...!.2{I + 0x4a, 0x7b, 0x32, 0x16, 0x22, 0x17, 0x0b, 0x0b, 0x17, 0x22, 0x16, 0x32, 0x7b, 0x4a, 0x46, 0x03, // J{2."....".2{JF. + 0x0f, 0x0a, 0x0a, 0x0f, 0x05, 0x04, 0x05, 0x4b, 0x04, 0x04, 0x1c, 0x16, 0x21, 0x0a, 0x0a, 0x0b, // .......K....!... + 0xff, 0x00, 0x52, 0x52, 0x5b, 0x09, 0x28, 0x1e, 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ..RR[.(......... + 0x03, 0xba, 0x00, 0x11, 0x00, 0x3a, 0x00, 0x48, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x2b, 0x01, 0x11, // .....:.H.....+.. + 0x33, 0x35, 0x33, 0x17, 0x33, 0x27, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x15, // 353.3'>.54&'7... + 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, // ......#"..'..54> + 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x01, 0x0e, 0x01, 0x2b, 0x01, 0x35, 0x33, // .7>.32......+.53 + 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x02, 0x96, 0x16, 0x49, 0x32, 0xa3, 0x60, 0x43, 0x60, // ..........I2.`C` + 0x78, 0x6d, 0x28, 0x29, 0x16, 0x15, 0xcf, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, // xm()...%8%..%8%% + 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, 0x5a, 0x52, 0x25, 0x24, 0x38, 0x24, 0x13, 0x13, 0x24, 0x38, // QYa55aZR%$8$..$8 + 0x24, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, 0x25, 0xfe, 0xe8, 0x09, 0x23, 0x19, // $%RZa55aYQ%...#. + 0x46, 0x47, 0x43, 0x09, 0x0a, 0x09, 0x09, 0x02, 0x5e, 0x10, 0x10, 0xfe, 0x65, 0x84, 0x84, 0x93, // FGC.....^...e... + 0x0f, 0x3f, 0x30, 0x24, 0x35, 0x11, 0xc9, 0x25, 0x52, 0x5a, 0x61, 0x35, 0x35, 0x61, 0x59, 0x51, // .?0$5..%RZa55aYQ + 0x25, 0x25, 0x38, 0x25, 0x13, 0x13, 0x25, 0x38, 0x25, 0x25, 0x51, 0x59, 0x61, 0x35, 0x35, 0x61, // %%8%..%8%%QYa55a + 0x5a, 0x52, 0x25, 0x24, 0x37, 0x25, 0x13, 0x13, 0x25, 0x37, 0x24, 0xfe, 0x9e, 0x08, 0x08, 0x7b, // ZR%$7%..%7$....{ + 0x0c, 0x07, 0x18, 0x11, 0x10, 0x17, 0x08, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc7, 0x03, 0xfa, // ................ + 0x03, 0xb9, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x01, 0x07, 0x16, 0x06, // .......2........ + 0x07, 0x33, 0x0e, 0x01, 0x07, 0x15, 0x14, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x2b, 0x01, 0x22, 0x26, // .3..........+."& + 0x2f, 0x01, 0x2e, 0x01, 0x3d, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x37, 0x26, 0x36, 0x37, 0x3e, // /...=...'..7&67> + 0x03, 0x33, 0x02, 0x00, 0x33, 0x5e, 0x57, 0x4f, 0x24, 0x51, 0x4f, 0x01, 0x02, 0x50, 0x51, 0x01, // .3..3^WO$QO..PQ. + 0x22, 0x4c, 0x29, 0x10, 0x11, 0x02, 0x11, 0x27, 0x16, 0xa8, 0x17, 0x28, 0x10, 0x03, 0x0f, 0x10, // "L)....'...(.... + 0x29, 0x4c, 0x22, 0x50, 0x4f, 0x01, 0x01, 0x4f, 0x50, 0x24, 0x50, 0x57, 0x5e, 0x33, 0x03, 0xb9, // )L"PO..OP$PW^3.. + 0x0b, 0x17, 0x22, 0x16, 0x32, 0x7b, 0x4a, 0x49, 0x7b, 0x32, 0x16, 0x21, 0x0b, 0xf9, 0x17, 0x29, // ..".2{JI{2.!...) + 0x11, 0x01, 0x0f, 0x0f, 0x0f, 0x0f, 0x04, 0x10, 0x27, 0x17, 0xf9, 0x0b, 0x21, 0x16, 0x32, 0x7b, // ........'...!.2{ + 0x49, 0x4a, 0x7b, 0x32, 0x16, 0x22, 0x17, 0x0b, 0x00, 0x01, 0x00, 0x52, 0xff, 0xc9, 0x03, 0xc8, // IJ{2.".....R.... + 0x03, 0xb9, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x07, 0x17, 0x1e, 0x01, 0x0f, 0x01, 0x0e, // ................ + 0x01, 0x0f, 0x01, 0x0e, 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x2f, 0x01, 0x0e, 0x01, 0x27, 0x2e, 0x01, // ...../.../...'.. + 0x27, 0x26, 0x36, 0x37, 0x3e, 0x03, 0x37, 0x3e, 0x03, 0x17, 0x1e, 0x01, 0x17, 0x16, 0x06, 0x07, // '&67>.7>........ + 0x37, 0x03, 0xa2, 0x13, 0x30, 0x1e, 0x7b, 0x0b, 0x07, 0x06, 0x03, 0x07, 0x19, 0x13, 0x8f, 0x14, // 7...0.{......... + 0x28, 0x16, 0x04, 0x15, 0x21, 0x0b, 0x7b, 0x28, 0x51, 0x27, 0x5d, 0x80, 0x22, 0x26, 0x07, 0x2b, // (...!.{(Q']."&.+ + 0x14, 0x33, 0x3f, 0x4a, 0x2b, 0x2c, 0x56, 0x55, 0x54, 0x29, 0x5e, 0x80, 0x23, 0x26, 0x07, 0x2d, // .3?J+,VUT)^.#&.- + 0x02, 0x02, 0x17, 0x24, 0x41, 0x1d, 0xd5, 0x14, 0x2a, 0x17, 0x03, 0x15, 0x1f, 0x0a, 0x53, 0x0c, // ...$A...*.....S. + 0x07, 0x05, 0x03, 0x06, 0x1a, 0x13, 0xd5, 0x0c, 0x0a, 0x02, 0x04, 0x42, 0x3f, 0x3e, 0x90, 0x51, // ...........B?>.Q + 0x25, 0x44, 0x3e, 0x38, 0x1a, 0x18, 0x25, 0x17, 0x0a, 0x02, 0x02, 0x42, 0x3f, 0x3d, 0x91, 0x53, // %D>8..%....B?=.S + 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x38, 0xff, 0xc9, 0x03, 0xae, 0x03, 0xb9, 0x00, 0x2e, // .......8........ + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x17, 0x06, 0x26, 0x27, 0x07, 0x0e, 0x01, // ...........&'... + 0x07, 0x23, 0x06, 0x26, 0x2f, 0x01, 0x2e, 0x01, 0x2f, 0x01, 0x26, 0x36, 0x3f, 0x01, 0x2e, 0x01, // .#.&/.../.&6?... + 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x17, 0x03, 0xa1, // '..7>.76........ + 0x2c, 0x07, 0x26, 0x21, 0x81, 0x5e, 0x01, 0x27, 0x51, 0x28, 0x7b, 0x0c, 0x22, 0x16, 0x03, 0x16, // ,.&!.^.'Q({."... + 0x29, 0x12, 0x90, 0x13, 0x1a, 0x06, 0x01, 0x05, 0x06, 0x0b, 0x7b, 0x1e, 0x30, 0x13, 0x2b, 0x06, // ).........{.0.+. + 0x25, 0x22, 0x80, 0x5d, 0x2a, 0x54, 0x55, 0x56, 0x2b, 0x2c, 0x4b, 0x3f, 0x32, 0x14, 0x02, 0x64, // %".]*TUV+,K?2..d + 0x52, 0x91, 0x3e, 0x3f, 0x41, 0x03, 0x01, 0x02, 0x0a, 0x0b, 0xd5, 0x14, 0x1a, 0x06, 0x04, 0x06, // R.>?A........... + 0x0a, 0x53, 0x0c, 0x20, 0x14, 0x05, 0x16, 0x28, 0x14, 0xd4, 0x1e, 0x41, 0x23, 0x52, 0x90, 0x3e, // .S. ...(...A#R.> + 0x3f, 0x42, 0x03, 0x02, 0x0a, 0x18, 0x25, 0x19, 0x19, 0x37, 0x3e, 0x44, 0x25, 0x00, 0x00, 0x00, // ?B....%..7>D%... + 0x00, 0x01, 0x00, 0x07, 0x00, 0x0b, 0x02, 0x2e, 0x02, 0x4a, 0x00, 0x1c, 0x00, 0x00, 0x13, 0x14, // .........J...... + 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x35, 0x33, 0x15, 0x27, 0x22, 0x26, 0x27, 0x2e, // ........53.'"&'. + 0x01, 0x27, 0x2e, 0x03, 0x35, 0x23, 0x37, 0x17, 0x23, 0xa7, 0x33, 0x32, 0x18, 0x35, 0x1d, 0x16, // .'..5#7.#.32.5.. + 0x2e, 0x19, 0x5b, 0x2e, 0x24, 0x45, 0x21, 0x30, 0x55, 0x26, 0x20, 0x2f, 0x20, 0x10, 0x45, 0x72, // ..[.$E!0U& / .Er + 0x72, 0x44, 0x01, 0xc1, 0x48, 0x7a, 0x33, 0x18, 0x25, 0x0d, 0x09, 0x0c, 0x03, 0x45, 0xa4, 0x02, // rD..Hz3.%....E.. + 0x0a, 0x0a, 0x0f, 0x35, 0x26, 0x20, 0x47, 0x4d, 0x55, 0x2d, 0x89, 0x89, 0x00, 0x01, 0x01, 0xcf, // ...5& GMU-...... + 0x00, 0x0b, 0x03, 0xf6, 0x02, 0x49, 0x00, 0x1d, 0x00, 0x00, 0x25, 0x35, 0x33, 0x15, 0x3e, 0x01, // .....I....%53.>. + 0x37, 0x3e, 0x01, 0x35, 0x23, 0x37, 0x17, 0x23, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, // 7>.5#7.#......#" + 0x26, 0x27, 0x2e, 0x01, 0x35, 0x01, 0xcf, 0x5b, 0x3a, 0x64, 0x2a, 0x32, 0x32, 0x44, 0x72, 0x72, // &'..5..[:d*22Drr + 0x45, 0x0f, 0x20, 0x2f, 0x20, 0x20, 0x47, 0x4d, 0x55, 0x2d, 0x0a, 0x10, 0x06, 0x07, 0x07, 0x39, // E. / GMU-.....9 + 0x75, 0x45, 0x07, 0x31, 0x2a, 0x33, 0x7a, 0x48, 0x89, 0x89, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, // uE.1*3zH...TNF + 0x2f, 0x20, 0x10, 0x07, 0x06, 0x07, 0x10, 0x0a, 0x00, 0x01, 0x01, 0x79, 0x00, 0x0b, 0x03, 0xb6, // / .........y.... + 0x03, 0xba, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, // ...-............ + 0x03, 0x23, 0x07, 0x35, 0x33, 0x15, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x2f, 0x01, // .#.53.>.7>.54&/. + 0x33, 0x2e, 0x01, 0x23, 0x15, 0x27, 0x37, 0x15, 0x32, 0x1e, 0x02, 0x17, 0x15, 0x33, 0x03, 0x32, // 3..#.'7.2....3.2 + 0x05, 0x20, 0x30, 0x1f, 0x10, 0x10, 0x1f, 0x30, 0x20, 0x1f, 0x47, 0x4e, 0x54, 0x2e, 0x2d, 0x5b, // . 0....0 .GNT.-[ + 0x39, 0x64, 0x2a, 0x33, 0x32, 0x32, 0x33, 0x05, 0x01, 0x32, 0x79, 0x46, 0x88, 0x88, 0x2c, 0x53, // 9d*3223..2yF..,S + 0x4b, 0x46, 0x20, 0x01, 0x02, 0xfc, 0x06, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x2e, 0x54, 0x4d, 0x47, // KF .... FMT..TMG + 0x20, 0x20, 0x2f, 0x20, 0x0f, 0x02, 0xa8, 0x49, 0x07, 0x31, 0x2a, 0x33, 0x7a, 0x48, 0x48, 0x7a, // / ...I.1*3zHHz + 0x32, 0x06, 0x30, 0x2f, 0x44, 0x72, 0x72, 0x44, 0x0f, 0x1f, 0x2d, 0x1e, 0x01, 0x00, 0x00, 0x00, // 2.0/DrrD..-..... + 0x00, 0x01, 0x00, 0x4c, 0x00, 0x0b, 0x02, 0x89, 0x03, 0xba, 0x00, 0x28, 0x00, 0x00, 0x01, 0x35, // ...L.......(...5 + 0x17, 0x07, 0x35, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x35, // ..5"...........5 + 0x33, 0x15, 0x27, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, // 3.'"..'..54>.7>. + 0x33, 0x02, 0x00, 0x89, 0x89, 0x48, 0x7a, 0x32, 0x32, 0x33, 0x33, 0x32, 0x2a, 0x63, 0x3a, 0x5b, // 3....Hz22332*c:[ + 0x2e, 0x2d, 0x55, 0x4d, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, // .-UMF / .. / F + 0x4d, 0x55, 0x2d, 0x03, 0x76, 0x44, 0x72, 0x72, 0x44, 0x32, 0x33, 0x32, 0x7a, 0x48, 0x48, 0x7a, // MU-.vDrrD232zHHz + 0x33, 0x2a, 0x31, 0x07, 0x49, 0xa8, 0x02, 0x0f, 0x20, 0x2f, 0x20, 0x20, 0x47, 0x4d, 0x54, 0x2e, // 3*1.I... / GMT. + 0x2e, 0x54, 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x49, // .TMF 0 .......I + 0xff, 0xc9, 0x02, 0x87, 0x01, 0xf0, 0x00, 0x1d, 0x00, 0x00, 0x13, 0x15, 0x23, 0x1e, 0x01, 0x17, // ............#... + 0x1e, 0x01, 0x33, 0x35, 0x17, 0x07, 0x35, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x36, // ..35..5"..'..546 + 0x37, 0x3e, 0x01, 0x3b, 0x01, 0xec, 0x44, 0x06, 0x31, 0x2b, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x2e, // 7>.;..D.1+2zH... + 0x54, 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, 0x10, 0x07, 0x07, 0x06, 0x10, 0x0a, 0x75, 0x01, 0xf0, // TMF 0 ......u.. + 0x5b, 0x3a, 0x64, 0x2a, 0x32, 0x32, 0x44, 0x72, 0x72, 0x45, 0x0f, 0x20, 0x2f, 0x20, 0x20, 0x47, // [:d*22DrrE. / G + 0x4d, 0x55, 0x2d, 0x0a, 0x10, 0x06, 0x07, 0x07, 0x00, 0x01, 0x00, 0x4c, 0x01, 0x39, 0x03, 0xfa, // MU-........L.9.. + 0x03, 0x76, 0x00, 0x2c, 0x00, 0x00, 0x13, 0x23, 0x37, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x37, // .v.,...#74>.7>.7 + 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x33, 0x07, 0x27, 0x33, 0x34, 0x26, // >.32......3.'34& + 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x33, 0x15, 0xf3, // '..#"........3.. + 0xa7, 0x01, 0x10, 0x20, 0x30, 0x1f, 0x26, 0x56, 0x2f, 0x21, 0x45, 0x24, 0x2e, 0x54, 0x4e, 0x47, // ... 0.&V/!E$.TNG + 0x1f, 0x20, 0x30, 0x1f, 0x10, 0x44, 0x72, 0x72, 0x45, 0x32, 0x33, 0x32, 0x7b, 0x48, 0x25, 0x45, // . 0..DrrE232{H%E + 0x1f, 0x1e, 0x35, 0x17, 0x2b, 0x31, 0x07, 0x48, 0x01, 0x94, 0x2e, 0x2d, 0x55, 0x4d, 0x46, 0x20, // ..5.+1.H...-UMF + 0x26, 0x35, 0x10, 0x0a, 0x0a, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, 0x55, 0x2d, 0x89, 0x89, // &5.... / FMU-.. + 0x48, 0x7a, 0x32, 0x32, 0x33, 0x0e, 0x0d, 0x0d, 0x25, 0x18, 0x2a, 0x63, 0x3a, 0x5b, 0x00, 0x00, // Hz223...%.*c:[.. + 0x00, 0x01, 0x00, 0x4c, 0x00, 0x0b, 0x03, 0xfa, 0x02, 0x49, 0x00, 0x28, 0x00, 0x00, 0x13, 0x27, // ...L.....I.(...' + 0x33, 0x15, 0x23, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x3f, // 3.#......3267>.? + 0x01, 0x23, 0x37, 0x17, 0x23, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, // .#7.#......#"..' + 0x2e, 0x01, 0x2f, 0x01, 0x4d, 0x01, 0xa7, 0x48, 0x04, 0x08, 0x30, 0x26, 0x33, 0x7a, 0x47, 0x48, // ../.M..H..0&3zGH + 0x7b, 0x32, 0x27, 0x2f, 0x09, 0x06, 0x45, 0x72, 0x72, 0x44, 0x05, 0x09, 0x3d, 0x34, 0x1f, 0x47, // {2'/..ErrD..=4.G + 0x4e, 0x54, 0x2e, 0x2d, 0x54, 0x4e, 0x46, 0x20, 0x33, 0x3e, 0x0a, 0x04, 0x01, 0xc0, 0x2e, 0x5c, // NT.-TNF 3>...... + 0x15, 0x33, 0x59, 0x26, 0x32, 0x33, 0x33, 0x32, 0x26, 0x59, 0x33, 0x43, 0x89, 0x89, 0x43, 0x46, // .3Y&2332&Y3C..CF + 0x79, 0x34, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x34, 0x79, 0x46, 0x43, 0x00, 0x00, // y4 / .. / 4yFC.. + 0x00, 0x01, 0x00, 0x4c, 0x01, 0x94, 0x02, 0x8a, 0x03, 0xbb, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x07, // ...L............ + 0x35, 0x22, 0x06, 0x0f, 0x01, 0x0e, 0x01, 0x07, 0x33, 0x15, 0x23, 0x37, 0x34, 0x36, 0x37, 0x3e, // 5"......3.#7467> + 0x01, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x3e, 0x01, 0x3f, 0x01, 0x35, 0x17, 0x02, 0x8a, 0x89, 0x45, // .7>.?.>.?.5....E + 0x77, 0x31, 0x07, 0x2a, 0x31, 0x07, 0x45, 0xa4, 0x01, 0x27, 0x27, 0x0b, 0x18, 0x0e, 0x18, 0x34, // w1.*1.E..''....4 + 0x1c, 0x02, 0x22, 0x48, 0x27, 0x3a, 0x89, 0x03, 0x49, 0x72, 0x44, 0x2f, 0x2f, 0x07, 0x2a, 0x63, // .."H':..IrD//.*c + 0x3a, 0x5b, 0x2e, 0x47, 0x7d, 0x36, 0x10, 0x1d, 0x0e, 0x18, 0x27, 0x0f, 0x01, 0x12, 0x16, 0x05, // :[.G}6....'..... + 0x03, 0x45, 0x72, 0x00, 0x00, 0x01, 0x01, 0x77, 0xff, 0xc9, 0x03, 0xb5, 0x01, 0xf0, 0x00, 0x1d, // .Er....w........ + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x15, 0x27, 0x37, // ............#.'7 + 0x15, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x23, 0x35, 0x33, 0x32, 0x16, 0x17, 0x03, 0xa8, 0x06, // .267>.7#532..... + 0x07, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x47, 0x4d, 0x54, 0x2e, 0x89, 0x89, 0x48, 0x7a, 0x33, 0x2a, // .. / GMT...Hz3* + 0x31, 0x07, 0x49, 0x79, 0x0a, 0x10, 0x07, 0x01, 0xe2, 0x06, 0x10, 0x0a, 0x2d, 0x55, 0x4d, 0x47, // 1.Iy........-UMG + 0x20, 0x1f, 0x30, 0x20, 0x0f, 0x45, 0x72, 0x72, 0x44, 0x32, 0x32, 0x2a, 0x64, 0x3a, 0x5b, 0x07, // .0 .ErrD22*d:[. + 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0b, 0x03, 0xb6, 0x02, 0x49, 0x00, 0x2a, // .............I.* + 0x00, 0x00, 0x25, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x23, 0x35, 0x33, 0x0f, 0x01, 0x0e, // ..%267>.?.#53... + 0x01, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x01, 0x2f, 0x01, 0x23, 0x37, 0x17, // ....#"..'../.#7. + 0x23, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x33, 0x02, 0x00, 0x48, 0x7b, 0x32, 0x26, // #........3..H{2& + 0x30, 0x09, 0x03, 0x49, 0xa8, 0x01, 0x05, 0x09, 0x3d, 0x34, 0x20, 0x46, 0x4e, 0x54, 0x2e, 0x2d, // 0..I....=4 FNT.- + 0x55, 0x4d, 0x46, 0x20, 0x34, 0x3d, 0x0a, 0x04, 0x45, 0x72, 0x72, 0x44, 0x03, 0x03, 0x09, 0x30, // UMF 4=..ErrD...0 + 0x26, 0x32, 0x7a, 0x48, 0x67, 0x32, 0x32, 0x26, 0x59, 0x33, 0x15, 0x5b, 0x2d, 0x43, 0x46, 0x79, // &2zHg22&Y3.[-CFy + 0x34, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x34, 0x79, 0x46, 0x43, 0x89, 0x89, 0x12, // 4 / .. / 4yFC... + 0x21, 0x10, 0x33, 0x59, 0x26, 0x32, 0x32, 0x00, 0x00, 0x01, 0x00, 0x07, 0x01, 0x39, 0x03, 0xb6, // !.3Y&22......9.. + 0x03, 0x76, 0x00, 0x28, 0x00, 0x00, 0x01, 0x23, 0x35, 0x33, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x23, // .v.(...#53..'..# + 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x33, 0x07, 0x27, 0x33, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, // ".....3.'34>.7>. + 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x17, 0x03, 0xb6, 0xa8, 0x49, 0x06, 0x32, 0x2a, // 32..........I.2* + 0x32, 0x7b, 0x48, 0x48, 0x7a, 0x32, 0x32, 0x33, 0x44, 0x72, 0x72, 0x45, 0x10, 0x20, 0x2f, 0x20, // 2{HHz223DrrE. / + 0x20, 0x46, 0x4d, 0x55, 0x2d, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x01, 0x01, // FMU-.TNF / ... + 0x94, 0x5b, 0x3a, 0x63, 0x2a, 0x32, 0x33, 0x33, 0x32, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x2d, 0x55, // .[:c*23322zH..-U + 0x4d, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, 0x55, 0x2d, // MF / .. / FMU- + 0x2e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x76, 0x01, 0x94, 0x03, 0xb5, 0x03, 0xbb, 0x00, 0x18, // .......v........ + 0x00, 0x00, 0x01, 0x23, 0x35, 0x33, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x23, 0x15, 0x27, 0x37, 0x15, // ...#53..'..#.'7. + 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x17, 0x03, 0xb5, 0xa8, 0x49, 0x07, 0x31, 0x2a, 0x33, // 2..........I.1*3 + 0x7a, 0x48, 0x89, 0x89, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x01, 0x01, 0x94, // zH...TNF / .... + 0x5b, 0x3a, 0x63, 0x2a, 0x32, 0x33, 0x44, 0x72, 0x72, 0x45, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, // [:c*23DrrE. / F + 0x4d, 0x55, 0x2d, 0x2e, 0x00, 0x01, 0x01, 0x76, 0xff, 0xc9, 0x03, 0xb4, 0x03, 0x78, 0x00, 0x2b, // MU-....v.....x.+ + 0x00, 0x00, 0x01, 0x15, 0x23, 0x35, 0x17, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, // ....#5.2........ + 0x02, 0x0f, 0x01, 0x23, 0x0e, 0x03, 0x23, 0x15, 0x27, 0x37, 0x15, 0x32, 0x36, 0x3f, 0x01, 0x3e, // ...#..#.'7.26?.> + 0x01, 0x35, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x02, 0x2d, 0x5c, 0x2e, 0x2e, 0x54, 0x4e, 0x46, // .54&'..'.-...TNF + 0x20, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x06, 0x01, 0x1f, 0x46, 0x4c, 0x52, 0x2c, // / .. / ...FLR, + 0x89, 0x89, 0x46, 0x77, 0x32, 0x06, 0x32, 0x32, 0x32, 0x32, 0x2a, 0x64, 0x39, 0x03, 0x18, 0x48, // ..Fw2.2222*d9..H + 0xa8, 0x01, 0x10, 0x20, 0x30, 0x20, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x2d, 0x55, 0x4d, 0x47, 0x20, // ... 0 FMT.-UMG + 0x06, 0x1e, 0x2d, 0x1e, 0x0f, 0x45, 0x72, 0x72, 0x44, 0x2f, 0x2f, 0x06, 0x33, 0x7a, 0x48, 0x48, // ..-..ErrD//.3zHH + 0x7a, 0x32, 0x2b, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4c, 0xff, 0xc9, 0x02, 0x89, // z2+1.......L.... + 0x03, 0x78, 0x00, 0x28, 0x00, 0x00, 0x01, 0x37, 0x15, 0x23, 0x35, 0x0e, 0x01, 0x07, 0x0e, 0x01, // .x.(...7.#5..... + 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, 0x35, 0x17, 0x07, 0x35, 0x22, 0x2e, 0x02, 0x27, 0x2e, // ......35..5"..'. + 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x02, 0x00, 0x2e, 0x5b, 0x3a, 0x63, 0x2a, // .54>.7>.3...[:c* + 0x32, 0x33, 0x33, 0x32, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x2d, 0x55, 0x4d, 0x46, 0x20, 0x20, 0x2f, // 23322zH..-UMF / + 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, 0x55, 0x2d, 0x03, 0x77, 0x01, 0xa8, 0x48, // .. / FMU-.w..H + 0x06, 0x31, 0x2b, 0x32, 0x7a, 0x48, 0x48, 0x7a, 0x33, 0x32, 0x32, 0x44, 0x72, 0x72, 0x45, 0x0f, // .1+2zHHz322DrrE. + 0x20, 0x30, 0x1f, 0x20, 0x47, 0x4d, 0x55, 0x2d, 0x2e, 0x54, 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, // 0. GMU-.TMF 0 + 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x01, 0x39, 0x02, 0x2e, 0x03, 0x77, 0x00, 0x1c, // .........9...w.. + 0x00, 0x00, 0x01, 0x35, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x33, 0x07, 0x27, // ...5.........3.' + 0x33, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x37, 0x15, 0x23, 0x01, 0xd3, // 34>.7>.7>.37.#.. + 0x19, 0x2e, 0x16, 0x1d, 0x35, 0x18, 0x32, 0x33, 0x44, 0x72, 0x72, 0x45, 0x10, 0x20, 0x2f, 0x20, // ....5.23DrrE. / + 0x26, 0x55, 0x30, 0x21, 0x45, 0x24, 0x2e, 0x5b, 0x02, 0xd0, 0x48, 0x03, 0x0c, 0x09, 0x0d, 0x25, // &U0!E$.[..H....% + 0x18, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x2d, 0x55, 0x4d, 0x46, 0x20, 0x26, 0x35, 0x10, 0x0a, 0x0a, // .2zH..-UMF &5... + 0x01, 0xa7, 0x00, 0x00, 0x00, 0x01, 0x01, 0xd2, 0x01, 0x39, 0x03, 0xf8, 0x03, 0x76, 0x00, 0x1d, // .........9...v.. + 0x00, 0x00, 0x01, 0x2e, 0x01, 0x27, 0x15, 0x23, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, // .....'.#5467>.32 + 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x33, 0x07, 0x27, 0x33, 0x34, 0x26, 0x27, 0x02, 0xf4, 0x2a, // ......3.'34&'..* + 0x64, 0x39, 0x5b, 0x06, 0x07, 0x06, 0x10, 0x0a, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, // d9[......TNF / + 0x10, 0x44, 0x72, 0x72, 0x44, 0x32, 0x32, 0x02, 0xb6, 0x2a, 0x31, 0x07, 0x48, 0x79, 0x09, 0x10, // .DrrD22..*1.Hy.. + 0x07, 0x06, 0x07, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, 0x55, 0x2d, 0x89, 0x89, 0x48, 0x7a, // .... / FMU-..Hz + 0x32, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0b, 0x03, 0x12, 0x02, 0xd3, 0x00, 0x31, // 2..............1 + 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x33, // ...2...........3 + 0x15, 0x27, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x23, 0x37, 0x17, 0x23, 0x14, 0x16, 0x17, // .'"..'..5#7.#... + 0x1e, 0x01, 0x17, 0x35, 0x33, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, // ...53..'..5467>. + 0x33, 0x02, 0x00, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x27, 0x5e, 0x37, 0x28, 0x2e, 0x2d, // 3..9a((((('^7(.- + 0x55, 0x4d, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x45, 0x72, 0x72, 0x44, 0x33, 0x32, 0x2a, 0x63, // UMF / .ErrD32*c + 0x3a, 0x28, 0x38, 0x5e, 0x27, 0x27, 0x28, 0x28, 0x27, 0x28, 0x61, 0x39, 0x02, 0xd3, 0x28, 0x28, // :(8^''(('(a9..(( + 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x26, 0x28, 0x02, 0xa4, 0x02, 0x0f, 0x20, 0x2f, 0x20, 0x20, // (a99a(&(.... / + 0x47, 0x4d, 0x55, 0x2d, 0x89, 0x89, 0x48, 0x7a, 0x33, 0x2a, 0x31, 0x07, 0x46, 0x01, 0x28, 0x26, // GMU-..Hz3*1.F.(& + 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x00, 0x01, 0x00, 0xeb, 0x00, 0x0b, 0x03, 0xf6, // (a99a(((........ + 0x02, 0xd1, 0x00, 0x36, 0x00, 0x00, 0x13, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, // ...6...467>.32.. + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x33, 0x15, 0x3e, 0x01, 0x37, 0x3e, 0x01, // .........3.>.7>. + 0x35, 0x23, 0x37, 0x17, 0x23, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x27, 0x2e, // 5#7.#......#"&'. + 0x01, 0x3d, 0x01, 0x33, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0xeb, 0x28, 0x28, 0x28, 0x61, 0x39, // .=.3..'..5.(((a9 + 0x39, 0x61, 0x28, 0x28, 0x27, 0x27, 0x28, 0x27, 0x5e, 0x37, 0x27, 0x3a, 0x64, 0x2a, 0x32, 0x32, // 9a((''('^7':d*22 + 0x44, 0x72, 0x72, 0x45, 0x0f, 0x20, 0x2f, 0x20, 0x20, 0x47, 0x4d, 0x55, 0x2d, 0x0a, 0x10, 0x06, // DrrE. / GMU-... + 0x07, 0x07, 0x28, 0x37, 0x5e, 0x27, 0x28, 0x28, 0x01, 0xc0, 0x39, 0x61, 0x28, 0x28, 0x27, 0x27, // ..(7^'((..9a(('' + 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, 0x01, 0x45, 0x07, 0x31, 0x2a, 0x33, 0x7a, // ((a99a('(.E.1*3z + 0x48, 0x89, 0x89, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x07, 0x06, 0x07, 0x10, // H...TNF / ..... + 0x0a, 0x75, 0x01, 0x28, 0x27, 0x28, 0x61, 0x39, 0x00, 0x01, 0x00, 0xf0, 0x00, 0x0b, 0x03, 0xb6, // .u.('(a9........ + 0x03, 0xba, 0x00, 0x44, 0x00, 0x00, 0x01, 0x15, 0x33, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, // ...D....3....... + 0x07, 0x0e, 0x03, 0x23, 0x07, 0x35, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, // ...#.5..'..5467> + 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x15, 0x3e, // .32............> + 0x01, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x2f, 0x01, 0x33, 0x2e, 0x01, 0x23, 0x15, 0x27, 0x37, // .7>.54&/.3..#.'7 + 0x15, 0x32, 0x1e, 0x02, 0x17, 0x03, 0x31, 0x01, 0x05, 0x20, 0x30, 0x1f, 0x10, 0x10, 0x1f, 0x30, // .2....1.. 0....0 + 0x20, 0x1f, 0x47, 0x4e, 0x54, 0x2e, 0x2d, 0x2a, 0x4b, 0x1f, 0x28, 0x28, 0x28, 0x28, 0x27, 0x61, // .GNT.-*K.(((('a + 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x4a, 0x2a, 0x39, 0x64, 0x2a, 0x33, 0x32, // 99a((((( J*9d*32 + 0x32, 0x33, 0x05, 0x01, 0x32, 0x79, 0x46, 0x88, 0x88, 0x2d, 0x52, 0x4b, 0x46, 0x20, 0x02, 0xfd, // 23..2yF..-RKF .. + 0x01, 0x06, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x2e, 0x54, 0x4d, 0x47, 0x20, 0x20, 0x2f, 0x20, 0x0f, // .. FMT..TMG / . + 0x02, 0xa8, 0x06, 0x26, 0x20, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, // ...& (a99a(((((( + 0x61, 0x39, 0x39, 0x61, 0x28, 0x20, 0x26, 0x06, 0x49, 0x07, 0x31, 0x2a, 0x33, 0x7a, 0x48, 0x48, // a99a( &.I.1*3zHH + 0x7a, 0x32, 0x06, 0x30, 0x2f, 0x44, 0x72, 0x72, 0x44, 0x0f, 0x1f, 0x2d, 0x1e, 0x00, 0x00, 0x00, // z2.0/DrrD..-.... + 0x00, 0x01, 0x00, 0x4c, 0x00, 0x0b, 0x03, 0x12, 0x03, 0xba, 0x00, 0x3f, 0x00, 0x00, 0x13, 0x34, // ...L.......?...4 + 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x35, 0x17, 0x07, 0x35, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x15, // >.7>.35..5"..... + 0x14, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x35, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, // ......5..'..5467 + 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x15, // >.32............ + 0x27, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x4c, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, // '"..'..5L. / FM + 0x55, 0x2d, 0x89, 0x89, 0x48, 0x7a, 0x32, 0x32, 0x33, 0x33, 0x32, 0x2a, 0x63, 0x3a, 0x2b, 0x4a, // U-..Hz22332*c:+J + 0x20, 0x27, 0x28, 0x28, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, // '(('(a99a((((( + 0x4a, 0x2a, 0x2e, 0x2d, 0x55, 0x4d, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x01, 0xc1, 0x2e, 0x54, // J*.-UMF / ....T + 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, 0x10, 0x44, 0x72, 0x72, 0x44, 0x32, 0x33, 0x32, 0x7a, 0x48, // MF 0 .DrrD232zH + 0x48, 0x7a, 0x33, 0x2a, 0x31, 0x07, 0x49, 0x06, 0x26, 0x20, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, // Hz3*1.I.& (a99a( + 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x20, 0x26, 0x06, 0xa8, 0x02, 0x0f, // (((((a99a( &.... + 0x20, 0x2f, 0x20, 0x20, 0x47, 0x4d, 0x54, 0x2e, 0x00, 0x01, 0x00, 0x49, 0xff, 0xc9, 0x03, 0x10, // / GMT....I.... + 0x02, 0xd4, 0x00, 0x36, 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, // ...6...........# + 0x22, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x15, 0x23, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x33, 0x35, 0x17, // "&'..'.#.....35. + 0x07, 0x35, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3b, 0x01, // .5"..'..5467>.;. + 0x15, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x02, 0xc0, 0x28, 0x28, 0x28, 0x28, // .>.7>.32....(((( + 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x27, 0x02, 0x44, 0x06, 0x31, 0x2b, 0x32, 0x7a, 0x48, // (a99a(''.D.1+2zH + 0x89, 0x89, 0x2e, 0x54, 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, 0x10, 0x07, 0x07, 0x06, 0x10, 0x0a, // ...TMF 0 ...... + 0x75, 0x02, 0x27, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x02, 0x84, 0x28, 0x61, 0x39, 0x39, // u.''(a99a(..(a99 + 0x61, 0x28, 0x27, 0x28, 0x28, 0x27, 0x27, 0x5e, 0x37, 0x27, 0x3a, 0x64, 0x2a, 0x32, 0x32, 0x44, // a('((''^7':d*22D + 0x72, 0x72, 0x45, 0x0f, 0x20, 0x2f, 0x20, 0x20, 0x47, 0x4d, 0x55, 0x2d, 0x0a, 0x10, 0x06, 0x07, // rrE. / GMU-.... + 0x07, 0x28, 0x37, 0x5e, 0x27, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4c, // .(7^'((((......L + 0x00, 0xb0, 0x03, 0xfa, 0x03, 0x77, 0x00, 0x3f, 0x00, 0x00, 0x13, 0x3e, 0x03, 0x33, 0x32, 0x1e, // .....w.?...>.32. + 0x02, 0x17, 0x1e, 0x03, 0x15, 0x33, 0x07, 0x27, 0x33, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x23, 0x22, // .....3.'34&'..#" + 0x06, 0x07, 0x0e, 0x01, 0x07, 0x33, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, // .....3>.7>.32... + 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x23, 0x37, // .......#"&'..'#7 + 0x34, 0x3e, 0x02, 0x37, 0xcc, 0x20, 0x46, 0x4e, 0x54, 0x2d, 0x2e, 0x54, 0x4e, 0x47, 0x1f, 0x20, // 4>.7. FNT-.TNG. + 0x30, 0x1f, 0x10, 0x44, 0x72, 0x72, 0x45, 0x32, 0x33, 0x32, 0x7b, 0x48, 0x47, 0x7a, 0x32, 0x2b, // 0..DrrE232{HGz2+ + 0x31, 0x07, 0x48, 0x07, 0x26, 0x20, 0x28, 0x60, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, // 1.H.& (`99a((((( + 0x28, 0x61, 0x39, 0x39, 0x60, 0x28, 0x20, 0x26, 0x07, 0xa7, 0x01, 0x10, 0x20, 0x30, 0x1f, 0x02, // (a99`( &.... 0.. + 0xf7, 0x20, 0x30, 0x20, 0x10, 0x10, 0x20, 0x30, 0x20, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x89, 0x89, // . 0 .. 0 FMT... + 0x48, 0x7a, 0x32, 0x33, 0x32, 0x32, 0x33, 0x2a, 0x63, 0x39, 0x2a, 0x4a, 0x20, 0x28, 0x28, 0x28, // Hz23223*c9*J ((( + 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x4a, 0x2a, 0x2e, 0x2e, // ((a99a((((( J*.. + 0x54, 0x4d, 0x46, 0x20, 0x00, 0x01, 0x00, 0x4c, 0x00, 0x0b, 0x03, 0xfa, 0x02, 0xd1, 0x00, 0x3f, // TMF ...L.......? + 0x00, 0x00, 0x01, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, // ...2..........#" + 0x26, 0x27, 0x2e, 0x01, 0x27, 0x23, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x33, 0x32, 0x36, 0x37, 0x3e, // &'..'#.....3267> + 0x01, 0x35, 0x23, 0x37, 0x17, 0x23, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, // .5#7.#......#".. + 0x27, 0x2e, 0x03, 0x35, 0x27, 0x33, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x33, 0x02, 0x01, 0x39, 0x61, // '..5'3>.7>.3..9a + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x27, 0x20, 0x27, 0x06, 0x48, 0x07, // ((((((a99a' '.H. + 0x31, 0x2a, 0x33, 0x7a, 0x47, 0x48, 0x7b, 0x32, 0x33, 0x32, 0x45, 0x72, 0x72, 0x44, 0x10, 0x1f, // 1*3zGH{232ErrD.. + 0x30, 0x20, 0x1f, 0x47, 0x4e, 0x54, 0x2e, 0x2d, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, // 0 .GNT.-TNF / . + 0x01, 0xa7, 0x06, 0x27, 0x1f, 0x28, 0x61, 0x39, 0x02, 0xd1, 0x27, 0x28, 0x28, 0x61, 0x39, 0x39, // ...'.(a9..'((a99 + 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x4a, 0x2a, 0x39, 0x64, 0x2a, 0x32, 0x32, 0x32, 0x32, // a((((( J*9d*2222 + 0x33, 0x7a, 0x48, 0x89, 0x89, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, // 3zH...TNF / .. + 0x2f, 0x20, 0x20, 0x46, 0x4e, 0x54, 0x2e, 0x2e, 0x2a, 0x4a, 0x20, 0x28, 0x27, 0x00, 0x00, 0x00, // / FNT..*J ('... + 0x00, 0x01, 0x00, 0x4c, 0x00, 0xb0, 0x03, 0x13, 0x03, 0xbb, 0x00, 0x30, 0x00, 0x00, 0x01, 0x37, // ...L.......0...7 + 0x35, 0x17, 0x07, 0x35, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x33, 0x15, 0x3e, 0x01, 0x37, 0x3e, // 5..5".....3.>.7> + 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, // .32..........#"& + 0x27, 0x2e, 0x01, 0x27, 0x15, 0x23, 0x37, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x01, 0x37, 0x01, 0xc7, // '..'.#74>.7>.7.. + 0x3a, 0x89, 0x89, 0x47, 0x7a, 0x33, 0x2a, 0x31, 0x07, 0x45, 0x01, 0x28, 0x27, 0x27, 0x61, 0x39, // :..Gz3*1.E.(''a9 + 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x27, 0x27, 0x28, 0x01, // 9a((((((a99a''(. + 0xa4, 0x01, 0x10, 0x20, 0x30, 0x1f, 0x35, 0x7e, 0x48, 0x03, 0x73, 0x04, 0x44, 0x72, 0x72, 0x44, // ... 0.5~H.s.DrrD + 0x32, 0x33, 0x2a, 0x63, 0x39, 0x28, 0x37, 0x5e, 0x27, 0x28, 0x27, 0x27, 0x28, 0x28, 0x61, 0x39, // 23*c9(7^'(''((a9 + 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x27, 0x5e, 0x37, 0x28, 0x2e, 0x2e, 0x54, 0x4d, 0x46, // 9a((((('^7(..TMF + 0x20, 0x35, 0x3f, 0x08, 0x00, 0x01, 0x00, 0xf0, 0xff, 0xc9, 0x03, 0xb6, 0x02, 0xd4, 0x00, 0x34, // 5?............4 + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x15, 0x27, 0x37, // ............#.'7 + 0x15, 0x32, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x23, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, // .267>.7#.....#"& + 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x17, // '..5467>.32..... + 0x33, 0x32, 0x16, 0x17, 0x03, 0xa9, 0x07, 0x06, 0x10, 0x1f, 0x30, 0x20, 0x1f, 0x47, 0x4e, 0x54, // 32........0 .GNT + 0x2e, 0x88, 0x88, 0x48, 0x7b, 0x32, 0x2b, 0x31, 0x06, 0x48, 0x07, 0x26, 0x20, 0x28, 0x61, 0x39, // ...H{2+1.H.& (a9 + 0x39, 0x61, 0x27, 0x28, 0x28, 0x28, 0x28, 0x27, 0x61, 0x39, 0x39, 0x61, 0x28, 0x20, 0x26, 0x07, // 9a'(((('a99a( &. + 0x78, 0x0a, 0x11, 0x06, 0x01, 0xe2, 0x06, 0x10, 0x0a, 0x2d, 0x55, 0x4d, 0x47, 0x20, 0x1f, 0x30, // x........-UMG .0 + 0x20, 0x0f, 0x45, 0x72, 0x72, 0x44, 0x32, 0x32, 0x2a, 0x64, 0x3a, 0x2b, 0x4a, 0x20, 0x27, 0x28, // .ErrD22*d:+J '( + 0x28, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x4a, 0x2a, 0x07, // ('(a99a((((( J*. + 0x07, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0x0b, 0x03, 0xb6, 0x02, 0xd1, 0x00, 0x3f, // ...............? + 0x00, 0x00, 0x01, 0x1e, 0x01, 0x17, 0x33, 0x07, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x23, 0x22, // ......3.......#" + 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x23, 0x37, 0x17, 0x23, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x33, // ..'..5#7.#.....3 + 0x32, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x23, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, // 267>.7#.....#"&' + 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x02, 0xc2, 0x20, 0x26, // ..5467>.32.... & + 0x06, 0xa8, 0x01, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4e, 0x54, 0x2e, 0x2d, 0x55, 0x4d, 0x46, // .... / FNT.-UMF + 0x20, 0x20, 0x30, 0x1f, 0x10, 0x45, 0x72, 0x72, 0x44, 0x33, 0x32, 0x32, 0x7a, 0x48, 0x48, 0x7a, // 0..ErrD322zHHz + 0x33, 0x2a, 0x31, 0x07, 0x49, 0x06, 0x26, 0x20, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, // 3*1.I.& (a99a('( + 0x28, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x02, 0x82, 0x20, 0x4a, 0x2a, 0x2e, 0x2e, 0x54, // ('(a99a(.. J*..T + 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4e, 0x54, 0x2e, // NF / .. / FNT. + 0x89, 0x89, 0x48, 0x7a, 0x33, 0x32, 0x32, 0x32, 0x32, 0x2a, 0x64, 0x39, 0x2a, 0x4a, 0x20, 0x28, // ..Hz32222*d9*J ( + 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x27, 0x27, 0x28, 0x00, 0x00, 0x00, // ((((a99a((''(... + 0x00, 0x01, 0x00, 0x07, 0x00, 0xb0, 0x03, 0xb6, 0x03, 0x77, 0x00, 0x3f, 0x00, 0x00, 0x13, 0x34, // .........w.?...4 + 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x17, 0x23, 0x0e, // >.7>.32.......#. + 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, // ....#"&'..5467>. + 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x33, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x23, 0x22, 0x06, // 32.....3..'..#". + 0x07, 0x0e, 0x01, 0x15, 0x33, 0x07, 0x27, 0x33, 0x4c, 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, // ....3.'3L. / FM + 0x55, 0x2d, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x01, 0xa8, 0x06, 0x26, 0x20, // U-.TNF / ....& + 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, 0x28, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, // (a99a('(('(a99a( + 0x20, 0x26, 0x06, 0x49, 0x07, 0x31, 0x2a, 0x32, 0x7b, 0x48, 0x48, 0x7a, 0x32, 0x32, 0x33, 0x44, // &.I.1*2{HHz223D + 0x72, 0x72, 0x45, 0x01, 0xc2, 0x2e, 0x54, 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, 0x10, 0x10, 0x20, // rrE...TMF 0 .. + 0x30, 0x20, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x2e, 0x2a, 0x4a, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, // 0 FMT..*J ((((( + 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x4a, 0x2a, 0x39, 0x63, 0x2a, 0x33, // a99a((((( J*9c*3 + 0x32, 0x32, 0x33, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x00, 0x01, 0x00, 0xee, 0x00, 0xb0, 0x03, 0xb5, // 2232zH.......... + 0x03, 0xbb, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x15, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x17, // .../....2....... + 0x23, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, // #.....#"&'..5467 + 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x33, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x23, // >.32.....3..'..# + 0x15, 0x27, 0x37, 0x01, 0xff, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x01, 0xa8, // .'7...TNF / ... + 0x06, 0x26, 0x20, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x27, 0x27, 0x28, 0x28, 0x61, 0x39, // .& (a99a((''((a9 + 0x39, 0x61, 0x28, 0x20, 0x26, 0x06, 0x49, 0x07, 0x31, 0x2a, 0x33, 0x7a, 0x48, 0x89, 0x89, 0x03, // 9a( &.I.1*3zH... + 0xbb, 0x44, 0x10, 0x20, 0x30, 0x20, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x2e, 0x2a, 0x4a, 0x20, 0x28, // .D. 0 FMT..*J ( + 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x4a, 0x2a, // ((((a99a((((( J* + 0x39, 0x63, 0x2a, 0x33, 0x32, 0x44, 0x72, 0x72, 0x00, 0x01, 0x00, 0xee, 0xff, 0xc9, 0x03, 0xb4, // 9c*32Drr........ + 0x03, 0x78, 0x00, 0x42, 0x00, 0x00, 0x01, 0x15, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, // .x.B............ + 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, // ...#"&'..5467>.7 + 0x35, 0x17, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x0f, 0x01, 0x23, 0x0e, // 5.2...........#. + 0x03, 0x23, 0x15, 0x27, 0x37, 0x15, 0x32, 0x36, 0x3f, 0x01, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, // .#.'7.26?.>.54&' + 0x2e, 0x01, 0x27, 0x02, 0x2d, 0x2a, 0x4a, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, // ..'.-*J (((((a99 + 0x61, 0x28, 0x28, 0x27, 0x27, 0x28, 0x20, 0x4a, 0x2a, 0x2e, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, // a((''( J*..TNF + 0x2f, 0x20, 0x10, 0x10, 0x20, 0x2f, 0x20, 0x06, 0x01, 0x1f, 0x46, 0x4c, 0x52, 0x2c, 0x89, 0x89, // / .. / ...FLR,.. + 0x46, 0x77, 0x32, 0x06, 0x32, 0x32, 0x32, 0x32, 0x2a, 0x64, 0x39, 0x03, 0x18, 0x48, 0x06, 0x26, // Fw2.2222*d9..H.& + 0x20, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, 0x28, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, // (a99a('(('(a99a + 0x28, 0x20, 0x26, 0x06, 0xa8, 0x01, 0x10, 0x20, 0x30, 0x20, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x2d, // ( &.... 0 FMT.- + 0x55, 0x4d, 0x47, 0x20, 0x06, 0x1e, 0x2d, 0x1e, 0x0f, 0x45, 0x72, 0x72, 0x44, 0x2f, 0x2f, 0x06, // UMG ..-..ErrD//. + 0x33, 0x7a, 0x48, 0x48, 0x7a, 0x32, 0x2b, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4c, // 3zHHz2+1.......L + 0xff, 0xc9, 0x03, 0x12, 0x03, 0x78, 0x00, 0x3f, 0x00, 0x00, 0x01, 0x37, 0x15, 0x1e, 0x01, 0x17, // .....x.?...7.... + 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, // ........#"&'..54 + 0x36, 0x37, 0x3e, 0x01, 0x37, 0x35, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, // 67>.75.......... + 0x01, 0x33, 0x35, 0x17, 0x07, 0x35, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, // .35..5"..'..54>. + 0x37, 0x3e, 0x03, 0x33, 0x02, 0x00, 0x2e, 0x2a, 0x4a, 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, // 7>.3...*J (((((a + 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, 0x28, 0x27, 0x20, 0x4a, 0x2b, 0x3a, 0x63, 0x2a, 0x32, 0x33, // 99a('((' J+:c*23 + 0x33, 0x32, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x2d, 0x55, 0x4d, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, // 322zH..-UMF / . + 0x10, 0x20, 0x2f, 0x20, 0x20, 0x46, 0x4d, 0x55, 0x2d, 0x03, 0x77, 0x01, 0xa8, 0x06, 0x26, 0x20, // . / FMU-.w...& + 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, 0x28, 0x27, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, // (a99a('(('(a99a( + 0x20, 0x26, 0x06, 0x48, 0x06, 0x31, 0x2b, 0x32, 0x7a, 0x48, 0x48, 0x7a, 0x33, 0x32, 0x32, 0x44, // &.H.1+2zHHz322D + 0x72, 0x72, 0x45, 0x0f, 0x20, 0x30, 0x1f, 0x20, 0x47, 0x4d, 0x55, 0x2d, 0x2e, 0x54, 0x4d, 0x46, // rrE. 0. GMU-.TMF + 0x20, 0x20, 0x30, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00, 0xb0, 0x03, 0x12, // 0 ............ + 0x03, 0x78, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, // .x./........#"&' + 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x35, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, // ..5467>.75...... + 0x33, 0x07, 0x27, 0x33, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x33, 0x37, 0x15, 0x1e, 0x01, 0x17, // 3.'34>.7>.37.... + 0x1e, 0x01, 0x15, 0x03, 0x12, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x27, 0x28, 0x28, // .....(((a99a('(( + 0x27, 0x20, 0x4a, 0x2b, 0x3a, 0x63, 0x2a, 0x32, 0x33, 0x44, 0x72, 0x72, 0x45, 0x10, 0x20, 0x2f, // ' J+:c*23DrrE. / + 0x20, 0x20, 0x46, 0x4d, 0x55, 0x2d, 0x2e, 0x2a, 0x4a, 0x20, 0x28, 0x28, 0x01, 0xc2, 0x39, 0x61, // FMU-.*J ((..9a + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x20, 0x26, 0x06, 0x48, 0x06, // ((((((a99a( &.H. + 0x31, 0x2b, 0x32, 0x7a, 0x48, 0x89, 0x89, 0x2e, 0x54, 0x4d, 0x46, 0x20, 0x20, 0x30, 0x20, 0x10, // 1+2zH...TMF 0 . + 0x01, 0xa8, 0x06, 0x26, 0x20, 0x28, 0x61, 0x39, 0x00, 0x01, 0x00, 0xee, 0x00, 0xb0, 0x03, 0xf8, // ...& (a9........ + 0x03, 0x77, 0x00, 0x34, 0x00, 0x00, 0x01, 0x15, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, // .w.4............ + 0x07, 0x0e, 0x01, 0x23, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, // ...#"&'..5467>.7 + 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x33, 0x07, // 5467>.32......3. + 0x27, 0x33, 0x34, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x02, 0x2d, 0x2a, 0x4a, 0x20, 0x28, 0x28, 0x28, // '34&'..'.-*J ((( + 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x28, 0x27, 0x27, 0x28, 0x20, 0x4a, 0x2a, 0x07, 0x07, // ((a99a((''( J*.. + 0x06, 0x10, 0x0a, 0x2e, 0x54, 0x4e, 0x46, 0x20, 0x20, 0x2f, 0x20, 0x10, 0x44, 0x72, 0x72, 0x44, // ....TNF / .DrrD + 0x32, 0x32, 0x2a, 0x64, 0x39, 0x03, 0x18, 0x48, 0x06, 0x26, 0x20, 0x28, 0x61, 0x39, 0x39, 0x61, // 22*d9..H.& (a99a + 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x61, 0x39, 0x39, 0x61, 0x28, 0x20, 0x26, 0x06, 0x79, 0x0a, // ((((((a99a( &.y. + 0x10, 0x06, 0x07, 0x07, 0x10, 0x20, 0x30, 0x20, 0x20, 0x46, 0x4d, 0x54, 0x2e, 0x89, 0x89, 0x48, // ..... 0 FMT...H + 0x7a, 0x32, 0x2b, 0x31, 0x06, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // z2+1............ + 0x03, 0xba, 0x00, 0x6f, 0x00, 0x94, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, // ...o.......'..'. + 0x01, 0x23, 0x22, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, // .#"............. + 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x35, 0x07, 0x22, 0x26, 0x27, 0x2e, 0x01, 0x2f, 0x03, // .......5."&'../. + 0x34, 0x36, 0x33, 0x32, 0x16, 0x1f, 0x08, 0x37, 0x3e, 0x01, 0x37, 0x2e, 0x01, 0x27, 0x2e, 0x01, // 4632...7>.7..'.. + 0x35, 0x34, 0x36, 0x37, 0x27, 0x34, 0x36, 0x37, 0x17, 0x1e, 0x01, 0x17, 0x37, 0x17, 0x37, 0x3e, // 5467'467....7.7> + 0x01, 0x33, 0x1e, 0x01, 0x15, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x1e, // .3.............. + 0x01, 0x1d, 0x01, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x35, 0x34, 0x26, 0x27, 0x03, // ...>.7>.7>.54&'. + 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, // ..............#" + 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, // &'..'..5467>.7>. + 0x33, 0x32, 0x16, 0x17, 0x03, 0x84, 0x10, 0x2d, 0x1d, 0x1c, 0x45, 0x27, 0x27, 0x51, 0x2a, 0x2a, // 32.....-..E''Q** + 0x51, 0x27, 0x27, 0x45, 0x1c, 0x1d, 0x2d, 0x10, 0x10, 0x11, 0x12, 0x13, 0x12, 0x35, 0x21, 0x22, // Q''E..-......5!" + 0x4d, 0x2b, 0x2e, 0x23, 0x33, 0x0f, 0x04, 0x0c, 0x08, 0x0d, 0x13, 0x08, 0x09, 0x09, 0x11, 0x1e, // M+.#3........... + 0x0c, 0x06, 0x06, 0x05, 0x07, 0x07, 0x08, 0x09, 0x25, 0x36, 0x06, 0x14, 0x0e, 0x38, 0x51, 0x1a, // ........%6...8Q. + 0x1a, 0x19, 0x18, 0x17, 0x08, 0x08, 0x09, 0x41, 0x0f, 0x21, 0x14, 0x6f, 0x65, 0x45, 0x0f, 0x1f, // .......A.!.oeE.. + 0x11, 0x09, 0x09, 0x0a, 0x18, 0x19, 0x1a, 0x1a, 0x1a, 0x51, 0x37, 0x17, 0x16, 0x2b, 0x4d, 0x22, // .........Q7..+M" + 0x21, 0x35, 0x12, 0x13, 0x12, 0x11, 0x10, 0x87, 0x3a, 0x5d, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // !5......:]"""""" + 0x5b, 0x3b, 0x3a, 0x80, 0x44, 0x44, 0x7f, 0x3a, 0x3b, 0x5c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, // [;:.DD.:;."""""" + 0x5c, 0x3b, 0x39, 0x7e, 0x46, 0x44, 0x7f, 0x3a, 0x02, 0x63, 0x27, 0x44, 0x1c, 0x1d, 0x2d, 0x10, // .;9~FD.:.c'D..-. + 0x10, 0x11, 0x11, 0x10, 0x10, 0x2d, 0x1d, 0x1c, 0x44, 0x27, 0x27, 0x52, 0x2a, 0x2e, 0x55, 0x29, // .....-..D''R*.U) + 0x29, 0x48, 0x1e, 0x1e, 0x2b, 0x0d, 0x6f, 0x05, 0x21, 0x21, 0x0c, 0x15, 0x09, 0x0c, 0x11, 0x0a, // )H..+.o.!!...... + 0x04, 0x04, 0x11, 0x11, 0x06, 0x09, 0x07, 0x08, 0x07, 0x06, 0x07, 0x09, 0x09, 0x13, 0x1e, 0x0a, // ................ + 0x05, 0x1c, 0x16, 0x17, 0x49, 0x33, 0x28, 0x41, 0x19, 0x37, 0x14, 0x24, 0x11, 0x0c, 0x06, 0x15, // ....I3(A.7.$.... + 0x0f, 0x0d, 0x0b, 0x28, 0x06, 0x06, 0x11, 0x24, 0x14, 0x35, 0x1b, 0x42, 0x27, 0x32, 0x4a, 0x17, // ...(...$.5.B'2J. + 0x17, 0x1d, 0x05, 0x0f, 0x2b, 0x1c, 0x94, 0x0d, 0x2b, 0x1e, 0x1e, 0x48, 0x29, 0x29, 0x56, 0x2d, // ....+...+..H))V- + 0x2a, 0x52, 0x27, 0x01, 0x13, 0x22, 0x5b, 0x3b, 0x39, 0x7f, 0x46, 0x44, 0x7f, 0x3a, 0x3b, 0x5c, // *R'.."[;9.FD.:;. + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x5c, 0x3b, 0x39, 0x7e, 0x46, 0x44, 0x7f, 0x3a, 0x3a, 0x5d, // """""".;9~FD.::] + 0x22, 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc7, 0x03, 0xfa, // """""........... + 0x03, 0xba, 0x00, 0x57, 0x00, 0x00, 0x01, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x16, // ...W..."........ + 0x36, 0x35, 0x34, 0x26, 0x35, 0x06, 0x26, 0x31, 0x2e, 0x01, 0x31, 0x26, 0x36, 0x31, 0x1e, 0x01, // 654&5.&1..1&61.. + 0x31, 0x16, 0x36, 0x37, 0x3e, 0x01, 0x37, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x37, 0x2e, 0x01, 0x37, // 1.67>.7..5467..7 + 0x30, 0x16, 0x17, 0x3e, 0x01, 0x33, 0x32, 0x16, 0x17, 0x3e, 0x01, 0x31, 0x16, 0x06, 0x07, 0x1e, // 0..>.32..>.1.... + 0x01, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x1e, 0x01, 0x15, 0x14, 0x06, 0x15, 0x14, 0x16, 0x37, 0x3e, // ..............7> + 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x02, 0x00, 0x69, 0xb8, 0x89, 0x50, 0x34, 0x5c, 0x7f, 0x4b, // .54..#..i..P4..K + 0x13, 0x10, 0x01, 0x69, 0x41, 0x11, 0x27, 0x23, 0x26, 0x26, 0x27, 0x22, 0x5c, 0x16, 0x03, 0x12, // ...iA.'#&&'".... + 0x0b, 0x2a, 0x53, 0x41, 0x29, 0x1c, 0x18, 0x03, 0x0c, 0x14, 0x43, 0x48, 0x1f, 0x40, 0x20, 0x20, // .*SA).....CH.@ + 0x40, 0x1f, 0x48, 0x42, 0x15, 0x0c, 0x04, 0x19, 0x1b, 0x28, 0x41, 0x53, 0x2a, 0x0d, 0x15, 0x01, // @.HB.....(AS*... + 0x10, 0x13, 0x4b, 0x7f, 0x5c, 0x34, 0x50, 0x89, 0xb8, 0x69, 0x03, 0xba, 0x52, 0x8d, 0xbc, 0x6c, // ..K..4P..i..R..l + 0x56, 0x9c, 0x80, 0x60, 0x1a, 0x03, 0x12, 0x0a, 0x09, 0x2f, 0x20, 0x17, 0x5d, 0x2d, 0x1f, 0x18, // V..`...../ .]-.. + 0x07, 0x03, 0x32, 0x3c, 0x07, 0x0a, 0x19, 0x22, 0x0a, 0x05, 0x19, 0x39, 0x5f, 0x4a, 0x2b, 0x45, // ..2<..."...9_J+E + 0x1b, 0x0a, 0x4a, 0x36, 0x03, 0x32, 0x08, 0x09, 0x09, 0x09, 0x33, 0x03, 0x36, 0x4a, 0x0a, 0x1b, // ..J6.2....3.6J.. + 0x45, 0x2b, 0x4a, 0x5f, 0x39, 0x19, 0x04, 0x0d, 0x2f, 0x24, 0x34, 0x4e, 0x0d, 0x0a, 0x12, 0x03, // E+J_9.../$4N.... + 0x1a, 0x60, 0x81, 0x9b, 0x56, 0x6c, 0xbc, 0x8d, 0x52, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // .`..Vl..R....... + 0x00, 0x18, 0x03, 0xfa, 0x03, 0x68, 0x00, 0x58, 0x00, 0x00, 0x01, 0x34, 0x36, 0x37, 0x3e, 0x01, // .....h.X...467>. + 0x33, 0x32, 0x16, 0x1f, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x0f, 0x01, 0x33, 0x1f, 0x01, 0x07, 0x0e, // 32...?.....3.... + 0x01, 0x07, 0x15, 0x14, 0x06, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x23, 0x22, // ..............#" + 0x26, 0x27, 0x33, 0x2e, 0x01, 0x2f, 0x01, 0x35, 0x3f, 0x01, 0x17, 0x32, 0x36, 0x37, 0x07, 0x37, // &'3../.5?..267.7 + 0x27, 0x2e, 0x01, 0x27, 0x26, 0x36, 0x3f, 0x01, 0x27, 0x2e, 0x01, 0x3d, 0x01, 0x3f, 0x01, 0x33, // '..'&6?.'..=.?.3 + 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x3f, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x27, 0x1e, // ..5467>.?.....'. + 0x01, 0x17, 0x35, 0x01, 0xd2, 0x21, 0x22, 0x20, 0x50, 0x30, 0x18, 0x2f, 0x16, 0x3b, 0x61, 0x14, // ..5..!" P0./.;a. + 0x12, 0x0c, 0x01, 0x10, 0x11, 0x11, 0x09, 0x05, 0x14, 0x2e, 0x1a, 0x12, 0x13, 0x14, 0x39, 0x24, // ..............9$ + 0x28, 0x5b, 0x33, 0x3a, 0x7f, 0x44, 0x2b, 0x53, 0x2a, 0x02, 0x28, 0x4b, 0x23, 0x0e, 0x0e, 0x16, // ([3:.D+S*.(K#... + 0x2c, 0x1e, 0x3c, 0x1e, 0x02, 0x23, 0x2f, 0x1d, 0x27, 0x0b, 0x02, 0x01, 0x02, 0x07, 0x19, 0x1a, // ,.<..#/.'....... + 0x1a, 0x08, 0x13, 0x01, 0x0d, 0x0e, 0x0f, 0x10, 0x02, 0x08, 0x05, 0x16, 0x12, 0x23, 0x53, 0x30, // .............#S0 + 0x02, 0x29, 0x55, 0x2d, 0x02, 0x81, 0x30, 0x51, 0x22, 0x22, 0x22, 0x0a, 0x0a, 0x27, 0x27, 0x05, // .)U-..0Q"""..''. + 0x09, 0x11, 0x14, 0x22, 0x0a, 0x14, 0x15, 0x1d, 0x32, 0x15, 0x08, 0x35, 0x68, 0x34, 0x35, 0x5f, // ..."....2..5h45_ + 0x2a, 0x2d, 0x46, 0x1a, 0x1b, 0x1b, 0x0d, 0x0c, 0x0c, 0x22, 0x16, 0x11, 0x16, 0x11, 0x07, 0x02, // *-F......"...... + 0x0a, 0x0b, 0x02, 0x0f, 0x1d, 0x16, 0x39, 0x23, 0x06, 0x0b, 0x05, 0x0a, 0x1b, 0x20, 0x4a, 0x2a, // ......9#..... J* + 0x01, 0x15, 0x0c, 0x19, 0x35, 0x1c, 0x1f, 0x3a, 0x1b, 0x05, 0x07, 0x03, 0x02, 0x0c, 0x2b, 0x44, // ....5..:......+D + 0x1b, 0x02, 0x15, 0x1b, 0x06, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, // ................ + 0x03, 0xba, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x15, 0x23, 0x15, 0x33, 0x17, // ...>........#.3. + 0x11, 0x21, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x11, 0x34, 0x36, 0x37, // .!'..'..'..5.467 + 0x3e, 0x01, 0x33, 0x21, 0x32, 0x16, 0x17, 0x1e, 0x01, 0x15, 0x11, 0x14, 0x06, 0x07, 0x0e, 0x01, // >.3!2........... + 0x2b, 0x01, 0x37, 0x35, 0x3f, 0x02, 0x23, 0x35, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x17, 0x33, 0x35, // +.75?.#5>.7>..35 + 0x23, 0x0e, 0x01, 0x07, 0x02, 0x82, 0x09, 0x0e, 0x05, 0x0e, 0x52, 0x2a, 0x28, 0xfe, 0x57, 0x40, // #.........R*(.W@ + 0x0f, 0x1b, 0x0c, 0x0c, 0x12, 0x07, 0x07, 0x07, 0x1a, 0x19, 0x18, 0x3b, 0x23, 0x02, 0xb0, 0x21, // ...........;#..! + 0x38, 0x16, 0x16, 0x16, 0x16, 0x16, 0x17, 0x37, 0x21, 0x60, 0x02, 0x37, 0x38, 0x10, 0x7f, 0x01, // 8......7!`.78... + 0x08, 0x06, 0x06, 0x0c, 0x07, 0x57, 0x86, 0x27, 0x3c, 0x15, 0x02, 0xce, 0x0a, 0x16, 0x0c, 0x33, // .....W.'<......3 + 0x85, 0x8a, 0x02, 0xfe, 0x68, 0x0e, 0x07, 0x12, 0x0c, 0x0c, 0x1b, 0x0f, 0x10, 0x20, 0x10, 0x02, // ....h........ .. + 0xb0, 0x20, 0x38, 0x17, 0x16, 0x16, 0x16, 0x16, 0x16, 0x38, 0x21, 0xfd, 0x50, 0x22, 0x3b, 0x19, // . 8......8!.P";. + 0x19, 0x1a, 0xce, 0xca, 0x02, 0x03, 0x89, 0x5e, 0x07, 0x0b, 0x04, 0x05, 0x04, 0x01, 0x8e, 0x01, // .......^........ + 0x14, 0x13, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x82, 0x03, 0xfa, 0x03, 0x07, 0x00, 0x0c, // ................ + 0x00, 0x3b, 0x00, 0x00, 0x01, 0x15, 0x23, 0x15, 0x23, 0x35, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, // .;....#.#5#5353. + 0x33, 0x05, 0x15, 0x17, 0x0e, 0x01, 0x07, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, // 3.......&'..7>.7 + 0x3e, 0x01, 0x17, 0x1e, 0x01, 0x17, 0x37, 0x2e, 0x01, 0x07, 0x26, 0x06, 0x07, 0x0e, 0x01, 0x07, // >.....7...&..... + 0x06, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x27, 0x21, // ........7>.7>.'! + 0x03, 0xfa, 0x6e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0xfd, 0x4f, 0xba, 0x09, 0x41, 0x38, 0x35, 0x5b, // ..nmmmmn.O..A85[ + 0x25, 0x26, 0x25, 0x01, 0x01, 0x29, 0x28, 0x1a, 0x3f, 0x25, 0x22, 0x3f, 0x1c, 0x52, 0x34, 0x6c, // %&%..)(.?%"?.R4l + 0x38, 0x3e, 0x6f, 0x31, 0x31, 0x32, 0x01, 0x03, 0x1a, 0x1d, 0x1d, 0x4d, 0x30, 0x31, 0x64, 0x34, // 8>o112.....M01d4 + 0x36, 0x53, 0x1e, 0x22, 0x1c, 0x05, 0xfe, 0xcb, 0x01, 0xf6, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, // 6S."......mmmmnn + 0x07, 0x70, 0x01, 0x33, 0x42, 0x10, 0x0f, 0x15, 0x23, 0x1e, 0x52, 0x36, 0x34, 0x51, 0x1c, 0x15, // .p.3B...#.R64Q.. + 0x13, 0x03, 0x02, 0x15, 0x15, 0x55, 0x2c, 0x28, 0x04, 0x03, 0x2d, 0x30, 0x2e, 0x6e, 0x40, 0x33, // .....U,(..-0.n@3 + 0x62, 0x2e, 0x2d, 0x40, 0x12, 0x13, 0x06, 0x0c, 0x0f, 0x38, 0x2a, 0x2f, 0x7f, 0x4e, 0x00, 0x00, // b.-@.....8*/.N.. + 0x00, 0x03, 0x00, 0x06, 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x69, 0x00, 0x7e, 0x00, 0x93, // ...........i.~.. + 0x00, 0x00, 0x01, 0x14, 0x06, 0x07, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, // .......&'..'..'. + 0x01, 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, // .'..7>.76&'..'.. + 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x26, 0x06, 0x07, 0x06, 0x16, 0x07, // '..'..'..'&..... + 0x0e, 0x01, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x16, 0x15, 0x14, 0x06, 0x23, 0x2e, 0x01, 0x27, 0x26, // ...........#..'& + 0x36, 0x27, 0x26, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, // 6'&............. + 0x17, 0x16, 0x06, 0x17, 0x1e, 0x01, 0x07, 0x06, 0x16, 0x17, 0x1e, 0x01, 0x07, 0x2e, 0x03, 0x35, // ...............5 + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x33, 0x16, 0x0e, 0x02, 0x07, 0x22, 0x2e, 0x02, // 4>.32...3....".. + 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x27, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, // 54>.32...'..#".. + 0x15, 0x14, 0x1e, 0x02, 0x33, 0x3e, 0x03, 0x27, 0x03, 0xb3, 0x16, 0x0c, 0x0d, 0x17, 0x03, 0x02, // ....3>.'........ + 0x0a, 0x05, 0x06, 0x0d, 0x0c, 0x0c, 0x0c, 0x09, 0x06, 0x03, 0x03, 0x05, 0x11, 0x02, 0x03, 0x3c, // ...............< + 0x04, 0x09, 0x2e, 0x02, 0x03, 0x09, 0x0e, 0x0f, 0x51, 0x0b, 0x0b, 0x0f, 0x03, 0x08, 0x25, 0x09, // ........Q.....%. + 0x03, 0x08, 0x03, 0x06, 0x04, 0x01, 0x01, 0x09, 0x07, 0x07, 0x07, 0x08, 0x08, 0x01, 0x10, 0x08, // ................ + 0x09, 0x05, 0x03, 0x03, 0x01, 0x03, 0x02, 0x0b, 0x03, 0x02, 0x0a, 0x0d, 0x02, 0x03, 0x09, 0x04, // ................ + 0x08, 0x0b, 0x03, 0x04, 0x0c, 0x03, 0x02, 0x0c, 0x05, 0x05, 0x07, 0x0c, 0x0f, 0x0e, 0x02, 0x4d, // ...............M + 0x84, 0x61, 0x37, 0x44, 0x76, 0x9f, 0x5a, 0x5a, 0x9f, 0x76, 0x44, 0x47, 0x01, 0x50, 0x8c, 0xc0, // .a7Dv.ZZ.vDG.P.. + 0x6f, 0x6e, 0xb5, 0x81, 0x46, 0x50, 0x8a, 0xb8, 0x68, 0x69, 0xb7, 0x88, 0x50, 0x02, 0x19, 0x01, // on..FP..hi..P... + 0x4c, 0x82, 0xaf, 0x63, 0x63, 0xaf, 0x83, 0x4c, 0x43, 0x7a, 0xac, 0x69, 0x6a, 0xb6, 0x85, 0x4c, // L..cc..LCz.ij..L + 0x01, 0x01, 0xbc, 0x2e, 0x6c, 0x18, 0x18, 0x01, 0x04, 0x04, 0x0e, 0x04, 0x05, 0x09, 0x02, 0x03, // ....l........... + 0x04, 0x09, 0x06, 0x0a, 0x03, 0x05, 0x06, 0x04, 0x04, 0x49, 0x04, 0x09, 0x27, 0x06, 0x09, 0x28, // .........I..'..( + 0x16, 0x17, 0x22, 0x0f, 0x0e, 0x1d, 0x08, 0x0e, 0x2e, 0x01, 0x01, 0x02, 0x01, 0x04, 0x06, 0x05, // .."............. + 0x04, 0x06, 0x06, 0x06, 0x0a, 0x0f, 0x0f, 0x17, 0x0e, 0x0f, 0x1a, 0x01, 0x09, 0x04, 0x05, 0x0d, // ................ + 0x02, 0x01, 0x0b, 0x06, 0x03, 0x14, 0x0b, 0x07, 0x12, 0x04, 0x03, 0x0b, 0x04, 0x09, 0x15, 0x0d, // ................ + 0x0c, 0x55, 0x18, 0x12, 0x25, 0x30, 0x2f, 0x55, 0x19, 0x1e, 0x25, 0x02, 0x0d, 0x4e, 0x73, 0x91, // .U..%0/U..%..Ns. + 0x51, 0x5b, 0xa0, 0x77, 0x45, 0x45, 0x77, 0xa0, 0x5b, 0x69, 0xb6, 0x88, 0x4e, 0x01, 0x52, 0x8b, // Q[.wEEw.[i..N.R. + 0xb6, 0x63, 0x64, 0xb8, 0x8d, 0x55, 0x51, 0x8a, 0xb9, 0x6a, 0x01, 0x64, 0xb0, 0x84, 0x4c, 0x50, // .cd..UQ..j.d..LP + 0x87, 0xaf, 0x5e, 0x5f, 0xad, 0x84, 0x4e, 0x01, 0x4a, 0x81, 0xae, 0x64, 0x00, 0x02, 0x00, 0x06, // ..^_..N.J..d.... + 0xff, 0xc6, 0x03, 0xfa, 0x03, 0xba, 0x00, 0x14, 0x00, 0x7e, 0x00, 0x00, 0x01, 0x22, 0x0e, 0x02, // .........~...".. + 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x15, 0x32, 0x1e, // ....32>.54..#.2. + 0x02, 0x15, 0x14, 0x06, 0x07, 0x06, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, // ......&'..'..'.. + 0x27, 0x2e, 0x01, 0x37, 0x3e, 0x01, 0x37, 0x36, 0x26, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, // '..7>.76&'..'..' + 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x27, 0x22, 0x06, 0x07, 0x06, 0x16, 0x07, 0x0e, // ..'..'..'"...... + 0x01, 0x07, 0x0e, 0x01, 0x07, 0x06, 0x14, 0x17, 0x14, 0x06, 0x23, 0x2e, 0x01, 0x27, 0x26, 0x36, // ..........#..'&6 + 0x27, 0x26, 0x06, 0x07, 0x0e, 0x01, 0x15, 0x14, 0x16, 0x17, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x17, // '&.............. + 0x16, 0x06, 0x17, 0x1e, 0x01, 0x07, 0x06, 0x16, 0x17, 0x1e, 0x01, 0x07, 0x2e, 0x03, 0x35, 0x34, // ..............54 + 0x3e, 0x02, 0x33, 0x02, 0x00, 0x68, 0xb9, 0x89, 0x50, 0x50, 0x89, 0xb9, 0x68, 0x68, 0xb8, 0x8a, // >.3..h..PP..hh.. + 0x50, 0x50, 0x8a, 0xb8, 0x68, 0x5f, 0xa8, 0x7e, 0x48, 0x17, 0x0d, 0x0d, 0x19, 0x03, 0x02, 0x0b, // PP..h_.~H....... + 0x05, 0x06, 0x0f, 0x0d, 0x0c, 0x0d, 0x09, 0x06, 0x04, 0x03, 0x05, 0x13, 0x02, 0x03, 0x3f, 0x05, // ..............?. + 0x09, 0x31, 0x03, 0x03, 0x09, 0x0f, 0x10, 0x56, 0x0b, 0x0c, 0x10, 0x04, 0x08, 0x27, 0x0a, 0x03, // .1.....V.....'.. + 0x08, 0x03, 0x07, 0x04, 0x01, 0x01, 0x09, 0x07, 0x08, 0x08, 0x08, 0x08, 0x01, 0x11, 0x09, 0x09, // ................ + 0x06, 0x03, 0x03, 0x01, 0x03, 0x02, 0x0c, 0x03, 0x03, 0x0a, 0x0e, 0x02, 0x03, 0x09, 0x04, 0x09, // ................ + 0x0c, 0x04, 0x03, 0x0c, 0x03, 0x02, 0x0d, 0x05, 0x06, 0x08, 0x0d, 0x0f, 0x10, 0x02, 0x52, 0x8c, // ..............R. + 0x68, 0x3a, 0x48, 0x7e, 0xa8, 0x60, 0x03, 0xba, 0x50, 0x8a, 0xb8, 0x68, 0x68, 0xb9, 0x89, 0x50, // h:H~.`..P..hh..P + 0x50, 0x89, 0xb9, 0x68, 0x68, 0xb9, 0x89, 0x50, 0x2c, 0x48, 0x7e, 0xa8, 0x5f, 0x31, 0x72, 0x1a, // P..hh..P,H~._1r. + 0x19, 0x01, 0x04, 0x04, 0x10, 0x04, 0x05, 0x0a, 0x02, 0x03, 0x04, 0x09, 0x07, 0x0b, 0x03, 0x05, // ................ + 0x06, 0x04, 0x04, 0x4d, 0x05, 0x09, 0x29, 0x07, 0x09, 0x2b, 0x17, 0x17, 0x24, 0x10, 0x0f, 0x1f, // ...M..)..+..$... + 0x08, 0x0f, 0x30, 0x02, 0x02, 0x01, 0x04, 0x07, 0x04, 0x05, 0x06, 0x06, 0x07, 0x0a, 0x10, 0x10, // ..0............. + 0x18, 0x0f, 0x10, 0x1b, 0x01, 0x09, 0x05, 0x05, 0x0e, 0x01, 0x02, 0x0c, 0x06, 0x04, 0x15, 0x0b, // ................ + 0x07, 0x14, 0x03, 0x04, 0x0b, 0x05, 0x09, 0x16, 0x0e, 0x0d, 0x59, 0x19, 0x13, 0x27, 0x32, 0x32, // ..........Y..'22 + 0x5a, 0x1a, 0x20, 0x27, 0x02, 0x0e, 0x52, 0x79, 0x99, 0x56, 0x5f, 0xa8, 0x7e, 0x48, 0x00, 0x00, // Z. '..Ry.V_.~H.. + 0x00, 0x02, 0x00, 0x06, 0x00, 0x50, 0x03, 0xfa, 0x03, 0x30, 0x00, 0x3a, 0x00, 0x3e, 0x00, 0x00, // .....P...0.:.>.. + 0x01, 0x2f, 0x01, 0x2e, 0x01, 0x27, 0x2e, 0x01, 0x2f, 0x04, 0x23, 0x0f, 0x03, 0x0e, 0x01, 0x07, // ./...'../.#..... + 0x0e, 0x01, 0x0f, 0x03, 0x15, 0x1f, 0x03, 0x1e, 0x01, 0x17, 0x1e, 0x01, 0x1f, 0x04, 0x33, 0x3f, // ..............3? + 0x03, 0x3e, 0x01, 0x37, 0x3e, 0x01, 0x3f, 0x04, 0x35, 0x27, 0x01, 0x11, 0x0d, 0x01, 0x03, 0xf3, // .>.7>.?.5'...... + 0x04, 0x09, 0x06, 0x10, 0x09, 0x0c, 0x1d, 0x11, 0x19, 0x12, 0xe6, 0x59, 0x23, 0x7c, 0xe6, 0x12, // ...........Y#|.. + 0x1a, 0x10, 0x1d, 0x0c, 0x0a, 0x10, 0x06, 0x09, 0x05, 0x05, 0x05, 0x05, 0x03, 0x06, 0x06, 0x10, // ................ + 0x0a, 0x0b, 0x1f, 0x13, 0x1c, 0x15, 0xcb, 0x8e, 0x23, 0x59, 0xe6, 0x12, 0x19, 0x11, 0x1d, 0x0c, // ........#Y...... + 0x09, 0x10, 0x06, 0x07, 0x02, 0x04, 0x07, 0x07, 0xfd, 0xa5, 0x01, 0x10, 0xfe, 0xf0, 0x02, 0x5c, // ................ + 0x35, 0x29, 0x15, 0x20, 0x0a, 0x0e, 0x12, 0x05, 0x06, 0x01, 0x09, 0x02, 0x02, 0x09, 0x01, 0x06, // 5). ............ + 0x05, 0x12, 0x0e, 0x0a, 0x20, 0x15, 0x29, 0x35, 0x74, 0x50, 0x74, 0x35, 0x0c, 0x1b, 0x17, 0x20, // .... .)5tPt5... + 0x0a, 0x0d, 0x12, 0x06, 0x04, 0x03, 0x08, 0x03, 0x02, 0x09, 0x03, 0x04, 0x06, 0x12, 0x0d, 0x0a, // ................ + 0x20, 0x17, 0x1b, 0x0c, 0x35, 0x74, 0x50, 0x74, 0xfe, 0xdc, 0x01, 0x26, 0x93, 0x93, 0x00, 0x00, // ...5tPt...&.... + 0x00, 0x03, 0x00, 0x06, 0xff, 0xf6, 0x03, 0xfa, 0x03, 0x8a, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x24, // ...............$ + 0x00, 0x00, 0x01, 0x17, 0x01, 0x27, 0x2e, 0x01, 0x35, 0x34, 0x36, 0x37, 0x3e, 0x01, 0x33, 0x32, // .....'..5467>.32 + 0x16, 0x17, 0x05, 0x2e, 0x01, 0x23, 0x22, 0x06, 0x0f, 0x01, 0x01, 0x37, 0x3e, 0x01, 0x35, 0x34, // .....#"....7>.54 + 0x26, 0x27, 0x09, 0x04, 0x01, 0xcd, 0x33, 0xfe, 0x5d, 0x29, 0x17, 0x17, 0x2c, 0x2b, 0x2c, 0x69, // &'....3.])..,+,i + 0x3d, 0x2c, 0x4f, 0x23, 0x01, 0xd6, 0x2c, 0x68, 0x3d, 0x2c, 0x4f, 0x23, 0x34, 0x01, 0xa3, 0x2a, // =,O#..,h=,O#4..* + 0x16, 0x17, 0x2c, 0x2b, 0xfc, 0xed, 0x01, 0x70, 0x01, 0x72, 0xfe, 0x8e, 0xfe, 0x90, 0x03, 0x5d, // ..,+...p.r.....] + 0x29, 0xfe, 0x61, 0x33, 0x23, 0x4e, 0x2b, 0x3e, 0x68, 0x2a, 0x2b, 0x2b, 0x16, 0x17, 0x29, 0x2b, // ).a3#N+>h*++..)+ + 0x2b, 0x16, 0x17, 0x29, 0xfe, 0x61, 0x35, 0x21, 0x4e, 0x2b, 0x3e, 0x68, 0x2a, 0xfe, 0x30, 0xfe, // +..).a5!N+>h*.0. + 0x92, 0x01, 0x6e, 0x01, 0x6d, 0xfe, 0x93, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ..n.m........... + 0x19, 0xfa, 0x6c, 0x40, 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // ..l@_.<......... + 0xd2, 0x7e, 0x21, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xd2, 0x7e, 0x21, 0x7c, 0x00, 0x00, 0xff, 0xc3, // .~!|.....~!|.... + 0x03, 0xfd, 0x03, 0xbd, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x01, 0x00, 0x00, 0x03, 0xc0, 0xff, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x03, 0xfd, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0xe8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x08, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x22, // .......5......." + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x22, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x06, // ......."........ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0xf4, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0xc4, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x01, 0x79, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x07, // .......y........ + 0x04, 0x00, 0x00, 0x12, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x4a, 0x04, 0x00, 0x00, 0x06, // ...........J.... + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0xa5, // ................ + 0x04, 0x00, 0x00, 0xb3, 0x04, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x56, // .......6.......V + 0x04, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ...V............ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x56, 0x04, 0x00, 0x00, 0x56, // ...........V...V + 0x04, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ...F............ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x60, // ...............` + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x60, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // .......`........ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0xc4, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0xc4, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x6c, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x06, // ...l.......F.... + 0x04, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x46, 0x04, 0x00, 0x00, 0x06, // ...F.......F.... + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x88, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x7e, // ...............~ + 0x04, 0x00, 0x01, 0x03, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x09, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x9b, 0x04, 0x00, 0x00, 0x39, // ...............9 + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x17, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x19, 0x04, 0x00, 0x00, 0x19, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x9e, // ................ + 0x04, 0x00, 0x00, 0x85, 0x04, 0x00, 0x00, 0x6e, 0x04, 0x00, 0x00, 0xaa, 0x04, 0x00, 0x00, 0x06, // .......n........ + 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x0d, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, // ................ + 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x06, // ...........N.... + 0x04, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x4e, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x69, // ...N...N...i...i + 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ...i...i........ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0xe6, 0x04, 0x00, 0x00, 0xe6, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x71, // ...............q + 0x04, 0x00, 0x00, 0x8b, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x52, 0x04, 0x00, 0x00, 0x38, // ...........R...8 + 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x01, 0xcf, 0x04, 0x00, 0x01, 0x79, 0x04, 0x00, 0x00, 0x4c, // ...........y...L + 0x04, 0x00, 0x00, 0x49, 0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x4c, // ...I...L...L...L + 0x04, 0x00, 0x01, 0x77, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x01, 0x76, // ...w...........v + 0x04, 0x00, 0x01, 0x76, 0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x01, 0xd2, // ...v...L........ + 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0xeb, 0x04, 0x00, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x4c, // ...............L + 0x04, 0x00, 0x00, 0x49, 0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x4c, // ...I...L...L...L + 0x04, 0x00, 0x00, 0xf0, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0xee, // ................ + 0x04, 0x00, 0x00, 0xee, 0x04, 0x00, 0x00, 0x4c, 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0xee, // .......L........ + 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x06, // ................ + 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x14, 0x00, 0x1e, 0x00, 0x4a, // ...............J + 0x00, 0xa4, 0x01, 0x2c, 0x02, 0x2e, 0x02, 0xba, 0x02, 0xfc, 0x03, 0x3e, 0x03, 0xa8, 0x03, 0xde, // ...,.......>.... + 0x04, 0x68, 0x04, 0xe0, 0x05, 0x3e, 0x05, 0xaa, 0x05, 0xe6, 0x06, 0x42, 0x06, 0xe0, 0x07, 0x3a, // .h...>.....B...: + 0x07, 0xd0, 0x08, 0x00, 0x08, 0x6e, 0x08, 0xdc, 0x09, 0x82, 0x0a, 0x06, 0x0a, 0xc4, 0x0b, 0x18, // .....n.......... + 0x0b, 0xa2, 0x0c, 0x2c, 0x0c, 0x6e, 0x0c, 0x84, 0x0c, 0xbc, 0x0d, 0x48, 0x0d, 0xa8, 0x0e, 0x2a, // ...,.n.....H...* + 0x0e, 0x70, 0x0e, 0xbc, 0x10, 0x22, 0x11, 0x14, 0x11, 0x92, 0x12, 0x10, 0x12, 0x40, 0x12, 0x96, // .p...".......@.. + 0x13, 0x16, 0x13, 0x62, 0x13, 0xb4, 0x14, 0x2c, 0x14, 0xa6, 0x15, 0x04, 0x15, 0x62, 0x15, 0xb2, // ...b...,.....b.. + 0x16, 0x04, 0x16, 0x42, 0x16, 0x98, 0x16, 0xea, 0x17, 0x58, 0x17, 0xd6, 0x18, 0x4c, 0x18, 0xc8, // ...B.....X...L.. + 0x19, 0x0e, 0x19, 0x5a, 0x19, 0xa2, 0x1a, 0x22, 0x1a, 0xe4, 0x1b, 0x3c, 0x1b, 0x94, 0x1b, 0xec, // ...Z..."...<.... + 0x1c, 0x42, 0x1c, 0x7a, 0x1c, 0xb2, 0x1c, 0xea, 0x1d, 0x22, 0x1d, 0x5e, 0x1d, 0x9a, 0x1d, 0xd6, // .B.z.....".^.... + 0x1e, 0x14, 0x1e, 0x36, 0x1e, 0x58, 0x1e, 0x7a, 0x1e, 0x9c, 0x1e, 0xbc, 0x1e, 0xdc, 0x1e, 0xfc, // ...6.X.z........ + 0x1f, 0x1c, 0x1f, 0x74, 0x1f, 0xc0, 0x1f, 0xe8, 0x20, 0x32, 0x20, 0x6e, 0x20, 0xc6, 0x21, 0x02, // ...t.... 2 n .!. + 0x21, 0x4c, 0x21, 0x7c, 0x21, 0xb6, 0x21, 0xfa, 0x22, 0x58, 0x22, 0xba, 0x23, 0x08, 0x23, 0x9a, // !L!|!.!."X".#.#. + 0x24, 0x22, 0x24, 0xb8, 0x25, 0x10, 0x25, 0x44, 0x25, 0xa2, 0x26, 0x12, 0x26, 0x3c, 0x26, 0xe4, // $"$.%.%D%.&.&<&. + 0x27, 0x36, 0x27, 0x7e, 0x27, 0xf4, 0x28, 0x34, 0x28, 0x5a, 0x28, 0xba, 0x29, 0x2a, 0x29, 0x46, // '6'~'.(4(Z(.)*)F + 0x29, 0x5a, 0x29, 0x80, 0x29, 0xae, 0x2a, 0x32, 0x2a, 0x8c, 0x2b, 0x08, 0x2b, 0x4e, 0x2b, 0xc0, // )Z).).*2*.+.+N+. + 0x2b, 0xe6, 0x2c, 0x44, 0x2c, 0xaa, 0x2c, 0xe6, 0x2d, 0x22, 0x2d, 0x5c, 0x2d, 0xe4, 0x2e, 0x6e, // +.,D,.,.-"-.-..n + 0x2e, 0xf2, 0x2f, 0x8a, 0x30, 0x60, 0x31, 0x34, 0x31, 0xe6, 0x32, 0xc0, 0x33, 0x96, 0x34, 0x64, // ../.0`141.2.3.4d + 0x34, 0xb2, 0x35, 0x00, 0x35, 0x4e, 0x35, 0xa2, 0x36, 0x16, 0x36, 0x92, 0x36, 0xfa, 0x37, 0x62, // 4.5.5N5.6.6.6.7b + 0x37, 0xa8, 0x38, 0x18, 0x38, 0x8a, 0x38, 0xda, 0x39, 0x28, 0x39, 0x72, 0x3a, 0x04, 0x3a, 0x72, // 7.8.8.8.9(9r:.:r + 0x3a, 0xf8, 0x3b, 0x74, 0x3b, 0x88, 0x3b, 0xa6, 0x3b, 0xce, 0x3c, 0x16, 0x3c, 0x7c, 0x3c, 0xbe, // :.;t;.;.;.<.<|<. + 0x3d, 0x1c, 0x3d, 0xa2, 0x3e, 0x0c, 0x3e, 0x54, 0x3e, 0x96, 0x3e, 0xaa, 0x3e, 0xda, 0x3f, 0x9a, // =.=.>.>T>.>.>.?. + 0x40, 0x72, 0x40, 0xca, 0x41, 0x66, 0x41, 0xce, 0x42, 0x34, 0x42, 0xa0, 0x43, 0x08, 0x43, 0x60, // @r@.AfA.B4B.C.C` + 0x43, 0x9e, 0x43, 0xf6, 0x44, 0x32, 0x44, 0x78, 0x44, 0xca, 0x45, 0x40, 0x45, 0xa8, 0x45, 0xf0, // C.C.D2DxD.E@E.E. + 0x46, 0x3e, 0x46, 0x8c, 0x46, 0xba, 0x46, 0xe8, 0x47, 0x2c, 0x47, 0x6a, 0x47, 0x98, 0x47, 0xdc, // F>F.F.F.G,GjG.G. + 0x48, 0x1c, 0x48, 0x4e, 0x48, 0x7e, 0x48, 0xc0, 0x48, 0xfe, 0x49, 0x26, 0x49, 0x68, 0x49, 0xa6, // H.HNH~H.H.I&IhI. + 0x49, 0xd6, 0x4a, 0x06, 0x4a, 0x50, 0x4a, 0xa0, 0x4b, 0x04, 0x4b, 0x60, 0x4b, 0xb2, 0x4c, 0x0e, // I.J.JPJ.K.K`K.L. + 0x4c, 0x6c, 0x4c, 0xb6, 0x4d, 0x06, 0x4d, 0x64, 0x4d, 0xc0, 0x4e, 0x08, 0x4e, 0x6a, 0x4e, 0xc8, // LlL.M.MdM.N.NjN. + 0x4f, 0x10, 0x4f, 0x60, 0x50, 0x38, 0x50, 0xb2, 0x51, 0x38, 0x51, 0x96, 0x51, 0xf4, 0x52, 0xca, // O.O`P8P.Q8Q.Q.R. + 0x53, 0x84, 0x53, 0xe4, 0x54, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe8, 0x01, 0x05, // S.S.T(.......... + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x01, 0x3e, 0x00, 0x01, // .............>.. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xba, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, // ................ + 0x02, 0xbe, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x10, 0x02, 0x5e, 0x00, 0x01, // .............^.. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x02, 0xd3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x05, 0x00, 0x0b, 0x02, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, // .....=.......... + 0x02, 0x8e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x18, 0x01, 0x02, 0x00, 0x01, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x1a, 0x03, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x0b, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x14, // .....0.......... + 0x01, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x0b, 0x01, 0x86, 0x00, 0x01, // .J.............. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x32, 0x01, 0xa7, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .......2........ + 0x00, 0x00, 0x00, 0x30, 0x00, 0xd2, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x20, // ...0........... + 0x00, 0x10, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x02, 0x00, 0x0e, 0x02, 0xc5, 0x00, 0x03, // ................ + 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x20, 0x02, 0x6e, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // ....... .n...... + 0x00, 0x04, 0x00, 0x20, 0x02, 0xe3, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x16, // ... ............ + 0x02, 0x48, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x06, 0x00, 0x20, 0x02, 0x9e, 0x00, 0x03, // .H......... .... + 0x00, 0x01, 0x04, 0x09, 0x00, 0x09, 0x00, 0x30, 0x01, 0x1a, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .......0........ + 0x00, 0x0a, 0x00, 0x34, 0x03, 0x1d, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0b, 0x00, 0x5c, // ...4............ + 0x00, 0x5e, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0c, 0x00, 0x28, 0x01, 0x5e, 0x00, 0x03, // .^.........(.^.. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x00, 0x16, 0x01, 0x91, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // ................ + 0x00, 0x0e, 0x00, 0x64, 0x01, 0xd9, 0x4b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2d, 0x49, 0x63, 0x6f, // ...d..Kenney-Ico + 0x6e, 0x2d, 0x46, 0x6f, 0x6e, 0x74, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, // n-Font.K.e.n.n.e + 0x00, 0x79, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x46, // .y.-.I.c.o.n.-.F + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, // .o.n.thttps://gi + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x53, 0x61, 0x6d, 0x42, 0x72, 0x69, 0x73, // thub.com/SamBris + 0x68, 0x65, 0x73, 0x2f, 0x6b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2d, 0x69, 0x63, 0x6f, 0x6e, 0x2d, // hes/kenney-icon- + 0x66, 0x6f, 0x6e, 0x74, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x73, 0x00, 0x3a, // font.h.t.t.p.s.: + 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x67, 0x00, 0x69, 0x00, 0x74, 0x00, 0x68, 0x00, 0x75, 0x00, 0x62, // ././.g.i.t.h.u.b + 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x2f, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6d, // ...c.o.m./.S.a.m + 0x00, 0x42, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2f, // .B.r.i.s.h.e.s./ + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x69, // .k.e.n.n.e.y.-.i + 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, // .c.o.n.-.f.o.n.t + 0x4b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2e, 0x6e, 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x61, // Kenney.nl and Sa + 0x6d, 0x42, 0x72, 0x69, 0x73, 0x68, 0x65, 0x73, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, // mBrishes.K.e.n.n + 0x00, 0x65, 0x00, 0x79, 0x00, 0x2e, 0x00, 0x6e, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6e, // .e.y...n.l. .a.n + 0x00, 0x64, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x42, 0x00, 0x72, 0x00, 0x69, // .d. .S.a.m.B.r.i + 0x00, 0x73, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, 0x4b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2e, 0x6e, // .s.h.e.sKenney.n + 0x6c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x53, 0x61, 0x6d, 0x42, 0x72, 0x69, 0x73, 0x68, 0x65, 0x73, // l and SamBrishes + 0x00, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x79, 0x00, 0x2e, 0x00, 0x6e, // .K.e.n.n.e.y...n + 0x00, 0x6c, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x20, 0x00, 0x53, 0x00, 0x61, // .l. .a.n.d. .S.a + 0x00, 0x6d, 0x00, 0x42, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x65, 0x00, 0x73, // .m.B.r.i.s.h.e.s + 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6b, 0x65, 0x6e, 0x6e, 0x65, // http://www.kenne + 0x79, 0x2e, 0x6e, 0x6c, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, // y.nl.h.t.t.p.:./ + 0x00, 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x6e, // ./.w.w.w...k.e.n + 0x00, 0x6e, 0x00, 0x65, 0x00, 0x79, 0x00, 0x2e, 0x00, 0x6e, 0x00, 0x6c, 0x43, 0x43, 0x30, 0x20, // .n.e.y...n.lCC0 + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x00, 0x43, 0x00, 0x43, 0x00, 0x30, 0x00, 0x20, 0x00, // License.C.C.0. . + 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x68, 0x74, 0x74, // L.i.c.e.n.s.ehtt + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x76, 0x65, 0x63, 0x6f, 0x6d, // ps://creativecom + 0x6d, 0x6f, 0x6e, 0x73, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x64, // mons.org/publicd + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x2f, 0x7a, 0x65, 0x72, 0x6f, 0x2f, 0x31, 0x2e, 0x30, 0x2f, 0x00, // omain/zero/1.0/. + 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x73, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, // h.t.t.p.s.:././. + 0x63, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, 0x00, // c.r.e.a.t.i.v.e. + 0x63, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x2e, 0x00, // c.o.m.m.o.n.s... + 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x70, 0x00, 0x75, 0x00, 0x62, 0x00, 0x6c, 0x00, // o.r.g./.p.u.b.l. + 0x69, 0x00, 0x63, 0x00, 0x64, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6e, 0x00, // i.c.d.o.m.a.i.n. + 0x2f, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x2f, 0x00, 0x31, 0x00, 0x2e, 0x00, // /.z.e.r.o./.1... + 0x30, 0x00, 0x2f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x30, 0x00, 0x56, // 0./Version 1.0.V + 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x31, // .e.r.s.i.o.n. .1 + 0x00, 0x2e, 0x00, 0x30, 0x4b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2d, 0x49, 0x63, 0x6f, 0x6e, 0x2d, // ...0Kenney-Icon- + 0x46, 0x6f, 0x6e, 0x74, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x79, // Font.K.e.n.n.e.y + 0x00, 0x2d, 0x00, 0x49, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x6f, // .-.I.c.o.n.-.F.o + 0x00, 0x6e, 0x00, 0x74, 0x4b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2d, 0x49, 0x63, 0x6f, 0x6e, 0x2d, // .n.tKenney-Icon- + 0x46, 0x6f, 0x6e, 0x74, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x79, // Font.K.e.n.n.e.y + 0x00, 0x2d, 0x00, 0x49, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x46, 0x00, 0x6f, // .-.I.c.o.n.-.F.o + 0x00, 0x6e, 0x00, 0x74, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x00, 0x52, 0x00, 0x65, 0x00, // .n.tRegular.R.e. + 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, 0x4b, 0x65, 0x6e, 0x6e, 0x65, 0x79, 0x2d, // g.u.l.a.rKenney- + 0x49, 0x63, 0x6f, 0x6e, 0x2d, 0x46, 0x6f, 0x6e, 0x74, 0x00, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, // Icon-Font.K.e.n. + 0x6e, 0x00, 0x65, 0x00, 0x79, 0x00, 0x2d, 0x00, 0x49, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6e, 0x00, // n.e.y.-.I.c.o.n. + 0x2d, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x46, 0x6f, 0x6e, 0x74, 0x20, 0x67, 0x65, // -.F.o.n.tFont ge + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x49, 0x63, 0x6f, 0x4d, 0x6f, // nerated by IcoMo + 0x6f, 0x6e, 0x2e, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x67, 0x00, // on..F.o.n.t. .g. + 0x65, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, // e.n.e.r.a.t.e.d. + 0x20, 0x00, 0x62, 0x00, 0x79, 0x00, 0x20, 0x00, 0x49, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x4d, 0x00, // .b.y. .I.c.o.M. + 0x6f, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // o.o.n........... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ........ +}; diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.cpp b/3rdparty/bgfx/examples/common/imgui/imgui.cpp index 60afe3df290..b8bf5b97a39 100644 --- a/3rdparty/bgfx/examples/common/imgui/imgui.cpp +++ b/3rdparty/bgfx/examples/common/imgui/imgui.cpp @@ -48,7 +48,7 @@ #include "fs_imgui_image_swizz.bin.h" // embedded font -#include "droidsans.ttf.h" +#include "roboto_regular.ttf.h" BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4244); // warning C4244: '=' : conversion from '' to '', possible loss of data @@ -451,7 +451,7 @@ struct Imgui return bgfx::createTexture2D(uint16_t(_width), uint16_t(_height), 0, bgfx::TextureFormat::BGRA8, 0, mem); } - ImguiFontHandle create(const void* _data, uint32_t _size, float _fontSize, bx::AllocatorI* _allocator) + ImguiFontHandle create(float _fontSize, bx::AllocatorI* _allocator) { m_allocator = _allocator; @@ -463,16 +463,10 @@ struct Imgui } #endif // BX_CONFIG_ALLOCATOR_CRT - if (NULL == _data) - { - _data = s_droidSansTtf; - _size = sizeof(s_droidSansTtf); - } - - IMGUI_create(_data, _size, _fontSize, m_allocator); + IMGUI_create(_fontSize, m_allocator); m_nvg = nvgCreate(1, m_view, m_allocator); - nvgCreateFontMem(m_nvg, "default", (unsigned char*)_data, INT32_MAX, 0); + nvgCreateFontMem(m_nvg, "default", (unsigned char*)s_robotoRegularTtf, INT32_MAX, 0); nvgFontSize(m_nvg, _fontSize); nvgFontFace(m_nvg, "default"); @@ -606,7 +600,7 @@ struct Imgui m_missingTexture = genMissingTexture(256, 256, 0.04f); #if !USE_NANOVG_FONT - const ImguiFontHandle handle = createFont(_data, _fontSize); + const ImguiFontHandle handle = createFont(s_robotoRegularTtf, _fontSize); m_currentFontIdx = handle.idx; #else const ImguiFontHandle handle = { bgfx::invalidHandle }; @@ -879,7 +873,10 @@ struct Imgui bgfx::setViewRect(_view, 0, 0, _width, _height); } - updateInput(mx, my, _button, _scroll, _inputChar); + if (!ImGui::IsMouseHoveringAnyWindow() ) + { + updateInput(mx, my, _button, _scroll, _inputChar); + } m_hot = m_hotToBe; m_hotToBe = 0; @@ -3262,9 +3259,9 @@ void imguiFree(void* _ptr, void*) BX_FREE(s_imgui.m_allocator, _ptr); } -ImguiFontHandle imguiCreate(const void* _data, uint32_t _size, float _fontSize, bx::AllocatorI* _allocator) +ImguiFontHandle imguiCreate(const void*, uint32_t, float _fontSize, bx::AllocatorI* _allocator) { - return s_imgui.create(_data, _size, _fontSize, _allocator); + return s_imgui.create(_fontSize, _allocator); } void imguiDestroy() @@ -3573,7 +3570,10 @@ float imguiGetTextLength(const char* _text, ImguiFontHandle _handle) bool imguiMouseOverArea() { - return s_imgui.m_insideArea; + return s_imgui.m_insideArea + || ImGui::IsAnyItemHovered() + || ImGui::IsMouseHoveringAnyWindow() + ; } bgfx::ProgramHandle imguiGetImageProgram(uint8_t _mip) diff --git a/3rdparty/bgfx/examples/common/imgui/imgui.h b/3rdparty/bgfx/examples/common/imgui/imgui.h index 16313f1b3c9..273f2a817e7 100644 --- a/3rdparty/bgfx/examples/common/imgui/imgui.h +++ b/3rdparty/bgfx/examples/common/imgui/imgui.h @@ -29,6 +29,8 @@ #include #include #include +#include +#include #define IMGUI_MBUT_LEFT 0x01 #define IMGUI_MBUT_RIGHT 0x02 @@ -131,13 +133,13 @@ inline uint32_t imguiRGBA(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 255) BGFX_HANDLE(ImguiFontHandle); -ImguiFontHandle imguiCreateFont(const void* _data, float _fontSize=15.0f); +ImguiFontHandle imguiCreateFont(const void* _data, float _fontSize = 18.0f); void imguiSetFont(ImguiFontHandle _handle); ImguiFontHandle imguiGetCurrentFont(); namespace bx { struct AllocatorI; } -ImguiFontHandle imguiCreate(const void* _data = NULL, uint32_t _size = 0, float _fontSize = 15.0f, bx::AllocatorI* _allocator = NULL); +ImguiFontHandle imguiCreate(const void* _data = NULL, uint32_t _size = 0, float _fontSize = 18.0f, bx::AllocatorI* _allocator = NULL); void imguiDestroy(); void imguiBeginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, uint16_t _width, uint16_t _height, char _inputChar = 0, uint8_t _view = 255); diff --git a/3rdparty/bgfx/examples/common/imgui/makefile b/3rdparty/bgfx/examples/common/imgui/makefile index 965ac34d302..b7d3b8329bb 100644 --- a/3rdparty/bgfx/examples/common/imgui/makefile +++ b/3rdparty/bgfx/examples/common/imgui/makefile @@ -8,5 +8,23 @@ include ../../../scripts/shader-embeded.mk droidsans.ttf.h: ../../runtime/font/droidsans.ttf @bin2c -f $(<) -o $(@) -n s_droidSansTtf -rebuild: droidsans.ttf.h +roboto_regular.ttf.h: ../../runtime/font/roboto-regular.ttf + @bin2c -f $(<) -o $(@) -n s_robotoRegularTtf + +robotomono_regular.ttf.h: ../../runtime/font/robotomono-regular.ttf + @bin2c -f $(<) -o $(@) -n s_robotoMonoRegularTtf + +icons_font_awesome.ttf.h: ../../runtime/font/fontawesome-webfont.ttf + @bin2c -f $(<) -o $(@) -n s_iconsFontAwesomeTtf + +icons_kenney.ttf.h: ../../runtime/font/kenney-icon-font.ttf + @bin2c -f $(<) -o $(@) -n s_iconsKenneyTtf + +fonts: droidsans.ttf.h \ + roboto_regular.ttf.h \ + robotomono_regular.ttf.h \ + icons_font_awesome.ttf.h \ + icons_kenney.ttf.h + +rebuild: fonts @make -s --no-print-directory clean all diff --git a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp index c1dddc2ac67..788a478e61d 100644 --- a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp +++ b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp @@ -11,7 +11,6 @@ #include #include "imgui.h" #include "ocornut_imgui.h" -#include #ifndef USE_ENTRY # if defined(SCI_NAMESPACE) @@ -33,6 +32,24 @@ #include "vs_ocornut_imgui.bin.h" #include "fs_ocornut_imgui.bin.h" +#include "roboto_regular.ttf.h" +#include "robotomono_regular.ttf.h" +#include "icons_kenney.ttf.h" +#include "icons_font_awesome.ttf.h" + +struct FontRangeMerge +{ + const void* data; + size_t size; + ImWchar ranges[3]; +}; + +static FontRangeMerge s_fontRangeMerge[] = +{ + { s_iconsKenneyTtf, sizeof(s_iconsKenneyTtf), { ICON_MIN_KI, ICON_MAX_KI, 0 } }, + { s_iconsFontAwesomeTtf, sizeof(s_iconsFontAwesomeTtf), { ICON_MIN_FA, ICON_MAX_FA, 0 } }, +}; + class PlatformWindow : public ImGuiWM::PlatformWindow { typedef ImGuiWM::PlatformWindow Super; @@ -345,7 +362,7 @@ struct OcornutImguiContext } } - void create(const void* _data, uint32_t _size, float _fontSize, bx::AllocatorI* _allocator) + void create(float _fontSize, bx::AllocatorI* _allocator) { m_viewId = 255; m_allocator = _allocator; @@ -430,9 +447,28 @@ struct OcornutImguiContext int32_t width; int32_t height; { - void* font = ImGui::MemAlloc(_size); - memcpy(font, _data, _size); - io.Fonts->AddFontFromMemoryTTF(font, _size, _fontSize); + ImFontConfig config; + config.FontDataOwnedByAtlas = false; + config.MergeMode = false; +// config.MergeGlyphCenterV = true; + + m_font[ImGui::Font::Regular] = io.Fonts->AddFontFromMemoryTTF( (void*)s_robotoRegularTtf, sizeof(s_robotoRegularTtf), _fontSize, &config); + m_font[ImGui::Font::Mono ] = io.Fonts->AddFontFromMemoryTTF( (void*)s_robotoMonoRegularTtf, sizeof(s_robotoMonoRegularTtf), _fontSize-3.0f, &config); + + config.MergeMode = true; + config.DstFont = m_font[ImGui::Font::Regular]; + + for (uint32_t ii = 0; ii < BX_COUNTOF(s_fontRangeMerge); ++ii) + { + const FontRangeMerge& frm = s_fontRangeMerge[ii]; + + io.Fonts->AddFontFromMemoryTTF( (void*)frm.data + , (int)frm.size + , _fontSize-3.0f + , &config + , frm.ranges + ); + } } io.Fonts->GetTexDataAsRGBA32(&data, &width, &height); @@ -445,9 +481,6 @@ struct OcornutImguiContext , bgfx::copy(data, width*height*4) ); - ImGuiStyle& style = ImGui::GetStyle(); - style.FrameRounding = 4.0f; - m_wm = BX_NEW(m_allocator, WindowManager); m_wm->Init(); @@ -517,6 +550,8 @@ struct OcornutImguiContext // https://gist.github.com/dougbinks/8089b4bbaccaaf6fa204236978d165a9 ImGuiStyle& style = ImGui::GetStyle(); + style.FrameRounding = 4.0f; + // light style from Pacome Danhiez (user itamago) // https://github.com/ocornut/imgui/pull/511#issuecomment-175719267 style.Colors[ImGuiCol_Text] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f); @@ -624,9 +659,24 @@ struct OcornutImguiContext #endif // 0 #if 0 - extern void ShowExampleAppCustomNodeGraph(bool* opened); - bool opened = true; - ShowExampleAppCustomNodeGraph(&opened); + { + static ImGui::MemoryEditor me; + bool open = true; + if (ImGui::Begin("HexII", &open)) + { + me.Draw(s_iconsKenneyTtf, sizeof(s_iconsKenneyTtf) ); + + ImGui::End(); + } + } +#endif // 0 + +#if 0 + { + extern void ShowExampleAppCustomNodeGraph(bool* opened); + bool opened = true; + ShowExampleAppCustomNodeGraph(&opened); + } #endif // 0 } @@ -642,6 +692,7 @@ struct OcornutImguiContext bgfx::ProgramHandle m_program; bgfx::TextureHandle m_texture; bgfx::UniformHandle s_tex; + ImFont* m_font[ImGui::Font::Count]; WindowManager* m_wm; int64_t m_last; int32_t m_lastScroll; @@ -765,9 +816,9 @@ void OcornutImguiContext::renderDrawLists(ImDrawData* _drawData) s_ctx.render(_drawData); } -void IMGUI_create(const void* _data, uint32_t _size, float _fontSize, bx::AllocatorI* _allocator) +void IMGUI_create(float _fontSize, bx::AllocatorI* _allocator) { - s_ctx.create(_data, _size, _fontSize, _allocator); + s_ctx.create(_fontSize, _allocator); } void IMGUI_destroy() @@ -784,3 +835,11 @@ void IMGUI_endFrame() { s_ctx.endFrame(); } + +namespace ImGui +{ + void PushFont(Font::Enum _font) + { + PushFont(s_ctx.m_font[_font]); + } +} // namespace ImGui diff --git a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h index 5cad5c22879..f66372c5d6e 100644 --- a/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h +++ b/3rdparty/bgfx/examples/common/imgui/ocornut_imgui.h @@ -10,7 +10,7 @@ namespace bx { struct AllocatorI; } -void IMGUI_create(const void* _data, uint32_t _size, float _fontSize, bx::AllocatorI* _allocator); +void IMGUI_create(float _fontSize, bx::AllocatorI* _allocator); void IMGUI_destroy(); void IMGUI_beginFrame(int32_t _mx, int32_t _my, uint8_t _button, int32_t _scroll, int _width, int _height, char _inputChar, uint8_t _viewId); void IMGUI_endFrame(); diff --git a/3rdparty/bgfx/examples/common/imgui/roboto_regular.ttf.h b/3rdparty/bgfx/examples/common/imgui/roboto_regular.ttf.h new file mode 100644 index 00000000000..edec45c29e8 --- /dev/null +++ b/3rdparty/bgfx/examples/common/imgui/roboto_regular.ttf.h @@ -0,0 +1,9088 @@ +static const uint8_t s_robotoRegularTtf[145348] = +{ + 0x00, 0x01, 0x00, 0x00, 0x00, 0x11, 0x01, 0x00, 0x00, 0x04, 0x00, 0x10, 0x47, 0x50, 0x4f, 0x53, // ............GPOS + 0x2a, 0xcb, 0xe6, 0x87, 0x00, 0x01, 0xde, 0xbc, 0x00, 0x00, 0x53, 0xba, 0x47, 0x53, 0x55, 0x42, // *.........S.GSUB + 0x6e, 0x02, 0x55, 0xa6, 0x00, 0x02, 0x32, 0x78, 0x00, 0x00, 0x05, 0x4a, 0x4c, 0x54, 0x53, 0x48, // n.U...2x...JLTSH + 0xa6, 0x14, 0xa2, 0x1d, 0x00, 0x00, 0x12, 0x24, 0x00, 0x00, 0x04, 0x0f, 0x4f, 0x53, 0x2f, 0x32, // .......$....OS/2 + 0xb9, 0xc7, 0x01, 0x3b, 0x00, 0x00, 0x01, 0x98, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, // ...;.......`cmap + 0x52, 0x7f, 0x37, 0xd3, 0x00, 0x00, 0x16, 0x34, 0x00, 0x00, 0x04, 0x54, 0x63, 0x76, 0x74, 0x20, // R.7....4...Tcvt + 0x1e, 0xe0, 0x02, 0x54, 0x00, 0x00, 0x1d, 0xe0, 0x00, 0x00, 0x00, 0x30, 0x66, 0x70, 0x67, 0x6d, // ...T.......0fpgm + 0x2f, 0xe6, 0x4e, 0xab, 0x00, 0x00, 0x1a, 0x88, 0x00, 0x00, 0x01, 0xbc, 0x67, 0x61, 0x73, 0x70, // /.N.........gasp + 0x00, 0x08, 0x00, 0x13, 0x00, 0x01, 0xde, 0xb0, 0x00, 0x00, 0x00, 0x0c, 0x67, 0x6c, 0x79, 0x66, // ............glyf + 0xcd, 0x5e, 0x32, 0x3b, 0x00, 0x00, 0x26, 0x28, 0x00, 0x01, 0x90, 0x4c, 0x68, 0x65, 0x61, 0x64, // .^2;..&(...Lhead + 0xff, 0x11, 0xcf, 0xae, 0x00, 0x00, 0x01, 0x1c, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61, // ...........6hhea + 0x0d, 0x13, 0x0a, 0x36, 0x00, 0x00, 0x01, 0x54, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, // ...6...T...$hmtx + 0x7a, 0x3c, 0x75, 0x33, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x10, 0x2c, 0x6c, 0x6f, 0x63, 0x61, // z.h...t....post + 0x42, 0x05, 0xec, 0x34, 0x00, 0x01, 0xba, 0xf8, 0x00, 0x00, 0x23, 0xb6, 0x70, 0x72, 0x65, 0x70, // B..4......#.prep + 0xb1, 0x01, 0xb3, 0x50, 0x00, 0x00, 0x1c, 0x44, 0x00, 0x00, 0x01, 0x9c, 0x00, 0x01, 0x00, 0x00, // ...P...D........ + 0x00, 0x01, 0x00, 0x00, 0x86, 0x5b, 0xc8, 0x05, 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x19, 0x08, 0x00, // .....[.._.<..... + 0x00, 0x00, 0x00, 0x00, 0xcc, 0x47, 0xb8, 0x33, 0x00, 0x00, 0x00, 0x00, 0xce, 0x14, 0xcc, 0x31, // .....G.3.......1 + 0xfc, 0x2c, 0xfd, 0xd5, 0x09, 0x5c, 0x08, 0x77, 0x00, 0x00, 0x00, 0x09, 0x00, 0x02, 0x00, 0x00, // .,.....w........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x08, 0x62, 0xfd, 0xd5, 0x00, 0x00, 0x09, 0x16, // .........b...... + 0xfc, 0x2c, 0xff, 0x3f, 0x08, 0x82, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .,.?............ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x00, 0x97, // ................ + 0x00, 0x16, 0x00, 0x5f, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, // ..._............ + 0x02, 0x00, 0x02, 0x9b, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x04, 0x9c, 0x01, 0x90, 0x00, 0x05, // ................ + 0x00, 0x00, 0x05, 0x9a, 0x05, 0x33, 0x00, 0x00, 0x01, 0x1f, 0x05, 0x9a, 0x05, 0x33, 0x00, 0x00, // .....3.......3.. + 0x03, 0xd1, 0x00, 0x66, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...f............ + 0x00, 0x00, 0xe0, 0x00, 0x02, 0xef, 0x50, 0x00, 0x20, 0x5b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ......P. [... .. + 0x00, 0x00, 0x47, 0x6f, 0x6f, 0x67, 0x00, 0x00, 0x00, 0x0d, 0xff, 0xfd, 0x08, 0x62, 0xfd, 0xd5, // ..Goog.......b.. + 0x00, 0x00, 0x08, 0x62, 0x02, 0x2b, 0x20, 0x00, 0x01, 0x9f, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x3a, // ...b.+ ...O....: + 0x05, 0xb0, 0x00, 0x20, 0x00, 0x20, 0x00, 0x02, 0x01, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ... . .......... + 0x01, 0xfd, 0x00, 0x00, 0x01, 0xfd, 0x00, 0x00, 0x02, 0x1b, 0x00, 0xab, 0x02, 0x9c, 0x00, 0x50, // ...............P + 0x04, 0xfc, 0x00, 0x46, 0x04, 0x81, 0x00, 0x6e, 0x05, 0xda, 0x00, 0x68, 0x04, 0xfc, 0x00, 0x40, // ...F...n...h...@ + 0x01, 0x67, 0x00, 0x50, 0x02, 0xa7, 0x00, 0x84, 0x02, 0xaf, 0x00, 0x06, 0x03, 0x74, 0x00, 0x1c, // .g.P.........t.. + 0x04, 0x8a, 0x00, 0x4e, 0x01, 0x94, 0x00, 0x30, 0x02, 0x31, 0x00, 0x23, 0x02, 0x24, 0x00, 0xa1, // ...N...0.1.#.$.. + 0x03, 0x52, 0x00, 0x10, 0x04, 0x82, 0x00, 0x71, 0x04, 0x81, 0x00, 0xba, 0x04, 0x81, 0x00, 0x5c, // .R.....q........ + 0x04, 0x81, 0x00, 0x5f, 0x04, 0x81, 0x00, 0x37, 0x04, 0x81, 0x00, 0x98, 0x04, 0x81, 0x00, 0x84, // ..._...7........ + 0x04, 0x81, 0x00, 0x4d, 0x04, 0x81, 0x00, 0x66, 0x04, 0x81, 0x00, 0x53, 0x02, 0x05, 0x00, 0xa1, // ...M...f...S.... + 0x02, 0x0d, 0x00, 0x63, 0x04, 0x10, 0x00, 0x47, 0x04, 0x81, 0x00, 0x98, 0x04, 0x30, 0x00, 0x88, // ...c...G.....0.. + 0x03, 0xce, 0x00, 0x3a, 0x07, 0x29, 0x00, 0x60, 0x05, 0x2e, 0x00, 0x14, 0x05, 0x1d, 0x00, 0xb4, // ...:.).`........ + 0x05, 0x11, 0x00, 0x76, 0x05, 0x45, 0x00, 0xb4, 0x04, 0xad, 0x00, 0xb4, 0x04, 0xa9, 0x00, 0xb4, // ...v.E.......... + 0x05, 0x74, 0x00, 0x78, 0x05, 0xb5, 0x00, 0xb4, 0x02, 0x43, 0x00, 0xbe, 0x04, 0x6a, 0x00, 0x3d, // .t.x.....C...j.= + 0x05, 0x25, 0x00, 0xb4, 0x04, 0x52, 0x00, 0xb4, 0x07, 0x07, 0x00, 0xb4, 0x05, 0xb5, 0x00, 0xb4, // .%...R.......... + 0x05, 0x74, 0x00, 0x71, 0x05, 0x20, 0x00, 0xb4, 0x05, 0x74, 0x00, 0x71, 0x05, 0x4d, 0x00, 0xb4, // .t.q. ...t.q.M.. + 0x04, 0xfd, 0x00, 0x61, 0x04, 0xb0, 0x00, 0x22, 0x05, 0x6a, 0x00, 0x93, 0x05, 0x0f, 0x00, 0x16, // ...a...".j...... + 0x07, 0x11, 0x00, 0x36, 0x05, 0x0f, 0x00, 0x42, 0x04, 0xe2, 0x00, 0x14, 0x04, 0xc9, 0x00, 0x61, // ...6...B.......a + 0x02, 0x28, 0x00, 0x8f, 0x03, 0x4e, 0x00, 0x27, 0x02, 0x28, 0x00, 0x0b, 0x03, 0x58, 0x00, 0x3d, // .(...N.'.(...X.= + 0x03, 0xa3, 0x00, 0x04, 0x02, 0x81, 0x00, 0x52, 0x04, 0x66, 0x00, 0x6a, 0x04, 0x8c, 0x00, 0x8f, // .......R.f.j.... + 0x04, 0x3f, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x62, 0x04, 0x3b, 0x00, 0x63, 0x02, 0xc3, 0x00, 0x38, // .?.a...b.;.c...8 + 0x04, 0x8c, 0x00, 0x64, 0x04, 0x8c, 0x00, 0x8f, 0x02, 0x04, 0x00, 0x9f, 0x02, 0x12, 0xff, 0xbe, // ...d............ + 0x04, 0x1a, 0x00, 0x90, 0x02, 0x04, 0x00, 0x9f, 0x06, 0xfe, 0x00, 0x8f, 0x04, 0x8c, 0x00, 0x8f, // ................ + 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x8c, 0x00, 0x62, 0x02, 0xbe, 0x00, 0x8f, // ...a.......b.... + 0x04, 0x2f, 0x00, 0x67, 0x02, 0xc4, 0x00, 0x22, 0x04, 0x8c, 0x00, 0x8b, 0x04, 0x06, 0x00, 0x2e, // ./.g..."........ + 0x06, 0x0e, 0x00, 0x2d, 0x04, 0x06, 0x00, 0x2e, 0x04, 0x06, 0x00, 0x1a, 0x04, 0x06, 0x00, 0x5e, // ...-...........^ + 0x02, 0xb8, 0x00, 0x3f, 0x01, 0xfb, 0x00, 0xaf, 0x02, 0xb8, 0x00, 0x15, 0x05, 0x6f, 0x00, 0x80, // ...?.........o.. + 0x01, 0xfd, 0x00, 0x00, 0x01, 0xfb, 0x00, 0x90, 0x04, 0x62, 0x00, 0x6b, 0x04, 0xaa, 0x00, 0x46, // .........b.k...F + 0x05, 0xb0, 0x00, 0x68, 0x04, 0xdb, 0x00, 0x1e, 0x01, 0xf3, 0x00, 0x91, 0x04, 0xeb, 0x00, 0x5a, // ...h...........Z + 0x03, 0xfd, 0x00, 0xaa, 0x06, 0x44, 0x00, 0x58, 0x03, 0x95, 0x00, 0x78, 0x03, 0xc6, 0x00, 0x62, // .....D.X...x...b + 0x04, 0x71, 0x00, 0x7f, 0x02, 0x31, 0x00, 0x23, 0x06, 0x44, 0x00, 0x58, 0x03, 0xb6, 0x00, 0x7b, // .q...1.#.D.X...{ + 0x02, 0xfb, 0x00, 0x80, 0x04, 0x49, 0x00, 0x63, 0x03, 0x64, 0x00, 0x71, 0x03, 0x6c, 0x00, 0x6a, // .....I.c.d.q.l.j + 0x02, 0x8e, 0x00, 0x83, 0x04, 0x8c, 0x00, 0x99, 0x03, 0xee, 0x00, 0x3f, 0x02, 0x1c, 0x00, 0xa1, // ...........?.... + 0x01, 0xfd, 0x00, 0x77, 0x02, 0x2d, 0x00, 0x5f, 0x03, 0xa5, 0x00, 0x78, 0x03, 0xc6, 0x00, 0x6e, // ...w.-._...x...n + 0x06, 0x3b, 0x00, 0xb8, 0x06, 0xac, 0x00, 0xb8, 0x06, 0xf5, 0x00, 0x7a, 0x03, 0xf5, 0x00, 0x72, // .;.........z...r + 0x05, 0x2e, 0x00, 0x14, 0x05, 0x2e, 0x00, 0x14, 0x05, 0x2e, 0x00, 0x14, 0x05, 0x2e, 0x00, 0x14, // ................ + 0x05, 0x2e, 0x00, 0x14, 0x05, 0x2e, 0x00, 0x14, 0x07, 0x82, 0xff, 0xec, 0x05, 0x11, 0x00, 0x76, // ...............v + 0x04, 0xad, 0x00, 0xb4, 0x04, 0xad, 0x00, 0xb4, 0x04, 0xad, 0x00, 0xb4, 0x04, 0xad, 0x00, 0xb4, // ................ + 0x02, 0x43, 0xff, 0xde, 0x02, 0x43, 0x00, 0xbe, 0x02, 0x43, 0xff, 0xf1, 0x02, 0x43, 0xff, 0xcb, // .C...C...C...C.. + 0x05, 0x63, 0x00, 0x2a, 0x05, 0xb5, 0x00, 0xb4, 0x05, 0x74, 0x00, 0x71, 0x05, 0x74, 0x00, 0x71, // .c.*.....t.q.t.q + 0x05, 0x74, 0x00, 0x71, 0x05, 0x74, 0x00, 0x71, 0x05, 0x74, 0x00, 0x71, 0x04, 0x48, 0x00, 0x58, // .t.q.t.q.t.q.H.X + 0x05, 0x74, 0x00, 0x71, 0x05, 0x6a, 0x00, 0x93, 0x05, 0x6a, 0x00, 0x93, 0x05, 0x6a, 0x00, 0x93, // .t.q.j...j...j.. + 0x05, 0x6a, 0x00, 0x93, 0x04, 0xe2, 0x00, 0x14, 0x04, 0xb9, 0x00, 0xa3, 0x04, 0xc5, 0x00, 0x89, // .j.............. + 0x04, 0x66, 0x00, 0x6a, 0x04, 0x66, 0x00, 0x6a, 0x04, 0x66, 0x00, 0x6a, 0x04, 0x66, 0x00, 0x6a, // .f.j.f.j.f.j.f.j + 0x04, 0x66, 0x00, 0x6a, 0x04, 0x66, 0x00, 0x6a, 0x06, 0xc1, 0x00, 0x3a, 0x04, 0x3f, 0x00, 0x61, // .f.j.f.j...:.?.a + 0x04, 0x3b, 0x00, 0x63, 0x04, 0x3b, 0x00, 0x63, 0x04, 0x3b, 0x00, 0x63, 0x04, 0x3b, 0x00, 0x63, // .;.c.;.c.;.c.;.c + 0x02, 0x03, 0xff, 0xb9, 0x02, 0x03, 0x00, 0x99, 0x02, 0x03, 0xff, 0xcc, 0x02, 0x03, 0xff, 0xa6, // ................ + 0x04, 0xb2, 0x00, 0x48, 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x61, // ...H.......a...a + 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x61, 0x04, 0x92, 0x00, 0x47, // ...a...a...a...G + 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x8b, 0x04, 0x8c, 0x00, 0x8b, 0x04, 0x8c, 0x00, 0x8b, // ...a............ + 0x04, 0x8c, 0x00, 0x8b, 0x04, 0x06, 0x00, 0x1a, 0x04, 0xa2, 0x00, 0x99, 0x04, 0x06, 0x00, 0x1a, // ................ + 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, // .....f.j.....f.j + 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x11, 0x00, 0x76, 0x04, 0x3f, 0x00, 0x61, // .....f.j...v.?.a + 0x05, 0x11, 0x00, 0x76, 0x04, 0x3f, 0x00, 0x61, 0x05, 0x11, 0x00, 0x76, 0x04, 0x3f, 0x00, 0x61, // ...v.?.a...v.?.a + 0x05, 0x11, 0x00, 0x76, 0x04, 0x3f, 0x00, 0x61, 0x05, 0x45, 0x00, 0xb4, 0x05, 0x22, 0x00, 0x62, // ...v.?.a.E...".b + 0x05, 0x63, 0x00, 0x2a, 0x04, 0xaa, 0x00, 0x62, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, // .c.*...b.....;.c + 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, // .....;.c.....;.c + 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, // .....;.c.....;.c + 0x05, 0x74, 0x00, 0x78, 0x04, 0x8c, 0x00, 0x64, 0x05, 0x74, 0x00, 0x78, 0x04, 0x8c, 0x00, 0x64, // .t.x...d.t.x...d + 0x05, 0x74, 0x00, 0x78, 0x04, 0x8c, 0x00, 0x64, 0x05, 0x74, 0x00, 0x78, 0x04, 0x8c, 0x00, 0x64, // .t.x...d.t.x...d + 0x05, 0xb5, 0x00, 0xb4, 0x04, 0x8c, 0x00, 0x8f, 0x05, 0x9f, 0x00, 0x1f, 0x04, 0xaa, 0x00, 0x01, // ................ + 0x02, 0x43, 0xff, 0xc8, 0x02, 0x03, 0xff, 0xa3, 0x02, 0x43, 0xff, 0xc0, 0x02, 0x03, 0xff, 0x9b, // .C.......C...... + 0x02, 0x43, 0xff, 0xf8, 0x02, 0x03, 0xff, 0xd3, 0x02, 0x43, 0x00, 0x2e, 0x02, 0x04, 0x00, 0x0e, // .C.......C...... + 0x02, 0x43, 0x00, 0xb4, 0x02, 0x03, 0x00, 0x99, 0x06, 0xad, 0x00, 0xbe, 0x04, 0x16, 0x00, 0x9f, // .C.............. + 0x04, 0x6a, 0x00, 0x3d, 0x02, 0x0b, 0xff, 0xbc, 0x05, 0x25, 0x00, 0xb4, 0x04, 0x1a, 0x00, 0x90, // .j.=.....%...... + 0x04, 0x78, 0x00, 0x99, 0x04, 0x52, 0x00, 0xb4, 0x02, 0x04, 0x00, 0x9f, 0x04, 0x52, 0x00, 0xb4, // .x...R.......R.. + 0x02, 0x04, 0x00, 0x6e, 0x04, 0x52, 0x00, 0xb4, 0x02, 0x9a, 0x00, 0x9f, 0x04, 0x52, 0x00, 0xb4, // ...n.R.......R.. + 0x02, 0xe0, 0x00, 0x9f, 0x04, 0x35, 0x00, 0x28, 0x02, 0x2e, 0x00, 0x25, 0x05, 0xb5, 0x00, 0xb4, // .....5.(...%.... + 0x04, 0x8c, 0x00, 0x8f, 0x05, 0xb5, 0x00, 0xb4, 0x04, 0x8c, 0x00, 0x8f, 0x05, 0xb5, 0x00, 0xb4, // ................ + 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x8c, 0xff, 0xe0, 0x05, 0x88, 0x00, 0xa1, 0x04, 0x8c, 0x00, 0x8f, // ................ + 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, // .t.q...a.t.q...a + 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, 0x07, 0xa8, 0x00, 0x68, 0x07, 0x3e, 0x00, 0x61, // .t.q...a...h.>.a + 0x05, 0x4d, 0x00, 0xb4, 0x02, 0xbe, 0x00, 0x8f, 0x05, 0x4d, 0x00, 0xb4, 0x02, 0xbe, 0x00, 0x6b, // .M.......M.....k + 0x05, 0x4d, 0x00, 0xb4, 0x02, 0xbe, 0x00, 0x65, 0x04, 0xfd, 0x00, 0x61, 0x04, 0x2f, 0x00, 0x67, // .M.....e...a./.g + 0x04, 0xfd, 0x00, 0x61, 0x04, 0x2f, 0x00, 0x67, 0x04, 0xfd, 0x00, 0x61, 0x04, 0x2f, 0x00, 0x67, // ...a./.g...a./.g + 0x04, 0xfd, 0x00, 0x61, 0x04, 0x2f, 0x00, 0x67, 0x04, 0xb0, 0x00, 0x22, 0x02, 0xc4, 0x00, 0x22, // ...a./.g..."..." + 0x04, 0xb0, 0x00, 0x22, 0x02, 0xec, 0x00, 0x22, 0x04, 0xb0, 0x00, 0x22, 0x02, 0xc4, 0xff, 0xf8, // ..."..."...".... + 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, // .j.......j...... + 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, // .j.......j...... + 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, // .j.......j...... + 0x07, 0x11, 0x00, 0x36, 0x06, 0x0e, 0x00, 0x2d, 0x04, 0xe2, 0x00, 0x14, 0x04, 0x06, 0x00, 0x1a, // ...6...-........ + 0x04, 0xe2, 0x00, 0x14, 0x04, 0xc9, 0x00, 0x61, 0x04, 0x06, 0x00, 0x5e, 0x04, 0xc9, 0x00, 0x61, // .......a...^...a + 0x04, 0x06, 0x00, 0x5e, 0x04, 0xc9, 0x00, 0x61, 0x04, 0x06, 0x00, 0x5e, 0x02, 0x04, 0x00, 0x9f, // ...^...a...^.... + 0x02, 0xbe, 0xff, 0xe9, 0x05, 0x7b, 0x00, 0x6c, 0x04, 0x97, 0x00, 0x61, 0x05, 0x96, 0x00, 0x93, // .....{.l...a.... + 0x04, 0xb4, 0x00, 0x8b, 0x02, 0x0b, 0xff, 0xbc, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, // .............f.j + 0x07, 0x82, 0xff, 0xec, 0x06, 0xc1, 0x00, 0x3a, 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, // .......:.t.q...a + 0x04, 0xfd, 0x00, 0x61, 0x04, 0x2f, 0x00, 0x67, 0x02, 0x0b, 0xff, 0xbc, 0x01, 0xa2, 0x00, 0x50, // ...a./.g.......P + 0x03, 0xd3, 0x00, 0xab, 0x03, 0x9a, 0x00, 0x8c, 0x03, 0x6c, 0x00, 0x81, 0x02, 0x2c, 0x00, 0xa0, // .........l...,.. + 0x02, 0xb8, 0x00, 0x85, 0x02, 0x32, 0x00, 0x44, 0x03, 0xd3, 0x00, 0x87, 0x02, 0xfa, 0x00, 0x64, // .....2.D.......d + 0x02, 0xa0, 0x00, 0xb6, 0x00, 0x00, 0xfc, 0xd1, 0x00, 0x00, 0xfd, 0x6f, 0x00, 0x00, 0xfc, 0x8d, // ...........o.... + 0x00, 0x00, 0xfd, 0x5b, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x00, 0xfd, 0x3c, 0x02, 0x0e, 0x00, 0xc3, // ...[...,...<.... + 0x04, 0x15, 0x00, 0xa1, 0x05, 0x2e, 0x00, 0x14, 0x02, 0x1d, 0x00, 0xa1, 0x05, 0x11, 0xff, 0xe3, // ................ + 0x06, 0x19, 0x00, 0x14, 0x02, 0xa7, 0x00, 0x18, 0x05, 0x88, 0x00, 0x44, 0x05, 0x46, 0xff, 0x81, // ...........D.F.. + 0x05, 0x6a, 0x00, 0x3d, 0x02, 0xa0, 0xff, 0xcd, 0x05, 0x2e, 0x00, 0x14, 0x05, 0x1d, 0x00, 0xb4, // .j.=............ + 0x04, 0x74, 0x00, 0xb4, 0x05, 0xa7, 0x00, 0x1e, 0x04, 0xad, 0x00, 0xb4, 0x04, 0xc9, 0x00, 0x61, // .t.............a + 0x05, 0xb5, 0x00, 0xb4, 0x05, 0x74, 0x00, 0x71, 0x02, 0x43, 0x00, 0xbe, 0x05, 0x25, 0x00, 0xb4, // .....t.q.C...%.. + 0x05, 0x41, 0x00, 0x31, 0x07, 0x07, 0x00, 0xb4, 0x05, 0xb5, 0x00, 0xb4, 0x04, 0x95, 0x00, 0x7b, // .A.1...........{ + 0x05, 0x74, 0x00, 0x71, 0x05, 0xb7, 0x00, 0xb4, 0x05, 0x20, 0x00, 0xb4, 0x04, 0x95, 0x00, 0x46, // .t.q..... .....F + 0x04, 0xb0, 0x00, 0x22, 0x04, 0xe2, 0x00, 0x14, 0x05, 0x9f, 0x00, 0x54, 0x05, 0x0f, 0x00, 0x42, // ...".......T...B + 0x05, 0x88, 0x00, 0x57, 0x05, 0x56, 0x00, 0x70, 0x02, 0x43, 0xff, 0xcb, 0x04, 0xe2, 0x00, 0x14, // ...W.V.p.C...... + 0x04, 0x86, 0x00, 0x62, 0x04, 0x4f, 0x00, 0x62, 0x04, 0x8c, 0x00, 0x8f, 0x02, 0xa0, 0x00, 0xc5, // ...b.O.b........ + 0x04, 0x8c, 0x00, 0x8d, 0x04, 0x86, 0x00, 0x62, 0x04, 0xbd, 0x00, 0x9d, 0x04, 0x07, 0x00, 0x2e, // .......b........ + 0x04, 0x8c, 0x00, 0x61, 0x04, 0x4f, 0x00, 0x62, 0x04, 0x2f, 0x00, 0x73, 0x04, 0x8c, 0x00, 0x8f, // ...a.O.b./.s.... + 0x04, 0x8d, 0x00, 0x77, 0x02, 0xa0, 0x00, 0xc5, 0x04, 0x78, 0x00, 0x99, 0x04, 0x8c, 0x00, 0x38, // ...w.....x.....8 + 0x04, 0x8c, 0x00, 0x99, 0x04, 0x06, 0x00, 0x2e, 0x04, 0x13, 0x00, 0x56, 0x04, 0x8c, 0x00, 0x61, // ...........V...a + 0x04, 0xc5, 0x00, 0x4f, 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x4e, 0x00, 0x62, 0x04, 0x8c, 0x00, 0x61, // ...O.....N.b...a + 0x04, 0x30, 0x00, 0x51, 0x04, 0x8c, 0x00, 0x8d, 0x05, 0xaa, 0x00, 0x53, 0x04, 0x77, 0x00, 0x5e, // .0.Q.......S.w.^ + 0x05, 0xa0, 0x00, 0x5b, 0x06, 0xcd, 0x00, 0x6c, 0x02, 0xa0, 0xff, 0xd8, 0x04, 0x8c, 0x00, 0x8d, // ...[...l........ + 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x8d, 0x06, 0xcd, 0x00, 0x6c, 0x04, 0xf1, 0x00, 0x71, // ...a.......l...q + 0x04, 0x41, 0xff, 0xea, 0x06, 0x48, 0x00, 0x4e, 0x04, 0xad, 0x00, 0xb4, 0x04, 0xad, 0x00, 0xb4, // .A...H.N........ + 0x06, 0x01, 0x00, 0x29, 0x04, 0x74, 0x00, 0xb4, 0x05, 0x6a, 0x00, 0x87, 0x04, 0xfd, 0x00, 0x61, // ...).t...j.....a + 0x02, 0x43, 0x00, 0xbe, 0x02, 0x43, 0xff, 0xcb, 0x04, 0x6a, 0x00, 0x3d, 0x08, 0x99, 0x00, 0x32, // .C...C...j.=...2 + 0x08, 0xa4, 0x00, 0xb4, 0x06, 0x86, 0x00, 0x42, 0x05, 0x25, 0x00, 0xb4, 0x05, 0xb5, 0x00, 0xb4, // .......B.%...... + 0x05, 0x11, 0x00, 0x55, 0x05, 0xb7, 0x00, 0xb4, 0x05, 0x2e, 0x00, 0x14, 0x05, 0x0c, 0x00, 0xa3, // ...U............ + 0x05, 0x1d, 0x00, 0xb4, 0x04, 0x74, 0x00, 0xb4, 0x06, 0x0e, 0x00, 0x30, 0x04, 0xad, 0x00, 0xb4, // .....t.....0.... + 0x07, 0x4d, 0x00, 0x1c, 0x05, 0x69, 0x00, 0x78, 0x05, 0xb5, 0x00, 0xb4, 0x05, 0xb5, 0x00, 0xb4, // .M...i.x........ + 0x05, 0x25, 0x00, 0xb4, 0x05, 0xab, 0x00, 0x31, 0x07, 0x07, 0x00, 0xb4, 0x05, 0xb5, 0x00, 0xb4, // .%.....1........ + 0x05, 0x74, 0x00, 0x71, 0x05, 0xb7, 0x00, 0xb4, 0x05, 0x20, 0x00, 0xb4, 0x05, 0x11, 0x00, 0x76, // .t.q..... .....v + 0x04, 0xb0, 0x00, 0x22, 0x05, 0x07, 0x00, 0x55, 0x06, 0x37, 0x00, 0x55, 0x05, 0x0f, 0x00, 0x42, // ..."...U.7.U...B + 0x06, 0x28, 0x00, 0xb5, 0x05, 0x81, 0x00, 0x93, 0x07, 0x8c, 0x00, 0xb4, 0x07, 0xca, 0x00, 0xb4, // .(.............. + 0x06, 0x0c, 0x00, 0x16, 0x06, 0xf6, 0x00, 0xb4, 0x05, 0x0a, 0x00, 0xa3, 0x05, 0x69, 0x00, 0xb5, // .............i.. + 0x07, 0x21, 0x00, 0xbe, 0x05, 0x21, 0x00, 0x63, 0x04, 0x66, 0x00, 0x6a, 0x04, 0x6d, 0x00, 0x61, // .!...!.c.f.j.m.a + 0x04, 0x8c, 0x00, 0x90, 0x03, 0x51, 0x00, 0x8f, 0x04, 0xdf, 0x00, 0x2e, 0x04, 0x3b, 0x00, 0x63, // .....Q.......;.c + 0x06, 0x20, 0x00, 0x15, 0x04, 0x10, 0x00, 0x58, 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x8c, 0x00, 0x8f, // . .....X........ + 0x04, 0x3e, 0x00, 0x99, 0x04, 0x6d, 0x00, 0x1a, 0x05, 0xf8, 0x00, 0x99, 0x04, 0x8c, 0x00, 0x8f, // .>...m.......... + 0x04, 0x8c, 0x00, 0x61, 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x8c, 0x00, 0x8f, 0x04, 0x3f, 0x00, 0x61, // ...a.........?.a + 0x04, 0x18, 0x00, 0x47, 0x04, 0x06, 0x00, 0x1a, 0x05, 0xcd, 0x00, 0x62, 0x04, 0x06, 0x00, 0x2e, // ...G.......b.... + 0x04, 0xc2, 0x00, 0x8f, 0x04, 0x6b, 0x00, 0x7f, 0x06, 0x6d, 0x00, 0x8f, 0x06, 0xc4, 0x00, 0x8f, // .....k...m...... + 0x04, 0xf4, 0x00, 0x1d, 0x06, 0x51, 0x00, 0xad, 0x04, 0x59, 0x00, 0x99, 0x04, 0x4e, 0x00, 0x63, // .....Q...Y...N.c + 0x06, 0x87, 0x00, 0x99, 0x04, 0x8b, 0x00, 0x4e, 0x04, 0x3b, 0x00, 0x63, 0x04, 0x3b, 0x00, 0x63, // .......N.;.c.;.c + 0x04, 0x8c, 0xff, 0xe7, 0x03, 0x51, 0x00, 0x8f, 0x04, 0x4f, 0x00, 0x6b, 0x04, 0x2f, 0x00, 0x67, // .....Q...O.k./.g + 0x02, 0x04, 0x00, 0x9f, 0x02, 0x03, 0xff, 0xa6, 0x02, 0x12, 0xff, 0xbe, 0x06, 0xf6, 0x00, 0x41, // ...............A + 0x06, 0xf5, 0x00, 0x8f, 0x04, 0x8c, 0x00, 0x13, 0x04, 0x3e, 0x00, 0x99, 0x04, 0x8c, 0x00, 0x8f, // .........>...... + 0x04, 0x06, 0x00, 0x1a, 0x04, 0x8c, 0x00, 0x8f, 0x07, 0x05, 0x00, 0x9d, 0x06, 0x18, 0x00, 0x7c, // ...............| + 0x05, 0x0a, 0xff, 0xcd, 0x04, 0x59, 0xff, 0xdb, 0x07, 0x2d, 0x00, 0xbf, 0x05, 0xfa, 0x00, 0x97, // .....Y...-...... + 0x04, 0xd3, 0x00, 0x2b, 0x04, 0x49, 0x00, 0x0d, 0x07, 0x0d, 0x00, 0xd1, 0x06, 0x0d, 0x00, 0xba, // ...+.I.......... + 0x06, 0xdf, 0x00, 0x95, 0x05, 0xec, 0x00, 0x95, 0x09, 0x16, 0x00, 0xbe, 0x07, 0xe3, 0x00, 0x99, // ................ + 0x04, 0x25, 0x00, 0x4a, 0x03, 0xda, 0x00, 0x49, 0x05, 0x88, 0x00, 0x57, 0x05, 0xa0, 0x00, 0x5b, // .%.J...I...W...[ + 0x05, 0x74, 0x00, 0x71, 0x04, 0x8d, 0x00, 0x61, 0x05, 0x0f, 0x00, 0x16, 0x04, 0x07, 0x00, 0x2e, // .t.q...a........ + 0x05, 0x0f, 0x00, 0x16, 0x04, 0x07, 0xff, 0xfe, 0x09, 0x7a, 0x00, 0x71, 0x08, 0x92, 0x00, 0x61, // .........z.q...a + 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, 0x06, 0xfe, 0x00, 0x9d, 0x06, 0x18, 0x00, 0x7b, // .t.q...a.......{ + 0x07, 0x06, 0x00, 0x9d, 0x06, 0x19, 0x00, 0x7c, 0x05, 0x38, 0x00, 0x76, 0x04, 0x4b, 0x00, 0x62, // .......|.8.v.K.b + 0x05, 0x02, 0x00, 0x70, 0x04, 0x8d, 0x00, 0xd4, 0x04, 0xb9, 0x00, 0xfb, 0x03, 0x13, 0x01, 0x00, // ...p............ + 0x03, 0x4f, 0x01, 0x2c, 0x08, 0x1c, 0x00, 0x3b, 0x07, 0xd8, 0x00, 0x4d, 0x05, 0xb5, 0x00, 0xb4, // .O.,...;...M.... + 0x04, 0x8c, 0x00, 0x8f, 0x05, 0x0a, 0xff, 0xcd, 0x04, 0x59, 0xff, 0xdb, 0x05, 0x1d, 0x00, 0xb4, // .........Y...... + 0x04, 0x8b, 0x00, 0x8f, 0x04, 0x64, 0x00, 0xa3, 0x03, 0x93, 0x00, 0x8f, 0x04, 0x74, 0xff, 0xfc, // .....d.......t.. + 0x03, 0x51, 0xff, 0xf3, 0x04, 0xe6, 0x00, 0xb4, 0x04, 0x08, 0x00, 0x8f, 0x07, 0x4d, 0x00, 0x1c, // .Q...........M.. + 0x06, 0x20, 0x00, 0x15, 0x04, 0xbf, 0x00, 0x78, 0x04, 0x10, 0x00, 0x58, 0x05, 0x25, 0x00, 0xb4, // . .....x...X.%.. + 0x04, 0x3e, 0x00, 0x99, 0x05, 0x0f, 0x00, 0xa3, 0x04, 0x68, 0x00, 0x99, 0x05, 0x39, 0xff, 0xf5, // .>.......h...9.. + 0x04, 0x2e, 0xff, 0xcf, 0x06, 0x90, 0x00, 0x43, 0x05, 0x8e, 0x00, 0x41, 0x05, 0xb5, 0x00, 0xb4, // .......C...A.... + 0x04, 0x8c, 0x00, 0x8f, 0x07, 0xc4, 0x00, 0xb4, 0x05, 0xb0, 0x00, 0x8f, 0x08, 0x33, 0x00, 0xb4, // .............3.. + 0x06, 0xfa, 0x00, 0x8f, 0x05, 0xee, 0x00, 0x71, 0x04, 0xd7, 0x00, 0x6c, 0x05, 0x11, 0x00, 0x76, // .......q...l...v + 0x04, 0x3f, 0x00, 0x61, 0x04, 0xb0, 0x00, 0x22, 0x04, 0x18, 0x00, 0x47, 0x04, 0xe2, 0x00, 0x14, // .?.a..."...G.... + 0x04, 0x07, 0x00, 0x2e, 0x04, 0xe2, 0x00, 0x14, 0x04, 0x07, 0x00, 0x2e, 0x05, 0x0f, 0x00, 0x42, // ...............B + 0x04, 0x06, 0x00, 0x2e, 0x07, 0x37, 0x00, 0x37, 0x05, 0x93, 0x00, 0x20, 0x05, 0x81, 0x00, 0x93, // .....7.7... .... + 0x04, 0x6b, 0x00, 0x7f, 0x05, 0x76, 0x00, 0x93, 0x04, 0x6c, 0x00, 0x7f, 0x05, 0x76, 0x00, 0x8a, // .k...v...l...v.. + 0x04, 0x6c, 0x00, 0x94, 0x06, 0xcb, 0x00, 0x4d, 0x04, 0xbf, 0xff, 0xdf, 0x06, 0x36, 0x00, 0x4d, // .l.....M.....6.M + 0x04, 0xbf, 0xff, 0xdf, 0x02, 0x43, 0x00, 0xbe, 0x07, 0x4d, 0x00, 0x1c, 0x06, 0x20, 0x00, 0x15, // .....C...M... .. + 0x05, 0x0f, 0x00, 0xa3, 0x04, 0x60, 0x00, 0x99, 0x05, 0xab, 0x00, 0x31, 0x04, 0x6d, 0x00, 0x1a, // .....`.....1.m.. + 0x05, 0xb5, 0x00, 0xb4, 0x04, 0x8c, 0x00, 0x8f, 0x05, 0xb5, 0x00, 0xb4, 0x04, 0x8c, 0x00, 0x8f, // ................ + 0x05, 0x81, 0x00, 0x93, 0x04, 0x6b, 0x00, 0x7f, 0x07, 0x07, 0x00, 0xb4, 0x05, 0xf8, 0x00, 0x99, // .....k.......... + 0x02, 0x43, 0x00, 0xbe, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, // .C.......f.j.... + 0x04, 0x66, 0x00, 0x6a, 0x07, 0x82, 0xff, 0xec, 0x06, 0xc1, 0x00, 0x3a, 0x04, 0xad, 0x00, 0xb4, // .f.j.......:.... + 0x04, 0x3b, 0x00, 0x63, 0x05, 0x91, 0x00, 0x59, 0x04, 0x42, 0x00, 0x74, 0x05, 0x91, 0x00, 0x59, // .;.c...Y.B.t...Y + 0x04, 0x42, 0x00, 0x74, 0x06, 0x97, 0x00, 0x1c, 0x05, 0xc1, 0x00, 0x15, 0x05, 0x69, 0x00, 0x78, // .B.t.........i.x + 0x04, 0x4f, 0x00, 0x58, 0x04, 0xaa, 0x00, 0x69, 0x04, 0xaa, 0x00, 0x69, 0x05, 0xb5, 0x00, 0xb4, // .O.X...i...i.... + 0x04, 0x8c, 0x00, 0x8f, 0x05, 0xb5, 0x00, 0xb4, 0x04, 0x8c, 0x00, 0x8f, 0x05, 0x74, 0x00, 0x71, // .............t.q + 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, 0x04, 0x8d, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, // ...a.t.q...a.t.q + 0x04, 0x8d, 0x00, 0x61, 0x05, 0x69, 0x00, 0xb5, 0x04, 0x4e, 0x00, 0x63, 0x05, 0x07, 0x00, 0x55, // ...a.i...N.c...U + 0x04, 0x06, 0x00, 0x1a, 0x05, 0x07, 0x00, 0x55, 0x04, 0x06, 0x00, 0x1a, 0x05, 0x07, 0x00, 0x55, // .......U.......U + 0x04, 0x06, 0x00, 0x1a, 0x05, 0x81, 0x00, 0x93, 0x04, 0x6b, 0x00, 0x7f, 0x04, 0x74, 0x00, 0xb4, // .........k...t.. + 0x03, 0x51, 0x00, 0x8f, 0x06, 0xf6, 0x00, 0xb4, 0x06, 0x51, 0x00, 0xad, 0x04, 0xbf, 0x00, 0x41, // .Q.......Q.....A + 0x03, 0x49, 0x00, 0x42, 0x05, 0x0f, 0x00, 0x42, 0x04, 0x06, 0x00, 0x2e, 0x05, 0x0f, 0x00, 0x42, // .I.B...B.......B + 0x04, 0x06, 0x00, 0x2e, 0x05, 0x07, 0x00, 0x5b, 0x04, 0x8c, 0x00, 0x62, 0x06, 0xa4, 0x00, 0x5b, // .......[...b...[ + 0x06, 0xe5, 0x00, 0x62, 0x06, 0x57, 0x00, 0x36, 0x05, 0x2c, 0x00, 0x31, 0x04, 0x4b, 0x00, 0x50, // ...b.W.6.,.1.K.P + 0x04, 0x09, 0x00, 0x7b, 0x07, 0xc2, 0x00, 0x45, 0x06, 0x76, 0x00, 0x41, 0x08, 0x03, 0x00, 0xa9, // ...{...E.v.A.... + 0x06, 0xa2, 0x00, 0x8f, 0x04, 0xf7, 0x00, 0x76, 0x04, 0x1e, 0x00, 0x62, 0x05, 0xae, 0x00, 0x24, // .......v...b...$ + 0x05, 0x21, 0x00, 0x46, 0x05, 0x69, 0x00, 0x9c, 0x04, 0x4f, 0x00, 0x62, 0x05, 0xab, 0x00, 0x31, // .!.F.i...O.b...1 + 0x04, 0x6d, 0x00, 0x1a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x07, 0x07, 0x00, 0xb4, // .m.......f.j.... + 0x06, 0xfe, 0x00, 0x8f, 0x07, 0x11, 0x00, 0x36, 0x06, 0x0e, 0x00, 0x2d, 0x07, 0x11, 0x00, 0x36, // .......6...-...6 + 0x06, 0x0e, 0x00, 0x2d, 0x07, 0x11, 0x00, 0x36, 0x06, 0x0e, 0x00, 0x2d, 0x05, 0x2e, 0x00, 0x14, // ...-...6...-.... + 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, // .f.j.....f.j.... + 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0xff, 0xa3, 0x05, 0x2e, 0x00, 0x14, // .f.j.....f...... + 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, // .f.j.....f.j.... + 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, // .f.j.....f.j.... + 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, // .f.j.....f.j.... + 0x04, 0x66, 0x00, 0x6a, 0x05, 0x2e, 0x00, 0x14, 0x04, 0x66, 0x00, 0x6a, 0x04, 0xad, 0x00, 0xb4, // .f.j.....f.j.... + 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, // .;.c.....;.c.... + 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0xff, 0xec, // .;.c.....;.c.... + 0x04, 0x3b, 0xff, 0xa6, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, // .;.......;.c.... + 0x04, 0x3b, 0x00, 0x63, 0x04, 0xad, 0x00, 0xb4, 0x04, 0x3b, 0x00, 0x63, 0x02, 0x43, 0x00, 0xbe, // .;.c.....;.c.C.. + 0x02, 0x03, 0x00, 0x99, 0x02, 0x43, 0x00, 0xb4, 0x02, 0x04, 0x00, 0x95, 0x05, 0x74, 0x00, 0x71, // .....C.......t.q + 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, // ...a.t.q...a.t.q + 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x32, 0x04, 0x8c, 0xff, 0xbe, 0x05, 0x74, 0x00, 0x71, // ...a.t.2.....t.q + 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, 0x04, 0x8c, 0x00, 0x61, 0x05, 0x74, 0x00, 0x71, // ...a.t.q...a.t.q + 0x04, 0x8c, 0x00, 0x61, 0x05, 0x7b, 0x00, 0x6c, 0x04, 0x97, 0x00, 0x61, 0x05, 0x7b, 0x00, 0x6c, // ...a.{.l...a.{.l + 0x04, 0x97, 0x00, 0x61, 0x05, 0x7b, 0x00, 0x6c, 0x04, 0x97, 0x00, 0x61, 0x05, 0x7b, 0x00, 0x6c, // ...a.{.l...a.{.l + 0x04, 0x97, 0x00, 0x61, 0x05, 0x7b, 0x00, 0x6c, 0x04, 0x97, 0x00, 0x61, 0x05, 0x6a, 0x00, 0x93, // ...a.{.l...a.j.. + 0x04, 0x8c, 0x00, 0x8b, 0x05, 0x6a, 0x00, 0x93, 0x04, 0x8c, 0x00, 0x8b, 0x05, 0x96, 0x00, 0x93, // .....j.......... + 0x04, 0xb4, 0x00, 0x8b, 0x05, 0x96, 0x00, 0x93, 0x04, 0xb4, 0x00, 0x8b, 0x05, 0x96, 0x00, 0x93, // ................ + 0x04, 0xb4, 0x00, 0x8b, 0x05, 0x96, 0x00, 0x93, 0x04, 0xb4, 0x00, 0x8b, 0x05, 0x96, 0x00, 0x93, // ................ + 0x04, 0xb4, 0x00, 0x8b, 0x04, 0xe2, 0x00, 0x14, 0x04, 0x06, 0x00, 0x1a, 0x04, 0xe2, 0x00, 0x14, // ................ + 0x04, 0x06, 0x00, 0x1a, 0x04, 0xe2, 0x00, 0x14, 0x04, 0x06, 0x00, 0x1a, 0x04, 0xe2, 0x00, 0x14, // ................ + 0x04, 0x06, 0x00, 0x1a, 0x05, 0x74, 0xff, 0x24, 0x04, 0x14, 0x00, 0x00, 0x08, 0x29, 0x00, 0x00, // .....t.$.....).. + 0x04, 0x14, 0x00, 0x00, 0x08, 0x29, 0x00, 0x00, 0x02, 0xb9, 0x00, 0x00, 0x02, 0x0a, 0x00, 0x00, // .....).......... + 0x01, 0x5c, 0x00, 0x00, 0x04, 0x7f, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x01, 0xa2, 0x00, 0x00, // .........0...... + 0x00, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x88, 0x00, 0xb4, 0x06, 0x7c, 0x00, 0xbc, // .............|.. + 0x06, 0x7c, 0x00, 0xbc, 0x03, 0xa7, 0x00, 0x05, 0x01, 0xa2, 0x00, 0x50, 0x01, 0xa2, 0x00, 0x50, // .|.........P...P + 0x01, 0xa1, 0x00, 0x50, 0x01, 0xa2, 0x00, 0x2b, 0x02, 0xe8, 0x00, 0x50, 0x02, 0xf0, 0x00, 0x50, // ...P...+...P...P + 0x02, 0xd6, 0x00, 0x50, 0x04, 0x69, 0x00, 0x46, 0x04, 0x92, 0x00, 0x57, 0x02, 0xb7, 0x00, 0x89, // ...P.i.F...W.... + 0x03, 0xca, 0x00, 0xa1, 0x05, 0x64, 0x00, 0xa1, 0x07, 0xa4, 0x00, 0x40, 0x01, 0x67, 0x00, 0x50, // .....d.....@.g.P + 0x02, 0x9c, 0x00, 0x50, 0x02, 0x67, 0x00, 0x6c, 0x02, 0x67, 0x00, 0x58, 0x04, 0x36, 0x00, 0xab, // ...P.g.l.g.X.6.. + 0x03, 0xa5, 0x00, 0x3b, 0x03, 0xad, 0x00, 0x47, 0x03, 0x60, 0x00, 0x7a, 0x04, 0xa9, 0x00, 0x1c, // ...;...G.`.z.... + 0x04, 0xaa, 0x00, 0x46, 0x06, 0x92, 0x00, 0xa4, 0x04, 0xaa, 0x00, 0x62, 0x04, 0x40, 0x00, 0x4f, // ...F.......b.@.O + 0x05, 0xe9, 0x00, 0x7c, 0x03, 0xd2, 0x00, 0x6a, 0x08, 0xcc, 0x00, 0xab, 0x05, 0x04, 0x00, 0x67, // ...|...j.......g + 0x05, 0x18, 0x00, 0x98, 0x06, 0xbf, 0x00, 0x6b, 0x07, 0x56, 0x00, 0x6e, 0x07, 0x86, 0x00, 0x70, // .......k.V.n...p + 0x06, 0xdf, 0x00, 0x6b, 0x04, 0xa2, 0x00, 0x48, 0x05, 0x9c, 0x00, 0xa8, 0x04, 0xb2, 0x00, 0x46, // ...k...H.......F + 0x04, 0x92, 0x00, 0xa8, 0x04, 0xd7, 0x00, 0x3f, 0x08, 0x2f, 0x00, 0x68, 0x02, 0x0d, 0xff, 0xbc, // .......?./.h.... + 0x04, 0x82, 0x00, 0x65, 0x04, 0x30, 0x00, 0x98, 0x04, 0x38, 0x00, 0x9e, 0x04, 0x40, 0x00, 0x9a, // ...e.0...8...@.. + 0x04, 0x08, 0x00, 0x29, 0x02, 0x08, 0x00, 0x65, 0x04, 0x74, 0x00, 0x1c, 0x04, 0xc7, 0x00, 0x38, // ...)...e.t.....8 + 0x07, 0x37, 0x00, 0x38, 0x07, 0x8a, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x08, 0x34, 0x00, 0x5b, // .7.8...8.....4.[ + 0x08, 0x35, 0x00, 0x5c, 0x02, 0x03, 0xff, 0x99, 0x03, 0x4c, 0x00, 0x68, 0x03, 0x84, 0x00, 0x70, // .5.......L.h...p + 0x03, 0x6c, 0x00, 0x68, 0x04, 0x30, 0x00, 0x78, 0x04, 0x68, 0x00, 0x47, 0x04, 0x16, 0x00, 0x5a, // .l.h.0.x.h.G...Z + 0x03, 0xe5, 0x00, 0x59, 0x02, 0x5e, 0x00, 0x4e, 0x04, 0x79, 0x00, 0x78, 0x04, 0x40, 0x00, 0x4e, // ...Y.^.N.y.x.@.N + 0x04, 0x61, 0x00, 0x1e, 0x04, 0x89, 0x00, 0x37, 0x06, 0x02, 0x00, 0x3f, 0x04, 0xbb, 0x00, 0x27, // .a.....7...?...' + 0x05, 0x04, 0x00, 0x89, 0x04, 0x30, 0x00, 0x47, 0x04, 0x71, 0x00, 0x5d, 0x04, 0xad, 0x00, 0x99, // .....0.G.q.].... + 0x04, 0xe3, 0x00, 0x70, 0x04, 0xde, 0x00, 0x8b, 0x04, 0xcb, 0x00, 0x70, 0x05, 0x1c, 0x00, 0x99, // ...p.......p.... + 0x03, 0xa0, 0x00, 0x92, 0x05, 0xf8, 0x00, 0x99, 0x03, 0xbd, 0x00, 0x99, 0x04, 0x61, 0x00, 0x99, // .............a.. + 0x04, 0x0f, 0x00, 0x40, 0x02, 0x03, 0x00, 0x99, 0x04, 0xfb, 0x00, 0x99, 0x04, 0xd3, 0x00, 0x70, // ...@...........p + 0x04, 0x1f, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, 0x04, 0xaa, 0x00, 0x99, 0x04, 0x92, 0x00, 0x70, // .....G.........p + 0x04, 0x79, 0x00, 0x99, 0x02, 0x07, 0x00, 0xa0, 0x03, 0xa4, 0x00, 0x81, 0x04, 0xba, 0x00, 0x27, // .y.............' + 0x04, 0x09, 0x00, 0x78, 0x04, 0x0a, 0xff, 0x55, 0x04, 0x0f, 0x00, 0x6e, 0x04, 0x0a, 0x00, 0x6e, // ...x...U...n...n + 0x03, 0xa4, 0x00, 0x81, 0x03, 0xa4, 0x00, 0x81, 0x03, 0xa5, 0x00, 0x81, 0x01, 0x91, 0x00, 0x60, // ...............` + 0x02, 0x31, 0x00, 0x13, 0x02, 0x04, 0xff, 0xbe, 0x03, 0x0c, 0xff, 0xa0, 0x03, 0x07, 0x00, 0x3b, // .1.............; + 0x04, 0x7f, 0x00, 0x5b, 0x04, 0xab, 0x00, 0x74, 0x04, 0x9f, 0x00, 0x46, 0x04, 0x9f, 0x00, 0xa7, // ...[...t...F.... + 0x04, 0x9f, 0x00, 0x93, 0x04, 0x01, 0x00, 0x1e, 0x04, 0xd5, 0x00, 0x7d, 0x04, 0x9f, 0x00, 0x62, // ...........}...b + 0x04, 0x79, 0x00, 0x99, 0x04, 0x1f, 0x00, 0x5a, 0x03, 0x7c, 0x00, 0x78, 0x03, 0x7c, 0x00, 0x72, // .y.....Z.|.x.|.r + 0x03, 0x94, 0x00, 0x57, 0x03, 0x6c, 0x00, 0x6a, 0x03, 0x5b, 0x00, 0x71, 0x02, 0xb8, 0x00, 0x9b, // ...W.l.j.[.q.... + 0x02, 0x2d, 0x00, 0x5f, 0x03, 0xa5, 0x00, 0x78, 0x04, 0x28, 0x00, 0x47, 0x04, 0x30, 0x00, 0x58, // .-._...x.(.G.0.X + 0x03, 0xbd, 0x00, 0x47, 0x03, 0x11, 0x00, 0x5f, 0x03, 0x6c, 0x00, 0x81, 0x04, 0xaa, 0xff, 0xf6, // ...G..._.l...... + 0x04, 0xaa, 0xff, 0xf6, 0x04, 0x30, 0x00, 0x47, 0x04, 0xba, 0x00, 0x27, 0x04, 0xba, 0x00, 0x27, // .....0.G...'...' + 0x04, 0xba, 0x00, 0x27, 0x04, 0xba, 0x00, 0x27, 0x04, 0xba, 0x00, 0x27, 0x04, 0xba, 0x00, 0x27, // ...'...'...'...' + 0x04, 0xba, 0x00, 0x27, 0x04, 0x92, 0x00, 0x70, 0x04, 0x47, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, // ...'...p.G...G.. + 0x04, 0x47, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, 0x02, 0x03, 0xff, 0xb7, 0x02, 0x03, 0x00, 0x99, // .G...G.......... + 0x02, 0x03, 0xff, 0xca, 0x02, 0x03, 0xff, 0xa4, 0x05, 0x1c, 0x00, 0x99, 0x04, 0xcb, 0x00, 0x70, // ...............p + 0x04, 0xcb, 0x00, 0x70, 0x04, 0xcb, 0x00, 0x70, 0x04, 0xcb, 0x00, 0x70, 0x04, 0xcb, 0x00, 0x70, // ...p...p...p...p + 0x05, 0x04, 0x00, 0x89, 0x05, 0x04, 0x00, 0x89, 0x05, 0x04, 0x00, 0x89, 0x05, 0x04, 0x00, 0x89, // ................ + 0x04, 0x61, 0x00, 0x1e, 0x04, 0xba, 0x00, 0x27, 0x04, 0xba, 0x00, 0x27, 0x04, 0xba, 0x00, 0x27, // .a.....'...'...' + 0x04, 0x92, 0x00, 0x70, 0x04, 0x92, 0x00, 0x70, 0x04, 0x92, 0x00, 0x70, 0x04, 0x92, 0x00, 0x70, // ...p...p...p...p + 0x04, 0xaa, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, // .....G...G...G.. + 0x04, 0x47, 0x00, 0x99, 0x04, 0x47, 0x00, 0x99, 0x04, 0xd3, 0x00, 0x70, 0x04, 0xd3, 0x00, 0x70, // .G...G.....p...p + 0x04, 0xd3, 0x00, 0x70, 0x04, 0xd3, 0x00, 0x70, 0x04, 0xfb, 0x00, 0x99, 0x02, 0x03, 0xff, 0xa1, // ...p...p........ + 0x05, 0x04, 0x00, 0x89, 0x02, 0x03, 0xff, 0xd1, 0x02, 0x03, 0x00, 0x3c, 0x02, 0x03, 0x00, 0x8f, // ...........<.... + 0x04, 0x0f, 0x00, 0x40, 0x04, 0x61, 0x00, 0x99, 0x03, 0xbd, 0x00, 0x6b, 0x03, 0xbd, 0x00, 0x99, // ...@.a.....k.... + 0x03, 0xbd, 0x00, 0x99, 0x03, 0xbd, 0x00, 0x99, 0x05, 0x1c, 0x00, 0x99, 0x05, 0x1c, 0x00, 0x99, // ................ + 0x05, 0x1c, 0x00, 0x99, 0x04, 0xcb, 0x00, 0x70, 0x04, 0xcb, 0x00, 0x70, 0x04, 0xcb, 0x00, 0x70, // .......p...p...p + 0x04, 0xad, 0x00, 0x99, 0x04, 0xad, 0x00, 0x99, 0x04, 0xad, 0x00, 0x99, 0x04, 0x71, 0x00, 0x5d, // .............q.] + 0x04, 0x71, 0x00, 0x5d, 0x04, 0x71, 0x00, 0x5d, 0x04, 0x71, 0x00, 0x5d, 0x04, 0x30, 0x00, 0x47, // .q.].q.].q.].0.G + 0x04, 0x30, 0x00, 0x47, 0x05, 0x04, 0x00, 0x89, 0x05, 0x04, 0x00, 0x89, 0x05, 0x04, 0x00, 0x89, // .0.G............ + 0x05, 0x04, 0x00, 0x89, 0x08, 0xe2, 0x00, 0x5d, 0x04, 0x40, 0x00, 0x4e, 0x04, 0x40, 0x00, 0x4e, // .......].@.N.@.N + 0x04, 0x40, 0x00, 0x4e, 0x04, 0x61, 0x00, 0x1e, 0x04, 0x61, 0x00, 0x1e, 0x06, 0x02, 0x00, 0x3f, // .@.N.a...a.....? + 0x05, 0x04, 0x00, 0x89, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x01, 0x03, 0x03, 0x01, 0x01, 0x05, 0x01, // ................ + 0x01, 0x05, 0x01, 0x01, 0x01, 0x17, 0x01, 0x27, 0x01, 0x1d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // .......'........ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2a, 0x01, 0x01, 0x01, 0x2e, 0x01, // ..........*..... + 0x01, 0x07, 0x22, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, 0x22, 0x01, 0x05, 0x01, // .."......."."... + 0x01, 0x23, 0x1f, 0x23, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01, 0x11, 0x01, // .#.#............ + 0x01, 0x2b, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0e, // .+.............. + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1a, 0x03, 0x1a, 0x01, 0x03, 0x03, 0x01, 0x13, 0x01, 0x0f, // ................ + 0x01, 0x01, 0x06, 0x1f, 0x31, 0x01, 0x01, 0x01, 0x1f, 0x0f, 0x01, 0x2b, 0x2f, 0x01, 0x25, 0x01, // ....1......+/.%. + 0x01, 0x25, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // .%.............. + 0x01, 0x2e, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x22, 0x22, 0x22, // ............"""" + 0x22, 0x0f, 0x22, 0x01, 0x01, 0x01, 0x01, 0x0a, 0x0c, 0x01, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, // "."............. + 0x01, 0x11, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x01, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, // ................ + 0x2e, 0x11, 0x2e, 0x11, 0x2e, 0x11, 0x2e, 0x11, 0x01, 0x01, 0x01, 0x13, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x01, 0x01, // ......"."."."... + 0x01, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2f, 0x01, 0x01, // ............./.. + 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x01, 0x30, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x24, 0x26, 0x01, 0x01, // ....0.".".".$&.. + 0x01, 0x01, 0x01, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, 0x01, 0x05, 0x01, 0x01, 0x0e, 0x01, 0x1b, // ................ + 0x01, 0x0e, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01, // ................ + 0x0a, 0x01, 0x0a, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1c, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x1f, 0x01, 0x01, 0x22, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1a, 0x01, // ...."........... + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x31, 0x01, 0x01, 0x2e, 0x01, 0x01, // ..........1..... + 0x30, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2d, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, 0x01, 0x01, 0x01, // 0.....-....".... + 0x01, 0x31, 0x22, 0x01, 0x01, 0x31, 0x01, 0x0a, 0x01, 0x23, 0x30, 0x01, 0x01, 0x0a, 0x01, 0x01, // .1"..1...#0..... + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1e, 0x01, 0x12, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x01, 0x2d, 0x01, 0x05, 0x01, 0x01, 0x01, 0x15, 0x01, 0x14, // .......-........ + 0x01, 0x01, 0x2e, 0x01, 0x01, 0x2b, 0x01, 0x2d, 0x01, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0x01, // .....+.-........ + 0x01, 0x01, 0x22, 0x01, 0x01, 0x2e, 0x01, 0x01, 0x01, 0x23, 0x01, 0x01, 0x01, 0x14, 0x01, 0x1c, // .."......#...... + 0x01, 0x12, 0x18, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, // ..............". + 0x03, 0x01, 0x01, 0x01, 0x01, 0x11, 0x2b, 0x01, 0x01, 0x01, 0x01, 0x14, 0x01, 0x01, 0x01, 0x01, // ......+......... + 0x18, 0x01, 0x01, 0x17, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1c, 0x01, 0x01, // ................ + 0x22, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x18, 0x23, 0x03, 0x01, 0x2b, 0x01, 0x28, 0x28, 0x01, // ".......#..+.((. + 0x0c, 0x01, 0x01, 0x01, 0x30, 0x01, 0x22, 0x1e, 0x23, 0x01, 0x23, 0x01, 0x01, 0x32, 0x22, 0x01, // ....0.".#.#..2". + 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1e, 0x0c, 0x01, 0x01, 0x25, 0x1b, 0x01, 0x01, 0x01, // ...........%.... + 0x18, 0x01, 0x17, 0x01, 0x01, 0x2d, 0x01, 0x29, 0x01, 0x01, 0x01, 0x11, 0x01, 0x01, 0x22, 0x23, // .....-.)......"# + 0x01, 0x01, 0x17, 0x01, 0x13, 0x01, 0x01, 0x01, 0x01, 0x15, 0x2c, 0x1e, 0x14, 0x2e, 0x11, 0x01, // ..........,..... + 0x2b, 0x0a, 0x01, 0x0a, 0x01, 0x23, 0x01, 0x01, 0x01, 0x01, 0x14, 0x01, 0x01, 0x01, 0x01, 0x01, // +....#.......... + 0x11, 0x01, 0x11, 0x01, 0x01, 0x01, 0x23, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, // ......#......... + 0x01, 0x03, 0x01, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x20, 0x01, 0x20, 0x01, // ............ . . + 0x01, 0x12, 0x01, 0x13, 0x13, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, 0x22, 0x1e, 0x22, 0x1e, 0x12, // .........".".".. + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x14, 0x2d, 0x01, 0x1c, 0x01, 0x11, 0x1d, 0x23, // .........-.....# + 0x01, 0x23, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x28, 0x01, 0x01, 0x01, // .#..........(... + 0x23, 0x01, 0x01, 0x12, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01, 0x05, 0x1f, 0x01, 0x1f, 0x01, 0x1f, // #............... + 0x01, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, // ................ + 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, 0x22, // ............."." + 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0x01, 0x1c, 0x01, 0x1c, 0x01, 0x1c, // ."."."."."...... + 0x01, 0x1c, 0x01, 0x1c, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x0a, 0x01, 0x0a, 0x01, 0x0a, 0x01, 0x0a, 0x01, 0x22, 0x01, 0x01, 0x01, 0x01, // ...........".... + 0x01, 0x01, 0x01, 0x09, 0x01, 0x01, 0x01, 0x01, 0x30, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1c, 0x01, // ........0....... + 0x01, 0x01, 0x01, 0x28, 0x01, 0x01, 0x01, 0x18, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ...(............ + 0x01, 0x07, 0x13, 0x2b, 0x13, 0x01, 0x01, 0x01, 0x10, 0x01, 0x01, 0x11, 0x01, 0x2b, 0x28, 0x01, // ...+.........+(. + 0x01, 0x18, 0x01, 0x14, 0x01, 0x01, 0x01, 0x01, 0x13, 0x01, 0x01, 0x01, 0x2d, 0x25, 0x01, 0x01, // ............-%.. + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2f, 0x27, 0x32, 0x01, 0x01, 0x16, 0x01, // ........./'2.... + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1c, 0x01, 0x01, 0x13, 0x01, 0x03, 0x2f, 0x16, 0x01, 0x01, // ............/... + 0x01, 0x01, 0x01, 0x01, 0x13, 0x01, 0x01, 0x01, 0x01, 0x22, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ........."...... + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09, 0x01, 0x01, 0x01, 0x01, 0x01, 0x19, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x14, 0x01, 0x01, 0x1a, 0x01, 0x01, 0x01, 0x01, 0x2f, 0x1f, 0x01, 0x13, 0x13, 0x01, // ........../..... + 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // """""""......... + 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x16, 0x22, 0x22, 0x22, 0x01, 0x01, // ...........""".. + 0x01, 0x01, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // ................ + 0x01, 0x01, 0x01, 0x16, 0x2f, 0x2f, 0x2f, 0x2f, 0x13, 0x13, 0x13, 0x01, 0x01, 0x01, 0x01, 0x01, // ....////........ + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x16, // ................ + 0x16, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, // ................ + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x64, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, // .......d........ + 0x00, 0x04, 0x02, 0x48, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x80, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x0d, // ...H............ + 0x00, 0x7e, 0x01, 0x7f, 0x01, 0x92, 0x01, 0xa1, 0x01, 0xb0, 0x01, 0xf0, 0x01, 0xff, 0x02, 0x19, // .~.............. + 0x02, 0x37, 0x02, 0xbc, 0x02, 0xc7, 0x02, 0xc9, 0x02, 0xdd, 0x02, 0xf3, 0x03, 0x01, 0x03, 0x03, // .7.............. + 0x03, 0x09, 0x03, 0x0f, 0x03, 0x23, 0x03, 0x8a, 0x03, 0x8c, 0x03, 0xa1, 0x03, 0xce, 0x03, 0xd2, // .....#.......... + 0x03, 0xd6, 0x04, 0x86, 0x05, 0x13, 0x1e, 0x01, 0x1e, 0x3f, 0x1e, 0x85, 0x1e, 0xf9, 0x1f, 0x4d, // .........?.....M + 0x20, 0x0b, 0x20, 0x15, 0x20, 0x1e, 0x20, 0x22, 0x20, 0x26, 0x20, 0x30, 0x20, 0x33, 0x20, 0x3a, // . . . " & 0 3 : + 0x20, 0x3c, 0x20, 0x44, 0x20, 0x74, 0x20, 0x7f, 0x20, 0xa4, 0x20, 0xa7, 0x20, 0xac, 0x21, 0x05, // < D t . . . .!. + 0x21, 0x13, 0x21, 0x16, 0x21, 0x22, 0x21, 0x26, 0x21, 0x2e, 0x21, 0x5e, 0x22, 0x02, 0x22, 0x06, // !.!.!"!&!.!^".". + 0x22, 0x0f, 0x22, 0x12, 0x22, 0x1a, 0x22, 0x1e, 0x22, 0x2b, 0x22, 0x48, 0x22, 0x60, 0x22, 0x65, // "."."."."+"H"`"e + 0x25, 0xca, 0xf6, 0xc3, 0xfb, 0x04, 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0d, // %............... + 0x00, 0x20, 0x00, 0xa0, 0x01, 0x92, 0x01, 0xa0, 0x01, 0xaf, 0x01, 0xf0, 0x01, 0xfa, 0x02, 0x18, // . .............. + 0x02, 0x37, 0x02, 0xbc, 0x02, 0xc6, 0x02, 0xc9, 0x02, 0xd8, 0x02, 0xf3, 0x03, 0x00, 0x03, 0x03, // .7.............. + 0x03, 0x09, 0x03, 0x0f, 0x03, 0x23, 0x03, 0x84, 0x03, 0x8c, 0x03, 0x8e, 0x03, 0xa3, 0x03, 0xd1, // .....#.......... + 0x03, 0xd6, 0x04, 0x00, 0x04, 0x88, 0x1e, 0x00, 0x1e, 0x3e, 0x1e, 0x80, 0x1e, 0xa0, 0x1f, 0x4d, // .........>.....M + 0x20, 0x00, 0x20, 0x13, 0x20, 0x17, 0x20, 0x20, 0x20, 0x25, 0x20, 0x30, 0x20, 0x32, 0x20, 0x39, // . . . % 0 2 9 + 0x20, 0x3c, 0x20, 0x44, 0x20, 0x74, 0x20, 0x7f, 0x20, 0xa3, 0x20, 0xa7, 0x20, 0xab, 0x21, 0x05, // < D t . . . .!. + 0x21, 0x13, 0x21, 0x16, 0x21, 0x22, 0x21, 0x26, 0x21, 0x2e, 0x21, 0x5b, 0x22, 0x02, 0x22, 0x06, // !.!.!"!&!.![".". + 0x22, 0x0f, 0x22, 0x11, 0x22, 0x1a, 0x22, 0x1e, 0x22, 0x2b, 0x22, 0x48, 0x22, 0x60, 0x22, 0x64, // "."."."."+"H"`"d + 0x25, 0xca, 0xf6, 0xc3, 0xfb, 0x01, 0xfe, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xe3, // %............... + 0xff, 0xc2, 0xff, 0xb0, 0xff, 0xa3, 0xff, 0x96, 0xff, 0x57, 0xff, 0x4e, 0xff, 0x36, 0xff, 0x19, // .........W.N.6.. + 0xfe, 0x95, 0xfe, 0x8c, 0xfd, 0xa8, 0xfe, 0x7c, 0xfe, 0x67, 0xfe, 0x5b, 0xfe, 0x5a, 0xfe, 0x55, // .......|.g.[.Z.U + 0xfe, 0x50, 0xfe, 0x3d, 0xfd, 0xdd, 0xfd, 0xdc, 0xfd, 0xdb, 0xfd, 0xda, 0xfd, 0xd8, 0xfd, 0xd5, // .P.=............ + 0xfd, 0xac, 0xfd, 0xab, 0xe4, 0xbf, 0xe4, 0x83, 0xe4, 0x43, 0xe4, 0x29, 0xe3, 0xd6, 0xe3, 0x24, // .........C.)...$ + 0xe3, 0x1d, 0xe3, 0x1c, 0xe3, 0x1b, 0xe3, 0x19, 0xe3, 0x10, 0xe3, 0x0f, 0xe3, 0x0a, 0xe3, 0x09, // ................ + 0xe3, 0x02, 0xe2, 0xd3, 0xe2, 0xc9, 0xe2, 0xa6, 0xe2, 0xa4, 0xe2, 0xa1, 0xe2, 0x49, 0xe2, 0x3c, // .............I.< + 0xe2, 0x3a, 0xe2, 0x2f, 0xe0, 0x5d, 0xe2, 0x24, 0xe1, 0xf8, 0xe1, 0x55, 0xdf, 0x69, 0xe1, 0x49, // .:./.].$...U.i.I + 0xe1, 0x48, 0xe1, 0x41, 0xe1, 0x3e, 0xe1, 0x32, 0xe1, 0x16, 0xe0, 0xff, 0xe0, 0xfc, 0xdd, 0x98, // .H.A.>.2........ + 0x0c, 0xa0, 0x08, 0x63, 0x04, 0x69, 0x03, 0x6d, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...c.i.m........ + 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, 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, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x0d, // ................ + 0x00, 0xf3, 0x00, 0x02, 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, 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, // ./.0.1.2.3.4.5.6 + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, // .7.8.9.:.;.<.=.> + 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, // .?.@.A.B.C.D.E.F + 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, // .G.H.I.J.K.L.M.N + 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, // .O.P.Q.R.S.T.U.V + 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, // .W.X.Y.Z.[...].^ + 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0x00, 0x00, 0x86, 0x00, 0x87, 0x00, 0x89, 0x00, 0x8b, // ._.`.a.......... + 0x00, 0x93, 0x00, 0x98, 0x00, 0x9e, 0x00, 0xa3, 0x00, 0xa2, 0x00, 0xa4, 0x00, 0xa6, 0x00, 0xa5, // ................ + 0x00, 0xa7, 0x00, 0xa9, 0x00, 0xab, 0x00, 0xaa, 0x00, 0xac, 0x00, 0xad, 0x00, 0xaf, 0x00, 0xae, // ................ + 0x00, 0xb0, 0x00, 0xb1, 0x00, 0xb3, 0x00, 0xb5, 0x00, 0xb4, 0x00, 0xb6, 0x00, 0xb8, 0x00, 0xb7, // ................ + 0x00, 0xbc, 0x00, 0xbb, 0x00, 0xbd, 0x00, 0xbe, 0x03, 0x3b, 0x00, 0x72, 0x00, 0x64, 0x00, 0x65, // .........;.r.d.e + 0x00, 0x69, 0x03, 0x3d, 0x00, 0x78, 0x00, 0xa1, 0x00, 0x70, 0x00, 0x6b, 0x03, 0x51, 0x00, 0x76, // .i.=.x...p.k.Q.v + 0x00, 0x6a, 0x03, 0x5f, 0x00, 0x88, 0x00, 0x9a, 0x03, 0x5c, 0x00, 0x73, 0x03, 0x60, 0x03, 0x61, // .j._.......s.`.a + 0x00, 0x67, 0x00, 0x77, 0x03, 0x57, 0x03, 0x59, 0x03, 0x58, 0x01, 0x9a, 0x03, 0x5d, 0x00, 0x6c, // .g.w.W.Y.X...].l + 0x00, 0x7c, 0x01, 0x83, 0x00, 0xa8, 0x00, 0xba, 0x00, 0x81, 0x00, 0x63, 0x00, 0x6e, 0x03, 0x5b, // .|.........c.n.[ + 0x01, 0x42, 0x03, 0x5e, 0x01, 0x6f, 0x00, 0x6d, 0x00, 0x7d, 0x03, 0x3f, 0x00, 0x62, 0x00, 0x82, // .B.^.o.m.}.?.b.. + 0x00, 0x85, 0x00, 0x97, 0x01, 0x14, 0x01, 0x15, 0x03, 0x30, 0x03, 0x31, 0x03, 0x38, 0x03, 0x39, // .........0.1.8.9 + 0x03, 0x34, 0x03, 0x35, 0x00, 0xb9, 0x03, 0x62, 0x00, 0xc1, 0x01, 0x3a, 0x03, 0x46, 0x03, 0x4d, // .4.5...b...:.F.M + 0x03, 0x43, 0x03, 0x44, 0x03, 0x64, 0x03, 0x65, 0x03, 0x3c, 0x00, 0x79, 0x03, 0x36, 0x03, 0x3a, // .C.D.d.e.<.y.6.: + 0x03, 0x40, 0x00, 0x84, 0x00, 0x8c, 0x00, 0x83, 0x00, 0x8d, 0x00, 0x8a, 0x00, 0x8f, 0x00, 0x90, // .@.............. + 0x00, 0x91, 0x00, 0x8e, 0x00, 0x95, 0x00, 0x96, 0x00, 0x00, 0x00, 0x94, 0x00, 0x9c, 0x00, 0x9d, // ................ + 0x00, 0x9b, 0x00, 0xf3, 0x01, 0x52, 0x01, 0x58, 0x00, 0x71, 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, // .....R.X.q.T.U.V + 0x00, 0x7a, 0x01, 0x59, 0x01, 0x57, 0x01, 0x53, 0xb0, 0x00, 0x2c, 0x4b, 0xb0, 0x09, 0x50, 0x58, // .z.Y.W.S..,K..PX + 0xb1, 0x01, 0x01, 0x8e, 0x59, 0xb8, 0x01, 0xff, 0x85, 0xb0, 0x84, 0x1d, 0xb1, 0x09, 0x03, 0x5f, // ....Y.........._ + 0x5e, 0x2d, 0xb0, 0x01, 0x2c, 0x20, 0x20, 0x45, 0x69, 0x44, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x02, // ^-.., EiD..`-.. + 0x2c, 0xb0, 0x01, 0x2a, 0x21, 0x2d, 0xb0, 0x03, 0x2c, 0x20, 0x46, 0xb0, 0x03, 0x25, 0x46, 0x52, // ,..*!-.., F..%FR + 0x58, 0x23, 0x59, 0x20, 0x8a, 0x20, 0x8a, 0x49, 0x64, 0x8a, 0x20, 0x46, 0x20, 0x68, 0x61, 0x64, // X#Y . .Id. F had + 0xb0, 0x04, 0x25, 0x46, 0x20, 0x68, 0x61, 0x64, 0x52, 0x58, 0x23, 0x65, 0x8a, 0x59, 0x2f, 0x20, // ..%F hadRX#e.Y/ + 0xb0, 0x00, 0x53, 0x58, 0x69, 0x20, 0xb0, 0x00, 0x54, 0x58, 0x21, 0xb0, 0x40, 0x59, 0x1b, 0x69, // ..SXi ..TX!.@Y.i + 0x20, 0xb0, 0x00, 0x54, 0x58, 0x21, 0xb0, 0x40, 0x65, 0x59, 0x59, 0x3a, 0x2d, 0xb0, 0x04, 0x2c, // ..TX!.@eYY:-.., + 0x20, 0x46, 0xb0, 0x04, 0x25, 0x46, 0x52, 0x58, 0x23, 0x8a, 0x59, 0x20, 0x46, 0x20, 0x6a, 0x61, // F..%FRX#.Y F ja + 0x64, 0xb0, 0x04, 0x25, 0x46, 0x20, 0x6a, 0x61, 0x64, 0x52, 0x58, 0x23, 0x8a, 0x59, 0x2f, 0xfd, // d..%F jadRX#.Y/. + 0x2d, 0xb0, 0x05, 0x2c, 0x4b, 0x20, 0xb0, 0x03, 0x26, 0x50, 0x58, 0x51, 0x58, 0xb0, 0x80, 0x44, // -..,K ..&PXQX..D + 0x1b, 0xb0, 0x40, 0x44, 0x59, 0x1b, 0x21, 0x21, 0x20, 0x45, 0xb0, 0xc0, 0x50, 0x58, 0xb0, 0xc0, // ..@DY.!! E..PX.. + 0x44, 0x1b, 0x21, 0x59, 0x59, 0x2d, 0xb0, 0x06, 0x2c, 0x20, 0x20, 0x45, 0x69, 0x44, 0xb0, 0x01, // D.!YY-.., EiD.. + 0x60, 0x20, 0x20, 0x45, 0x7d, 0x69, 0x18, 0x44, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x07, 0x2c, 0xb0, // ` E}i.D..`-..,. + 0x06, 0x2a, 0x2d, 0xb0, 0x08, 0x2c, 0x4b, 0x20, 0xb0, 0x03, 0x26, 0x53, 0x58, 0xb0, 0x40, 0x1b, // .*-..,K ..&SX.@. + 0xb0, 0x00, 0x59, 0x8a, 0x8a, 0x20, 0xb0, 0x03, 0x26, 0x53, 0x58, 0x23, 0x21, 0xb0, 0x80, 0x8a, // ..Y.. ..&SX#!... + 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0, 0x03, 0x26, 0x53, 0x58, 0x23, 0x21, 0xb0, 0xc0, 0x8a, // ...#Y ..&SX#!... + 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0, 0x03, 0x26, 0x53, 0x58, 0x23, 0x21, 0xb8, 0x01, 0x00, // ...#Y ..&SX#!... + 0x8a, 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0, 0x03, 0x26, 0x53, 0x58, 0x23, 0x21, 0xb8, 0x01, // ....#Y ..&SX#!.. + 0x40, 0x8a, 0x8a, 0x1b, 0x8a, 0x23, 0x59, 0x20, 0xb0, 0x03, 0x26, 0x53, 0x58, 0xb0, 0x03, 0x25, // @....#Y ..&SX..% + 0x45, 0xb8, 0x01, 0x80, 0x50, 0x58, 0x23, 0x21, 0xb8, 0x01, 0x80, 0x23, 0x21, 0x1b, 0xb0, 0x03, // E...PX#!...#!... + 0x25, 0x45, 0x23, 0x21, 0x23, 0x21, 0x59, 0x1b, 0x21, 0x59, 0x44, 0x2d, 0xb0, 0x09, 0x2c, 0x4b, // %E#!#!Y.!YD-..,K + 0x53, 0x58, 0x45, 0x44, 0x1b, 0x21, 0x21, 0x59, 0x2d, 0xb0, 0x0a, 0x2c, 0xb0, 0x16, 0x45, 0x2d, // SXED.!!Y-..,..E- + 0xb0, 0x0b, 0x2c, 0xb0, 0x17, 0x45, 0x2d, 0xb0, 0x0c, 0x2c, 0xb1, 0x27, 0x01, 0x88, 0x20, 0x8a, // ..,..E-..,.'.. . + 0x53, 0x58, 0xb9, 0x40, 0x00, 0x04, 0x00, 0x63, 0xb8, 0x08, 0x00, 0x88, 0x54, 0x58, 0xb9, 0x00, // SX.@...c....TX.. + 0x16, 0x03, 0xe8, 0x70, 0x59, 0x1b, 0xb0, 0x23, 0x53, 0x58, 0xb0, 0x20, 0x88, 0xb8, 0x10, 0x00, // ...pY..#SX. .... + 0x54, 0x58, 0xb9, 0x00, 0x16, 0x03, 0xe8, 0x70, 0x59, 0x59, 0x59, 0x2d, 0xb0, 0x0d, 0x2c, 0xb0, // TX.....pYYY-..,. + 0x40, 0x88, 0xb8, 0x20, 0x00, 0x5a, 0x58, 0xb1, 0x17, 0x00, 0x44, 0x1b, 0xb9, 0x00, 0x17, 0x03, // @.. .ZX...D..... + 0xe8, 0x44, 0x59, 0x2d, 0xb0, 0x0c, 0x2b, 0xb0, 0x00, 0x2b, 0x00, 0xb2, 0x01, 0x05, 0x02, 0x2b, // .DY-..+..+.....+ + 0x00, 0xb7, 0x01, 0x5d, 0x4c, 0x3b, 0x27, 0x1a, 0x00, 0x08, 0x2b, 0xb7, 0x02, 0x49, 0x3c, 0x2f, // ...]L;'...+..I.. + 0x04, 0xfe, 0x05, 0x5e, 0x05, 0xc6, 0x05, 0xfc, 0x06, 0x76, 0x06, 0xde, 0x06, 0xf4, 0x07, 0x0a, // ...^.....v...... + 0x07, 0x2e, 0x07, 0x56, 0x07, 0x7a, 0x07, 0xcc, 0x08, 0x72, 0x08, 0xc0, 0x09, 0x20, 0x09, 0x72, // ...V.z...r... .r + 0x09, 0xb6, 0x09, 0xfe, 0x0a, 0x58, 0x0a, 0xba, 0x0b, 0x24, 0x0b, 0x40, 0x0b, 0x72, 0x0b, 0xd2, // .....X...$.@.r.. + 0x0b, 0xf6, 0x0c, 0x5c, 0x0c, 0xb2, 0x0d, 0x04, 0x0d, 0x4a, 0x0d, 0xa6, 0x0e, 0x08, 0x0e, 0x6e, // .........J.....n + 0x0e, 0x9a, 0x0e, 0xd6, 0x0f, 0x10, 0x0f, 0x7e, 0x0f, 0xce, 0x10, 0x10, 0x10, 0x46, 0x10, 0x6c, // .......~.....F.l + 0x10, 0x84, 0x10, 0xa8, 0x10, 0xca, 0x10, 0xe6, 0x11, 0x1c, 0x11, 0x94, 0x11, 0xf0, 0x12, 0x3a, // ...............: + 0x12, 0x96, 0x12, 0xfc, 0x13, 0x4c, 0x13, 0xc0, 0x14, 0x02, 0x14, 0x30, 0x14, 0x7a, 0x14, 0xc2, // .....L.....0.z.. + 0x14, 0xda, 0x15, 0x48, 0x15, 0x8e, 0x15, 0xd8, 0x16, 0x36, 0x16, 0x92, 0x16, 0xd0, 0x17, 0x4a, // ...H.....6.....J + 0x17, 0x9a, 0x17, 0xde, 0x18, 0x14, 0x18, 0x80, 0x18, 0xc8, 0x19, 0x1a, 0x19, 0x50, 0x19, 0x8e, // .............P.. + 0x19, 0xa6, 0x19, 0xe0, 0x1a, 0x26, 0x1a, 0x26, 0x1a, 0x4c, 0x1a, 0xa4, 0x1b, 0x0a, 0x1b, 0x6e, // .....&.&.L.....n + 0x1b, 0xce, 0x1b, 0xf4, 0x1c, 0x8a, 0x1c, 0xb0, 0x1d, 0x44, 0x1d, 0xc0, 0x1d, 0xcc, 0x1d, 0xe6, // .........D...... + 0x1d, 0xee, 0x1e, 0x92, 0x1e, 0xac, 0x1e, 0xec, 0x1f, 0x2e, 0x1f, 0x7e, 0x1f, 0xf8, 0x20, 0x2e, // ...........~.. . + 0x20, 0x7e, 0x20, 0xa4, 0x20, 0xba, 0x20, 0xea, 0x21, 0x14, 0x21, 0x72, 0x21, 0x7e, 0x21, 0xa0, // ~ . . .!.!r!~!. + 0x21, 0xc2, 0x21, 0xe4, 0x22, 0x30, 0x22, 0x48, 0x22, 0x60, 0x22, 0x76, 0x22, 0x8c, 0x22, 0xa8, // !.!."0"H"`"v".". + 0x22, 0xda, 0x23, 0x6e, 0x23, 0x7a, 0x23, 0x92, 0x23, 0xaa, 0x23, 0xc0, 0x23, 0xdc, 0x23, 0xf4, // ".#n#z#.#.#.#.#. + 0x24, 0x0c, 0x24, 0x22, 0x24, 0x3e, 0x24, 0xa8, 0x24, 0xbe, 0x24, 0xd6, 0x24, 0xee, 0x25, 0x04, // $.$"$>$.$.$.$.%. + 0x25, 0x1a, 0x25, 0x32, 0x25, 0x60, 0x25, 0xdc, 0x25, 0xf4, 0x26, 0x0c, 0x26, 0x22, 0x26, 0x3e, // %.%2%`%.%.&.&"&> + 0x26, 0x56, 0x26, 0x9e, 0x26, 0xf8, 0x27, 0x0a, 0x27, 0x24, 0x27, 0x40, 0x27, 0x5e, 0x27, 0x82, // &V&.&.'.'$'@'^'. + 0x27, 0xd8, 0x28, 0x86, 0x28, 0x92, 0x28, 0xa4, 0x28, 0xbc, 0x28, 0xdc, 0x29, 0x08, 0x29, 0x28, // '.(.(.(.(.(.).)( + 0x29, 0x48, 0x29, 0x62, 0x29, 0x8a, 0x29, 0xee, 0x2a, 0x0c, 0x2a, 0x1e, 0x2a, 0x38, 0x2a, 0x54, // )H)b).).*.*.*8*T + 0x2a, 0x72, 0x2a, 0x96, 0x2a, 0xd0, 0x2b, 0x48, 0x2b, 0x68, 0x2b, 0x88, 0x2b, 0xa0, 0x2b, 0xc6, // *r*.*.+H+h+.+.+. + 0x2b, 0xe6, 0x2c, 0x42, 0x2c, 0x68, 0x2c, 0x78, 0x2c, 0x84, 0x2c, 0x9a, 0x2c, 0xc2, 0x2c, 0xce, // +.,B,h,x,.,.,.,. + 0x2c, 0xda, 0x2c, 0xf2, 0x2d, 0x0c, 0x2d, 0x22, 0x2d, 0x3e, 0x2d, 0x54, 0x2d, 0x6e, 0x2d, 0x84, // ,.,.-.-"->-T-n-. + 0x2d, 0xa2, 0x2d, 0xb8, 0x2d, 0xe0, 0x2e, 0x4a, 0x2e, 0xc6, 0x2e, 0xd8, 0x2e, 0xe4, 0x2e, 0xfa, // -.-.-..J........ + 0x2f, 0x20, 0x2f, 0x36, 0x2f, 0x52, 0x2f, 0x5e, 0x2f, 0x6a, 0x2f, 0x80, 0x2f, 0x9e, 0x2f, 0xb4, // / /6/R/^/j/././. + 0x2f, 0xd0, 0x2f, 0xe6, 0x30, 0x0e, 0x30, 0x24, 0x30, 0x3e, 0x30, 0x4a, 0x30, 0x66, 0x30, 0x7c, // /./.0.0$0>0J0f0| + 0x30, 0xac, 0x31, 0x10, 0x31, 0x76, 0x31, 0x8c, 0x31, 0xaa, 0x31, 0xbc, 0x31, 0xc8, 0x31, 0xde, // 0.1.1v1.1.1.1.1. + 0x31, 0xfc, 0x32, 0x08, 0x32, 0x14, 0x32, 0x2a, 0x32, 0x46, 0x32, 0x52, 0x32, 0x5e, 0x32, 0x74, // 1.2.2.2*2F2R2^2t + 0x32, 0x8c, 0x32, 0x98, 0x32, 0xa4, 0x33, 0x0a, 0x33, 0x22, 0x33, 0x54, 0x33, 0x60, 0x33, 0x6c, // 2.2.2.3.3"3T3`3l + 0x33, 0x82, 0x33, 0xac, 0x33, 0xbc, 0x33, 0xcc, 0x34, 0x16, 0x34, 0x52, 0x34, 0x6a, 0x34, 0x84, // 3.3.3.3.4.4R4j4. + 0x34, 0x90, 0x34, 0x9c, 0x34, 0xb2, 0x34, 0xd0, 0x34, 0xe0, 0x35, 0x38, 0x35, 0x94, 0x35, 0xb8, // 4.4.4.4.4.585.5. + 0x35, 0xc4, 0x35, 0xda, 0x36, 0x02, 0x36, 0x1e, 0x36, 0x40, 0x36, 0xc8, 0x37, 0x6c, 0x37, 0x84, // 5.5.6.6.6@6.7l7. + 0x37, 0x9e, 0x37, 0xaa, 0x37, 0xb6, 0x37, 0xcc, 0x37, 0xea, 0x38, 0x02, 0x38, 0x1c, 0x38, 0x32, // 7.7.7.7.7.8.8.82 + 0x38, 0x4e, 0x38, 0x5a, 0x38, 0x66, 0x38, 0x7c, 0x38, 0x9a, 0x38, 0xac, 0x38, 0xb8, 0x38, 0xce, // 8N8Z8f8|8.8.8.8. + 0x38, 0xe4, 0x39, 0x26, 0x39, 0x94, 0x39, 0xaa, 0x39, 0xc6, 0x39, 0xd8, 0x39, 0xe4, 0x39, 0xfa, // 8.9&9.9.9.9.9.9. + 0x3a, 0x22, 0x3a, 0x54, 0x3a, 0xa4, 0x3a, 0xc0, 0x3a, 0xd4, 0x3a, 0xe0, 0x3a, 0xec, 0x3b, 0x02, // :":T:.:.:.:.:.;. + 0x3b, 0x1a, 0x3b, 0x30, 0x3b, 0x46, 0x3b, 0x62, 0x3b, 0x7a, 0x3b, 0x9a, 0x3b, 0xb0, 0x3b, 0xd8, // ;.;0;F;b;z;.;.;. + 0x3b, 0xee, 0x3c, 0x04, 0x3c, 0x32, 0x3c, 0x9a, 0x3c, 0xf8, 0x3d, 0x50, 0x3d, 0xa0, 0x3d, 0xfe, // ;.<.<2<.<.=P=.=. + 0x3e, 0x16, 0x3e, 0x4e, 0x3e, 0x5a, 0x3e, 0x72, 0x3e, 0x8a, 0x3e, 0xa0, 0x3e, 0xbe, 0x3e, 0xca, // >.>N>Z>r>.>.>.>. + 0x3e, 0xd6, 0x3f, 0x08, 0x3f, 0x14, 0x3f, 0x4c, 0x3f, 0x84, 0x3f, 0xc4, 0x3f, 0xdc, 0x40, 0x1e, // >.?.?.?L?.?.?.@. + 0x40, 0x54, 0x40, 0x9c, 0x40, 0xd4, 0x41, 0x12, 0x41, 0x28, 0x41, 0x3e, 0x41, 0x48, 0x41, 0x80, // @T@.@.A.A(A>AHA. + 0x41, 0xac, 0x41, 0xc8, 0x41, 0xe4, 0x42, 0x12, 0x42, 0x1e, 0x42, 0x2a, 0x42, 0x36, 0x42, 0x42, // A.A.A.B.B.B*B6BB + 0x42, 0x4e, 0x42, 0x5a, 0x42, 0x66, 0x42, 0x72, 0x42, 0x7e, 0x42, 0x86, 0x42, 0x8e, 0x42, 0xb6, // BNBZBfBrB~B.B.B. + 0x42, 0xee, 0x42, 0xf6, 0x42, 0xfe, 0x43, 0x06, 0x43, 0x7a, 0x43, 0x82, 0x43, 0x8a, 0x43, 0xc2, // B.B.B.C.CzC.C.C. + 0x43, 0xca, 0x43, 0xd2, 0x44, 0x1a, 0x44, 0x22, 0x44, 0x52, 0x44, 0x5a, 0x44, 0xa2, 0x44, 0xaa, // C.C.D.D"DRDZD.D. + 0x44, 0xb2, 0x45, 0x24, 0x45, 0x2c, 0x45, 0x82, 0x45, 0xe8, 0x46, 0x04, 0x46, 0x20, 0x46, 0x2c, // D.E$E,E.E.F.F F, + 0x46, 0x38, 0x46, 0x44, 0x46, 0x50, 0x46, 0x68, 0x46, 0xde, 0x47, 0x4a, 0x47, 0x8c, 0x47, 0xf4, // F8FDFPFhF.GJG.G. + 0x48, 0x7a, 0x48, 0xd4, 0x49, 0x1a, 0x49, 0x8c, 0x49, 0xbe, 0x49, 0xc6, 0x4a, 0x32, 0x4a, 0x3a, // HzH.I.I.I.I.J2J: + 0x4a, 0x42, 0x4a, 0xb4, 0x4a, 0xbc, 0x4b, 0x0c, 0x4b, 0x62, 0x4b, 0xbe, 0x4c, 0x16, 0x4c, 0x42, // JBJ.J.K.KbK.L.LB + 0x4c, 0x84, 0x4c, 0xec, 0x4d, 0x6a, 0x4d, 0xc8, 0x4e, 0x2c, 0x4e, 0x54, 0x4e, 0x7a, 0x4e, 0x86, // L.L.MjM.N,NTNzN. + 0x4e, 0x92, 0x4e, 0x9e, 0x4f, 0x02, 0x4f, 0x74, 0x4f, 0xe8, 0x50, 0x00, 0x50, 0x1c, 0x50, 0x7e, // N.N.O.OtO.P.P.P~ + 0x50, 0x96, 0x51, 0x0c, 0x51, 0x72, 0x51, 0x7a, 0x51, 0x96, 0x51, 0x9e, 0x52, 0x0a, 0x52, 0x70, // P.Q.QrQzQ.Q.R.Rp + 0x52, 0xc0, 0x52, 0xd8, 0x52, 0xf0, 0x53, 0x06, 0x53, 0x44, 0x53, 0x4c, 0x53, 0x9c, 0x53, 0xa4, // R.R.R.S.SDSLS.S. + 0x53, 0xac, 0x53, 0xfe, 0x54, 0x06, 0x54, 0x64, 0x54, 0xde, 0x55, 0x34, 0x55, 0x4a, 0x55, 0x52, // S.S.T.TdT.U4UJUR + 0x55, 0x96, 0x55, 0x9e, 0x55, 0xa6, 0x55, 0xae, 0x55, 0xb6, 0x55, 0xbe, 0x55, 0xc6, 0x55, 0xce, // U.U.U.U.U.U.U.U. + 0x56, 0x1e, 0x56, 0x84, 0x56, 0x8c, 0x56, 0xc2, 0x57, 0x02, 0x57, 0x3a, 0x57, 0x78, 0x57, 0xca, // V.V.V.V.W.W:WxW. + 0x58, 0x24, 0x58, 0x6a, 0x58, 0xcc, 0x59, 0x5c, 0x59, 0xb4, 0x59, 0xbc, 0x5a, 0x32, 0x5a, 0xb0, // X$XjX.Y.Y.Y.Z2Z. + 0x5a, 0xd8, 0x5b, 0x28, 0x5b, 0x30, 0x5b, 0x90, 0x5c, 0x08, 0x5c, 0x58, 0x5c, 0x80, 0x5c, 0xe6, // Z.[([0[....X.... + 0x5d, 0x28, 0x5d, 0x86, 0x5d, 0xee, 0x5d, 0xf6, 0x5e, 0x26, 0x5e, 0x2e, 0x5e, 0x78, 0x5e, 0xa4, // ](].].].^&^.^x^. + 0x5e, 0xac, 0x5f, 0x34, 0x5f, 0x3c, 0x5f, 0x70, 0x5f, 0xb2, 0x5f, 0xee, 0x60, 0x30, 0x60, 0x80, // ^._4_<_p_._.`0`. + 0x60, 0xd8, 0x61, 0x1a, 0x61, 0x90, 0x62, 0x1a, 0x62, 0x6e, 0x62, 0x80, 0x62, 0xac, 0x63, 0x28, // `.a.a.b.bnb.b.c( + 0x63, 0x48, 0x63, 0xca, 0x63, 0xd2, 0x63, 0xda, 0x64, 0x02, 0x64, 0x0a, 0x64, 0x74, 0x64, 0xd8, // cHc.c.c.d.d.dtd. + 0x65, 0x3a, 0x65, 0x5a, 0x65, 0x7a, 0x65, 0xa0, 0x65, 0xdc, 0x66, 0x38, 0x66, 0x94, 0x66, 0xee, // e:eZeze.e.f8f.f. + 0x67, 0x4c, 0x67, 0xd0, 0x68, 0x62, 0x68, 0xb8, 0x69, 0x14, 0x69, 0x7a, 0x69, 0xf4, 0x6a, 0x64, // gLg.hbh.i.izi.jd + 0x6a, 0xd0, 0x6b, 0x50, 0x6b, 0xce, 0x6c, 0x66, 0x6d, 0x16, 0x6d, 0x1e, 0x6d, 0x26, 0x6d, 0x8e, // j.kPk.lfm.m.m&m. + 0x6d, 0xf8, 0x6e, 0x42, 0x6e, 0x94, 0x6e, 0xb0, 0x6e, 0xc6, 0x6e, 0xd2, 0x6e, 0xde, 0x6f, 0x62, // m.nBn.n.n.n.n.ob + 0x6f, 0xe2, 0x70, 0x98, 0x71, 0x4e, 0x71, 0xc2, 0x72, 0x38, 0x72, 0x84, 0x72, 0xcc, 0x73, 0x02, // o.p.qNq.r8r.r.s. + 0x73, 0x1e, 0x73, 0x50, 0x73, 0x68, 0x73, 0x80, 0x74, 0x86, 0x74, 0xf0, 0x75, 0x0a, 0x75, 0x36, // s.sPshs.t.t.u.u6 + 0x75, 0x90, 0x75, 0xf4, 0x76, 0x50, 0x76, 0xcc, 0x76, 0xf8, 0x77, 0x24, 0x77, 0x62, 0x77, 0xa6, // u.u.vPv.v.w$wbw. + 0x77, 0xfa, 0x78, 0x44, 0x78, 0x50, 0x78, 0x5c, 0x78, 0x68, 0x78, 0x74, 0x78, 0x80, 0x78, 0x8c, // w.xDxPx.xhxtx.x. + 0x78, 0xf2, 0x79, 0x60, 0x79, 0xd4, 0x7a, 0x36, 0x7a, 0x94, 0x7a, 0xf2, 0x7a, 0xfe, 0x7b, 0x0a, // x.y`y.z6z.z.z.{. + 0x7b, 0x7c, 0x7b, 0xec, 0x7c, 0x44, 0x7c, 0x92, 0x7d, 0x32, 0x7d, 0xd0, 0x7d, 0xdc, 0x7d, 0xe8, // {|{.|D|.}2}.}.}. + 0x7d, 0xf4, 0x7e, 0x00, 0x7e, 0x08, 0x7e, 0x10, 0x7e, 0x6a, 0x7e, 0xc6, 0x7e, 0xd2, 0x7e, 0xde, // }.~.~.~.~j~.~.~. + 0x7f, 0x24, 0x7f, 0x6a, 0x7f, 0x76, 0x7f, 0x82, 0x7f, 0xd4, 0x80, 0x28, 0x80, 0x68, 0x80, 0x7c, // .$.j.v.....(.h.| + 0x80, 0xee, 0x81, 0x60, 0x81, 0x6c, 0x81, 0x78, 0x81, 0x80, 0x81, 0x96, 0x81, 0xbe, 0x82, 0x16, // ...`.l.x........ + 0x82, 0x68, 0x82, 0x74, 0x82, 0x80, 0x83, 0x02, 0x83, 0x82, 0x83, 0x8e, 0x83, 0x9a, 0x83, 0xa6, // .h.t............ + 0x83, 0xb2, 0x83, 0xbe, 0x83, 0xca, 0x83, 0xd2, 0x83, 0xe8, 0x84, 0x10, 0x84, 0x2c, 0x84, 0x50, // .............,.P + 0x84, 0x58, 0x84, 0x60, 0x84, 0x76, 0x84, 0x9c, 0x84, 0xfc, 0x85, 0x12, 0x85, 0x64, 0x85, 0x92, // .X.`.v.......d.. + 0x85, 0xae, 0x85, 0xd6, 0x85, 0xf2, 0x86, 0x1c, 0x86, 0x74, 0x86, 0xc6, 0x86, 0xd8, 0x86, 0xe4, // .........t...... + 0x87, 0x00, 0x87, 0x26, 0x87, 0x42, 0x87, 0x66, 0x87, 0x6e, 0x87, 0x76, 0x87, 0x92, 0x87, 0xe0, // ...&.B.f.n.v.... + 0x87, 0xfc, 0x88, 0x20, 0x88, 0x32, 0x88, 0x3e, 0x88, 0x5a, 0x88, 0x80, 0x88, 0x9c, 0x88, 0xb0, // ... .2.>.Z...... + 0x88, 0xcc, 0x88, 0xf2, 0x88, 0xfe, 0x89, 0x0a, 0x89, 0x2a, 0x89, 0x56, 0x89, 0x66, 0x89, 0x76, // .........*.V.f.v + 0x89, 0x82, 0x89, 0x8e, 0x89, 0xe8, 0x8a, 0x40, 0x8a, 0x82, 0x8a, 0x8a, 0x8a, 0xe2, 0x8b, 0x62, // .......@.......b + 0x8b, 0xd2, 0x8c, 0x40, 0x8c, 0x9e, 0x8c, 0xfc, 0x8d, 0x64, 0x8d, 0xca, 0x8e, 0x5a, 0x8e, 0xe6, // ...@.....d...Z.. + 0x8f, 0x3e, 0x8f, 0x90, 0x8f, 0xe0, 0x90, 0x2e, 0x90, 0xa6, 0x90, 0xae, 0x90, 0xba, 0x90, 0xc6, // .>.............. + 0x90, 0xd2, 0x90, 0xde, 0x90, 0xf6, 0x91, 0x10, 0x91, 0x28, 0x91, 0x48, 0x91, 0x60, 0x91, 0x80, // .........(.H.`.. + 0x91, 0x9c, 0x91, 0xc4, 0x91, 0xd0, 0x91, 0xdc, 0x91, 0xf2, 0x92, 0x04, 0x92, 0x1e, 0x92, 0x34, // ...............4 + 0x92, 0x4e, 0x92, 0x62, 0x92, 0x88, 0x92, 0x9c, 0x92, 0xc2, 0x92, 0xd6, 0x92, 0xf0, 0x93, 0x10, // .N.b............ + 0x93, 0x28, 0x93, 0x3e, 0x93, 0x56, 0x93, 0x6a, 0x93, 0x82, 0x93, 0x9a, 0x93, 0xb2, 0x93, 0xce, // .(.>.V.j........ + 0x93, 0xe8, 0x94, 0x14, 0x94, 0x20, 0x94, 0x2c, 0x94, 0x42, 0x94, 0x54, 0x94, 0x6a, 0x94, 0x8a, // ..... .,.B.T.j.. + 0x94, 0xa4, 0x94, 0xb8, 0x94, 0xd2, 0x94, 0xe6, 0x95, 0x0c, 0x95, 0x20, 0x95, 0x46, 0x95, 0x5a, // ........... .F.Z + 0x95, 0x74, 0x95, 0x96, 0x95, 0xac, 0x95, 0xbe, 0x95, 0xca, 0x95, 0xd6, 0x95, 0xe2, 0x95, 0xee, // .t.............. + 0x96, 0x04, 0x96, 0x16, 0x96, 0x30, 0x96, 0x44, 0x96, 0x5e, 0x96, 0x72, 0x96, 0x8c, 0x96, 0xa0, // .....0.D.^.r.... + 0x96, 0xba, 0x96, 0xce, 0x96, 0xe8, 0x97, 0x08, 0x97, 0x38, 0x97, 0x52, 0x97, 0x82, 0x97, 0x94, // .........8.R.... + 0x97, 0xaa, 0x97, 0xbc, 0x97, 0xd2, 0x97, 0xf0, 0x97, 0xfc, 0x98, 0x08, 0x98, 0x14, 0x98, 0x20, // ............... + 0x98, 0x36, 0x98, 0x42, 0x98, 0x5a, 0x98, 0x7a, 0x98, 0x86, 0x98, 0xa6, 0x98, 0xbc, 0x98, 0xce, // .6.B.Z.z........ + 0x98, 0xe4, 0x99, 0x00, 0x99, 0x0c, 0x99, 0x18, 0x99, 0x30, 0x99, 0x50, 0x99, 0x5c, 0x99, 0x68, // .........0.P...h + 0x99, 0x7e, 0x99, 0x8a, 0x99, 0xa0, 0x99, 0xbc, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, // .~.............. + 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, 0x99, 0xc8, // ................ + 0x99, 0xc8, 0x99, 0xd2, 0x99, 0xdc, 0x99, 0xe6, 0x99, 0xfe, 0x9a, 0x12, 0x9a, 0x26, 0x9a, 0x3a, // .............&.: + 0x9a, 0x46, 0x9a, 0x52, 0x9a, 0x5e, 0x9a, 0x7e, 0x9a, 0xbe, 0x9b, 0x20, 0x9b, 0x40, 0x9b, 0x4c, // .F.R.^.~... .@.L + 0x9b, 0x5c, 0x9c, 0x26, 0x9c, 0x2e, 0x9c, 0x36, 0x9c, 0x4e, 0x9c, 0x68, 0x9c, 0x74, 0x9c, 0x88, // ...&...6.N.h.t.. + 0x9c, 0xc6, 0x9d, 0x02, 0x9d, 0x0e, 0x9d, 0x9e, 0x9e, 0x22, 0x9e, 0x2e, 0x9e, 0xac, 0x9f, 0x38, // .........".....8 + 0x9f, 0xa2, 0x9f, 0xb2, 0xa0, 0x12, 0xa0, 0x72, 0xa0, 0x98, 0xa0, 0xbe, 0xa0, 0xe4, 0xa1, 0x0a, // .......r........ + 0xa1, 0x5c, 0xa1, 0x84, 0xa1, 0xbe, 0xa1, 0xd6, 0xa2, 0x10, 0xa2, 0x90, 0xa2, 0xd4, 0xa3, 0x5e, // ...............^ + 0xa3, 0x9e, 0xa3, 0xc8, 0xa3, 0xf2, 0xa4, 0x2c, 0xa4, 0x4a, 0xa4, 0xae, 0xa4, 0xba, 0xa4, 0xc6, // .......,.J...... + 0xa4, 0xd6, 0xa4, 0xd6, 0xa6, 0xbc, 0xa7, 0x02, 0xa7, 0x14, 0xa7, 0x38, 0xa7, 0xa8, 0xa8, 0x0c, // ...........8.... + 0xa8, 0x70, 0xa8, 0xb4, 0xa9, 0x34, 0xa9, 0x86, 0xa9, 0xb2, 0xa9, 0xfc, 0xaa, 0x36, 0xaa, 0x86, // .p...4.......6.. + 0xaa, 0xd6, 0xab, 0x3a, 0xab, 0x72, 0xab, 0xae, 0xab, 0xda, 0xac, 0x46, 0xac, 0xae, 0xad, 0x06, // ...:.r.....F.... + 0xad, 0x56, 0xad, 0xa2, 0xad, 0xf4, 0xae, 0x0c, 0xae, 0x6e, 0xae, 0x92, 0xae, 0xfa, 0xaf, 0x2c, // .V.......n....., + 0xaf, 0x48, 0xaf, 0x96, 0xaf, 0xf2, 0xb0, 0x30, 0xb0, 0x74, 0xb0, 0xb4, 0xb1, 0x02, 0xb1, 0x72, // .H.....0.t.....r + 0xb1, 0x8a, 0xb1, 0xdc, 0xb2, 0x28, 0xb2, 0x66, 0xb2, 0xa2, 0xb3, 0x12, 0xb3, 0x8a, 0xb3, 0xe0, // .....(.f........ + 0xb4, 0x52, 0xb4, 0xca, 0xb4, 0xda, 0xb5, 0x04, 0xb5, 0x2e, 0xb5, 0x56, 0xb5, 0x82, 0xb5, 0xd8, // .R.........V.... + 0xb6, 0x56, 0xb6, 0x9a, 0xb6, 0xfa, 0xb7, 0x62, 0xb7, 0x96, 0xb8, 0x10, 0xb8, 0x76, 0xb8, 0xb8, // .V.....b.....v.. + 0xb9, 0x1a, 0xb9, 0x7e, 0xb9, 0xe0, 0xba, 0x22, 0xba, 0xa0, 0xba, 0xf2, 0xbb, 0x48, 0xbb, 0x72, // ...~...".....H.r + 0xbb, 0xba, 0xbc, 0x1e, 0xbc, 0x9a, 0xbc, 0xcc, 0xbc, 0xfe, 0xbd, 0x06, 0xbd, 0x2c, 0xbd, 0x54, // .............,.T + 0xbd, 0x64, 0xbd, 0x8a, 0xbd, 0xbc, 0xbd, 0xd6, 0xbd, 0xf6, 0xbe, 0x30, 0xbe, 0x58, 0xbe, 0x74, // .d.........0.X.t + 0xbe, 0x80, 0xbe, 0xa6, 0xbe, 0xd6, 0xbe, 0xf0, 0xbf, 0x2a, 0xbf, 0x50, 0xbf, 0x7e, 0xbf, 0x9a, // .........*.P.~.. + 0xbf, 0xd6, 0xbf, 0xf6, 0xc0, 0x24, 0xc0, 0x50, 0xc0, 0x7a, 0xc0, 0x98, 0xc0, 0xd0, 0xc0, 0xf2, // .....$.P.z...... + 0xc1, 0x20, 0xc1, 0x3a, 0xc1, 0x70, 0xc1, 0xa2, 0xc1, 0xb2, 0xc1, 0xca, 0xc1, 0xd6, 0xc2, 0x02, // . .:.p.......... + 0xc2, 0x2c, 0xc2, 0x60, 0xc2, 0x8a, 0xc2, 0xa2, 0xc2, 0xb2, 0xc2, 0xc8, 0xc2, 0xf2, 0xc2, 0xfe, // .,.`............ + 0xc3, 0x16, 0xc3, 0x40, 0xc3, 0x5a, 0xc3, 0x8e, 0xc3, 0x9a, 0xc3, 0xb4, 0xc3, 0xd4, 0xc4, 0x00, // ...@.Z.......... + 0xc4, 0x18, 0xc4, 0x24, 0xc4, 0x4c, 0xc4, 0x76, 0xc4, 0x82, 0xc4, 0xbe, 0xc4, 0xca, 0xc4, 0xe0, // ...$.L.v........ + 0xc4, 0xf4, 0xc5, 0x22, 0xc5, 0x2e, 0xc5, 0x48, 0xc5, 0x64, 0xc5, 0x7e, 0xc5, 0xb4, 0xc5, 0xe2, // ..."...H.d.~.... + 0xc5, 0xee, 0xc6, 0x06, 0xc6, 0x2e, 0xc6, 0x58, 0xc6, 0x64, 0xc6, 0x8e, 0xc6, 0x9a, 0xc6, 0xb2, // .......X.d...... + 0xc6, 0xd0, 0xc6, 0xe2, 0xc6, 0xfc, 0xc7, 0x24, 0xc7, 0x30, 0xc7, 0x48, 0xc7, 0x72, 0xc7, 0xa0, // .......$.0.H.r.. + 0xc7, 0xde, 0xc7, 0xfe, 0xc8, 0x1a, 0xc8, 0x26, 0x00, 0x02, 0x00, 0xab, 0x00, 0x00, 0x01, 0x71, // .......&.......q + 0x05, 0xb0, 0x00, 0x03, 0x00, 0x07, 0x00, 0x30, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, // .......0...EX../ + 0x1b, 0xb1, 0x02, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb2, 0x01, 0x04, 0x02, 0x11, 0x12, 0x39, 0xb1, 0x06, 0x04, 0xb0, 0x0a, 0x2b, // .>Y......9.....+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x33, 0x13, 0x23, 0x35, 0x33, // X!...Y01.#.3.#53 + 0x01, 0x70, 0xc5, 0xc5, 0x01, 0xc6, 0xc6, 0x01, 0xde, 0x03, 0xd2, 0xfa, 0x50, 0xcc, 0x00, 0x00, // .p..........P... + 0x00, 0x02, 0x00, 0x50, 0x04, 0x10, 0x02, 0x4b, 0x06, 0x18, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x09, // ...P...K........ + 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x0a, 0xd0, 0x30, 0x31, 0x01, 0x07, 0x23, 0x37, 0x11, 0x33, 0x01, // .../...01..#7.3. + 0x07, 0x23, 0x37, 0x11, 0x33, 0x01, 0x16, 0x65, 0x61, 0x01, 0xc5, 0x01, 0x35, 0x65, 0x61, 0x01, // .#7.3..ea...5ea. + 0xc5, 0x05, 0x0a, 0xfa, 0xf0, 0x01, 0x18, 0xfe, 0xf2, 0xfa, 0xf8, 0x01, 0x10, 0x00, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0x46, 0x00, 0x00, 0x04, 0xa2, 0x05, 0xb0, 0x00, 0x1b, 0x00, 0x1f, 0x00, 0x88, // ...F............ + 0x00, 0xb0, 0x0b, 0x2f, 0xb0, 0x1d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, // .../../..EX../.. + 0x0c, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x06, 0x3e, 0x59, 0xb0, 0x1d, 0x10, 0xb1, 0x00, // EX../....>Y..... + 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x1d, 0x10, // ...+X!...Y...... + 0xb0, 0x06, 0xd0, 0xb0, 0x0b, 0x10, 0xb1, 0x08, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ...........+X!.. + 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb0, 0x0e, 0xd0, 0xb0, 0x0b, 0x10, 0xb0, 0x12, 0xd0, 0xb0, 0x08, // .Y.............. + 0x10, 0xb0, 0x14, 0xd0, 0xb0, 0x1d, 0x10, 0xb0, 0x16, 0xd0, 0xb0, 0x00, 0x10, 0xb0, 0x18, 0xd0, // ................ + 0xb0, 0x08, 0x10, 0xb0, 0x1e, 0xd0, 0x30, 0x31, 0x01, 0x23, 0x03, 0x23, 0x13, 0x23, 0x35, 0x21, // ......01.#.#.#5! + 0x13, 0x21, 0x35, 0x21, 0x13, 0x33, 0x03, 0x33, 0x13, 0x33, 0x03, 0x33, 0x15, 0x23, 0x03, 0x33, // .!5!.3.3.3.3.#.3 + 0x15, 0x23, 0x03, 0x23, 0x03, 0x33, 0x13, 0x23, 0x02, 0xc8, 0xff, 0x50, 0x97, 0x50, 0xec, 0x01, // .#.#.3.#...P.P.. + 0x08, 0x44, 0xff, 0x00, 0x01, 0x1c, 0x52, 0x97, 0x52, 0xff, 0x52, 0x97, 0x52, 0xc7, 0xe2, 0x44, // .D....R.R.R.R..D + 0xdb, 0xf7, 0x50, 0x98, 0x93, 0xff, 0x44, 0xff, 0x01, 0x9a, 0xfe, 0x66, 0x01, 0x9a, 0x8c, 0x01, // ..P...D....f.... + 0x5c, 0x8e, 0x01, 0xa0, 0xfe, 0x60, 0x01, 0xa0, 0xfe, 0x60, 0x8e, 0xfe, 0xa4, 0x8c, 0xfe, 0x66, // .....`...`.....f + 0x02, 0x26, 0x01, 0x5c, 0x00, 0x01, 0x00, 0x6e, 0xff, 0x30, 0x04, 0x15, 0x06, 0x9d, 0x00, 0x2c, // .&.....n.0....., + 0x00, 0x54, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, // .T...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x06, 0x3e, 0x59, 0xb2, 0x19, 0x22, // ..EX."/..".>Y.." + 0x09, 0x11, 0x12, 0x39, 0xb0, 0x19, 0x10, 0xb0, 0x03, 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x0c, 0xd0, // ...9............ + 0xb0, 0x09, 0x10, 0xb1, 0x13, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x22, 0x10, 0xb0, 0x1f, 0xd0, 0xb0, 0x22, 0x10, 0xb1, 0x2a, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // "....."..*...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, // ...Y01.4&'&&5467 + 0x35, 0x33, 0x15, 0x16, 0x16, 0x15, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, // 53....#4&#"..... + 0x16, 0x16, 0x15, 0x14, 0x06, 0x07, 0x15, 0x23, 0x35, 0x26, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, // .......#5&&773.. + 0x33, 0x32, 0x36, 0x03, 0x50, 0x80, 0x92, 0xca, 0xce, 0xbd, 0xa6, 0x9e, 0xa8, 0xb9, 0xc4, 0x7e, // 326.P..........~ + 0x70, 0x76, 0x75, 0x79, 0x9e, 0xcd, 0xc6, 0xce, 0xb4, 0x9d, 0xac, 0xdc, 0x04, 0x02, 0xbe, 0x9b, // pvuy............ + 0x71, 0x81, 0x91, 0x01, 0x78, 0x59, 0x80, 0x32, 0x3d, 0xcc, 0xaa, 0xa5, 0xd0, 0x15, 0xdd, 0xde, // q...xY.2=....... + 0x18, 0xef, 0xc9, 0x88, 0xa8, 0x7b, 0x6b, 0x61, 0x78, 0x36, 0x42, 0xc5, 0xa9, 0xac, 0xcb, 0x13, // .....{kax6B..... + 0xc0, 0xbf, 0x12, 0xd7, 0xd0, 0x05, 0x9a, 0x83, 0x7b, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x68, // ........{......h + 0xff, 0xeb, 0x05, 0x83, 0x05, 0xc5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x29, 0x00, 0x37, 0x00, 0x3b, // ...........).7.; + 0x00, 0x76, 0x00, 0xb0, 0x38, 0x2f, 0xb0, 0x3a, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, // .v..8/.:/..EX../ + 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x26, 0x2f, 0x1b, 0xb1, 0x26, // ....>Y..EX.&/..& + 0x06, 0x3e, 0x59, 0xb0, 0x03, 0x10, 0xb0, 0x0a, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // .>Y.......+X...Y + 0xb1, 0x11, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, // .....+X!...Y.... + 0x18, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x26, 0x10, 0xb0, 0x1f, // ....+X!...Y.&... + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x26, 0x10, 0xb1, 0x2d, 0x01, 0xb0, 0x0a, // ..+X...Y.&..-... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1f, 0x10, 0xb1, 0x34, 0x01, 0xb0, 0x0a, 0x2b, // +X!...Y....4...+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, // X!...Y01.4632... + 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, // ..#"&53..326554& + 0x23, 0x22, 0x06, 0x15, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x06, 0x23, 0x22, // #"...4632.....#" + 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, // &53..326554&#".. + 0x05, 0x27, 0x01, 0x17, 0x68, 0xa4, 0x89, 0x89, 0xa4, 0xa3, 0x88, 0x8a, 0xa5, 0x92, 0x51, 0x4c, // .'..h.........QL + 0x49, 0x50, 0x51, 0x4a, 0x4b, 0x50, 0x02, 0x2f, 0xa4, 0x89, 0x88, 0xa5, 0xa4, 0x87, 0x8a, 0xa5, // IPQJKP./........ + 0x92, 0x51, 0x4c, 0x49, 0x50, 0x52, 0x49, 0x4a, 0x51, 0xfe, 0x0f, 0x6d, 0x02, 0xc7, 0x6d, 0x04, // .QLIPRIJQ..m..m. + 0x98, 0x7f, 0xae, 0xad, 0x80, 0x4d, 0x7f, 0xac, 0xac, 0x7f, 0x4a, 0x67, 0x66, 0x4b, 0x4d, 0x4a, // .....M....JgfKMJ + 0x69, 0x69, 0x4a, 0xfc, 0xcd, 0x7f, 0xad, 0xad, 0x7f, 0x4e, 0x80, 0xac, 0xac, 0x80, 0x4b, 0x67, // iiJ......N....Kg + 0x67, 0x4b, 0x4e, 0x4a, 0x68, 0x68, 0x4a, 0xf7, 0x43, 0x04, 0x72, 0x43, 0x00, 0x03, 0x00, 0x40, // gKNJhhJ.C.rC...@ + 0xff, 0xeb, 0x04, 0xd0, 0x05, 0xc5, 0x00, 0x21, 0x00, 0x2c, 0x00, 0x39, 0x00, 0x62, 0x00, 0xb0, // .......!.,.9.b.. + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x1b, 0x06, 0x3e, 0x59, 0xb2, 0x11, 0x1f, 0x09, 0x11, 0x12, 0x39, 0xb0, 0x11, 0x10, // ....>Y......9... + 0xb0, 0x1c, 0xd0, 0xb0, 0x1f, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ......."...+X!.. + 0xf4, 0x59, 0xb2, 0x30, 0x09, 0x1f, 0x11, 0x12, 0x39, 0xb0, 0x30, 0x10, 0xb0, 0x26, 0xd0, 0xb0, // .Y.0....9.0..&.. + 0x09, 0x10, 0xb1, 0x37, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ...7...+X!...Y01 + 0x13, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, // .467&&54632..... + 0x07, 0x01, 0x36, 0x36, 0x35, 0x33, 0x14, 0x06, 0x07, 0x17, 0x07, 0x23, 0x27, 0x06, 0x06, 0x23, // ..6653.....#'..# + 0x22, 0x24, 0x05, 0x32, 0x36, 0x37, 0x01, 0x07, 0x06, 0x06, 0x15, 0x14, 0x16, 0x03, 0x14, 0x16, // "$.267.......... + 0x17, 0x37, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x40, 0x8d, 0x8c, 0x4e, 0x4c, 0xc3, // .76654&#".@..NL. + 0xab, 0x9e, 0xc6, 0x69, 0x67, 0x6d, 0x01, 0x54, 0x29, 0x2e, 0xb0, 0x4e, 0x4a, 0xb9, 0x02, 0xe5, // ...igm.T)..NJ... + 0x55, 0x50, 0xc2, 0x68, 0xd9, 0xfe, 0xff, 0x01, 0xda, 0x48, 0x8c, 0x3e, 0xfe, 0x97, 0x28, 0x5b, // UP.h.....H.>..([ + 0x3b, 0x8e, 0x0f, 0x36, 0x36, 0x8a, 0x39, 0x29, 0x61, 0x4e, 0x51, 0x58, 0x01, 0x88, 0x7a, 0xb7, // ;..66.9)aNQX..z. + 0x5c, 0x63, 0x9b, 0x52, 0xa9, 0xb7, 0xb6, 0x80, 0x62, 0x8f, 0x4b, 0x50, 0xfe, 0x67, 0x41, 0x9e, // .c.R....b.KP.gA. + 0x58, 0x84, 0xe0, 0x59, 0xdf, 0x05, 0x66, 0x3c, 0x3f, 0xe6, 0x4c, 0x31, 0x2e, 0x01, 0xb3, 0x1d, // X..Y..f..&....& + 0x06, 0xaf, 0xfe, 0xc2, 0x02, 0x4f, 0x01, 0x8a, 0x02, 0x2e, 0x5d, 0x01, 0x74, 0x6b, 0xfe, 0x28, // .....O....].tk.( + 0xfe, 0xa5, 0x0d, 0xfe, 0xa5, 0xfe, 0x28, 0x74, 0x6c, 0x5d, 0x02, 0x2d, 0x01, 0x8b, 0x00, 0x00, // ......(tl].-.... + 0x00, 0x01, 0x00, 0x06, 0xfe, 0x31, 0x02, 0x1f, 0x06, 0x64, 0x00, 0x11, 0x00, 0x09, 0x00, 0xb0, // .....1...d...... + 0x0d, 0x2f, 0xb0, 0x03, 0x2f, 0x30, 0x31, 0x01, 0x10, 0x00, 0x07, 0x23, 0x27, 0x36, 0x12, 0x11, // ./../01....#'6.. + 0x35, 0x10, 0x02, 0x27, 0x37, 0x33, 0x16, 0x00, 0x11, 0x02, 0x1f, 0xfe, 0xc1, 0xae, 0x06, 0x26, // 5..'73.........& + 0x87, 0xcd, 0xd3, 0x81, 0x26, 0x06, 0xae, 0x01, 0x3f, 0x02, 0x46, 0xfe, 0x75, 0xfd, 0xd3, 0x5d, // ....&...?.F.u..] + 0x6c, 0x69, 0x01, 0xe1, 0x01, 0x5d, 0x0d, 0x01, 0x56, 0x01, 0xe3, 0x6e, 0x6c, 0x5d, 0xfd, 0xd2, // li...]..V..nl].. + 0xfe, 0x76, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x02, 0x5f, 0x03, 0x57, 0x05, 0xb0, 0x00, 0x0e, // .v......._.W.... + 0x00, 0x19, 0x00, 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // ...../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x0d, 0x10, 0xb0, 0x0b, 0xd0, 0x30, 0x31, 0x01, 0x25, 0x37, 0x05, 0x03, // .>Y......01.%7.. + 0x33, 0x03, 0x25, 0x17, 0x05, 0x13, 0x07, 0x03, 0x03, 0x27, 0x01, 0x44, 0xfe, 0xd8, 0x31, 0x01, // 3.%......'.D..1. + 0x28, 0x0a, 0xa1, 0x0a, 0x01, 0x25, 0x30, 0xfe, 0xd2, 0xc1, 0x83, 0xb5, 0xb0, 0x84, 0x03, 0xd6, // (....%0......... + 0x59, 0x9a, 0x6f, 0x01, 0x56, 0xfe, 0xa4, 0x6e, 0x9c, 0x59, 0xfe, 0xf2, 0x60, 0x01, 0x1f, 0xfe, // Y.o.V..n.Y..`... + 0xe9, 0x5d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4e, 0x00, 0x92, 0x04, 0x34, 0x04, 0xb6, 0x00, 0x0b, // .].....N...4.... + 0x00, 0x1b, 0x00, 0xb0, 0x09, 0x2f, 0xb0, 0x00, 0xd0, 0xb0, 0x09, 0x10, 0xb1, 0x06, 0x03, 0xb0, // ...../.......... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0xd0, 0x30, 0x31, 0x01, 0x21, 0x15, // .+X!...Y...01.!. + 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x02, 0xa5, 0x01, 0x8f, 0xfe, 0x71, 0xc5, // !.#.!5!.3.....q. + 0xfe, 0x6e, 0x01, 0x92, 0xc5, 0x03, 0x0f, 0xb2, 0xfe, 0x35, 0x01, 0xcb, 0xb2, 0x01, 0xa7, 0x00, // .n.......5...... + 0x00, 0x01, 0x00, 0x30, 0xfe, 0xfe, 0x01, 0x3b, 0x00, 0xdd, 0x00, 0x05, 0x00, 0x10, 0x00, 0xb0, // ...0...;........ + 0x04, 0x2f, 0xb0, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x25, 0x03, // ./....+X...Y01%. + 0x23, 0x13, 0x35, 0x33, 0x01, 0x3b, 0x96, 0x75, 0x46, 0xc5, 0x30, 0xfe, 0xce, 0x01, 0x3c, 0xa3, // #.53.;.uF.0...<. + 0x00, 0x01, 0x00, 0x23, 0x02, 0x1a, 0x02, 0x0d, 0x02, 0xb4, 0x00, 0x03, 0x00, 0x12, 0x00, 0xb0, // ...#............ + 0x02, 0x2f, 0xb1, 0x01, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ./.....+X!...Y01 + 0x01, 0x21, 0x35, 0x21, 0x02, 0x0d, 0xfe, 0x16, 0x01, 0xea, 0x02, 0x1a, 0x9a, 0x00, 0x00, 0x00, // .!5!............ + 0x00, 0x01, 0x00, 0xa1, 0x00, 0x00, 0x01, 0x66, 0x00, 0xca, 0x00, 0x03, 0x00, 0x1c, 0x00, 0xb0, // .......f........ + 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb1, 0x02, 0x04, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x35, 0x33, 0x01, 0x66, // .+X!...Y01!#53.f + 0xc5, 0xc5, 0xca, 0x00, 0x00, 0x01, 0x00, 0x10, 0xff, 0x83, 0x03, 0x17, 0x05, 0xb0, 0x00, 0x03, // ................ + 0x00, 0x13, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, // ...../..EX../... + 0x0c, 0x3e, 0x59, 0x30, 0x31, 0x17, 0x23, 0x01, 0x33, 0xb8, 0xa8, 0x02, 0x60, 0xa7, 0x7d, 0x06, // .>Y01.#.3...`.}. + 0x2d, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x71, 0xff, 0xeb, 0x04, 0x10, 0x05, 0xc5, 0x00, 0x0d, // -......q........ + 0x00, 0x1b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, // ...;...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x0a, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, // .......+X!...Y.. + 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x10, 0x02, 0x23, 0x22, 0x02, 0x11, 0x11, 0x10, 0x12, 0x33, 0x32, 0x12, 0x11, 0x27, 0x34, 0x26, // ..#".....32..'4& + 0x23, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x10, 0xf7, 0xd7, 0xd7, // #".....3265..... + 0xfa, 0xf9, 0xd6, 0xd7, 0xf9, 0xc5, 0x89, 0x82, 0x82, 0x88, 0x8a, 0x82, 0x82, 0x87, 0x02, 0x2b, // ...............+ + 0xfe, 0xe9, 0xfe, 0xd7, 0x01, 0x2a, 0x01, 0x16, 0x01, 0x59, 0x01, 0x16, 0x01, 0x2b, 0xfe, 0xd5, // .....*...Y...+.. + 0xfe, 0xea, 0x2a, 0xbd, 0xbf, 0xbf, 0xbd, 0xfe, 0x55, 0xbd, 0xc1, 0xc0, 0xbe, 0x00, 0x00, 0x00, // ..*.....U....... + 0x00, 0x01, 0x00, 0xba, 0x00, 0x00, 0x02, 0xa9, 0x05, 0xb0, 0x00, 0x05, 0x00, 0x36, 0x00, 0xb0, // .............6.. + 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x05, 0x10, 0xb0, 0x04, 0xb0, 0x0a, // ../....>Y....... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // +X...Y.....+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x05, 0x35, 0x25, 0x02, 0xa9, 0xc5, 0xfe, 0xd6, 0x01, // .Y01!#..5%...... + 0xef, 0x04, 0xf0, 0x04, 0x8e, 0x36, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5c, 0x00, 0x00, 0x04, 0x26, // .....6.........& + 0x05, 0xc5, 0x00, 0x1a, 0x00, 0x52, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, // .....R...EX../.. + 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x02, 0x19, // Y.....+X!...Y... + 0x00, 0x11, 0x12, 0x39, 0xb2, 0x03, 0x00, 0x11, 0x11, 0x12, 0x39, 0xb0, 0x11, 0x10, 0xb1, 0x09, // ...9......9..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x11, 0x10, 0xb0, 0x0c, 0xd0, // ...+X!...Y...... + 0xb0, 0x03, 0x10, 0xb0, 0x17, 0xd0, 0x30, 0x31, 0x21, 0x21, 0x35, 0x01, 0x36, 0x36, 0x35, 0x34, // ......01!!5.6654 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x00, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, // &#"..#'&.32..... + 0x01, 0x17, 0x21, 0x04, 0x26, 0xfc, 0x50, 0x01, 0xdd, 0x80, 0x5b, 0x7f, 0x69, 0x97, 0x8f, 0xbd, // ..!.&.P...[.i... + 0x02, 0x05, 0x01, 0x04, 0xe6, 0xc4, 0xe9, 0x8d, 0x7f, 0xfe, 0x81, 0x02, 0x02, 0xbc, 0x87, 0x02, // ................ + 0x12, 0x8f, 0xa8, 0x58, 0x6d, 0x95, 0x9b, 0x8c, 0x06, 0xbc, 0x01, 0x00, 0xe5, 0xb1, 0x77, 0xef, // ...Xm.........w. + 0x89, 0xfe, 0x5f, 0x05, 0x00, 0x01, 0x00, 0x5f, 0xff, 0xeb, 0x03, 0xfb, 0x05, 0xc5, 0x00, 0x2a, // .._...._.......* + 0x00, 0x77, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, // .w.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb2, 0xcf, 0x00, 0x01, 0x5d, 0xb2, 0x1f, 0x00, 0x01, 0x71, 0xb2, 0xbf, 0x00, 0x01, 0x71, 0xb2, // ....]....q....q. + 0xef, 0x00, 0x01, 0x5d, 0xb2, 0x7f, 0x00, 0x01, 0x5d, 0xb2, 0x2f, 0x00, 0x01, 0x5d, 0xb0, 0x0f, // ...]....]./..].. + 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, // ......+X!...Y... + 0xb0, 0x0a, 0xd0, 0xb0, 0x1b, 0x10, 0xb0, 0x20, 0xd0, 0xb0, 0x1b, 0x10, 0xb1, 0x23, 0x02, 0xb0, // ....... .....#.. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x2a, 0x02, 0xb0, 0x0a, // .+X!...Y....*... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, // +X!...Y01.32654& + 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, // #"..#'&632...... + 0x16, 0x15, 0x14, 0x04, 0x23, 0x22, 0x24, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, // ....#"$773..3265 + 0x34, 0x26, 0x23, 0x23, 0x01, 0x84, 0xac, 0x83, 0x6d, 0x7c, 0x79, 0x73, 0x8b, 0xbd, 0x02, 0x05, // 4&##....m|ys.... + 0xf9, 0xc9, 0xca, 0xf0, 0x6d, 0x6d, 0x83, 0x6d, 0xfe, 0xfb, 0xcb, 0xc7, 0xfe, 0xfb, 0x05, 0x03, // ....mm.m........ + 0xbc, 0x8d, 0x7b, 0x7d, 0x8e, 0x7e, 0x88, 0xac, 0x03, 0x33, 0x83, 0x75, 0x7d, 0x82, 0x87, 0x70, // ..{}.~...3.u}..p + 0x06, 0xa5, 0xe7, 0xd7, 0xc7, 0x5a, 0xb3, 0x2f, 0x2b, 0xb8, 0x72, 0xc7, 0xe4, 0xd7, 0xb8, 0x06, // .....Z./+.r..... + 0x73, 0x88, 0x88, 0x85, 0x87, 0x80, 0x00, 0x00, 0x00, 0x02, 0x00, 0x37, 0x00, 0x00, 0x04, 0x52, // s..........7...R + 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x4a, 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .......J.../..EX + 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0xd0, 0xb0, 0x01, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x09, // !...Y........... + 0x10, 0xb0, 0x0e, 0xd0, 0x40, 0x09, 0x6b, 0x0e, 0x7b, 0x0e, 0x8b, 0x0e, 0x9b, 0x0e, 0x04, 0x5d, // ....@.k.{......] + 0x30, 0x31, 0x01, 0x33, 0x15, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x01, 0x33, 0x01, 0x21, 0x11, // 01.3.#.#.!5.3.!. + 0x27, 0x07, 0x03, 0x89, 0xc9, 0xc9, 0xc4, 0xfd, 0x72, 0x02, 0x82, 0xd0, 0xfd, 0x80, 0x01, 0xbc, // '.......r....... + 0x06, 0x13, 0x01, 0xea, 0x9a, 0xfe, 0xb0, 0x01, 0x50, 0x6f, 0x03, 0xf1, 0xfc, 0x3a, 0x02, 0xab, // ........Po...:.. + 0x01, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0x98, 0xff, 0xeb, 0x04, 0x13, 0x05, 0xb0, 0x00, 0x1f, // .2.............. + 0x00, 0x59, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, // .Y.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x01, 0x10, 0xb1, 0x03, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x0e, 0x10, 0xb0, 0x13, 0xd0, 0xb0, 0x0e, 0x10, 0xb1, 0x16, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // .............+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x1c, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x1f, 0xd0, 0x30, 0x31, 0x13, 0x13, 0x21, 0x15, 0x21, // ..Y......01..!.! + 0x03, 0x36, 0x36, 0x37, 0x36, 0x12, 0x15, 0x14, 0x02, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, // .6676....#"&773. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0xaf, 0x54, 0x02, 0xd9, 0xfd, // .32654&#"...T... + 0xce, 0x30, 0x2e, 0x71, 0x4a, 0xc9, 0xe7, 0xeb, 0xe1, 0xb9, 0xf6, 0x05, 0x02, 0xb2, 0x89, 0x6d, // .0.qJ..........m + 0x7d, 0x8a, 0x8c, 0x7b, 0x74, 0x68, 0x18, 0x02, 0x91, 0x03, 0x1f, 0xaf, 0xfe, 0x67, 0x22, 0x2d, // }..{th.......g"- + 0x02, 0x02, 0xfe, 0xf6, 0xe1, 0xdb, 0xfe, 0xf6, 0xca, 0xc4, 0x06, 0x77, 0x83, 0xb0, 0x99, 0x8c, // ...........w.... + 0xb4, 0x46, 0x48, 0x00, 0x00, 0x02, 0x00, 0x84, 0xff, 0xeb, 0x04, 0x37, 0x05, 0xc5, 0x00, 0x1a, // .FH........7.... + 0x00, 0x27, 0x00, 0x51, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, // .'.Q...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0e, // .......+X!...Y.. + 0x14, 0x00, 0x11, 0x12, 0x39, 0xb0, 0x0e, 0x2f, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ....9../.....+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x14, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y...."...+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, // ..Y01.2...&&#".. + 0x15, 0x36, 0x36, 0x33, 0x32, 0x12, 0x15, 0x14, 0x02, 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, // .6632....#"..... + 0x13, 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x02, 0xa3, 0x4b, // .".....32654&..K + 0x93, 0x30, 0x2a, 0x31, 0x6b, 0x48, 0x9c, 0xbf, 0x40, 0xa5, 0x5f, 0xc3, 0xe8, 0xf7, 0xce, 0xd6, // .0*1kH..@._..... + 0xfe, 0xe8, 0x01, 0x38, 0xa4, 0x65, 0x8e, 0x25, 0xaa, 0x80, 0x79, 0x87, 0x91, 0x05, 0xc5, 0x22, // ...8.e.%..y...." + 0x1a, 0x97, 0x19, 0x1f, 0xfa, 0xc9, 0x17, 0x38, 0x3f, 0xfe, 0xf2, 0xcf, 0xe2, 0xfe, 0xe3, 0x01, // .......8?....... + 0x36, 0x01, 0x1a, 0x01, 0x16, 0x01, 0x18, 0x01, 0x5c, 0xfd, 0x6f, 0x52, 0x44, 0x76, 0xc9, 0xda, // 6.........oRDv.. + 0xcd, 0x98, 0x90, 0xba, 0x00, 0x01, 0x00, 0x4d, 0x00, 0x00, 0x04, 0x26, 0x05, 0xb0, 0x00, 0x0c, // .......M...&.... + 0x00, 0x2f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, 0x3e, 0x59, // ./...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, // ..EX../....>Y... + 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0xd0, 0x30, // .....+X!...Y...0 + 0x31, 0x01, 0x00, 0x02, 0x03, 0x07, 0x23, 0x37, 0x12, 0x12, 0x13, 0x21, 0x35, 0x21, 0x04, 0x26, // 1.....#7...!5!.& + 0xfe, 0xf8, 0xb9, 0x29, 0x10, 0xc5, 0x10, 0x2a, 0xf2, 0xd2, 0xfc, 0xe8, 0x03, 0xd9, 0x05, 0x15, // ...)...*........ + 0xfe, 0xc6, 0xfe, 0x1b, 0xfe, 0xa7, 0x9d, 0x9d, 0x01, 0x58, 0x02, 0x1e, 0x01, 0x02, 0x9b, 0x00, // .........X...... + 0x00, 0x03, 0x00, 0x66, 0xff, 0xeb, 0x04, 0x1a, 0x05, 0xc5, 0x00, 0x17, 0x00, 0x23, 0x00, 0x2f, // ...f.........#./ + 0x00, 0x64, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0c, 0x3e, 0x59, // .d...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb2, 0x2d, 0x09, // ..EX../....>Y.-. + 0x15, 0x11, 0x12, 0x39, 0xb0, 0x2d, 0x2f, 0xb2, 0xcf, 0x2d, 0x01, 0x5d, 0xb1, 0x1b, 0x02, 0xb0, // ...9.-/..-.].... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x03, 0x1b, 0x2d, 0x11, 0x12, 0x39, 0xb2, // .+X!...Y...-..9. + 0x0f, 0x2d, 0x1b, 0x11, 0x12, 0x39, 0xb0, 0x09, 0x10, 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // .-...9....!...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x15, 0x10, 0xb1, 0x27, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y....'...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x04, 0x23, // ...Y01.........# + 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x03, 0x34, // "$5467&&54632..4 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, 0x34, 0x26, 0x23, 0x22, 0x06, // &#"....326.4&#". + 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, 0xf2, 0x80, 0x6d, 0x7e, 0x97, 0xfe, 0xf9, 0xd2, 0xd6, // ...326...m~..... + 0xfe, 0xfb, 0x94, 0x7e, 0x6d, 0x7c, 0xed, 0xc3, 0xc0, 0xf3, 0x9c, 0x9e, 0x79, 0x7b, 0x99, 0x98, // ...~m|......y{.. + 0x7e, 0x7b, 0x9a, 0x29, 0x87, 0x67, 0x69, 0x82, 0x83, 0x6a, 0x68, 0x84, 0x04, 0x34, 0x72, 0xab, // ~{.).gi..jh..4r. + 0x2a, 0x2c, 0xbc, 0x7b, 0xca, 0xd5, 0xd5, 0xca, 0x7b, 0xbc, 0x2c, 0x2a, 0xab, 0x72, 0xc0, 0xd1, // *,.{....{.,*.r.. + 0xd1, 0xfc, 0x9a, 0x78, 0x9a, 0x9a, 0x78, 0x7c, 0x8d, 0x8e, 0x03, 0x1d, 0x6c, 0x8e, 0x89, 0x71, // ...x..x|....l..q + 0x6f, 0x86, 0x86, 0x00, 0x00, 0x02, 0x00, 0x53, 0xff, 0xeb, 0x04, 0x01, 0x05, 0xc5, 0x00, 0x1a, // o......S........ + 0x00, 0x27, 0x00, 0x4e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0c, // .'.N...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb1, // >Y..EX../....>Y. + 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x07, 0x14, 0x0d, 0x11, // ....+X!...Y..... + 0x12, 0x39, 0xb0, 0x07, 0x2f, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y...."...+X!...Y + 0x30, 0x31, 0x25, 0x32, 0x36, 0x35, 0x35, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x34, 0x00, 0x33, // 01%2655..#".54.3 + 0x32, 0x00, 0x11, 0x11, 0x10, 0x00, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x13, 0x32, 0x36, // 2.....#"&'7...26 + 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x01, 0xff, 0x90, 0xad, 0x31, 0x93, // 754&#"........1. + 0x5a, 0xd3, 0xf8, 0x01, 0x07, 0xbc, 0xe4, 0x01, 0x07, 0xfe, 0xe3, 0xe5, 0x4d, 0x9f, 0x3f, 0x1e, // Z...........M.?. + 0x3b, 0x7f, 0x72, 0x6d, 0x91, 0x20, 0x93, 0x8d, 0x6c, 0x98, 0x8d, 0x85, 0xda, 0xd7, 0x42, 0x47, // ;.rm. ..l.....BG + 0x49, 0x01, 0x05, 0xe5, 0xdb, 0x01, 0x18, 0xfe, 0xe3, 0xfe, 0xeb, 0xfe, 0xa5, 0xfe, 0xe3, 0xfe, // I............... + 0xd0, 0x1d, 0x1e, 0x97, 0x1f, 0x19, 0x01, 0xfd, 0x5e, 0x49, 0x7e, 0xbf, 0xc4, 0xc1, 0x97, 0x96, // ........^I~..... + 0xba, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa1, 0x00, 0x00, 0x01, 0x66, 0x04, 0x36, 0x00, 0x26, // ...........f.6.& + 0x00, 0x11, 0x00, 0x00, 0x01, 0x07, 0x00, 0x11, 0x00, 0x00, 0x03, 0x6c, 0x00, 0x10, 0x00, 0xb0, // ...........l.... + 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0a, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x63, 0xfe, 0xfe, 0x01, 0x6e, 0x04, 0x36, 0x00, 0x27, 0x00, 0x11, 0x00, 0x01, // ...c...n.6.'.... + 0x03, 0x6c, 0x01, 0x06, 0x00, 0x0f, 0x33, 0x00, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .l....3......EX. + 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, // ./....>Y01.....G + 0x00, 0x57, 0x03, 0x77, 0x03, 0xe1, 0x00, 0x09, 0x00, 0x19, 0x00, 0xb0, 0x07, 0x2f, 0xb1, 0x06, // .W.w........./.. + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x01, 0x06, 0x07, 0x11, 0x12, // ...+X!...Y...... + 0x39, 0x30, 0x31, 0x01, 0x07, 0x15, 0x17, 0x05, 0x15, 0x01, 0x35, 0x01, 0x15, 0x01, 0x48, 0x55, // 901.......5...HU + 0x55, 0x02, 0x2f, 0xfc, 0xd0, 0x03, 0x30, 0x02, 0x2f, 0x12, 0x06, 0x13, 0xe4, 0xc9, 0x01, 0x7b, // U./...0./......{ + 0x95, 0x01, 0x7a, 0xc9, 0x00, 0x02, 0x00, 0x98, 0x01, 0x97, 0x03, 0xda, 0x03, 0xdb, 0x00, 0x03, // ..z............. + 0x00, 0x07, 0x00, 0x26, 0x00, 0xb2, 0x00, 0x07, 0x03, 0x2b, 0xb0, 0x00, 0x10, 0xb1, 0x03, 0x03, // ...&.....+...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x04, 0x03, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x35, 0x21, 0x11, 0x21, // .+X!...Y01.!5!.! + 0x35, 0x21, 0x03, 0xda, 0xfc, 0xbe, 0x03, 0x42, 0xfc, 0xbe, 0x03, 0x42, 0x03, 0x37, 0xa4, 0xfd, // 5!.....B...B.7.. + 0xbc, 0xa4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x88, 0x00, 0x57, 0x03, 0xe0, 0x03, 0xe1, 0x00, 0x09, // .........W...... + 0x00, 0x19, 0x00, 0xb0, 0x02, 0x2f, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ...../.....+X!.. + 0xf4, 0x59, 0xb2, 0x07, 0x03, 0x02, 0x11, 0x12, 0x39, 0x30, 0x31, 0x13, 0x35, 0x01, 0x15, 0x01, // .Y......901.5... + 0x35, 0x25, 0x37, 0x35, 0x27, 0x88, 0x03, 0x58, 0xfc, 0xa8, 0x02, 0x56, 0x55, 0x55, 0x03, 0x1e, // 5%75'..X...VUU.. + 0xc3, 0xfe, 0x86, 0x95, 0xfe, 0x85, 0xc4, 0xee, 0x11, 0x06, 0x14, 0x00, 0x00, 0x02, 0x00, 0x3a, // ...............: + 0x00, 0x00, 0x03, 0x76, 0x05, 0xc5, 0x00, 0x1a, 0x00, 0x1e, 0x00, 0x3f, 0x00, 0xb0, 0x00, 0x45, // ...v.......?...E + 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x1b, 0x06, 0x3e, 0x59, 0xb1, 0x1d, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /....>Y.....+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x00, 0x1d, 0x11, 0x11, 0x12, 0x39, 0xb0, 0x11, 0x10, 0xb1, 0x09, 0x03, // ..Y......9...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x36, 0x36, 0x37, 0x36, // ..+X!...Y01.6676 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, // 654&#"..#'&632.. + 0x14, 0x06, 0x07, 0x06, 0x06, 0x15, 0x13, 0x23, 0x35, 0x33, 0x01, 0x63, 0x01, 0x30, 0x66, 0x63, // .......#53.c.0fc + 0x54, 0x71, 0x69, 0x5b, 0x80, 0xbc, 0x03, 0x03, 0xe9, 0xb4, 0xc5, 0xda, 0x8d, 0x74, 0x36, 0x17, // Tqi[.........t6. + 0x07, 0xce, 0xce, 0x01, 0x9a, 0x91, 0x70, 0x5c, 0x75, 0x7e, 0x59, 0x6a, 0x72, 0x63, 0x60, 0x06, // ......p.u~Yjrc`. + 0xa1, 0xc2, 0xc9, 0xb4, 0x81, 0xd6, 0x70, 0x36, 0x56, 0x5b, 0xfe, 0x66, 0xd0, 0x00, 0x00, 0x00, // ......p6V[.f.... + 0x00, 0x02, 0x00, 0x60, 0xfe, 0x3b, 0x06, 0xd5, 0x05, 0x97, 0x00, 0x33, 0x00, 0x43, 0x00, 0x65, // ...`.;.....3.C.e + 0x00, 0xb0, 0x0f, 0x2f, 0xb0, 0x31, 0x2f, 0xb0, 0x2b, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // .../.1/.+/..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x37, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ..>Y....7...+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x18, 0xd0, 0xb0, 0x31, 0x10, 0xb1, 0x1e, 0x01, 0xb0, 0x0a, 0x2b, 0x58, // ..Y....1......+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x2b, 0x10, 0xb1, 0x24, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y.+..$...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x41, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y....A...+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x06, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, // ..Y01...#"&'..#" + 0x26, 0x37, 0x12, 0x12, 0x33, 0x32, 0x16, 0x17, 0x07, 0x33, 0x03, 0x06, 0x16, 0x33, 0x32, 0x36, // &7..32...3...326 + 0x37, 0x12, 0x00, 0x21, 0x20, 0x00, 0x03, 0x02, 0x00, 0x21, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, // 7..! ....!267... + 0x23, 0x20, 0x00, 0x13, 0x12, 0x00, 0x21, 0x20, 0x00, 0x01, 0x06, 0x16, 0x33, 0x32, 0x36, 0x37, // # ....! ....3267 + 0x26, 0x36, 0x37, 0x13, 0x26, 0x26, 0x23, 0x22, 0x06, 0x06, 0xc4, 0x09, 0xde, 0xdd, 0x49, 0x6a, // &67.&&#"......Ij + 0x17, 0x32, 0x90, 0x60, 0x7d, 0x8a, 0x12, 0x17, 0xe5, 0xa5, 0x69, 0x80, 0x4b, 0x04, 0x06, 0x33, // .2.`}.....i.K..3 + 0x09, 0x3d, 0x33, 0x7b, 0x94, 0x08, 0x10, 0xfe, 0xc0, 0xfe, 0xb0, 0xfe, 0xcc, 0xfe, 0x89, 0x0f, // .=3{............ + 0x12, 0x01, 0x50, 0x01, 0x3a, 0x58, 0xb5, 0x3e, 0x26, 0x43, 0xcf, 0x63, 0xfe, 0x84, 0xfe, 0x61, // ..P.:X.>&C.c...a + 0x12, 0x13, 0x01, 0xcc, 0x01, 0x74, 0x01, 0x7b, 0x01, 0x95, 0xfb, 0xfb, 0x0b, 0x41, 0x4a, 0x40, // .....t.{.....AJ@ + 0x6a, 0x2c, 0x01, 0x01, 0x02, 0x2f, 0x1a, 0x39, 0x1f, 0x7d, 0x84, 0x01, 0xf6, 0xd6, 0xfe, 0xcb, // j,.../.9.}...... + 0x53, 0x4c, 0x50, 0x4f, 0xf1, 0xc4, 0x01, 0x03, 0x01, 0x39, 0x34, 0x36, 0x04, 0xfd, 0xb7, 0x6e, // SLPO.....946...n + 0x53, 0xe3, 0xaf, 0x01, 0x7e, 0x01, 0xab, 0xfe, 0x32, 0xfe, 0x8d, 0xfe, 0x88, 0xfe, 0x4b, 0x2b, // S...~...2.....K+ + 0x23, 0x6b, 0x2a, 0x2f, 0x01, 0xf3, 0x01, 0xb0, 0x01, 0xa7, 0x02, 0x12, 0xfe, 0x0c, 0xfd, 0xfd, // #k*/............ + 0x8e, 0x94, 0x31, 0x3f, 0x0c, 0x1b, 0x10, 0x02, 0x1a, 0x0c, 0x0e, 0xdb, 0x00, 0x02, 0x00, 0x14, // ..1?............ + 0x00, 0x00, 0x05, 0x1a, 0x05, 0xb0, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x62, 0x00, 0xb0, 0x00, 0x45, // ...........b...E + 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x07, 0x06, 0x3e, 0x59, 0xb2, 0x01, 0x02, 0x05, 0x11, 0x12, 0x39, 0xb0, 0x01, 0x2f, 0xb4, 0x8f, // ..>Y......9../.. + 0x01, 0x9f, 0x01, 0x02, 0x5d, 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ....].....+X!... + 0x59, 0xb0, 0x05, 0x10, 0xb0, 0x0a, 0xd0, 0xb4, 0x3b, 0x0a, 0x4b, 0x0a, 0x02, 0x5d, 0xb6, 0x7b, // Y.......;.K..].{ + 0x0a, 0x8b, 0x0a, 0x9b, 0x0a, 0x03, 0x5d, 0xb2, 0x69, 0x0a, 0x01, 0x5d, 0x30, 0x31, 0x01, 0x21, // ......].i..]01.! + 0x03, 0x23, 0x01, 0x33, 0x01, 0x23, 0x01, 0x21, 0x03, 0x23, 0x03, 0xc9, 0xfd, 0x9e, 0x8a, 0xc9, // .#.3.#.!.#...... + 0x02, 0x33, 0xa9, 0x02, 0x2a, 0xc9, 0xfd, 0x53, 0x01, 0xea, 0xf0, 0x06, 0x01, 0x77, 0xfe, 0x89, // .3..*..S.....w.. + 0x05, 0xb0, 0xfa, 0x50, 0x02, 0x1c, 0x02, 0x97, 0x00, 0x03, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xaf, // ...P............ + 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x17, 0x00, 0x20, 0x00, 0x52, 0x00, 0xb0, 0x18, 0x2f, 0xb0, 0x00, // ....... .R.../.. + 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0xef, 0x18, 0x01, 0x5d, 0xb0, 0x18, 0x10, // ./....>Y....]... + 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, // .....+X!...Y.... + 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x1f, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x33, 0x11, 0x21, 0x32, // ...+X!...Y013.!2 + 0x04, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x04, 0x23, 0x01, 0x11, 0x21, 0x32, 0x36, // ..........#..!26 + 0x35, 0x34, 0x26, 0x23, 0x25, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0xb4, 0x01, 0xdb, // 54&#%!2654&#!... + 0xe4, 0x01, 0x02, 0x7c, 0x65, 0x84, 0x97, 0xfe, 0xfd, 0xde, 0xfe, 0xab, 0x01, 0x55, 0x86, 0x96, // ...|e........U.. + 0x7d, 0x82, 0xfe, 0x8e, 0x01, 0x3f, 0x6e, 0x8a, 0x95, 0x8c, 0xfe, 0xea, 0x05, 0xb0, 0xc5, 0xc5, // }....?n......... + 0x61, 0x99, 0x25, 0x1c, 0xca, 0x86, 0xc8, 0xd3, 0x02, 0xab, 0xfd, 0xef, 0x85, 0x7a, 0x80, 0x92, // a.%..........z.. + 0x9a, 0x79, 0x6c, 0x76, 0x75, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x76, 0xff, 0xeb, 0x04, 0xbf, // .ylvu......v.... + 0x05, 0xc5, 0x00, 0x1d, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, // .....;...EX../.. + 0x0b, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x04, 0x10, 0xb1, 0x1a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ........+X!...Y0 + 0x31, 0x01, 0x17, 0x16, 0x00, 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x32, 0x00, 0x07, // 1....#".....32.. + 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x02, 0x15, 0x11, 0x14, 0x12, 0x33, 0x32, 0x36, 0x35, 0x04, // .#4&#".....3265. + 0xb9, 0x02, 0x04, 0xfe, 0xd8, 0xf3, 0xf7, 0xfe, 0xc9, 0x01, 0x37, 0xf7, 0xf7, 0x01, 0x24, 0x04, // ..........7...$. + 0x02, 0xbd, 0xb4, 0xa4, 0xa5, 0xc4, 0xc4, 0xa5, 0xa4, 0xb4, 0x01, 0xd2, 0x06, 0xcd, 0xfe, 0xec, // ................ + 0x01, 0x5e, 0x01, 0x0d, 0x01, 0x03, 0x01, 0x0d, 0x01, 0x5f, 0xfe, 0xf9, 0xd9, 0x06, 0x99, 0xb2, // .^......._...... + 0xfe, 0xf6, 0xc5, 0xfe, 0xfb, 0xc7, 0xfe, 0xf6, 0xb1, 0x9c, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb4, // ................ + 0x00, 0x00, 0x04, 0xeb, 0x05, 0xb0, 0x00, 0x09, 0x00, 0x13, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, // ...........;...E + 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x33, 0x11, 0x21, 0x20, 0x00, 0x11, 0x15, 0x10, 0x00, // !...Y013.! ..... + 0x21, 0x03, 0x11, 0x33, 0x32, 0x12, 0x35, 0x35, 0x34, 0x02, 0x23, 0xb4, 0x01, 0xbf, 0x01, 0x1e, // !..32.554.#..... + 0x01, 0x5a, 0xfe, 0xa6, 0xfe, 0xe2, 0xfa, 0xfa, 0xca, 0xe9, 0xe9, 0xca, 0x05, 0xb0, 0xfe, 0xa1, // .Z.............. + 0xfe, 0xea, 0xc7, 0xfe, 0xe9, 0xfe, 0xa3, 0x05, 0x15, 0xfb, 0x85, 0x01, 0x0a, 0xd0, 0xc9, 0xce, // ................ + 0x01, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x05, 0xb0, 0x00, 0x0b, // ...........z.... + 0x00, 0x5c, 0x00, 0xb0, 0x0b, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, // ...../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb2, 0xef, 0x0b, 0x01, 0x5d, 0xb2, 0x7f, 0x0b, 0x01, 0x5d, 0xb2, 0x2f, 0x0b, 0x01, 0x5d, 0xb0, // ....]....]./..]. + 0x0b, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, // .......+X!...Y.. + 0x10, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, // ......+X!...Y... + 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, // .....+X!...Y01.! + 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x04, 0x14, 0xfd, 0x65, 0x03, 0x01, // .!.!.!.!.!...e.. + 0xfc, 0x3a, 0x03, 0xbb, 0xfd, 0x0a, 0x02, 0x9b, 0x02, 0xa3, 0xfd, 0xf7, 0x9a, 0x05, 0xb0, 0x9b, // .:.............. + 0xfe, 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x77, 0x05, 0xb0, 0x00, 0x09, // .).........w.... + 0x00, 0x88, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // ...../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb2, 0x7f, 0x08, 0x01, 0x5d, 0xb2, 0xcf, 0x08, 0x01, 0x5d, 0xb2, 0x1f, 0x08, 0x01, 0x71, 0xb2, // ....]....]....q. + 0x7f, 0x08, 0x01, 0x71, 0xb4, 0xbf, 0x08, 0xcf, 0x08, 0x02, 0x71, 0xb2, 0x3f, 0x08, 0x01, 0x72, // ...q......q.?..r + 0xb2, 0x6f, 0x08, 0x01, 0x72, 0xb2, 0xef, 0x08, 0x01, 0x71, 0xb2, 0x9f, 0x08, 0x01, 0x71, 0xb2, // .o..r....q....q. + 0x4f, 0x08, 0x01, 0x71, 0xb4, 0xef, 0x08, 0xff, 0x08, 0x02, 0x5d, 0xb2, 0xaf, 0x08, 0x01, 0x5d, // O..q......]....] + 0xb2, 0x5f, 0x08, 0x01, 0x5d, 0xb2, 0x2f, 0x08, 0x01, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x00, 0x02, // ._..]./..]...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x06, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, // .+X!...Y01.!.#.! + 0x15, 0x21, 0x11, 0x21, 0x04, 0x11, 0xfd, 0x68, 0xc5, 0x03, 0xc3, 0xfd, 0x02, 0x02, 0x98, 0x02, // .!.!...h........ + 0x84, 0xfd, 0x7c, 0x05, 0xb0, 0x9b, 0xfe, 0x0a, 0x00, 0x01, 0x00, 0x78, 0xff, 0xeb, 0x04, 0xd3, // ..|........x.... + 0x05, 0xc5, 0x00, 0x20, 0x00, 0x57, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // ... .W...EX../.. + 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x0a, 0x10, 0xb0, 0x0f, 0xd0, 0xb0, 0x0a, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, // Y..............+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x1f, 0x03, 0x0a, 0x11, 0x12, 0x39, 0xb0, 0x1f, 0x2f, 0xb1, // !...Y......9../. + 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x06, 0x04, // ....+X!...Y01%.. + 0x23, 0x20, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x32, 0x04, 0x17, 0x07, 0x23, 0x26, 0x26, 0x23, // # .....32...#&&# + 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x21, 0x35, 0x21, 0x04, 0xd3, // ".....3267.!5!.. + 0x34, 0xfe, 0xff, 0xcc, 0xfe, 0xfb, 0xfe, 0xab, 0x01, 0x3e, 0xfb, 0xfa, 0x01, 0x1e, 0x03, 0x02, // 4........>...... + 0xbc, 0x09, 0xaf, 0xa5, 0xa7, 0xcc, 0xe4, 0xb0, 0x7c, 0x9e, 0x22, 0xfe, 0xc1, 0x02, 0x04, 0xc1, // ........|."..... + 0x50, 0x86, 0x01, 0x4e, 0x01, 0x09, 0x01, 0x2c, 0x01, 0x09, 0x01, 0x4e, 0xf6, 0xc2, 0x06, 0x7f, // P..N...,...N.... + 0xa4, 0xfa, 0xc0, 0xfe, 0xd2, 0xc2, 0xfb, 0x42, 0x2a, 0x01, 0x4b, 0x9b, 0x00, 0x01, 0x00, 0xb4, // .......B*.K..... + 0x00, 0x00, 0x05, 0x01, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0xa4, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, // ............./.. + 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0x7f, 0x08, 0x01, 0x5d, 0xb2, 0xcf, 0x08, 0x01, 0x5d, 0xb2, 0x1f, 0x08, 0x01, // >Y....]....].... + 0x71, 0xb2, 0x7f, 0x08, 0x01, 0x71, 0xb4, 0xbf, 0x08, 0xcf, 0x08, 0x02, 0x71, 0xb2, 0x1f, 0x08, // q....q......q... + 0x01, 0x72, 0xb2, 0x6f, 0x08, 0x01, 0x72, 0xb2, 0xbf, 0x08, 0x01, 0x72, 0xb4, 0x8f, 0x08, 0x9f, // .r.o..r....r.... + 0x08, 0x02, 0x72, 0xb2, 0x3f, 0x08, 0x01, 0x72, 0xb2, 0xef, 0x08, 0x01, 0x71, 0xb2, 0x9f, 0x08, // ..r.?..r....q... + 0x01, 0x71, 0xb2, 0x4f, 0x08, 0x01, 0x71, 0xb4, 0xef, 0x08, 0xff, 0x08, 0x02, 0x5d, 0xb2, 0xaf, // .q.O..q......].. + 0x08, 0x01, 0x5d, 0xb2, 0x5f, 0x08, 0x01, 0x5d, 0xb2, 0x2f, 0x08, 0x01, 0x5d, 0xb0, 0x08, 0x10, // ..]._..]./..]... + 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, // .....+X!...Y01!# + 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x05, 0x01, 0xc5, 0xfd, 0x3d, 0xc5, // .!.#.3.!.3....=. + 0xc5, 0x02, 0xc3, 0xc5, 0x02, 0x83, 0xfd, 0x7d, 0x05, 0xb0, 0xfd, 0x6e, 0x02, 0x92, 0x00, 0x00, // .......}...n.... + 0x00, 0x01, 0x00, 0xbe, 0x00, 0x00, 0x01, 0x84, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x1d, 0x00, 0xb0, // ................ + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x33, 0x01, // ../....>Y01!#.3. + 0x84, 0xc6, 0xc6, 0x05, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3d, 0xff, 0xeb, 0x03, 0xc3, // ...........=.... + 0x05, 0xb0, 0x00, 0x10, 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // .....)...EX../.. + 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // Y.....+X!...Y01. + 0x33, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, // 3...#"&773..3265 + 0x02, 0xfe, 0xc5, 0xf7, 0xc5, 0xd2, 0xf8, 0x05, 0x02, 0xbd, 0x89, 0x7d, 0x6d, 0x8a, 0x05, 0xb0, // ...........}m... + 0xfb, 0xe3, 0xc3, 0xe5, 0xd5, 0xcb, 0x06, 0x87, 0x85, 0x93, 0x7b, 0x00, 0x00, 0x01, 0x00, 0xb4, // ..........{..... + 0x00, 0x00, 0x05, 0x20, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x82, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, // ... ........./.. + 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0xcf, 0x06, 0x01, 0x5d, 0xb2, 0x1f, 0x06, 0x01, 0x71, 0xb2, 0xbf, 0x06, 0x01, // >Y....]....q.... + 0x71, 0xb2, 0x3f, 0x06, 0x01, 0x72, 0xb2, 0x8f, 0x06, 0x01, 0x72, 0xb2, 0xef, 0x06, 0x01, 0x71, // q.?..r....r....q + 0xb2, 0x9f, 0x06, 0x01, 0x71, 0xb2, 0xef, 0x06, 0x01, 0x5d, 0xb2, 0x7f, 0x06, 0x01, 0x5d, 0xb2, // ....q....]....]. + 0x2f, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /..]........+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x0b, 0x06, 0x00, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, // ..Y......901.#.# + 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x17, 0x01, 0x01, 0x07, 0x23, 0x02, 0x23, 0xaa, 0xc5, 0xc5, // .3.3.3....#.#... + 0x98, 0x02, 0x09, 0xda, 0x03, 0xfd, 0xcb, 0x02, 0x5e, 0x03, 0xeb, 0x02, 0x91, 0xfd, 0x6f, 0x05, // ........^.....o. + 0xb0, 0xfd, 0x7c, 0x02, 0x84, 0x05, 0xfd, 0x45, 0xfd, 0x15, 0x05, 0x00, 0x00, 0x01, 0x00, 0xb4, // ..|....E........ + 0x00, 0x00, 0x04, 0x2a, 0x05, 0xb0, 0x00, 0x05, 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...*.....)...EX. + 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0x30, 0x31, 0x25, 0x21, 0x15, 0x21, 0x11, 0x33, 0x01, 0x79, 0x02, 0xb1, 0xfc, 0x8a, 0xc5, // Y01%!.!.3.y..... + 0x9a, 0x9a, 0x05, 0xb0, 0x00, 0x01, 0x00, 0xb4, 0x00, 0x00, 0x06, 0x52, 0x05, 0xb0, 0x00, 0x11, // ...........R.... + 0x00, 0x80, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb0, 0x01, 0xd0, 0xb4, 0x34, 0x01, 0x44, 0x01, 0x02, // ..>Y.......4.D.. + 0x5d, 0xb6, 0x73, 0x01, 0x83, 0x01, 0x93, 0x01, 0x03, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x0c, 0xd0, // ].s......]...... + 0x40, 0x09, 0x6f, 0x0c, 0x7f, 0x0c, 0x8f, 0x0c, 0x9f, 0x0c, 0x04, 0x5d, 0xb2, 0x4f, 0x0c, 0x01, // @.o........].O.. + 0x5d, 0xb2, 0x5c, 0x0c, 0x01, 0x5d, 0xb4, 0x2b, 0x0c, 0x3b, 0x0c, 0x02, 0x5d, 0xb0, 0x08, 0xd0, // ]....].+.;..]... + 0x30, 0x31, 0x01, 0x01, 0x33, 0x01, 0x33, 0x11, 0x23, 0x11, 0x13, 0x27, 0x01, 0x23, 0x01, 0x07, // 01..3.3.#..'.#.. + 0x13, 0x11, 0x23, 0x11, 0x01, 0xb0, 0x01, 0xd0, 0x06, 0x01, 0xd0, 0xfc, 0xc5, 0x14, 0x05, 0xfe, // ..#............. + 0x28, 0x83, 0xfe, 0x2a, 0x05, 0x13, 0xc5, 0x05, 0xb0, 0xfb, 0x61, 0x04, 0x9f, 0xfa, 0x50, 0x02, // (..*......a...P. + 0x40, 0x02, 0x50, 0x01, 0xfb, 0x6f, 0x04, 0x8e, 0x01, 0xfd, 0xb3, 0xfd, 0xc0, 0x05, 0xb0, 0x00, // @.P..o.......... + 0x00, 0x01, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x78, 0x00, 0xb0, // .............x.. + 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x06, 0x10, 0xb0, 0x02, 0xd0, 0xb2, 0x4b, 0x02, 0x01, 0x5d, 0xb2, 0x5c, // .>Y.......K..].. + 0x02, 0x01, 0x5d, 0x40, 0x09, 0x6b, 0x02, 0x7b, 0x02, 0x8b, 0x02, 0x9b, 0x02, 0x04, 0x5d, 0xb2, // ..]@.k.{......]. + 0x39, 0x02, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x08, 0xd0, 0xb2, 0x36, 0x08, 0x01, 0x5d, 0x40, // 9..].......6..]@ + 0x0d, 0x44, 0x08, 0x54, 0x08, 0x64, 0x08, 0x74, 0x08, 0x84, 0x08, 0x94, 0x08, 0x06, 0x5d, 0xb2, // .D.T.d.t......]. + 0x54, 0x09, 0x01, 0x5d, 0x30, 0x31, 0x21, 0x23, 0x01, 0x07, 0x11, 0x23, 0x11, 0x33, 0x01, 0x37, // T..]01!#...#.3.7 + 0x11, 0x33, 0x05, 0x01, 0xc5, 0xfd, 0x43, 0x06, 0xc5, 0xc5, 0x02, 0xbd, 0x06, 0xc5, 0x04, 0x66, // .3....C........f + 0x02, 0xfb, 0x9c, 0x05, 0xb0, 0xfb, 0x9c, 0x02, 0x04, 0x62, 0x00, 0x00, 0x00, 0x02, 0x00, 0x71, // .........b.....q + 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, // ...........;...E + 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x11, 0x03, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x18, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x10, 0x00, 0x21, 0x22, 0x00, 0x11, 0x11, 0x10, // !...Y01...!".... + 0x00, 0x33, 0x20, 0x00, 0x11, 0x27, 0x34, 0x02, 0x23, 0x22, 0x02, 0x15, 0x11, 0x14, 0x12, 0x33, // .3 ..'4.#".....3 + 0x32, 0x36, 0x35, 0x05, 0x02, 0xfe, 0xb5, 0xfe, 0xf8, 0xff, 0xfe, 0xc1, 0x01, 0x3f, 0xff, 0x01, // 265..........?.. + 0x08, 0x01, 0x4b, 0xc5, 0xd8, 0xb6, 0xac, 0xcd, 0xcd, 0xac, 0xb7, 0xd7, 0x02, 0x56, 0xfe, 0xf5, // ..K..........V.. + 0xfe, 0xa0, 0x01, 0x60, 0x01, 0x0b, 0x01, 0x03, 0x01, 0x0a, 0x01, 0x62, 0xfe, 0x9f, 0xfe, 0xf5, // ...`.......b.... + 0x02, 0xc8, 0x01, 0x00, 0xff, 0x00, 0xc8, 0xfe, 0xfb, 0xca, 0xff, 0x00, 0xff, 0xcb, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xcc, 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x13, 0x00, 0x42, // ...............B + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x01, 0x03, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x25, 0x21, 0x32, // 01..#.!2....#%!2 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x01, 0x79, 0xc5, 0x02, 0x2d, 0xe9, 0x01, 0x02, 0xfe, 0xfe, // 654&#!.y..-..... + 0xe9, 0xfe, 0x98, 0x01, 0x68, 0x94, 0x92, 0x93, 0x93, 0xfe, 0x98, 0x02, 0x48, 0xfd, 0xb8, 0x05, // ....h.......H... + 0xb0, 0xf0, 0xc4, 0xc7, 0xed, 0x9a, 0x9f, 0x79, 0x79, 0xa2, 0x00, 0x00, 0x00, 0x02, 0x00, 0x71, // .......yy......q + 0xff, 0x18, 0x05, 0x3b, 0x05, 0xc5, 0x00, 0x13, 0x00, 0x21, 0x00, 0x3f, 0x00, 0xb0, 0x00, 0x45, // ...;.....!.?...E + 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb1, 0x1e, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /....>Y.....+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x03, 0x09, 0x1e, 0x11, 0x12, 0x39, 0xb0, 0x10, 0x10, 0xb1, 0x17, 0x03, // ..Y......9...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x07, 0x17, // ..+X!...Y01..... + 0x07, 0x01, 0x06, 0x06, 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x20, 0x00, 0x11, 0x27, // ....#".....3 ..' + 0x34, 0x02, 0x23, 0x22, 0x02, 0x15, 0x11, 0x14, 0x12, 0x33, 0x32, 0x36, 0x35, 0x05, 0x02, 0x64, // 4.#".....3265..d + 0x5a, 0xf7, 0x87, 0xfe, 0xec, 0x38, 0x79, 0x40, 0xff, 0xfe, 0xc1, 0x01, 0x3f, 0xff, 0x01, 0x08, // Z....8y@....?... + 0x01, 0x4b, 0xc5, 0xd8, 0xb6, 0xac, 0xcd, 0xcd, 0xac, 0xb7, 0xd7, 0x02, 0x56, 0x8e, 0xf2, 0x54, // .K..........V..T + 0xe9, 0x81, 0x01, 0x01, 0x17, 0x17, 0x01, 0x60, 0x01, 0x0b, 0x01, 0x03, 0x01, 0x0a, 0x01, 0x62, // .......`.......b + 0xfe, 0x9f, 0xfe, 0xf5, 0x02, 0xc8, 0x01, 0x00, 0xff, 0x00, 0xc8, 0xfe, 0xfb, 0xca, 0xff, 0x00, // ................ + 0xff, 0xcb, 0x00, 0x00, 0x00, 0x02, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xed, 0x05, 0xaf, 0x00, 0x1a, // ................ + 0x00, 0x23, 0x00, 0x56, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, // .#.V...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x01, 0x03, // .EX../....>Y.... + 0x11, 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..9../.....+X!.. + 0xf4, 0x59, 0xb2, 0x0a, 0x00, 0x1b, 0x11, 0x12, 0x39, 0xb0, 0x03, 0x10, 0xb1, 0x22, 0x02, 0xb0, // .Y......9....".. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, // .+X!...Y01..#.!2 + 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x15, 0x14, 0x16, 0x17, 0x15, 0x23, 0x26, 0x26, // .............#&& + 0x35, 0x35, 0x34, 0x26, 0x23, 0x25, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x01, 0x79, // 554&#%!2654&#!.y + 0xc5, 0x02, 0x0f, 0xef, 0xfc, 0x75, 0x70, 0x78, 0x69, 0x1e, 0x25, 0xcb, 0x27, 0x16, 0x8a, 0x74, // .....upxi.%.'..t + 0xfe, 0x92, 0x01, 0x36, 0xa7, 0x93, 0x8f, 0x97, 0xfe, 0xb6, 0x02, 0x77, 0xfd, 0x89, 0x05, 0xaf, // ...6.......w.... + 0xd4, 0xca, 0x70, 0xa6, 0x31, 0x27, 0xaf, 0x81, 0x89, 0x44, 0x6c, 0x22, 0x18, 0x22, 0x84, 0x46, // ..p.1'...Dl".".F + 0x85, 0x76, 0x90, 0x9b, 0x7f, 0x82, 0x7b, 0x87, 0x00, 0x01, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x92, // .v....{....a.... + 0x05, 0xc5, 0x00, 0x27, 0x00, 0x51, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, // ...'.Q...EX../.. + 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x17, 0x1d, 0x09, 0x11, 0x12, 0x39, 0xb0, 0x17, 0x10, 0xb1, 0x03, 0x03, 0xb0, 0x0a, // Y......9........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, 0x10, 0xb1, 0x25, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y....%...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x34, 0x26, 0x27, 0x26, 0x24, 0x35, 0x34, 0x24, // !...Y01.4&'&$54$ + 0x33, 0x32, 0x00, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x16, // 32...#4&#"...... + 0x16, 0x15, 0x14, 0x04, 0x23, 0x22, 0x24, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, // ....#"$773..326. + 0xcd, 0x96, 0xbf, 0xe7, 0xfe, 0xfd, 0x01, 0x17, 0xde, 0xef, 0x01, 0x1b, 0x05, 0x02, 0xbc, 0xa9, // ................ + 0x9e, 0x93, 0x9d, 0xaa, 0xbf, 0xe6, 0xf0, 0xfe, 0xe0, 0xe8, 0xda, 0xfe, 0xb1, 0x05, 0x02, 0xbc, // ................ + 0xce, 0x98, 0x95, 0xae, 0x01, 0x6f, 0x64, 0x87, 0x2e, 0x37, 0xd6, 0xa2, 0xaa, 0xe4, 0xfe, 0xfa, // .....od..7...... + 0xad, 0x06, 0x80, 0x9e, 0x85, 0x6b, 0x5f, 0x7f, 0x30, 0x39, 0xde, 0xa4, 0xb0, 0xd6, 0xec, 0xc6, // .....k_.09...... + 0x06, 0x8c, 0x92, 0x7e, 0x00, 0x01, 0x00, 0x22, 0x00, 0x00, 0x04, 0x8e, 0x05, 0xb0, 0x00, 0x07, // ...~..."........ + 0x00, 0x2f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, // ./...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x06, 0x10, // ..EX../....>Y... + 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0xd0, 0x30, // .....+X!...Y...0 + 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x04, 0x8e, 0xfe, 0x2c, 0xc5, 0xfe, 0x2d, // 1.!.#.!5!...,..- + 0x04, 0x6c, 0x05, 0x15, 0xfa, 0xeb, 0x05, 0x15, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x93, // .l.............. + 0xff, 0xeb, 0x04, 0xdc, 0x05, 0xb0, 0x00, 0x11, 0x00, 0x36, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........6...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // >Y.....+X!...Y01 + 0x01, 0x11, 0x14, 0x04, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, // ....#"$5.3...326 + 0x35, 0x11, 0x04, 0xdc, 0xfe, 0xcb, 0xf9, 0xf0, 0xfe, 0xd5, 0xc5, 0xbc, 0x9a, 0xa2, 0xc7, 0x05, // 5............... + 0xb0, 0xfc, 0x25, 0xee, 0xfc, 0xfd, 0xed, 0x03, 0xdb, 0xfc, 0x25, 0xa5, 0xab, 0xab, 0xa5, 0x03, // ..%.......%..... + 0xdb, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x16, 0x00, 0x00, 0x04, 0xf9, 0x05, 0xb0, 0x00, 0x09, // ................ + 0x00, 0x44, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, // .D...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0xd0, 0xb2, 0x24, 0x01, // X../....>Y....$. + 0x01, 0x5d, 0x40, 0x0f, 0x33, 0x01, 0x43, 0x01, 0x53, 0x01, 0x63, 0x01, 0x73, 0x01, 0x83, 0x01, // .]@.3.C.S.c.s... + 0x93, 0x01, 0x07, 0x5d, 0x30, 0x31, 0x01, 0x17, 0x33, 0x37, 0x01, 0x33, 0x01, 0x23, 0x01, 0x33, // ...]01..37.3.#.3 + 0x02, 0x64, 0x21, 0x06, 0x21, 0x01, 0x78, 0xd5, 0xfd, 0xe3, 0xa9, 0xfd, 0xe3, 0xd6, 0x01, 0x6a, // .d!.!.x........j + 0x73, 0x73, 0x04, 0x46, 0xfa, 0x50, 0x05, 0xb0, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x06, 0xcf, // ss.F.P.....6.... + 0x05, 0xb0, 0x00, 0x15, 0x00, 0x84, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, // .........EX../.. + 0x04, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, 0x0c, 0x10, 0xb0, 0x07, 0xd0, 0xb4, 0x24, // ./....>Y.......$ + 0x07, 0x34, 0x07, 0x02, 0x5d, 0x40, 0x0d, 0x40, 0x07, 0x50, 0x07, 0x60, 0x07, 0x70, 0x07, 0x80, // .4..]@.@.P.`.p.. + 0x07, 0x90, 0x07, 0x06, 0x5d, 0xb0, 0x01, 0xd0, 0xb0, 0x04, 0x10, 0xb0, 0x10, 0xd0, 0xb2, 0x9f, // ....]........... + 0x10, 0x01, 0x5d, 0x40, 0x09, 0x5c, 0x10, 0x6c, 0x10, 0x7c, 0x10, 0x8c, 0x10, 0x04, 0x5d, 0xb6, // ..]@...l.|....]. + 0x2b, 0x10, 0x3b, 0x10, 0x4b, 0x10, 0x03, 0x5d, 0x30, 0x31, 0x01, 0x17, 0x17, 0x37, 0x01, 0x33, // +.;.K..]01...7.3 + 0x01, 0x17, 0x33, 0x37, 0x13, 0x33, 0x01, 0x23, 0x01, 0x27, 0x23, 0x07, 0x01, 0x23, 0x01, 0x33, // ..37.3.#.'#..#.3 + 0x01, 0xd8, 0x1b, 0x06, 0x27, 0x01, 0x0b, 0xae, 0x01, 0x0d, 0x28, 0x06, 0x1d, 0xd9, 0xc5, 0xfe, // ....'.....(..... + 0xa1, 0xb0, 0xfe, 0xe1, 0x1a, 0x06, 0x19, 0xfe, 0xdc, 0xb0, 0xfe, 0xa2, 0xc4, 0x01, 0xf8, 0xb6, // ................ + 0x01, 0xb7, 0x03, 0xb8, 0xfc, 0x48, 0xbb, 0xbb, 0x03, 0xb8, 0xfa, 0x50, 0x03, 0xf2, 0x83, 0x83, // .....H.....P.... + 0xfc, 0x0e, 0x05, 0xb0, 0x00, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0xd6, 0x05, 0xb0, 0x00, 0x0b, // .......B........ + 0x00, 0x61, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, // .a...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x07, 0x0a, 0x11, 0x12, 0x39, 0xb2, 0x85, // /....>Y......9.. + 0x00, 0x01, 0x5d, 0xb2, 0x93, 0x00, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x06, 0xd0, 0xb4, 0x8d, // ..]....]........ + 0x06, 0x9d, 0x06, 0x02, 0x5d, 0x40, 0x09, 0x4b, 0x06, 0x5b, 0x06, 0x6b, 0x06, 0x7b, 0x06, 0x04, // ....]@.K.[.k.{.. + 0x5d, 0x30, 0x31, 0x01, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, 0x01, 0x23, 0x01, 0x01, 0x33, 0x02, // ]01..3..#..#..3. + 0x8a, 0x01, 0x54, 0xee, 0xfe, 0x32, 0x01, 0xd8, 0xeb, 0xfe, 0xa3, 0xfe, 0xa2, 0xee, 0x01, 0xd8, // ..T..2.......... + 0xfe, 0x32, 0xec, 0x03, 0x78, 0x02, 0x38, 0xfd, 0x2e, 0xfd, 0x22, 0x02, 0x42, 0xfd, 0xbe, 0x02, // .2..x.8...".B... + 0xde, 0x02, 0xd2, 0x00, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, 0x05, 0xb0, 0x00, 0x08, // ................ + 0x00, 0x54, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, // .T...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x04, 0x07, 0x11, 0x12, // X../....>Y...... + 0x39, 0xb2, 0x75, 0x00, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x03, 0xd0, 0xb6, 0x7b, 0x03, 0x8b, // 9.u..].......{.. + 0x03, 0x9b, 0x03, 0x03, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x06, 0xd0, 0xb6, 0x7b, 0x06, 0x8b, 0x06, // ....].......{... + 0x9b, 0x06, 0x03, 0x5d, 0x30, 0x31, 0x01, 0x01, 0x33, 0x01, 0x11, 0x23, 0x11, 0x01, 0x33, 0x02, // ...]01..3..#..3. + 0x71, 0x01, 0x7c, 0xe1, 0xfe, 0x01, 0xc4, 0xfe, 0x09, 0xe1, 0x02, 0xcc, 0x02, 0xe4, 0xfc, 0x50, // q.|............P + 0xfe, 0x00, 0x02, 0x0d, 0x03, 0xa3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x61, 0x00, 0x00, 0x04, 0x6d, // ...........a...m + 0x05, 0xb0, 0x00, 0x09, 0x00, 0x3e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, // .....>...EX../.. + 0x07, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0xd0, // Y.....+X!...Y... + 0xb0, 0x07, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x09, 0xd0, 0x30, 0x31, 0x25, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, 0x21, 0x15, 0x01, 0x3f, // ..01%!.!5.!5!..? + 0x03, 0x2e, 0xfb, 0xf4, 0x03, 0x0a, 0xfd, 0x01, 0x03, 0xe0, 0x9a, 0x9a, 0x92, 0x04, 0x83, 0x9b, // ................ + 0x8d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, 0xfe, 0xc8, 0x02, 0x10, 0x06, 0x80, 0x00, 0x07, // ................ + 0x00, 0x27, 0x00, 0xb0, 0x07, 0x2f, 0xb0, 0x04, 0x2f, 0xb0, 0x07, 0x10, 0xb1, 0x00, 0x02, 0xb0, // .'.../../....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x33, 0x15, 0x21, 0x11, // +X!...Y01.#.3.!. + 0x21, 0x02, 0x10, 0xbc, 0xbc, 0xfe, 0x7f, 0x01, 0x81, 0x05, 0xe5, 0xf9, 0x7e, 0x9b, 0x07, 0xb8, // !...........~... + 0x00, 0x01, 0x00, 0x27, 0xff, 0x83, 0x03, 0x41, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x13, 0x00, 0xb0, // ...'...A........ + 0x02, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0x30, // ./..EX../....>Y0 + 0x31, 0x13, 0x33, 0x01, 0x23, 0x27, 0xba, 0x02, 0x60, 0xba, 0x05, 0xb0, 0xf9, 0xd3, 0x00, 0x00, // 1.3.#'..`....... + 0x00, 0x01, 0x00, 0x0b, 0xfe, 0xc8, 0x01, 0x8d, 0x06, 0x80, 0x00, 0x07, 0x00, 0x24, 0x00, 0xb0, // .............$.. + 0x00, 0x2f, 0xb0, 0x03, 0x2f, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ./../.....+X!... + 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x13, 0x21, 0x11, 0x21, 0x35, 0x33, 0x11, 0x23, 0x0b, 0x01, 0x82, 0xfe, 0x7e, 0xbd, // 01.!.!53.#....~. + 0xbd, 0x06, 0x80, 0xf8, 0x48, 0x9b, 0x06, 0x82, 0x00, 0x01, 0x00, 0x3d, 0x02, 0xd9, 0x03, 0x18, // ....H......=.... + 0x05, 0xb0, 0x00, 0x09, 0x00, 0x13, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // .........EX../.. + 0x02, 0x0c, 0x3e, 0x59, 0xb0, 0x07, 0xd0, 0x30, 0x31, 0x13, 0x23, 0x01, 0x33, 0x01, 0x23, 0x03, // ..>Y...01.#.3.#. + 0x27, 0x23, 0x07, 0xf4, 0xb7, 0x01, 0x2b, 0x86, 0x01, 0x2a, 0xb5, 0xa6, 0x10, 0x06, 0x10, 0x02, // '#....+..*...... + 0xd9, 0x02, 0xd7, 0xfd, 0x29, 0x01, 0xa3, 0x46, 0x46, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, // ....)..FF....... + 0xff, 0x66, 0x03, 0x9f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .f...........EX. + 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ./....>Y.....+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x21, 0x35, 0x21, 0x03, 0x9f, 0xfc, 0x65, 0x03, 0x9b, // ...Y01.!5!...e.. + 0x9a, 0x9a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x52, 0x04, 0xbb, 0x01, 0xea, 0x05, 0xc5, 0x00, 0x04, // .......R........ + 0x00, 0x4b, 0x00, 0xb0, 0x00, 0x2f, 0xb2, 0x5f, 0x00, 0x01, 0x5d, 0xb2, 0xaf, 0x00, 0x01, 0x5d, // .K.../._..]....] + 0xb2, 0x1f, 0x00, 0x01, 0x71, 0xb2, 0x6f, 0x00, 0x01, 0x71, 0xb2, 0x4f, 0x00, 0x01, 0x71, 0xb2, // ....q.o..q.O..q. + 0xff, 0x00, 0x01, 0x5d, 0xb2, 0x7f, 0x00, 0x01, 0x5d, 0xb2, 0x3f, 0x00, 0x01, 0x5d, 0xb2, 0x0f, // ...]....].?..].. + 0x00, 0x01, 0x5d, 0xb0, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0xaf, 0x04, // ..]....+X...Y... + 0x01, 0x5d, 0xb6, 0x0f, 0x04, 0x1f, 0x04, 0x2f, 0x04, 0x03, 0x5d, 0x30, 0x31, 0x01, 0x23, 0x03, // .]...../..]01.#. + 0x37, 0x33, 0x01, 0xea, 0x9e, 0xfa, 0x03, 0xe6, 0x04, 0xbb, 0x01, 0x04, 0x06, 0x00, 0x00, 0x00, // 73.............. + 0x00, 0x02, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x04, 0x4e, 0x00, 0x20, 0x00, 0x2b, 0x00, 0x6f, // ...j.....N. .+.o + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, 0xb1, 0x19, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0x0c, 0x06, 0x19, 0x11, 0x12, 0x39, 0xb0, // ./....>Y......9. + 0x0c, 0x2f, 0xb4, 0xbf, 0x0c, 0xcf, 0x0c, 0x02, 0x5d, 0xb0, 0x19, 0x10, 0xb1, 0x11, 0x02, 0xb0, // ./......]....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x19, 0x0c, 0x11, 0x12, 0x39, 0xb0, // .+X!...Y......9. + 0x06, 0x10, 0xb1, 0x21, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, // ...!...+X!...Y.. + 0x10, 0xb1, 0x26, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, // ..&...+X!...Y01! + 0x26, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x34, 0x26, // &&'..#"&5463354& + 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x16, 0x17, // #"..#'&632...... + 0x25, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x03, 0x28, 0x0a, 0x0b, 0x01, // %2675#".....(... + 0x37, 0xb1, 0x66, 0xa9, 0xb1, 0xfb, 0xd7, 0xd6, 0x74, 0x6a, 0x5f, 0x77, 0xbc, 0x02, 0x06, 0xeb, // 7.f.....tj_w.... + 0xba, 0xb8, 0xe0, 0x0c, 0x10, 0xfd, 0xee, 0x6b, 0xac, 0x1a, 0xdd, 0x77, 0x8f, 0x5a, 0x31, 0x4b, // .......k...w.Z1K + 0x26, 0x4e, 0x69, 0xad, 0x98, 0x9b, 0xaf, 0x6b, 0x5f, 0x6f, 0x61, 0x44, 0x06, 0x76, 0xc4, 0xbb, // &Ni....k_oaD.v.. + 0xb0, 0xfd, 0xf7, 0x3a, 0x6c, 0x34, 0x90, 0x6e, 0x47, 0xb0, 0x78, 0x51, 0x48, 0x54, 0x00, 0x00, // ...:l4.nG.xQHT.. + 0x00, 0x02, 0x00, 0x8f, 0xff, 0xeb, 0x04, 0x2b, 0x06, 0x18, 0x00, 0x11, 0x00, 0x1f, 0x00, 0x50, // .......+.......P + 0x00, 0xb0, 0x0a, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb2, 0x2f, 0x0a, 0x01, 0x5d, // EX../....>Y./..] + 0xb0, 0x0e, 0x10, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x03, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x01, 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x07, 0x23, 0x11, 0x33, 0x11, 0x36, 0x36, 0x33, 0x32, // ...#"&'.#.3.6632 + 0x12, 0x11, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, // ..#4&#".....3265 + 0x04, 0x2b, 0xe1, 0xc5, 0x6b, 0x9e, 0x34, 0x18, 0xa1, 0xc5, 0x33, 0x97, 0x65, 0xc8, 0xe0, 0xc5, // .+..k.4...3.e... + 0x89, 0x8c, 0x5b, 0x7d, 0x25, 0x26, 0x7b, 0x5e, 0x8b, 0x88, 0x01, 0xf4, 0xea, 0xfe, 0xe1, 0x53, // ..[}%&{^.......S + 0x51, 0x8f, 0x06, 0x18, 0xfd, 0xa2, 0x48, 0x4c, 0xfe, 0xc0, 0xfe, 0xfb, 0xba, 0xeb, 0x59, 0x4b, // Q.....HL......YK + 0xfe, 0x2b, 0x50, 0x5a, 0xc6, 0xa3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x61, 0xff, 0xeb, 0x03, 0xf6, // .+PZ.......a.... + 0x04, 0x4e, 0x00, 0x1d, 0x00, 0x38, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // .N...8...EX../.. + 0x0f, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, // Y.....+X!...Y... + 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x32, // .....+X!...Y01%2 + 0x36, 0x35, 0x33, 0x17, 0x16, 0x04, 0x23, 0x22, 0x02, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, // 653...#".554.32. + 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x02, 0x47, 0x62, 0x95, // ..#4&#"......Gb. + 0xb1, 0x02, 0x05, 0xfe, 0xfd, 0xac, 0xec, 0xfa, 0xfb, 0xeb, 0xbe, 0xf1, 0x04, 0x02, 0xb2, 0x8c, // ................ + 0x6b, 0x9b, 0x85, 0x84, 0x85, 0x79, 0x58, 0x06, 0x8c, 0xd9, 0x01, 0x34, 0xe9, 0x2a, 0xe7, 0x01, // k....yX....4.*.. + 0x35, 0xe0, 0xa3, 0x06, 0x63, 0x8b, 0xdf, 0xa2, 0x2a, 0xa6, 0xdd, 0x00, 0x00, 0x02, 0x00, 0x62, // 5...c...*......b + 0xff, 0xeb, 0x03, 0xf5, 0x06, 0x18, 0x00, 0x11, 0x00, 0x1f, 0x00, 0x50, 0x00, 0xb0, 0x07, 0x2f, // ...........P.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb2, 0x2f, 0x07, 0x01, 0x5d, 0xb0, 0x0e, 0x10, 0xb1, // /....>Y./..].... + 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x1c, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x10, 0x12, 0x33, // ...+X!...Y01...3 + 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x23, 0x27, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x33, 0x14, // 2...3.#'..#".53. + 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x62, 0xdf, 0xc9, 0x5f, // .3267.&&#"..b.._ + 0x93, 0x34, 0xc5, 0xa1, 0x17, 0x35, 0x9a, 0x66, 0xc6, 0xe0, 0xc5, 0x86, 0x8d, 0x58, 0x78, 0x26, // .4...5.f.....Xx& + 0x26, 0x79, 0x55, 0x8e, 0x87, 0x02, 0x09, 0x01, 0x05, 0x01, 0x40, 0x46, 0x43, 0x02, 0x53, 0xf9, // &yU.......@FC.S. + 0xe8, 0x85, 0x4c, 0x4e, 0x01, 0x1f, 0xea, 0xa4, 0xc5, 0x50, 0x48, 0x01, 0xf9, 0x43, 0x4f, 0xea, // ..LN.....PH..CO. + 0xbb, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x04, 0x4e, 0x00, 0x16, // .......c.....N.. + 0x00, 0x1f, 0x00, 0x60, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, // ...`...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x0b, 0x00, 0x07, 0x11, 0x12, 0x39, 0xb0, 0x0b, 0x2f, 0xb4, 0xd0, 0x0b, 0xe0, 0x0b, 0x02, 0x5d, // .....9../......] + 0xb2, 0xa0, 0x0b, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ....]........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x05, 0x22, 0x00, 0x35, 0x35, 0x34, 0x00, 0x33, 0x32, 0x12, 0x15, 0x15, // .Y01.".554.32... + 0x21, 0x07, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x03, 0x22, 0x06, 0x07, 0x17, // !...3267...."... + 0x21, 0x35, 0x34, 0x26, 0x02, 0x50, 0xe2, 0xfe, 0xf5, 0x01, 0x13, 0xbc, 0xdb, 0xe0, 0xfd, 0x42, // !54&.P.........B + 0x03, 0x03, 0x98, 0x89, 0x64, 0x97, 0x37, 0x4d, 0x3a, 0xbe, 0xa5, 0x63, 0x8c, 0x10, 0x02, 0x01, // ....d.7M:..c.... + 0xf3, 0x7c, 0x15, 0x01, 0x2d, 0xf0, 0x2c, 0xe7, 0x01, 0x33, 0xfe, 0xf8, 0xdc, 0x7b, 0x05, 0x9c, // .|..-.,..3...{.. + 0xc9, 0x39, 0x32, 0x80, 0x39, 0x4c, 0x03, 0xc8, 0xa7, 0x7e, 0x05, 0x1a, 0x74, 0x9c, 0x00, 0x00, // .92.9L...~..t... + 0x00, 0x01, 0x00, 0x38, 0x00, 0x00, 0x02, 0xc9, 0x06, 0x2d, 0x00, 0x17, 0x00, 0x59, 0x00, 0xb0, // ...8.....-...Y.. + 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x01, 0x02, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x2f, 0x08, 0x01, 0x5d, 0xb0, 0x08, 0x10, // .+X!...Y./..]... + 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb0, // .....+X!...Y.... + 0x15, 0xd0, 0xb0, 0x16, 0xd0, 0x30, 0x31, 0x33, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, // .....013.#535463 + 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x33, 0x15, 0x23, 0x11, 0xe1, // 2...&&#"...3.#.. + 0xa9, 0xa9, 0xb5, 0xa2, 0x22, 0x45, 0x2a, 0x18, 0x12, 0x33, 0x1c, 0x56, 0x54, 0xe1, 0xe1, 0x03, // ...."E*..3.VT... + 0xa8, 0x92, 0x89, 0xad, 0xbd, 0x0b, 0x0a, 0x96, 0x04, 0x06, 0x67, 0x62, 0x89, 0x92, 0xfc, 0x58, // ..........gb...X + 0x00, 0x02, 0x00, 0x64, 0xfe, 0x4b, 0x03, 0xfd, 0x04, 0x4e, 0x00, 0x1d, 0x00, 0x2b, 0x00, 0x64, // ...d.K...N...+.d + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x1a, 0x06, 0x3e, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x13, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1a, 0x10, 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y....!...+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x28, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y....(...+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x13, 0x10, 0x12, 0x33, 0x32, 0x16, 0x17, 0x37, 0x33, 0x11, 0x14, 0x06, // .Y01...32..73... + 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x06, 0x06, 0x23, 0x22, // #"&'7..32655..#" + 0x02, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, // .53..3267.&&#".. + 0x64, 0xe4, 0xc9, 0x67, 0x9c, 0x34, 0x18, 0x9d, 0xf2, 0xe4, 0x4e, 0xb5, 0x45, 0x32, 0x35, 0x96, // d..g.4....N.E25. + 0x49, 0x90, 0x83, 0x35, 0x94, 0x60, 0xc7, 0xe4, 0xc5, 0x8a, 0x8d, 0x59, 0x78, 0x27, 0x26, 0x7a, // I..5.`.....Yx'&z + 0x56, 0x8d, 0x8c, 0x02, 0x09, 0x01, 0x05, 0x01, 0x40, 0x53, 0x4e, 0x8d, 0xfb, 0xc0, 0xd0, 0xdf, // V.......@SN..... + 0x2b, 0x25, 0x99, 0x1e, 0x25, 0x83, 0x86, 0x7a, 0x44, 0x45, 0x01, 0x20, 0xe9, 0xa3, 0xc6, 0x51, // +%..%..zDE. ...Q + 0x4a, 0x01, 0xf2, 0x45, 0x51, 0xec, 0xb9, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x04, 0x00, // J..EQ........... + 0x06, 0x18, 0x00, 0x13, 0x00, 0x41, 0x00, 0xb0, 0x13, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // .....A.../..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb2, 0x2f, 0x13, 0x01, 0x5d, 0x30, 0x31, 0x01, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, // ./..]01.6632...# + 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x33, 0x01, 0x54, 0x38, 0xa3, 0x63, // .4&#"...#.3.T8.c + 0xad, 0xc1, 0xc5, 0x73, 0x72, 0x52, 0x85, 0x2b, 0xc5, 0xc5, 0x03, 0xa9, 0x4e, 0x57, 0xd0, 0xd8, // ...srR.+....NW.. + 0xfd, 0x5a, 0x02, 0xa8, 0x86, 0x80, 0x4d, 0x42, 0xfc, 0xe1, 0x06, 0x18, 0x00, 0x02, 0x00, 0x9f, // .Z....MB........ + 0x00, 0x00, 0x01, 0x64, 0x06, 0x18, 0x00, 0x03, 0x00, 0x07, 0x00, 0x36, 0x00, 0xb0, 0x00, 0x45, // ...d.......6...E + 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x05, 0xb0, 0x0a, 0x2b, 0x58, // /....>Y.......+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x06, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ...Y.....+X!...Y + 0x30, 0x31, 0x21, 0x23, 0x11, 0x33, 0x11, 0x23, 0x35, 0x33, 0x01, 0x64, 0xc5, 0xc5, 0xc5, 0xc5, // 01!#.3.#53.d.... + 0x04, 0x3a, 0x01, 0x15, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbe, 0xfe, 0x4b, 0x01, 0x72, // .:...........K.r + 0x06, 0x18, 0x00, 0x0f, 0x00, 0x13, 0x00, 0x4c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, // .......L...EX../ + 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // ....>Y..EX../... + 0x08, 0x3e, 0x59, 0xb1, 0x0b, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // .>Y.....+X!...Y. + 0x00, 0x10, 0xb0, 0x10, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x80, 0x10, 0x01, // ......+X...Y.... + 0x71, 0xb2, 0x20, 0x10, 0x01, 0x5d, 0xb1, 0x13, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // q. ..].....+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, // .Y01....#"&'7..3 + 0x32, 0x36, 0x35, 0x11, 0x13, 0x23, 0x35, 0x33, 0x01, 0x72, 0xac, 0x99, 0x1f, 0x33, 0x1d, 0x0e, // 265..#53.r...3.. + 0x0e, 0x34, 0x11, 0x41, 0x4d, 0xbf, 0xc5, 0xc5, 0x04, 0x3a, 0xfb, 0x6d, 0xa7, 0xb5, 0x09, 0x09, // .4.AM....:.m.... + 0x9b, 0x05, 0x07, 0x58, 0x63, 0x04, 0x93, 0x01, 0x19, 0xc5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, // ...Xc........... + 0x00, 0x00, 0x04, 0x1c, 0x06, 0x18, 0x00, 0x0c, 0x00, 0x57, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x06, // .........W.../.. + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // /..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb2, 0xef, 0x06, 0x01, 0x5d, 0xb4, 0xaf, 0x06, // ./....>Y....]... + 0xbf, 0x06, 0x02, 0x5d, 0xb2, 0x5f, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, 0x01, 0x02, 0xb0, // ...]._..]....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0a, 0x01, 0x06, 0x11, 0x12, 0x39, 0x30, // .+X!...Y......90 + 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, 0xd5, // 1.#.#.3.3.3..#.. + 0x80, 0xc5, 0xc5, 0x7e, 0x01, 0x28, 0xec, 0xfe, 0x8e, 0x01, 0xa7, 0xe8, 0x01, 0xf3, 0xfe, 0x0d, // ...~.(.......... + 0x06, 0x18, 0xfc, 0x78, 0x01, 0xaa, 0xfe, 0x14, 0xfd, 0xb2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9f, // ...x............ + 0x00, 0x00, 0x01, 0x64, 0x06, 0x18, 0x00, 0x03, 0x00, 0x18, 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x00, // ...d........./.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0x2f, 0x02, 0x01, 0x5d, // EX../....>Y./..] + 0x30, 0x31, 0x21, 0x23, 0x11, 0x33, 0x01, 0x64, 0xc5, 0xc5, 0x06, 0x18, 0x00, 0x01, 0x00, 0x8f, // 01!#.3.d........ + 0x00, 0x00, 0x06, 0x6f, 0x04, 0x4e, 0x00, 0x23, 0x00, 0x6f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...o.N.#.o...EX. + 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x23, 0x2f, 0x1b, 0xb1, 0x23, 0x0a, // ...>Y..EX.#/..#. + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, 0x1b, 0xb1, 0x18, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x21, 0x2f, 0x1b, 0xb1, 0x21, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x13, 0x02, 0xb0, // .!/..!.>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x1d, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, // +X!...Y01..6632. + 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, // .6632...#.4&#".. + 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x01, 0x3f, 0x0e, // ..#.4&#"...#..?. + 0x35, 0xa3, 0x6c, 0x6c, 0x9b, 0x27, 0x33, 0xa8, 0x70, 0xa5, 0xc0, 0xc5, 0x6e, 0x6d, 0x65, 0x7d, // 5.ll.'3.p...nme} + 0x0b, 0xc6, 0x71, 0x6a, 0x5a, 0x74, 0x1f, 0xc5, 0x04, 0x3a, 0x8e, 0x4d, 0x55, 0x64, 0x64, 0x5c, // ..qjZt...:.MUdd. + 0x6c, 0xe3, 0xe4, 0xfd, 0x79, 0x02, 0x89, 0xa0, 0x85, 0x8c, 0x6b, 0x08, 0xfd, 0x51, 0x02, 0x89, // l...y.....k..Q.. + 0x98, 0x8d, 0x4a, 0x43, 0xfc, 0xdf, 0x04, 0x3a, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfd, // ..JC...:........ + 0x04, 0x4e, 0x00, 0x13, 0x00, 0x46, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, // .N...F...EX../.. + 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x0d, // EX../....>Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x36, 0x36, // ...+X!...Y01..66 + 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, // 32...#.4&#"...#. + 0x01, 0x3f, 0x0e, 0x36, 0xa3, 0x68, 0xaf, 0xc0, 0xc5, 0x71, 0x74, 0x55, 0x83, 0x27, 0xc5, 0x04, // .?.6.h...qtU.'.. + 0x3a, 0xa1, 0x56, 0x5f, 0xcd, 0xd6, 0xfd, 0x55, 0x02, 0xa7, 0x8f, 0x78, 0x52, 0x47, 0xfc, 0xeb, // :.V_...U...xRG.. + 0x04, 0x3a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x04, 0x4e, 0x00, 0x0d, // .:.....a...*.N.. + 0x00, 0x1b, 0x00, 0x38, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, // ...8...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb1, // >Y..EX../....>Y. + 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x18, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x34, 0x00, 0x33, // ...+X!...Y01.4.3 + 0x32, 0x00, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, // 2.....#".53..326 + 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x61, 0x01, 0x04, 0xdf, 0xe1, 0x01, 0x05, 0xfe, // 554&#"..a....... + 0xfc, 0xe0, 0xe0, 0xfe, 0xfb, 0xc5, 0x91, 0x8f, 0x8d, 0x92, 0x93, 0x8e, 0x8d, 0x91, 0x02, 0x27, // ...............' + 0xf0, 0x01, 0x37, 0xfe, 0xca, 0xf1, 0x16, 0xf2, 0xfe, 0xcc, 0x01, 0x35, 0xf1, 0xac, 0xe0, 0xe0, // ..7........5.... + 0xac, 0x16, 0xaa, 0xe2, 0xe2, 0xaa, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8f, 0xfe, 0x60, 0x04, 0x29, // .............`.) + 0x04, 0x4e, 0x00, 0x11, 0x00, 0x1f, 0x00, 0x55, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, // .N.....U...EX../ + 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, // ....>Y..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x08, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0e, 0x10, // ..EX../....>Y... + 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, // .....+X!...Y.... + 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x02, // ....+X!...Y01... + 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x36, 0x33, 0x32, 0x12, 0x11, 0x23, // #"&'.#.3.6632..# + 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x29, 0xe0, // 4&#".....3265.). + 0xc5, 0x64, 0x97, 0x35, 0xc5, 0x97, 0x1f, 0x35, 0x9e, 0x69, 0xc9, 0xdf, 0xc5, 0x91, 0x8d, 0x55, // .d.5...5.i.....U + 0x78, 0x25, 0x25, 0x78, 0x57, 0x8c, 0x90, 0x01, 0xf4, 0xea, 0xfe, 0xe1, 0x43, 0x43, 0xfd, 0xef, // x%%xW.......CC.. + 0x05, 0xda, 0x8c, 0x4e, 0x52, 0xfe, 0xc1, 0xfe, 0xfa, 0xb8, 0xed, 0x4d, 0x43, 0xfd, 0xf5, 0x43, // ...NR......MC..C + 0x4b, 0xcd, 0xa2, 0x00, 0x00, 0x02, 0x00, 0x62, 0xfe, 0x60, 0x03, 0xea, 0x04, 0x4e, 0x00, 0x11, // K......b.`...N.. + 0x00, 0x1f, 0x00, 0x52, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, // ...R...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ../....>Y.....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x10, 0x12, 0x33, 0x32, 0x16, 0x17, 0x37, 0x33, 0x11, // ...Y01...32..73. + 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, // #...#".53..3267. + 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x62, 0xdf, 0xc9, 0x63, 0x96, 0x34, 0x1d, 0x96, 0xc5, 0x34, // &&#"..b..c.4...4 + 0x8e, 0x5b, 0xc6, 0xe0, 0xc5, 0x87, 0x8c, 0x51, 0x73, 0x27, 0x27, 0x73, 0x4f, 0x8d, 0x88, 0x02, // .[.....Qs''sO... + 0x09, 0x01, 0x05, 0x01, 0x40, 0x4b, 0x48, 0x7f, 0xfa, 0x26, 0x02, 0x06, 0x3d, 0x3e, 0x01, 0x1f, // ....@KH..&..=>.. + 0xea, 0xa4, 0xcb, 0x48, 0x41, 0x02, 0x22, 0x3d, 0x46, 0xef, 0xbb, 0x00, 0x00, 0x01, 0x00, 0x8f, // ...HA."=F....... + 0x00, 0x00, 0x02, 0xaa, 0x04, 0x4e, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....N...>...EX. + 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0c, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x0c, 0x10, 0xb0, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb4, // >Y.......+X...Y. + 0x8f, 0x01, 0x9f, 0x01, 0x02, 0x5d, 0x30, 0x31, 0x01, 0x27, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, // .....]01.'"...#. + 0x33, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x02, 0x8f, 0x65, 0x4e, 0x6b, 0x1d, 0xc5, 0xb0, // 3.6632....eNk... + 0x13, 0x2e, 0x87, 0x58, 0x16, 0x28, 0x0d, 0x03, 0x8c, 0x06, 0x4a, 0x43, 0xfc, 0xfb, 0x04, 0x3a, // ...X.(....JC...: + 0x9e, 0x54, 0x5e, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x67, 0xff, 0xeb, 0x03, 0xc9, // .T^........g.... + 0x04, 0x4e, 0x00, 0x27, 0x00, 0x7e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, // .N.'.~...EX../.. + 0x09, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x17, 0x1d, 0x09, 0x11, 0x12, 0x39, 0xb4, 0x29, 0x17, 0x39, 0x17, 0x02, 0x5d, 0xb6, // Y......9.).9..]. + 0xb9, 0x17, 0xc9, 0x17, 0xd9, 0x17, 0x03, 0x5d, 0xb0, 0x17, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, // .......]........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb0, 0x0e, 0xd0, 0xb2, 0x1d, 0x0e, // +X!...Y......... + 0x01, 0x5d, 0xb2, 0x0c, 0x0e, 0x01, 0x5d, 0xb0, 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, // .]....]........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, 0x10, 0xb0, 0x22, 0xd0, 0xb4, 0x05, 0x22, 0x15, // X!...Y...."...". + 0x22, 0x02, 0x5d, 0xb0, 0x1d, 0x10, 0xb1, 0x25, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ".]....%...+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, // .Y01.4&'&&54632. + 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, // ..#4&#"......... + 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x03, 0x04, 0x63, 0x8a, // .#"&773..326..c. + 0xc5, 0xc7, 0xe0, 0xb4, 0xbd, 0xdf, 0x05, 0x02, 0xbc, 0x77, 0x62, 0x69, 0x66, 0x5a, 0x8a, 0xcd, // .........wbifZ.. + 0xc8, 0xe9, 0xbc, 0xcf, 0xee, 0x06, 0x02, 0xbc, 0x05, 0x92, 0x62, 0x69, 0x77, 0x01, 0x1f, 0x41, // ..........biw..A + 0x54, 0x1f, 0x2b, 0x93, 0x7f, 0x84, 0xba, 0xc2, 0x8b, 0x06, 0x47, 0x71, 0x5c, 0x41, 0x40, 0x4a, // T.+.......Gq.A@J + 0x1d, 0x2c, 0x97, 0x7f, 0x90, 0xb2, 0xd2, 0x8c, 0x06, 0x69, 0x61, 0x55, 0x00, 0x01, 0x00, 0x22, // .,.......iaU..." + 0xff, 0xeb, 0x02, 0x6a, 0x05, 0x3f, 0x00, 0x17, 0x00, 0x51, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...j.?...Q...EX. + 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x15, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x08, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x03, 0x10, 0xb0, 0x13, 0xd0, 0xb0, 0x14, 0xd0, 0x30, 0x31, 0x01, 0x11, 0x33, 0x15, 0x23, // .........01..3.# + 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, // ...3267...#"&5.# + 0x35, 0x33, 0x11, 0x01, 0x93, 0xcd, 0xcd, 0x3f, 0x34, 0x11, 0x29, 0x10, 0x1a, 0x16, 0x55, 0x2b, // 53.....?4.)...U+ + 0x78, 0x8e, 0xac, 0xac, 0x05, 0x3f, 0xfe, 0xfb, 0x92, 0xfd, 0x6f, 0x4c, 0x3e, 0x08, 0x06, 0x87, // x....?....oL>... + 0x12, 0x17, 0x91, 0x9b, 0x02, 0x91, 0x92, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8b, // ................ + 0xff, 0xeb, 0x03, 0xfc, 0x04, 0x3a, 0x00, 0x13, 0x00, 0x46, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....:...F...EX. + 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x10, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x03, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x25, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, // %..#"&5.3...3267 + 0x11, 0x33, 0x11, 0x23, 0x03, 0x3e, 0x33, 0xa0, 0x69, 0xb1, 0xc6, 0xc5, 0x66, 0x6c, 0x69, 0x89, // .3.#.>3.i...fli. + 0x23, 0xc5, 0xb1, 0xa0, 0x57, 0x5e, 0xe2, 0xef, 0x02, 0x7e, 0xfd, 0x80, 0xad, 0x82, 0x55, 0x4e, // #...W^...~....UN + 0x03, 0x0c, 0xfb, 0xc6, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x00, 0x03, 0xe4, 0x04, 0x3a, 0x00, 0x09, // .............:.. + 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, // .;...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0xd0, 0x40, 0x0b, 0x54, // X../....>Y...@.T + 0x01, 0x64, 0x01, 0x74, 0x01, 0x84, 0x01, 0x94, 0x01, 0x05, 0x5d, 0x30, 0x31, 0x01, 0x17, 0x33, // .d.t......]01..3 + 0x37, 0x13, 0x33, 0x01, 0x23, 0x01, 0x33, 0x01, 0xf8, 0x11, 0x06, 0x13, 0xf9, 0xc9, 0xfe, 0x72, // 7.3.#.3........r + 0x95, 0xfe, 0x6d, 0xca, 0x01, 0x3f, 0x4c, 0x4c, 0x02, 0xfb, 0xfb, 0xc6, 0x04, 0x3a, 0x00, 0x00, // ..m..?LL.....:.. + 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x05, 0xdc, 0x04, 0x3a, 0x00, 0x15, 0x00, 0x83, 0x00, 0xb0, // ...-.....:...... + 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x14, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x02, 0xd0, 0x40, 0x0d, 0x44, 0x02, 0x54, 0x02, 0x64, 0x02, 0x74, 0x02, 0x84, 0x02, 0x94, // ...@.D.T.d.t.... + 0x02, 0x06, 0x5d, 0xb0, 0x0c, 0x10, 0xb0, 0x07, 0xd0, 0x40, 0x0d, 0x44, 0x07, 0x54, 0x07, 0x64, // ..]......@.D.T.d + 0x07, 0x74, 0x07, 0x84, 0x07, 0x94, 0x07, 0x06, 0x5d, 0xb0, 0x04, 0x10, 0xb0, 0x0f, 0xd0, 0x40, // .t......]......@ + 0x0d, 0x4b, 0x0f, 0x5b, 0x0f, 0x6b, 0x0f, 0x7b, 0x0f, 0x8b, 0x0f, 0x9b, 0x0f, 0x06, 0x5d, 0x30, // .K.[.k.{......]0 + 0x31, 0x01, 0x17, 0x33, 0x37, 0x13, 0x33, 0x13, 0x17, 0x33, 0x37, 0x13, 0x33, 0x01, 0x23, 0x03, // 1..37.3..37.3.#. + 0x27, 0x07, 0x07, 0x03, 0x23, 0x01, 0x33, 0x01, 0xa4, 0x17, 0x06, 0x1c, 0xd8, 0x9e, 0xd9, 0x1f, // '...#.3......... + 0x06, 0x1d, 0xaa, 0xc4, 0xfe, 0xc6, 0x9f, 0xd1, 0x2d, 0x06, 0x2b, 0xce, 0x9f, 0xfe, 0xc6, 0xc4, // ........-.+..... + 0x01, 0x8a, 0x83, 0x83, 0x02, 0xb0, 0xfd, 0x50, 0x92, 0x92, 0x02, 0xb0, 0xfb, 0xc6, 0x02, 0x93, // .......P........ + 0xb8, 0x01, 0xb7, 0xfd, 0x6d, 0x04, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x00, 0x03, 0xd4, // ....m.:......... + 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x53, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, // .:...S...EX../.. + 0x01, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x07, 0x0a, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb2, 0x95, 0x00, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x06, 0xd0, 0xb2, 0x7b, 0x06, // .9....].......{. + 0x01, 0x5d, 0xb2, 0x9a, 0x06, 0x01, 0x5d, 0x30, 0x31, 0x01, 0x13, 0x33, 0x01, 0x01, 0x23, 0x03, // .]....]01..3..#. + 0x03, 0x23, 0x01, 0x01, 0x33, 0x01, 0xfe, 0xe6, 0xe6, 0xfe, 0xa1, 0x01, 0x69, 0xe2, 0xf0, 0xf0, // .#..3.......i... + 0xe4, 0x01, 0x69, 0xfe, 0xa1, 0xe3, 0x02, 0xab, 0x01, 0x8f, 0xfd, 0xe9, 0xfd, 0xdd, 0x01, 0x99, // ..i............. + 0xfe, 0x67, 0x02, 0x23, 0x02, 0x17, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, // .g.#.........K.. + 0x04, 0x3a, 0x00, 0x15, 0x00, 0x52, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // .:...R...EX../.. + 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x08, 0x3e, 0x59, 0xb2, 0x13, // Y..EX../....>Y.. + 0x08, 0x14, 0x11, 0x12, 0x39, 0xb0, 0x13, 0x10, 0xb0, 0x01, 0xd0, 0x40, 0x09, 0x64, 0x01, 0x74, // ....9......@.d.t + 0x01, 0x84, 0x01, 0x94, 0x01, 0x04, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x0f, 0x03, 0xb0, 0x0a, 0x2b, // ......]........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x33, 0x01, 0x33, 0x01, 0x06, 0x06, // X!...Y01..3.3... + 0x23, 0x22, 0x26, 0x27, 0x37, 0x26, 0x16, 0x33, 0x32, 0x36, 0x37, 0x37, 0x01, 0x33, 0x01, 0xda, // #"&'7&.32677.3.. + 0x23, 0x06, 0x01, 0x0a, 0xdb, 0xfe, 0x39, 0x29, 0x99, 0x82, 0x18, 0x4a, 0x14, 0x14, 0x06, 0x53, // #.....9)...J...S + 0x0b, 0x3f, 0x50, 0x1b, 0x2f, 0xfe, 0x6e, 0xdc, 0x01, 0x91, 0x88, 0x03, 0x31, 0xfb, 0x20, 0x6d, // .?P./.n.....1. m + 0xa2, 0x0b, 0x05, 0x9b, 0x01, 0x06, 0x70, 0x44, 0x71, 0x04, 0x24, 0x00, 0x00, 0x01, 0x00, 0x5e, // ......pDq.$....^ + 0x00, 0x00, 0x03, 0xba, 0x04, 0x3a, 0x00, 0x09, 0x00, 0x3e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....:...>...EX. + 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x07, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // Y...........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0xd0, 0x30, 0x31, 0x25, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, // ..Y...01%!.!5.!5 + 0x21, 0x15, 0x01, 0x49, 0x02, 0x71, 0xfc, 0xa4, 0x02, 0x49, 0xfd, 0xbe, 0x03, 0x33, 0x9a, 0x9a, // !..I.q...I...3.. + 0x8a, 0x03, 0x14, 0x9c, 0x86, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3f, 0xfe, 0x94, 0x02, 0x9f, // ...........?.... + 0x06, 0x3d, 0x00, 0x1e, 0x00, 0x1b, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x2f, 0xb0, 0x0f, 0x2f, // .=......./../../ + 0xb0, 0x08, 0x10, 0xb1, 0x07, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ........+X!...Y0 + 0x31, 0x01, 0x26, 0x26, 0x35, 0x35, 0x34, 0x26, 0x23, 0x35, 0x32, 0x36, 0x35, 0x35, 0x34, 0x36, // 1.&&554� + 0x37, 0x17, 0x06, 0x06, 0x15, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x15, 0x14, 0x16, 0x17, // 7............... + 0x02, 0x77, 0xc3, 0xa4, 0x67, 0x6a, 0x6a, 0x67, 0xa4, 0xc3, 0x28, 0x6e, 0x5c, 0x55, 0x55, 0x55, // .w..gjjg..(n.UUU + 0x55, 0x5c, 0x6e, 0xfe, 0x94, 0x37, 0xf0, 0xaa, 0xcd, 0x70, 0x7d, 0x93, 0x7b, 0x71, 0xce, 0xab, // U.n..7...p}.{q.. + 0xef, 0x37, 0x75, 0x23, 0xb5, 0x84, 0xce, 0x69, 0xa0, 0x2d, 0x2e, 0xa1, 0x67, 0xcd, 0x84, 0xb3, // .7u#...i.-..g... + 0x24, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xaf, 0xfe, 0xf2, 0x01, 0x4d, 0x05, 0xb0, 0x00, 0x03, // $..........M.... + 0x00, 0x13, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, // ...../..EX../... + 0x0c, 0x3e, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x33, 0x01, 0x4d, 0x9e, 0x9e, 0xfe, 0xf2, 0x06, // .>Y01.#.3.M..... + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x15, 0xfe, 0x94, 0x02, 0x76, 0x06, 0x3d, 0x00, 0x1e, // ...........v.=.. + 0x00, 0x18, 0x00, 0xb0, 0x0f, 0x2f, 0xb0, 0x1e, 0x2f, 0xb0, 0x16, 0x2f, 0xb1, 0x17, 0x05, 0xb0, // ...../../../.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x17, 0x36, 0x36, 0x35, 0x35, 0x34, // .+X!...Y01.66554 + 0x36, 0x37, 0x26, 0x26, 0x35, 0x35, 0x34, 0x26, 0x27, 0x37, 0x16, 0x16, 0x15, 0x15, 0x14, 0x16, // 67&&554&'7...... + 0x33, 0x15, 0x22, 0x06, 0x15, 0x15, 0x14, 0x06, 0x07, 0x15, 0x6d, 0x5e, 0x5a, 0x5e, 0x5e, 0x5a, // 3.".......m^Z^^Z + 0x5e, 0x6d, 0x29, 0xc2, 0xa5, 0x65, 0x6c, 0x6c, 0x65, 0xa5, 0xc2, 0xf6, 0x24, 0xb3, 0x84, 0xcd, // ^m)..elle...$... + 0x6b, 0xa0, 0x2b, 0x29, 0xa0, 0x6d, 0xce, 0x84, 0xb5, 0x23, 0x75, 0x37, 0xef, 0xab, 0xce, 0x71, // k.+).m...#u7...q + 0x7b, 0x93, 0x7d, 0x70, 0xcd, 0xaa, 0xf0, 0x37, 0x00, 0x01, 0x00, 0x80, 0x01, 0x91, 0x04, 0xf0, // {.}p...7........ + 0x03, 0x23, 0x00, 0x19, 0x00, 0x37, 0x00, 0xb0, 0x10, 0x2f, 0xb0, 0x16, 0xb0, 0x0a, 0x2b, 0x58, // .#...7.../....+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x03, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ...Y.....+X!...Y + 0xb0, 0x10, 0x10, 0xb1, 0x09, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x03, 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x10, 0x10, 0xb0, 0x19, 0xd0, 0x30, 0x31, 0x01, 0x14, 0x06, // ...........01... + 0x23, 0x22, 0x26, 0x27, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, // #"&'&&#"..'4632. + 0x17, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0xf0, 0xae, 0x82, 0x5a, 0x93, 0x55, 0x3b, 0x62, // ...3265....Z.U;b + 0x32, 0x43, 0x5f, 0x8d, 0xab, 0x84, 0x58, 0x96, 0x55, 0x3a, 0x60, 0x34, 0x42, 0x61, 0x02, 0xe4, // 2C_...X.U:`4Ba.. + 0x89, 0xca, 0x42, 0x4a, 0x30, 0x30, 0x6a, 0x4b, 0x12, 0x88, 0xc1, 0x45, 0x46, 0x33, 0x2e, 0x72, // ..BJ00jK...EF3.r + 0x4d, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x90, 0xfe, 0x8a, 0x01, 0x55, 0x04, 0x3a, 0x00, 0x03, // M..........U.:.. + 0x00, 0x07, 0x00, 0x26, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, // ...&.../..EX../. + 0xb1, 0x06, 0x0a, 0x3e, 0x59, 0xb1, 0x04, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb2, 0x03, 0x04, 0x00, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x33, 0x11, 0x23, // Y......901.#.3.# + 0x35, 0x33, 0x01, 0x55, 0xc5, 0xc5, 0xc5, 0xc5, 0xfe, 0x8a, 0x03, 0xd2, 0x01, 0x10, 0xce, 0x00, // 53.U............ + 0x00, 0x01, 0x00, 0x6b, 0xff, 0x0b, 0x04, 0x00, 0x05, 0x26, 0x00, 0x23, 0x00, 0x44, 0x00, 0xb0, // ...k.....&.#.D.. + 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ../....>Y.....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x15, 0x10, 0xb0, 0x12, // !...Y........... + 0xd0, 0xb0, 0x15, 0x10, 0xb1, 0x1d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0x30, 0x31, 0x25, 0x32, 0x36, 0x35, 0x33, 0x17, 0x16, 0x06, 0x07, 0x15, 0x23, 0x35, 0x26, 0x02, // 01%2653.....#5&. + 0x35, 0x35, 0x34, 0x12, 0x37, 0x35, 0x33, 0x15, 0x16, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, // 554.753.....#4&# + 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x02, 0x51, 0x62, 0x95, 0xb2, 0x03, 0x03, 0xca, 0x92, 0xc6, // "......Qb....... + 0xb6, 0xbd, 0xbe, 0xb5, 0xc6, 0x9d, 0xbf, 0x03, 0x02, 0xb3, 0x8c, 0x6b, 0x9b, 0x85, 0x84, 0x85, // ...........k.... + 0x79, 0x58, 0x06, 0x7a, 0xca, 0x19, 0xe8, 0xec, 0x24, 0x01, 0x24, 0xc9, 0x2a, 0xc7, 0x01, 0x23, // yX.z....$.$.*..# + 0x26, 0xe4, 0xdf, 0x18, 0xd5, 0x90, 0x05, 0x63, 0x8b, 0xdf, 0xa2, 0x2a, 0xa6, 0xdd, 0x00, 0x00, // &......c...*.... + 0x00, 0x01, 0x00, 0x46, 0x00, 0x00, 0x04, 0x57, 0x05, 0xc5, 0x00, 0x22, 0x00, 0x61, 0x00, 0xb0, // ...F...W...".a.. + 0x20, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x0c, 0x3e, 0x59, 0xb0, // /..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb2, 0x0f, 0x20, 0x01, // .EX../....>Y.. . + 0x5d, 0xb0, 0x20, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ]. ......+X!...Y + 0xb0, 0x06, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x09, 0xd0, 0xb0, 0x00, 0x10, 0xb0, 0x0d, 0xd0, 0xb0, 0x20, 0x10, 0xb0, 0x0f, 0xd0, 0xb0, 0x14, // ......... ...... + 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x17, 0x14, 0x06, 0x07, 0x21, 0x07, 0x21, 0x35, 0x33, 0x36, 0x36, 0x35, 0x27, 0x23, 0x35, 0x33, // ....!.!53665'#53 + 0x03, 0x34, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x13, // .4632...#4&#"... + 0x21, 0x15, 0x01, 0xae, 0x06, 0x1f, 0x1d, 0x02, 0xdf, 0x01, 0xfc, 0x30, 0x0a, 0x30, 0x30, 0x06, // !..........0.00. + 0xa4, 0x9e, 0x0a, 0xe0, 0xbc, 0xc8, 0xdc, 0x04, 0x02, 0xbe, 0x7e, 0x62, 0x63, 0x74, 0x0a, 0x01, // ..........~bct.. + 0xa2, 0x02, 0x67, 0x95, 0x5a, 0xa3, 0x3b, 0x9a, 0x9a, 0x0d, 0xc4, 0x67, 0x95, 0x9b, 0x01, 0x0e, // ..g.Z.;....g.... + 0xcc, 0xe9, 0xd1, 0xac, 0x06, 0x76, 0x72, 0x95, 0x85, 0xfe, 0xf2, 0x9b, 0x00, 0x02, 0x00, 0x68, // .....vr........h + 0xff, 0xe5, 0x05, 0x5a, 0x04, 0xf1, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x2e, 0x00, 0xb0, 0x15, 0x2f, // ...Z...#./...../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb1, 0x27, 0x03, // ..EX../....>Y.'. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x15, 0x10, 0xb1, 0x2d, 0x03, 0xb0, // ..+X!...Y....-.. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x06, 0x06, 0x23, 0x22, 0x26, // .+X!...Y01%..#"& + 0x27, 0x07, 0x27, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x27, 0x37, 0x17, 0x36, 0x36, 0x33, // '.'7&&5467'7.663 + 0x32, 0x16, 0x17, 0x37, 0x17, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x07, 0x17, 0x07, 0x01, 0x14, // 2..7............ + 0x12, 0x33, 0x32, 0x12, 0x35, 0x34, 0x02, 0x23, 0x22, 0x02, 0x04, 0x49, 0x4d, 0xb9, 0x65, 0x65, // .32.54.#"..IM.ee + 0xb9, 0x4b, 0x82, 0x8b, 0x8a, 0x32, 0x35, 0x39, 0x36, 0x92, 0x8b, 0x8f, 0x4a, 0xb2, 0x60, 0x61, // .K...2596...J.`a + 0xb2, 0x4b, 0x92, 0x8c, 0x96, 0x34, 0x39, 0x35, 0x30, 0x8e, 0x8c, 0xfc, 0x73, 0xf1, 0xac, 0xaa, // .K...4950...s... + 0xf1, 0xf1, 0xaa, 0xac, 0xf1, 0x6c, 0x3e, 0x42, 0x41, 0x3d, 0x84, 0x8a, 0x8c, 0x4c, 0xb5, 0x63, // .....l>BA=...L.c + 0x66, 0xbc, 0x4e, 0x95, 0x8b, 0x92, 0x37, 0x3d, 0x3e, 0x38, 0x95, 0x8c, 0x99, 0x4e, 0xb9, 0x65, // f.N...7=>8...N.e + 0x62, 0xb3, 0x4c, 0x8f, 0x8b, 0x02, 0x7b, 0xbc, 0xfe, 0xf7, 0x01, 0x09, 0xbc, 0xba, 0x01, 0x08, // b.L...{......... + 0xfe, 0xf8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x04, 0xaf, 0x05, 0xb0, 0x00, 0x16, // ................ + 0x00, 0x6d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x0c, 0x3e, 0x59, // .m...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb2, 0x0f, 0x13, 0x03, 0x2b, 0xb2, // X../....>Y....+. + 0x00, 0x0c, 0x16, 0x11, 0x12, 0x39, 0xb4, 0x0f, 0x13, 0x1f, 0x13, 0x02, 0x5d, 0xb0, 0x13, 0x10, // .....9......]... + 0xb0, 0x04, 0xd0, 0xb0, 0x13, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ...........+X!.. + 0xf4, 0x59, 0xb0, 0x06, 0xd0, 0xb0, 0x0f, 0x10, 0xb0, 0x07, 0xd0, 0xb0, 0x0f, 0x10, 0xb1, 0x0e, // .Y.............. + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0a, 0xd0, 0x30, 0x31, 0x01, // ...+X!...Y...01. + 0x01, 0x33, 0x01, 0x21, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, // .3.!.!.!.!.#.!5! + 0x35, 0x21, 0x35, 0x21, 0x01, 0x33, 0x02, 0x67, 0x01, 0x68, 0xe0, 0xfe, 0x5e, 0x01, 0x38, 0xfe, // 5!5!.3.g.h..^.8. + 0x81, 0x01, 0x7f, 0xfe, 0x81, 0xc5, 0xfe, 0x89, 0x01, 0x77, 0xfe, 0x89, 0x01, 0x37, 0xfe, 0x5d, // .........w...7.] + 0xe2, 0x03, 0x19, 0x02, 0x97, 0xfd, 0x32, 0x9b, 0x87, 0x9b, 0xfe, 0xdb, 0x01, 0x25, 0x9b, 0x87, // ......2......%.. + 0x9b, 0x02, 0xce, 0x00, 0x00, 0x02, 0x00, 0x91, 0xfe, 0xf2, 0x01, 0x56, 0x05, 0xb0, 0x00, 0x03, // ...........V.... + 0x00, 0x07, 0x00, 0x23, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x05, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...#.../../..EX. + 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, 0x05, 0x10, 0xb0, 0x01, 0xb0, 0x0a, 0x2b, // ./....>Y.......+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x13, 0x11, 0x33, 0x11, 0x11, 0x23, 0x11, 0x33, 0x91, // X...Y01..3..#.3. + 0xc5, 0xc5, 0xc5, 0xfe, 0xf2, 0x03, 0x18, 0xfc, 0xe8, 0x03, 0xc8, 0x02, 0xf6, 0x00, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0x5a, 0xfe, 0x11, 0x04, 0x7c, 0x05, 0xc5, 0x00, 0x33, 0x00, 0x45, 0x00, 0x5b, // ...Z...|...3.E.[ + 0x00, 0xb0, 0x09, 0x2f, 0xb0, 0x31, 0x2f, 0xb0, 0x17, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x23, // .../.1/../..EX.# + 0x2f, 0x1b, 0xb1, 0x23, 0x0c, 0x3e, 0x59, 0xb0, 0x17, 0x10, 0xb1, 0x3d, 0x03, 0xb0, 0x0a, 0x2b, // /..#.>Y....=...+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0xd0, 0xb0, 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, // X!...Y.......... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x31, 0x10, 0xb1, 0x34, 0x03, 0xb0, 0x0a, // .+X!...Y.1..4... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, 0xd0, 0xb0, 0x23, 0x10, 0xb1, 0x2b, 0x02, // +X!...Y....#..+. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x07, 0x16, // ..+X!...Y01..... + 0x16, 0x15, 0x14, 0x04, 0x23, 0x22, 0x24, 0x3f, 0x02, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, // ....#"$?...32654 + 0x26, 0x27, 0x26, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x32, 0x04, // &'&&5467&&54$32. + 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x25, 0x26, // ..#4&#".......%& + 0x26, 0x27, 0x06, 0x06, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x17, 0x36, 0x36, 0x35, 0x34, 0x26, // &'.........6654& + 0x04, 0x7c, 0x60, 0x57, 0x45, 0x46, 0xfe, 0xf6, 0xe1, 0xdd, 0xfe, 0xd2, 0x05, 0x02, 0xbc, 0xc1, // .|`WEF.......... + 0x87, 0x89, 0x9d, 0x90, 0xcc, 0xef, 0xe2, 0x5e, 0x57, 0x44, 0x44, 0x01, 0x0c, 0xe0, 0xe9, 0x01, // .......^WDD..... + 0x04, 0x04, 0x03, 0xbc, 0x9e, 0x8c, 0x91, 0x96, 0x86, 0xd3, 0xf4, 0xdf, 0xfd, 0xdf, 0x2f, 0x53, // ............../S + 0x24, 0x49, 0x49, 0x88, 0xd2, 0x38, 0x4a, 0x21, 0x48, 0x50, 0x93, 0x01, 0xaf, 0x5e, 0x8c, 0x28, // $II..8J!HP...^.( + 0x33, 0x88, 0x62, 0xac, 0xc3, 0xcd, 0xdc, 0x06, 0x02, 0x8f, 0x87, 0x77, 0x5b, 0x5b, 0x65, 0x3f, // 3.b........w[[e? + 0x3f, 0xba, 0xb1, 0x5b, 0x8d, 0x29, 0x32, 0x8b, 0x61, 0xa6, 0xc9, 0xdf, 0xca, 0x06, 0x76, 0x9e, // ?..[.)2.a.....v. + 0x77, 0x5b, 0x63, 0x63, 0x3a, 0x45, 0xb5, 0x53, 0x0c, 0x19, 0x0f, 0x13, 0x64, 0x45, 0x64, 0x67, // w[cc:E.S....dEdg + 0x3b, 0x11, 0x16, 0x0c, 0x14, 0x63, 0x45, 0x5b, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xaa, // ;....cE[k....... + 0x04, 0xe8, 0x03, 0x5b, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x07, 0x00, 0x25, 0x00, 0xb0, 0x04, 0x2f, // ...[.......%.../ + 0xb2, 0x3f, 0x04, 0x01, 0x5d, 0xb2, 0xbf, 0x04, 0x01, 0x5d, 0xb0, 0x01, 0xd0, 0xb0, 0x04, 0x10, // .?..]....]...... + 0xb1, 0x07, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0xd0, 0x30, // .....+X!...Y...0 + 0x31, 0x01, 0x23, 0x35, 0x33, 0x05, 0x23, 0x35, 0x33, 0x03, 0x5b, 0xdb, 0xdb, 0xfe, 0x2a, 0xdb, // 1.#53.#53.[...*. + 0xdb, 0x04, 0xe8, 0xc8, 0xc8, 0xc8, 0x00, 0x00, 0x00, 0x03, 0x00, 0x58, 0xff, 0xeb, 0x05, 0xe3, // ...........X.... + 0x05, 0xc4, 0x00, 0x1d, 0x00, 0x29, 0x00, 0x35, 0x00, 0x74, 0x00, 0xb0, 0x0b, 0x2f, 0xb0, 0x04, // .....).5.t.../.. + 0x2f, 0xb0, 0x10, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x2d, 0x2f, 0x1b, 0xb1, 0x2d, 0x0c, 0x3e, // /../..EX.-/..-.> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x33, 0x2f, 0x1b, 0xb1, 0x33, 0x06, 0x3e, 0x59, 0xb4, 0x0f, // Y..EX.3/..3.>Y.. + 0x04, 0x1f, 0x04, 0x02, 0x5d, 0xb2, 0x10, 0x0b, 0x01, 0x5d, 0xb0, 0x0b, 0x10, 0xb1, 0x13, 0x01, // ....]....]...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x1a, 0x01, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x10, 0x10, 0xb0, 0x1d, 0xd0, 0xb0, 0x33, // .+X!...Y.......3 + 0x10, 0xb1, 0x21, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x2d, 0x10, // ..!...+X!...Y.-. + 0xb1, 0x27, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, // .'...+X!...Y01.. + 0x16, 0x06, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, // ..#"&554632...#4 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x25, 0x10, 0x00, 0x33, // &#".....3265%..3 + 0x32, 0x00, 0x11, 0x10, 0x00, 0x23, 0x22, 0x00, 0x03, 0x10, 0x00, 0x21, 0x20, 0x00, 0x11, 0x10, // 2....#"....! ... + 0x00, 0x21, 0x20, 0x00, 0x04, 0x57, 0x02, 0x04, 0xb0, 0x9d, 0xa0, 0xbc, 0xbc, 0xa0, 0x9d, 0xb1, // .! ..W.......... + 0x04, 0x02, 0x92, 0x5b, 0x5b, 0x5e, 0x66, 0x66, 0x5e, 0x5b, 0x5a, 0xfd, 0x0c, 0x01, 0x57, 0xf6, // ...[[^ff^[Z...W. + 0xf5, 0x01, 0x58, 0xfe, 0xa8, 0xf5, 0xf6, 0xfe, 0xa9, 0x79, 0x01, 0x9e, 0x01, 0x28, 0x01, 0x27, // ..X......y...(.' + 0x01, 0x9e, 0xfe, 0x61, 0xfe, 0xda, 0xfe, 0xd8, 0xfe, 0x62, 0x02, 0x54, 0x06, 0x97, 0x9d, 0xd5, // ...a.....b.T.... + 0xae, 0x77, 0xad, 0xd6, 0x9e, 0x95, 0x06, 0x5f, 0x57, 0x8d, 0x72, 0x78, 0x75, 0x8c, 0x56, 0x62, // .w....._W.rxu.Vb + 0x85, 0xfe, 0xf7, 0xfe, 0x94, 0x01, 0x6c, 0x01, 0x09, 0x01, 0x07, 0x01, 0x6a, 0xfe, 0x96, 0xfe, // ......l.....j... + 0xf9, 0x01, 0x3b, 0x01, 0xb0, 0xfe, 0x50, 0xfe, 0xc5, 0xfe, 0xc4, 0xfe, 0x4e, 0x01, 0xb2, 0x00, // ..;...P.....N... + 0x00, 0x02, 0x00, 0x78, 0x02, 0xb4, 0x03, 0x13, 0x05, 0xc5, 0x00, 0x20, 0x00, 0x2b, 0x00, 0x75, // ...x....... .+.u + 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, 0xb1, // .../../..EX../.. + 0x19, 0x0c, 0x3e, 0x59, 0xb2, 0x7f, 0x06, 0x01, 0x5d, 0xb2, 0xaf, 0x06, 0x01, 0x5d, 0xb2, 0x20, // ..>Y....]....]. + 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb0, 0x00, 0xd0, 0xb4, 0xcf, 0x0c, 0xdf, 0x0c, 0x02, 0x71, // ..]............q + 0xb2, 0xff, 0x0c, 0x01, 0x71, 0xb2, 0x7f, 0x0c, 0x01, 0x5d, 0xb2, 0x10, 0x0c, 0x01, 0x5d, 0xb0, // ....q....]....]. + 0x19, 0x10, 0xb1, 0x11, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, // .......+X!...Y.. + 0x0c, 0x19, 0x11, 0x12, 0x39, 0xb0, 0x06, 0x10, 0xb1, 0x21, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ....9....!...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x26, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y....&...+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x26, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, // ..Y01.&&'..#"&54 + 0x36, 0x33, 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x27, 0x27, 0x26, 0x36, 0x33, 0x32, // 63354&#"..''&632 + 0x16, 0x15, 0x11, 0x14, 0x16, 0x17, 0x25, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x06, 0x15, 0x14, // ......%2675#"... + 0x16, 0x02, 0x65, 0x08, 0x0a, 0x03, 0x21, 0x71, 0x4d, 0x77, 0x82, 0xa9, 0xa1, 0x8b, 0x3c, 0x3a, // ..e...!qMw....<: + 0x43, 0x49, 0xa2, 0x01, 0x06, 0xa9, 0x8c, 0x86, 0x9c, 0x0c, 0x0e, 0xfe, 0x88, 0x33, 0x6d, 0x12, // CI...........3m. + 0x8a, 0x4b, 0x53, 0x3a, 0x02, 0xc2, 0x15, 0x30, 0x1a, 0x2f, 0x3e, 0x7a, 0x6a, 0x6e, 0x78, 0x34, // .KS:...0./>zjnx4 + 0x3f, 0x44, 0x36, 0x31, 0x0d, 0x06, 0x62, 0x82, 0x8e, 0x86, 0xfe, 0xc6, 0x32, 0x58, 0x2b, 0x7d, // ?D61..b.....2X+} + 0x3c, 0x23, 0x6e, 0x42, 0x2e, 0x2d, 0x30, 0x00, 0xff, 0xff, 0x00, 0x62, 0x00, 0x76, 0x03, 0x6b, // <#nB.-0....b.v.k + 0x03, 0x93, 0x00, 0x26, 0x03, 0x43, 0xf6, 0xde, 0x00, 0x07, 0x03, 0x43, 0x01, 0x44, 0xff, 0xde, // ...&.C.....C.D.. + 0x00, 0x01, 0x00, 0x7f, 0x01, 0x77, 0x03, 0xc2, 0x03, 0x22, 0x00, 0x05, 0x00, 0x12, 0x00, 0xb0, // .....w..."...... + 0x04, 0x2f, 0xb1, 0x02, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ./.....+X!...Y01 + 0x01, 0x23, 0x11, 0x21, 0x35, 0x21, 0x03, 0xc2, 0xc6, 0xfd, 0x83, 0x03, 0x43, 0x01, 0x77, 0x01, // .#.!5!......C.w. + 0x06, 0xa5, 0x00, 0x00, 0xff, 0xff, 0x00, 0x23, 0x02, 0x1a, 0x02, 0x0d, 0x02, 0xb4, 0x02, 0x06, // .......#........ + 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x58, 0xff, 0xeb, 0x05, 0xe3, 0x05, 0xc4, 0x00, 0x0b, // .......X........ + 0x00, 0x17, 0x00, 0x32, 0x00, 0x3b, 0x00, 0x80, 0x00, 0xb0, 0x1b, 0x2f, 0xb0, 0x19, 0x2f, 0xb0, // ...2.;...../../. + 0x33, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, // 3/..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb1, 0x0f, 0x01, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x15, 0x01, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0xb0, 0x33, 0x01, 0x5d, 0xb2, 0x10, 0x33, 0x01, // +X!...Y..3.]..3. + 0x5d, 0xb0, 0x33, 0x10, 0xb1, 0x18, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ].3......+X!...Y + 0xb2, 0x10, 0x19, 0x01, 0x5d, 0xb2, 0x10, 0x1b, 0x01, 0x5d, 0xb2, 0x22, 0x18, 0x33, 0x11, 0x12, // ....]....].".3.. + 0x39, 0xb0, 0x19, 0x10, 0xb0, 0x2b, 0xd0, 0xb0, 0x1b, 0x10, 0xb1, 0x3a, 0x01, 0xb0, 0x0a, 0x2b, // 9....+.....:...+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x10, 0x00, 0x21, 0x20, 0x00, 0x11, 0x10, // X!...Y01...! ... + 0x00, 0x21, 0x20, 0x00, 0x13, 0x10, 0x00, 0x33, 0x32, 0x00, 0x11, 0x10, 0x00, 0x23, 0x22, 0x00, // .! ....32....#". + 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x15, 0x14, // ..#.!2.......... + 0x16, 0x17, 0x15, 0x23, 0x26, 0x26, 0x35, 0x35, 0x34, 0x26, 0x23, 0x27, 0x33, 0x36, 0x36, 0x35, // ...#&&554&#'3665 + 0x34, 0x26, 0x23, 0x23, 0x58, 0x01, 0x9e, 0x01, 0x28, 0x01, 0x27, 0x01, 0x9e, 0xfe, 0x61, 0xfe, // 4&##X...(.'...a. + 0xda, 0xfe, 0xd8, 0xfe, 0x62, 0x79, 0x01, 0x57, 0xf6, 0xf4, 0x01, 0x58, 0xfe, 0xa9, 0xf5, 0xf6, // ....by.W...X.... + 0xfe, 0xa9, 0x01, 0xbc, 0x95, 0x01, 0x18, 0x98, 0xad, 0x42, 0x3f, 0x42, 0x3b, 0x07, 0x0a, 0x99, // .........B?B;... + 0x09, 0x04, 0x43, 0x4d, 0x9f, 0x98, 0x41, 0x5b, 0x4f, 0x62, 0x83, 0x02, 0xd9, 0x01, 0x3b, 0x01, // ..CM..A[Ob....;. + 0xb0, 0xfe, 0x50, 0xfe, 0xc5, 0xfe, 0xc4, 0xfe, 0x4e, 0x01, 0xb2, 0x01, 0x3c, 0xfe, 0xf6, 0xfe, // ..P.....N...<... + 0x95, 0x01, 0x6c, 0x01, 0x09, 0x01, 0x08, 0x01, 0x69, 0xfe, 0x97, 0xfe, 0xad, 0xfe, 0xae, 0x03, // ..l.....i....... + 0x52, 0x83, 0x7e, 0x3e, 0x5e, 0x1f, 0x1a, 0x6a, 0x4b, 0x38, 0x29, 0x41, 0x15, 0x10, 0x15, 0x51, // R.~>^..jK8)A...Q + 0x2a, 0x36, 0x48, 0x44, 0x82, 0x01, 0x3f, 0x38, 0x49, 0x3b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7b, // *6HD..?8I;.....{ + 0x05, 0x1e, 0x03, 0x4c, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x17, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x03, // ...L........./.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb4, 0xaf, 0x03, 0xbf, 0x03, 0x02, 0x5d, 0x30, // ..+X...Y......]0 + 0x31, 0x01, 0x21, 0x35, 0x21, 0x03, 0x4c, 0xfd, 0x2f, 0x02, 0xd1, 0x05, 0x1e, 0x92, 0x00, 0x00, // 1.!5!.L./....... + 0x00, 0x02, 0x00, 0x80, 0x03, 0xbf, 0x02, 0x7d, 0x05, 0xc5, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x35, // .......}.......5 + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x09, // ...EX../....>Y.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x0f, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ..+X...Y.....+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x15, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, // ..Y01.4632....#" + 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x80, 0x98, 0x69, // &7..32654&#"...i + 0x67, 0x95, 0x94, 0x68, 0x6a, 0x97, 0x83, 0x49, 0x35, 0x34, 0x47, 0x48, 0x33, 0x35, 0x49, 0x04, // g..hj..I54GH35I. + 0xc0, 0x6a, 0x9b, 0x9b, 0x6a, 0x6c, 0x95, 0x95, 0x6c, 0x37, 0x48, 0x48, 0x37, 0x37, 0x4b, 0x4b, // .j..jl..l7HH77KK + 0x00, 0x02, 0x00, 0x63, 0x00, 0x04, 0x03, 0xf7, 0x04, 0xf3, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x44, // ...c...........D + 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x0c, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ........+X!...Y. + 0x04, 0x0f, 0x02, 0x11, 0x12, 0x39, 0xb0, 0x02, 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x01, 0x10, 0xb0, // .....9.......... + 0x09, 0xd0, 0x30, 0x31, 0x01, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, // ..01.!.!.#.!5!.3 + 0x01, 0x21, 0x35, 0x21, 0x02, 0x91, 0x01, 0x66, 0xfe, 0x9a, 0xb1, 0xfe, 0x83, 0x01, 0x7d, 0xb1, // .!5!...f......}. + 0x01, 0x3a, 0xfc, 0xbd, 0x03, 0x43, 0x03, 0x58, 0x9a, 0xfe, 0x63, 0x01, 0x9d, 0x9a, 0x01, 0x9b, // .:...C.X..c..... + 0xfb, 0x11, 0x9b, 0x00, 0x00, 0x01, 0x00, 0x71, 0x02, 0x9b, 0x02, 0xca, 0x05, 0xc7, 0x00, 0x1a, // .......q........ + 0x00, 0x45, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0c, 0x3e, 0x59, // .E...EX../....>Y + 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x03, 0x00, 0x11, 0x11, 0x12, // ....+X...Y...... + 0x39, 0xb0, 0x11, 0x10, 0xb1, 0x09, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // 9........+X!...Y + 0xb0, 0x03, 0x10, 0xb0, 0x17, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x1a, 0x01, 0xb0, 0x0a, 0x2b, 0x58, // ..............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x35, 0x01, 0x36, 0x36, 0x35, 0x34, 0x26, // !...Y01.!5.6654& + 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x07, // #"..#'&632...... + 0x17, 0x21, 0x02, 0xca, 0xfd, 0xb0, 0x01, 0x2e, 0x45, 0x2c, 0x39, 0x3a, 0x43, 0x49, 0xa1, 0x02, // .!......E,9:CI.. + 0x06, 0xa8, 0x8d, 0x87, 0x98, 0x59, 0x74, 0x99, 0x02, 0x01, 0x69, 0x02, 0x9b, 0x82, 0x01, 0x06, // .....Yt...i..... + 0x3c, 0x4b, 0x2a, 0x32, 0x3e, 0x40, 0x32, 0x06, 0x63, 0x8c, 0x80, 0x74, 0x50, 0x70, 0x69, 0x87, // @2.c..tPpi. + 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x02, 0x8f, 0x02, 0xe4, 0x05, 0xc6, 0x00, 0x2a, // .......j.......* + 0x00, 0x78, 0x00, 0xb0, 0x2a, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, // .x..*/..EX../... + 0x0c, 0x3e, 0x59, 0xb1, 0x06, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // .>Y.....+X!...Y. + 0x0f, 0x2a, 0x01, 0x5d, 0xb4, 0x6f, 0x2a, 0x7f, 0x2a, 0x02, 0x5d, 0xb2, 0x8f, 0x2a, 0x01, 0x71, // .*.].o*.*.]..*.q + 0xb2, 0xff, 0x2a, 0x01, 0x71, 0xb2, 0x1f, 0x2a, 0x01, 0x71, 0xb2, 0x2f, 0x2a, 0x01, 0x5d, 0xb2, // ..*.q..*.q./*.]. + 0x3f, 0x2a, 0x01, 0x72, 0xb2, 0x70, 0x2a, 0x01, 0x72, 0xb0, 0x2a, 0x10, 0xb1, 0x29, 0x01, 0xb0, // ?*.r.p*.r.*..).. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x2a, 0x29, 0x11, 0x12, 0x39, 0xb0, // .+X!...Y..*)..9. + 0x0e, 0x10, 0xb0, 0x1a, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x22, 0x01, 0xb0, // ......+X...Y.".. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x36, 0x35, 0x34, 0x26, // .+X!...Y01.2654& + 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, // #"..#'&632...... + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, // ....#"&773..3265 + 0x34, 0x26, 0x23, 0x23, 0x35, 0x01, 0xa8, 0x43, 0x41, 0x49, 0x45, 0x38, 0x45, 0xa2, 0x02, 0x06, // 4&##5..CAIE8E... + 0xa9, 0x7e, 0x91, 0xa8, 0x47, 0x3e, 0x46, 0x4c, 0xb4, 0x92, 0x7f, 0xb5, 0x06, 0x01, 0xa3, 0x4b, // .~..G>FL.......K + 0x3f, 0x48, 0x54, 0x49, 0x49, 0x84, 0x04, 0x71, 0x39, 0x34, 0x2b, 0x3a, 0x30, 0x28, 0x06, 0x5e, // ?HTII..q94+:0(.^ + 0x77, 0x77, 0x6e, 0x37, 0x5b, 0x1a, 0x17, 0x60, 0x44, 0x6f, 0x7c, 0x74, 0x6f, 0x06, 0x2e, 0x39, // wwn7[..`Do|to..9 + 0x3b, 0x30, 0x3e, 0x39, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x83, 0x04, 0xbb, 0x02, 0x24, // ;0>9~..........$ + 0x05, 0xc5, 0x00, 0x04, 0x00, 0x4b, 0x00, 0xb0, 0x03, 0x2f, 0xb2, 0x3f, 0x03, 0x01, 0x5d, 0xb2, // .....K.../.?..]. + 0x7f, 0x03, 0x01, 0x5d, 0xb2, 0xff, 0x03, 0x01, 0x5d, 0xb2, 0x6f, 0x03, 0x01, 0x71, 0xb2, 0x1f, // ...]....].o..q.. + 0x03, 0x01, 0x71, 0xb2, 0xaf, 0x03, 0x01, 0x5d, 0xb2, 0x5f, 0x03, 0x01, 0x5d, 0xb2, 0x0f, 0x03, // ..q....]._..]... + 0x01, 0x5d, 0xb2, 0x4f, 0x03, 0x01, 0x71, 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, // .].O..q....+X... + 0x59, 0xb2, 0xaf, 0x00, 0x01, 0x5d, 0xb6, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x03, 0x5d, 0x30, // Y....]...../..]0 + 0x31, 0x01, 0x33, 0x17, 0x01, 0x23, 0x01, 0x3c, 0xe6, 0x02, 0xfe, 0xf2, 0x93, 0x05, 0xc5, 0x06, // 1.3..#.<........ + 0xfe, 0xfc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x99, 0xfe, 0x60, 0x03, 0xf2, 0x04, 0x3a, 0x00, 0x15, // .........`...:.. + 0x00, 0x53, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, // .S...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ..>Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, // ..Y01....3267.3. + 0x23, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x01, 0x5d, 0x02, 0x6f, 0x64, // #'..#"&'.#..].od + 0x62, 0x79, 0x20, 0xc5, 0xb1, 0x09, 0x2c, 0x7f, 0x53, 0x48, 0x6d, 0x28, 0xc4, 0x04, 0x3a, 0xfd, // by ...,.SHm(..:. + 0x7e, 0xb2, 0x81, 0x48, 0x46, 0x03, 0x27, 0xfb, 0xc6, 0x6c, 0x3f, 0x42, 0x21, 0x23, 0xfe, 0x31, // ~..HF.'..l?B!#.1 + 0x05, 0xda, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x03, 0x44, 0x05, 0xb0, 0x00, 0x0a, // .......?...D.... + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0x30, 0x31, 0x21, // ..EX../....>Y01! + 0x11, 0x23, 0x22, 0x00, 0x35, 0x34, 0x00, 0x33, 0x21, 0x11, 0x02, 0x7f, 0x54, 0xe9, 0xfe, 0xfd, // .#".54.3!...T... + 0x01, 0x03, 0xe9, 0x01, 0x19, 0x02, 0x08, 0x01, 0x03, 0xd1, 0xcf, 0x01, 0x05, 0xfa, 0x50, 0x00, // ..............P. + 0x00, 0x01, 0x00, 0xa1, 0x02, 0x70, 0x01, 0x67, 0x03, 0x44, 0x00, 0x03, 0x00, 0x10, 0x00, 0xb0, // .....p.g.D...... + 0x03, 0x2f, 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x23, // ./....+X...Y01.# + 0x35, 0x33, 0x01, 0x67, 0xc6, 0xc6, 0x02, 0x70, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x77, // 53.g...p.......w + 0xfe, 0x4d, 0x01, 0xaf, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x27, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .M.......'...EX. + 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x08, 0x3e, 0x59, 0xb0, 0x08, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // ./....>Y....+X.. + 0xdc, 0x59, 0xb0, 0x07, 0x10, 0xb0, 0x0f, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, // .Y.......+X...Y0 + 0x31, 0x21, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x27, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, // 1!......#'2654&' + 0x37, 0x01, 0x24, 0x0c, 0x41, 0x56, 0x9e, 0x93, 0x07, 0x48, 0x58, 0x48, 0x57, 0x20, 0x34, 0x0b, // 7.$.AV...HXHW 4. + 0x52, 0x50, 0x60, 0x72, 0x6d, 0x31, 0x31, 0x30, 0x26, 0x07, 0x87, 0x00, 0x00, 0x01, 0x00, 0x5f, // RP`rm110&......_ + 0x02, 0x99, 0x01, 0x8c, 0x05, 0xc5, 0x00, 0x05, 0x00, 0x31, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........1...EX. + 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // ./....>Y....+X.. + 0xdc, 0x59, 0xb0, 0x05, 0x10, 0xb0, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, // .Y.......+X...Y. + 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x35, // ...+X...Y01.#.#5 + 0x25, 0x01, 0x8c, 0xae, 0x7f, 0x01, 0x2d, 0x02, 0x99, 0x02, 0x8f, 0x86, 0x17, 0x00, 0x00, 0x00, // %.....-......... + 0x00, 0x02, 0x00, 0x78, 0x02, 0xb3, 0x03, 0x2b, 0x05, 0xc5, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x67, // ...x...+.......g + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x0a, // ...EX../....>Y.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0xd0, 0x0a, 0x01, 0x5d, 0xb2, 0x8f, 0x0a, // ..+X...Y....]... + 0x01, 0x5d, 0xb2, 0xdf, 0x0a, 0x01, 0x71, 0xb2, 0x2f, 0x0a, 0x01, 0x72, 0xb2, 0x5f, 0x0a, 0x01, // .]....q./..r._.. + 0x72, 0xb2, 0x0f, 0x0a, 0x01, 0x72, 0xb2, 0xbf, 0x0a, 0x01, 0x5d, 0xb2, 0x8f, 0x0a, 0x01, 0x72, // r....r....]....r + 0xb2, 0x20, 0x0a, 0x01, 0x5d, 0xb2, 0x00, 0x0a, 0x01, 0x5d, 0xb1, 0x11, 0x05, 0xb0, 0x0a, 0x2b, // . ..]....].....+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x18, 0x05, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, // !...Y01.4632.... + 0x06, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, // .#"&53..326554&# + 0x22, 0x06, 0x15, 0x78, 0xbc, 0x9d, 0x9e, 0xbc, 0xbb, 0x9d, 0x9e, 0xbd, 0xad, 0x58, 0x56, 0x53, // "..x.........XVS + 0x59, 0x5a, 0x54, 0x54, 0x58, 0x04, 0x76, 0x94, 0xbb, 0xbb, 0x94, 0x75, 0x95, 0xb9, 0xb9, 0x95, // YZTTX.v....u.... + 0x58, 0x69, 0x6a, 0x57, 0x75, 0x54, 0x6b, 0x6b, 0x54, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6e, // XijWuTkkT......n + 0x00, 0x98, 0x03, 0x83, 0x03, 0xb5, 0x00, 0x26, 0x03, 0x44, 0x16, 0x00, 0x00, 0x07, 0x03, 0x44, // .......&.D.....D + 0x01, 0x70, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x05, 0xe2, 0x05, 0xc4, 0x00, 0x27, // .p.............' + 0x03, 0xae, 0x00, 0x59, 0x02, 0x98, 0x00, 0x27, 0x03, 0x46, 0x01, 0x18, 0x00, 0x08, 0x01, 0x07, // ...Y...'.F...... + 0x03, 0xaa, 0x02, 0xba, 0x00, 0x00, 0x00, 0x20, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, // ....... ...EX../ + 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x16, 0xd0, 0x30, 0x31, 0xff, 0xff, 0x00, 0xb8, 0x00, 0x00, 0x05, 0xf5, // .>Y...01........ + 0x05, 0xc4, 0x00, 0x27, 0x03, 0x46, 0x01, 0x25, 0x00, 0x08, 0x00, 0x27, 0x03, 0xae, 0x00, 0x59, // ...'.F.%...'...Y + 0x02, 0x98, 0x01, 0x07, 0x03, 0xac, 0x03, 0x2b, 0x00, 0x00, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, // .......+.......E + 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x7a, // /....>Y01......z + 0x00, 0x00, 0x06, 0x9f, 0x05, 0xc7, 0x00, 0x27, 0x03, 0x46, 0x01, 0xcf, 0x00, 0x08, 0x00, 0x27, // .......'.F.....' + 0x03, 0xaa, 0x03, 0x77, 0x00, 0x00, 0x01, 0x07, 0x03, 0xab, 0x00, 0x10, 0x02, 0x9b, 0x00, 0x20, // ...w........... + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX."/..".>Y.. + 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x10, 0xd0, 0x30, 0x31, // EX../....>Y...01 + 0x00, 0x02, 0x00, 0x72, 0xfe, 0x76, 0x03, 0xad, 0x04, 0x3b, 0x00, 0x1a, 0x00, 0x1e, 0x00, 0x35, // ...r.v...;.....5 + 0x00, 0xb0, 0x11, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x0a, 0x3e, // .../..EX../....> + 0x59, 0xb1, 0x1d, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x00, 0x1d, // Y.....+X!...Y... + 0x11, 0x11, 0x12, 0x39, 0xb0, 0x11, 0x10, 0xb1, 0x09, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...9........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x06, 0x06, 0x07, 0x06, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, // ..Y01.........32 + 0x36, 0x35, 0x33, 0x17, 0x16, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, // 653...#"&5467665 + 0x03, 0x33, 0x15, 0x23, 0x02, 0x85, 0x02, 0x30, 0x65, 0x64, 0x53, 0x70, 0x6a, 0x5a, 0x81, 0xbc, // .3.#...0edSpjZ.. + 0x03, 0x02, 0xe9, 0xb3, 0xc6, 0xd9, 0x8c, 0x75, 0x35, 0x18, 0x07, 0xce, 0xce, 0x02, 0xa0, 0x92, // .......u5....... + 0x70, 0x5b, 0x76, 0x7e, 0x57, 0x6a, 0x72, 0x63, 0x60, 0x06, 0xa1, 0xc2, 0xc9, 0xb4, 0x7f, 0xd5, // p[v~Wjrc`....... + 0x72, 0x35, 0x56, 0x5c, 0x01, 0x9b, 0xd1, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // r5V............. + 0x07, 0x22, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x01, 0x28, 0x01, 0x5d, // .".&.$.....C.(.] + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // ....]01......... + 0x07, 0x1e, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0xe2, 0x01, 0x59, // ...&.$.....v...Y + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x0d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // ....]01......... + 0x07, 0x48, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x00, 0xb9, 0x01, 0x5d, // .H.&.$.....R...] + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x07, 0x54, 0x02, 0x26, // 01...........T.& + 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, 0x00, 0xb5, 0x01, 0x61, 0x00, 0x10, 0x00, 0xb0, // .$.....X...a.... + 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // ...........&.$.. + 0x01, 0x07, 0x00, 0x6a, 0x00, 0x95, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...j...].....EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // ...>Y01......... + 0x07, 0x8c, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x01, 0x56, 0x01, 0x44, 0x01, 0xaa, // ...&.$.....V.D.. + 0x00, 0x49, 0x00, 0xb2, 0xb0, 0x15, 0x01, 0x72, 0xb2, 0x2f, 0x15, 0x01, 0x5d, 0xb2, 0x0f, 0x15, // .I.....r./..]... + 0x01, 0x5d, 0xb2, 0x7f, 0x15, 0x01, 0x5d, 0xb2, 0x00, 0x15, 0x01, 0x72, 0xb2, 0x70, 0x15, 0x01, // .]....]....r.p.. + 0x72, 0xb2, 0x50, 0x15, 0x01, 0x72, 0xb2, 0x70, 0x1b, 0x01, 0x72, 0xb2, 0x2f, 0x1b, 0x01, 0x5d, // r.P..r.p..r./..] + 0xb2, 0x0f, 0x1b, 0x01, 0x5d, 0xb2, 0x7f, 0x1b, 0x01, 0x5d, 0xb2, 0xb0, 0x1b, 0x01, 0x72, 0xb2, // ....]....]....r. + 0x50, 0x1b, 0x01, 0x72, 0xb2, 0x00, 0x1b, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x02, 0xff, 0xec, // P..r....r01..... + 0x00, 0x00, 0x07, 0x61, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x13, 0x00, 0xd5, 0x00, 0xb0, 0x0a, 0x2f, // ...a.........../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb2, 0x03, 0x04, 0x06, 0x11, 0x12, 0x39, 0xb0, 0x03, // /....>Y......9.. + 0x2f, 0x40, 0x09, 0x8f, 0x03, 0x9f, 0x03, 0xaf, 0x03, 0xbf, 0x03, 0x04, 0x5d, 0xb2, 0x0f, 0x03, // /@..........]... + 0x01, 0x71, 0xb2, 0x5f, 0x03, 0x01, 0x5d, 0xb6, 0x4f, 0x03, 0x5f, 0x03, 0x6f, 0x03, 0x03, 0x71, // .q._..].O._.o..q + 0xb0, 0x06, 0x10, 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ........+X!...Y. + 0xef, 0x0a, 0x01, 0x5d, 0xb2, 0x2f, 0x0a, 0x01, 0x5d, 0xb0, 0x0a, 0x10, 0xb1, 0x0d, 0x02, 0xb0, // ...]./..]....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0e, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x5e, 0x12, 0x01, 0x71, 0xb2, 0x7c, 0x12, 0x01, 0x71, // X!...Y.^..q.|..q + 0xb0, 0x06, 0x10, 0xb0, 0x13, 0xd0, 0xb2, 0x7c, 0x13, 0x01, 0x71, 0xb2, 0x4c, 0x13, 0x01, 0x71, // .......|..q.L..q + 0xb2, 0x7f, 0x13, 0x01, 0x5d, 0xb2, 0x5e, 0x13, 0x01, 0x71, 0xb6, 0x4c, 0x13, 0x5c, 0x13, 0x6c, // ....].^..q.L...l + 0x13, 0x03, 0x5d, 0xb2, 0x8c, 0x13, 0x01, 0x5d, 0xb4, 0x2a, 0x13, 0x3a, 0x13, 0x02, 0x5d, 0x30, // ..]....].*.:..]0 + 0x31, 0x21, 0x21, 0x03, 0x21, 0x03, 0x23, 0x01, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x21, 0x13, // 1!!.!.#.!.!.!.!. + 0x21, 0x01, 0x21, 0x03, 0x27, 0x07, 0x61, 0xfc, 0x81, 0x0f, 0xfd, 0xd3, 0xca, 0xf0, 0x03, 0x70, // !.!.'.a........p + 0x03, 0xc7, 0xfd, 0x4d, 0x14, 0x02, 0x4e, 0xfd, 0xb8, 0x16, 0x02, 0xc1, 0xfa, 0xac, 0x01, 0xbf, // ...M..N......... + 0x1f, 0x05, 0x01, 0x5e, 0xfe, 0xa2, 0x05, 0xb0, 0x9b, 0xfe, 0x2e, 0x9b, 0xfd, 0xf2, 0x01, 0x77, // ...^...........w + 0x02, 0xc6, 0x02, 0x00, 0xff, 0xff, 0x00, 0x76, 0xfe, 0x45, 0x04, 0xbf, 0x05, 0xc5, 0x02, 0x26, // .......v.E.....& + 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x00, 0x7a, 0x01, 0xce, 0xff, 0xf8, 0xff, 0xff, 0x00, 0xb4, // .&.....z........ + 0x00, 0x00, 0x04, 0x7a, 0x07, 0x22, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, // ...z.".&.(.....C + 0x00, 0xdd, 0x01, 0x5d, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // ...].....EX../.. + 0x10, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, // ..>Y....]01..... + 0x00, 0x00, 0x04, 0x7a, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...z...&.(.....v + 0x01, 0x97, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, // ...Y.....EX../.. + 0x0c, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x0c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, // ..>Y....]01..... + 0x00, 0x00, 0x04, 0x7a, 0x07, 0x48, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, // ...z.H.&.(.....R + 0x00, 0x97, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // ...].....EX../.. + 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, // ..>Y01.........z + 0x07, 0x0d, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0x72, 0x01, 0x5d, // ...&.(.....j.r.] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0xff, 0xff, 0xff, 0xde, 0x00, 0x00, 0x01, 0x84, 0x07, 0x22, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, // .........".&.,.. + 0x01, 0x07, 0x00, 0x43, 0xff, 0x8c, 0x01, 0x5d, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...C...].....EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x08, 0x01, 0x5d, 0x30, 0x31, 0x00, // ./....>Y....]01. + 0xff, 0xff, 0x00, 0xbe, 0x00, 0x00, 0x02, 0x68, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, // .......h...&.,.. + 0x01, 0x07, 0x00, 0x76, 0x00, 0x44, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...v.D.Y.....EX. + 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x04, 0x01, 0x5d, 0x30, 0x31, 0x00, // ./....>Y....]01. + 0xff, 0xff, 0xff, 0xf1, 0x00, 0x00, 0x02, 0x57, 0x07, 0x48, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, // .......W.H.&.,.. + 0x01, 0x07, 0x01, 0x52, 0xff, 0x46, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...R.F.].....EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcb, // ./....>Y01...... + 0x00, 0x00, 0x02, 0x7c, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...|...&.,.....j + 0xff, 0x21, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, // .!.].....EX../.. + 0x08, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x12, 0x3e, // ..>Y..EX../....> + 0x59, 0x30, 0x31, 0x00, 0x00, 0x02, 0x00, 0x2a, 0x00, 0x00, 0x05, 0x09, 0x05, 0xb0, 0x00, 0x0d, // Y01....*........ + 0x00, 0x1b, 0x00, 0x74, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, // ...t.../..EX../. + 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0xcf, 0x04, 0x01, 0x5d, 0xb2, 0x1f, 0x04, 0x01, 0x71, 0xb2, 0xbf, 0x04, 0x01, // >Y....]....q.... + 0x71, 0xb2, 0xef, 0x04, 0x01, 0x5d, 0xb2, 0x7f, 0x04, 0x01, 0x5d, 0xb2, 0x2f, 0x04, 0x01, 0x5d, // q....]....]./..] + 0xb0, 0x04, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x0e, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ..........+X!... + 0x59, 0xb0, 0x05, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x04, 0x10, 0xb0, 0x1a, 0xd0, 0x30, 0x31, 0x33, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x20, // ......013.#53.! + 0x00, 0x11, 0x15, 0x10, 0x00, 0x21, 0x13, 0x21, 0x11, 0x33, 0x32, 0x12, 0x35, 0x35, 0x34, 0x02, // .....!.!.32.554. + 0x23, 0x23, 0x11, 0x21, 0xd2, 0xa8, 0xa8, 0x01, 0xbf, 0x01, 0x1e, 0x01, 0x5a, 0xfe, 0xa6, 0xfe, // ##.!........Z... + 0xe2, 0x1a, 0xfe, 0xec, 0xfa, 0xca, 0xe9, 0xe9, 0xca, 0xfa, 0x01, 0x14, 0x02, 0x97, 0x9b, 0x02, // ................ + 0x7e, 0xfe, 0xa1, 0xfe, 0xea, 0xc7, 0xfe, 0xe9, 0xfe, 0xa3, 0x02, 0x97, 0xfe, 0x03, 0x01, 0x0a, // ~............... + 0xd0, 0xc9, 0xce, 0x01, 0x0a, 0xfe, 0x1d, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, // ................ + 0x07, 0x54, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, 0x00, 0xf6, 0x01, 0x61, // .T.&.1.....X...a + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x37, 0x02, 0x26, // 01.....q.....7.& + 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x01, 0x23, 0x01, 0x72, 0x00, 0x15, 0x00, 0xb0, // .2.....C.#.r.... + 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x20, 0x01, // .EX. /.. .>Y.. . + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x33, 0x02, 0x26, // ]01....q.....3.& + 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0xdd, 0x01, 0x6e, 0x00, 0x15, 0x00, 0xb0, // .2.....v...n.... + 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x1c, 0x01, // .EX../....>Y.... + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x5d, 0x02, 0x26, // ]01....q.....].& + 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x00, 0xdd, 0x01, 0x72, 0x00, 0x10, 0x00, 0xb0, // .2.....R...r.... + 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX. /.. .>Y01.. + 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x69, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, // ...q.....i.&.2.. + 0x01, 0x07, 0x01, 0x58, 0x00, 0xd8, 0x01, 0x76, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...X...v.....EX. + 0x25, 0x2f, 0x1b, 0xb1, 0x25, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, // %/..%.>Y01.....q + 0xff, 0xeb, 0x05, 0x02, 0x07, 0x22, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // .....".&.2.....j + 0x00, 0xb8, 0x01, 0x72, 0x00, 0x13, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, // ...r.....EX. /.. + 0x20, 0x12, 0x3e, 0x59, 0xb0, 0x1d, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, // .>Y...01......X + 0x00, 0xe1, 0x03, 0xe1, 0x04, 0x79, 0x00, 0x0b, 0x00, 0x19, 0x00, 0xb0, 0x03, 0x2f, 0xb0, 0x05, // .....y......./.. + 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x0b, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x09, // ........+X...Y.. + 0xd0, 0x30, 0x31, 0x13, 0x01, 0x01, 0x37, 0x01, 0x01, 0x17, 0x01, 0x01, 0x07, 0x01, 0x01, 0x58, // .01...7........X + 0x01, 0x47, 0xfe, 0xb9, 0x7e, 0x01, 0x46, 0x01, 0x47, 0x7e, 0xfe, 0xb8, 0x01, 0x48, 0x7e, 0xfe, // .G..~.F.G~...H~. + 0xb9, 0xfe, 0xba, 0x01, 0x5f, 0x01, 0x4e, 0x01, 0x4e, 0x7e, 0xfe, 0xb3, 0x01, 0x4d, 0x7e, 0xfe, // ...._.N.N~...M~. + 0xb2, 0xfe, 0xb2, 0x7e, 0x01, 0x4c, 0xfe, 0xb4, 0x00, 0x03, 0x00, 0x71, 0xff, 0xa2, 0x05, 0x02, // ...~.L.....q.... + 0x05, 0xed, 0x00, 0x19, 0x00, 0x25, 0x00, 0x31, 0x00, 0x52, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....%.1.R...EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb1, 0x2e, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb0, 0x10, 0x10, 0xb1, 0x22, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y...."...+X!...Y + 0xb2, 0x1e, 0x2e, 0x22, 0x11, 0x12, 0x39, 0xb2, 0x2a, 0x22, 0x2e, 0x11, 0x12, 0x39, 0xb0, 0x2a, // ..."..9.*"...9.* + 0x10, 0xb0, 0x1f, 0xd0, 0xb0, 0x1e, 0x10, 0xb0, 0x2b, 0xd0, 0x30, 0x31, 0x01, 0x10, 0x00, 0x21, // ........+.01...! + 0x22, 0x26, 0x27, 0x07, 0x23, 0x37, 0x26, 0x26, 0x35, 0x11, 0x10, 0x00, 0x33, 0x32, 0x16, 0x17, // "&'.#7&&5...32.. + 0x37, 0x33, 0x07, 0x16, 0x16, 0x15, 0x01, 0x14, 0x16, 0x17, 0x17, 0x01, 0x26, 0x26, 0x23, 0x22, // 73..........&&#" + 0x02, 0x15, 0x21, 0x34, 0x26, 0x27, 0x27, 0x01, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x05, 0x02, // ..!4&''...3265.. + 0xfe, 0xb5, 0xfe, 0xf8, 0x55, 0x97, 0x40, 0x5b, 0x95, 0x8b, 0x54, 0x59, 0x01, 0x3f, 0xff, 0x5e, // ....U.@[..TY.?.^ + 0xa9, 0x48, 0x51, 0x95, 0x84, 0x4d, 0x55, 0xfc, 0x34, 0x26, 0x23, 0x06, 0x02, 0x20, 0x32, 0x7c, // .HQ..MU.4&#.. 2| + 0x48, 0xac, 0xcd, 0x03, 0x07, 0x21, 0x1e, 0x06, 0xfd, 0xe3, 0x2c, 0x6a, 0x3e, 0xb7, 0xd7, 0x02, // H....!....,j>... + 0x56, 0xfe, 0xf5, 0xfe, 0xa0, 0x29, 0x28, 0x9a, 0xea, 0x54, 0xec, 0x8a, 0x01, 0x03, 0x01, 0x0a, // V....)(..T...... + 0x01, 0x62, 0x33, 0x2e, 0x89, 0xdd, 0x54, 0xe2, 0x81, 0xfe, 0xfd, 0x55, 0x92, 0x34, 0x01, 0x03, // .b3...T....U.4.. + 0x94, 0x29, 0x2c, 0xff, 0x00, 0xc8, 0x4b, 0x86, 0x32, 0x01, 0xfc, 0x71, 0x22, 0x22, 0xff, 0xcb, // .),...K.2..q"".. + 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x22, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // .........".&.8.. + 0x01, 0x07, 0x00, 0x43, 0x01, 0x22, 0x01, 0x5d, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...C.".].....EX. + 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, // ./....>Y....]01. + 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // ...........&.8.. + 0x01, 0x07, 0x00, 0x76, 0x01, 0xdc, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...v...Y.....EX. + 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x12, 0x01, 0x5d, 0x30, 0x31, 0x00, // ./....>Y....]01. + 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x48, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // .........H.&.8.. + 0x01, 0x07, 0x01, 0x52, 0x00, 0xdc, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...R...].....EX. + 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x93, // ./....>Y01...... + 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // .......&.8.....j + 0x00, 0xb7, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, // ...].....EX../.. + 0x16, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x12, 0x3e, // ..>Y..EX../....> + 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, 0x07, 0x1d, 0x02, 0x26, // Y01............& + 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x94, 0x01, 0x58, 0x00, 0x15, 0x00, 0xb0, // .<.....v...X.... + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x09, 0x01, // .EX../....>Y.... + 0x5d, 0x30, 0x31, 0x00, 0x00, 0x02, 0x00, 0xa3, 0x00, 0x00, 0x04, 0x61, 0x05, 0xb0, 0x00, 0x0c, // ]01........a.... + 0x00, 0x15, 0x00, 0x41, 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x09, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...A.../../..EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x21, 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, // ..Y01..!2....#!. + 0x23, 0x11, 0x13, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x68, 0x01, 0x0d, 0xe8, // #...!2654&#.h... + 0x01, 0x04, 0xfe, 0xfc, 0xe8, 0xfe, 0xf3, 0xc5, 0xc5, 0x01, 0x0d, 0x93, 0x93, 0x93, 0x93, 0x05, // ................ + 0xb0, 0xfe, 0xdb, 0xec, 0xbd, 0xbe, 0xeb, 0xfe, 0xc7, 0x05, 0xb0, 0xfe, 0x41, 0xfd, 0xe2, 0x9c, // ............A... + 0x71, 0x72, 0x9f, 0x00, 0x00, 0x01, 0x00, 0x89, 0xff, 0xeb, 0x04, 0x70, 0x06, 0x13, 0x00, 0x27, // qr.........p...' + 0x00, 0x3e, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, // .>.../..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x11, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x05, 0x10, 0xb1, 0x24, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ...$...+X!...Y01 + 0x21, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x15, 0x14, 0x00, 0x15, 0x14, // !#.4632......... + 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x00, 0x35, 0x34, // .#"&'7..32654.54 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x4d, 0xc4, 0xeb, 0xb7, 0xa1, 0xca, 0x81, // 654&#"...M...... + 0x01, 0x5b, 0xd1, 0xb2, 0x54, 0xb1, 0x25, 0x2c, 0x2b, 0x82, 0x3d, 0x6c, 0x66, 0xfe, 0xa5, 0x8d, // .[..T.%,+.=lf... + 0x66, 0x42, 0x68, 0x80, 0x04, 0x3a, 0xdf, 0xfa, 0xac, 0xa7, 0x76, 0xdc, 0x39, 0x52, 0xfe, 0xe4, // fBh..:....v.9R.. + 0x8b, 0xa7, 0xaa, 0x29, 0x1e, 0x9f, 0x1c, 0x30, 0x5f, 0x4e, 0x54, 0x01, 0x1f, 0x92, 0x50, 0xdd, // ...)...0_NT...P. + 0x4c, 0x5d, 0x6c, 0xa7, 0x98, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, // L]l........j.... + 0x05, 0xe0, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0x94, 0x00, 0x1b, // ...&.D.....C.... + 0x00, 0x08, 0x00, 0xb2, 0xbf, 0x2c, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // .....,.q01.....j + 0xff, 0xeb, 0x03, 0xf3, 0x05, 0xdc, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.D.....v + 0x01, 0x4e, 0x00, 0x17, 0x00, 0x1a, 0x00, 0xb2, 0xbf, 0x2f, 0x01, 0x71, 0xb6, 0xdf, 0x2f, 0xef, // .N......./.q../. + 0x2f, 0xff, 0x2f, 0x03, 0x71, 0xb6, 0x0f, 0x2f, 0x1f, 0x2f, 0x2f, 0x2f, 0x03, 0x72, 0x30, 0x31, // /./.q.././//.r01 + 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x06, 0x06, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, // ...j.......&.D.. + 0x01, 0x06, 0x01, 0x52, 0x4e, 0x1b, 0x00, 0x1d, 0x00, 0xb6, 0xd0, 0x30, 0xe0, 0x30, 0xf0, 0x30, // ...RN......0.0.0 + 0x03, 0x71, 0xb4, 0x00, 0x30, 0x10, 0x30, 0x02, 0x72, 0xb2, 0x60, 0x30, 0x01, 0x72, 0xb2, 0x40, // .q..0.0.r.`0.r.@ + 0x30, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, // 0.r01......j.... + 0x06, 0x12, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, 0x49, 0x1f, 0x00, 0x22, // ...&.D.....XI.." + 0x00, 0xb4, 0x60, 0x2f, 0x70, 0x2f, 0x02, 0x72, 0x40, 0x0b, 0x90, 0x2f, 0xa0, 0x2f, 0xb0, 0x2f, // ..`/p/.r@../././ + 0xc0, 0x2f, 0xd0, 0x2f, 0x05, 0x71, 0xb2, 0x40, 0x2f, 0x01, 0x72, 0xb2, 0x20, 0x2f, 0x01, 0x72, // ././.q.@/.r. /.r + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x05, 0xcb, 0x02, 0x26, // 01.....j.......& + 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x29, 0x1b, 0x00, 0x2f, 0x00, 0xb2, 0xf0, 0x2d, // .D.....j)../...- + 0x01, 0x71, 0xb4, 0x00, 0x2d, 0x10, 0x2d, 0x02, 0x72, 0xb2, 0x60, 0x2d, 0x01, 0x72, 0xb2, 0x40, // .q..-.-.r.`-.r.@ + 0x2d, 0x01, 0x72, 0xb2, 0xf0, 0x30, 0x01, 0x71, 0xb4, 0x00, 0x30, 0x10, 0x30, 0x02, 0x72, 0xb2, // -.r..0.q..0.0.r. + 0x60, 0x30, 0x01, 0x72, 0xb2, 0x40, 0x30, 0x01, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x6a, // `0.r.@0.r01....j + 0xff, 0xeb, 0x03, 0xf3, 0x06, 0x4a, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x07, 0x01, 0x56, // .....J.&.D.....V + 0x00, 0xd5, 0x00, 0x68, 0x00, 0x91, 0x00, 0xb2, 0x80, 0x35, 0x01, 0x5d, 0xb2, 0xc0, 0x35, 0x01, // ...h.....5.]..5. + 0x5d, 0xb2, 0x10, 0x35, 0x01, 0x71, 0xb2, 0x70, 0x35, 0x01, 0x71, 0xb2, 0x00, 0x35, 0x01, 0x72, // ]..5.q.p5.q..5.r + 0xb2, 0x0f, 0x35, 0x01, 0x5d, 0xb2, 0x50, 0x35, 0x01, 0x72, 0xb6, 0x90, 0x35, 0xa0, 0x35, 0xb0, // ..5.].P5.r..5.5. + 0x35, 0x03, 0x71, 0xb2, 0x50, 0x35, 0x01, 0x71, 0xb4, 0xe0, 0x35, 0xf0, 0x35, 0x02, 0x5d, 0xb2, // 5.q.P5.q..5.5.]. + 0xa0, 0x35, 0x01, 0x5d, 0xb2, 0x60, 0x35, 0x01, 0x5d, 0xb2, 0x10, 0x35, 0x01, 0x5d, 0xb2, 0x80, // .5.].`5.]..5.].. + 0x3b, 0x01, 0x5d, 0xb2, 0xc0, 0x3b, 0x01, 0x5d, 0xb2, 0x10, 0x3b, 0x01, 0x71, 0xb2, 0x70, 0x3b, // ;.]..;.]..;.q.p; + 0x01, 0x71, 0xb2, 0x00, 0x3b, 0x01, 0x72, 0xb2, 0x0f, 0x3b, 0x01, 0x5d, 0xb2, 0x50, 0x3b, 0x01, // .q..;.r..;.].P;. + 0x72, 0xb6, 0x90, 0x3b, 0xa0, 0x3b, 0xb0, 0x3b, 0x03, 0x71, 0xb2, 0x50, 0x3b, 0x01, 0x71, 0xb4, // r..;.;.;.q.P;.q. + 0xe0, 0x3b, 0xf0, 0x3b, 0x02, 0x5d, 0xb2, 0xa0, 0x3b, 0x01, 0x5d, 0xb2, 0x60, 0x3b, 0x01, 0x5d, // .;.;.]..;.].`;.] + 0xb2, 0x10, 0x3b, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x03, 0x00, 0x3a, 0xff, 0xeb, 0x06, 0x7c, // ..;.]01....:...| + 0x04, 0x4e, 0x00, 0x2e, 0x00, 0x39, 0x00, 0x42, 0x00, 0x99, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .N...9.B.....EX. + 0x19, 0x2f, 0x1b, 0xb1, 0x19, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1f, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x1f, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x23, 0x00, 0x1f, 0x11, 0x12, 0x39, 0xb0, 0x23, 0x2f, 0xb4, 0xd0, 0x23, 0xe0, 0x23, 0x02, 0x5d, // #....9.#/..#.#.] + 0xb2, 0xa0, 0x23, 0x01, 0x5d, 0xb1, 0x3f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ..#.].?...+X!... + 0x59, 0xb0, 0x0d, 0xd0, 0xb0, 0x19, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // Y...........+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x0d, 0x19, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb1, 0x28, 0x02, // ..Y......9....(. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x2f, 0xd0, 0xb0, 0x23, 0x10, 0xb0, // ..+X!...Y./..#.. + 0x33, 0xd0, 0xb0, 0x1f, 0x10, 0xb1, 0x3a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // 3.....:...+X!... + 0x59, 0x30, 0x31, 0x05, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, // Y01."&'..#"&5463 + 0x33, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x27, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x17, // 354&#"..''&632.. + 0x36, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x07, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, // 6632...!...3267. + 0x06, 0x06, 0x25, 0x32, 0x36, 0x37, 0x35, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x01, 0x22, 0x06, // ..%2675#".....". + 0x07, 0x17, 0x21, 0x35, 0x34, 0x26, 0x04, 0xee, 0x88, 0xd0, 0x42, 0x38, 0xdf, 0xa0, 0xaa, 0xb9, // ..!54&....B8.... + 0xe6, 0xdc, 0xe5, 0x67, 0x62, 0x67, 0x7a, 0xbc, 0x02, 0x05, 0xe5, 0xbf, 0x72, 0xaf, 0x32, 0x40, // ...gbgz.....r.2@ + 0xaf, 0x65, 0xd6, 0xe7, 0xfd, 0x3b, 0x02, 0x01, 0x9d, 0x9b, 0x67, 0x85, 0x4e, 0x43, 0x35, 0xbc, // .e...;....g.NC5. + 0xfc, 0x4a, 0x4c, 0xa6, 0x2b, 0xe3, 0x78, 0x87, 0x64, 0x03, 0x5c, 0x71, 0x8a, 0x0b, 0x02, 0x01, // .JL.+.x.d..q.... + 0xfc, 0x78, 0x15, 0x61, 0x5a, 0x4f, 0x6c, 0xae, 0x97, 0x9e, 0xad, 0x55, 0x6a, 0x79, 0x6e, 0x4e, // .x.aZOl....UjynN + 0x12, 0x06, 0x8a, 0xb5, 0x51, 0x4d, 0x4b, 0x53, 0xfe, 0xfc, 0xe4, 0x77, 0x05, 0x9f, 0xc6, 0x37, // ....QMKS...w...7 + 0x33, 0x8a, 0x2c, 0x4e, 0x9a, 0x57, 0x39, 0xd8, 0x70, 0x51, 0x4a, 0x5d, 0x03, 0x2e, 0xa9, 0x85, // 3.,N.W9.pQJ].... + 0x05, 0x1f, 0x7a, 0x9a, 0xff, 0xff, 0x00, 0x61, 0xfe, 0x45, 0x03, 0xf6, 0x04, 0x4e, 0x02, 0x26, // ..z....a.E...N.& + 0x00, 0x46, 0x00, 0x00, 0x00, 0x07, 0x00, 0x7a, 0x01, 0x41, 0xff, 0xf8, 0xff, 0xff, 0x00, 0x63, // .F.....z.A.....c + 0xff, 0xeb, 0x03, 0xed, 0x05, 0xe1, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, // .......&.H.....C + 0x00, 0x97, 0x00, 0x1c, 0x00, 0x08, 0x00, 0xb2, 0xc0, 0x20, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, // ......... .q01.. + 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x05, 0xdd, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, // ...c.......&.H.. + 0x01, 0x07, 0x00, 0x76, 0x01, 0x51, 0x00, 0x18, 0x00, 0x16, 0x00, 0xb2, 0xbf, 0x23, 0x01, 0x71, // ...v.Q.......#.q + 0xb6, 0xdf, 0x23, 0xef, 0x23, 0xff, 0x23, 0x03, 0x71, 0xb2, 0x0f, 0x23, 0x01, 0x72, 0x30, 0x31, // ..#.#.#.q..#.r01 + 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x06, 0x07, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, // ...c.......&.H.. + 0x01, 0x06, 0x01, 0x52, 0x51, 0x1c, 0x00, 0x25, 0x00, 0xb2, 0xb0, 0x22, 0x01, 0x71, 0x40, 0x09, // ...RQ..%...".q@. + 0xc0, 0x24, 0xd0, 0x24, 0xe0, 0x24, 0xf0, 0x24, 0x04, 0x71, 0xb4, 0x00, 0x24, 0x10, 0x24, 0x02, // .$.$.$.$.q..$.$. + 0x72, 0xb2, 0x60, 0x24, 0x01, 0x72, 0xb2, 0x40, 0x24, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, // r.`$.r.@$.r01... + 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x05, 0xcc, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, // ...c.......&.H.. + 0x01, 0x06, 0x00, 0x6a, 0x2c, 0x1c, 0x00, 0x3d, 0x00, 0xb2, 0x60, 0x21, 0x01, 0x72, 0xb4, 0xb0, // ...j,..=..`!.r.. + 0x21, 0xc0, 0x21, 0x02, 0x71, 0xb2, 0x40, 0x21, 0x01, 0x72, 0xb2, 0xf0, 0x21, 0x01, 0x71, 0xb4, // !.!.q.@!.r..!.q. + 0x00, 0x21, 0x10, 0x21, 0x02, 0x72, 0xb2, 0x60, 0x24, 0x01, 0x72, 0xb4, 0xb0, 0x24, 0xc0, 0x24, // .!.!.r.`$.r..$.$ + 0x02, 0x71, 0xb2, 0x40, 0x24, 0x01, 0x72, 0xb2, 0xf0, 0x24, 0x01, 0x71, 0xb4, 0x00, 0x24, 0x10, // .q.@$.r..$.q..$. + 0x24, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xb9, 0x00, 0x00, 0x01, 0x5e, // $.r01..........^ + 0x05, 0xcb, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0xff, 0x67, 0x00, 0x06, // ...&.......C.g.. + 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x04, 0x01, 0x71, 0xb6, 0xdf, 0x04, 0xef, 0x04, 0xff, 0x04, 0x03, // .%.....q........ + 0x71, 0x40, 0x11, 0x0f, 0x04, 0x1f, 0x04, 0x2f, 0x04, 0x3f, 0x04, 0x4f, 0x04, 0x5f, 0x04, 0x6f, // q@...../.?.O._.o + 0x04, 0x7f, 0x04, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x02, 0x43, // ....r01........C + 0x05, 0xc7, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, 0x01, 0x06, 0x00, 0x76, 0x1f, 0x02, 0x00, 0x25, // ...&.......v...% + 0x00, 0xb2, 0xbf, 0x07, 0x01, 0x71, 0xb6, 0xdf, 0x07, 0xef, 0x07, 0xff, 0x07, 0x03, 0x71, 0x40, // .....q........q@ + 0x11, 0x0f, 0x07, 0x1f, 0x07, 0x2f, 0x07, 0x3f, 0x07, 0x4f, 0x07, 0x5f, 0x07, 0x6f, 0x07, 0x7f, // ...../.?.O._.o.. + 0x07, 0x08, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcc, 0x00, 0x00, 0x02, 0x32, // ..r01..........2 + 0x05, 0xf1, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0xff, 0x21, 0x00, 0x06, // ...&.......R.!.. + 0x00, 0x17, 0x00, 0xb2, 0x2f, 0x06, 0x01, 0x72, 0xb2, 0x3f, 0x08, 0x01, 0x72, 0xb2, 0x7f, 0x08, // ..../..r.?..r... + 0x01, 0x72, 0xb2, 0x5f, 0x08, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xa6, // .r._..r01....... + 0x00, 0x00, 0x02, 0x57, 0x05, 0xb6, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...W...&.......j + 0xfe, 0xfc, 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x05, 0x01, 0x72, 0xb4, 0xdf, 0x05, 0xef, // .....3.....r.... + 0x05, 0x02, 0x71, 0xb2, 0x5f, 0x05, 0x01, 0x72, 0xb4, 0x2f, 0x05, 0x3f, 0x05, 0x02, 0x72, 0xb2, // ..q._..r./.?..r. + 0x7f, 0x08, 0x01, 0x72, 0xb4, 0xdf, 0x08, 0xef, 0x08, 0x02, 0x71, 0xb2, 0x5f, 0x08, 0x01, 0x72, // ...r......q._..r + 0xb4, 0x2f, 0x08, 0x3f, 0x08, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x48, // ./.?..r01......H + 0xff, 0xeb, 0x04, 0x30, 0x05, 0xed, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x31, 0x00, 0xb0, 0x1b, 0x2f, // ...0... .-.1.../ + 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, // ../..EX../....>Y + 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb1, // .!...+X!...Y.... + 0x28, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x16, 0x12, // (...+X!...Y01... + 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x34, 0x00, 0x33, 0x32, 0x16, 0x17, 0x37, 0x26, // ....#".54.32..7& + 0x26, 0x27, 0x05, 0x27, 0x25, 0x26, 0x26, 0x27, 0x37, 0x16, 0x16, 0x17, 0x37, 0x17, 0x01, 0x32, // &'.'%&&'7...7..2 + 0x36, 0x35, 0x35, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x03, 0x69, 0x5f, 0x68, 0xfe, // 655&&#".....i_h. + 0xe0, 0xd7, 0xda, 0xfe, 0xe9, 0x01, 0x14, 0xd5, 0x5a, 0x9f, 0x34, 0x04, 0x09, 0x55, 0x44, 0xfe, // ........Z.4..UD. + 0xde, 0x4d, 0x01, 0x00, 0x27, 0x53, 0x2c, 0x3c, 0x4f, 0x90, 0x3f, 0xda, 0x4d, 0xfe, 0x11, 0x85, // .M..'S,Y..EX../. + 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb1, 0x2e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y...."...+X!...Y + 0xb2, 0x2b, 0x2e, 0x22, 0x11, 0x12, 0x39, 0xb0, 0x2b, 0x10, 0xb0, 0x1d, 0xd0, 0xb2, 0x1f, 0x22, // .+."..9.+......" + 0x2e, 0x11, 0x12, 0x39, 0xb0, 0x1f, 0x10, 0xb0, 0x29, 0xd0, 0x30, 0x31, 0x13, 0x34, 0x00, 0x33, // ...9....).01.4.3 + 0x32, 0x16, 0x17, 0x37, 0x33, 0x07, 0x16, 0x16, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x26, 0x27, // 2..73.......#"&' + 0x07, 0x23, 0x37, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x17, 0x33, 0x01, 0x26, 0x26, 0x23, 0x22, // .#7&&53...3.&&#" + 0x06, 0x15, 0x21, 0x34, 0x26, 0x27, 0x23, 0x01, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x61, 0x01, // ..!4&'#...3265a. + 0x04, 0xdf, 0x38, 0x67, 0x2e, 0x4a, 0x81, 0x68, 0x58, 0x5e, 0xfe, 0xfc, 0xe0, 0x33, 0x5c, 0x2a, // ..8g.J.hX^...3.* + 0x48, 0x81, 0x64, 0x60, 0x67, 0xc5, 0x28, 0x29, 0x06, 0x01, 0x4c, 0x1d, 0x43, 0x25, 0x8d, 0x91, // H.d`g.()..L.C%.. + 0x02, 0x3f, 0x23, 0x20, 0x06, 0xfe, 0xb9, 0x18, 0x38, 0x21, 0x8d, 0x92, 0x02, 0x27, 0xf0, 0x01, // .?# ....8!...'.. + 0x37, 0x16, 0x14, 0x95, 0xd3, 0x4a, 0xe8, 0x8d, 0x16, 0xf2, 0xfe, 0xcc, 0x11, 0x10, 0x93, 0xcc, // 7....J.......... + 0x47, 0xf0, 0x95, 0x5b, 0x97, 0x30, 0x02, 0xa2, 0x10, 0x12, 0xe2, 0xaa, 0x50, 0x8d, 0x2f, 0xfd, // G..[.0......P./. + 0x69, 0x0c, 0x0b, 0xe0, 0xac, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, // i............... + 0x05, 0xcb, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0xad, 0x00, 0x06, // ...&.X.....C.... + 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x14, 0x01, 0x71, 0xb6, 0xdf, 0x14, 0xef, 0x14, 0xff, 0x14, 0x03, // .%.....q........ + 0x71, 0x40, 0x11, 0x0f, 0x14, 0x1f, 0x14, 0x2f, 0x14, 0x3f, 0x14, 0x4f, 0x14, 0x5f, 0x14, 0x6f, // q@...../.?.O._.o + 0x14, 0x7f, 0x14, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, // ....r01......... + 0x05, 0xc7, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x67, 0x00, 0x02, // ...&.X.....v.g.. + 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x17, 0x01, 0x71, 0xb6, 0xdf, 0x17, 0xef, 0x17, 0xff, 0x17, 0x03, // .%.....q........ + 0x71, 0x40, 0x11, 0x0f, 0x17, 0x1f, 0x17, 0x2f, 0x17, 0x3f, 0x17, 0x4f, 0x17, 0x5f, 0x17, 0x6f, // q@...../.?.O._.o + 0x17, 0x7f, 0x17, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, // ....r01......... + 0x05, 0xf1, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x67, 0x06, 0x00, 0x17, // ...&.X.....Rg... + 0x00, 0xb2, 0x2f, 0x16, 0x01, 0x72, 0xb2, 0x3f, 0x18, 0x01, 0x72, 0xb2, 0x7f, 0x18, 0x01, 0x72, // ../..r.?..r....r + 0xb2, 0x5f, 0x18, 0x01, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, // ._..r01......... + 0x05, 0xb6, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x42, 0x06, 0x00, 0x33, // ...&.X.....jB..3 + 0x00, 0xb2, 0x7f, 0x15, 0x01, 0x72, 0xb4, 0xdf, 0x15, 0xef, 0x15, 0x02, 0x71, 0xb2, 0x5f, 0x15, // .....r......q._. + 0x01, 0x72, 0xb4, 0x2f, 0x15, 0x3f, 0x15, 0x02, 0x72, 0xb2, 0x7f, 0x18, 0x01, 0x72, 0xb4, 0xdf, // .r./.?..r....r.. + 0x18, 0xef, 0x18, 0x02, 0x71, 0xb2, 0x5f, 0x18, 0x01, 0x72, 0xb4, 0x2f, 0x18, 0x3f, 0x18, 0x02, // ....q._..r./.?.. + 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, 0x05, 0xc7, 0x02, 0x26, // r01......K.....& + 0x00, 0x5c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x25, 0x00, 0x02, 0x00, 0x25, 0x00, 0xb2, // .......v.%...%.. + 0xbf, 0x19, 0x01, 0x71, 0xb6, 0xdf, 0x19, 0xef, 0x19, 0xff, 0x19, 0x03, 0x71, 0x40, 0x11, 0x0f, // ...q........q@.. + 0x19, 0x1f, 0x19, 0x2f, 0x19, 0x3f, 0x19, 0x4f, 0x19, 0x5f, 0x19, 0x6f, 0x19, 0x7f, 0x19, 0x08, // .../.?.O._.o.... + 0x72, 0x30, 0x31, 0x00, 0x00, 0x02, 0x00, 0x99, 0xfe, 0x60, 0x04, 0x33, 0x06, 0x18, 0x00, 0x11, // r01......`.3.... + 0x00, 0x1f, 0x00, 0x50, 0x00, 0xb0, 0x09, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, // ...P.../..EX../. + 0xb1, 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x08, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x2f, 0x09, 0x01, 0x5d, 0xb0, 0x0e, 0x10, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /..]........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x33, 0x11, // .Y01...#"&'.#.3. + 0x36, 0x36, 0x33, 0x32, 0x12, 0x11, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, // 6632..#4&#"..... + 0x33, 0x32, 0x36, 0x35, 0x04, 0x33, 0xe0, 0xc5, 0x64, 0x97, 0x35, 0xc5, 0xc5, 0x35, 0x96, 0x62, // 3265.3..d.5..5.b + 0xc9, 0xdf, 0xc5, 0x91, 0x8d, 0x55, 0x78, 0x25, 0x25, 0x78, 0x57, 0x8c, 0x90, 0x01, 0xf4, 0xea, // .....Ux%%xW..... + 0xfe, 0xe1, 0x43, 0x43, 0xfd, 0xef, 0x07, 0xb8, 0xfd, 0xaa, 0x44, 0x48, 0xfe, 0xc1, 0xfe, 0xfa, // ..CC......DH.... + 0xb8, 0xed, 0x4d, 0x43, 0xfd, 0xf5, 0x43, 0x4b, 0xcd, 0xa2, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, // ..MC..CK........ + 0xfe, 0x4b, 0x03, 0xe8, 0x05, 0xb6, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, // .K.....&.......j + 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x17, 0x01, 0x72, 0xb4, 0xdf, 0x17, 0xef, 0x17, 0x02, // ...3.....r...... + 0x71, 0xb2, 0x5f, 0x17, 0x01, 0x72, 0xb4, 0x2f, 0x17, 0x3f, 0x17, 0x02, 0x72, 0xb2, 0x7f, 0x1a, // q._..r./.?..r... + 0x01, 0x72, 0xb4, 0xdf, 0x1a, 0xef, 0x1a, 0x02, 0x71, 0xb2, 0x5f, 0x1a, 0x01, 0x72, 0xb4, 0x2f, // .r......q._..r./ + 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // .?..r01......... + 0x06, 0xfa, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, 0x00, 0xb4, 0x01, 0x4a, // ...&.$.....q...J + 0x00, 0x06, 0x00, 0xb0, 0x0c, 0x2f, 0x30, 0x31, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, // ...../01...j.... + 0x05, 0xb8, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x00, 0x06, 0x00, 0x71, 0x4d, 0x08, 0x00, 0x00, // ...&.D.....qM... + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x07, 0x4e, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // .........N.&.$.. + 0x01, 0x07, 0x01, 0x54, 0x00, 0xeb, 0x01, 0x9e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...T.........EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // ./....>Y01.....j + 0xff, 0xeb, 0x03, 0xf3, 0x06, 0x0c, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x01, 0x54, // .......&.D.....T + 0x7f, 0x5c, 0x00, 0x36, 0x00, 0xb2, 0x00, 0x30, 0x01, 0x71, 0xb2, 0xb0, 0x30, 0x01, 0x71, 0xb2, // ...6...0.q..0.q. + 0x00, 0x30, 0x01, 0x72, 0xb2, 0x8f, 0x30, 0x01, 0x71, 0xb2, 0x20, 0x30, 0x01, 0x72, 0xb4, 0xd0, // .0.r..0.q. 0.r.. + 0x30, 0xe0, 0x30, 0x02, 0x71, 0xb2, 0x90, 0x30, 0x01, 0x71, 0xb6, 0x60, 0x30, 0x70, 0x30, 0x80, // 0.0.q..0.q.`0p0. + 0x30, 0x03, 0x5d, 0xb2, 0x20, 0x30, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, // 0.]. 0.]01...... + 0xfe, 0x50, 0x05, 0x51, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, // .P.Q...&.$.....W + 0x03, 0x7e, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xfe, 0x50, 0x04, 0x2a, 0x04, 0x4e, 0x02, 0x26, // .~.....j.P.*.N.& + 0x00, 0x44, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, 0x02, 0x57, 0x00, 0x00, 0xff, 0xff, 0x00, 0x76, // .D.....W.W.....v + 0xff, 0xeb, 0x04, 0xbf, 0x07, 0x33, 0x02, 0x26, 0x00, 0x26, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .....3.&.&.....v + 0x01, 0xc9, 0x01, 0x6e, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1e, 0x2f, 0x1b, 0xb1, // ...n.....EX../.. + 0x1e, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x1e, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, // ..>Y....]01....a + 0xff, 0xeb, 0x03, 0xf6, 0x05, 0xdc, 0x02, 0x26, 0x00, 0x46, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.F.....v + 0x01, 0x3c, 0x00, 0x17, 0x00, 0x1a, 0x00, 0xb2, 0xbf, 0x21, 0x01, 0x71, 0xb6, 0xdf, 0x21, 0xef, // .<.......!.q..!. + 0x21, 0xff, 0x21, 0x03, 0x71, 0xb6, 0x0f, 0x21, 0x1f, 0x21, 0x2f, 0x21, 0x03, 0x72, 0x30, 0x31, // !.!.q..!.!/!.r01 + 0xff, 0xff, 0x00, 0x76, 0xff, 0xeb, 0x04, 0xbf, 0x07, 0x5d, 0x02, 0x26, 0x00, 0x26, 0x00, 0x00, // ...v.....].&.&.. + 0x01, 0x07, 0x01, 0x52, 0x00, 0xc9, 0x01, 0x72, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...R...r.....EX. + 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // "/..".>Y01.....a + 0xff, 0xeb, 0x03, 0xf6, 0x06, 0x06, 0x02, 0x26, 0x00, 0x46, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, // .......&.F.....R + 0x3c, 0x1b, 0x00, 0x1d, 0x00, 0xb6, 0xd0, 0x22, 0xe0, 0x22, 0xf0, 0x22, 0x03, 0x71, 0xb4, 0x00, // <......".".".q.. + 0x22, 0x10, 0x22, 0x02, 0x72, 0xb2, 0x60, 0x22, 0x01, 0x72, 0xb2, 0x40, 0x22, 0x01, 0x72, 0x30, // ".".r.`".r.@".r0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x76, 0xff, 0xeb, 0x04, 0xbf, 0x07, 0x22, 0x02, 0x26, // 1......v.....".& + 0x00, 0x26, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x01, 0x99, 0x01, 0x72, 0x00, 0x10, 0x00, 0xb0, // .&.....U...r.... + 0x00, 0x45, 0x58, 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x03, 0xf6, 0x05, 0xcb, 0x02, 0x26, 0x00, 0x46, 0x00, 0x00, // ...a.......&.F.. + 0x01, 0x07, 0x01, 0x55, 0x01, 0x0c, 0x00, 0x1b, 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x1e, 0x01, 0x5d, // ...U...........] + 0xb2, 0xdf, 0x1f, 0x01, 0x5d, 0xb2, 0xaf, 0x1f, 0x01, 0x71, 0xb2, 0x8f, 0x1f, 0x01, 0x71, 0x30, // ....]....q....q0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x76, 0xff, 0xeb, 0x04, 0xbf, 0x07, 0x5e, 0x02, 0x26, // 1......v.....^.& + 0x00, 0x26, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0x00, 0xe0, 0x01, 0x73, 0x00, 0x10, 0x00, 0xb0, // .&.....S...s.... + 0x00, 0x45, 0x58, 0xb0, 0x23, 0x2f, 0x1b, 0xb1, 0x23, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX.#/..#.>Y01.. + 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x03, 0xf6, 0x06, 0x07, 0x02, 0x26, 0x00, 0x46, 0x00, 0x00, // ...a.......&.F.. + 0x01, 0x06, 0x01, 0x53, 0x53, 0x1c, 0x00, 0x22, 0x00, 0x40, 0x0b, 0xb0, 0x23, 0xc0, 0x23, 0xd0, // ...SS..".@..#.#. + 0x23, 0xe0, 0x23, 0xf0, 0x23, 0x05, 0x71, 0xb4, 0x00, 0x23, 0x10, 0x23, 0x02, 0x72, 0xb2, 0x60, // #.#.#.q..#.#.r.` + 0x23, 0x01, 0x72, 0xb2, 0x40, 0x23, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // #.r.@#.r01...... + 0x00, 0x00, 0x04, 0xeb, 0x07, 0x49, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, // .....I.&.'.....S + 0x00, 0xa6, 0x01, 0x5e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, 0xb1, // ...^.....EX../.. + 0x19, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x62, 0xff, 0xeb, 0x05, 0x1d, // ..>Y01.....b.... + 0x06, 0x18, 0x00, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x07, 0x03, 0x63, 0x03, 0xdd, 0x05, 0x25, // ...&.G.....c...% + 0x00, 0x35, 0x00, 0xb0, 0x24, 0x2f, 0xb2, 0x80, 0x24, 0x01, 0x72, 0xb2, 0x1f, 0x24, 0x01, 0x5d, // .5..$/..$.r..$.] + 0xb2, 0x2f, 0x24, 0x01, 0x71, 0xb2, 0xbf, 0x24, 0x01, 0x72, 0xb2, 0x3f, 0x24, 0x01, 0x72, 0xb4, // ./$.q..$.r.?$.r. + 0x4f, 0x24, 0x5f, 0x24, 0x02, 0x5d, 0xb2, 0x60, 0x24, 0x01, 0x5d, 0xb2, 0xf0, 0x24, 0x01, 0x71, // O$_$.].`$.]..$.q + 0xb2, 0x70, 0x24, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0x02, 0x00, 0x2a, 0x00, 0x00, 0x05, 0x09, // .p$.q01....*.... + 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x74, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .......t.../..EX + 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0xcf, 0x04, 0x01, 0x5d, 0xb2, 0x1f, 0x04, 0x01, 0x71, // ....>Y....]....q + 0xb2, 0xbf, 0x04, 0x01, 0x71, 0xb2, 0xef, 0x04, 0x01, 0x5d, 0xb2, 0x7f, 0x04, 0x01, 0x5d, 0xb2, // ....q....]....]. + 0x2f, 0x04, 0x01, 0x5d, 0xb0, 0x04, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /..]........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ..Y...........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x1a, 0xd0, 0x30, 0x31, 0x33, 0x11, 0x23, 0x35, // ...Y......013.#5 + 0x33, 0x11, 0x21, 0x20, 0x00, 0x11, 0x15, 0x10, 0x00, 0x21, 0x13, 0x21, 0x11, 0x33, 0x32, 0x12, // 3.! .....!.!.32. + 0x35, 0x35, 0x34, 0x02, 0x23, 0x23, 0x11, 0x21, 0xd2, 0xa8, 0xa8, 0x01, 0xbf, 0x01, 0x1e, 0x01, // 554.##.!........ + 0x5a, 0xfe, 0xa6, 0xfe, 0xe2, 0x1a, 0xfe, 0xec, 0xfa, 0xca, 0xe9, 0xe9, 0xca, 0xfa, 0x01, 0x14, // Z............... + 0x02, 0x97, 0x9b, 0x02, 0x7e, 0xfe, 0xa1, 0xfe, 0xea, 0xc7, 0xfe, 0xe9, 0xfe, 0xa3, 0x02, 0x97, // ....~........... + 0xfe, 0x03, 0x01, 0x0a, 0xd0, 0xc9, 0xce, 0x01, 0x0a, 0xfe, 0x1d, 0x00, 0x00, 0x02, 0x00, 0x62, // ...............b + 0xff, 0xeb, 0x04, 0xba, 0x06, 0x18, 0x00, 0x19, 0x00, 0x27, 0x00, 0x7f, 0x00, 0xb0, 0x16, 0x2f, // .........'...../ + 0xb0, 0x19, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, 0x59, // ../..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb2, 0x5f, 0x19, 0x01, 0x5d, 0xb2, // X../....>Y._..]. + 0x2f, 0x19, 0x01, 0x5d, 0xb2, 0x0f, 0x19, 0x01, 0x5d, 0xb0, 0x19, 0x10, 0xb1, 0x00, 0x02, 0xb0, // /..]....]....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x30, 0x0e, 0x01, 0x5d, 0xb0, 0x12, 0xd0, // .+X!...Y.0..]... + 0xb0, 0x19, 0x10, 0xb0, 0x14, 0xd0, 0xb2, 0x2f, 0x16, 0x01, 0x5d, 0xb0, 0x07, 0x10, 0xb1, 0x1d, // ......./..]..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x24, 0x02, // ...+X!...Y....$. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x27, // ..+X!...Y01.#.#' + 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x35, 0x10, 0x12, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x35, // ..#".55..32...#5 + 0x33, 0x35, 0x33, 0x15, 0x33, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, // 353.3...3267.&&# + 0x22, 0x06, 0x15, 0x04, 0xba, 0xc5, 0xa1, 0x17, 0x35, 0x9a, 0x66, 0xc6, 0xe0, 0xdf, 0xc9, 0x5f, // ".......5.f...._ + 0x93, 0x34, 0xf7, 0xf7, 0xc5, 0xc5, 0xfc, 0x6d, 0x86, 0x8d, 0x58, 0x78, 0x26, 0x26, 0x79, 0x55, // .4.....m..Xx&&yU + 0x8e, 0x87, 0x04, 0xcf, 0xfb, 0x31, 0x85, 0x4c, 0x4e, 0x01, 0x1f, 0xea, 0x15, 0x01, 0x05, 0x01, // .....1.LN....... + 0x40, 0x46, 0x43, 0x01, 0x0a, 0x9b, 0xae, 0xae, 0xfc, 0x8a, 0xa4, 0xc5, 0x50, 0x48, 0x01, 0xf9, // @FC.........PH.. + 0x43, 0x4f, 0xea, 0xbb, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x06, 0xfa, 0x02, 0x26, // CO.........z...& + 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, 0x00, 0x96, 0x01, 0x4a, 0x00, 0x08, 0x00, 0xb2, // .(.....q...J.... + 0x0f, 0x0d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, // ...]01.....c.... + 0x05, 0xb9, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x00, 0x06, 0x00, 0x71, 0x50, 0x09, 0x00, 0x00, // ...&.H.....qP... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x07, 0x4e, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, // .......z.N.&.(.. + 0x01, 0x07, 0x01, 0x54, 0x00, 0xc8, 0x01, 0x9e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...T.........EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, // ./....>Y01.....c + 0xff, 0xeb, 0x03, 0xed, 0x06, 0x0d, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, // .......&.H.....T + 0x00, 0x82, 0x00, 0x5d, 0x00, 0x31, 0x00, 0xb2, 0x90, 0x24, 0x01, 0x71, 0xb4, 0xd0, 0x24, 0xe0, // ...].1...$.q..$. + 0x24, 0x02, 0x71, 0xb2, 0x20, 0x24, 0x01, 0x72, 0xb2, 0x20, 0x24, 0x01, 0x5d, 0xb2, 0x00, 0x24, // $.q. $.r. $.]..$ + 0x01, 0x72, 0xb2, 0xb0, 0x24, 0x01, 0x71, 0xb2, 0x00, 0x24, 0x01, 0x71, 0xb6, 0x60, 0x24, 0x70, // .r..$.q..$.q.`$p + 0x24, 0x80, 0x24, 0x03, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, // $.$.]01........z + 0x07, 0x0d, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x01, 0x67, 0x01, 0x5d, // ...&.(.....U.g.] + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x05, 0xcc, 0x02, 0x26, // 01.....c.......& + 0x00, 0x48, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x01, 0x21, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0xb2, // .H.....U.!...... + 0xbf, 0x20, 0x01, 0x5d, 0xb2, 0xaf, 0x21, 0x01, 0x71, 0xb2, 0xdf, 0x21, 0x01, 0x5d, 0xb2, 0x8f, // . .]..!.q..!.].. + 0x21, 0x01, 0x71, 0xb4, 0xb0, 0x21, 0xc0, 0x21, 0x02, 0x71, 0x30, 0x31, 0xff, 0xff, 0x00, 0xb4, // !.q..!.!.q01.... + 0xfe, 0x50, 0x04, 0x7a, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, // .P.z...&.(.....W + 0x01, 0x4b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xfe, 0x8e, 0x03, 0xed, 0x04, 0x4e, 0x02, 0x26, // .K.....c.....N.& + 0x00, 0x48, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, 0x01, 0xec, 0x00, 0x3e, 0xff, 0xff, 0x00, 0xb4, // .H.....W...>.... + 0x00, 0x00, 0x04, 0x7a, 0x07, 0x49, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, // ...z.I.&.(.....S + 0x00, 0xae, 0x01, 0x5e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // ...^.....EX../.. + 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, // ..>Y01.....c.... + 0x06, 0x08, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, 0x68, 0x1d, 0x00, 0x22, // ...&.H.....Sh.." + 0x00, 0x40, 0x0b, 0xb0, 0x25, 0xc0, 0x25, 0xd0, 0x25, 0xe0, 0x25, 0xf0, 0x25, 0x05, 0x71, 0xb4, // .@..%.%.%.%.%.q. + 0x00, 0x25, 0x10, 0x25, 0x02, 0x72, 0xb2, 0x60, 0x25, 0x01, 0x72, 0xb2, 0x40, 0x25, 0x01, 0x72, // .%.%.r.`%.r.@%.r + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x78, 0xff, 0xeb, 0x04, 0xd3, 0x07, 0x5d, 0x02, 0x26, // 01.....x.....].& + 0x00, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x00, 0xbf, 0x01, 0x72, 0x00, 0x10, 0x00, 0xb0, // .*.....R...r.... + 0x00, 0x45, 0x58, 0xb0, 0x23, 0x2f, 0x1b, 0xb1, 0x23, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX.#/..#.>Y01.. + 0xff, 0xff, 0x00, 0x64, 0xfe, 0x4b, 0x03, 0xfd, 0x06, 0x06, 0x02, 0x26, 0x00, 0x4a, 0x00, 0x00, // ...d.K.....&.J.. + 0x01, 0x06, 0x01, 0x52, 0x57, 0x1b, 0x00, 0x1d, 0x00, 0xb6, 0xd0, 0x30, 0xe0, 0x30, 0xf0, 0x30, // ...RW......0.0.0 + 0x03, 0x71, 0xb4, 0x00, 0x30, 0x10, 0x30, 0x02, 0x72, 0xb2, 0x60, 0x30, 0x01, 0x72, 0xb2, 0x40, // .q..0.0.r.`0.r.@ + 0x30, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x78, 0xff, 0xeb, 0x04, 0xd3, // 0.r01......x.... + 0x07, 0x63, 0x02, 0x26, 0x00, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0xf0, 0x01, 0xb3, // .c.&.*.....T.... + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x25, 0x2f, 0x1b, 0xb1, 0x25, 0x12, 0x3e, 0x59, // .....EX.%/..%.>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x64, 0xfe, 0x4b, 0x03, 0xfd, 0x06, 0x0c, 0x02, 0x26, // 01.....d.K.....& + 0x00, 0x4a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0x88, 0x00, 0x5c, 0x00, 0x36, 0x00, 0xb2, // .J.....T.....6.. + 0x00, 0x30, 0x01, 0x71, 0xb2, 0xb0, 0x30, 0x01, 0x71, 0xb2, 0x00, 0x30, 0x01, 0x72, 0xb2, 0x8f, // .0.q..0.q..0.r.. + 0x30, 0x01, 0x71, 0xb2, 0x20, 0x30, 0x01, 0x72, 0xb4, 0xd0, 0x30, 0xe0, 0x30, 0x02, 0x71, 0xb2, // 0.q. 0.r..0.0.q. + 0x90, 0x30, 0x01, 0x71, 0xb6, 0x60, 0x30, 0x70, 0x30, 0x80, 0x30, 0x03, 0x5d, 0xb2, 0x20, 0x30, // .0.q.`0p0.0.]. 0 + 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x78, 0xff, 0xeb, 0x04, 0xd3, 0x07, 0x22, 0x02, 0x26, // .]01...x.....".& + 0x00, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x01, 0x8f, 0x01, 0x72, 0x00, 0x10, 0x00, 0xb0, // .*.....U...r.... + 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX."/..".>Y01.. + 0xff, 0xff, 0x00, 0x64, 0xfe, 0x4b, 0x03, 0xfd, 0x05, 0xcb, 0x02, 0x26, 0x00, 0x4a, 0x00, 0x00, // ...d.K.....&.J.. + 0x01, 0x07, 0x01, 0x55, 0x01, 0x27, 0x00, 0x1b, 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x2c, 0x01, 0x5d, // ...U.'.......,.] + 0xb2, 0xdf, 0x2d, 0x01, 0x5d, 0xb2, 0xaf, 0x2d, 0x01, 0x71, 0xb2, 0x8f, 0x2d, 0x01, 0x71, 0x30, // ..-.]..-.q..-.q0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x78, 0xfe, 0x12, 0x04, 0xd3, 0x05, 0xc5, 0x02, 0x26, // 1......x.......& + 0x00, 0x2a, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0xa4, 0xfe, 0x98, 0xff, 0xff, 0x00, 0x64, // .*.....c.......d + 0xfe, 0x4b, 0x03, 0xfd, 0x06, 0x70, 0x02, 0x26, 0x00, 0x4a, 0x00, 0x00, 0x01, 0x07, 0x03, 0x8f, // .K...p.&.J...... + 0x01, 0x2b, 0x00, 0x59, 0x00, 0x1c, 0x00, 0xb2, 0x60, 0x30, 0x01, 0x5d, 0xb2, 0x0f, 0x30, 0x01, // .+.Y....`0.]..0. + 0x5d, 0xb2, 0x2f, 0x30, 0x01, 0x5d, 0xb2, 0xa0, 0x30, 0x01, 0x5d, 0xb2, 0x80, 0x30, 0x01, 0x5d, // ]./0.]..0.]..0.] + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x07, 0x48, 0x02, 0x26, // 01...........H.& + 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x00, 0xf4, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, // .+.....R...].... + 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x04, 0x00, 0x07, 0x47, 0x02, 0x26, 0x00, 0x4b, 0x00, 0x00, // .........G.&.K.. + 0x01, 0x07, 0x01, 0x52, 0x00, 0x20, 0x01, 0x5c, 0x00, 0x46, 0x00, 0xb4, 0x8f, 0x18, 0x9f, 0x18, // ...R. ...F...... + 0x02, 0x5d, 0xb2, 0xef, 0x18, 0x01, 0x5d, 0xb4, 0x5f, 0x18, 0x6f, 0x18, 0x02, 0x71, 0xb2, 0xdf, // .]....]._.o..q.. + 0x18, 0x01, 0x71, 0xb2, 0x7f, 0x18, 0x01, 0x72, 0xb4, 0x2f, 0x18, 0x3f, 0x18, 0x02, 0x72, 0xb2, // ..q....r./.?..r. + 0xaf, 0x18, 0x01, 0x71, 0xb4, 0x0f, 0x18, 0x1f, 0x18, 0x02, 0x71, 0xb2, 0xbf, 0x18, 0x01, 0x5d, // ...q......q....] + 0xb4, 0x4f, 0x18, 0x5f, 0x18, 0x02, 0x5d, 0xb4, 0x1f, 0x18, 0x2f, 0x18, 0x02, 0x5d, 0x30, 0x31, // .O._..].../..]01 + 0x00, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x05, 0x8f, 0x05, 0xb0, 0x00, 0x13, 0x00, 0x17, 0x00, 0x75, // ...............u + 0x00, 0xb0, 0x10, 0x2f, 0xb0, 0x14, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // .../../..EX../.. + 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x0c, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb2, 0x0f, 0x10, 0x01, 0x5d, // EX../....>Y....] + 0xb0, 0x10, 0x10, 0xb0, 0x00, 0xd0, 0xb0, 0x10, 0x10, 0xb1, 0x17, 0x05, 0xb0, 0x0a, 0x2b, 0x58, // ..............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0xd0, 0xb0, 0x14, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, // !...Y........... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x17, 0x10, 0xb0, 0x0a, 0xd0, 0xb0, 0x10, 0x10, // +X!...Y......... + 0xb0, 0x0d, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x15, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, // ...01.3.#.#.!.#. + 0x23, 0x35, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x01, 0x21, 0x35, 0x21, 0x04, 0xff, 0x90, // #53.3.!.3.!5!... + 0x90, 0xc5, 0xfd, 0x3d, 0xc5, 0x93, 0x93, 0xc5, 0x02, 0xc3, 0xc5, 0xfc, 0x78, 0x02, 0xc3, 0xfd, // ...=........x... + 0x3d, 0x04, 0x91, 0x91, 0xfc, 0x00, 0x02, 0x83, 0xfd, 0x7d, 0x04, 0x00, 0x91, 0x01, 0x1f, 0xfe, // =........}...... + 0xe1, 0x01, 0x1f, 0xfd, 0x6e, 0xe2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x04, 0x1e, // ....n........... + 0x06, 0x18, 0x00, 0x1b, 0x00, 0x73, 0x00, 0xb0, 0x18, 0x2f, 0xb0, 0x1b, 0x2f, 0xb0, 0x00, 0x45, // .....s.../../..E + 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x12, 0x06, 0x3e, 0x59, 0xb2, 0x5f, 0x1b, 0x01, 0x5d, 0xb2, 0x2f, 0x1b, 0x01, 0x5d, 0xb2, 0x0f, // ..>Y._..]./..].. + 0x1b, 0x01, 0x5d, 0xb0, 0x1b, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..]........+X!.. + 0xf4, 0x59, 0xb2, 0x30, 0x05, 0x01, 0x5d, 0xb0, 0x05, 0x10, 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, // .Y.0..]........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x14, 0xd0, 0xb0, 0x1b, 0x10, 0xb0, // X!...Y.......... + 0x16, 0xd0, 0xb2, 0x2f, 0x18, 0x01, 0x5d, 0x30, 0x31, 0x01, 0x21, 0x11, 0x36, 0x36, 0x33, 0x32, // .../..]01.!.6632 + 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x23, 0x35, // ...#.4&#"...#.#5 + 0x33, 0x35, 0x33, 0x15, 0x21, 0x02, 0x82, 0xfe, 0xf0, 0x38, 0xa3, 0x63, 0xad, 0xc1, 0xc5, 0x73, // 353.!....8.c...s + 0x72, 0x52, 0x85, 0x2b, 0xc5, 0xac, 0xac, 0xc5, 0x01, 0x10, 0x04, 0xcf, 0xfe, 0xda, 0x4e, 0x57, // rR.+..........NW + 0xd0, 0xd8, 0xfd, 0x5a, 0x02, 0xa8, 0x86, 0x80, 0x4d, 0x42, 0xfc, 0xe1, 0x04, 0xcf, 0x9b, 0xae, // ...Z....MB...... + 0xae, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc8, 0x00, 0x00, 0x02, 0x7e, 0x07, 0x54, 0x02, 0x26, // ...........~.T.& + 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, 0xff, 0x41, 0x01, 0x61, 0x00, 0x10, 0x00, 0xb0, // .,.....X.A.a.... + 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0xff, 0xa3, 0x00, 0x00, 0x02, 0x59, 0x05, 0xfd, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, // .......Y...&.... + 0x01, 0x07, 0x01, 0x58, 0xff, 0x1c, 0x00, 0x0a, 0x00, 0x20, 0x00, 0xb2, 0x5f, 0x07, 0x01, 0x72, // ...X..... .._..r + 0xb2, 0x8f, 0x07, 0x01, 0x71, 0xb2, 0x3f, 0x07, 0x01, 0x72, 0xb4, 0xef, 0x07, 0xff, 0x07, 0x02, // ....q.?..r...... + 0x71, 0xb4, 0x0f, 0x07, 0x1f, 0x07, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xc0, // q......r01...... + 0x00, 0x00, 0x02, 0x91, 0x06, 0xfa, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, // .......&.,.....q + 0xff, 0x45, 0x01, 0x4a, 0x00, 0x08, 0x00, 0xb2, 0x0f, 0x04, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // .E.J.......]01.. + 0xff, 0xff, 0xff, 0x9b, 0x00, 0x00, 0x02, 0x6c, 0x05, 0xa5, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, // .......l...&.... + 0x00, 0x07, 0x00, 0x71, 0xff, 0x20, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x02, 0x4f, // ...q. .........O + 0x07, 0x4e, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0xff, 0x77, 0x01, 0x9e, // .N.&.,.....T.w.. + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xd3, 0x00, 0x00, 0x02, 0x2a, 0x05, 0xf7, 0x02, 0x26, // 01.........*...& + 0x00, 0xf3, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0xff, 0x52, 0x00, 0x47, 0x00, 0x20, 0x00, 0xb2, // .......T.R.G. .. + 0xff, 0x08, 0x01, 0x71, 0xb6, 0x3f, 0x08, 0x4f, 0x08, 0x5f, 0x08, 0x03, 0x5d, 0xb2, 0x1f, 0x08, // ...q.?.O._..]... + 0x01, 0x72, 0xb2, 0xcf, 0x08, 0x01, 0x71, 0xb2, 0xaf, 0x08, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, // .r....q....q01.. + 0xff, 0xff, 0x00, 0x2e, 0xfe, 0x50, 0x01, 0xbd, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, // .....P.....&.,.. + 0x00, 0x06, 0x01, 0x57, 0xea, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x0e, 0xfe, 0x50, 0x01, 0x9d, // ...W.........P.. + 0x06, 0x18, 0x02, 0x26, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x06, 0x01, 0x57, 0xca, 0x00, 0x00, 0x00, // ...&.L.....W.... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x01, 0x8e, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, // ...........&.,.. + 0x01, 0x07, 0x01, 0x55, 0x00, 0x14, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...U...].....EX. + 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0x99, // ./....>Y01...... + 0x00, 0x00, 0x01, 0x5e, 0x04, 0x3a, 0x00, 0x03, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...^.:.......EX. + 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x00, 0x06, 0x3e, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x33, 0x01, 0x5e, 0xc5, 0xc5, 0x04, // ...>Y01!#.3.^... + 0x3a, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xbe, 0xff, 0xeb, 0x06, 0x06, 0x05, 0xb0, 0x00, 0x26, // :..............& + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x2d, 0x02, 0x43, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9f, // .,.....-.C...... + 0xfe, 0x4b, 0x03, 0x76, 0x06, 0x18, 0x00, 0x26, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x4d, // .K.v...&.L.....M + 0x02, 0x04, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3d, 0xff, 0xeb, 0x04, 0x8c, 0x07, 0x3c, 0x02, 0x26, // .......=.....<.& + 0x00, 0x2d, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x01, 0x7b, 0x01, 0x51, 0x00, 0x10, 0x00, 0xb0, // .-.....R.{.Q.... + 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0xff, 0xbc, 0xfe, 0x4b, 0x02, 0x44, 0x05, 0xdf, 0x02, 0x26, 0x01, 0x50, 0x00, 0x00, // .....K.D...&.P.. + 0x01, 0x07, 0x01, 0x52, 0xff, 0x33, 0xff, 0xf4, 0x00, 0x14, 0x00, 0xb4, 0x2f, 0x14, 0x3f, 0x14, // ...R.3....../.?. + 0x02, 0x72, 0xb2, 0x7f, 0x14, 0x01, 0x72, 0xb2, 0x5f, 0x14, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, // .r....r._..r01.. + 0xff, 0xff, 0x00, 0xb4, 0xfe, 0x23, 0x05, 0x20, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2e, 0x00, 0x00, // .....#. ...&.... + 0x00, 0x07, 0x03, 0x63, 0x01, 0x82, 0xfe, 0xa9, 0xff, 0xff, 0x00, 0x90, 0xfe, 0x25, 0x04, 0x1c, // ...c.........%.. + 0x06, 0x18, 0x02, 0x26, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x1f, 0xfe, 0xab, // ...&.N.....c.... + 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x04, 0x40, 0x04, 0x3a, 0x00, 0x0e, 0x00, 0x8e, 0x00, 0xb0, // .......@.:...... + 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb4, 0xbf, 0x06, 0xcf, 0x06, 0x02, 0x5d, 0xb2, 0x2f, 0x06, // ....>Y......]./. + 0x01, 0x71, 0xb2, 0x9f, 0x06, 0x01, 0x71, 0xb2, 0xff, 0x06, 0x01, 0x71, 0xb2, 0x6f, 0x06, 0x01, // .q....q....q.o.. + 0x72, 0xb2, 0xdf, 0x06, 0x01, 0x72, 0xb2, 0x3f, 0x06, 0x01, 0x72, 0xb2, 0xcf, 0x06, 0x01, 0x71, // r....r.?..r....q + 0xb2, 0x6f, 0x06, 0x01, 0x71, 0xb2, 0xff, 0x06, 0x01, 0x5d, 0xb2, 0x5f, 0x06, 0x01, 0x5d, 0xb2, // .o..q....]._..]. + 0x2f, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, 0x01, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /..]........+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x0b, 0x06, 0x01, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, // ..Y......901.#.# + 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x17, 0x01, 0x01, 0x07, 0x23, 0x01, 0xc3, 0x65, 0xc5, 0xc5, // .3.3.3....#..e.. + 0x54, 0x01, 0x84, 0xe7, 0x02, 0xfe, 0x3e, 0x01, 0xe3, 0x02, 0xf1, 0x01, 0xcb, 0xfe, 0x35, 0x04, // T.....>.......5. + 0x3a, 0xfe, 0x37, 0x01, 0xc9, 0x05, 0xfd, 0xfe, 0xfd, 0xd2, 0x05, 0x00, 0xff, 0xff, 0x00, 0xb4, // :.7............. + 0x00, 0x00, 0x04, 0x2a, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x2f, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...*...&./.....v + 0x00, 0x37, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, // .7.Y.....EX../.. + 0x06, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x06, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x9f, // ..>Y....]01..... + 0x00, 0x00, 0x02, 0x49, 0x07, 0x44, 0x02, 0x26, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...I.D.&.O.....v + 0x00, 0x25, 0x01, 0x7f, 0x00, 0x47, 0x00, 0xb0, 0x03, 0x2f, 0xb0, 0x07, 0xdc, 0xb2, 0xff, 0x07, // .%...G.../...... + 0x01, 0x72, 0xb2, 0x7f, 0x07, 0x01, 0x72, 0xb2, 0x9f, 0x07, 0x01, 0x71, 0xb2, 0x4f, 0x08, 0x01, // .r....r....q.O.. + 0x5d, 0xb6, 0xcf, 0x08, 0xdf, 0x08, 0xef, 0x08, 0x03, 0x5d, 0xb4, 0x2f, 0x08, 0x3f, 0x08, 0x02, // ]........]./.?.. + 0x72, 0xb2, 0x2f, 0x08, 0x01, 0x71, 0xb4, 0x8f, 0x08, 0x9f, 0x08, 0x02, 0x5d, 0xb4, 0x1f, 0x08, // r./..q......]... + 0x2f, 0x08, 0x02, 0x5d, 0xb4, 0xdf, 0x08, 0xef, 0x08, 0x02, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, // /..]......q01... + 0xff, 0xff, 0x00, 0xb4, 0xfe, 0x25, 0x04, 0x2a, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2f, 0x00, 0x00, // .....%.*...&./.. + 0x00, 0x07, 0x03, 0x63, 0x01, 0x7b, 0xfe, 0xab, 0xff, 0xff, 0x00, 0x6e, 0xfe, 0x25, 0x01, 0x64, // ...c.{.....n.%.d + 0x06, 0x18, 0x02, 0x26, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x00, 0x09, 0xfe, 0xab, // ...&.O.....c.... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x2a, 0x05, 0xb1, 0x02, 0x26, 0x00, 0x2f, 0x00, 0x00, // .......*...&./.. + 0x01, 0x07, 0x03, 0x63, 0x01, 0xe2, 0x04, 0xbe, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...c.........EX. + 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9f, // ./....>Y01...... + 0x00, 0x00, 0x02, 0xa0, 0x06, 0x18, 0x00, 0x26, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x07, 0x03, 0x63, // .......&.O.....c + 0x01, 0x60, 0x05, 0x25, 0x00, 0x37, 0x00, 0xb0, 0x08, 0x2f, 0xb2, 0x80, 0x08, 0x01, 0x72, 0xb4, // .`.%.7.../....r. + 0x1f, 0x08, 0x2f, 0x08, 0x02, 0x5d, 0xb2, 0x2f, 0x08, 0x01, 0x71, 0xb2, 0xbf, 0x08, 0x01, 0x72, // ../..]./..q....r + 0xb2, 0x3f, 0x08, 0x01, 0x72, 0xb4, 0x4f, 0x08, 0x5f, 0x08, 0x02, 0x5d, 0xb2, 0x60, 0x08, 0x01, // .?..r.O._..].`.. + 0x5d, 0xb2, 0xf0, 0x08, 0x01, 0x71, 0xb2, 0x70, 0x08, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, // ]....q.p..q01... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x2a, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2f, 0x00, 0x00, // .......*...&./.. + 0x01, 0x07, 0x01, 0x55, 0x01, 0xc5, 0xfd, 0xc9, 0x00, 0x06, 0x00, 0xb0, 0x08, 0x2f, 0x30, 0x31, // ...U........./01 + 0xff, 0xff, 0x00, 0x9f, 0x00, 0x00, 0x02, 0xbf, 0x06, 0x18, 0x00, 0x26, 0x00, 0x4f, 0x00, 0x00, // ...........&.O.. + 0x01, 0x07, 0x01, 0x55, 0x01, 0x45, 0xfd, 0xb8, 0x00, 0x06, 0x00, 0xb0, 0x06, 0x2f, 0x30, 0x31, // ...U.E......./01 + 0x00, 0x01, 0x00, 0x28, 0x00, 0x00, 0x04, 0x19, 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x59, 0x00, 0xb0, // ...(.........Y.. + 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb0, // .EX../....>Y.... + 0x01, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x03, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ..........+X!... + 0x59, 0xb0, 0x02, 0xd0, 0xb0, 0x06, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // Y...........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb0, 0x08, 0xd0, 0xb0, 0x09, 0xd0, 0xb0, 0x00, 0x10, 0xb0, // ..Y............. + 0x0b, 0xd0, 0xb0, 0x0a, 0xd0, 0x30, 0x31, 0x01, 0x25, 0x15, 0x05, 0x11, 0x21, 0x15, 0x21, 0x11, // .....01.%...!.!. + 0x07, 0x35, 0x37, 0x11, 0x33, 0x01, 0x68, 0x01, 0x0d, 0xfe, 0xf3, 0x02, 0xb1, 0xfc, 0x8a, 0x7b, // .57.3.h........{ + 0x7b, 0xc5, 0x03, 0x4b, 0x56, 0xa6, 0x56, 0xfd, 0xf5, 0x9a, 0x02, 0x67, 0x27, 0xa6, 0x27, 0x02, // {..KV.V....g'.'. + 0xa3, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x25, 0x00, 0x00, 0x02, 0x0e, 0x06, 0x18, 0x00, 0x0b, // .......%........ + 0x00, 0x45, 0x00, 0xb0, 0x0a, 0x2f, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, // .E.../../..EX../ + 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x01, 0xd0, 0xb0, 0x00, 0x10, 0xb1, // ....>Y.......... + 0x03, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0xd0, 0xb0, 0x03, // ....+X!...Y..... + 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x07, 0xd0, 0xb0, 0x00, 0x10, 0xb0, 0x09, 0xd0, 0xb0, 0x08, 0xd0, // ................ + 0xb2, 0x2f, 0x0a, 0x01, 0x5d, 0x30, 0x31, 0x01, 0x37, 0x15, 0x07, 0x11, 0x23, 0x11, 0x07, 0x35, // ./..]01.7...#..5 + 0x37, 0x11, 0x33, 0x01, 0x78, 0x96, 0x96, 0xc5, 0x8e, 0x8e, 0xc5, 0x03, 0x68, 0x3a, 0xa5, 0x3a, // 7.3.x.......h:.: + 0xfd, 0x3d, 0x02, 0x78, 0x36, 0xa5, 0x36, 0x02, 0xfb, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // .=.x6.6......... + 0x00, 0x00, 0x05, 0x01, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.1.....v + 0x01, 0xfb, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, // ...Y.....EX../.. + 0x0c, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x0c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8f, // ..>Y....]01..... + 0x00, 0x00, 0x03, 0xfd, 0x05, 0xdc, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.Q.....v + 0x01, 0x65, 0x00, 0x17, 0x00, 0x1a, 0x00, 0xb2, 0xbf, 0x17, 0x01, 0x71, 0xb6, 0xdf, 0x17, 0xef, // .e.........q.... + 0x17, 0xff, 0x17, 0x03, 0x71, 0xb6, 0x0f, 0x17, 0x1f, 0x17, 0x2f, 0x17, 0x03, 0x72, 0x30, 0x31, // ....q...../..r01 + 0xff, 0xff, 0x00, 0xb4, 0xfe, 0x25, 0x05, 0x01, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, // .....%.....&.1.. + 0x00, 0x07, 0x03, 0x63, 0x01, 0xdf, 0xfe, 0xab, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x25, 0x03, 0xfd, // ...c.........%.. + 0x04, 0x4e, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x49, 0xfe, 0xab, // .N.&.Q.....c.I.. + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x07, 0x49, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, // .........I.&.1.. + 0x01, 0x07, 0x01, 0x53, 0x01, 0x12, 0x01, 0x5e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...S...^.....EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8f, // ./....>Y01...... + 0x00, 0x00, 0x03, 0xfd, 0x06, 0x07, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, // .......&.Q.....S + 0x7c, 0x1c, 0x00, 0x22, 0x00, 0x40, 0x0b, 0xb0, 0x19, 0xc0, 0x19, 0xd0, 0x19, 0xe0, 0x19, 0xf0, // |..".@.......... + 0x19, 0x05, 0x71, 0xb4, 0x00, 0x19, 0x10, 0x19, 0x02, 0x72, 0xb2, 0x60, 0x19, 0x01, 0x72, 0xb2, // ..q......r.`..r. + 0x40, 0x19, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xfd, // @..r01.......... + 0x06, 0x18, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x07, 0x03, 0x63, 0xff, 0x7b, 0x05, 0x25, // ...&.Q.....c.{.% + 0x00, 0x06, 0x00, 0xb0, 0x19, 0x2f, 0x30, 0x31, 0x00, 0x01, 0x00, 0xa1, 0xfe, 0x4b, 0x04, 0xee, // ...../01.....K.. + 0x05, 0xb0, 0x00, 0x18, 0x00, 0x58, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // .....X...EX../.. + 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x0c, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x08, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x0b, // EX../....>Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x12, 0x10, 0xb0, 0x0f, 0xd0, // ...+X!...Y...... + 0xb0, 0x14, 0x10, 0xb0, 0x10, 0xd0, 0xb0, 0x0f, 0x10, 0xb0, 0x16, 0xd0, 0x30, 0x31, 0x01, 0x11, // ............01.. + 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x01, 0x07, // ..#"&'7..32655.. + 0x11, 0x23, 0x11, 0x33, 0x01, 0x37, 0x11, 0x04, 0xee, 0xac, 0x9a, 0x1f, 0x34, 0x1d, 0x0e, 0x0d, // .#.3.7......4... + 0x44, 0x11, 0x3c, 0x45, 0xfd, 0x43, 0x06, 0xc5, 0xc5, 0x02, 0xbd, 0x06, 0x05, 0xb0, 0xf9, 0xf7, // D.Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x08, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x12, // EX../....>Y..... + 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x19, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x36, 0x36, 0x33, // ..+X!...Y01..663 + 0x32, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, // 2.....#"&'7..326 + 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x01, 0x3f, 0x0d, 0x36, 0xa0, // 5.4&#"...#..?.6. + 0x65, 0xae, 0xc0, 0xac, 0x9a, 0x1f, 0x35, 0x1c, 0x0e, 0x0d, 0x43, 0x12, 0x3d, 0x44, 0x72, 0x74, // e.....5...C.=Drt + 0x55, 0x7b, 0x26, 0xc5, 0x04, 0x3a, 0x96, 0x51, 0x59, 0xcd, 0xd6, 0xfc, 0xfc, 0xa7, 0xb5, 0x09, // U{&..:.QY....... + 0x09, 0xa0, 0x05, 0x07, 0x5e, 0x58, 0x03, 0x00, 0x8f, 0x78, 0x42, 0x3b, 0xfc, 0xcf, 0x04, 0x3a, // ....^X...xB;...: + 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x0f, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, // ...q.......&.2.. + 0x01, 0x07, 0x00, 0x71, 0x00, 0xdc, 0x01, 0x5f, 0x00, 0x2b, 0x00, 0xb4, 0x80, 0x1d, 0x90, 0x1d, // ...q..._.+...... + 0x02, 0x71, 0xb6, 0x30, 0x1d, 0x40, 0x1d, 0x50, 0x1d, 0x03, 0x72, 0xb2, 0x60, 0x1d, 0x01, 0x5d, // .q.0.@.P..r.`..] + 0xb6, 0xd0, 0x1d, 0xe0, 0x1d, 0xf0, 0x1d, 0x03, 0x71, 0xb2, 0x20, 0x1d, 0x01, 0x71, 0xb2, 0xc0, // ........q. ..q.. + 0x1d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, // ..]01......a...* + 0x05, 0xb8, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x00, 0x06, 0x00, 0x71, 0x68, 0x08, 0x00, 0x00, // ...&.R.....qh... + 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x63, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, // ...q.....c.&.2.. + 0x01, 0x07, 0x01, 0x54, 0x01, 0x0e, 0x01, 0xb3, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...T.........EX. + 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // /.. .>Y01.....a + 0xff, 0xeb, 0x04, 0x2a, 0x06, 0x0c, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, // ...*...&.R.....T + 0x00, 0x9a, 0x00, 0x5c, 0x00, 0x36, 0x00, 0xb2, 0x00, 0x20, 0x01, 0x71, 0xb2, 0xb0, 0x20, 0x01, // .....6... .q.. . + 0x71, 0xb2, 0x00, 0x20, 0x01, 0x72, 0xb2, 0x8f, 0x20, 0x01, 0x71, 0xb2, 0x20, 0x20, 0x01, 0x72, // q.. .r.. .q. .r + 0xb4, 0xd0, 0x20, 0xe0, 0x20, 0x02, 0x71, 0xb2, 0x90, 0x20, 0x01, 0x71, 0xb6, 0x60, 0x20, 0x70, // .. . .q.. .q.` p + 0x20, 0x80, 0x20, 0x03, 0x5d, 0xb2, 0x20, 0x20, 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x71, // . .]. .]01...q + 0xff, 0xeb, 0x05, 0x02, 0x07, 0x60, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x01, 0x59, // .....`.&.2.....Y + 0x01, 0x6a, 0x01, 0x72, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x26, 0x2f, 0x1b, 0xb1, // .j.r.....EX.&/.. + 0x26, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x12, 0x3e, // &.>Y..EX. /.. .> + 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x40, 0x06, 0x09, 0x02, 0x26, // Y01....a...@...& + 0x00, 0x52, 0x00, 0x00, 0x01, 0x07, 0x01, 0x59, 0x00, 0xf6, 0x00, 0x1b, 0x00, 0x29, 0x00, 0xb4, // .R.....Y.....).. + 0xe0, 0x1f, 0xf0, 0x1f, 0x02, 0x71, 0x40, 0x09, 0x00, 0x1f, 0x10, 0x1f, 0x20, 0x1f, 0x30, 0x1f, // .....q@..... .0. + 0x04, 0x72, 0xb4, 0xe0, 0x25, 0xf0, 0x25, 0x02, 0x71, 0x40, 0x09, 0x00, 0x25, 0x10, 0x25, 0x20, // .r..%.%.q@..%.% + 0x25, 0x30, 0x25, 0x04, 0x72, 0x30, 0x31, 0x00, 0x00, 0x02, 0x00, 0x68, 0xff, 0xeb, 0x07, 0x4f, // %0%.r01....h...O + 0x05, 0xc5, 0x00, 0x17, 0x00, 0x25, 0x00, 0x94, 0x00, 0xb0, 0x12, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .....%...../..EX + 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x0f, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ........+X!...Y. + 0x7f, 0x12, 0x01, 0x5d, 0xb2, 0x2f, 0x12, 0x01, 0x5d, 0xb2, 0xef, 0x12, 0x01, 0x5d, 0xb0, 0x12, // ...]./..]....].. + 0x10, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, // ......+X!...Y... + 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, // .....+X!...Y.... + 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x1f, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x21, 0x06, 0x06, // ...+X!...Y01!!.. + 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x32, 0x16, 0x17, 0x21, 0x15, 0x21, 0x11, 0x21, // #".....32..!.!.! + 0x15, 0x21, 0x11, 0x21, 0x05, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, // .!.!.267.&&#"... + 0x14, 0x16, 0x07, 0x4f, 0xfc, 0x6a, 0x5c, 0x82, 0x43, 0xf9, 0xfe, 0xc9, 0x01, 0x35, 0xf9, 0x45, // ...O.j..C....5.E + 0x8f, 0x4f, 0x03, 0x8b, 0xfd, 0x0a, 0x02, 0x9b, 0xfd, 0x65, 0x03, 0x01, 0xfb, 0x49, 0x3d, 0x7a, // .O.......e...I=z + 0x3a, 0x3d, 0x7a, 0x3c, 0xa9, 0xc0, 0xc2, 0x0a, 0x0b, 0x01, 0x4c, 0x01, 0x09, 0x01, 0x30, 0x01, // :=z<......L...0. + 0x09, 0x01, 0x4c, 0x0c, 0x09, 0x9b, 0xfe, 0x29, 0x9b, 0xfd, 0xf7, 0x14, 0x09, 0x09, 0x04, 0x7f, // ..L....)........ + 0x08, 0x0b, 0xe3, 0xd5, 0xfe, 0xce, 0xd6, 0xe4, 0x00, 0x03, 0x00, 0x61, 0xff, 0xeb, 0x06, 0xf7, // ...........a.... + 0x04, 0x4e, 0x00, 0x22, 0x00, 0x30, 0x00, 0x39, 0x00, 0x98, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .N.".0.9.....EX. + 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x13, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x17, 0x00, 0x13, 0x11, 0x12, 0x39, 0xb0, 0x17, 0x2f, 0xb2, 0xa0, 0x17, 0x01, 0x5d, 0xb4, 0xd0, // .....9../....].. + 0x17, 0xe0, 0x17, 0x02, 0x5d, 0xb0, 0x00, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ....]........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x26, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y....&...+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x2d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y....-...+X!.. + 0xf4, 0x59, 0xb0, 0x13, 0x10, 0xb1, 0x31, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y....1...+X!... + 0x59, 0xb0, 0x17, 0x10, 0xb1, 0x36, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y....6...+X!...Y + 0x30, 0x31, 0x05, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x00, 0x33, // 01."&'..#".554.3 + 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x07, 0x16, 0x16, 0x33, 0x32, // 2..6632...!...32 + 0x36, 0x37, 0x17, 0x06, 0x06, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, // 67......326554&# + 0x22, 0x06, 0x15, 0x01, 0x22, 0x06, 0x07, 0x17, 0x21, 0x35, 0x34, 0x26, 0x05, 0x5a, 0x83, 0xcb, // "..."...!54&.Z.. + 0x41, 0x40, 0xc6, 0x7f, 0xe0, 0xfe, 0xfb, 0x01, 0x04, 0xdf, 0x82, 0xc8, 0x40, 0x41, 0xc1, 0x6c, // A@..........@A.l + 0xdb, 0xe0, 0xfd, 0x42, 0x03, 0x03, 0x98, 0x89, 0x64, 0x97, 0x37, 0x4d, 0x3a, 0xbe, 0xfb, 0x45, // ...B....d.7M:..E + 0x91, 0x8f, 0x8d, 0x92, 0x93, 0x8e, 0x8d, 0x91, 0x04, 0x16, 0x63, 0x8c, 0x10, 0x02, 0x01, 0xf3, // ..........c..... + 0x7c, 0x15, 0x69, 0x60, 0x60, 0x69, 0x01, 0x35, 0xf1, 0x16, 0xf0, 0x01, 0x37, 0x6d, 0x62, 0x61, // |.i``i.5....7mba + 0x6e, 0xfe, 0xf8, 0xdc, 0x7b, 0x05, 0x9c, 0xc9, 0x39, 0x32, 0x80, 0x39, 0x4c, 0x02, 0x26, 0xac, // n...{...92.9L.&. + 0xe0, 0xe0, 0xac, 0x16, 0xaa, 0xe2, 0xe2, 0xaa, 0x01, 0x8c, 0xa7, 0x7e, 0x05, 0x1a, 0x74, 0x9c, // ...........~..t. + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xed, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x35, 0x00, 0x00, // ...........&.5.. + 0x01, 0x07, 0x00, 0x76, 0x01, 0x8f, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...v...Y.....EX. + 0x24, 0x2f, 0x1b, 0xb1, 0x24, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x24, 0x01, 0x5d, 0x30, 0x31, 0x00, // $/..$.>Y..$.]01. + 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x02, 0xe4, 0x05, 0xdc, 0x02, 0x26, 0x00, 0x55, 0x00, 0x00, // ...........&.U.. + 0x01, 0x07, 0x00, 0x76, 0x00, 0xc0, 0x00, 0x17, 0x00, 0x1a, 0x00, 0xb2, 0xbf, 0x13, 0x01, 0x71, // ...v...........q + 0xb6, 0xdf, 0x13, 0xef, 0x13, 0xff, 0x13, 0x03, 0x71, 0xb6, 0x0f, 0x13, 0x1f, 0x13, 0x2f, 0x13, // ........q...../. + 0x03, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0xb4, 0xfe, 0x25, 0x04, 0xed, 0x05, 0xaf, 0x02, 0x26, // .r01.....%.....& + 0x00, 0x35, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x73, 0xfe, 0xab, 0xff, 0xff, 0x00, 0x6b, // .5.....c.s.....k + 0xfe, 0x25, 0x02, 0xaa, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x55, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, // .%...N.&.U.....c + 0x00, 0x06, 0xfe, 0xab, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xed, 0x07, 0x49, 0x02, 0x26, // .............I.& + 0x00, 0x35, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0x00, 0xa6, 0x01, 0x5e, 0x00, 0x10, 0x00, 0xb0, // .5.....S...^.... + 0x00, 0x45, 0x58, 0xb0, 0x28, 0x2f, 0x1b, 0xb1, 0x28, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX.(/..(.>Y01.. + 0xff, 0xff, 0x00, 0x65, 0x00, 0x00, 0x02, 0xdb, 0x06, 0x07, 0x02, 0x26, 0x00, 0x55, 0x00, 0x00, // ...e.......&.U.. + 0x01, 0x06, 0x01, 0x53, 0xd9, 0x1c, 0x00, 0x22, 0x00, 0x40, 0x0b, 0xb0, 0x15, 0xc0, 0x15, 0xd0, // ...S...".@...... + 0x15, 0xe0, 0x15, 0xf0, 0x15, 0x05, 0x71, 0xb4, 0x00, 0x15, 0x10, 0x15, 0x02, 0x72, 0xb2, 0x60, // ......q......r.` + 0x15, 0x01, 0x72, 0xb2, 0x40, 0x15, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // ..r.@..r01.....a + 0xff, 0xeb, 0x04, 0x92, 0x07, 0x33, 0x02, 0x26, 0x00, 0x36, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .....3.&.6.....v + 0x01, 0x88, 0x01, 0x6e, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x28, 0x2f, 0x1b, 0xb1, // ...n.....EX.(/.. + 0x28, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x28, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x67, // (.>Y..(.]01....g + 0xff, 0xeb, 0x03, 0xc9, 0x05, 0xdc, 0x02, 0x26, 0x00, 0x56, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.V.....v + 0x01, 0x3a, 0x00, 0x17, 0x00, 0x1a, 0x00, 0xb2, 0xbf, 0x2b, 0x01, 0x71, 0xb6, 0xdf, 0x2b, 0xef, // .:.......+.q..+. + 0x2b, 0xff, 0x2b, 0x03, 0x71, 0xb6, 0x0f, 0x2b, 0x1f, 0x2b, 0x2f, 0x2b, 0x03, 0x72, 0x30, 0x31, // +.+.q..+.+/+.r01 + 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x92, 0x07, 0x5d, 0x02, 0x26, 0x00, 0x36, 0x00, 0x00, // ...a.....].&.6.. + 0x01, 0x07, 0x01, 0x52, 0x00, 0x88, 0x01, 0x72, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...R...r.....EX. + 0x2c, 0x2f, 0x1b, 0xb1, 0x2c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x67, // ,/..,.>Y01.....g + 0xff, 0xeb, 0x03, 0xc9, 0x06, 0x06, 0x02, 0x26, 0x00, 0x56, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, // .......&.V.....R + 0x3a, 0x1b, 0x00, 0x1d, 0x00, 0xb6, 0xd0, 0x2c, 0xe0, 0x2c, 0xf0, 0x2c, 0x03, 0x71, 0xb4, 0x00, // :......,.,.,.q.. + 0x2c, 0x10, 0x2c, 0x02, 0x72, 0xb2, 0x60, 0x2c, 0x01, 0x72, 0xb2, 0x40, 0x2c, 0x01, 0x72, 0x30, // ,.,.r.`,.r.@,.r0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xfe, 0x45, 0x04, 0x92, 0x05, 0xc5, 0x02, 0x26, // 1......a.E.....& + 0x00, 0x36, 0x00, 0x00, 0x00, 0x07, 0x00, 0x7a, 0x01, 0x8d, 0xff, 0xf8, 0xff, 0xff, 0x00, 0x67, // .6.....z.......g + 0xfe, 0x46, 0x03, 0xc9, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x56, 0x00, 0x00, 0x00, 0x07, 0x00, 0x7a, // .F...N.&.V.....z + 0x01, 0x3f, 0xff, 0xf9, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x92, 0x07, 0x5e, 0x02, 0x26, // .?.....a.....^.& + 0x00, 0x36, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0x00, 0x9f, 0x01, 0x73, 0x00, 0x10, 0x00, 0xb0, // .6.....S...s.... + 0x00, 0x45, 0x58, 0xb0, 0x2d, 0x2f, 0x1b, 0xb1, 0x2d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX.-/..-.>Y01.. + 0xff, 0xff, 0x00, 0x67, 0xff, 0xeb, 0x03, 0xc9, 0x06, 0x07, 0x02, 0x26, 0x00, 0x56, 0x00, 0x00, // ...g.......&.V.. + 0x01, 0x06, 0x01, 0x53, 0x51, 0x1c, 0x00, 0x22, 0x00, 0x40, 0x0b, 0xb0, 0x2d, 0xc0, 0x2d, 0xd0, // ...SQ..".@..-.-. + 0x2d, 0xe0, 0x2d, 0xf0, 0x2d, 0x05, 0x71, 0xb4, 0x00, 0x2d, 0x10, 0x2d, 0x02, 0x72, 0xb2, 0x60, // -.-.-.q..-.-.r.` + 0x2d, 0x01, 0x72, 0xb2, 0x40, 0x2d, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x22, // -.r.@-.r01....." + 0xfe, 0x25, 0x04, 0x8e, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x03, 0x63, // .%.....&.7.....c + 0x01, 0x62, 0xfe, 0xab, 0x00, 0x08, 0x00, 0xb2, 0x60, 0x0d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // .b......`..]01.. + 0xff, 0xff, 0x00, 0x22, 0xfe, 0x1b, 0x02, 0x6a, 0x05, 0x3f, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, // ..."...j.?.&.W.. + 0x00, 0x07, 0x03, 0x63, 0x00, 0xcf, 0xfe, 0xa1, 0xff, 0xff, 0x00, 0x22, 0x00, 0x00, 0x04, 0x8e, // ...c.......".... + 0x07, 0x48, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0x00, 0x95, 0x01, 0x5d, // .H.&.7.....S...] + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x22, 0xff, 0xeb, 0x02, 0xfc, 0x06, 0x33, 0x00, 0x26, // 01.....".....3.& + 0x00, 0x57, 0x00, 0x00, 0x01, 0x07, 0x03, 0x63, 0x01, 0xbc, 0x05, 0x40, 0x00, 0x10, 0x00, 0xb0, // .W.....c...@.... + 0x1c, 0x2f, 0xb2, 0x0f, 0x1c, 0x01, 0x5d, 0xb2, 0x5f, 0x1c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // ./....]._..]01.. + 0x00, 0x01, 0x00, 0x22, 0x00, 0x00, 0x04, 0x8e, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x4a, 0x00, 0xb0, // ...".........J.. + 0x0f, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x0f, 0x10, 0xb1, // .EX../....>Y.... + 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x0f, // ....+X!...Y..... + 0x10, 0xb0, 0x07, 0xd0, 0xb0, 0x0a, 0x10, 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ............+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0xd0, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, // ..Y...01.#.#.#53 + 0x11, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x33, 0x03, 0x96, 0xdc, 0xc5, 0xe0, 0xe0, 0xfe, 0x2d, // .!5!.!.3.......- + 0x04, 0x6c, 0xfe, 0x2c, 0xdc, 0x03, 0x34, 0xfc, 0xcc, 0x03, 0x34, 0x9b, 0x01, 0x46, 0x9b, 0x9b, // .l.,..4...4..F.. + 0xfe, 0xba, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0xff, 0xeb, 0x02, 0x79, 0x05, 0x3f, 0x00, 0x1f, // ...........y.?.. + 0x00, 0x7e, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, // .~.../..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x0a, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, // ..EX../....>Y... + 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x60, 0x06, 0x01, // .....+X!...Y.`.. + 0x5d, 0xb2, 0x10, 0x06, 0x01, 0x5d, 0xb2, 0xc0, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, 0x07, // ]....]....]..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x13, 0x10, 0xb1, 0x0c, 0x03, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb0, 0x17, 0xd0, 0xb0, // ..+X!...Y....... + 0x06, 0x10, 0xb0, 0x19, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x1b, 0xd0, 0xb0, 0x1c, 0xd0, 0x30, 0x31, // ..............01 + 0x01, 0x11, 0x33, 0x15, 0x23, 0x15, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, // ..3.#.3.#...3267 + 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, // ...#"&5.#535#53. + 0x01, 0x93, 0xcd, 0xcd, 0xe6, 0xe6, 0x3f, 0x34, 0x11, 0x29, 0x10, 0x1a, 0x16, 0x55, 0x2b, 0x78, // ......?4.)...U+x + 0x8e, 0xd6, 0xd6, 0xac, 0xac, 0x05, 0x3f, 0xfe, 0xfb, 0x92, 0xb5, 0x9b, 0xfe, 0xbf, 0x4c, 0x3e, // ......?.......L> + 0x08, 0x06, 0x87, 0x12, 0x17, 0x91, 0x9b, 0x01, 0x41, 0x9b, 0xb5, 0x92, 0x01, 0x05, 0x00, 0x00, // ........A....... + 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x54, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // .........T.&.8.. + 0x01, 0x07, 0x01, 0x58, 0x00, 0xd7, 0x01, 0x61, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...X...a.....EX. + 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, // ./....>Y01...... + 0xff, 0xeb, 0x03, 0xfc, 0x05, 0xfd, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, // .......&.X.....X + 0x62, 0x0a, 0x00, 0x20, 0x00, 0xb2, 0x5f, 0x17, 0x01, 0x72, 0xb2, 0x8f, 0x17, 0x01, 0x71, 0xb2, // b.. .._..r....q. + 0x3f, 0x17, 0x01, 0x72, 0xb4, 0xef, 0x17, 0xff, 0x17, 0x02, 0x71, 0xb4, 0x0f, 0x17, 0x1f, 0x17, // ?..r......q..... + 0x02, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x06, 0xfa, 0x02, 0x26, // .r01...........& + 0x00, 0x38, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, 0x00, 0xdb, 0x01, 0x4a, 0x00, 0x08, 0x00, 0xb2, // .8.....q...J.... + 0x0f, 0x13, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, // ...]01.......... + 0x05, 0xa5, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x00, 0x06, 0x00, 0x71, 0x66, 0xf5, 0x00, 0x00, // ...&.X.....qf... + 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x4e, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // .........N.&.8.. + 0x01, 0x07, 0x01, 0x54, 0x01, 0x0d, 0x01, 0x9e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...T.........EX. + 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, // ./....>Y01...... + 0xff, 0xeb, 0x03, 0xfc, 0x05, 0xf7, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, // .......&.X.....T + 0x00, 0x98, 0x00, 0x47, 0x00, 0x33, 0x00, 0xb2, 0x8f, 0x18, 0x01, 0x71, 0xb2, 0xcf, 0x18, 0x01, // ...G.3.....q.... + 0x71, 0xb2, 0x1f, 0x18, 0x01, 0x72, 0xb6, 0x3f, 0x18, 0x4f, 0x18, 0x5f, 0x18, 0x03, 0x5d, 0xb2, // q....r.?.O._..]. + 0xff, 0x18, 0x01, 0x71, 0xb2, 0xaf, 0x18, 0x01, 0x71, 0xb6, 0x60, 0x18, 0x70, 0x18, 0x80, 0x18, // ...q....q.`.p... + 0x03, 0x5d, 0xb2, 0x00, 0x18, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x93, // .]....q01....... + 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x8c, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, 0x01, 0x07, 0x01, 0x56, // .......&.8.....V + 0x01, 0x63, 0x01, 0xaa, 0x00, 0x49, 0x00, 0xb2, 0xb0, 0x1b, 0x01, 0x72, 0xb2, 0x2f, 0x1b, 0x01, // .c...I.....r./.. + 0x5d, 0xb2, 0x0f, 0x1b, 0x01, 0x5d, 0xb2, 0x7f, 0x1b, 0x01, 0x5d, 0xb2, 0x00, 0x1b, 0x01, 0x72, // ]....]....]....r + 0xb2, 0x70, 0x1b, 0x01, 0x72, 0xb2, 0x50, 0x1b, 0x01, 0x72, 0xb2, 0x70, 0x21, 0x01, 0x72, 0xb2, // .p..r.P..r.p!.r. + 0x2f, 0x21, 0x01, 0x5d, 0xb2, 0x0f, 0x21, 0x01, 0x5d, 0xb2, 0x7f, 0x21, 0x01, 0x5d, 0xb2, 0xb0, // /!.]..!.]..!.].. + 0x21, 0x01, 0x72, 0xb2, 0x50, 0x21, 0x01, 0x72, 0xb2, 0x00, 0x21, 0x01, 0x72, 0x30, 0x31, 0x00, // !.r.P!.r..!.r01. + 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, 0x06, 0x35, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, // .........5.&.X.. + 0x01, 0x07, 0x01, 0x56, 0x00, 0xee, 0x00, 0x53, 0x00, 0x83, 0x00, 0xb2, 0xa0, 0x1d, 0x01, 0x5d, // ...V...S.......] + 0xb4, 0xe0, 0x1d, 0xf0, 0x1d, 0x02, 0x5d, 0xb2, 0x00, 0x1d, 0x01, 0x72, 0xb4, 0x2f, 0x1d, 0x3f, // ......]....r./.? + 0x1d, 0x02, 0x5d, 0xb2, 0x8f, 0x1d, 0x01, 0x71, 0xb2, 0x0f, 0x1d, 0x01, 0x5d, 0xb2, 0x6f, 0x1d, // ..]....q....].o. + 0x01, 0x71, 0xb2, 0x50, 0x1d, 0x01, 0x72, 0xb2, 0x10, 0x1d, 0x01, 0x71, 0xb2, 0xc0, 0x1d, 0x01, // .q.P..r....q.... + 0x5d, 0xb2, 0x80, 0x1d, 0x01, 0x5d, 0xb2, 0x60, 0x1d, 0x01, 0x5d, 0xb2, 0xa0, 0x23, 0x01, 0x5d, // ]....].`..]..#.] + 0xb4, 0xe0, 0x23, 0xf0, 0x23, 0x02, 0x5d, 0xb2, 0x00, 0x23, 0x01, 0x72, 0xb4, 0x2f, 0x23, 0x3f, // ..#.#.]..#.r./#? + 0x23, 0x02, 0x5d, 0xb2, 0x8f, 0x23, 0x01, 0x71, 0xb2, 0x0f, 0x23, 0x01, 0x5d, 0xb2, 0x6f, 0x23, // #.]..#.q..#.].o# + 0x01, 0x71, 0xb2, 0x50, 0x23, 0x01, 0x72, 0xb2, 0x10, 0x23, 0x01, 0x71, 0xb2, 0xc0, 0x23, 0x01, // .q.P#.r..#.q..#. + 0x5d, 0xb2, 0x80, 0x23, 0x01, 0x5d, 0xb2, 0x60, 0x23, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, // ]..#.].`#.]01... + 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, 0x07, 0x4b, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // .........K.&.8.. + 0x01, 0x07, 0x01, 0x59, 0x01, 0x69, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...Y.i.].....EX. + 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x16, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x04, 0x3e, // ...>Y01........> + 0x05, 0xf4, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x01, 0x07, 0x01, 0x59, 0x00, 0xf4, 0x00, 0x06, // ...&.X.....Y.... + 0x00, 0x0d, 0x00, 0xb2, 0xdf, 0x17, 0x01, 0x71, 0xb2, 0xdf, 0x1d, 0x01, 0x71, 0x30, 0x31, 0x00, // .......q....q01. + 0xff, 0xff, 0x00, 0x93, 0xfe, 0x50, 0x04, 0xdc, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, // .....P.....&.8.. + 0x00, 0x07, 0x01, 0x57, 0x01, 0xa9, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xfe, 0x50, 0x04, 0x32, // ...W.........P.2 + 0x04, 0x3a, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, 0x02, 0x5f, 0x00, 0x00, // .:.&.X.....W._.. + 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x06, 0xcf, 0x07, 0x48, 0x02, 0x26, 0x00, 0x3a, 0x00, 0x00, // ...6.....H.&.:.. + 0x01, 0x07, 0x01, 0x52, 0x01, 0xa5, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...R...].....EX. + 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2d, // ./....>Y01.....- + 0x00, 0x00, 0x05, 0xdc, 0x05, 0xf1, 0x02, 0x26, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, // .......&.Z.....R + 0x01, 0x28, 0x00, 0x06, 0x00, 0x14, 0x00, 0xb4, 0x2f, 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0xb2, 0x7f, // .(....../.?..r.. + 0x1a, 0x01, 0x72, 0xb2, 0x5f, 0x1a, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, // ..r._..r01...... + 0x00, 0x00, 0x04, 0xce, 0x07, 0x47, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, // .....G.&.<.....R + 0x00, 0x94, 0x01, 0x5c, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, // .........EX../.. + 0x0d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, // ..>Y01.......K.. + 0x05, 0xf1, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x25, 0x06, 0x00, 0x14, // ...&.......R%... + 0x00, 0xb4, 0x2f, 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0xb2, 0x7f, 0x1a, 0x01, 0x72, 0xb2, 0x5f, 0x1a, // ../.?..r....r._. + 0x01, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, 0x07, 0x0c, 0x02, 0x26, // .r01...........& + 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0x6f, 0x01, 0x5c, 0x00, 0x1d, 0x00, 0xb0, // .<.....j.o...... + 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, // ../....>Y01....a + 0x00, 0x00, 0x04, 0x6d, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x3d, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...m...&.=.....v + 0x01, 0x84, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // ...Y.....EX../.. + 0x0a, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x0a, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x5e, // ..>Y....]01....^ + 0x00, 0x00, 0x03, 0xba, 0x05, 0xc7, 0x02, 0x26, 0x00, 0x5d, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.].....v + 0x01, 0x2f, 0x00, 0x02, 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x0d, 0x01, 0x71, 0xb6, 0xdf, 0x0d, 0xef, // ./...%.....q.... + 0x0d, 0xff, 0x0d, 0x03, 0x71, 0x40, 0x11, 0x0f, 0x0d, 0x1f, 0x0d, 0x2f, 0x0d, 0x3f, 0x0d, 0x4f, // ....q@...../.?.O + 0x0d, 0x5f, 0x0d, 0x6f, 0x0d, 0x7f, 0x0d, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, // ._.o....r01....a + 0x00, 0x00, 0x04, 0x6d, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x3d, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, // ...m...&.=.....U + 0x01, 0x54, 0x01, 0x5d, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // .T.].....EX../.. + 0x0a, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5e, 0x00, 0x00, 0x03, 0xba, // ..>Y01.....^.... + 0x05, 0xb6, 0x02, 0x26, 0x00, 0x5d, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x00, 0xff, 0x00, 0x06, // ...&.].....U.... + 0x00, 0x34, 0x00, 0xb2, 0xbf, 0x0a, 0x01, 0x5d, 0xb6, 0xdf, 0x0b, 0xef, 0x0b, 0xff, 0x0b, 0x03, // .4.....]........ + 0x71, 0x40, 0x11, 0x0f, 0x0b, 0x1f, 0x0b, 0x2f, 0x0b, 0x3f, 0x0b, 0x4f, 0x0b, 0x5f, 0x0b, 0x6f, // q@...../.?.O._.o + 0x0b, 0x7f, 0x0b, 0x08, 0x72, 0xb2, 0xdf, 0x0b, 0x01, 0x5d, 0xb2, 0xaf, 0x0b, 0x01, 0x71, 0xb2, // ....r....]....q. + 0x8f, 0x0b, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0x00, 0x00, 0x04, 0x6d, // ...q01.....a...m + 0x07, 0x49, 0x02, 0x26, 0x00, 0x3d, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0x00, 0x9b, 0x01, 0x5e, // .I.&.=.....S...^ + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5e, 0x00, 0x00, 0x03, 0xba, 0x05, 0xf2, 0x02, 0x26, // 01.....^.......& + 0x00, 0x5d, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, 0x46, 0x07, 0x00, 0x14, 0x00, 0xb4, 0x2f, 0x0f, // .].....SF...../. + 0x3f, 0x0f, 0x02, 0x72, 0xb2, 0x7f, 0x0f, 0x01, 0x72, 0xb2, 0x5f, 0x0f, 0x01, 0x72, 0x30, 0x31, // ?..r....r._..r01 + 0x00, 0x01, 0x00, 0x9f, 0x00, 0x00, 0x02, 0x87, 0x06, 0x2d, 0x00, 0x0f, 0x00, 0x22, 0x00, 0xb0, // .........-...".. + 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x04, 0x10, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x33, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, // 3.4632...&&#"... + 0x9f, 0xb6, 0xa2, 0x21, 0x45, 0x2a, 0x18, 0x14, 0x2c, 0x19, 0x57, 0x5b, 0x04, 0xc3, 0xad, 0xbd, // ...!E*..,.W[.... + 0x0b, 0x0a, 0x91, 0x05, 0x06, 0x6d, 0x62, 0xfb, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe9, // .....mb.=....... + 0xfe, 0x4b, 0x02, 0xc0, 0x06, 0x2d, 0x00, 0x23, 0x00, 0x65, 0x00, 0xb0, 0x17, 0x2f, 0xb0, 0x00, // .K...-.#.e.../.. + 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, // "/..".>Y..EX../. + 0xb1, 0x05, 0x08, 0x3e, 0x59, 0xb0, 0x22, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y."......+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x10, 0xd0, 0xb2, 0x2f, 0x17, 0x01, 0x5d, 0xb0, 0x17, // ..Y......./..].. + 0x10, 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x23, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, // #...#"&'7..3265. + 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, // #5354632...&&#". + 0x15, 0x15, 0x33, 0x02, 0x61, 0xc4, 0xab, 0x9a, 0x20, 0x34, 0x1b, 0x0e, 0x0c, 0x43, 0x12, 0x3c, // ..3.a... 4...C.< + 0x44, 0xa9, 0xa9, 0xb5, 0xa2, 0x22, 0x45, 0x2a, 0x18, 0x12, 0x33, 0x1b, 0x57, 0x54, 0xc4, 0x03, // D...."E*..3.WT.. + 0xa8, 0xfb, 0xff, 0xa7, 0xb5, 0x09, 0x09, 0x96, 0x05, 0x08, 0x67, 0x5a, 0x04, 0x01, 0x92, 0x89, // ..........gZ.... + 0xad, 0xbd, 0x0b, 0x0a, 0x96, 0x04, 0x06, 0x67, 0x62, 0x89, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6c, // .......gb......l + 0xff, 0xeb, 0x05, 0xff, 0x06, 0x75, 0x00, 0x17, 0x00, 0x25, 0x00, 0x3e, 0x00, 0xb0, 0x10, 0x2f, // .....u...%.>.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x1b, 0x03, // X../....>Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x22, 0x03, 0xb0, // ..+X!...Y....".. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x10, 0x00, 0x21, 0x22, 0x00, // .+X!...Y01...!". + 0x11, 0x11, 0x10, 0x00, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x35, 0x33, 0x14, 0x06, 0x07, 0x16, // ....32..6653.... + 0x16, 0x15, 0x27, 0x34, 0x02, 0x23, 0x22, 0x02, 0x15, 0x11, 0x14, 0x12, 0x33, 0x32, 0x36, 0x35, // ..'4.#".....3265 + 0x04, 0xfd, 0xfe, 0xb5, 0xfe, 0xf8, 0xff, 0xfe, 0xc1, 0x01, 0x3f, 0xff, 0x78, 0xce, 0x4f, 0x7b, // ..........?.x.O{ + 0x80, 0xc5, 0xb0, 0xa2, 0x26, 0x2a, 0xc5, 0xd8, 0xb6, 0xac, 0xcd, 0xcd, 0xac, 0xb7, 0xd7, 0x02, // ....&*.......... + 0x56, 0xfe, 0xf5, 0xfe, 0xa0, 0x01, 0x60, 0x01, 0x0b, 0x01, 0x03, 0x01, 0x0a, 0x01, 0x62, 0x50, // V.....`.......bP + 0x49, 0x0b, 0xab, 0x93, 0xc0, 0xf3, 0x24, 0x47, 0xa6, 0x58, 0x02, 0xc8, 0x01, 0x00, 0xff, 0x00, // I.....$G.X...... + 0xc8, 0xfe, 0xfb, 0xca, 0xff, 0x00, 0xff, 0xcb, 0x00, 0x02, 0x00, 0x61, 0xff, 0xeb, 0x04, 0xe8, // ...........a.... + 0x04, 0xc7, 0x00, 0x17, 0x00, 0x25, 0x00, 0x3b, 0x00, 0xb0, 0x09, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .....%.;.../..EX + 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ....>Y.....+X!.. + 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y...."...+X!... + 0x59, 0x30, 0x31, 0x13, 0x34, 0x00, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x35, 0x33, 0x14, 0x06, // Y01.4.32..6653.. + 0x07, 0x16, 0x16, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, // .......#".53..32 + 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x61, 0x01, 0x04, 0xdf, 0x66, 0xaa, 0x40, // 6554&#"..a...f.@ + 0x52, 0x50, 0xb2, 0x85, 0x81, 0x23, 0x25, 0xfe, 0xfc, 0xe0, 0xe0, 0xfe, 0xfb, 0xc5, 0x91, 0x8f, // RP...#%......... + 0x8d, 0x92, 0x93, 0x8e, 0x8d, 0x91, 0x02, 0x27, 0xf0, 0x01, 0x37, 0x46, 0x3f, 0x12, 0x84, 0x68, // .......'..7F?..h + 0x8f, 0xbc, 0x20, 0x42, 0x9d, 0x56, 0x16, 0xf2, 0xfe, 0xcc, 0x01, 0x35, 0xf1, 0xac, 0xe0, 0xe0, // .. B.V.....5.... + 0xac, 0x16, 0xaa, 0xe2, 0xe2, 0xaa, 0x00, 0x00, 0x00, 0x01, 0x00, 0x93, 0xff, 0xeb, 0x06, 0x57, // ...............W + 0x06, 0x37, 0x00, 0x1b, 0x00, 0x45, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x02, 0x2f, 0xb0, 0x00, 0x45, // .7...E.../../..E + 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x0a, 0xb0, 0x0a, 0x2b, 0x58, // /....>Y.......+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x13, 0x10, 0xb0, 0x1b, 0xd0, 0x30, 0x31, 0x01, 0x15, 0x17, 0x36, 0x36, // ..Y......01...66 + 0x35, 0x33, 0x17, 0x16, 0x06, 0x07, 0x11, 0x14, 0x04, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, // 53.......#"$5.3. + 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x04, 0xdc, 0x06, 0x56, 0x5c, 0xbe, 0x03, 0x02, 0xc4, // ..3265....V..... + 0xb7, 0xfe, 0xcb, 0xf9, 0xf0, 0xfe, 0xd5, 0xc5, 0xbc, 0x9a, 0xa2, 0xc7, 0x05, 0xb0, 0xb2, 0x02, // ................ + 0x1b, 0xa3, 0x7d, 0x05, 0xc1, 0xf3, 0x22, 0xfd, 0x79, 0xee, 0xfc, 0xfd, 0xed, 0x03, 0xdb, 0xfc, // ..}...".y....... + 0x25, 0xa5, 0xab, 0xab, 0xa5, 0x03, 0xdb, 0x00, 0x00, 0x01, 0x00, 0x8b, 0xff, 0xeb, 0x05, 0x6a, // %..............j + 0x04, 0xcb, 0x00, 0x1d, 0x00, 0x5b, 0x00, 0xb0, 0x1a, 0x2f, 0xb0, 0x1d, 0x2f, 0xb0, 0x00, 0x45, // .....[.../../..E + 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x17, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x1a, 0x10, 0xb1, 0x04, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x0a, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ........+X!...Y0 + 0x31, 0x01, 0x17, 0x16, 0x06, 0x07, 0x11, 0x23, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, // 1......#'..#"&5. + 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x15, 0x17, 0x36, 0x36, 0x35, 0x05, // 3...3267.3..665. + 0x64, 0x03, 0x03, 0xb1, 0xbd, 0xb1, 0x0d, 0x33, 0xa0, 0x69, 0xb1, 0xc6, 0xc5, 0x66, 0x6c, 0x69, // d......3.i...fli + 0x89, 0x23, 0xc5, 0x06, 0x64, 0x55, 0x04, 0xcb, 0x06, 0xb1, 0xc0, 0x0e, 0xfc, 0xba, 0xa0, 0x57, // .#..dU.........W + 0x5e, 0xe2, 0xef, 0x02, 0x7e, 0xfd, 0x80, 0xad, 0x82, 0x55, 0x4e, 0x03, 0x0c, 0x72, 0x02, 0x07, // ^...~....UN..r.. + 0x80, 0x7e, 0x00, 0x00, 0xff, 0xff, 0xff, 0xbc, 0xfe, 0x4b, 0x02, 0x4c, 0x05, 0xe0, 0x02, 0x26, // .~.......K.L...& + 0x01, 0x50, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0xff, 0x4a, 0xff, 0xf5, 0x00, 0x14, 0x00, 0xb4, // .P.....S.J...... + 0x2f, 0x15, 0x3f, 0x15, 0x02, 0x72, 0xb2, 0x7f, 0x15, 0x01, 0x72, 0xb2, 0x5f, 0x15, 0x01, 0x72, // /.?..r....r._..r + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x08, 0x25, 0x02, 0x26, // 01...........%.& + 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x03, 0xad, 0x01, 0x4c, 0x01, 0xb3, 0x00, 0x53, 0x00, 0xb0, // .$.......L...S.. + 0x1a, 0x2f, 0xb0, 0x0c, 0x2f, 0xb4, 0x4f, 0x0c, 0x5f, 0x0c, 0x02, 0x71, 0xb2, 0x3f, 0x0c, 0x01, // ./../.O._..q.?.. + 0x72, 0xb2, 0x8f, 0x0c, 0x01, 0x71, 0xb2, 0xaf, 0x1a, 0x01, 0x5d, 0xb2, 0xef, 0x1a, 0x01, 0x5d, // r....q....]....] + 0xb4, 0x4f, 0x1a, 0x5f, 0x1a, 0x02, 0x71, 0xb2, 0x3f, 0x1a, 0x01, 0x72, 0xb2, 0x8f, 0x1a, 0x01, // .O._..q.?..r.... + 0x71, 0xb2, 0x0f, 0x1a, 0x01, 0x71, 0xb2, 0xcf, 0x1a, 0x01, 0x5d, 0xb4, 0x6f, 0x1a, 0x7f, 0x1a, // q....q....].o... + 0x02, 0x5d, 0xb4, 0x1f, 0x1a, 0x2f, 0x1a, 0x02, 0x5d, 0xb0, 0x1a, 0x10, 0xb0, 0x20, 0xd0, 0x30, // .].../..].... .0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x06, 0xe3, 0x02, 0x26, // 1......j.......& + 0x00, 0x44, 0x00, 0x00, 0x00, 0x07, 0x03, 0xad, 0x00, 0xe4, 0x00, 0x71, 0xff, 0xff, 0xff, 0xec, // .D.........q.... + 0x00, 0x00, 0x07, 0x61, 0x07, 0x1e, 0x02, 0x26, 0x00, 0x88, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...a...&.......v + 0x02, 0xca, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, // ...Y.....EX../.. + 0x14, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x14, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x3a, // ..>Y....]01....: + 0xff, 0xeb, 0x06, 0x7c, 0x05, 0xdd, 0x02, 0x26, 0x00, 0xa8, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...|...&.......v + 0x02, 0x7e, 0x00, 0x18, 0x00, 0x16, 0x00, 0xb2, 0xbf, 0x46, 0x01, 0x71, 0xb6, 0xdf, 0x46, 0xef, // .~.......F.q..F. + 0x46, 0xff, 0x46, 0x03, 0x71, 0xb2, 0x0f, 0x46, 0x01, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0x71, // F.F.q..F.r01...q + 0xff, 0xa2, 0x05, 0x02, 0x07, 0x5c, 0x02, 0x26, 0x00, 0x9a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.......v + 0x01, 0xdd, 0x01, 0x97, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x36, 0x2f, 0x1b, 0xb1, // .........EX.6/.. + 0x36, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0x79, 0x04, 0x2a, // 6.>Y01.....a.y.* + 0x05, 0xdb, 0x02, 0x26, 0x00, 0xba, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x3e, 0x00, 0x16, // ...&.......v.>.. + 0x00, 0x1f, 0x00, 0xb2, 0xbf, 0x35, 0x01, 0x71, 0xb6, 0xdf, 0x35, 0xef, 0x35, 0xff, 0x35, 0x03, // .....5.q..5.5.5. + 0x71, 0x40, 0x0b, 0x0f, 0x35, 0x1f, 0x35, 0x2f, 0x35, 0x3f, 0x35, 0x4f, 0x35, 0x05, 0x72, 0x30, // q@..5.5/5?5O5.r0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xfe, 0x11, 0x04, 0x92, 0x05, 0xc5, 0x02, 0x26, // 1......a.......& + 0x00, 0x36, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x6c, 0xfe, 0x97, 0xff, 0xff, 0x00, 0x67, // .6.....c.l.....g + 0xfe, 0x12, 0x03, 0xc9, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x56, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, // .....N.&.V.....c + 0x01, 0x1e, 0xfe, 0x98, 0x00, 0x01, 0xff, 0xbc, 0xfe, 0x4b, 0x01, 0x70, 0x04, 0x3a, 0x00, 0x0f, // .........K.p.:.. + 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, // .)...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x08, 0x3e, 0x59, 0xb1, 0x0b, 0x02, // ..EX../....>Y... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x14, 0x06, 0x23, // ..+X!...Y01....# + 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x01, 0x70, 0xac, 0x99, 0x1f, // "&'7..3265..p... + 0x33, 0x1d, 0x0e, 0x0e, 0x41, 0x12, 0x3b, 0x45, 0x04, 0x3a, 0xfb, 0x6d, 0xa7, 0xb5, 0x09, 0x09, // 3...A.;E.:.m.... + 0x96, 0x05, 0x08, 0x67, 0x5a, 0x04, 0x93, 0x00, 0xff, 0xff, 0x00, 0x50, 0x03, 0xfd, 0x01, 0x51, // ...gZ......P...Q + 0x06, 0x18, 0x03, 0x06, 0x03, 0x35, 0x00, 0x00, 0x00, 0x06, 0x00, 0xb0, 0x04, 0x2f, 0x30, 0x31, // .....5......./01 + 0x00, 0x01, 0x00, 0xab, 0x04, 0xe4, 0x03, 0x11, 0x05, 0xeb, 0x00, 0x08, 0x00, 0x49, 0x00, 0xb0, // .............I.. + 0x04, 0x2f, 0xb2, 0x8f, 0x04, 0x01, 0x71, 0xb2, 0xff, 0x04, 0x01, 0x71, 0xb2, 0xaf, 0x04, 0x01, // ./....q....q.... + 0x71, 0xb2, 0xdf, 0x04, 0x01, 0x5d, 0xb2, 0x3f, 0x04, 0x01, 0x5d, 0xb0, 0x02, 0xd0, 0xb0, 0x04, // q....].?..]..... + 0x10, 0xb0, 0x07, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0xaf, 0x07, 0x01, 0x5d, // .....+X...Y....] + 0xb6, 0x0f, 0x07, 0x1f, 0x07, 0x2f, 0x07, 0x03, 0x5d, 0xb2, 0x2f, 0x07, 0x01, 0x71, 0xb2, 0x03, // ...../..]./..q.. + 0x04, 0x07, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x15, 0x23, 0x27, 0x07, 0x23, 0x35, 0x37, 0x33, // ....901..#'.#573 + 0x03, 0x11, 0xa1, 0x93, 0x92, 0xa0, 0xf6, 0x78, 0x04, 0xfd, 0x19, 0x94, 0x94, 0x1a, 0xed, 0x00, // .......x........ + 0x00, 0x01, 0x00, 0x8c, 0x04, 0xe4, 0x03, 0x02, 0x05, 0xeb, 0x00, 0x08, 0x00, 0x46, 0x00, 0xb0, // .............F.. + 0x04, 0x2f, 0xb2, 0x8f, 0x04, 0x01, 0x71, 0xb2, 0xff, 0x04, 0x01, 0x71, 0xb2, 0xaf, 0x04, 0x01, // ./....q....q.... + 0x71, 0xb2, 0xdf, 0x04, 0x01, 0x5d, 0xb2, 0x3f, 0x04, 0x01, 0x5d, 0xb0, 0x08, 0xb0, 0x0a, 0x2b, // q....].?..]....+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x2f, 0x08, 0x01, 0x71, 0xb2, 0xaf, 0x08, 0x01, 0x5d, 0xb6, // X...Y./..q....]. + 0x0f, 0x08, 0x1f, 0x08, 0x2f, 0x08, 0x03, 0x5d, 0xb2, 0x00, 0x04, 0x08, 0x11, 0x12, 0x39, 0xb0, // ..../..]......9. + 0x01, 0xd0, 0x30, 0x31, 0x01, 0x37, 0x33, 0x15, 0x05, 0x23, 0x27, 0x35, 0x33, 0x01, 0xc5, 0x93, // ..01.73..#'53... + 0xaa, 0xfe, 0xff, 0x77, 0xfe, 0xa6, 0x05, 0x57, 0x94, 0x12, 0xf5, 0xf3, 0x14, 0x00, 0x00, 0x00, // ...w...W........ + 0x00, 0x01, 0x00, 0x81, 0x04, 0xa4, 0x02, 0xd8, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x47, 0x00, 0xb0, // .............G.. + 0x04, 0x2f, 0xb2, 0x2f, 0x04, 0x01, 0x5d, 0xb2, 0x9f, 0x04, 0x01, 0x5d, 0xb2, 0x7f, 0x04, 0x01, // ././..]....].... + 0x5d, 0xb2, 0x0f, 0x04, 0x01, 0x5d, 0xb2, 0x40, 0x04, 0x01, 0x5d, 0xb0, 0x0c, 0xb0, 0x0a, 0x2b, // ]....].@..]....+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0xff, 0x0c, 0x01, 0x5d, 0xb2, 0x0f, 0x0c, 0x01, 0x71, 0xb0, // X...Y....]....q. + 0x09, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb4, 0xaf, 0x09, 0xbf, 0x09, 0x02, 0x5d, // ...+X...Y......] + 0xb0, 0x0f, 0xd0, 0x30, 0x31, 0x01, 0x17, 0x16, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, // ...01....#"&773. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x02, 0xd2, 0x02, 0x04, 0xa2, 0x89, 0x8a, 0xa2, 0x05, 0x02, 0x97, // .3265........... + 0x44, 0x4a, 0x48, 0x46, 0x05, 0xb0, 0x06, 0x74, 0x92, 0x92, 0x74, 0x06, 0x42, 0x52, 0x53, 0x41, // DJHF...t..t.BRSA + 0x00, 0x01, 0x00, 0xa0, 0x04, 0xe7, 0x01, 0x7a, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x17, 0x00, 0xb0, // .......z........ + 0x01, 0x2f, 0xb2, 0x3f, 0x01, 0x01, 0x5d, 0xb1, 0x02, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ./.?..].....+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x35, 0x33, 0x01, 0x7a, 0xda, 0xda, 0x04, 0xe7, 0xc9, // ..Y01.#53.z..... + 0x00, 0x02, 0x00, 0x85, 0x04, 0x5a, 0x02, 0x22, 0x05, 0xe2, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x38, // .....Z.".......8 + 0x00, 0x7c, 0xb0, 0x09, 0x2f, 0x18, 0xb2, 0x40, 0x09, 0x01, 0x5d, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, // .|../..@..]....+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb4, 0x3f, 0x03, 0x4f, 0x03, 0x02, 0x5d, 0xb0, 0x09, 0x10, 0xb0, // X...Y.?.O..].... + 0x0f, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x03, 0x10, 0xb0, 0x15, 0xb0, 0x0a, // ...+X...Y....... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // +X...Y01.4632... + 0x06, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, // .#"&7..32654&#". + 0x85, 0x79, 0x57, 0x55, 0x78, 0x77, 0x56, 0x57, 0x79, 0x67, 0x3e, 0x2b, 0x2a, 0x3c, 0x3c, 0x2a, // .yWUxwVWyg>+*<<* + 0x2b, 0x3e, 0x05, 0x1c, 0x54, 0x72, 0x71, 0x55, 0x56, 0x6c, 0x6c, 0x56, 0x2b, 0x3d, 0x3b, 0x2d, // +>..TrqUVllV+=;- + 0x2d, 0x3e, 0x3e, 0x00, 0x00, 0x01, 0x00, 0x44, 0xfe, 0x50, 0x01, 0xd3, 0x00, 0x39, 0x00, 0x13, // ->>....D.P...9.. + 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x08, 0x3e, 0x59, // .)...EX../....>Y + 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb0, // .....+X!...Y.... + 0x13, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x21, 0x06, 0x06, 0x15, 0x14, // ...+X...Y01!.... + 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x01, // .3267...#"&5467. + 0x84, 0x46, 0x4f, 0x2d, 0x33, 0x1b, 0x2e, 0x1a, 0x21, 0x24, 0x57, 0x3c, 0x5f, 0x79, 0x79, 0x7f, // .FO-3...!$W<_yy. + 0x34, 0x5f, 0x36, 0x2a, 0x30, 0x0f, 0x0b, 0x7b, 0x13, 0x19, 0x6e, 0x63, 0x50, 0x90, 0x38, 0x00, // 4_6*0..{..ncP.8. + 0x00, 0x01, 0x00, 0x87, 0x04, 0xe1, 0x03, 0x3d, 0x05, 0xf3, 0x00, 0x13, 0x00, 0x4e, 0x00, 0xb0, // .......=.....N.. + 0x03, 0x2f, 0xb2, 0x6f, 0x03, 0x01, 0x71, 0xb2, 0x3f, 0x03, 0x01, 0x5d, 0xb2, 0xbf, 0x03, 0x01, // ./.o..q.?..].... + 0x5d, 0xb2, 0x80, 0x03, 0x01, 0x5d, 0xb0, 0x06, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // ]....]....+X...Y + 0xb0, 0x03, 0x10, 0xb0, 0x09, 0xd0, 0xb0, 0x06, 0x10, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ..............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb0, 0x13, 0xd0, 0x30, 0x31, 0x01, 0x14, 0x06, 0x23, // ...Y......01...# + 0x22, 0x26, 0x23, 0x22, 0x06, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x35, // "&#"..'4632.3265 + 0x03, 0x3d, 0x77, 0x5a, 0x47, 0x9a, 0x33, 0x2b, 0x3a, 0x6c, 0x76, 0x5b, 0x38, 0xa8, 0x34, 0x29, // .=wZG.3+:lv[8.4) + 0x3c, 0x05, 0xd3, 0x5e, 0x82, 0x5d, 0x41, 0x2e, 0x1a, 0x5d, 0x89, 0x5e, 0x41, 0x2f, 0x00, 0x00, // <..^.]A..].^A/.. + 0x00, 0x02, 0x00, 0x64, 0x04, 0xe4, 0x03, 0x4a, 0x05, 0xee, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x3b, // ...d...J.......; + 0x00, 0xb0, 0x03, 0x2f, 0xb2, 0x3f, 0x03, 0x01, 0x5d, 0xb2, 0x6f, 0x03, 0x01, 0x5d, 0xb2, 0x1f, // .../.?..].o..].. + 0x03, 0x01, 0x5d, 0xb2, 0x8f, 0x03, 0x01, 0x5d, 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // ..]....]....+X.. + 0xdc, 0x59, 0xb2, 0xaf, 0x00, 0x01, 0x5d, 0xb6, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x03, 0x5d, // .Y....]...../..] + 0xb0, 0x06, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x09, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x17, 0x01, 0x23, // .........01.3..# + 0x27, 0x03, 0x33, 0x17, 0x03, 0x23, 0x02, 0x62, 0xe5, 0x03, 0xfe, 0xd4, 0xab, 0x02, 0x55, 0xd3, // '.3..#.b......U. + 0x02, 0xf0, 0x9d, 0x05, 0xee, 0x06, 0xfe, 0xfc, 0x05, 0x01, 0x05, 0x05, 0xfe, 0xfb, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0xb6, 0xfe, 0x85, 0x01, 0xec, 0xff, 0xac, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x31, // ...............1 + 0x00, 0xb0, 0x18, 0x2f, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0f, // .../....+X...Y.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x09, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // ..+X...Y....+X.. + 0xdc, 0x59, 0xb0, 0x03, 0x10, 0xb0, 0x15, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, // .Y.......+X...Y0 + 0x31, 0x17, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x14, 0x16, // 1.4632....#"&7.. + 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0xb6, 0x5b, 0x42, 0x3f, 0x5a, 0x59, 0x40, // 32654&#"..[B?ZY@ + 0x42, 0x5b, 0x59, 0x28, 0x1c, 0x1a, 0x26, 0x26, 0x1a, 0x1c, 0x28, 0xea, 0x41, 0x55, 0x55, 0x41, // B[Y(..&&..(.AUUA + 0x3f, 0x52, 0x52, 0x3f, 0x1a, 0x26, 0x25, 0x1b, 0x1e, 0x27, 0x28, 0x00, 0x00, 0x01, 0xfc, 0xd1, // ?RR?.&%..'(..... + 0x04, 0xba, 0xfe, 0x04, 0x06, 0x16, 0x00, 0x03, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x03, // ............./.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x23, 0x03, 0x33, 0xfe, 0x04, // ..+X...Y01.#.3.. + 0x83, 0xb0, 0xba, 0x04, 0xba, 0x01, 0x5c, 0x00, 0x00, 0x01, 0xfd, 0x6f, 0x04, 0xba, 0xfe, 0xa4, // ...........o.... + 0x06, 0x17, 0x00, 0x03, 0x00, 0x10, 0x00, 0xb0, 0x03, 0x2f, 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, // ........./....+X + 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x33, 0x03, 0x23, 0xfd, 0xee, 0xb6, 0xbc, 0x79, 0x06, // ...Y01.3.#....y. + 0x17, 0xfe, 0xa3, 0x00, 0xff, 0xff, 0xfc, 0x8d, 0x04, 0xe1, 0xff, 0x43, 0x05, 0xf3, 0x00, 0x07, // ...........C.... + 0x01, 0x58, 0xfc, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfd, 0x5b, 0x04, 0xda, 0xfe, 0x93, // .X.........[.... + 0x06, 0x76, 0x00, 0x0f, 0x00, 0x33, 0x00, 0x7c, 0xb0, 0x00, 0x2f, 0x18, 0xb0, 0x01, 0xb0, 0x0a, // .v...3.|../..... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x07, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // +X...Y....+X...Y + 0xb0, 0x08, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x01, 0x10, 0xb0, 0x0e, 0xb0, // ....+X...Y...... + 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, // .+X...Y01.'6654& + 0x23, 0x37, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x07, 0xfd, 0x6f, 0x01, 0x4c, 0x41, 0x57, 0x49, // #72.......o.LAWI + 0x07, 0x93, 0x9e, 0x56, 0x41, 0x01, 0x04, 0xda, 0x9a, 0x04, 0x20, 0x25, 0x27, 0x26, 0x6c, 0x67, // ...VA..... %'&lg + 0x56, 0x46, 0x49, 0x09, 0x47, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfc, 0x2c, 0x04, 0xe4, 0xff, 0x12, // VFI.G......,.... + 0x05, 0xee, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x22, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x02, 0xd0, 0xb0, // .......".../.... + 0x06, 0x10, 0xb0, 0x0a, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb6, 0x0f, 0x0a, 0x1f, // ......+X...Y.... + 0x0a, 0x2f, 0x0a, 0x03, 0x5d, 0xb0, 0x05, 0xd0, 0x30, 0x31, 0x01, 0x07, 0x23, 0x01, 0x37, 0x33, // ./..]...01..#.73 + 0x01, 0x23, 0x03, 0x37, 0x33, 0xfe, 0x05, 0x02, 0xab, 0xfe, 0xd4, 0x03, 0xe5, 0x01, 0xfe, 0x9d, // .#.73........... + 0xf1, 0x02, 0xd4, 0x04, 0xe9, 0x05, 0x01, 0x04, 0x06, 0xfe, 0xf6, 0x01, 0x05, 0x05, 0x00, 0x00, // ................ + 0x00, 0x01, 0xfd, 0x3c, 0xfe, 0xaf, 0xfe, 0x16, 0xff, 0x77, 0x00, 0x03, 0x00, 0x1c, 0x00, 0xb0, // ...<.....w...... + 0x04, 0x2f, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x00, 0x04, 0xb0, // ./....+X...Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x35, 0x33, 0xfe, 0x16, // .+X!...Y01.#53.. + 0xda, 0xda, 0xfe, 0xaf, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc3, 0x04, 0xf6, 0x01, 0xd0, // ................ + 0x06, 0x72, 0x00, 0x03, 0x00, 0x1a, 0x00, 0xb0, 0x00, 0x2f, 0xb2, 0x0f, 0x00, 0x01, 0x5d, 0xb2, // .r......./....]. + 0x5f, 0x00, 0x01, 0x5d, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, // _..]....+X...Y01 + 0x01, 0x33, 0x03, 0x23, 0x01, 0x00, 0xd0, 0xaf, 0x5e, 0x06, 0x72, 0xfe, 0x84, 0x00, 0x00, 0x00, // .3.#....^.r..... + 0x00, 0x03, 0x00, 0xa1, 0x04, 0xe8, 0x03, 0x65, 0x06, 0xc2, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, // .......e........ + 0x00, 0x27, 0x00, 0x7c, 0xb0, 0x05, 0x2f, 0x18, 0xb0, 0x01, 0xd0, 0xb1, 0x02, 0x04, 0xb0, 0x0a, // .'.|../......... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0xd0, 0xb0, 0x0b, 0xd0, 0xb0, 0x08, 0xb0, // +X!...Y......... + 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x23, 0x35, 0x33, 0x05, 0x23, 0x35, // .+X...Y01.#53.#5 + 0x33, 0x13, 0x33, 0x03, 0x23, 0x03, 0x65, 0xc7, 0xc7, 0xfe, 0x02, 0xc6, 0xc6, 0x8a, 0xda, 0x7f, // 3.3.#.e......... + 0x8e, 0x04, 0xe8, 0xc8, 0xc8, 0xc8, 0x01, 0x12, 0xfe, 0xfa, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, // ................ + 0x00, 0x00, 0x05, 0x1a, 0x06, 0x72, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x00, 0x06, 0x01, 0x61, // .....r.&.$.....a + 0x2e, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa1, 0x02, 0x70, 0x01, 0x67, 0x03, 0x44, 0x01, 0x06, // .........p.g.D.. + 0x00, 0x79, 0x00, 0x00, 0x00, 0x06, 0x00, 0xb0, 0x02, 0x2f, 0x30, 0x31, 0xff, 0xff, 0xff, 0xe3, // .y......./01.... + 0x00, 0x00, 0x04, 0xde, 0x06, 0x74, 0x00, 0x26, 0x00, 0x28, 0x64, 0x00, 0x00, 0x07, 0x01, 0x61, // .....t.&.(d....a + 0xff, 0x20, 0x00, 0x02, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x65, 0x06, 0x74, 0x00, 0x26, // . .........e.t.& + 0x00, 0x2b, 0x64, 0x00, 0x00, 0x07, 0x01, 0x61, 0xff, 0x51, 0x00, 0x02, 0xff, 0xff, 0x00, 0x18, // .+d....a.Q...... + 0x00, 0x00, 0x01, 0xe8, 0x06, 0x73, 0x00, 0x26, 0x00, 0x2c, 0x64, 0x00, 0x00, 0x07, 0x01, 0x61, // .....s.&.,d....a + 0xff, 0x55, 0x00, 0x01, 0xff, 0xff, 0x00, 0x44, 0xff, 0xeb, 0x05, 0x16, 0x06, 0x72, 0x00, 0x26, // .U.....D.....r.& + 0x00, 0x32, 0x14, 0x00, 0x00, 0x06, 0x01, 0x61, 0x81, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x81, // .2.....a........ + 0x00, 0x00, 0x05, 0x32, 0x06, 0x72, 0x00, 0x26, 0x00, 0x3c, 0x64, 0x00, 0x00, 0x07, 0x01, 0x61, // ...2.r.&.Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, // ..EX../....>Y... + 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, // .....+X!...Y01.! + 0x11, 0x23, 0x11, 0x21, 0x04, 0x31, 0xfd, 0x48, 0xc5, 0x03, 0x7d, 0x05, 0x15, 0xfa, 0xeb, 0x05, // .#.!.1.H..}..... + 0xb0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1e, 0x00, 0x00, 0x05, 0x70, 0x05, 0xb0, 0x00, 0x03, // ...........p.... + 0x00, 0x07, 0x00, 0x42, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, // ...B...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb1, // >Y..EX../....>Y. + 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x06, // ....+X!...Y..... + 0xd0, 0xb4, 0x8f, 0x06, 0x9f, 0x06, 0x02, 0x5d, 0xb2, 0x7d, 0x06, 0x01, 0x5d, 0xb4, 0x5b, 0x06, // .......].}..].[. + 0x6b, 0x06, 0x02, 0x5d, 0x30, 0x31, 0x01, 0x33, 0x01, 0x21, 0x25, 0x21, 0x01, 0x23, 0x02, 0x87, // k..]01.3.!%!.#.. + 0xa9, 0x02, 0x40, 0xfa, 0xae, 0x01, 0x08, 0x03, 0x46, 0xfe, 0x70, 0x06, 0x05, 0xb0, 0xfa, 0x50, // ..@.....F.p....P + 0x9a, 0x04, 0x1a, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x05, 0xb0, 0x02, 0x06, // ...........z.... + 0x00, 0x28, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0x00, 0x00, 0x04, 0x6d, 0x05, 0xb0, 0x02, 0x06, // .(.....a...m.... + 0x00, 0x3d, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x05, 0xb0, 0x02, 0x06, // .=.............. + 0x00, 0x2b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x00, 0x03, // .+.....q........ + 0x00, 0x11, 0x00, 0x1f, 0x00, 0x70, 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, // .....p.../..EX.. + 0x2f, 0x1b, 0xb1, 0x0e, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x07, 0x06, 0x3e, 0x59, 0xb2, 0xcf, 0x02, 0x01, 0x5d, 0xb2, 0x1f, 0x02, 0x01, 0x71, 0xb2, 0xef, // ..>Y....]....q.. + 0x02, 0x01, 0x71, 0xb2, 0xbf, 0x02, 0x01, 0x71, 0xb2, 0xef, 0x02, 0x01, 0x5d, 0xb2, 0x7f, 0x02, // ..q....q....]... + 0x01, 0x5d, 0xb2, 0x2f, 0x02, 0x01, 0x5d, 0xb0, 0x02, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, // .]./..]........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x15, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x1c, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x35, 0x21, 0x05, 0x10, 0x00, 0x21, 0x22, 0x00, // ...Y01.!5!...!". + 0x11, 0x11, 0x10, 0x00, 0x33, 0x20, 0x00, 0x11, 0x27, 0x34, 0x02, 0x23, 0x22, 0x02, 0x15, 0x11, // ....3 ..'4.#"... + 0x14, 0x12, 0x33, 0x32, 0x36, 0x35, 0x03, 0xbf, 0xfe, 0x03, 0x01, 0xfd, 0x01, 0x43, 0xfe, 0xb5, // ..3265.......C.. + 0xfe, 0xf8, 0xff, 0xfe, 0xc1, 0x01, 0x3f, 0xff, 0x01, 0x08, 0x01, 0x4b, 0xc5, 0xd8, 0xb6, 0xac, // ......?....K.... + 0xcd, 0xcd, 0xac, 0xb7, 0xd7, 0x02, 0x93, 0x9a, 0xd7, 0xfe, 0xf5, 0xfe, 0xa0, 0x01, 0x60, 0x01, // ..............`. + 0x0b, 0x01, 0x03, 0x01, 0x0a, 0x01, 0x62, 0xfe, 0x9f, 0xfe, 0xf5, 0x02, 0xc8, 0x01, 0x00, 0xff, // ......b......... + 0x00, 0xc8, 0xfe, 0xfb, 0xca, 0xff, 0x00, 0xff, 0xcb, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xbe, // ................ + 0x00, 0x00, 0x01, 0x84, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2c, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // .........,...... + 0x00, 0x00, 0x05, 0x20, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x31, // ... ...........1 + 0x00, 0x00, 0x05, 0x07, 0x05, 0xb0, 0x00, 0x07, 0x00, 0x45, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........E...EX. + 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x00, 0xd0, 0xb2, 0x9f, 0x00, 0x01, 0x5d, 0x40, 0x0d, 0x3d, // >Y..........]@.= + 0x00, 0x4d, 0x00, 0x5d, 0x00, 0x6d, 0x00, 0x7d, 0x00, 0x8d, 0x00, 0x06, 0x5d, 0x30, 0x31, 0x01, // .M.].m.}....]01. + 0x23, 0x01, 0x23, 0x01, 0x33, 0x01, 0x23, 0x02, 0x9f, 0x06, 0xfe, 0x61, 0xc9, 0x02, 0x16, 0xaa, // #.#.3.#....a.... + 0x02, 0x16, 0xc9, 0x04, 0x93, 0xfb, 0x6d, 0x05, 0xb0, 0xfa, 0x50, 0x00, 0xff, 0xff, 0x00, 0xb4, // ......m...P..... + 0x00, 0x00, 0x06, 0x52, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x30, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // ...R.....0...... + 0x00, 0x00, 0x05, 0x01, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x31, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7b, // .........1.....{ + 0x00, 0x00, 0x04, 0x24, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x59, 0x00, 0xb0, // ...$.........Y.. + 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0xef, 0x04, 0x01, 0x5d, 0xb2, 0x2f, 0x04, // .+X!...Y....]./. + 0x01, 0x5d, 0xb2, 0x70, 0x04, 0x01, 0x72, 0xb0, 0x04, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, // .].p..r........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x37, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x21, 0x03, // !...Y017!.!.!.!. + 0x21, 0x15, 0x21, 0x7b, 0x03, 0xa9, 0xfc, 0x57, 0x53, 0x02, 0xf9, 0xfd, 0x07, 0x52, 0x03, 0x9c, // !.!{...WS....R.. + 0xfc, 0x64, 0x9a, 0x9a, 0x03, 0x41, 0x9b, 0x03, 0x0a, 0x9b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, // .d...A.........q + 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x02, 0x06, 0x00, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, // .........2...... + 0x00, 0x00, 0x05, 0x03, 0x05, 0xb0, 0x00, 0x07, 0x00, 0x39, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........9...EX. + 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x05, 0x03, 0xc6, 0xfd, 0x3c, // Y01!#.!.#.!....< + 0xc5, 0x04, 0x4f, 0x05, 0x15, 0xfa, 0xeb, 0x05, 0xb0, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // ..O............. + 0x00, 0x00, 0x04, 0xcc, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, // .........3.....F + 0x00, 0x00, 0x04, 0x48, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x4e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...H.....N...EX. + 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb2, 0x07, 0x04, 0x09, 0x11, 0x12, 0x39, 0xb0, 0x07, 0x10, 0xb0, // ...>Y......9.... + 0x00, 0xd0, 0xb0, 0x04, 0x10, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ..........+X!... + 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x07, 0x10, 0xb0, 0x0e, 0xd0, 0x30, 0x31, 0x01, 0x01, 0x17, 0x21, 0x15, 0x21, 0x35, 0x01, // ......01...!.!5. + 0x01, 0x35, 0x21, 0x15, 0x21, 0x07, 0x01, 0x02, 0xf6, 0xfe, 0x43, 0x03, 0x03, 0x0c, 0xfb, 0xfe, // .5!.!.....C..... + 0x01, 0xe0, 0xfe, 0x20, 0x03, 0xd0, 0xfd, 0x26, 0x03, 0x01, 0xbd, 0x02, 0xcb, 0xfd, 0xd5, 0x05, // ... ...&........ + 0x9b, 0x93, 0x02, 0x45, 0x02, 0x45, 0x93, 0x9b, 0x05, 0xfd, 0xd3, 0x00, 0xff, 0xff, 0x00, 0x22, // ...E.E........." + 0x00, 0x00, 0x04, 0x8e, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x37, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, // .........7...... + 0x00, 0x00, 0x04, 0xce, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x54, // .........<.....T + 0x00, 0x00, 0x05, 0x4d, 0x05, 0xb0, 0x00, 0x11, 0x00, 0x1a, 0x00, 0x23, 0x00, 0x62, 0x00, 0xb0, // ...M.......#.b.. + 0x09, 0x2f, 0xb0, 0x0f, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, // ./../..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x3f, 0x0f, 0x01, 0x5d, 0xb4, 0x5f, 0x0f, 0x6f, 0x0f, 0x02, 0x5d, 0xb0, 0x0f, 0x10, 0xb0, 0x00, // ?..]._.o..]..... + 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x09, 0x10, 0xb1, 0x15, 0x03, 0xb0, 0x0a, 0x2b, // ...............+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x17, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1f, 0xd0, 0xb0, 0x15, 0x10, 0xb0, 0x20, 0xd0, 0x30, 0x31, // !...Y....... .01 + 0x01, 0x16, 0x00, 0x15, 0x14, 0x00, 0x07, 0x15, 0x23, 0x35, 0x26, 0x00, 0x35, 0x34, 0x00, 0x37, // ........#5&.54.7 + 0x35, 0x33, 0x01, 0x14, 0x16, 0x37, 0x37, 0x11, 0x27, 0x26, 0x06, 0x05, 0x34, 0x26, 0x23, 0x07, // 53...77.'&..4&#. + 0x11, 0x17, 0x16, 0x36, 0x03, 0x34, 0xe6, 0x01, 0x33, 0xfe, 0xcd, 0xe6, 0xc5, 0xe8, 0xfe, 0xcd, // ...6.4..3....... + 0x01, 0x33, 0xe8, 0xc5, 0xfd, 0xe3, 0xb1, 0xa1, 0x06, 0x06, 0xa0, 0xb2, 0x03, 0x72, 0xb2, 0x9d, // .3...........r.. + 0x06, 0x06, 0x9d, 0xb2, 0x04, 0xcd, 0x05, 0xfe, 0xe5, 0xda, 0xdd, 0xfe, 0xe3, 0x04, 0xd5, 0xd5, // ................ + 0x03, 0x01, 0x1c, 0xdd, 0xdb, 0x01, 0x1e, 0x04, 0xe2, 0xfd, 0x21, 0xa1, 0xbb, 0x01, 0x02, 0x02, // ..........!..... + 0xb3, 0x02, 0x01, 0xbd, 0x9e, 0x9f, 0xbb, 0x02, 0xfd, 0x4d, 0x02, 0x01, 0xbd, 0x00, 0x00, 0x00, // .........M...... + 0xff, 0xff, 0x00, 0x42, 0x00, 0x00, 0x04, 0xd6, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3b, 0x00, 0x00, // ...B.........;.. + 0x00, 0x01, 0x00, 0x57, 0x00, 0x00, 0x05, 0x1b, 0x05, 0xb0, 0x00, 0x19, 0x00, 0x52, 0x00, 0xb0, // ...W.........R.. + 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x18, 0x2f, 0x1b, 0xb1, 0x18, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x16, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0xd0, 0xb0, 0x0d, 0x10, 0xb0, 0x0a, 0xd0, 0x30, 0x31, // !...Y.........01 + 0x01, 0x17, 0x36, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x00, 0x07, 0x11, 0x23, 0x11, 0x26, 0x00, // ..665.3.....#.&. + 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x17, 0x37, 0x11, 0x33, 0x03, 0x13, 0x06, 0x90, 0xad, 0xc5, // 5.3....7.3...... + 0xfe, 0xe2, 0xea, 0xc6, 0xe3, 0xfe, 0xed, 0xc4, 0xa4, 0x88, 0x06, 0xc6, 0x01, 0xe5, 0x02, 0x13, // ................ + 0xd3, 0xac, 0x02, 0x3b, 0xfd, 0xc5, 0xf5, 0xfe, 0xd7, 0x18, 0xfe, 0xc1, 0x01, 0x40, 0x18, 0x01, // ...;.........@.. + 0x28, 0xf5, 0x02, 0x3b, 0xfd, 0xc5, 0xaa, 0xd2, 0x14, 0x01, 0x03, 0xca, 0x00, 0x01, 0x00, 0x70, // (..;...........p + 0x00, 0x00, 0x04, 0xd0, 0x05, 0xc5, 0x00, 0x23, 0x00, 0x5a, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .......#.Z...EX. + 0x19, 0x2f, 0x1b, 0xb1, 0x19, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x06, // ...>Y..EX."/..". + 0x3e, 0x59, 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, // >Y.!...+X!...Y.. + 0xd0, 0xb0, 0x19, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0xb0, 0x10, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x0e, 0xd0, 0x30, 0x31, 0x25, 0x36, 0x12, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, // ..01%6.554&#"... + 0x14, 0x12, 0x17, 0x15, 0x21, 0x35, 0x33, 0x26, 0x02, 0x35, 0x35, 0x10, 0x00, 0x33, 0x32, 0x00, // ....!53&.55..32. + 0x11, 0x15, 0x14, 0x02, 0x07, 0x33, 0x15, 0x21, 0x02, 0xdf, 0x8d, 0x9d, 0xc1, 0xaa, 0xa9, 0xc0, // .....3.!........ + 0xa1, 0x8f, 0xfe, 0x11, 0xea, 0x70, 0x80, 0x01, 0x35, 0xf9, 0xf9, 0x01, 0x37, 0x80, 0x6e, 0xf0, // .....p..5...7.n. + 0xfe, 0x0f, 0x9f, 0x19, 0x01, 0x1f, 0xfb, 0x76, 0xe9, 0xf9, 0xf9, 0xe9, 0x76, 0xfb, 0xfe, 0xe0, // .......v....v... + 0x18, 0x9f, 0x9a, 0x61, 0x01, 0x33, 0xa4, 0x74, 0x01, 0x1c, 0x01, 0x63, 0xfe, 0x9d, 0xfe, 0xe4, // ...a.3.t...c.... + 0x74, 0xa4, 0xfe, 0xcd, 0x61, 0x9a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcb, 0x00, 0x00, 0x02, 0x7c, // t...a..........| + 0x07, 0x0d, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0xff, 0x21, 0x01, 0x5d, // ...&.,.....j.!.] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, 0x07, 0x0c, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, // ...........&.<.. + 0x01, 0x07, 0x00, 0x6a, 0x00, 0x6f, 0x01, 0x5c, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...j.o.......EX. + 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0a, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x62, 0xff, 0xeb, 0x04, 0x80, // ...>Y01....b.... + 0x06, 0x79, 0x02, 0x26, 0x01, 0x8b, 0x00, 0x00, 0x00, 0x07, 0x01, 0x61, 0x01, 0x75, 0x00, 0x07, // .y.&.......a.u.. + 0xff, 0xff, 0x00, 0x62, 0xff, 0xed, 0x03, 0xe9, 0x06, 0x78, 0x02, 0x26, 0x01, 0x8f, 0x00, 0x00, // ...b.....x.&.... + 0x00, 0x07, 0x01, 0x61, 0x01, 0x2b, 0x00, 0x06, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x61, 0x03, 0xf5, // ...a.+.......a.. + 0x06, 0x79, 0x02, 0x26, 0x01, 0x91, 0x00, 0x00, 0x00, 0x07, 0x01, 0x61, 0x01, 0x46, 0x00, 0x07, // .y.&.......a.F.. + 0xff, 0xff, 0x00, 0xc5, 0xff, 0xeb, 0x02, 0x73, 0x06, 0x66, 0x02, 0x26, 0x01, 0x93, 0x00, 0x00, // .......s.f.&.... + 0x00, 0x06, 0x01, 0x61, 0x32, 0xf4, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8d, 0xff, 0xeb, 0x04, 0x26, // ...a2..........& + 0x06, 0x7a, 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, 0x01, 0x06, 0x01, 0x62, 0x54, 0xb8, 0x00, 0x16, // .z.&.......bT... + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x1a, // ...EX../....>Y.. + 0xdc, 0xb0, 0x17, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x62, 0xff, 0xeb, 0x04, 0x80, // ....01.....b.... + 0x04, 0x4e, 0x00, 0x1c, 0x00, 0x2b, 0x00, 0x64, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, // .N...+.d...EX../ + 0x1b, 0xb1, 0x18, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, // ....>Y..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, // ..EX../....>Y... + 0xb1, 0x04, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x11, 0x10, 0xb1, // .....+X!...Y.... + 0x20, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x18, 0x10, 0xb1, 0x28, // ...+X!...Y....( + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x14, 0x16, // ...+X!...Y01.... + 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x02, // 3267...#"&'..#". + 0x35, 0x35, 0x10, 0x12, 0x33, 0x32, 0x16, 0x17, 0x37, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, // 55..32..7...3267 + 0x35, 0x11, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x03, 0xe9, 0x29, 0x23, 0x0f, 0x1a, 0x0b, 0x17, // 5.&&#"....)#.... + 0x1d, 0x3c, 0x25, 0x4b, 0x64, 0x18, 0x37, 0x99, 0x63, 0xc6, 0xe0, 0xdf, 0xc9, 0x65, 0x9b, 0x37, // .<%Kd.7.c....e.7 + 0x33, 0xfd, 0xb3, 0x87, 0x8c, 0x51, 0x72, 0x27, 0x27, 0x73, 0x4e, 0x8d, 0x88, 0x04, 0x39, 0xfc, // 3....Qr''sN...9. + 0xdb, 0x48, 0x38, 0x03, 0x04, 0x8e, 0x14, 0x0e, 0x40, 0x45, 0x42, 0x43, 0x01, 0x1f, 0xea, 0x15, // .H8.....@EBC.... + 0x01, 0x05, 0x01, 0x40, 0x48, 0x44, 0x77, 0xfd, 0xbb, 0xa4, 0xcb, 0x47, 0x40, 0x08, 0x02, 0x1d, // ...@HDw....G@... + 0x3c, 0x46, 0xef, 0xbb, 0x00, 0x02, 0x00, 0x9d, 0xfe, 0x81, 0x04, 0x4f, 0x05, 0xc5, 0x00, 0x14, // Y..EX../. + 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb0, 0x2a, 0x10, 0xb1, 0x29, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y.*..)...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x06, 0x29, 0x2a, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb1, 0x1b, // ...Y..)*..9..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x22, 0x02, // ...+X!...Y....". + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x16, 0x15, 0x14, // ..+X!...Y01.2... + 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x34, 0x24, // .......#"&'.#.4$ + 0x13, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, // .2654&#".....326 + 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x02, 0x5f, 0xc3, 0xec, 0x64, 0x57, 0x77, 0x85, 0xfd, 0xca, // 54&##5._..dWw... + 0x52, 0x99, 0x3b, 0xc5, 0x01, 0x0a, 0xb4, 0x7a, 0x74, 0x7d, 0x6d, 0x6b, 0x92, 0x2c, 0x8d, 0x59, // R.;....zt}mk.,.Y + 0x81, 0x95, 0x83, 0x6f, 0x8f, 0x05, 0xc5, 0xdc, 0xae, 0x5b, 0x99, 0x2d, 0x2c, 0xc4, 0x81, 0xd1, // ...o.....[.-,... + 0xed, 0x2d, 0x2e, 0xfe, 0x3b, 0x05, 0xb0, 0xa5, 0xef, 0xfd, 0x97, 0x79, 0x6a, 0x5f, 0x8c, 0x8f, // .-..;......yj_.. + 0x6a, 0xfc, 0xc2, 0x34, 0x3a, 0xa0, 0x80, 0x70, 0xac, 0x9b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2e, // j..4:..p........ + 0xfe, 0x5f, 0x03, 0xe4, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x4b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ._...:...K...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x06, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x08, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0x09, 0x03, 0x06, 0x11, 0x12, 0x39, 0xb0, 0x09, 0x10, 0xb0, 0x02, 0xd0, 0xb4, // >Y......9....... + 0x8c, 0x02, 0x9c, 0x02, 0x02, 0x5d, 0xb0, 0x09, 0x10, 0xb0, 0x05, 0xd0, 0xb4, 0x8c, 0x05, 0x9c, // .....].......... + 0x05, 0x02, 0x5d, 0x30, 0x31, 0x01, 0x33, 0x01, 0x11, 0x23, 0x11, 0x01, 0x33, 0x01, 0x17, 0x33, // ..]01.3..#..3..3 + 0x37, 0x03, 0x1b, 0xc9, 0xfe, 0x89, 0xc5, 0xfe, 0x86, 0xca, 0x01, 0x00, 0x11, 0x06, 0x13, 0x04, // 7............... + 0x3a, 0xfc, 0x04, 0xfe, 0x21, 0x01, 0xe4, 0x03, 0xf7, 0xfd, 0x05, 0x4c, 0x4c, 0x00, 0x00, 0x00, // :...!......LL... + 0x00, 0x02, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x05, 0xb0, 0x00, 0x16, 0x00, 0x24, 0x00, 0x57, // ...a...*.....$.W + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, // ./....>Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x12, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x15, 0x21, 0x07, 0x01, 0x16, 0x16, 0x15, 0x15, // !...Y01..!...... + 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x12, 0x3f, 0x02, 0x25, 0x35, 0x01, 0x22, 0x06, // ..#".554.?.%5.". + 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x03, 0xaa, 0xfe, 0x3a, 0x02, // ....326554&...:. + 0x01, 0x73, 0x65, 0x70, 0xfe, 0xfc, 0xe0, 0xe0, 0xfe, 0xfb, 0xd3, 0xb9, 0x07, 0x02, 0xfe, 0xd7, // .sep............ + 0x01, 0x77, 0x8d, 0x91, 0x91, 0x8f, 0x8d, 0x92, 0x93, 0x05, 0xb0, 0x97, 0x06, 0xfe, 0xeb, 0x4b, // .w.............K + 0xf6, 0x96, 0x16, 0xf2, 0xfe, 0xcc, 0x01, 0x35, 0xf1, 0x16, 0xd7, 0x01, 0x2b, 0x1e, 0x01, 0x06, // .......5....+... + 0xec, 0x76, 0xfe, 0x03, 0xe2, 0xaa, 0x16, 0xac, 0xe0, 0xe0, 0xac, 0x16, 0xaa, 0xe2, 0x00, 0x00, // .v.............. + 0x00, 0x01, 0x00, 0x62, 0xff, 0xed, 0x03, 0xe9, 0x04, 0x4c, 0x00, 0x2a, 0x00, 0x8f, 0x00, 0xb0, // ...b.....L.*.... + 0x29, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x0a, 0x3e, 0x59, 0xb0, // )/..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb1, 0x06, 0x02, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x5f, 0x29, 0x01, 0x5d, 0xb2, 0xff, 0x29, // .+X!...Y._).]..) + 0x01, 0x5d, 0xb2, 0x6f, 0x29, 0x01, 0x71, 0xb2, 0xcf, 0x29, 0x01, 0x71, 0xb2, 0x3f, 0x29, 0x01, // .].o).q..).q.?). + 0x72, 0xb2, 0x6f, 0x29, 0x01, 0x72, 0xb2, 0xff, 0x29, 0x01, 0x71, 0xb2, 0x9f, 0x29, 0x01, 0x71, // r.o).r..).q..).q + 0xb2, 0x2f, 0x29, 0x01, 0x71, 0xb4, 0xbf, 0x29, 0xcf, 0x29, 0x02, 0x5d, 0xb2, 0x2f, 0x29, 0x01, // ./).q..).).]./). + 0x5d, 0xb2, 0x9f, 0x29, 0x01, 0x72, 0xb0, 0x29, 0x10, 0xb1, 0x2a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ]..).r.)..*...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x2a, 0x29, 0x11, 0x12, 0x39, 0xb0, 0x1a, 0x10, 0xb1, // !...Y..*)..9.... + 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x22, 0x06, // "...+X!...Y01.". + 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x17, 0x16, 0x04, 0x23, 0x22, 0x26, 0x35, 0x34, // ...32653...#"&54 + 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, // 67&&54632...#4&# + 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x02, 0x1a, 0x79, 0x79, 0x89, 0x76, 0x70, 0x91, // "....33...yy.vp. + 0xba, 0x02, 0x05, 0xfe, 0xf6, 0xb8, 0xca, 0xfb, 0x67, 0x63, 0x57, 0x60, 0xe9, 0xc9, 0xb7, 0xf9, // ........gcW`.... + 0x05, 0x02, 0xba, 0x8b, 0x64, 0x74, 0x79, 0x6d, 0x73, 0xd1, 0x01, 0xdd, 0x55, 0x57, 0x49, 0x64, // ....dtyms...UWId + 0x70, 0x4c, 0x06, 0xa2, 0xab, 0xad, 0x97, 0x5b, 0x80, 0x20, 0x23, 0x7a, 0x49, 0x96, 0xa4, 0xaf, // pL.....[. #zI... + 0x8b, 0x06, 0x46, 0x62, 0x5f, 0x43, 0x4a, 0x55, 0x96, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x73, // ..Fb_CJU.......s + 0xfe, 0x58, 0x03, 0xca, 0x05, 0xb0, 0x00, 0x21, 0x00, 0x45, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .X.....!.E...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0f, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, // >Y.....+X!...Y.. + 0x10, 0xb1, 0x1f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x15, 0x01, 0x06, 0x06, 0x15, 0x14, 0x16, 0x33, 0x33, 0x32, 0x16, 0x15, 0x06, 0x06, 0x07, 0x27, // .......332.....' + 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x22, 0x26, 0x35, 0x34, 0x12, 0x37, 0x01, 0x27, 0x21, // 6654&##"&54.7.'! + 0x35, 0x03, 0xca, 0xfe, 0xaa, 0x81, 0x71, 0x69, 0x66, 0x20, 0x9f, 0xb4, 0x02, 0x9b, 0x6d, 0x51, // 5.....qif ....mQ + 0x42, 0x5e, 0x52, 0x5a, 0x34, 0xb3, 0xb9, 0x8b, 0x90, 0x01, 0x0c, 0x02, 0xfd, 0x91, 0x05, 0xb0, // B^RZ4........... + 0x70, 0xfe, 0x50, 0x99, 0xe3, 0x91, 0x74, 0x75, 0x7f, 0x80, 0x6f, 0xa5, 0x2f, 0x7f, 0x1f, 0x56, // p.P...tu..o./..V + 0x46, 0x34, 0x3a, 0xd6, 0xa8, 0x78, 0x01, 0x41, 0xa9, 0x01, 0x30, 0x05, 0x9b, 0x00, 0x00, 0x00, // F4:..x.A..0..... + 0x00, 0x01, 0x00, 0x8f, 0xfe, 0x61, 0x03, 0xf5, 0x04, 0x4e, 0x00, 0x13, 0x00, 0x46, 0x00, 0xb0, // .....a...N...F.. + 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x08, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // .>Y........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, // .Y01..6632...#.4 + 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x01, 0x3f, 0x0d, 0x36, 0xa0, 0x65, 0xb1, 0xbd, // &#"...#..?.6.e.. + 0xc5, 0x72, 0x74, 0x55, 0x7b, 0x26, 0xc5, 0x04, 0x3a, 0x96, 0x51, 0x59, 0xc3, 0xe0, 0xfb, 0xb6, // .rtU{&..:.QY.... + 0x04, 0x46, 0x8f, 0x7d, 0x43, 0x3c, 0xfc, 0xcc, 0x04, 0x3a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x77, // .F.}C<...:.....w + 0xff, 0xeb, 0x04, 0x16, 0x05, 0xc5, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x77, 0x00, 0xb0, // .............w.. + 0x0e, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb2, 0x7f, 0x0e, 0x01, // .EX../....>Y.... + 0x5d, 0xb4, 0xef, 0x0e, 0xff, 0x0e, 0x02, 0x5d, 0xb2, 0x4f, 0x0e, 0x01, 0x71, 0xb2, 0x9f, 0x0e, // ]......].O..q... + 0x01, 0x71, 0xb2, 0x1f, 0x0e, 0x01, 0x71, 0xb2, 0xcf, 0x0e, 0x01, 0x5d, 0xb2, 0x5f, 0x0e, 0x01, // .q....q....]._.. + 0x5d, 0xb2, 0x2f, 0x0e, 0x01, 0x5d, 0xb0, 0x0a, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ]./..]........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x10, 0x02, 0x23, 0x22, 0x02, 0x11, 0x11, 0x10, 0x12, 0x33, // ..Y01...#".....3 + 0x32, 0x12, 0x11, 0x05, 0x21, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x21, 0x15, 0x14, // 2...!54&#"...!.. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x16, 0xf7, 0xd7, 0xd7, 0xfa, 0xf9, 0xd6, 0xd7, 0xf9, 0xfd, // .3265........... + 0x26, 0x02, 0x15, 0x89, 0x82, 0x82, 0x88, 0x02, 0x15, 0xfd, 0xeb, 0x8a, 0x82, 0x82, 0x87, 0x02, // &............... + 0x2b, 0xfe, 0xe9, 0xfe, 0xd7, 0x01, 0x2a, 0x01, 0x16, 0x01, 0x59, 0x01, 0x16, 0x01, 0x2b, 0xfe, // +.....*...Y...+. + 0xd5, 0xfe, 0xea, 0x61, 0x8b, 0xbd, 0xbf, 0xbf, 0xbd, 0xfe, 0xda, 0x85, 0xbd, 0xc1, 0xc0, 0xbe, // ...a............ + 0x00, 0x01, 0x00, 0xc5, 0xff, 0xeb, 0x02, 0x73, 0x04, 0x39, 0x00, 0x0f, 0x00, 0x29, 0x00, 0xb0, // .......s.9...).. + 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ../....>Y.....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, // !...Y01....3267. + 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x01, 0x8a, 0x35, 0x2d, 0x19, 0x30, 0x12, 0x2c, 0x2d, // ..#"&5...5-.0.,- + 0x59, 0x35, 0x77, 0x7c, 0x04, 0x39, 0xfc, 0xd3, 0x49, 0x38, 0x0f, 0x0b, 0x85, 0x1f, 0x16, 0x8e, // Y5w|.9..I8...... + 0x9e, 0x03, 0x22, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x04, 0x40, 0x04, 0x3a, 0x02, 0x06, // .."........@.:.. + 0x00, 0xfa, 0x00, 0x00, 0x00, 0x01, 0x00, 0x38, 0xff, 0xef, 0x04, 0x5e, 0x05, 0xee, 0x00, 0x21, // .......8...^...! + 0x00, 0x67, 0x00, 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, // .g.../..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb2, 0x02, 0x01, 0x0d, 0x11, 0x12, 0x39, 0xb0, 0x0d, 0x10, 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, // ......9........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1b, 0x10, 0xb1, 0x14, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x1f, 0xd0, 0xb2, 0x9f, 0x1f, 0x01, 0x5d, // !...Y..........] + 0x40, 0x0f, 0x2c, 0x1f, 0x3c, 0x1f, 0x4c, 0x1f, 0x5c, 0x1f, 0x6c, 0x1f, 0x7c, 0x1f, 0x8c, 0x1f, // @.,.<.L...l.|... + 0x07, 0x5d, 0xb2, 0xab, 0x1f, 0x01, 0x5d, 0x30, 0x31, 0x21, 0x23, 0x01, 0x27, 0x26, 0x26, 0x23, // .]....]01!#.'&&# + 0x22, 0x06, 0x23, 0x35, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x01, 0x16, 0x16, 0x33, 0x32, 0x36, // ".#56632.....326 + 0x37, 0x07, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x03, 0x07, 0x07, 0x01, 0x13, 0xdb, 0x01, 0x87, // 7...#"&'........ + 0x37, 0x20, 0x57, 0x3c, 0x0a, 0x36, 0x04, 0x14, 0x3f, 0x18, 0x81, 0x99, 0x28, 0x01, 0x68, 0x16, // 7 W<.6..?...(.h. + 0x47, 0x2c, 0x0e, 0x09, 0x18, 0x03, 0x0b, 0x25, 0x0b, 0x76, 0x8f, 0x35, 0xca, 0x06, 0x1d, 0x04, // G,.....%.v.5.... + 0x04, 0x91, 0x54, 0x6a, 0x05, 0x91, 0x05, 0x0a, 0xa2, 0x6c, 0xfc, 0x4e, 0x47, 0x54, 0x01, 0x04, // ..Tj.....l.NGT.. + 0x9a, 0x05, 0x0a, 0x82, 0x8c, 0x02, 0x13, 0x01, 0x71, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, // ........q....... + 0xfe, 0x60, 0x03, 0xf2, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x77, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2e, // .`...:...w...... + 0x00, 0x00, 0x03, 0xe4, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x59, 0x00, 0x00, 0x00, 0x01, 0x00, 0x56, // .....:...Y.....V + 0xfe, 0x44, 0x03, 0xe3, 0x05, 0xb0, 0x00, 0x2e, 0x00, 0x5d, 0x00, 0xb0, 0x18, 0x2f, 0xb0, 0x09, // .D.......].../.. + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // /..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x01, // EX../....>Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x0a, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1f, 0x10, 0xb1, 0x11, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x26, 0x0a, 0x09, 0x11, 0x12, 0x39, 0xb0, // .+X!...Y.&....9. + 0x01, 0x10, 0xb0, 0x2d, 0xd0, 0x30, 0x31, 0x01, 0x15, 0x21, 0x06, 0x06, 0x15, 0x14, 0x16, 0x33, // ...-.01..!.....3 + 0x33, 0x15, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x33, 0x32, 0x16, 0x15, 0x06, 0x06, 0x07, // 3.#"....332..... + 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, // '6654&##"$5467&& + 0x35, 0x34, 0x36, 0x37, 0x23, 0x35, 0x03, 0x9a, 0xfe, 0xd8, 0x7b, 0x7d, 0x91, 0x9a, 0x8f, 0x8f, // 5467#5....{}.... + 0xbb, 0xc3, 0xa0, 0x8d, 0x3c, 0xa1, 0xb2, 0x02, 0x9b, 0x6d, 0x4f, 0x41, 0x5e, 0x46, 0x4b, 0x44, // ....<....mOA^FKD + 0xde, 0xfe, 0xec, 0x9f, 0x98, 0x6c, 0x78, 0x3d, 0x3b, 0xd7, 0x05, 0xb0, 0x9b, 0x08, 0x82, 0x60, // .....lx=;......` + 0x5e, 0x69, 0x9b, 0x9c, 0x99, 0x78, 0x96, 0x7f, 0x81, 0x6f, 0xa4, 0x2f, 0x7f, 0x1f, 0x55, 0x46, // ^i...x...o./..UF + 0x34, 0x3c, 0xe3, 0xc8, 0x91, 0xc5, 0x2c, 0x28, 0x8d, 0x58, 0x4d, 0x79, 0x28, 0x9b, 0x00, 0x00, // 4<....,(.XMy(... + 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x04, 0x4e, 0x02, 0x06, 0x00, 0x52, 0x00, 0x00, // ...a...*.N...R.. + 0x00, 0x01, 0x00, 0x4f, 0xff, 0xeb, 0x04, 0xcc, 0x04, 0x3a, 0x00, 0x17, 0x00, 0x51, 0x00, 0xb0, // ...O.....:...Q.. + 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, 0x16, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x10, 0xd0, 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x01, // ...Y.........01. + 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, // #...3267...#"&5. + 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0x04, 0x5e, 0x7b, 0x35, 0x2d, 0x19, 0x30, 0x12, 0x2c, // !.#.#5!.^{5-.0., + 0x2d, 0x59, 0x35, 0x77, 0x7c, 0xfe, 0x75, 0xc5, 0x7f, 0x04, 0x0f, 0x03, 0x9e, 0xfd, 0x6e, 0x49, // -Y5w|.u.......nI + 0x38, 0x0f, 0x0b, 0x85, 0x1f, 0x16, 0x8e, 0x9e, 0x02, 0x87, 0xfc, 0x62, 0x03, 0x9e, 0x9c, 0x00, // 8..........b.... + 0x00, 0x02, 0x00, 0x8f, 0xfe, 0x60, 0x04, 0x24, 0x04, 0x4e, 0x00, 0x10, 0x00, 0x1e, 0x00, 0x48, // .....`.$.N.....H + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, // ./....>Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x11, // X!...Y01...#"&'. + 0x23, 0x11, 0x35, 0x34, 0x00, 0x33, 0x32, 0x12, 0x11, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, // #.54.32..#4&#".. + 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x24, 0xdb, 0xc5, 0x61, 0x98, 0x37, 0xc5, 0x01, // ...3265.$..a.7.. + 0x01, 0xc0, 0xe3, 0xf1, 0xc5, 0x84, 0x8b, 0x7b, 0x81, 0x25, 0x78, 0x57, 0x8b, 0x8c, 0x01, 0xf4, // .......{.%xW.... + 0xeb, 0xfe, 0xe2, 0x3c, 0x3a, 0xfd, 0xff, 0x03, 0xe0, 0x01, 0xf7, 0x01, 0x16, 0xfe, 0xc3, 0xfe, // ...<:........... + 0xf8, 0xbd, 0xed, 0xe7, 0x8c, 0xfe, 0xd3, 0x43, 0x4b, 0xcc, 0xa3, 0x00, 0x00, 0x01, 0x00, 0x62, // .......CK......b + 0xfe, 0x57, 0x03, 0xe1, 0x04, 0x4e, 0x00, 0x22, 0x00, 0x48, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .W...N.".H...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x15, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb0, 0x1c, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, // 01.2...#4&#".... + 0x16, 0x17, 0x16, 0x16, 0x15, 0x06, 0x06, 0x07, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x27, 0x26, // ........'6654&'& + 0x02, 0x35, 0x35, 0x34, 0x12, 0x02, 0x3d, 0xbb, 0xe9, 0x04, 0x02, 0xb2, 0x7a, 0x72, 0x8a, 0x8c, // .554..=.....zr.. + 0xa4, 0xa6, 0xb4, 0xa8, 0x02, 0x9b, 0x6d, 0x51, 0x42, 0x5e, 0x58, 0x5f, 0xfb, 0xfe, 0xff, 0x04, // ......mQB^X_.... + 0x4e, 0xd1, 0xb2, 0x06, 0x67, 0x87, 0xe6, 0x9b, 0x2a, 0x8f, 0xc9, 0x18, 0x1a, 0x6a, 0x7b, 0x6f, // N...g...*....j{o + 0xa4, 0x2f, 0x7f, 0x1f, 0x55, 0x46, 0x30, 0x33, 0x0d, 0x23, 0x01, 0x0e, 0xd7, 0x2a, 0xe3, 0x01, // ./..UF03.#...*.. + 0x39, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x7c, 0x04, 0x3a, 0x00, 0x10, // 9......a...|.:.. + 0x00, 0x1e, 0x00, 0x4a, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0a, // ...J...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x0f, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, // .......+X!...Y.. + 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, // ......+X!...Y... + 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, // .....+X!...Y01.! + 0x16, 0x16, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x00, 0x37, 0x21, 0x01, // ......#".554.7!. + 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x04, 0x7c, 0xfe, // ..326554&#"...|. + 0xeb, 0x5e, 0x65, 0xfe, 0xf8, 0xdc, 0xe0, 0xfe, 0xfb, 0x01, 0x03, 0xdf, 0x02, 0x39, 0xfc, 0xaa, // .^e..........9.. + 0x91, 0x8f, 0x8d, 0x92, 0x93, 0x8e, 0x8d, 0x91, 0x03, 0x9e, 0x48, 0xd4, 0x82, 0x16, 0xd2, 0xfe, // ..........H..... + 0xd3, 0x01, 0x35, 0xf1, 0x16, 0xe7, 0x01, 0x2b, 0x01, 0xfd, 0xd7, 0xac, 0xe0, 0xe0, 0xac, 0x16, // ..5....+........ + 0xa1, 0xd6, 0xd6, 0xa1, 0x00, 0x01, 0x00, 0x51, 0x00, 0x00, 0x03, 0xdc, 0x04, 0x3a, 0x00, 0x07, // .......Q.....:.. + 0x00, 0x2f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0a, 0x3e, 0x59, // ./...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x06, 0x10, // ..EX../....>Y... + 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0xd0, 0x30, // .....+X!...Y...0 + 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x03, 0xdc, 0xfe, 0x9a, 0xc5, 0xfe, 0xa0, // 1.!.#.!5!....... + 0x03, 0x8b, 0x03, 0xa1, 0xfc, 0x5f, 0x03, 0xa1, 0x99, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8d, // ....._.......... + 0xff, 0xeb, 0x04, 0x26, 0x04, 0x3a, 0x00, 0x15, 0x00, 0x36, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...&.:...6...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // >Y.....+X!...Y01 + 0x01, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x26, 0x02, 0x27, 0x33, 0x16, 0x12, 0x15, 0x14, // ....3265&.'3.... + 0x02, 0x23, 0x22, 0x26, 0x35, 0x11, 0x01, 0x52, 0x8a, 0x75, 0x89, 0x87, 0x03, 0x42, 0x37, 0xce, // .#"&5..R.u...B7. + 0x33, 0x40, 0xde, 0xed, 0xdd, 0xf1, 0x04, 0x3a, 0xfd, 0x9c, 0xaf, 0xa2, 0xfd, 0xb0, 0x7e, 0x01, // 3@.....:......~. + 0x02, 0x88, 0x6b, 0xfe, 0xfd, 0x9a, 0xff, 0xfe, 0xb8, 0xf2, 0xfb, 0x02, 0x62, 0x00, 0x00, 0x00, // ..k.........b... + 0x00, 0x02, 0x00, 0x53, 0xfe, 0x22, 0x05, 0x57, 0x04, 0x3a, 0x00, 0x18, 0x00, 0x21, 0x00, 0x54, // ...S.".W.:...!.T + 0x00, 0xb0, 0x07, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x06, 0xd0, 0xb0, 0x09, // EX../....>Y..... + 0x10, 0xb1, 0x16, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, // ......+X!...Y... + 0xb1, 0x1c, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x16, 0x10, 0xb0, // .....+X!...Y.... + 0x1e, 0xd0, 0x30, 0x31, 0x01, 0x32, 0x00, 0x15, 0x14, 0x00, 0x05, 0x11, 0x23, 0x11, 0x24, 0x00, // ..01.2......#.$. + 0x35, 0x34, 0x12, 0x37, 0x33, 0x06, 0x02, 0x07, 0x14, 0x16, 0x17, 0x37, 0x11, 0x01, 0x26, 0x26, // 54.73......7..&& + 0x07, 0x07, 0x11, 0x17, 0x36, 0x36, 0x03, 0x2e, 0xe4, 0x01, 0x45, 0xfe, 0xf1, 0xfe, 0xe6, 0xc5, // ....66....E..... + 0xfe, 0xee, 0xfe, 0xfc, 0x40, 0x34, 0xce, 0x39, 0x42, 0x02, 0xa3, 0xa8, 0x06, 0x02, 0x29, 0x04, // ....@4.9B.....). + 0xba, 0xa0, 0x06, 0x06, 0xb1, 0xad, 0x04, 0x3a, 0xfe, 0xbf, 0xed, 0xda, 0xfe, 0xd5, 0x17, 0xfe, // .......:........ + 0x32, 0x01, 0xce, 0x19, 0x01, 0x41, 0xea, 0x99, 0x01, 0x01, 0x6c, 0x86, 0xfe, 0xfe, 0x7e, 0x9b, // 2....A....l...~. + 0xee, 0x17, 0x02, 0x03, 0xa4, 0xfd, 0xd2, 0xa3, 0xed, 0x04, 0x02, 0xfc, 0xfd, 0x02, 0x15, 0xd9, // ................ + 0x00, 0x01, 0x00, 0x5e, 0xfe, 0x4b, 0x04, 0x4b, 0x04, 0x49, 0x00, 0x25, 0x00, 0x7d, 0x00, 0xb0, // ...^.K.K.I.%.}.. + 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x13, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, 0xb1, 0x19, // ....>Y..EX../... + 0x08, 0x3e, 0x59, 0xb2, 0x05, 0x19, 0x00, 0x11, 0x12, 0x39, 0xb4, 0x75, 0x05, 0x85, 0x05, 0x02, // .>Y......9.u.... + 0x5d, 0xb2, 0x94, 0x05, 0x01, 0x5d, 0xb0, 0x13, 0x10, 0xb1, 0x0c, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // ]....]........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x18, 0x19, 0x00, 0x11, 0x12, 0x39, 0x40, 0x0b, 0x5b, 0x18, // !...Y......9@.[. + 0x6b, 0x18, 0x7b, 0x18, 0x8b, 0x18, 0x9b, 0x18, 0x05, 0x5d, 0xb0, 0x00, 0x10, 0xb1, 0x1f, 0x03, // k.{......]...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x32, 0x16, 0x17, 0x17, // ..+X!...Y01.2... + 0x33, 0x13, 0x33, 0x01, 0x13, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x07, 0x06, 0x06, 0x23, 0x22, // 3.3....3267...#" + 0x26, 0x27, 0x03, 0x23, 0x01, 0x23, 0x01, 0x03, 0x26, 0x26, 0x23, 0x22, 0x06, 0x23, 0x27, 0x36, // &'.#.#..&&#".#'6 + 0x36, 0xca, 0x81, 0x97, 0x2a, 0x5c, 0x06, 0xe9, 0xc6, 0xfe, 0xab, 0xcc, 0x20, 0x3e, 0x2b, 0x0e, // 6...*....... >+. + 0x0a, 0x16, 0x03, 0x0a, 0x25, 0x0d, 0x74, 0x8b, 0x34, 0x7f, 0x06, 0xfe, 0xf7, 0xd1, 0x01, 0x7f, // ....%.t.4....... + 0xa3, 0x21, 0x56, 0x3c, 0x0a, 0x36, 0x04, 0x01, 0x15, 0x3f, 0x04, 0x49, 0xa0, 0x6c, 0xde, 0x01, // .!V<.6...?.I.l.. + 0xdb, 0xfd, 0x3d, 0xfe, 0x14, 0x49, 0x4b, 0x02, 0x03, 0xa2, 0x06, 0x09, 0x83, 0x8d, 0x01, 0x2c, // ..=..IK........, + 0xfd, 0xda, 0x03, 0x0e, 0x01, 0x82, 0x52, 0x65, 0x05, 0x97, 0x05, 0x0a, 0x00, 0x01, 0x00, 0x5b, // ......Re.......[ + 0xfe, 0x26, 0x05, 0x4d, 0x04, 0x3a, 0x00, 0x1d, 0x00, 0x52, 0x00, 0xb0, 0x10, 0x2f, 0xb0, 0x00, // .&.M.:...R.../.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x16, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb1, 0x02, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, // >Y.....+X!...Y.. + 0x10, 0xb0, 0x12, 0xd0, 0xb0, 0x02, 0x10, 0xb0, 0x1b, 0xd0, 0x30, 0x31, 0x01, 0x11, 0x17, 0x36, // ..........01...6 + 0x36, 0x35, 0x26, 0x02, 0x27, 0x33, 0x16, 0x12, 0x15, 0x14, 0x00, 0x05, 0x11, 0x23, 0x11, 0x26, // 65&.'3.......#.& + 0x00, 0x11, 0x11, 0x33, 0x11, 0x14, 0x16, 0x17, 0x37, 0x11, 0x03, 0x25, 0x06, 0xb1, 0xac, 0x03, // ...3....7..%.... + 0x42, 0x38, 0xcf, 0x33, 0x40, 0xfe, 0xf6, 0xfe, 0xe2, 0xc6, 0xf7, 0xfe, 0xf3, 0xc5, 0xa9, 0x90, // B8.3@........... + 0x06, 0x04, 0x39, 0xfc, 0x5c, 0x02, 0x17, 0xf1, 0x9c, 0x7d, 0x01, 0x01, 0x85, 0x6a, 0xff, 0x00, // ..9......}...j.. + 0x99, 0xf0, 0xfe, 0xbe, 0x16, 0xfe, 0x37, 0x01, 0xcb, 0x19, 0x01, 0x2e, 0x01, 0x1c, 0x01, 0xe6, // ......7......... + 0xfe, 0x18, 0xcf, 0xdb, 0x13, 0x02, 0x03, 0xa2, 0x00, 0x01, 0x00, 0x6c, 0xff, 0xeb, 0x06, 0x60, // ...........l...` + 0x04, 0x3a, 0x00, 0x28, 0x00, 0x46, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // .:.(.F...EX../.. + 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x06, 0x3e, 0x59, 0xb1, 0x06, 0x02, 0xb0, 0x0a, // EX."/..".>Y..... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0xd0, 0x30, 0x31, 0x01, 0x06, 0x02, 0x07, // +X!...Y...01.... + 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x26, // ..3265.3...3265& + 0x02, 0x27, 0x33, 0x16, 0x12, 0x15, 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, // .'3.....#"&'..#" + 0x02, 0x35, 0x34, 0x12, 0x37, 0x01, 0xd5, 0x4a, 0x56, 0x04, 0x70, 0x78, 0x6b, 0x7f, 0xc6, 0x7e, // .54.7..JV.pxk..~ + 0x6c, 0x78, 0x70, 0x05, 0x56, 0x49, 0xcf, 0x44, 0x56, 0xca, 0xd8, 0x7f, 0xaf, 0x2a, 0x2b, 0xaf, // lxp.VI.DV....*+. + 0x7d, 0xd9, 0xca, 0x55, 0x46, 0x04, 0x3a, 0x86, 0xfe, 0xfd, 0x7f, 0xbe, 0xef, 0xa2, 0xaf, 0x01, // }..UF.:......... + 0x2c, 0xfe, 0xd4, 0xaf, 0xa2, 0xed, 0xc0, 0x7f, 0x01, 0x03, 0x86, 0x6a, 0xfe, 0xfc, 0x9a, 0xff, // ,..........j.... + 0xfe, 0xb8, 0x7a, 0x77, 0x77, 0x7a, 0x01, 0x48, 0xff, 0x9b, 0x01, 0x04, 0x69, 0x00, 0x00, 0x00, // ..zwwz.H....i... + 0xff, 0xff, 0xff, 0xd8, 0xff, 0xeb, 0x02, 0x89, 0x05, 0xb6, 0x02, 0x26, 0x01, 0x93, 0x00, 0x00, // ...........&.... + 0x01, 0x07, 0x00, 0x6a, 0xff, 0x2e, 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x11, 0x01, 0x72, // ...j.....3.....r + 0xb4, 0xdf, 0x11, 0xef, 0x11, 0x02, 0x71, 0xb2, 0x5f, 0x11, 0x01, 0x72, 0xb4, 0x2f, 0x11, 0x3f, // ......q._..r./.? + 0x11, 0x02, 0x72, 0xb2, 0x7f, 0x14, 0x01, 0x72, 0xb4, 0xdf, 0x14, 0xef, 0x14, 0x02, 0x71, 0xb2, // ..r....r......q. + 0x5f, 0x14, 0x01, 0x72, 0xb4, 0x2f, 0x14, 0x3f, 0x14, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, // _..r./.?..r01... + 0xff, 0xff, 0x00, 0x8d, 0xff, 0xeb, 0x04, 0x26, 0x05, 0xb6, 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, // .......&...&.... + 0x01, 0x06, 0x00, 0x6a, 0x56, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x17, 0x01, 0x72, 0xb4, 0xdf, // ...jV..3.....r.. + 0x17, 0xef, 0x17, 0x02, 0x71, 0xb2, 0x5f, 0x17, 0x01, 0x72, 0xb4, 0x2f, 0x17, 0x3f, 0x17, 0x02, // ....q._..r./.?.. + 0x72, 0xb2, 0x7f, 0x1a, 0x01, 0x72, 0xb4, 0xdf, 0x1a, 0xef, 0x1a, 0x02, 0x71, 0xb2, 0x5f, 0x1a, // r....r......q._. + 0x01, 0x72, 0xb4, 0x2f, 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, // .r./.?..r01....a + 0xff, 0xeb, 0x04, 0x2a, 0x06, 0x79, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x00, 0x07, 0x01, 0x61, // ...*.y.&.R.....a + 0x01, 0x4a, 0x00, 0x07, 0xff, 0xff, 0x00, 0x8d, 0xff, 0xeb, 0x04, 0x26, 0x06, 0x66, 0x02, 0x26, // .J.........&.f.& + 0x01, 0x9f, 0x00, 0x00, 0x00, 0x07, 0x01, 0x61, 0x01, 0x5c, 0xff, 0xf4, 0xff, 0xff, 0x00, 0x6c, // .......a.......l + 0xff, 0xeb, 0x06, 0x60, 0x06, 0x66, 0x02, 0x26, 0x01, 0xa3, 0x00, 0x00, 0x00, 0x07, 0x01, 0x61, // ...`.f.&.......a + 0x02, 0x6a, 0xff, 0xf4, 0x00, 0x02, 0x00, 0x71, 0xff, 0xeb, 0x04, 0xb0, 0x05, 0xc5, 0x00, 0x19, // .j.....q........ + 0x00, 0x25, 0x00, 0x4d, 0x00, 0xb0, 0x10, 0x2f, 0xb0, 0x17, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .%.M.../../..EX. + 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb1, 0x14, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x1d, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x17, 0x10, 0xb1, 0x24, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ....$...+X!...Y0 + 0x31, 0x01, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x10, 0x00, 0x23, 0x22, 0x00, 0x11, // 1.54632.....#".. + 0x11, 0x37, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x26, 0x24, 0x25, 0x34, 0x26, 0x23, 0x22, // .7...3267&$%4&#" + 0x06, 0x15, 0x15, 0x14, 0x16, 0x17, 0x37, 0x02, 0x09, 0xbd, 0x97, 0x9d, 0xb6, 0xfe, 0xcf, 0xf8, // ......7......... + 0xee, 0xfe, 0xd8, 0xc5, 0xb6, 0x9b, 0xa5, 0xbe, 0x02, 0xda, 0xfe, 0xf7, 0x01, 0xe3, 0x49, 0x46, // ..............IF + 0x42, 0x4d, 0x96, 0x82, 0x06, 0x04, 0x0c, 0x3e, 0xac, 0xcf, 0xca, 0xb1, 0xfe, 0x06, 0xfe, 0xea, // BM.....>........ + 0xfe, 0xb1, 0x01, 0x5c, 0x01, 0x09, 0x02, 0x94, 0x02, 0xfd, 0x6a, 0xc8, 0xfc, 0xed, 0xd0, 0x08, // ..........j..... + 0xfb, 0xfe, 0x6c, 0x6d, 0x6d, 0x6c, 0x40, 0x78, 0x9e, 0x04, 0x02, 0x00, 0x00, 0x01, 0xff, 0xea, // ..lmml@x........ + 0x00, 0x00, 0x04, 0x53, 0x05, 0xbb, 0x00, 0x23, 0x00, 0x6a, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...S...#.j...EX. + 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x1c, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x0a, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb2, 0x21, 0x0f, 0x1c, 0x11, 0x12, 0x39, 0xb0, 0x21, 0x10, 0xb0, 0x0e, 0xd0, 0xb4, 0x4b, // Y.!....9.!.....K + 0x0e, 0x5b, 0x0e, 0x02, 0x5d, 0xb2, 0x8b, 0x0e, 0x01, 0x5d, 0xb0, 0x21, 0x10, 0xb0, 0x11, 0xd0, // .[..]....].!.... + 0xb4, 0x4b, 0x11, 0x5b, 0x11, 0x02, 0x5d, 0xb2, 0x8b, 0x11, 0x01, 0x5d, 0xb0, 0x0a, 0x10, 0xb0, // .K.[..]....].... + 0x15, 0xd0, 0x30, 0x31, 0x01, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, // ..01.6632...&&#" + 0x06, 0x07, 0x01, 0x11, 0x23, 0x11, 0x01, 0x26, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, 0x36, 0x36, // ....#..&&#"..'66 + 0x33, 0x32, 0x16, 0x17, 0x13, 0x17, 0x33, 0x37, 0x02, 0xe6, 0x33, 0x7b, 0x51, 0x22, 0x32, 0x1a, // 32....37..3{Q"2. + 0x17, 0x05, 0x16, 0x0d, 0x21, 0x37, 0x10, 0xfe, 0xd4, 0xc4, 0xfe, 0xd4, 0x11, 0x37, 0x20, 0x0e, // ....!7.......7 . + 0x15, 0x05, 0x16, 0x18, 0x32, 0x23, 0x50, 0x7b, 0x34, 0xb2, 0x13, 0x06, 0x13, 0x04, 0xd7, 0x7c, // ....2#P{4......| + 0x68, 0x0a, 0x0e, 0x98, 0x03, 0x05, 0x23, 0x27, 0xfd, 0x79, 0xfd, 0xbe, 0x02, 0x42, 0x02, 0x87, // h.....#'.y...B.. + 0x27, 0x23, 0x05, 0x03, 0x98, 0x0e, 0x0a, 0x68, 0x7c, 0xfe, 0x6a, 0x46, 0x46, 0x00, 0x00, 0x00, // '#.....h|.jFF... + 0x00, 0x02, 0x00, 0x4e, 0xff, 0xeb, 0x06, 0x19, 0x04, 0x3a, 0x00, 0x16, 0x00, 0x2c, 0x00, 0x5d, // ...N.....:...,.] + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x06, 0x3e, 0x59, 0xb0, 0x15, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, // ./....>Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1b, 0xd0, 0xb0, 0x00, 0xd0, 0xb0, 0x0d, 0x10, // +X!...Y......... + 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, // .!...+X!...Y.... + 0x2a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x16, // *...+X!...Y01.#. + 0x16, 0x15, 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x34, 0x36, // ....#"&'..#".546 + 0x37, 0x23, 0x35, 0x21, 0x01, 0x26, 0x26, 0x27, 0x21, 0x06, 0x06, 0x07, 0x14, 0x16, 0x33, 0x32, // 7#5!.&&'!.....32 + 0x36, 0x35, 0x35, 0x33, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x06, 0x19, 0x85, 0x1d, 0x21, 0xae, // 6553...326....!. + 0xb8, 0x77, 0xa5, 0x28, 0x29, 0xa4, 0x76, 0xb9, 0xad, 0x20, 0x1e, 0x6f, 0x05, 0xcb, 0xfe, 0xf4, // .w.().v.. .o.... + 0x03, 0x28, 0x22, 0xfc, 0xd1, 0x23, 0x28, 0x02, 0x53, 0x59, 0x62, 0x74, 0xc6, 0x73, 0x63, 0x57, // .("..#(.SYbt.scW + 0x54, 0x03, 0x9e, 0x51, 0xb6, 0x65, 0xfe, 0xfe, 0xb7, 0x79, 0x74, 0x75, 0x78, 0x01, 0x49, 0xfe, // T..Q.e...ytux.I. + 0x65, 0xb6, 0x51, 0x9c, 0xfd, 0xf8, 0x59, 0xb6, 0x5d, 0x5e, 0xb6, 0x58, 0xbe, 0xef, 0xa2, 0xaf, // e.Q...Y.]^.X.... + 0xfa, 0xfa, 0xaf, 0xa2, 0xee, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, // ...............z + 0x07, 0x22, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0xdd, 0x01, 0x5d, // .".&.(.....C...] + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x0e, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, // ....]01........z + 0x07, 0x0d, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0x72, 0x01, 0x5d, // ...&.(.....j.r.] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0x00, 0x01, 0x00, 0x29, 0xff, 0xf7, 0x05, 0xb4, 0x05, 0xb0, 0x00, 0x1c, 0x00, 0x64, 0x00, 0xb0, // ...).........d.. + 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb0, 0x1b, 0x10, 0xb1, 0x1a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0xd0, 0xb2, 0x05, 0x17, 0x1b, 0x11, 0x12, 0x39, 0xb0, // !...Y.........9. + 0x05, 0x2f, 0xb0, 0x0b, 0x10, 0xb1, 0x0d, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ./........+X!... + 0x59, 0xb0, 0x05, 0x10, 0xb1, 0x13, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x21, 0x11, 0x36, 0x36, 0x33, 0x32, 0x04, 0x15, 0x14, 0x06, 0x2f, 0x02, 0x32, // 01.!.6632..../.2 + 0x36, 0x35, 0x26, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x04, 0x95, // 65&&#"...#.!5!.. + 0xfd, 0xfa, 0x4f, 0x98, 0x36, 0xf6, 0x01, 0x12, 0xfe, 0xee, 0x05, 0x02, 0xa2, 0x8c, 0x02, 0xa1, // ..O.6........... + 0xa0, 0x3e, 0x99, 0x46, 0xc5, 0xfe, 0x5f, 0x04, 0x6c, 0x05, 0x15, 0xfe, 0x34, 0x16, 0x1d, 0xf2, // .>.F.._.l...4... + 0xd9, 0xd8, 0xe2, 0x03, 0x02, 0x8d, 0x98, 0x90, 0x8f, 0x97, 0x19, 0x15, 0xfd, 0x57, 0x05, 0x15, // .............W.. + 0x9b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x31, 0x07, 0x1e, 0x02, 0x26, // ...........1...& + 0x01, 0x6e, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x95, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, // .n.....v...Y.... + 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x06, 0x01, // .EX../....>Y.... + 0x5d, 0x30, 0x31, 0x00, 0x00, 0x01, 0x00, 0x87, 0xff, 0xec, 0x04, 0xd0, 0x05, 0xc6, 0x00, 0x21, // ]01............! + 0x00, 0x7a, 0x00, 0xb0, 0x17, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, // .z.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x0b, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ........+X!...Y. + 0x7f, 0x17, 0x01, 0x5d, 0xb2, 0xef, 0x17, 0x01, 0x5d, 0xb2, 0xbf, 0x17, 0x01, 0x71, 0xb2, 0x3f, // ...]....]....q.? + 0x17, 0x01, 0x72, 0xb2, 0xef, 0x17, 0x01, 0x71, 0xb2, 0x1f, 0x17, 0x01, 0x71, 0xb2, 0xcf, 0x17, // ..r....q....q... + 0x01, 0x5d, 0xb2, 0x2f, 0x17, 0x01, 0x5d, 0xb2, 0x8f, 0x17, 0x01, 0x72, 0xb0, 0x17, 0x10, 0xb1, // .]./..]....r.... + 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x1e, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x16, 0x00, // ...+X!...Y01.... + 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x32, 0x00, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, // #".....32...#4&# + 0x22, 0x02, 0x15, 0x15, 0x21, 0x15, 0x21, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x35, 0x04, 0xca, // "...!.!...3265.. + 0x02, 0x04, 0xfe, 0xd8, 0xf3, 0xf7, 0xfe, 0xc9, 0x01, 0x37, 0xf7, 0xf7, 0x01, 0x24, 0x04, 0x02, // .........7...$.. + 0xbd, 0xb4, 0xa4, 0xa5, 0xc4, 0x02, 0x32, 0xfd, 0xce, 0xc4, 0xa5, 0xa4, 0xb4, 0x01, 0xd3, 0x06, // ......2......... + 0xcd, 0xfe, 0xec, 0x01, 0x5e, 0x01, 0x0d, 0x01, 0x03, 0x01, 0x0d, 0x01, 0x5f, 0xfe, 0xf9, 0xd9, // ....^......._... + 0x06, 0x99, 0xb2, 0xfe, 0xf6, 0xc5, 0x2f, 0x9a, 0x3c, 0xc7, 0xfe, 0xf6, 0xb1, 0x9c, 0x00, 0x00, // ....../.<....... + 0x00, 0x01, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x92, 0x05, 0xc5, 0x00, 0x27, 0x00, 0x51, 0x00, 0xb0, // ...a.......'.Q.. + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x06, 0x3e, 0x59, 0xb2, 0x17, 0x1d, 0x09, 0x11, 0x12, 0x39, // ../....>Y......9 + 0xb0, 0x17, 0x10, 0xb1, 0x03, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, // .......+X!...Y.. + 0x10, 0xb1, 0x25, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ..%...+X!...Y01. + 0x34, 0x26, 0x27, 0x26, 0x24, 0x35, 0x34, 0x24, 0x33, 0x32, 0x00, 0x07, 0x07, 0x23, 0x34, 0x26, // 4&'&$54$32...#4& + 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x17, 0x16, 0x16, 0x15, 0x14, 0x04, 0x23, 0x22, 0x24, 0x37, // #"..........#"$7 + 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, 0xcd, 0x96, 0xbf, 0xe7, 0xfe, 0xfd, 0x01, 0x17, // 73..326......... + 0xde, 0xef, 0x01, 0x1b, 0x05, 0x02, 0xbc, 0xa9, 0x9e, 0x93, 0x9d, 0xaa, 0xbf, 0xe6, 0xf0, 0xfe, // ................ + 0xe0, 0xe8, 0xda, 0xfe, 0xb1, 0x05, 0x02, 0xbc, 0xce, 0x98, 0x95, 0xae, 0x01, 0x6f, 0x64, 0x87, // .............od. + 0x2e, 0x37, 0xd6, 0xa2, 0xaa, 0xe4, 0xfe, 0xfa, 0xad, 0x06, 0x80, 0x9e, 0x85, 0x6b, 0x5f, 0x7f, // .7...........k_. + 0x30, 0x39, 0xde, 0xa4, 0xb0, 0xd6, 0xec, 0xc6, 0x06, 0x8c, 0x92, 0x7e, 0xff, 0xff, 0x00, 0xbe, // 09.........~.... + 0x00, 0x00, 0x01, 0x84, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcb, // .........,...... + 0x00, 0x00, 0x02, 0x7c, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...|...&.,.....j + 0xff, 0x21, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, // .!.].....EX../.. + 0x08, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x12, 0x3e, // ..>Y..EX../....> + 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x3d, 0xff, 0xeb, 0x03, 0xc3, 0x05, 0xb0, 0x02, 0x06, // Y01....=........ + 0x00, 0x2d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, 0x08, 0x49, 0x05, 0xb0, 0x00, 0x16, // .-.....2...I.... + 0x00, 0x1f, 0x00, 0x69, 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, // ...i.../..EX../. + 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, // .......+X!...Y.. + 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, // ......+X!...Y... + 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, // .....+X!...Y.... + 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x21, // ....+X!...Y01..! + 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, 0x21, 0x03, 0x02, 0x02, 0x23, 0x23, 0x35, 0x33, // 2....#!.!...##53 + 0x32, 0x12, 0x13, 0x11, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x04, 0xf7, 0x01, // 2.....!2654&#... + 0x67, 0xe8, 0x01, 0x03, 0xfe, 0xfd, 0xe8, 0xfd, 0xd4, 0xfe, 0x08, 0x01, 0x01, 0xd7, 0xfb, 0x34, // g..............4 + 0x28, 0x96, 0x84, 0x01, 0x03, 0x82, 0x01, 0x67, 0x93, 0x93, 0x93, 0x93, 0x05, 0xb0, 0xfd, 0xc9, // (......g........ + 0xf7, 0xc6, 0xc6, 0xf6, 0x05, 0x15, 0xfd, 0xed, 0xfe, 0x6f, 0xfe, 0x8f, 0x9a, 0x01, 0x1d, 0x01, // .........o...... + 0x4b, 0x02, 0xae, 0xfd, 0x2f, 0xfd, 0xbb, 0xa9, 0x7b, 0x79, 0xa8, 0x00, 0x00, 0x02, 0x00, 0xb4, // K.../...{y...... + 0x00, 0x00, 0x08, 0x54, 0x05, 0xb0, 0x00, 0x12, 0x00, 0x1b, 0x00, 0x6d, 0x00, 0xb0, 0x04, 0x2f, // ...T.......m.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x00, 0xd0, 0xb0, 0x00, 0x2f, 0xb1, 0x0e, 0x02, // ..>Y......../... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x13, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x14, 0x03, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x33, 0x11, 0x21, 0x32, // +X!...Y01.!.3.!2 + 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x01, 0x11, 0x21, 0x32, // ....#!.!.#.3..!2 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x79, 0x02, 0xc4, 0xc5, 0x01, 0x68, 0xe9, 0x01, 0x01, 0xfe, // 654&#.y....h.... + 0xfe, 0xe8, 0xfd, 0xd3, 0xfd, 0x3c, 0xc5, 0xc5, 0x03, 0x89, 0x01, 0x68, 0x93, 0x93, 0x93, 0x93, // .....<.....h.... + 0x03, 0x3b, 0x02, 0x75, 0xfd, 0x98, 0xe4, 0xbc, 0xbd, 0xeb, 0x02, 0xa1, 0xfd, 0x5f, 0x05, 0xb0, // .;.u........._.. + 0xfc, 0xfd, 0xfd, 0xf8, 0x94, 0x71, 0x70, 0x93, 0x00, 0x01, 0x00, 0x42, 0x00, 0x00, 0x05, 0xda, // .....qp....B.... + 0x05, 0xb0, 0x00, 0x17, 0x00, 0x4e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, // .....N...EX../.. + 0x16, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x16, 0x10, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x01, 0xd0, 0xb2, 0x05, 0x12, 0x16, 0x11, 0x12, 0x39, 0xb0, 0x05, 0x2f, 0xb0, 0x12, 0x10, // .........9../... + 0xb0, 0x0a, 0xd0, 0xb0, 0x05, 0x10, 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ...........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, // .Y01.!.6632...#. + 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x04, 0xae, 0xfd, 0xf0, // 4&#"...#.!5!.... + 0x4c, 0x9e, 0x69, 0xf0, 0xf9, 0xc5, 0x8b, 0x99, 0x5a, 0xa7, 0x52, 0xc5, 0xfe, 0x69, 0x04, 0x6c, // L.i.....Z.R..i.l + 0x05, 0x15, 0xfe, 0x4f, 0x14, 0x14, 0xd4, 0xec, 0xfe, 0x34, 0x01, 0xcc, 0xa4, 0x80, 0x16, 0x14, // ...O.....4...... + 0xfd, 0x3a, 0x05, 0x15, 0x9b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x20, // .:............. + 0x07, 0x1e, 0x02, 0x26, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x89, 0x01, 0x59, // ...&.......v...Y + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x0f, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, // ....]01......... + 0x07, 0x22, 0x02, 0x26, 0x01, 0xc4, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x01, 0x46, 0x01, 0x5d, // .".&.......C.F.] + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x55, 0xff, 0xeb, 0x04, 0xc8, // ....]01....U.... + 0x07, 0x4e, 0x00, 0x26, 0x01, 0xcf, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0xda, 0x01, 0x9e, // .N.&.......T.... + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, 0xfe, 0x99, 0x05, 0x02, 0x05, 0xb0, 0x00, 0x0b, // 01.............. + 0x00, 0x49, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, // .I.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, // X../....>Y.....+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0xd0, 0x30, 0x31, 0x13, 0x33, 0x11, 0x21, 0x11, // X!...Y...01.3.!. + 0x33, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0xb4, 0xc5, 0x02, 0xc4, 0xc5, 0xfe, 0x43, 0xc5, 0xfe, // 3.!.#.!......C.. + 0x34, 0x05, 0xb0, 0xfa, 0xea, 0x05, 0x16, 0xfa, 0x50, 0xfe, 0x99, 0x01, 0x67, 0x00, 0x00, 0x00, // 4.......P...g... + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x24, 0x00, 0x00, // .............$.. + 0x00, 0x02, 0x00, 0xa3, 0x00, 0x00, 0x04, 0xbb, 0x05, 0xb0, 0x00, 0x0c, 0x00, 0x15, 0x00, 0x4d, // ...............M + 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x0b, // Y..EX../....>Y.. + 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, // ......+X!...Y... + 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, // .....+X!...Y.... + 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, // ....+X!...Y01.!. + 0x21, 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, 0x21, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, // !2....#!.!..!265 + 0x34, 0x26, 0x23, 0x04, 0x20, 0xfd, 0x48, 0x01, 0x67, 0xe9, 0x01, 0x03, 0xfe, 0xfc, 0xe8, 0xfd, // 4&#. .H.g....... + 0xd4, 0x03, 0x7d, 0xfd, 0x48, 0x01, 0x67, 0x93, 0x94, 0x93, 0x94, 0x05, 0x15, 0xfe, 0x5b, 0xef, // ..}.H.g.......[. + 0xc5, 0xc6, 0xf6, 0x05, 0xb0, 0xfd, 0x25, 0xfd, 0xc5, 0xa9, 0x7b, 0x77, 0xa0, 0x00, 0x00, 0x00, // ......%...{w.... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xaf, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x25, 0x00, 0x00, // .............%.. + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x31, 0x05, 0xb0, 0x02, 0x06, 0x01, 0x6e, 0x00, 0x00, // .......1.....n.. + 0x00, 0x02, 0x00, 0x30, 0xfe, 0x99, 0x05, 0xd5, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x15, 0x00, 0x4a, // ...0...........J + 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0c, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb1, 0x12, // Y..EX../....>Y.. + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0xd0, 0xb0, 0x06, 0x10, // ...+X!...Y...... + 0xb0, 0x03, 0xd0, 0xb0, 0x12, 0x10, 0xb0, 0x09, 0xd0, 0xb0, 0x0d, 0x10, 0xb1, 0x15, 0x02, 0xb0, // ................ + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x33, 0x03, 0x23, 0x11, 0x21, // .+X!...Y01%3.#.! + 0x11, 0x23, 0x03, 0x33, 0x36, 0x12, 0x13, 0x13, 0x21, 0x01, 0x06, 0x02, 0x07, 0x21, 0x11, 0x21, // .#.36...!....!.! + 0x05, 0x0d, 0xc8, 0x14, 0xb1, 0xfb, 0xe5, 0xa7, 0x1e, 0x7d, 0x4d, 0x80, 0x06, 0x21, 0x03, 0x6c, // .........}M..!.l + 0xfd, 0x3a, 0x09, 0x66, 0x50, 0x02, 0xc0, 0xfe, 0x16, 0x9a, 0xfe, 0x01, 0x01, 0x65, 0xfe, 0x99, // .:.fP........e.. + 0x02, 0x01, 0x57, 0x01, 0x51, 0x01, 0x21, 0x02, 0x4d, 0xfd, 0xb3, 0xee, 0xfe, 0x96, 0x71, 0x04, // ..W.Q.!.M.....q. + 0x7b, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x05, 0xb0, 0x02, 0x06, // {..........z.... + 0x00, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x32, 0x05, 0xb0, 0x00, 0x15, // .(.........2.... + 0x00, 0x66, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, // .f...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, // ..EX../....>Y... + 0xb0, 0x0d, 0xd0, 0xb2, 0x0c, 0x03, 0x0d, 0x11, 0x12, 0x39, 0xb0, 0x0c, 0x2f, 0xb2, 0xcf, 0x0c, // .........9../... + 0x01, 0x5d, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, // .].....+X!...Y.. + 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x06, 0xd0, 0xb2, 0x08, 0x04, 0x0c, 0x11, 0x12, 0x39, 0xb0, 0x0c, // .............9.. + 0x10, 0xb0, 0x0f, 0xd0, 0xb0, 0x0d, 0x10, 0xb0, 0x11, 0xd0, 0xb0, 0x08, 0x10, 0xb0, 0x13, 0xd0, // ................ + 0xb0, 0x03, 0x10, 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x01, 0x23, // ......01.#.#.#.# + 0x01, 0x01, 0x33, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x01, 0x01, 0x23, 0x04, 0xa7, // ..3.3.3.3.3..#.. + 0x99, 0xc5, 0xa2, 0xfe, 0x6b, 0xf6, 0x01, 0xe7, 0xfe, 0x42, 0xe6, 0x01, 0x7a, 0xa4, 0xc5, 0x9c, // ....k....B..z... + 0x01, 0x7a, 0xe6, 0xfe, 0x41, 0x01, 0xe7, 0xf5, 0x02, 0x9c, 0xfd, 0x64, 0x02, 0x9c, 0xfd, 0x64, // .z..A......d...d + 0x03, 0x02, 0x02, 0xae, 0xfd, 0x87, 0x02, 0x79, 0xfd, 0x87, 0x02, 0x79, 0xfd, 0x53, 0xfc, 0xfd, // .......y...y.S.. + 0x00, 0x01, 0x00, 0x78, 0xff, 0xeb, 0x04, 0xdf, 0x05, 0xc5, 0x00, 0x2a, 0x00, 0x72, 0x00, 0xb0, // ...x.......*.r.. + 0x19, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x28, 0x2f, 0x1b, 0xb1, 0x28, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX.(/..(.>Y. + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb2, 0xcf, 0x19, 0x01, // .EX../....>Y.... + 0x5d, 0xb2, 0x1f, 0x19, 0x01, 0x71, 0xb2, 0xbf, 0x19, 0x01, 0x71, 0xb2, 0xef, 0x19, 0x01, 0x5d, // ]....q....q....] + 0xb2, 0x7f, 0x19, 0x01, 0x5d, 0xb2, 0x2f, 0x19, 0x01, 0x5d, 0xb0, 0x19, 0x10, 0xb1, 0x18, 0x02, // ....]./..]...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x03, 0x18, 0x19, 0x11, 0x12, 0x39, // ..+X!...Y......9 + 0xb0, 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x28, 0x10, 0xb1, 0x20, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // (.. ...+X!...Y01 + 0x01, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x04, 0x21, 0x22, 0x24, 0x37, 0x37, 0x33, 0x14, // .........!"$773. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, // .32654&##532654& + 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x24, 0x33, 0x20, 0x04, 0x04, 0xc9, 0x88, 0x78, 0x87, // #"..#'&$3 ....x. + 0x8f, 0xfe, 0xc1, 0xfe, 0xfe, 0xe2, 0xfe, 0xbc, 0x05, 0x02, 0xbc, 0xc6, 0x9d, 0xb2, 0xca, 0xb8, // ................ + 0xb4, 0xb7, 0xb7, 0xae, 0xa8, 0xb5, 0xb1, 0x8d, 0xc1, 0xbc, 0x01, 0x06, 0x01, 0x31, 0xe0, 0x01, // .............1.. + 0x01, 0x01, 0x2a, 0x04, 0x26, 0x65, 0xa7, 0x2f, 0x2a, 0xae, 0x7d, 0xc9, 0xe2, 0xd6, 0xcd, 0x06, // ..*.&e./*.}..... + 0x72, 0x9d, 0x95, 0x78, 0x85, 0x81, 0x9c, 0x84, 0x72, 0x70, 0x90, 0x8e, 0x69, 0x06, 0xb0, 0xdc, // r..x....rp..i... + 0xd8, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x05, 0xb0, 0x00, 0x0b, // ................ + 0x00, 0x77, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, // .w...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x05, 0xd0, 0x40, 0x0b, 0x5c, // /....>Y......@.. + 0x05, 0x6c, 0x05, 0x7c, 0x05, 0x8c, 0x05, 0x9c, 0x05, 0x05, 0x5d, 0x40, 0x09, 0x1b, 0x05, 0x2b, // .l.|......]@...+ + 0x05, 0x3b, 0x05, 0x4b, 0x05, 0x04, 0x5d, 0xb0, 0x06, 0x10, 0xb0, 0x0b, 0xd0, 0x40, 0x09, 0x14, // .;.K..]......@.. + 0x0b, 0x24, 0x0b, 0x34, 0x0b, 0x44, 0x0b, 0x04, 0x5d, 0x40, 0x0b, 0x53, 0x0b, 0x63, 0x0b, 0x73, // .$.4.D..]@.S.c.s + 0x0b, 0x83, 0x0b, 0x93, 0x0b, 0x05, 0x5d, 0x30, 0x31, 0x01, 0x33, 0x11, 0x23, 0x11, 0x27, 0x01, // ......]01.3.#.'. + 0x23, 0x11, 0x33, 0x11, 0x17, 0x04, 0x3c, 0xc5, 0xc5, 0x06, 0xfd, 0x43, 0xc5, 0xc5, 0x06, 0x05, // #.3...<....C.... + 0xb0, 0xfa, 0x50, 0x04, 0x56, 0x02, 0xfb, 0xa8, 0x05, 0xb0, 0xfb, 0xab, 0x02, 0x00, 0x00, 0x00, // ..P.V........... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x07, 0x4e, 0x02, 0x26, 0x01, 0xc4, 0x00, 0x00, // .........N.&.... + 0x01, 0x07, 0x01, 0x54, 0x01, 0x31, 0x01, 0x9e, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...T.1.......EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // ./....>Y01...... + 0x00, 0x00, 0x05, 0x20, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x31, // ... ...........1 + 0x00, 0x00, 0x04, 0xf7, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x48, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........H...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x03, 0x10, 0x02, 0x23, 0x23, 0x35, 0x33, 0x32, 0x12, // 01..#.!...##532. + 0x13, 0x13, 0x04, 0xf7, 0xc5, 0xfd, 0xf2, 0x01, 0xce, 0xef, 0x35, 0x29, 0x8a, 0x7a, 0x01, 0x01, // ..........5).z.. + 0x05, 0xb0, 0xfa, 0x50, 0x05, 0x15, 0xfd, 0xed, 0xfe, 0x70, 0xfe, 0x8e, 0x9a, 0x01, 0x1d, 0x01, // ...P.....p...... + 0x4b, 0x02, 0xae, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x06, 0x52, 0x05, 0xb0, 0x02, 0x06, // K..........R.... + 0x00, 0x30, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x05, 0xb0, 0x02, 0x06, // .0.............. + 0x00, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x02, 0x06, // .+.....q........ + 0x00, 0x32, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x03, 0x05, 0xb0, 0x02, 0x06, // .2.............. + 0x01, 0x7b, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xcc, 0x05, 0xb0, 0x02, 0x06, // .{.............. + 0x00, 0x33, 0x00, 0x00, 0xff, 0xff, 0x00, 0x76, 0xff, 0xeb, 0x04, 0xbf, 0x05, 0xc5, 0x02, 0x06, // .3.....v........ + 0x00, 0x26, 0x00, 0x00, 0xff, 0xff, 0x00, 0x22, 0x00, 0x00, 0x04, 0x8e, 0x05, 0xb0, 0x02, 0x06, // .&....."........ + 0x00, 0x37, 0x00, 0x00, 0x00, 0x01, 0x00, 0x55, 0xff, 0xeb, 0x04, 0xc8, 0x05, 0xb0, 0x00, 0x15, // .7.....U........ + 0x00, 0x4d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0c, 0x3e, 0x59, // .M...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb2, 0x01, 0x08, // ..EX../....>Y... + 0x15, 0x11, 0x12, 0x39, 0xb4, 0x85, 0x01, 0x95, 0x01, 0x02, 0x5d, 0xb0, 0x15, 0x10, 0xb0, 0x03, // ...9......]..... + 0xd0, 0xb0, 0x08, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0xb0, 0x01, 0x10, 0xb0, 0x13, 0xd0, 0xb4, 0x8a, 0x13, 0x9a, 0x13, 0x02, 0x5d, 0x30, 0x31, 0x01, // ............]01. + 0x17, 0x33, 0x01, 0x33, 0x01, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, // .3.3...#"&'7..32 + 0x36, 0x37, 0x37, 0x01, 0x33, 0x02, 0x4c, 0x49, 0x06, 0x01, 0x48, 0xe5, 0xfe, 0x03, 0x3b, 0x8b, // 677.3.LI..H...;. + 0x98, 0x19, 0x43, 0x09, 0x05, 0x0a, 0x43, 0x11, 0x47, 0x3d, 0x26, 0x28, 0xfe, 0x18, 0xdd, 0x03, // ..C...C.G=&(.... + 0x07, 0xbc, 0x03, 0x65, 0xfb, 0x3f, 0x83, 0x81, 0x06, 0x03, 0x95, 0x02, 0x02, 0x48, 0x50, 0x54, // ...e.?.......HPT + 0x04, 0x3f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x55, 0xff, 0xc4, 0x05, 0xed, 0x05, 0xec, 0x00, 0x15, // .?.....U........ + 0x00, 0x1e, 0x00, 0x27, 0x00, 0x4f, 0x00, 0xb0, 0x0a, 0x2f, 0xb0, 0x14, 0x2f, 0xb2, 0x40, 0x14, // ...'.O.../../.@. + 0x01, 0x5d, 0xb2, 0x12, 0x14, 0x0a, 0x11, 0x12, 0x39, 0xb0, 0x12, 0x2f, 0xb0, 0x01, 0xd0, 0xb2, // .]......9../.... + 0x0c, 0x0a, 0x14, 0x11, 0x12, 0x39, 0xb0, 0x0c, 0x2f, 0xb0, 0x07, 0xd0, 0xb0, 0x12, 0x10, 0xb1, // .....9../....... + 0x16, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x1c, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x21, 0xd0, 0xb0, 0x16, 0x10, // ...+X!...Y.!.... + 0xb0, 0x27, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x32, 0x00, 0x11, 0x10, 0x00, 0x23, 0x23, 0x15, 0x23, // .'.01.32....##.# + 0x35, 0x23, 0x22, 0x00, 0x11, 0x10, 0x00, 0x33, 0x33, 0x35, 0x33, 0x03, 0x22, 0x06, 0x15, 0x14, // 5#"....3353."... + 0x16, 0x33, 0x33, 0x11, 0x33, 0x11, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x03, 0x84, 0x1a, // .33.3.32654&#... + 0xfc, 0x01, 0x53, 0xfe, 0xad, 0xfc, 0x1a, 0xc5, 0x1d, 0xfd, 0xfe, 0xb0, 0x01, 0x51, 0xfc, 0x1d, // ..S..........Q.. + 0xc5, 0xe2, 0xbd, 0xcd, 0xcd, 0xbd, 0x1d, 0xc5, 0x1c, 0xba, 0xcf, 0xcf, 0xba, 0x05, 0x1f, 0xfe, // ................ + 0xb7, 0xfe, 0xff, 0xfe, 0xfd, 0xfe, 0xb6, 0xc4, 0xc4, 0x01, 0x48, 0x01, 0x03, 0x01, 0x01, 0x01, // ..........H..... + 0x4b, 0xcd, 0xfe, 0x98, 0xea, 0xc7, 0xc9, 0xe8, 0x03, 0x62, 0xfc, 0x9e, 0xea, 0xc9, 0xc6, 0xe9, // K........b...... + 0xff, 0xff, 0x00, 0x42, 0x00, 0x00, 0x04, 0xd6, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3b, 0x00, 0x00, // ...B.........;.. + 0x00, 0x02, 0x00, 0xb5, 0xfe, 0x99, 0x05, 0xd8, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x0b, 0x00, 0x35, // ...............5 + 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb1, 0x06, // Y..EX../....>Y.. + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0xd0, 0xb0, 0x05, 0x10, // ...+X!...Y...... + 0xb0, 0x08, 0xd0, 0x30, 0x31, 0x01, 0x23, 0x11, 0x33, 0x01, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, // ...01.#.3.3.!.3. + 0x21, 0x05, 0xd8, 0xc5, 0xc5, 0xfa, 0xdd, 0xc6, 0x02, 0xc4, 0xc5, 0xfb, 0xb1, 0xfe, 0x99, 0x02, // !............... + 0x07, 0x05, 0x10, 0xfa, 0xeb, 0x05, 0x15, 0xfa, 0x50, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x93, // ........P....... + 0x00, 0x00, 0x04, 0xcc, 0x05, 0xb0, 0x00, 0x13, 0x00, 0x3c, 0x00, 0xb0, 0x0f, 0x2f, 0xb0, 0x00, // .........<.../.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, // ...Y01..#...#"&5 + 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x04, 0xcc, 0xc5, 0x5f, 0xb2, 0x7a, // .3...3267...._.z + 0xf1, 0xf8, 0xc6, 0x8a, 0x99, 0x68, 0xc0, 0x63, 0x05, 0xb0, 0xfa, 0x50, 0x02, 0x5b, 0x1d, 0x1a, // .....h.c...P.[.. + 0xd3, 0xed, 0x01, 0xcc, 0xfe, 0x34, 0xa5, 0x7f, 0x1c, 0x1b, 0x02, 0xb9, 0x00, 0x01, 0x00, 0xb4, // .....4.......... + 0x00, 0x00, 0x06, 0xd8, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........;...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x03, 0xd0, 0xb0, 0x01, 0x10, 0xb0, 0x05, 0xd0, 0xb0, 0x03, 0x10, // Y............... + 0xb0, 0x07, 0xd0, 0x30, 0x31, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, // ...01..!.3.!.3.! + 0x11, 0x01, 0x79, 0x01, 0xec, 0xc4, 0x01, 0xea, 0xc5, 0xf9, 0xdc, 0x05, 0xb0, 0xfa, 0xea, 0x05, // ..y............. + 0x16, 0xfa, 0xea, 0x05, 0x16, 0xfa, 0x50, 0x05, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, // ......P......... + 0xfe, 0xa1, 0x07, 0x73, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x3e, 0x00, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, // ...s.....>.../.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x06, 0x3e, 0x59, 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ./....>Y.....+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0xd0, 0xb0, 0x00, 0x10, 0xb0, 0x03, 0xd0, 0xb0, 0x07, 0xd0, // ...Y............ + 0xb0, 0x06, 0x10, 0xb0, 0x09, 0xd0, 0x30, 0x31, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, // ......01..!.3.!. + 0x33, 0x11, 0x33, 0x03, 0x23, 0x11, 0x21, 0x11, 0x01, 0x79, 0x01, 0xec, 0xc4, 0x01, 0xea, 0xc5, // 3.3.#.!..y...... + 0x9b, 0x14, 0xaf, 0xfa, 0x04, 0x05, 0xb0, 0xfa, 0xea, 0x05, 0x16, 0xfa, 0xea, 0x05, 0x16, 0xfa, // ................ + 0xeb, 0xfe, 0x06, 0x01, 0x5f, 0x05, 0xb0, 0x00, 0x00, 0x02, 0x00, 0x16, 0x00, 0x00, 0x05, 0xbc, // ...._........... + 0x05, 0xb0, 0x00, 0x0c, 0x00, 0x15, 0x00, 0x54, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, // .......T...EX../ + 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb2, 0x02, 0x0a, 0x01, 0x11, 0x12, 0x39, 0xb0, 0x02, 0x2f, 0xb0, 0x01, 0x10, // .>Y......9../... + 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb1, // .....+X!...Y.... + 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x0e, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x21, 0x11, 0x21, // ...+X!...Y01.!.! + 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, 0x21, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, // 2....#!.!..!2654 + 0x26, 0x23, 0x16, 0x02, 0x53, 0x01, 0x67, 0xea, 0x01, 0x02, 0xfe, 0xfd, 0xe9, 0xfd, 0xd4, 0xfe, // &#..S.g......... + 0x72, 0x02, 0x53, 0x01, 0x67, 0x94, 0x93, 0x93, 0x94, 0x05, 0xb0, 0xfd, 0xac, 0xe6, 0xc4, 0xc4, // r.S.g........... + 0xee, 0x05, 0x15, 0xfd, 0xac, 0xfd, 0xd9, 0xa0, 0x7a, 0x76, 0x97, 0x00, 0x00, 0x03, 0x00, 0xb4, // ........zv...... + 0x00, 0x00, 0x06, 0x43, 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x13, 0x00, 0x17, 0x00, 0x5c, 0x00, 0xb0, // ...C............ + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x07, 0x09, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb1, 0x0b, 0x02, // .>Y......9../... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x0c, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x32, 0x04, 0x15, 0x14, // .+X!...Y01.!2... + 0x04, 0x23, 0x21, 0x11, 0x33, 0x11, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x23, // .#!.3..!2654&#.# + 0x11, 0x33, 0x01, 0x79, 0x01, 0x67, 0xe9, 0x01, 0x03, 0xfe, 0xfc, 0xe8, 0xfd, 0xd4, 0xc5, 0x01, // .3.y.g.......... + 0x67, 0x93, 0x94, 0x93, 0x94, 0x03, 0x63, 0xc6, 0xc6, 0x03, 0x70, 0xef, 0xc5, 0xc6, 0xf6, 0x05, // g.....c...p..... + 0xb0, 0xfd, 0x25, 0xfd, 0xc5, 0xa9, 0x7b, 0x77, 0xa0, 0xfd, 0x2b, 0x05, 0xb0, 0x00, 0x00, 0x00, // ..%...{w..+..... + 0x00, 0x02, 0x00, 0xa3, 0x00, 0x00, 0x04, 0xbb, 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x13, 0x00, 0x42, // ...............B + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x08, 0x0a, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x21, 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, 0x33, 0x11, 0x11, 0x21, // 01.!2....#!.3..! + 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x68, 0x01, 0x67, 0xea, 0x01, 0x02, 0xfe, 0xfd, 0xe9, // 2654&#.h.g...... + 0xfd, 0xd4, 0xc5, 0x01, 0x67, 0x94, 0x93, 0x93, 0x94, 0x03, 0x5c, 0xe6, 0xc4, 0xc4, 0xee, 0x05, // ....g........... + 0xb0, 0xfd, 0x11, 0xfd, 0xd9, 0xa0, 0x7a, 0x76, 0x97, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb5, // ......zv........ + 0xff, 0xec, 0x04, 0xff, 0x05, 0xc6, 0x00, 0x21, 0x00, 0x54, 0x00, 0xb0, 0x1a, 0x2f, 0xb0, 0x00, // .......!.T.../.. + 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ./....>Y.....+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0xef, 0x1a, 0x01, 0x5d, 0xb2, 0x2f, 0x1a, 0x01, 0x5d, 0xb0, 0x1a, // ...Y....]./..].. + 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, // ......+X!...Y... + 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x13, 0x27, // .....+X!...Y01.' + 0x26, 0x00, 0x33, 0x32, 0x00, 0x11, 0x11, 0x10, 0x00, 0x23, 0x22, 0x00, 0x37, 0x37, 0x33, 0x14, // &.32.....#".773. + 0x16, 0x33, 0x32, 0x12, 0x35, 0x35, 0x21, 0x35, 0x21, 0x35, 0x34, 0x02, 0x23, 0x22, 0x06, 0x15, // .32.55!5!54.#".. + 0xbc, 0x02, 0x05, 0x01, 0x29, 0xf2, 0xf7, 0x01, 0x38, 0xfe, 0xc8, 0xf7, 0xf7, 0xfe, 0xdc, 0x05, // ....)...8....... + 0x02, 0xbd, 0xb2, 0xa5, 0xa4, 0xc5, 0xfd, 0xc2, 0x02, 0x3e, 0xc5, 0xa4, 0xa5, 0xb2, 0x03, 0xde, // .........>...... + 0x06, 0xcb, 0x01, 0x17, 0xfe, 0xa1, 0xfe, 0xf3, 0xfe, 0xfd, 0xfe, 0xf2, 0xfe, 0xa3, 0x01, 0x05, // ................ + 0xda, 0x06, 0x9a, 0xb1, 0x01, 0x09, 0xc6, 0x51, 0x9b, 0x19, 0xc6, 0x01, 0x0b, 0xb2, 0x9b, 0x00, // .......Q........ + 0x00, 0x02, 0x00, 0xbe, 0xff, 0xeb, 0x06, 0xe2, 0x05, 0xc5, 0x00, 0x15, 0x00, 0x23, 0x00, 0xa6, // .............#.. + 0x00, 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x0c, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb2, 0x5f, 0x0d, 0x01, 0x5d, 0xb2, 0xaf, 0x0d, // ./....>Y._..]... + 0x01, 0x5d, 0xb4, 0x1f, 0x0d, 0x2f, 0x0d, 0x02, 0x71, 0xb2, 0xcf, 0x0d, 0x01, 0x71, 0xb4, 0xef, // .].../..q....q.. + 0x0d, 0xff, 0x0d, 0x02, 0x71, 0xb4, 0x9f, 0x0d, 0xaf, 0x0d, 0x02, 0x71, 0x40, 0x09, 0xcf, 0x0d, // ....q......q@... + 0xdf, 0x0d, 0xef, 0x0d, 0xff, 0x0d, 0x04, 0x5d, 0xb2, 0x7f, 0x0d, 0x01, 0x5d, 0xb2, 0x2f, 0x0d, // .......]....]./. + 0x01, 0x5d, 0xb2, 0x0f, 0x0d, 0x01, 0x5d, 0xb0, 0x0d, 0x10, 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, // .]....]........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x12, 0x10, 0xb1, 0x19, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x20, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y.... ...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x10, 0x00, 0x21, 0x22, 0x00, 0x11, 0x35, 0x23, 0x11, // ...Y01...!"..5#. + 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x10, 0x00, 0x33, 0x20, 0x00, 0x11, 0x27, 0x34, 0x02, 0x23, // #.3.35..3 ..'4.# + 0x22, 0x02, 0x15, 0x11, 0x14, 0x12, 0x33, 0x32, 0x36, 0x35, 0x06, 0xe2, 0xfe, 0xb5, 0xfe, 0xf8, // ".....3265...... + 0xff, 0xfe, 0xc1, 0xcd, 0xc6, 0xc6, 0xcd, 0x01, 0x3f, 0xff, 0x01, 0x08, 0x01, 0x4b, 0xc5, 0xd8, // ........?....K.. + 0xb6, 0xac, 0xcd, 0xcd, 0xac, 0xb7, 0xd7, 0x02, 0x56, 0xfe, 0xf5, 0xfe, 0xa0, 0x01, 0x60, 0x01, // ........V.....`. + 0x0b, 0x22, 0xfd, 0x88, 0x05, 0xb0, 0xfd, 0x62, 0x47, 0x01, 0x0a, 0x01, 0x62, 0xfe, 0x9f, 0xfe, // .".....bG...b... + 0xf5, 0x02, 0xc8, 0x01, 0x00, 0xff, 0x00, 0xc8, 0xfe, 0xfb, 0xca, 0xff, 0x00, 0xff, 0xcb, 0x00, // ................ + 0x00, 0x02, 0x00, 0x63, 0x00, 0x00, 0x04, 0x6e, 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x5d, // ...c...n.......] + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0x16, 0x00, 0x09, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x16, 0x2f, 0xb4, 0x0f, 0x16, 0x1f, 0x16, 0x02, 0x5d, 0xb4, 0x3f, 0x16, 0x4f, // .9../......].?.O + 0x16, 0x02, 0x5d, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ..].....+X!...Y. + 0x02, 0x0c, 0x16, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x09, 0x10, 0xb1, // .....9.......... + 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x01, // ....+X!...Y01!#. + 0x26, 0x26, 0x35, 0x34, 0x24, 0x33, 0x21, 0x11, 0x23, 0x11, 0x21, 0x01, 0x21, 0x22, 0x06, 0x15, // &&54$3!.#.!.!".. + 0x14, 0x16, 0x33, 0x21, 0x01, 0x34, 0xd1, 0x01, 0x55, 0x8d, 0x93, 0x01, 0x13, 0xf1, 0x01, 0xd2, // ..3!.4..U....... + 0xc5, 0xfe, 0xba, 0x01, 0x46, 0xfe, 0xf3, 0x9c, 0xa3, 0xa4, 0x99, 0x01, 0x0f, 0x02, 0x6e, 0x36, // ....F.........n6 + 0xc8, 0x8e, 0xd0, 0xe6, 0xfa, 0x50, 0x02, 0x39, 0x02, 0xdc, 0x96, 0x83, 0x83, 0xa4, 0x00, 0x00, // .....P.9........ + 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x04, 0x4e, 0x02, 0x06, 0x00, 0x44, 0x00, 0x00, // ...j.....N...D.. + 0x00, 0x02, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x06, 0x11, 0x00, 0x1c, 0x00, 0x2a, 0x00, 0x62, // ...a...*.....*.b + 0x00, 0xb0, 0x11, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, // .../..EX../....> + 0x59, 0xb2, 0x0f, 0x11, 0x01, 0x5d, 0xb2, 0x2f, 0x11, 0x01, 0x5d, 0xb2, 0x00, 0x11, 0x07, 0x11, // Y....]./..]..... + 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb2, 0x16, 0x00, 0x11, 0x11, 0x12, 0x39, 0xb0, 0x16, 0x2f, 0xb1, // .9../......9../. + 0x0e, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x1a, 0x00, 0x07, 0x11, // ....+X!...Y..... + 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb1, 0x1d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9........+X!... + 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x24, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y....$...+X!...Y + 0x30, 0x31, 0x01, 0x32, 0x12, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x35, 0x10, 0x00, // 01.2.....#".55.. + 0x37, 0x36, 0x36, 0x35, 0x33, 0x17, 0x16, 0x06, 0x07, 0x06, 0x06, 0x07, 0x17, 0x36, 0x36, 0x17, // 76653........66. + 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x02, 0x6b, 0xcf, // ".....326554&.k. + 0xf0, 0xfe, 0xfc, 0xe0, 0xe0, 0xfe, 0xfb, 0x01, 0x0d, 0xe2, 0x7e, 0x71, 0x98, 0x02, 0x03, 0xac, // ..........~q.... + 0xbb, 0x88, 0xc2, 0x16, 0x04, 0x3b, 0xb2, 0x3e, 0x8d, 0x90, 0x90, 0x8f, 0x8d, 0x92, 0x93, 0x03, // .....;.>........ + 0xfc, 0xfe, 0xed, 0xd7, 0x16, 0xe9, 0xfe, 0xd8, 0x01, 0x28, 0xe9, 0x8c, 0x01, 0x40, 0x01, 0x7c, // .........(...@.| + 0x2d, 0x17, 0x40, 0x49, 0x06, 0xb0, 0x6e, 0x20, 0x17, 0xa4, 0x9f, 0x05, 0x3f, 0x4f, 0x9a, 0xc0, // -.@I..n ....?O.. + 0x90, 0x16, 0xa3, 0xd4, 0xd4, 0xa3, 0x16, 0x90, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x90, // ................ + 0x00, 0x00, 0x04, 0x23, 0x04, 0x3a, 0x00, 0x0e, 0x00, 0x17, 0x00, 0x20, 0x00, 0x92, 0x00, 0xb0, // ...#.:..... .... + 0x18, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb4, 0xbf, 0x18, 0xcf, // .EX../....>Y.... + 0x18, 0x02, 0x5d, 0xb2, 0x2f, 0x18, 0x01, 0x71, 0xb2, 0x9f, 0x18, 0x01, 0x71, 0xb2, 0xff, 0x18, // ..]./..q....q... + 0x01, 0x71, 0xb2, 0x6f, 0x18, 0x01, 0x72, 0xb2, 0xdf, 0x18, 0x01, 0x72, 0xb2, 0x3f, 0x18, 0x01, // .q.o..r....r.?.. + 0x72, 0xb2, 0xcf, 0x18, 0x01, 0x71, 0xb2, 0x6f, 0x18, 0x01, 0x71, 0xb2, 0xff, 0x18, 0x01, 0x5d, // r....q.o..q....] + 0xb2, 0x5f, 0x18, 0x01, 0x5d, 0xb2, 0x2f, 0x18, 0x01, 0x5d, 0xb0, 0x18, 0x10, 0xb1, 0x0f, 0x02, // ._..]./..]...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x08, 0x0f, 0x18, 0x11, 0x12, 0x39, // ..+X!...Y......9 + 0xb0, 0x00, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x01, 0x10, 0xb1, 0x1f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x33, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x01, // 3.!2..........#. + 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, // .!2654&#%32654&# + 0x23, 0x90, 0x01, 0xab, 0xd6, 0xec, 0x5c, 0x54, 0x65, 0x71, 0xdd, 0xc6, 0xfe, 0xd5, 0x01, 0x2b, // #......Teq.....+ + 0x6d, 0x70, 0x70, 0x6d, 0xfe, 0xd5, 0xe7, 0x7d, 0x7f, 0x80, 0x7d, 0xe6, 0x04, 0x3a, 0x95, 0x95, // mppm...}..}..:.. + 0x4c, 0x77, 0x1f, 0x19, 0x89, 0x58, 0x98, 0x9c, 0x01, 0xda, 0xfe, 0xbe, 0x53, 0x4e, 0x4d, 0x54, // Lw...X......SNMT + 0x97, 0x4a, 0x4b, 0x4d, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x03, 0x3f, // .JKMN..........? + 0x04, 0x3a, 0x00, 0x05, 0x00, 0x2c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, // .:...,...EX../.. + 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x03, 0x3f, 0xfe, 0x15, 0xc5, 0x02, 0xb0, 0x03, // 01.!.#.!.?...... + 0x9e, 0xfc, 0x62, 0x04, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2e, 0xfe, 0xc2, 0x04, 0xa0, // ..b.:........... + 0x04, 0x3a, 0x00, 0x0e, 0x00, 0x15, 0x00, 0x4a, 0x00, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .:.....J.../..EX + 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ....>Y.....+X!.. + 0xf4, 0x59, 0xb0, 0x00, 0xd0, 0xb0, 0x12, 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x0c, 0x10, 0xb0, 0x09, // .Y.............. + 0xd0, 0xb0, 0x05, 0x10, 0xb1, 0x14, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0x30, 0x31, 0x37, 0x36, 0x36, 0x37, 0x13, 0x21, 0x11, 0x33, 0x03, 0x23, 0x11, 0x21, 0x11, 0x23, // 017667.!.3.#.!.# + 0x03, 0x01, 0x06, 0x06, 0x07, 0x21, 0x11, 0x21, 0x83, 0x53, 0x58, 0x0f, 0x10, 0x02, 0xc3, 0x90, // .....!.!.SX..... + 0x13, 0xb2, 0xfd, 0x18, 0xb2, 0x13, 0x01, 0xd4, 0x0b, 0x51, 0x40, 0x01, 0xe5, 0xfe, 0xc0, 0x9a, // .........Q@..... + 0x60, 0xd1, 0xd8, 0x01, 0x97, 0xfc, 0x60, 0xfe, 0x28, 0x01, 0x3e, 0xfe, 0xc2, 0x01, 0xd8, 0x02, // `.....`.(.>..... + 0x09, 0xb4, 0xfe, 0x57, 0x02, 0xf1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, // ...W.......c.... + 0x04, 0x4e, 0x02, 0x06, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x15, 0x00, 0x00, 0x06, 0x04, // .N...H.......... + 0x04, 0x3a, 0x00, 0x15, 0x00, 0x68, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // .:...h...EX../.. + 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x0c, 0x06, 0x0a, 0x11, 0x12, 0x39, 0xb0, 0x0c, 0x2f, 0xb4, 0xbf, 0x0c, 0xcf, 0x0c, // Y......9../..... + 0x02, 0x5d, 0xb1, 0x04, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, // .].....+X!...Y.. + 0xd0, 0xb0, 0x06, 0x10, 0xb0, 0x03, 0xd0, 0xb2, 0x08, 0x04, 0x0c, 0x11, 0x12, 0x39, 0xb0, 0x0a, // .............9.. + 0x10, 0xb0, 0x0d, 0xd0, 0xb0, 0x0c, 0x10, 0xb0, 0x0f, 0xd0, 0xb0, 0x0d, 0x10, 0xb0, 0x11, 0xd0, // ................ + 0xb0, 0x08, 0x10, 0xb0, 0x13, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x01, 0x23, // ............01.# + 0x11, 0x23, 0x11, 0x23, 0x01, 0x23, 0x01, 0x01, 0x33, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x01, // .#.#.#..3.3.3.3. + 0x33, 0x01, 0x01, 0x23, 0x03, 0xed, 0x7e, 0xc5, 0x7f, 0xfe, 0xe2, 0xf8, 0x01, 0x82, 0xfe, 0xa0, // 3..#..~......... + 0xee, 0x01, 0x0a, 0x7b, 0xc5, 0x7b, 0x01, 0x0b, 0xee, 0xfe, 0x9f, 0x01, 0x82, 0xf8, 0x01, 0xd5, // ...{.{.......... + 0xfe, 0x2b, 0x01, 0xd5, 0xfe, 0x2b, 0x02, 0x3d, 0x01, 0xfd, 0xfe, 0x42, 0x01, 0xbe, 0xfe, 0x42, // .+...+.=...B...B + 0x01, 0xbe, 0xfe, 0x03, 0xfd, 0xc3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x58, 0xff, 0xed, 0x03, 0xae, // ...........X.... + 0x04, 0x4c, 0x00, 0x2a, 0x00, 0x75, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, // .L.*.u...EX../.. + 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x0e, 0x10, 0xb0, 0x09, 0xd0, 0xb2, 0x2a, 0x1a, 0x0e, 0x11, 0x12, 0x39, 0xb0, 0x2a, 0x2f, // .......*....9.*/ + 0xb2, 0x2f, 0x2a, 0x01, 0x5d, 0xb4, 0xbf, 0x2a, 0xcf, 0x2a, 0x02, 0x5d, 0xb2, 0x9f, 0x2a, 0x01, // ./*.]..*.*.]..*. + 0x71, 0xb1, 0x29, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x29, // q.)...+X!...Y..) + 0x2a, 0x11, 0x12, 0x39, 0xb0, 0x1a, 0x10, 0xb0, 0x1f, 0xd0, 0xb0, 0x1a, 0x10, 0xb1, 0x22, 0x02, // *..9..........". + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x36, 0x35, 0x34, // ..+X!...Y01.2654 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, // &#"..#'&632..... + 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, // .....#"&773..326 + 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x02, 0x13, 0x68, 0x5a, 0x67, 0x68, 0x5d, 0x7e, 0xbb, 0x02, // 54&##5..hZgh]~.. + 0x06, 0xef, 0xaf, 0xbe, 0xd6, 0x58, 0x4f, 0x5b, 0x60, 0xe9, 0xbf, 0xb0, 0xfe, 0x05, 0x02, 0xbb, // .....XO[`....... + 0x84, 0x68, 0x6b, 0x77, 0x67, 0x6e, 0xbc, 0x02, 0x78, 0x4f, 0x4b, 0x44, 0x5e, 0x62, 0x46, 0x06, // .hkwgn..xOKD^bF. + 0x8b, 0xaf, 0xa3, 0x97, 0x49, 0x79, 0x23, 0x21, 0x80, 0x5b, 0x98, 0xac, 0xab, 0xa2, 0x06, 0x4c, // ....Iy#!.[.....L + 0x70, 0x63, 0x4a, 0x57, 0x50, 0xa0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfc, // pcJWP........... + 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x6e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // .:...n...EX../.. + 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x04, // EX../....>Y..... + 0xd0, 0xb2, 0x9d, 0x04, 0x01, 0x5d, 0xb6, 0x4c, 0x04, 0x5c, 0x04, 0x6c, 0x04, 0x03, 0x5d, 0xb4, // .....].L...l..]. + 0x7b, 0x04, 0x8b, 0x04, 0x02, 0x5d, 0xb0, 0x06, 0x10, 0xb0, 0x0b, 0xd0, 0xb2, 0x84, 0x0b, 0x01, // {....].......... + 0x5d, 0x40, 0x09, 0x43, 0x0b, 0x53, 0x0b, 0x63, 0x0b, 0x73, 0x0b, 0x04, 0x5d, 0xb2, 0x92, 0x0b, // ]@.C.S.c.s..]... + 0x01, 0x5d, 0x30, 0x31, 0x01, 0x33, 0x11, 0x23, 0x11, 0x27, 0x01, 0x23, 0x11, 0x33, 0x11, 0x17, // .]01.3.#.'.#.3.. + 0x03, 0x37, 0xc5, 0xc5, 0x06, 0xfe, 0x22, 0xc4, 0xc4, 0x06, 0x04, 0x3a, 0xfb, 0xc6, 0x03, 0x00, // .7...."....:.... + 0x02, 0xfc, 0xfe, 0x04, 0x3a, 0xfd, 0x00, 0x02, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfc, // ....:........... + 0x05, 0xf7, 0x02, 0x26, 0x01, 0xe4, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0x99, 0x00, 0x47, // ...&.......T...G + 0x00, 0x33, 0x00, 0xb2, 0x8f, 0x10, 0x01, 0x71, 0xb2, 0xcf, 0x10, 0x01, 0x71, 0xb2, 0x1f, 0x10, // .3.....q....q... + 0x01, 0x72, 0xb6, 0x3f, 0x10, 0x4f, 0x10, 0x5f, 0x10, 0x03, 0x5d, 0xb2, 0xff, 0x10, 0x01, 0x71, // .r.?.O._..]....q + 0xb2, 0xaf, 0x10, 0x01, 0x71, 0xb6, 0x60, 0x10, 0x70, 0x10, 0x80, 0x10, 0x03, 0x5d, 0xb2, 0x00, // ....q.`.p....].. + 0x10, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x04, 0x41, // ..q01..........A + 0x04, 0x3a, 0x00, 0x0e, 0x00, 0x8e, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, // .:......./..EX.. + 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb4, 0xbf, // Y..EX../....>Y.. + 0x06, 0xcf, 0x06, 0x02, 0x5d, 0xb2, 0x2f, 0x06, 0x01, 0x71, 0xb2, 0x9f, 0x06, 0x01, 0x71, 0xb2, // ....]./..q....q. + 0xff, 0x06, 0x01, 0x71, 0xb2, 0x6f, 0x06, 0x01, 0x72, 0xb2, 0xdf, 0x06, 0x01, 0x72, 0xb2, 0x3f, // ...q.o..r....r.? + 0x06, 0x01, 0x72, 0xb2, 0xcf, 0x06, 0x01, 0x71, 0xb2, 0x6f, 0x06, 0x01, 0x71, 0xb2, 0xff, 0x06, // ..r....q.o..q... + 0x01, 0x5d, 0xb2, 0x5f, 0x06, 0x01, 0x5d, 0xb2, 0x2f, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, // .]._..]./..].... + 0x01, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0b, 0x01, 0x06, 0x11, // ....+X!...Y..... + 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x17, 0x01, // .901.#.#.3.3.3.. + 0x01, 0x07, 0x23, 0x01, 0xdf, 0x81, 0xc5, 0xc5, 0x72, 0x01, 0x65, 0xe7, 0x03, 0xfe, 0x58, 0x01, // ..#.....r.e...X. + 0xca, 0x03, 0xf2, 0x01, 0xcb, 0xfe, 0x35, 0x04, 0x3a, 0xfe, 0x37, 0x01, 0xc9, 0x05, 0xfd, 0xff, // ......5.:.7..... + 0xfd, 0xd1, 0x05, 0x00, 0x00, 0x01, 0x00, 0x1a, 0x00, 0x00, 0x03, 0xfc, 0x04, 0x3a, 0x00, 0x0f, // .............:.. + 0x00, 0x48, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, // .H...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x03, 0x02, // X../....>Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x0a, 0x03, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x11, // .+X!...Y01..#.!. + 0x10, 0x02, 0x23, 0x23, 0x37, 0x37, 0x32, 0x36, 0x35, 0x11, 0x03, 0xfc, 0xc5, 0xfe, 0x92, 0xaa, // ..##77265....... + 0xcd, 0x38, 0x04, 0x29, 0x69, 0x53, 0x04, 0x3a, 0xfb, 0xc6, 0x03, 0x9e, 0xfe, 0xce, 0xfe, 0xc0, // .8.)iS.:........ + 0xfe, 0xd4, 0xa8, 0x01, 0xcd, 0xf6, 0x01, 0xce, 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x05, 0x55, // ...............U + 0x04, 0x3a, 0x00, 0x0f, 0x00, 0x7b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // .:...{...EX../.. + 0x02, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x01, 0xd0, 0xb4, 0x44, // ./....>Y.......D + 0x01, 0x54, 0x01, 0x02, 0x5d, 0x40, 0x09, 0x63, 0x01, 0x73, 0x01, 0x83, 0x01, 0x93, 0x01, 0x04, // .T..]@.c.s...... + 0x5d, 0xb0, 0x0e, 0x10, 0xb0, 0x0a, 0xd0, 0xb6, 0x7d, 0x0a, 0x8d, 0x0a, 0x9d, 0x0a, 0x03, 0x5d, // ].......}......] + 0xb2, 0x6c, 0x0a, 0x01, 0x5d, 0xb4, 0x4b, 0x0a, 0x5b, 0x0a, 0x02, 0x5d, 0xb0, 0x07, 0xd0, 0x30, // .l..].K.[..]...0 + 0x31, 0x01, 0x33, 0x01, 0x33, 0x11, 0x23, 0x11, 0x27, 0x01, 0x23, 0x01, 0x07, 0x11, 0x23, 0x11, // 1.3.3.#.'.#...#. + 0x33, 0x02, 0xf7, 0x06, 0x01, 0x62, 0xf6, 0xc5, 0x06, 0xfe, 0xb4, 0x88, 0xfe, 0xae, 0x06, 0xc5, // 3....b.......... + 0xfe, 0x01, 0x02, 0x03, 0x38, 0xfb, 0xc6, 0x02, 0xef, 0x02, 0xfd, 0x0f, 0x03, 0x02, 0x02, 0xfd, // ....8........... + 0x00, 0x04, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfb, 0x04, 0x3a, 0x00, 0x0b, // ..:..........:.. + 0x00, 0xa0, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, // ...../..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb2, 0x9f, 0x08, 0x01, 0x5d, 0xb2, // X../....>Y....]. + 0xff, 0x08, 0x01, 0x5d, 0xb2, 0x6f, 0x08, 0x01, 0x71, 0xb4, 0xcf, 0x08, 0xdf, 0x08, 0x02, 0x71, // ...].o..q......q + 0xb4, 0x3f, 0x08, 0x4f, 0x08, 0x02, 0x72, 0xb2, 0xaf, 0x08, 0x01, 0x72, 0xb4, 0xdf, 0x08, 0xef, // .?.O..r....r.... + 0x08, 0x02, 0x72, 0xb4, 0x6f, 0x08, 0x7f, 0x08, 0x02, 0x72, 0xb2, 0xff, 0x08, 0x01, 0x71, 0xb2, // ..r.o....r....q. + 0x0f, 0x08, 0x01, 0x72, 0xb2, 0x9f, 0x08, 0x01, 0x71, 0xb4, 0x2f, 0x08, 0x3f, 0x08, 0x02, 0x71, // ...r....q./.?..q + 0xb4, 0xbf, 0x08, 0xcf, 0x08, 0x02, 0x5d, 0xb2, 0x5f, 0x08, 0x01, 0x5d, 0xb2, 0x2f, 0x08, 0x01, // ......]._..]./.. + 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ]........+X!...Y + 0x30, 0x31, 0x21, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x03, 0xfb, // 01!#.!.#.3.!.3.. + 0xc5, 0xfe, 0x1e, 0xc5, 0xc5, 0x01, 0xe2, 0xc5, 0x01, 0xcc, 0xfe, 0x34, 0x04, 0x3a, 0xfe, 0x2c, // ...........4.:., + 0x01, 0xd4, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x04, 0x4e, 0x02, 0x06, // .......a...*.N.. + 0x00, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfc, 0x04, 0x3a, 0x00, 0x07, // .R...........:.. + 0x00, 0x39, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0a, 0x3e, 0x59, // .9...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x02, 0x02, // X../....>Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x21, 0x11, // ..+X!...Y01!#.!. + 0x23, 0x11, 0x21, 0x03, 0xfc, 0xc5, 0xfe, 0x1d, 0xc5, 0x03, 0x6d, 0x03, 0x9e, 0xfc, 0x62, 0x04, // #.!.......m...b. + 0x3a, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x60, 0x04, 0x29, 0x04, 0x4e, 0x02, 0x06, // :........`.).N.. + 0x00, 0x53, 0x00, 0x00, 0x00, 0x01, 0x00, 0x61, 0xff, 0xeb, 0x03, 0xf6, 0x04, 0x4e, 0x00, 0x1d, // .S.....a.....N.. + 0x00, 0x38, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0a, 0x3e, 0x59, // .8...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, // ..EX../....>Y... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x17, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x32, 0x36, 0x35, 0x33, 0x17, // .+X!...Y01%2653. + 0x16, 0x04, 0x23, 0x22, 0x02, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, // ..#".554.32...#4 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x02, 0x47, 0x62, 0x95, 0xb1, 0x02, 0x05, 0xfe, // &#"......Gb..... + 0xfd, 0xac, 0xec, 0xfa, 0xfb, 0xeb, 0xbe, 0xf1, 0x04, 0x02, 0xb2, 0x8c, 0x6b, 0x9b, 0x85, 0x84, // ............k... + 0x85, 0x79, 0x58, 0x06, 0x8c, 0xd9, 0x01, 0x34, 0xe9, 0x2a, 0xe7, 0x01, 0x35, 0xe0, 0xa3, 0x06, // .yX....4.*..5... + 0x63, 0x8b, 0xdf, 0xa2, 0x2a, 0xa6, 0xdd, 0x00, 0x00, 0x01, 0x00, 0x47, 0x00, 0x00, 0x03, 0xd1, // c...*......G.... + 0x04, 0x3a, 0x00, 0x07, 0x00, 0x2f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, // .:.../...EX../.. + 0x06, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x01, 0xd0, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x03, 0xd1, 0xfe, // ...01.!.#.!5!... + 0x9b, 0xc5, 0xfe, 0xa0, 0x03, 0x8a, 0x03, 0xa1, 0xfc, 0x5f, 0x03, 0xa1, 0x99, 0x00, 0x00, 0x00, // ........._...... + 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x5c, 0x00, 0x00, // .....K...:...... + 0x00, 0x03, 0x00, 0x62, 0xfe, 0x60, 0x05, 0x6b, 0x06, 0x18, 0x00, 0x1f, 0x00, 0x2d, 0x00, 0x3b, // ...b.`.k.....-.; + 0x00, 0x5d, 0x00, 0xb0, 0x07, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, // .].../..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, 0x1b, 0xb1, 0x18, 0x08, 0x3e, 0x59, 0xb0, 0x03, 0x10, // ..EX../....>Y... + 0xb0, 0x0c, 0xd0, 0xb0, 0x1c, 0x10, 0xb0, 0x13, 0xd0, 0xb0, 0x03, 0x10, 0xb1, 0x38, 0x02, 0xb0, // .............8.. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x23, 0xd0, 0xb0, 0x1c, 0x10, 0xb1, 0x31, // .+X!...Y.#.....1 + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x2a, 0xd0, 0x30, 0x31, 0x13, // ...+X!...Y.*.01. + 0x10, 0x12, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x36, 0x36, 0x33, 0x32, 0x12, 0x11, 0x15, // ..32...3.6632... + 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x25, // ..#"&'.#...#".5% + 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x21, 0x14, 0x16, // 4&#".....3265!.. + 0x33, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x62, 0xcc, 0xbe, 0x28, 0x47, // 3267.&&#"..b..(G + 0x20, 0xc5, 0x22, 0x50, 0x2f, 0xbe, 0xcc, 0xcd, 0xbb, 0x2f, 0x52, 0x22, 0xc5, 0x20, 0x48, 0x29, // ."P/..../R". H) + 0xbc, 0xcc, 0x04, 0x44, 0x7f, 0x82, 0x1e, 0x32, 0x15, 0x14, 0x33, 0x20, 0x82, 0x7d, 0xfc, 0x81, // ...D...2..3 .}.. + 0x73, 0x82, 0x1b, 0x30, 0x14, 0x14, 0x2e, 0x1b, 0x82, 0x75, 0x02, 0x09, 0x01, 0x07, 0x01, 0x3e, // s..0.....u.....> + 0x0e, 0x0c, 0x01, 0xe4, 0xfe, 0x16, 0x0f, 0x11, 0xfe, 0xc2, 0xfe, 0xf9, 0x15, 0xec, 0xfe, 0xe3, // ................ + 0x10, 0x0e, 0xfe, 0x57, 0x01, 0xa4, 0x0c, 0x0d, 0x01, 0x1d, 0xec, 0x15, 0xbc, 0xee, 0x09, 0x08, // ...W............ + 0xfc, 0xf1, 0x07, 0x07, 0xca, 0xa5, 0xa7, 0xc8, 0x07, 0x07, 0x03, 0x12, 0x06, 0x08, 0xec, 0xbe, // ................ + 0xff, 0xff, 0x00, 0x2e, 0x00, 0x00, 0x03, 0xd4, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x5b, 0x00, 0x00, // .........:...[.. + 0x00, 0x01, 0x00, 0x8f, 0xfe, 0x9e, 0x04, 0x80, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x38, 0x00, 0xb0, // .........:...8.. + 0x09, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb1, 0x02, 0x02, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb0, 0x04, 0xd0, 0xb0, 0x02, // .+X!...Y........ + 0x10, 0xb0, 0x06, 0xd0, 0x30, 0x31, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x11, 0x23, // ....01.3.!.3.3.# + 0x11, 0x21, 0x8f, 0xc5, 0x01, 0xe3, 0xc5, 0x84, 0xc5, 0xfc, 0xd4, 0x04, 0x3a, 0xfc, 0x60, 0x03, // .!..........:.`. + 0xa0, 0xfc, 0x60, 0xfe, 0x04, 0x01, 0x62, 0x00, 0x00, 0x01, 0x00, 0x7f, 0x00, 0x00, 0x03, 0xdc, // ..`...b......... + 0x04, 0x3b, 0x00, 0x13, 0x00, 0x43, 0x00, 0xb0, 0x0e, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, // .;...C.../..EX.. + 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x12, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb4, 0xbf, 0x0e, 0xcf, 0x0e, 0x02, 0x5d, 0xb0, 0x0e, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, // Y......]........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, // +X!...Y01!#...#" + 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x03, 0xdc, 0xc5, // &5.3...3267.3... + 0x39, 0x78, 0x44, 0xc4, 0xdf, 0xc5, 0x70, 0x6e, 0x42, 0x78, 0x3b, 0xc5, 0x01, 0x83, 0x0f, 0x0f, // 9xD...pnBx;..... + 0xce, 0xca, 0x01, 0x3e, 0xfe, 0xc2, 0x82, 0x7a, 0x0f, 0x0f, 0x02, 0x1b, 0x00, 0x01, 0x00, 0x8f, // ...>...z........ + 0x00, 0x00, 0x05, 0xd8, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x46, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....:...F...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb1, // >Y..EX../....>Y. + 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0xd0, 0x30, 0x31, // ....+X!...Y...01 + 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x01, 0x54, 0x01, 0x7d, // ..!.3.!.3.!..T.} + 0xc5, 0x01, 0x7d, 0xc5, 0xfa, 0xb7, 0x04, 0x3a, 0xfc, 0x60, 0x03, 0xa0, 0xfc, 0x60, 0x03, 0xa0, // ..}....:.`...`.. + 0xfb, 0xc6, 0x04, 0x3a, 0x00, 0x01, 0x00, 0x8f, 0xfe, 0xae, 0x06, 0x88, 0x04, 0x3a, 0x00, 0x0f, // ...:.........:.. + 0x00, 0x47, 0x00, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, // .G.../..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb0, // .....+X!...Y.... + 0x03, 0xd0, 0xb0, 0x02, 0x10, 0xb0, 0x05, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x07, 0xd0, 0xb0, 0x05, // ................ + 0x10, 0xb0, 0x09, 0xd0, 0xb0, 0x09, 0x2f, 0x30, 0x31, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, // ....../01..!.3.! + 0x11, 0x33, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x11, 0x01, 0x54, 0x01, 0x7d, 0xc5, 0x01, 0x7d, // .3.3.#.!..T.}..} + 0xc5, 0xb0, 0xc3, 0xfa, 0xca, 0x04, 0x3a, 0xfc, 0x60, 0x03, 0xa0, 0xfc, 0x60, 0x03, 0xa0, 0xfc, // ......:.`...`... + 0x57, 0xfe, 0x1d, 0x01, 0x52, 0x04, 0x3a, 0x00, 0x00, 0x02, 0x00, 0x1d, 0x00, 0x00, 0x04, 0xc1, // W...R.:......... + 0x04, 0x3a, 0x00, 0x0c, 0x00, 0x15, 0x00, 0x54, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, // .:.....T...EX../ + 0x1b, 0xb1, 0x0b, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x08, 0x0b, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb0, 0x0b, 0x10, // .>Y......9../... + 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, // .....+X!...Y.... + 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x0e, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x32, 0x16, // ...+X!...Y01.!2. + 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, // ...#!.!5!..!2654 + 0x26, 0x23, 0x02, 0x1f, 0x01, 0x0d, 0xc0, 0xd5, 0xd7, 0xbe, 0xfe, 0x2e, 0xfe, 0xc3, 0x02, 0x02, // &#.............. + 0x01, 0x0d, 0x6a, 0x65, 0x66, 0x69, 0x02, 0xc6, 0xc3, 0x9c, 0x9d, 0xca, 0x03, 0x9f, 0x9b, 0xfd, // ..jefi.......... + 0xf2, 0xfe, 0x6e, 0x71, 0x55, 0x52, 0x7a, 0x00, 0x00, 0x03, 0x00, 0xad, 0x00, 0x00, 0x05, 0x98, // ..nqURz......... + 0x04, 0x3a, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x17, 0x00, 0x58, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, // .:.......X.../.. + 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, 0x33, 0x01, 0x23, 0x11, // 01.!2....#!.3.#. + 0x33, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x72, 0x01, 0x0d, 0xc0, 0xd5, // 3..!2654&#.r.... + 0xd7, 0xbe, 0xfe, 0x2e, 0xc5, 0x04, 0x26, 0xc5, 0xc5, 0xfb, 0xda, 0x01, 0x0d, 0x6a, 0x65, 0x66, // ......&......jef + 0x69, 0x02, 0x9e, 0xb8, 0x93, 0x94, 0xbf, 0x04, 0x3a, 0xfb, 0xc6, 0x04, 0x3a, 0xfd, 0xca, 0xfe, // i.......:...:... + 0x96, 0x66, 0x4c, 0x4a, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x04, 0x00, // .fLJn........... + 0x04, 0x3a, 0x00, 0x0a, 0x00, 0x13, 0x00, 0x3e, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .:.....>.../..EX + 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, // ...Y01.!2....#!. + 0x33, 0x11, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x5e, 0x01, 0x0d, 0xc0, 0xd5, // 3..!2654&#.^.... + 0xd7, 0xbe, 0xfe, 0x2e, 0xc5, 0x01, 0x0d, 0x6a, 0x65, 0x66, 0x69, 0x02, 0x9e, 0xb8, 0x93, 0x94, // .......jefi..... + 0xbf, 0x04, 0x3a, 0xfd, 0xca, 0xfe, 0x96, 0x66, 0x4c, 0x4a, 0x6e, 0x00, 0x00, 0x01, 0x00, 0x63, // ..:....fLJn....c + 0xff, 0xeb, 0x03, 0xe3, 0x04, 0x4e, 0x00, 0x21, 0x00, 0x81, 0x00, 0xb0, 0x1d, 0x2f, 0xb0, 0x00, // .....N.!...../.. + 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, // ./....>Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x2f, 0x1d, 0x01, 0x5d, 0xb4, 0xbf, 0x1d, 0xcf, 0x1d, // X!...Y./..]..... + 0x02, 0x5d, 0xb2, 0x2f, 0x1d, 0x01, 0x71, 0xb2, 0xcf, 0x1d, 0x01, 0x71, 0xb2, 0xff, 0x1d, 0x01, // .]./..q....q.... + 0x71, 0xb2, 0x9f, 0x1d, 0x01, 0x71, 0xb2, 0xff, 0x1d, 0x01, 0x5d, 0xb2, 0x5f, 0x1d, 0x01, 0x5d, // q....q....]._..] + 0xb2, 0x6f, 0x1d, 0x01, 0x72, 0xb2, 0x9f, 0x1d, 0x01, 0x72, 0xb0, 0x1d, 0x10, 0xb1, 0x1c, 0x02, // .o..r....r...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x22, 0x06, 0x15, 0x23, // ..+X!...Y01."..# + 0x27, 0x26, 0x36, 0x33, 0x32, 0x12, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, // '&632.....#"&773 + 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x27, 0x21, 0x35, 0x21, 0x37, 0x26, 0x26, 0x02, 0x08, 0x5c, // ..3267'!5!7&&... + 0x8f, 0xb2, 0x02, 0x06, 0xff, 0xa6, 0xdc, 0xff, 0xff, 0x00, 0xdb, 0xb7, 0xee, 0x05, 0x02, 0xb3, // ................ + 0x87, 0x64, 0x7e, 0x8a, 0x08, 0x03, 0xfe, 0x7f, 0x01, 0x7f, 0x02, 0x0a, 0x89, 0x03, 0xb3, 0x7a, // .d~............z + 0x57, 0x06, 0x8b, 0xdb, 0xfe, 0xc7, 0xe3, 0x2a, 0xe4, 0xfe, 0xc7, 0xdf, 0xa3, 0x06, 0x63, 0x8b, // W......*......c. + 0xc4, 0x8c, 0x05, 0x9a, 0x05, 0x83, 0xb7, 0x00, 0x00, 0x02, 0x00, 0x99, 0xff, 0xeb, 0x06, 0x24, // ...............$ + 0x04, 0x4e, 0x00, 0x13, 0x00, 0x21, 0x00, 0xa5, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .N...!...../..EX + 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x13, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb4, 0xbf, 0x00, 0xcf, 0x00, 0x02, 0x5d, 0xb2, 0x2f, 0x00, 0x01, 0x71, 0xb2, 0x9f, 0x00, 0x01, // ......]./..q.... + 0x71, 0xb2, 0xff, 0x00, 0x01, 0x71, 0xb2, 0x6f, 0x00, 0x01, 0x72, 0xb2, 0xdf, 0x00, 0x01, 0x72, // q....q.o..r....r + 0xb2, 0x3f, 0x00, 0x01, 0x72, 0xb2, 0xcf, 0x00, 0x01, 0x71, 0xb2, 0x6f, 0x00, 0x01, 0x71, 0xb2, // .?..r....q.o..q. + 0xff, 0x00, 0x01, 0x5d, 0xb2, 0x5f, 0x00, 0x01, 0x5d, 0xb2, 0x2f, 0x00, 0x01, 0x5d, 0xb0, 0x00, // ...]._..]./..].. + 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, // ......+X!...Y... + 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, // .....+X!...Y.... + 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x36, // ....+X!...Y01.!6 + 0x12, 0x33, 0x32, 0x00, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x27, 0x23, 0x11, 0x23, 0x11, // .32.....#".'#.#. + 0x33, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, // 3...326554&#"... + 0x5e, 0x01, 0x00, 0x14, 0xff, 0xcd, 0xe1, 0x01, 0x05, 0xfe, 0xfc, 0xe0, 0xd2, 0xfe, 0xff, 0x10, // ^............... + 0xff, 0xc5, 0xc5, 0x01, 0xc2, 0x91, 0x8f, 0x8d, 0x92, 0x93, 0x8e, 0x8d, 0x91, 0x02, 0x71, 0xd4, // ..............q. + 0x01, 0x09, 0xfe, 0xca, 0xf1, 0x16, 0xf2, 0xfe, 0xcc, 0x01, 0x11, 0xdb, 0xfe, 0x29, 0x04, 0x3a, // .............).: + 0xfd, 0xd7, 0xac, 0xe0, 0xe0, 0xac, 0x16, 0xaa, 0xe2, 0xe2, 0xaa, 0x00, 0x00, 0x02, 0x00, 0x4e, // ...............N + 0x00, 0x00, 0x03, 0xf2, 0x04, 0x3a, 0x00, 0x0d, 0x00, 0x16, 0x00, 0x52, 0x00, 0xb0, 0x03, 0x2f, // .....:.....R.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x07, 0x03, 0x12, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, // X!...Y......9... + 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, // .....+X!...Y01.. + 0x23, 0x11, 0x21, 0x01, 0x23, 0x01, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x03, 0x14, 0x16, 0x33, // #.!.#.&&5463...3 + 0x21, 0x11, 0x21, 0x22, 0x06, 0x03, 0xf2, 0xc5, 0xfe, 0xf5, 0xff, 0x00, 0xd4, 0x01, 0x12, 0x67, // !.!"...........g + 0x6f, 0xdd, 0xc2, 0xd9, 0x62, 0x62, 0x01, 0x19, 0xfe, 0xfc, 0x6b, 0x6e, 0x04, 0x3a, 0xfb, 0xc6, // o...bb....kn.:.. + 0x01, 0xa4, 0xfe, 0x5c, 0x01, 0xc1, 0x25, 0xa0, 0x69, 0x92, 0xb9, 0xfe, 0xb3, 0x48, 0x66, 0x01, // ......%.i....Hf. + 0x62, 0x6b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x05, 0xe1, 0x02, 0x26, // bk.....c.......& + 0x00, 0x48, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0x97, 0x00, 0x1c, 0x00, 0x08, 0x00, 0xb2, // .H.....C........ + 0xc0, 0x20, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, // . .q01.....c.... + 0x05, 0xcc, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x2c, 0x1c, 0x00, 0x3d, // ...&.H.....j,..= + 0x00, 0xb2, 0x60, 0x21, 0x01, 0x72, 0xb4, 0xb0, 0x21, 0xc0, 0x21, 0x02, 0x71, 0xb2, 0x40, 0x21, // ..`!.r..!.!.q.@! + 0x01, 0x72, 0xb2, 0xf0, 0x21, 0x01, 0x71, 0xb4, 0x00, 0x21, 0x10, 0x21, 0x02, 0x72, 0xb2, 0x60, // .r..!.q..!.!.r.` + 0x24, 0x01, 0x72, 0xb4, 0xb0, 0x24, 0xc0, 0x24, 0x02, 0x71, 0xb2, 0x40, 0x24, 0x01, 0x72, 0xb2, // $.r..$.$.q.@$.r. + 0xf0, 0x24, 0x01, 0x71, 0xb4, 0x00, 0x24, 0x10, 0x24, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, // .$.q..$.$.r01... + 0x00, 0x01, 0xff, 0xe7, 0xfe, 0x4b, 0x04, 0x01, 0x06, 0x18, 0x00, 0x29, 0x00, 0x7d, 0x00, 0xb0, // .....K.....).}.. + 0x26, 0x2f, 0xb0, 0x29, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0a, // &/.)/..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x08, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x06, 0x3e, 0x59, 0xb2, 0x5f, 0x29, 0x01, // .EX. /.. .>Y._). + 0x5d, 0xb2, 0x2f, 0x29, 0x01, 0x5d, 0xb2, 0xbf, 0x29, 0x01, 0x5d, 0xb0, 0x29, 0x10, 0xb1, 0x00, // ]./).]..).].)... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x15, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0x10, 0xb1, 0x1c, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x22, 0xd0, 0xb0, 0x29, // .+X!...Y...."..) + 0x10, 0xb0, 0x24, 0xd0, 0xb2, 0x2f, 0x26, 0x01, 0x5d, 0x30, 0x31, 0x01, 0x21, 0x11, 0x36, 0x36, // ..$../&.]01.!.66 + 0x33, 0x32, 0x16, 0x15, 0x15, 0x33, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, // 32...3...#"&'7.. + 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x23, 0x35, // 3265.4&#"...#.#5 + 0x33, 0x35, 0x33, 0x15, 0x21, 0x02, 0x68, 0xfe, 0xec, 0x38, 0xa3, 0x63, 0xad, 0xc1, 0x01, 0xac, // 353.!.h..8.c.... + 0x9a, 0x21, 0x34, 0x1c, 0x0f, 0x0d, 0x44, 0x11, 0x3c, 0x44, 0x73, 0x72, 0x52, 0x85, 0x2b, 0xc5, // .!4...D.Y..EX../.. + 0x08, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ..>Y.....+X!...Y + 0xb0, 0x0f, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ........+X!...Y. + 0x2f, 0x1c, 0x01, 0x5d, 0xb2, 0x9f, 0x1c, 0x01, 0x5d, 0xb2, 0xff, 0x1c, 0x01, 0x5d, 0xb2, 0x6f, // /..]....]....].o + 0x1c, 0x01, 0x71, 0xb4, 0xcf, 0x1c, 0xdf, 0x1c, 0x02, 0x71, 0xb2, 0x3f, 0x1c, 0x01, 0x72, 0xb2, // ..q......q.?..r. + 0xff, 0x1c, 0x01, 0x71, 0xb2, 0x0f, 0x1c, 0x01, 0x72, 0xb2, 0x9f, 0x1c, 0x01, 0x71, 0xb4, 0x2f, // ...q....r....q./ + 0x1c, 0x3f, 0x1c, 0x02, 0x71, 0xb4, 0xbf, 0x1c, 0xcf, 0x1c, 0x02, 0x5d, 0xb2, 0x5f, 0x1c, 0x01, // .?..q......]._.. + 0x5d, 0xb4, 0x6f, 0x1c, 0x7f, 0x1c, 0x02, 0x72, 0xb4, 0xcf, 0x1c, 0xdf, 0x1c, 0x02, 0x72, 0xb0, // ].o....r......r. + 0x1c, 0x10, 0xb1, 0x1d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x25, 0x32, 0x36, 0x35, 0x33, 0x17, 0x16, 0x04, 0x23, 0x22, 0x02, 0x35, 0x35, 0x34, 0x12, 0x33, // %2653...#".554.3 + 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x17, 0x21, 0x15, 0x21, 0x07, // 2...#4&#"...!.!. + 0x16, 0x16, 0x02, 0x51, 0x62, 0x95, 0xb1, 0x02, 0x05, 0xfe, 0xfd, 0xac, 0xec, 0xfa, 0xfb, 0xeb, // ...Qb........... + 0xbe, 0xf1, 0x04, 0x02, 0xb2, 0x8c, 0x6b, 0x8d, 0x87, 0x05, 0x02, 0x01, 0x78, 0xfe, 0x88, 0x02, // ......k.....x... + 0x05, 0x86, 0x85, 0x79, 0x58, 0x06, 0x8c, 0xd9, 0x01, 0x34, 0xe9, 0x2a, 0xe7, 0x01, 0x35, 0xe0, // ...yX....4.*..5. + 0xa3, 0x06, 0x63, 0x8b, 0xbb, 0x8a, 0x05, 0x9a, 0x05, 0x8d, 0xb8, 0x00, 0xff, 0xff, 0x00, 0x67, // ..c............g + 0xff, 0xeb, 0x03, 0xc9, 0x04, 0x4e, 0x02, 0x06, 0x00, 0x56, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9f, // .....N...V...... + 0x00, 0x00, 0x01, 0x64, 0x06, 0x18, 0x02, 0x06, 0x00, 0x4c, 0x00, 0x00, 0xff, 0xff, 0xff, 0xa6, // ...d.....L...... + 0x00, 0x00, 0x02, 0x57, 0x05, 0xb6, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...W...&.......j + 0xfe, 0xfc, 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x05, 0x01, 0x72, 0xb4, 0xdf, 0x05, 0xef, // .....3.....r.... + 0x05, 0x02, 0x71, 0xb2, 0x5f, 0x05, 0x01, 0x72, 0xb4, 0x2f, 0x05, 0x3f, 0x05, 0x02, 0x72, 0xb2, // ..q._..r./.?..r. + 0x7f, 0x08, 0x01, 0x72, 0xb4, 0xdf, 0x08, 0xef, 0x08, 0x02, 0x71, 0xb2, 0x5f, 0x08, 0x01, 0x72, // ...r......q._..r + 0xb4, 0x2f, 0x08, 0x3f, 0x08, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xbe, // ./.?..r01....... + 0xfe, 0x4b, 0x01, 0x72, 0x06, 0x18, 0x02, 0x06, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x41, // .K.r.....M.....A + 0x00, 0x00, 0x06, 0x9e, 0x04, 0x3a, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x69, 0x00, 0xb0, 0x01, 0x2f, // .....:.....i.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, // ..Y01..!2....#!. + 0x21, 0x11, 0x10, 0x02, 0x23, 0x23, 0x37, 0x37, 0x32, 0x36, 0x35, 0x11, 0x01, 0x11, 0x21, 0x32, // !...##77265...!2 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x03, 0xfc, 0x01, 0x0d, 0xbf, 0xd6, 0xd7, 0xbe, 0xfe, 0x2e, 0xfe, // 654&#........... + 0xc2, 0xb2, 0xce, 0x38, 0x04, 0x29, 0x6a, 0x5c, 0x02, 0xc8, 0x01, 0x0d, 0x69, 0x66, 0x65, 0x6a, // ...8.)j.....ifej + 0x04, 0x3a, 0xfe, 0x65, 0xb9, 0x93, 0x94, 0xbf, 0x03, 0x9e, 0xfe, 0xce, 0xfe, 0xc2, 0xfe, 0xd2, // .:.e............ + 0x9e, 0x01, 0xda, 0xf3, 0x01, 0xce, 0xfd, 0xcb, 0xfe, 0x93, 0x70, 0x4d, 0x49, 0x67, 0x00, 0x00, // ..........pMIg.. + 0x00, 0x02, 0x00, 0x8f, 0x00, 0x00, 0x06, 0x9d, 0x04, 0x3a, 0x00, 0x12, 0x00, 0x1b, 0x00, 0x6a, // .........:.....j + 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x01, 0xd0, 0xb1, 0x0d, // ./....>Y........ + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x13, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x14, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x33, 0x11, 0x21, // .+X!...Y01.!.3.! + 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x01, 0x11, 0x21, // 2....#!.!.#.3..! + 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x01, 0x54, 0x01, 0xe2, 0xc5, 0x01, 0x0d, 0xc0, 0xd5, 0xd7, // 2654&#.T........ + 0xbe, 0xfe, 0x2e, 0xfe, 0x1e, 0xc5, 0xc5, 0x02, 0xa7, 0x01, 0x0d, 0x69, 0x66, 0x65, 0x6a, 0x02, // ...........ifej. + 0xa2, 0x01, 0x98, 0xfe, 0x64, 0xb8, 0x93, 0x94, 0xbf, 0x02, 0x09, 0xfd, 0xf7, 0x04, 0x3a, 0xfd, // ....d.........:. + 0xcb, 0xfe, 0x93, 0x70, 0x4d, 0x49, 0x67, 0x00, 0x00, 0x01, 0x00, 0x13, 0x00, 0x00, 0x04, 0x00, // ...pMIg......... + 0x06, 0x18, 0x00, 0x1b, 0x00, 0x6e, 0x00, 0xb0, 0x18, 0x2f, 0xb0, 0x1b, 0x2f, 0xb0, 0x00, 0x45, // .....n.../../..E + 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x12, 0x06, 0x3e, 0x59, 0xb2, 0x5f, 0x1b, 0x01, 0x5d, 0xb2, 0xbf, 0x1b, 0x01, 0x5d, 0xb2, 0x2f, // ..>Y._..]....]./ + 0x1b, 0x01, 0x5d, 0xb0, 0x1b, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..]........+X!.. + 0xf4, 0x59, 0xb0, 0x05, 0x10, 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y........+X!... + 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x14, 0xd0, 0xb0, 0x1b, 0x10, 0xb0, 0x16, 0xd0, 0xb2, 0x2f, 0x18, // Y............./. + 0x01, 0x5d, 0x30, 0x31, 0x01, 0x21, 0x11, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, // .]01.!.6632...#. + 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, // 4&#"...#.#5353.! + 0x02, 0x94, 0xfe, 0xc0, 0x38, 0xa3, 0x63, 0xad, 0xc1, 0xc5, 0x73, 0x72, 0x52, 0x85, 0x2b, 0xc5, // ....8.c...srR.+. + 0x7c, 0x7c, 0xc5, 0x01, 0x40, 0x04, 0xbb, 0xfe, 0xee, 0x4e, 0x57, 0xd0, 0xd8, 0xfd, 0x5a, 0x02, // ||..@....NW...Z. + 0xa8, 0x86, 0x80, 0x4d, 0x42, 0xfc, 0xe1, 0x04, 0xbb, 0x9b, 0xc2, 0xc2, 0xff, 0xff, 0x00, 0x99, // ...MB........... + 0x00, 0x00, 0x04, 0x41, 0x05, 0xc6, 0x02, 0x26, 0x01, 0xe6, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...A...&.......v + 0x01, 0x3e, 0x00, 0x01, 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x12, 0x01, 0x71, 0xb6, 0xdf, 0x12, 0xef, // .>...%.....q.... + 0x12, 0xff, 0x12, 0x03, 0x71, 0x40, 0x11, 0x0f, 0x12, 0x1f, 0x12, 0x2f, 0x12, 0x3f, 0x12, 0x4f, // ....q@...../.?.O + 0x12, 0x5f, 0x12, 0x6f, 0x12, 0x7f, 0x12, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8f, // ._.o....r01..... + 0x00, 0x00, 0x03, 0xfc, 0x05, 0xcb, 0x02, 0x26, 0x01, 0xe4, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, // .......&.......C + 0x00, 0xae, 0x00, 0x06, 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x0c, 0x01, 0x71, 0xb6, 0xdf, 0x0c, 0xef, // .....%.....q.... + 0x0c, 0xff, 0x0c, 0x03, 0x71, 0x40, 0x11, 0x0f, 0x0c, 0x1f, 0x0c, 0x2f, 0x0c, 0x3f, 0x0c, 0x4f, // ....q@...../.?.O + 0x0c, 0x5f, 0x0c, 0x6f, 0x0c, 0x7f, 0x0c, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1a, // ._.o....r01..... + 0xfe, 0x4b, 0x03, 0xe8, 0x05, 0xf7, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x01, 0x54, // .K.....&.......T + 0x56, 0x47, 0x00, 0x33, 0x00, 0xb2, 0x8f, 0x1a, 0x01, 0x71, 0xb2, 0xcf, 0x1a, 0x01, 0x71, 0xb2, // VG.3.....q....q. + 0x1f, 0x1a, 0x01, 0x72, 0xb6, 0x3f, 0x1a, 0x4f, 0x1a, 0x5f, 0x1a, 0x03, 0x5d, 0xb2, 0xff, 0x1a, // ...r.?.O._..]... + 0x01, 0x71, 0xb2, 0xaf, 0x1a, 0x01, 0x71, 0xb6, 0x60, 0x1a, 0x70, 0x1a, 0x80, 0x1a, 0x03, 0x5d, // .q....q.`.p....] + 0xb2, 0x00, 0x1a, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0x01, 0x00, 0x8f, 0xfe, 0x9c, 0x03, 0xfc, // ....q01......... + 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x46, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, // .:...F.../..EX.. + 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb1, 0x01, // Y..EX../....>Y.. + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x21, 0x11, // ...+X!...Y01..!. + 0x33, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x01, 0x54, 0x01, 0xe3, 0xc5, 0xfe, 0xaf, 0xc5, // 3.!.#.!..T...... + 0xfe, 0xa9, 0x04, 0x3a, 0xfc, 0x60, 0x03, 0xa0, 0xfb, 0xc6, 0xfe, 0x9c, 0x01, 0x64, 0x04, 0x3a, // ...:.`.......d.: + 0x00, 0x01, 0x00, 0x9d, 0xff, 0xeb, 0x06, 0x69, 0x05, 0xb0, 0x00, 0x20, 0x00, 0x53, 0x00, 0xb0, // .......i... .S.. + 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, // ../....>Y..EX. / + 0x1b, 0xb1, 0x20, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, // .. .>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x04, 0xd0, 0xb2, 0x07, 0x0a, 0x17, 0x11, 0x12, 0x39, 0xb0, 0x0a, 0x10, // .>Y.........9... + 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1c, 0xd0, 0x30, // .....+X!...Y...0 + 0x31, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, // 1....#"&'..#"&5. + 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, // 3...3265.3...326 + 0x35, 0x11, 0x06, 0x69, 0xe7, 0xbb, 0x6d, 0xaa, 0x2f, 0x33, 0xb0, 0x71, 0xb4, 0xdc, 0xc5, 0x6f, // 5..i..m./3.q...o + 0x5c, 0x6c, 0x84, 0xcc, 0x7a, 0x64, 0x63, 0x7a, 0x05, 0xb0, 0xfb, 0xd7, 0xc9, 0xd3, 0x57, 0x56, // .l..zdcz......WV + 0x56, 0x57, 0xd3, 0xc9, 0x04, 0x29, 0xfb, 0xd7, 0x7f, 0x83, 0x83, 0x7f, 0x04, 0x29, 0xfb, 0xd7, // VW...).......).. + 0x7e, 0x84, 0x84, 0x7e, 0x04, 0x29, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7c, 0xff, 0xeb, 0x05, 0xa4, // ~..~.).....|.... + 0x04, 0x3a, 0x00, 0x20, 0x00, 0x53, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // .:. .S...EX../.. + 0x0f, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // Y..EX. /.. .>Y.. + 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0xd0, 0xb2, 0x07, // EX../....>Y..... + 0x0a, 0x17, 0x11, 0x12, 0x39, 0xb0, 0x0a, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ....9........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1c, 0xd0, 0x30, 0x31, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, // ...Y...01....#"& + 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, // '..#"&5.3...3265 + 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x05, 0xa4, 0xd2, 0xa9, 0x5d, 0x92, // .3...3265.....]. + 0x2c, 0x2f, 0x9a, 0x61, 0xa3, 0xc5, 0xc5, 0x58, 0x4b, 0x59, 0x70, 0xc6, 0x63, 0x53, 0x51, 0x65, // ,/.a...XKYp.cSQe + 0x04, 0x3a, 0xfd, 0x26, 0xb6, 0xbf, 0x47, 0x47, 0x47, 0x47, 0xbe, 0xb7, 0x02, 0xda, 0xfd, 0x26, // .:.&..GGGG.....& + 0x6c, 0x6f, 0x70, 0x6b, 0x02, 0xda, 0xfd, 0x26, 0x6c, 0x6f, 0x70, 0x6b, 0x02, 0xda, 0x00, 0x00, // lopk...&lopk.... + 0x00, 0x02, 0xff, 0xcd, 0x00, 0x00, 0x04, 0xbb, 0x05, 0xb0, 0x00, 0x12, 0x00, 0x1b, 0x00, 0x59, // ...............Y + 0x00, 0xb0, 0x12, 0x2f, 0xb0, 0x02, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // .../../..EX../.. + 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x12, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x0b, 0xd0, 0xb0, 0x12, 0x10, 0xb0, 0x0d, 0xd0, 0xb0, 0x02, 0x10, 0xb1, 0x13, 0x02, 0xb0, // ................ + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x15, 0x21, 0x32, 0x04, 0x15, // +X!...Y01.#.!2.. + 0x14, 0x04, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x03, 0x11, 0x21, 0x32, // ..#!.#5353.3..!2 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x02, 0x4e, 0xe6, 0x01, 0x67, 0xe9, 0x01, 0x03, 0xfe, 0xfc, 0xe8, // 654&#.N..g...... + 0xfd, 0xd4, 0xd6, 0xd6, 0xc5, 0xe6, 0xe6, 0x01, 0x67, 0x93, 0x94, 0x93, 0x94, 0x04, 0x4d, 0xdd, // ........g.....M. + 0xef, 0xc5, 0xc6, 0xf6, 0x04, 0x4d, 0x9b, 0xc8, 0xc8, 0xfd, 0xed, 0xfd, 0xc5, 0xa9, 0x7b, 0x77, // .....M........{w + 0xa0, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdb, 0x00, 0x00, 0x04, 0x00, 0x06, 0x18, 0x00, 0x12, // ................ + 0x00, 0x1b, 0x00, 0x5d, 0x00, 0xb0, 0x10, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ...].../..EX../. + 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb2, 0x11, 0x10, 0x0a, 0x11, 0x12, 0x39, 0xb0, 0x11, 0x2f, 0xb1, // ...>Y......9../. + 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x02, 0x0a, 0x10, 0x11, // ....+X!...Y..... + 0x12, 0x39, 0xb0, 0x02, 0x2f, 0xb0, 0x01, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x11, 0x10, 0xb0, 0x0e, // .9../........... + 0xd0, 0xb0, 0x02, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0xb0, 0x0a, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ........+X!...Y0 + 0x31, 0x01, 0x21, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, // 1.!.!2....#!.#53 + 0x11, 0x33, 0x11, 0x21, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x02, 0x9f, 0xfe, // .3.!..!2654&#... + 0xbf, 0x01, 0x0d, 0xc0, 0xd5, 0xd7, 0xbe, 0xfe, 0x2e, 0xbe, 0xbe, 0xc5, 0x01, 0x41, 0xfe, 0xbf, // .............A.. + 0x01, 0x0d, 0x6a, 0x65, 0x66, 0x69, 0x04, 0x3a, 0xfe, 0xb2, 0xcd, 0xa5, 0xa5, 0xd5, 0x04, 0x3a, // ..jefi.:.......: + 0x9a, 0x01, 0x44, 0xfe, 0xbc, 0xfd, 0x7e, 0xfe, 0x48, 0x7d, 0x5c, 0x5a, 0x85, 0x00, 0x00, 0x00, // ..D...~.H}.Z.... + 0x00, 0x01, 0x00, 0xbf, 0xff, 0xec, 0x06, 0x8e, 0x05, 0xc6, 0x00, 0x29, 0x00, 0x85, 0x00, 0xb0, // ...........).... + 0x00, 0x45, 0x58, 0xb0, 0x29, 0x2f, 0x1b, 0xb1, 0x29, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX.)/..).>Y..EX + 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x26, 0x2f, // ../....>Y..EX.&/ + 0x1b, 0xb1, 0x26, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, // ..&.>Y..EX. /.. + 0x06, 0x3e, 0x59, 0xb2, 0x12, 0x20, 0x05, 0x11, 0x12, 0x39, 0xb0, 0x12, 0x2f, 0xb0, 0x01, 0xd0, // .>Y.. ...9../... + 0xb2, 0x0a, 0x05, 0x20, 0x11, 0x12, 0x39, 0xb0, 0x05, 0x10, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, // ... ..9........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x12, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x20, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y. ......+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x1b, 0x20, 0x05, 0x11, 0x12, 0x39, 0xb0, 0x13, 0x10, 0xb0, 0x24, // ...Y.. ...9....$ + 0xd0, 0x30, 0x31, 0x01, 0x33, 0x35, 0x10, 0x00, 0x33, 0x32, 0x00, 0x17, 0x07, 0x23, 0x26, 0x26, // .01.35..32...#&& + 0x23, 0x22, 0x02, 0x15, 0x15, 0x21, 0x15, 0x21, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, 0x37, 0x33, // #"...!.!...32673 + 0x17, 0x06, 0x00, 0x23, 0x22, 0x00, 0x11, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x01, 0x85, 0xc4, // ...#"..5#.#.3... + 0x01, 0x37, 0xf7, 0xf2, 0x01, 0x12, 0x13, 0x02, 0xbd, 0x18, 0xa2, 0x9e, 0xa5, 0xc4, 0x02, 0x1b, // .7.............. + 0xfd, 0xe5, 0xc4, 0xa5, 0x9f, 0xa1, 0x18, 0xbd, 0x02, 0x13, 0xfe, 0xea, 0xee, 0xf7, 0xfe, 0xc9, // ................ + 0xc4, 0xc6, 0xc6, 0x03, 0x42, 0x18, 0x01, 0x0d, 0x01, 0x5f, 0xfe, 0xff, 0xdf, 0x06, 0xa0, 0xab, // ....B...._...... + 0xfe, 0xf6, 0xc5, 0x1a, 0x9b, 0x50, 0xc7, 0xfe, 0xf6, 0xaa, 0xa3, 0x06, 0xd3, 0xfe, 0xf2, 0x01, // .....P.......... + 0x5e, 0x01, 0x0d, 0x50, 0xfd, 0x59, 0x05, 0xb0, 0x00, 0x01, 0x00, 0x97, 0xff, 0xeb, 0x05, 0xaa, // ^..P.Y.......... + 0x04, 0x4e, 0x00, 0x27, 0x00, 0xa7, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x27, 0x2f, 0x1b, 0xb1, // .N.'.....EX.'/.. + 0x27, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, // '.>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x24, 0x2f, 0x1b, 0xb1, 0x24, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX.$/..$.>Y.. + 0x45, 0x58, 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x06, 0x3e, 0x59, 0xb2, 0x11, 0x1f, 0x04, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x11, 0x2f, 0xb4, 0xbf, 0x11, 0xcf, 0x11, 0x02, 0x5d, 0xb2, 0x9f, 0x11, 0x01, // .9../......].... + 0x71, 0xb2, 0xff, 0x11, 0x01, 0x5d, 0xb2, 0x0f, 0x11, 0x01, 0x71, 0xb2, 0x2f, 0x11, 0x01, 0x5d, // q....]....q./..] + 0xb4, 0xcf, 0x11, 0xdf, 0x11, 0x02, 0x71, 0xb0, 0x01, 0xd0, 0xb2, 0x09, 0x04, 0x1f, 0x11, 0x12, // ......q......... + 0x39, 0xb0, 0x04, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // 9........+X!...Y + 0xb0, 0x11, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x1f, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x1a, // .......+X!...Y.. + 0x1f, 0x04, 0x11, 0x12, 0x39, 0xb0, 0x12, 0x10, 0xb0, 0x22, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x36, // ....9....".01.36 + 0x12, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x17, 0x21, 0x15, // .32...#4&#"...!. + 0x21, 0x07, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x17, 0x16, 0x04, 0x23, 0x22, 0x02, 0x27, // !...32653...#".' + 0x23, 0x11, 0x23, 0x11, 0x33, 0x01, 0x5c, 0xbb, 0x0e, 0xf9, 0xdd, 0xbe, 0xf1, 0x04, 0x02, 0xb2, // #.#.3........... + 0x8c, 0x6b, 0x8d, 0x87, 0x05, 0x02, 0x01, 0xa3, 0xfe, 0x5d, 0x02, 0x05, 0x86, 0x8e, 0x62, 0x95, // .k.......]....b. + 0xb1, 0x02, 0x05, 0xfe, 0xfd, 0xac, 0xdd, 0xf8, 0x0f, 0xbb, 0xc5, 0xc5, 0x02, 0x68, 0xd3, 0x01, // .............h.. + 0x13, 0xe0, 0xa3, 0x06, 0x63, 0x8b, 0xbb, 0x8b, 0x05, 0x9a, 0x05, 0x8c, 0xb8, 0x79, 0x58, 0x06, // ....c........yX. + 0x8c, 0xd9, 0x01, 0x0f, 0xd4, 0xfe, 0x32, 0x04, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x2b, // ......2.:......+ + 0x00, 0x00, 0x04, 0xe3, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x69, 0x00, 0xb0, 0x00, 0x45, // ...........i...E + 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x00, 0x0a, 0x08, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb0, 0x04, 0xd0, 0xb0, 0x00, // Y......9../..... + 0x10, 0xb1, 0x0d, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, // ......+X!...Y... + 0xb0, 0x0e, 0xd0, 0xb6, 0x7f, 0x0e, 0x8f, 0x0e, 0x9f, 0x0e, 0x03, 0x5d, 0xb4, 0x5c, 0x0e, 0x6c, // ...........]...l + 0x0e, 0x02, 0x5d, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x01, 0x33, 0x01, // ..]01.#.#.#.#.3. + 0x23, 0x01, 0x21, 0x03, 0x23, 0x03, 0x85, 0xa1, 0xc4, 0x94, 0x98, 0xc9, 0x02, 0x0d, 0xa9, 0x02, // #.!.#........... + 0x02, 0xc9, 0xfd, 0xab, 0x01, 0x88, 0xbf, 0x06, 0x01, 0xb6, 0xfe, 0x4a, 0x01, 0xb6, 0xfe, 0x4a, // ...........J...J + 0x05, 0xb0, 0xfa, 0x50, 0x02, 0x5a, 0x02, 0x33, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x00, 0x04, 0x29, // ...P.Z.3.......) + 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x11, 0x00, 0x6d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, // .:.....m...EX../ + 0x1b, 0xb1, 0x09, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x06, 0x3e, 0x59, 0xb2, 0x05, 0x06, // ..EX../....>Y... + 0x09, 0x11, 0x12, 0x39, 0xb0, 0x05, 0x2f, 0xb0, 0x01, 0xd0, 0xb0, 0x05, 0x10, 0xb1, 0x0c, 0x02, // ...9../......... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb0, 0x0f, 0xd0, 0x40, // ..+X!...Y......@ + 0x11, 0x2c, 0x0f, 0x3c, 0x0f, 0x4c, 0x0f, 0x5c, 0x0f, 0x6c, 0x0f, 0x7c, 0x0f, 0x8c, 0x0f, 0x9c, // .,.<.L...l.|.... + 0x0f, 0x08, 0x5d, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x01, 0x33, 0x01, // ..]01.#.#.#.#.3. + 0x23, 0x01, 0x21, 0x03, 0x27, 0x23, 0x07, 0x02, 0xe9, 0x6a, 0xc4, 0x71, 0x74, 0xc9, 0x01, 0xb8, // #.!.'#...j.qt... + 0xa9, 0x01, 0xbb, 0xc9, 0xfe, 0x27, 0x01, 0x24, 0x7e, 0x12, 0x06, 0x12, 0x01, 0x26, 0xfe, 0xda, // .....'.$~....&.. + 0x01, 0x26, 0xfe, 0xda, 0x04, 0x3a, 0xfb, 0xc6, 0x01, 0xc1, 0x01, 0x38, 0x44, 0x44, 0x00, 0x00, // .&...:.....8DD.. + 0x00, 0x02, 0x00, 0xd1, 0x00, 0x00, 0x06, 0xf4, 0x05, 0xb0, 0x00, 0x13, 0x00, 0x17, 0x00, 0x6f, // ...............o + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb2, 0x0b, 0x10, 0x12, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x0b, 0x2f, 0xb1, 0x14, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb0, 0x01, 0xd0, 0xb0, 0x12, 0x10, 0xb0, 0x02, 0xd0, 0xb0, 0x10, 0x10, 0xb0, 0x0d, 0xd0, // Y............... + 0xb0, 0x09, 0xd0, 0xb0, 0x05, 0xd0, 0xb0, 0x0b, 0x10, 0xb0, 0x07, 0xd0, 0xb0, 0x0b, 0x10, 0xb0, // ................ + 0x0e, 0xd0, 0xb0, 0x02, 0x10, 0xb0, 0x16, 0xd0, 0xb4, 0x8f, 0x16, 0x9f, 0x16, 0x02, 0x5d, 0x40, // ..............]@ + 0x0b, 0x3c, 0x16, 0x4c, 0x16, 0x5c, 0x16, 0x6c, 0x16, 0x7c, 0x16, 0x05, 0x5d, 0x30, 0x31, 0x01, // .<.L...l.|..]01. + 0x21, 0x01, 0x33, 0x01, 0x23, 0x03, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x13, 0x21, 0x11, // !.3.#.#.#.#.#.!. + 0x23, 0x11, 0x33, 0x01, 0x21, 0x03, 0x23, 0x01, 0x97, 0x01, 0x7e, 0x01, 0x34, 0xa9, 0x02, 0x02, // #.3.!.#...~.4... + 0xc9, 0x95, 0xa1, 0xc4, 0x94, 0x98, 0xc9, 0x9e, 0xfe, 0xbd, 0xc6, 0xc6, 0x02, 0x3f, 0x01, 0x88, // .............?.. + 0xbf, 0x06, 0x02, 0x5b, 0x03, 0x55, 0xfa, 0x50, 0x01, 0xb6, 0xfe, 0x4a, 0x01, 0xb6, 0xfe, 0x4a, // ...[.U.P...J...J + 0x01, 0xb7, 0xfe, 0x49, 0x05, 0xb0, 0xfc, 0xaa, 0x02, 0x33, 0x00, 0x00, 0x00, 0x02, 0x00, 0xba, // ...I.....3...... + 0x00, 0x00, 0x05, 0xe8, 0x04, 0x3a, 0x00, 0x13, 0x00, 0x19, 0x00, 0x91, 0x00, 0xb0, 0x00, 0x45, // .....:.........E + 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x10, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb2, 0x0b, 0x0d, 0x02, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x0b, 0x2f, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb0, 0x01, 0xd0, 0xb0, 0x0b, 0x10, 0xb0, 0x07, 0xd0, 0xb0, 0x0b, 0x10, 0xb0, 0x0e, 0xd0, // Y............... + 0xb0, 0x02, 0x10, 0xb0, 0x17, 0xd0, 0xb4, 0x8f, 0x17, 0x9f, 0x17, 0x02, 0x5d, 0x40, 0x0b, 0x3c, // ............]@.< + 0x17, 0x4c, 0x17, 0x5c, 0x17, 0x6c, 0x17, 0x7c, 0x17, 0x05, 0x5d, 0x30, 0x31, 0x01, 0x21, 0x01, // .L...l.|..]01.!. + 0x33, 0x01, 0x23, 0x03, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x13, 0x23, 0x11, 0x23, 0x11, // 3.#.#.#.#.#.#.#. + 0x33, 0x01, 0x21, 0x03, 0x27, 0x23, 0x07, 0x01, 0x7f, 0x01, 0x03, 0x01, 0x02, 0xa9, 0x01, 0xbb, // 3.!.'#.......... + 0xc9, 0x77, 0x6a, 0xc4, 0x71, 0x74, 0xc9, 0x77, 0xc4, 0xc5, 0xc5, 0x01, 0xc7, 0x01, 0x24, 0x7e, // .wj.qt.w......$~ + 0x12, 0x06, 0x12, 0x01, 0xc1, 0x02, 0x79, 0xfb, 0xc6, 0x01, 0x26, 0xfe, 0xda, 0x01, 0x26, 0xfe, // ......y...&...&. + 0xda, 0x01, 0x25, 0xfe, 0xdb, 0x04, 0x3a, 0xfd, 0x87, 0x01, 0x38, 0x44, 0x44, 0x00, 0x00, 0x00, // ..%...:...8DD... + 0x00, 0x02, 0x00, 0x95, 0x00, 0x00, 0x06, 0x4b, 0x05, 0xb0, 0x00, 0x1d, 0x00, 0x21, 0x00, 0x70, // .......K.....!.p + 0x00, 0xb0, 0x1b, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x0c, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x1b, 0x10, 0xb0, 0x01, 0xd0, 0xb1, 0x0a, // ./....>Y........ + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1b, 0x10, 0xb1, 0x10, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1b, 0x10, 0xb0, 0x1e, 0xd0, 0xb0, // ..+X!...Y....... + 0x1c, 0x10, 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ...!...+X!...Y01 + 0x01, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x23, 0x07, 0x11, 0x23, 0x11, // .32...#.4&##..#. + 0x27, 0x23, 0x22, 0x06, 0x15, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x33, 0x01, 0x21, 0x01, 0x33, // '#"...#.4633.!.3 + 0x01, 0x21, 0x04, 0x4c, 0x16, 0xef, 0xfa, 0xc5, 0x8b, 0x99, 0x74, 0x19, 0xc5, 0x11, 0x83, 0x99, // .!.L......t..... + 0x89, 0xc5, 0xf7, 0xf0, 0x25, 0xfe, 0x79, 0x04, 0xb9, 0xfd, 0x9f, 0x0a, 0x01, 0x1c, 0xfd, 0xbe, // ....%.y......... + 0x03, 0x2e, 0xd1, 0xea, 0xfe, 0x8d, 0x01, 0x73, 0xa2, 0x7e, 0x2a, 0xfd, 0x97, 0x02, 0x78, 0x1b, // .......s.~*...x. + 0x7e, 0xa2, 0xfe, 0x8d, 0x01, 0x73, 0xea, 0xd1, 0x02, 0x82, 0xfd, 0x7e, 0x01, 0xe7, 0x00, 0x00, // ~....s.....~.... + 0x00, 0x02, 0x00, 0x95, 0x00, 0x00, 0x05, 0x57, 0x04, 0x3b, 0x00, 0x1f, 0x00, 0x22, 0x00, 0x67, // .......W.;...".g + 0x00, 0xb0, 0x1b, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x0a, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x1b, 0x10, 0xb0, 0x02, 0xd0, 0xb0, 0x1b, // ./....>Y........ + 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0xd0, // ......+X!...Y... + 0xb0, 0x1b, 0x10, 0xb0, 0x20, 0xd0, 0xb0, 0x1c, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // .... ....."...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x33, 0x01, 0x16, 0x16, 0x15, 0x15, 0x23, 0x35, // !...Y01.3.....#5 + 0x34, 0x26, 0x23, 0x23, 0x07, 0x11, 0x23, 0x11, 0x27, 0x23, 0x22, 0x06, 0x15, 0x15, 0x23, 0x35, // 4&##..#.'#"...#5 + 0x34, 0x36, 0x37, 0x01, 0x33, 0x35, 0x21, 0x01, 0x13, 0x21, 0x04, 0x63, 0x7b, 0xfe, 0xe3, 0xc6, // 467.35!..!.c{... + 0xd0, 0xc6, 0x77, 0x84, 0x2f, 0x0b, 0xc5, 0x06, 0x3c, 0x85, 0x76, 0xc5, 0xd4, 0xcd, 0xfe, 0xe4, // ..w./...<.v..... + 0x9e, 0x02, 0xab, 0xfe, 0x99, 0xb0, 0xfe, 0xa0, 0x04, 0x3a, 0xfe, 0x21, 0x0a, 0xd2, 0xdd, 0xa2, // .........:.!.... + 0xa2, 0xa3, 0x7d, 0x13, 0xfe, 0x51, 0x01, 0xb8, 0x0a, 0x7d, 0xa3, 0xa2, 0xa2, 0xe2, 0xd0, 0x07, // ..}..Q...}...... + 0x01, 0xdf, 0x01, 0xfe, 0x24, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0xbe, 0x00, 0x00, 0x08, 0x82, // ....$.@......... + 0x05, 0xb0, 0x00, 0x21, 0x00, 0x25, 0x00, 0x84, 0x00, 0xb0, 0x1e, 0x2f, 0xb0, 0x00, 0x45, 0x58, // ...!.%...../..EX + 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, // ../....>Y..EX. / + 0x1b, 0xb1, 0x20, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, // .. .>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb0, 0x1e, 0x10, 0xb0, 0x00, 0xd0, // X../....>Y...... + 0xb0, 0x1e, 0x10, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x10, 0xd0, 0xb0, 0x0a, 0xd0, 0xb0, 0x1e, 0x10, 0xb0, 0x22, 0xd0, 0xb0, 0x20, 0x10, 0xb1, 0x25, // .........".. ..% + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x20, 0x16, 0x15, // ...+X!...Y01. .. + 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x23, 0x07, 0x11, 0x23, 0x11, 0x27, 0x23, 0x22, 0x06, 0x15, // .#.4&##..#.'#".. + 0x11, 0x23, 0x11, 0x34, 0x37, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x01, 0x21, 0x01, 0x33, // .#.47!.#.3.!.!.3 + 0x01, 0x21, 0x06, 0x83, 0x01, 0x05, 0xfa, 0xc5, 0x8b, 0x99, 0x74, 0x19, 0xc5, 0x11, 0x83, 0x99, // .!........t..... + 0x89, 0xc5, 0x4d, 0xfe, 0x6b, 0xc6, 0xc6, 0x03, 0x54, 0xfe, 0x79, 0x04, 0xb9, 0xfd, 0x9f, 0x0a, // ..M.k...T.y..... + 0x01, 0x1c, 0xfd, 0xbe, 0x03, 0x2e, 0xd1, 0xea, 0xfe, 0x8d, 0x01, 0x73, 0xa2, 0x7e, 0x2a, 0xfd, // ...........s.~*. + 0x97, 0x02, 0x78, 0x1b, 0x7e, 0xa2, 0xfe, 0x8d, 0x01, 0x73, 0xb9, 0x68, 0xfd, 0x6c, 0x05, 0xb0, // ..x.~....s.h.l.. + 0xfd, 0x7e, 0x02, 0x82, 0xfd, 0x7e, 0x01, 0xe7, 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x07, 0x51, // .~...~.........Q + 0x04, 0x3a, 0x00, 0x21, 0x00, 0x24, 0x00, 0x84, 0x00, 0xb0, 0x1f, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .:.!.$...../..EX + 0xb0, 0x1e, 0x2f, 0x1b, 0xb1, 0x1e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x21, 0x2f, // ../....>Y..EX.!/ + 0x1b, 0xb1, 0x21, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, // ..!.>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x1f, 0x10, 0xb0, 0x01, 0xd0, // X../....>Y...... + 0xb0, 0x1f, 0x10, 0xb1, 0x1a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x11, 0xd0, 0xb0, 0x0a, 0xd0, 0xb0, 0x1f, 0x10, 0xb0, 0x22, 0xd0, 0xb0, 0x21, 0x10, 0xb1, 0x24, // ........."..!..$ + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x01, 0x16, 0x16, // ...+X!...Y01.... + 0x15, 0x15, 0x23, 0x35, 0x34, 0x26, 0x23, 0x23, 0x07, 0x11, 0x23, 0x11, 0x27, 0x23, 0x22, 0x06, // ..#54&##..#.'#". + 0x15, 0x15, 0x23, 0x35, 0x34, 0x37, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x01, 0x01, 0x13, // ..#547!.#.3.!... + 0x21, 0x06, 0xd8, 0xfe, 0xe3, 0xc6, 0xd0, 0xc6, 0x77, 0x84, 0x2f, 0x0b, 0xc5, 0x06, 0x3c, 0x85, // !.......w./...<. + 0x76, 0xc5, 0x46, 0xfe, 0x89, 0xc5, 0xc5, 0x02, 0xd1, 0xfe, 0xe5, 0x01, 0xe2, 0xb0, 0xfe, 0xa0, // v.F............. + 0x04, 0x3a, 0xfe, 0x21, 0x0a, 0xd2, 0xdd, 0xa2, 0xa2, 0xa3, 0x7d, 0x13, 0xfe, 0x51, 0x01, 0xb8, // .:.!......}..Q.. + 0x0a, 0x7d, 0xa3, 0xa2, 0xa2, 0xb8, 0x68, 0xfe, 0x3e, 0x04, 0x3a, 0xfe, 0x23, 0x01, 0xdd, 0xfe, // .}....h.>.:.#... + 0x25, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x4a, 0xfe, 0x44, 0x03, 0xa4, 0x07, 0x72, 0x00, 0x2c, // %.@....J.D...r., + 0x00, 0x35, 0x00, 0x94, 0x00, 0xb0, 0x2c, 0x2f, 0xb0, 0x1d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .5....,/../..EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x16, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x7f, 0x2c, 0x01, 0x5d, 0xb2, 0xef, 0x2c, 0x01, 0x5d, 0xb2, 0xcf, // ...Y..,.]..,.].. + 0x2c, 0x01, 0x5d, 0xb2, 0x2f, 0x2c, 0x01, 0x5d, 0xb2, 0x1f, 0x2c, 0x01, 0x71, 0xb0, 0x2c, 0x10, // ,.]./,.]..,.q.,. + 0xb1, 0x2b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0f, 0x2b, 0x2c, // .+...+X!...Y..+, + 0x11, 0x12, 0x39, 0xb0, 0x16, 0x10, 0xb1, 0x23, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..9....#...+X!.. + 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x32, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, // .Y....2..+X...Y. + 0x2d, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x2e, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, // -..+X...Y....+X. + 0x1b, 0xdc, 0x59, 0xb0, 0x35, 0xd0, 0x30, 0x31, 0x01, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, // ..Y.5.01.2654&#! + 0x35, 0x21, 0x32, 0x04, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x04, 0x23, 0x23, 0x22, // 5!2..........##" + 0x06, 0x15, 0x14, 0x16, 0x17, 0x07, 0x26, 0x26, 0x27, 0x34, 0x36, 0x33, 0x33, 0x32, 0x36, 0x35, // ......&&'4633265 + 0x34, 0x26, 0x23, 0x23, 0x35, 0x01, 0x37, 0x33, 0x15, 0x05, 0x23, 0x27, 0x35, 0x33, 0x01, 0x9c, // 4&##5.73..#'53.. + 0x9a, 0x92, 0x8f, 0x89, 0xfe, 0xd0, 0x01, 0x30, 0xd3, 0x01, 0x0b, 0x82, 0x73, 0x81, 0x8a, 0xfe, // .......0....s... + 0xf7, 0xd3, 0x32, 0x4c, 0x45, 0x5d, 0x42, 0x4f, 0x6f, 0x9b, 0x01, 0xb3, 0xa1, 0x2a, 0x81, 0x95, // ..2LE]BOo....*.. + 0xa4, 0x9e, 0x8f, 0x01, 0x0a, 0x93, 0xaa, 0xfe, 0xff, 0x77, 0xfe, 0xa6, 0x03, 0x39, 0x7f, 0x72, // .........w...9.r + 0x66, 0x85, 0x9b, 0xd5, 0xb5, 0x67, 0xa4, 0x2c, 0x29, 0xb0, 0x7f, 0xc8, 0xe3, 0x3b, 0x35, 0x46, // f....g.,)....;5F + 0x55, 0x1e, 0x7f, 0x2f, 0xa4, 0x6f, 0x81, 0x80, 0x95, 0x77, 0x85, 0x86, 0x9b, 0x03, 0xa5, 0x94, // U../.o...w...... + 0x12, 0xf5, 0xf3, 0x14, 0x00, 0x02, 0x00, 0x49, 0xfe, 0x44, 0x03, 0x79, 0x06, 0x1a, 0x00, 0x2c, // .......I.D.y..., + 0x00, 0x35, 0x00, 0xc4, 0x00, 0xb0, 0x2c, 0x2f, 0xb0, 0x1d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .5....,/../..EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x16, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x5f, 0x2c, 0x01, 0x5d, 0xb4, 0xbf, 0x2c, 0xcf, 0x2c, 0x02, 0x5d, // ...Y._,.]..,.,.] + 0xb4, 0x2f, 0x2c, 0x3f, 0x2c, 0x02, 0x71, 0xb2, 0x9f, 0x2c, 0x01, 0x71, 0xb2, 0xff, 0x2c, 0x01, // ./,?,.q..,.q..,. + 0x71, 0xb2, 0x0f, 0x2c, 0x01, 0x72, 0xb2, 0x3f, 0x2c, 0x01, 0x72, 0xb4, 0xcf, 0x2c, 0xdf, 0x2c, // q..,.r.?,.r..,., + 0x02, 0x71, 0xb2, 0x6f, 0x2c, 0x01, 0x71, 0xb2, 0xff, 0x2c, 0x01, 0x5d, 0xb2, 0x9f, 0x2c, 0x01, // .q.o,.q..,.]..,. + 0x5d, 0xb2, 0x2f, 0x2c, 0x01, 0x5d, 0xb4, 0x6f, 0x2c, 0x7f, 0x2c, 0x02, 0x72, 0xb0, 0x2c, 0x10, // ]./,.].o,.,.r.,. + 0xb1, 0x2b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0f, 0x2b, 0x2c, // .+...+X!...Y..+, + 0x11, 0x12, 0x39, 0xb0, 0x16, 0x10, 0xb1, 0x23, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..9....#...+X!.. + 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x32, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, // .Y....2..+X...Y. + 0x2d, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x2e, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, // -..+X...Y....+X. + 0x1b, 0xdc, 0x59, 0xb0, 0x35, 0xd0, 0x30, 0x31, 0x01, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, // ..Y.5.01.2654&#! + 0x35, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x23, 0x22, // 5!2..........##" + 0x06, 0x15, 0x14, 0x16, 0x17, 0x07, 0x26, 0x26, 0x27, 0x34, 0x36, 0x33, 0x33, 0x32, 0x36, 0x35, // ......&&'4633265 + 0x34, 0x26, 0x23, 0x23, 0x35, 0x13, 0x37, 0x33, 0x15, 0x05, 0x23, 0x27, 0x35, 0x33, 0x01, 0x9a, // 4&##5.73..#'53.. + 0x85, 0x7e, 0x7b, 0x74, 0xfe, 0xd1, 0x01, 0x2f, 0xc0, 0xf5, 0x67, 0x5b, 0x69, 0x6f, 0xf3, 0xc0, // .~{t.../..g[io.. + 0x31, 0x4c, 0x45, 0x5e, 0x42, 0x50, 0x6f, 0x9b, 0x01, 0xb3, 0xa1, 0x29, 0x6e, 0x7f, 0x8f, 0x8a, // 1LE^BPo....)n... + 0x8f, 0xc4, 0x93, 0xaa, 0xfe, 0xff, 0x77, 0xfe, 0xa6, 0x02, 0x6a, 0x53, 0x4b, 0x41, 0x55, 0x9c, // ......w...jSKAU. + 0xa8, 0x8e, 0x49, 0x77, 0x23, 0x21, 0x7a, 0x56, 0x97, 0xad, 0x3b, 0x35, 0x46, 0x56, 0x1d, 0x7f, // ..Iw#!zV..;5FV.. + 0x2f, 0xa4, 0x6f, 0x81, 0x80, 0x5b, 0x4a, 0x52, 0x51, 0x9b, 0x03, 0x1c, 0x94, 0x12, 0xf5, 0xf3, // /.o..[JRQ....... + 0x14, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x57, 0x00, 0x00, 0x05, 0x1b, 0x05, 0xb0, 0x02, 0x06, // .......W........ + 0x01, 0x82, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5b, 0xfe, 0x26, 0x05, 0x4d, 0x04, 0x3a, 0x02, 0x06, // .......[.&.M.:.. + 0x01, 0xa2, 0x00, 0x00, 0x00, 0x03, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x00, 0x0d, // .......q........ + 0x00, 0x16, 0x00, 0x1f, 0x00, 0x5b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // .....[...EX../.. + 0x0a, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x0e, 0x03, 0x0a, 0x11, 0x12, 0x39, 0x7c, 0xb0, 0x0e, 0x2f, 0x18, 0xb2, 0x90, 0x0e, // Y......9|../.... + 0x01, 0x5d, 0xb0, 0x0a, 0x10, 0xb1, 0x13, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .]........+X!... + 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x03, 0x10, 0xb1, 0x1c, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ........+X!...Y0 + 0x31, 0x01, 0x10, 0x00, 0x21, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x20, 0x00, 0x11, 0x05, // 1...!".....3 ... + 0x21, 0x35, 0x34, 0x02, 0x23, 0x22, 0x02, 0x15, 0x05, 0x21, 0x15, 0x14, 0x12, 0x33, 0x32, 0x36, // !54.#"...!...326 + 0x35, 0x05, 0x02, 0xfe, 0xb5, 0xfe, 0xf8, 0xff, 0xfe, 0xc1, 0x01, 0x3f, 0xff, 0x01, 0x08, 0x01, // 5..........?.... + 0x4b, 0xfc, 0x34, 0x03, 0x07, 0xd8, 0xb6, 0xac, 0xcd, 0x03, 0x07, 0xfc, 0xf9, 0xcd, 0xac, 0xb7, // K.4............. + 0xd7, 0x02, 0x56, 0xfe, 0xf5, 0xfe, 0xa0, 0x01, 0x60, 0x01, 0x0b, 0x01, 0x03, 0x01, 0x0a, 0x01, // ..V.....`....... + 0x62, 0xfe, 0x9f, 0xfe, 0xf5, 0x3d, 0x3f, 0xc8, 0x01, 0x00, 0xff, 0x00, 0xc8, 0xda, 0x2b, 0xca, // b....=?.......+. + 0xff, 0x00, 0xff, 0xcb, 0x00, 0x03, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x04, 0x4e, 0x00, 0x0d, // .......a...*.N.. + 0x00, 0x16, 0x00, 0x1f, 0x00, 0x5e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // .....^...EX../.. + 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x1b, 0x0a, // Y.....+X!...Y... + 0x03, 0x11, 0x12, 0x39, 0x7c, 0xb0, 0x1b, 0x2f, 0x18, 0xb4, 0x30, 0x1b, 0x40, 0x1b, 0x02, 0x5d, // ...9|../..0.@..] + 0xb4, 0x70, 0x1b, 0x80, 0x1b, 0x02, 0x5d, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // .p....].....+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x13, 0x34, 0x00, 0x33, 0x32, 0x00, 0x15, 0x15, 0x14, 0x00, 0x23, 0x22, // .Y01.4.32.....#" + 0x00, 0x35, 0x01, 0x32, 0x36, 0x37, 0x27, 0x21, 0x07, 0x16, 0x16, 0x13, 0x22, 0x06, 0x07, 0x17, // .5.267'!...."... + 0x21, 0x37, 0x26, 0x26, 0x61, 0x01, 0x04, 0xdf, 0xe1, 0x01, 0x05, 0xfe, 0xfc, 0xe0, 0xe0, 0xfe, // !7&&a........... + 0xfb, 0x01, 0xe5, 0x80, 0x8f, 0x08, 0x02, 0xfd, 0xd4, 0x02, 0x08, 0x8f, 0x80, 0x7d, 0x8e, 0x0b, // .............}.. + 0x02, 0x02, 0x2a, 0x02, 0x0b, 0x90, 0x02, 0x27, 0xf0, 0x01, 0x37, 0xfe, 0xca, 0xf1, 0x16, 0xf2, // ..*....'..7..... + 0xfe, 0xcc, 0x01, 0x35, 0xf1, 0xfe, 0x74, 0xb9, 0x92, 0x05, 0x05, 0x92, 0xb9, 0x03, 0x2e, 0xb3, // ...5..t......... + 0x8b, 0x05, 0x05, 0x8a, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x16, 0x00, 0x00, 0x04, 0xdc, // ................ + 0x05, 0xc4, 0x00, 0x11, 0x00, 0x4c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, // .....L...EX../.. + 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0c, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x01, // Y..EX../....>Y.. + 0xd0, 0x40, 0x0d, 0x44, 0x01, 0x54, 0x01, 0x64, 0x01, 0x74, 0x01, 0x84, 0x01, 0x94, 0x01, 0x06, // .@.D.T.d.t...... + 0x5d, 0xb0, 0x07, 0x10, 0xb1, 0x0a, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ]........+X!...Y + 0x30, 0x31, 0x01, 0x17, 0x33, 0x37, 0x13, 0x36, 0x36, 0x33, 0x17, 0x07, 0x23, 0x22, 0x06, 0x07, // 01..37.663..#".. + 0x01, 0x23, 0x01, 0x33, 0x02, 0x45, 0x21, 0x06, 0x21, 0xfd, 0x31, 0x83, 0x6c, 0x32, 0x01, 0x0c, // .#.3.E!.!.1.l2.. + 0x32, 0x3d, 0x1b, 0xfe, 0x78, 0xa9, 0xfe, 0x02, 0xd6, 0x01, 0x7e, 0x79, 0x79, 0x03, 0x25, 0x9c, // 2=..x.....~yy.%. + 0x85, 0x01, 0xa9, 0x3f, 0x50, 0xfb, 0x75, 0x05, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2e, // ...?P.u......... + 0x00, 0x00, 0x04, 0x0e, 0x04, 0x4d, 0x00, 0x15, 0x00, 0x54, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....M...T...EX. + 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x14, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x01, 0xd0, 0x40, 0x09, 0x34, 0x01, 0x44, 0x01, 0x54, 0x01, 0x64, 0x01, 0x04, // >Y...@.4.D.T.d.. + 0x5d, 0xb2, 0x73, 0x01, 0x01, 0x5d, 0xb4, 0x80, 0x01, 0x90, 0x01, 0x02, 0x5d, 0xb0, 0x07, 0x10, // ].s..]......]... + 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, // .....+X!...Y01.. + 0x33, 0x37, 0x13, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x07, // 37.6632...&&#".. + 0x01, 0x23, 0x01, 0x33, 0x01, 0xe3, 0x11, 0x06, 0x13, 0x95, 0x29, 0x84, 0x52, 0x22, 0x33, 0x18, // .#.3......).R"3. + 0x16, 0x05, 0x16, 0x0d, 0x20, 0x3b, 0x0d, 0xfe, 0xd8, 0x95, 0xfe, 0x83, 0xca, 0x01, 0x3f, 0x4c, // .... ;........?L + 0x4c, 0x02, 0x17, 0x7f, 0x78, 0x0a, 0x0f, 0x97, 0x03, 0x05, 0x34, 0x2a, 0xfc, 0xb9, 0x04, 0x3a, // L...x.....4*...: + 0xff, 0xff, 0x00, 0x16, 0x00, 0x00, 0x04, 0xdc, 0x07, 0x48, 0x02, 0x26, 0x02, 0x20, 0x00, 0x00, // .........H.&. .. + 0x01, 0x07, 0x01, 0x5f, 0x04, 0x38, 0x01, 0x5a, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ..._.8.Z.....EX. + 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x19, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x04, 0x0e, // ...>Y01......... + 0x06, 0x20, 0x02, 0x26, 0x02, 0x21, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5f, 0x03, 0xd2, 0x00, 0x32, // . .&.!....._...2 + 0x00, 0x12, 0xb2, 0x38, 0x17, 0x01, 0x5d, 0x00, 0xb2, 0x3f, 0x17, 0x01, 0x5d, 0xb2, 0x3f, 0x1d, // ...8..]..?..].?. + 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x71, 0xfe, 0x4b, 0x09, 0x5c, 0x05, 0xc5, 0x00, 0x26, // .]01...q.K.....& + 0x00, 0x32, 0x00, 0x00, 0x00, 0x07, 0x00, 0x5c, 0x05, 0x74, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // .2.......t.....a + 0xfe, 0x4b, 0x08, 0x74, 0x04, 0x4e, 0x00, 0x26, 0x00, 0x52, 0x00, 0x00, 0x00, 0x07, 0x00, 0x5c, // .K.t.N.&.R...... + 0x04, 0x8c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x71, 0xff, 0x73, 0x05, 0x02, 0x06, 0x35, 0x00, 0x17, // .......q.s...5.. + 0x00, 0x2f, 0x00, 0x73, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, // ./.s...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x0c, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x13, 0x10, 0xb1, 0x1c, 0x03, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x10, 0x10, 0xb1, 0x1f, 0x03, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x28, 0x03, 0xb0, 0x0a, 0x2b, // +X!...Y....(...+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x2b, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y....+...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x10, 0x07, 0x06, 0x07, 0x15, 0x23, 0x35, 0x26, // !...Y01......#5& + 0x27, 0x26, 0x11, 0x11, 0x10, 0x37, 0x36, 0x37, 0x35, 0x33, 0x15, 0x16, 0x17, 0x16, 0x11, 0x27, // '&...76753.....' + 0x34, 0x27, 0x26, 0x27, 0x15, 0x23, 0x35, 0x06, 0x07, 0x06, 0x15, 0x11, 0x14, 0x17, 0x16, 0x17, // 4'&'.#5......... + 0x35, 0x33, 0x15, 0x36, 0x37, 0x36, 0x35, 0x05, 0x02, 0xa6, 0x81, 0xbe, 0xc5, 0xc4, 0x84, 0x9f, // 53.6765......... + 0x9f, 0x84, 0xc4, 0xc5, 0xbe, 0x81, 0xa6, 0xc5, 0x6c, 0x49, 0x6b, 0xc5, 0x71, 0x4b, 0x66, 0x66, // ........lIk.qKff + 0x4b, 0x71, 0xc5, 0x6b, 0x49, 0x6c, 0x02, 0x56, 0xfe, 0xf5, 0xb0, 0x8a, 0x1d, 0x81, 0x7e, 0x19, // Kq.kIl.V......~. + 0x91, 0xb0, 0x01, 0x0b, 0x01, 0x03, 0x01, 0x0a, 0xb1, 0x92, 0x19, 0x76, 0x79, 0x1e, 0x8a, 0xb0, // ...........vy... + 0xfe, 0xf5, 0x02, 0xc8, 0x80, 0x56, 0x1c, 0x65, 0x6a, 0x19, 0x5e, 0x80, 0xc8, 0xfe, 0xfb, 0xca, // .....V.ej.^..... + 0x80, 0x5e, 0x19, 0x6c, 0x68, 0x1c, 0x56, 0x80, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x61, // .^.lh.V........a + 0xff, 0x8a, 0x04, 0x2a, 0x04, 0xb6, 0x00, 0x17, 0x00, 0x2f, 0x00, 0x73, 0x00, 0xb0, 0x00, 0x45, // ...*...../.s...E + 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x1c, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x17, 0x10, 0xb1, 0x1f, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x0e, 0x10, 0xb1, 0x28, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, // ...(...+X!...Y.. + 0x10, 0xb1, 0x2b, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, // ..+...+X!...Y01. + 0x23, 0x35, 0x26, 0x27, 0x26, 0x35, 0x35, 0x34, 0x37, 0x36, 0x37, 0x35, 0x33, 0x15, 0x16, 0x17, // #5&'&55476753... + 0x16, 0x15, 0x15, 0x14, 0x07, 0x06, 0x07, 0x01, 0x14, 0x17, 0x16, 0x17, 0x35, 0x33, 0x15, 0x36, // ............53.6 + 0x37, 0x36, 0x35, 0x35, 0x34, 0x27, 0x26, 0x27, 0x15, 0x23, 0x35, 0x06, 0x07, 0x06, 0x15, 0x02, // 76554'&'.#5..... + 0xa9, 0xc5, 0x9c, 0x65, 0x82, 0x82, 0x64, 0x9d, 0xc5, 0x9b, 0x63, 0x83, 0x82, 0x64, 0x9b, 0xfe, // ...e..d...c..d.. + 0x7d, 0x48, 0x2d, 0x49, 0xc5, 0x46, 0x2d, 0x49, 0x4a, 0x2c, 0x46, 0xc5, 0x48, 0x2e, 0x48, 0x76, // }H-I.F-IJ,F.H.Hv + 0x69, 0x1b, 0x77, 0x9b, 0xf1, 0x16, 0xf0, 0x9b, 0x79, 0x1b, 0x70, 0x71, 0x1c, 0x76, 0x9b, 0xf1, // i.w.....y.pq.v.. + 0x16, 0xf2, 0x9a, 0x76, 0x1b, 0x02, 0x1d, 0xac, 0x70, 0x46, 0x1b, 0x67, 0x66, 0x1b, 0x45, 0x70, // ...v....pF.gf.Ep + 0xac, 0x16, 0xaa, 0x71, 0x44, 0x1b, 0x5d, 0x5f, 0x1b, 0x46, 0x71, 0xaa, 0x00, 0x03, 0x00, 0x9d, // ...qD.]_.Fq..... + 0xff, 0xeb, 0x06, 0x64, 0x07, 0x58, 0x00, 0x2e, 0x00, 0x40, 0x00, 0x46, 0x00, 0xa2, 0x00, 0xb0, // ...d.X...@.F.... + 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0xd0, 0xb2, 0x0b, 0x0e, 0x01, // ../....>Y....... + 0x11, 0x12, 0x39, 0xb0, 0x01, 0x10, 0xb0, 0x15, 0xd0, 0xb0, 0x01, 0x10, 0xb1, 0x2e, 0x02, 0xb0, // ..9............. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x17, 0xd0, 0xb0, 0x0e, 0x10, 0xb1, 0x1e, // .+X!...Y........ + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x23, 0x01, 0x0e, 0x11, 0x12, // ...+X!...Y.#.... + 0x39, 0xb0, 0x23, 0x2f, 0xb0, 0x1e, 0x10, 0xb0, 0x27, 0xd0, 0xb2, 0x41, 0x17, 0x01, 0x11, 0x12, // 9.#/....'..A.... + 0x39, 0xb0, 0x41, 0x2f, 0xb0, 0x44, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x31, // 9.A/.D..+X...Y.1 + 0xd0, 0xb0, 0x31, 0x2f, 0xb0, 0x34, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x31, // ..1/.4..+X...Y.1 + 0x10, 0xb0, 0x38, 0xd0, 0xb0, 0x34, 0x10, 0xb0, 0x3d, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, // ..8..4..=..+X... + 0x59, 0xb0, 0x31, 0x10, 0xb0, 0x40, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, // Y.1..@..+X...Y01 + 0x01, 0x37, 0x36, 0x16, 0x15, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, // .76.....#"&'..#" + 0x26, 0x35, 0x11, 0x34, 0x36, 0x17, 0x17, 0x15, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, // &5.46...".....32 + 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x13, // 65.3...3265.4&#. + 0x15, 0x23, 0x22, 0x24, 0x23, 0x22, 0x06, 0x15, 0x15, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x04, // .#"$#"...#54632. + 0x33, 0x01, 0x27, 0x37, 0x27, 0x33, 0x15, 0x04, 0xd4, 0x06, 0xae, 0xdc, 0xdd, 0xb3, 0x72, 0xb0, // 3.'7'3........r. + 0x32, 0x33, 0xb0, 0x70, 0xb4, 0xdc, 0xdb, 0xaf, 0x06, 0x5c, 0x6f, 0x6f, 0x5c, 0x6c, 0x84, 0xc6, // 23.p......oo.l.. + 0x84, 0x6d, 0x5a, 0x71, 0x71, 0x5a, 0x66, 0x2e, 0x83, 0xfe, 0xd5, 0x2a, 0x32, 0x3a, 0x86, 0x7c, // .mZqqZf....*2:.| + 0x72, 0x48, 0x01, 0x24, 0x72, 0xfe, 0x47, 0x50, 0x3a, 0x01, 0xbc, 0x05, 0xa7, 0x02, 0x04, 0xe6, // rH.$r.GP:....... + 0xda, 0xfd, 0xc0, 0xdb, 0xe7, 0x55, 0x55, 0x55, 0x55, 0xe7, 0xdb, 0x02, 0x40, 0xda, 0xe6, 0x04, // .....UUUU...@... + 0x02, 0x92, 0x98, 0x90, 0xfd, 0xc0, 0x91, 0x97, 0x83, 0x7f, 0x01, 0xb0, 0xfe, 0x50, 0x7f, 0x83, // .............P.. + 0x97, 0x91, 0x02, 0x40, 0x90, 0x98, 0x01, 0xc7, 0x81, 0x7b, 0x36, 0x34, 0x12, 0x24, 0x6c, 0x6e, // ...@.....{64.$ln + 0x7c, 0xfe, 0x4a, 0x42, 0x73, 0x8c, 0x7b, 0x00, 0x00, 0x03, 0x00, 0x7b, 0xff, 0xeb, 0x05, 0xa2, // |.JBs.{....{.... + 0x05, 0xf1, 0x00, 0x2e, 0x00, 0x40, 0x00, 0x46, 0x00, 0xa2, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....@.F.....EX. + 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0xd0, 0xb2, 0x0b, 0x0e, 0x01, 0x11, 0x12, 0x39, 0xb0, // ...>Y.........9. + 0x01, 0x10, 0xb0, 0x15, 0xd0, 0xb0, 0x01, 0x10, 0xb1, 0x2e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // .............+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x17, 0xd0, 0xb0, 0x0e, 0x10, 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, // ...Y...........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x23, 0x01, 0x0e, 0x11, 0x12, 0x39, 0xb0, 0x23, 0x2f, // X!...Y.#....9.#/ + 0xb0, 0x1e, 0x10, 0xb0, 0x27, 0xd0, 0xb2, 0x41, 0x17, 0x01, 0x11, 0x12, 0x39, 0xb0, 0x41, 0x2f, // ....'..A....9.A/ + 0xb0, 0x44, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x30, 0xd0, 0xb0, 0x30, 0x2f, // .D..+X...Y.0..0/ + 0xb0, 0x2f, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x30, 0x10, 0xb0, 0x34, 0xb0, // ./..+X...Y.0..4. + 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x30, 0x10, 0xb0, 0x38, 0xd0, 0xb0, 0x34, 0x10, // .+X...Y.0..8..4. + 0xb0, 0x3d, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x37, 0x36, 0x16, // .=..+X...Y01.76. + 0x15, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, // ....#"&'..#"&5.4 + 0x36, 0x17, 0x17, 0x15, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x33, // 6...".....326553 + 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x13, 0x15, 0x23, 0x22, 0x24, // ...3265.4&#..#"$ + 0x23, 0x22, 0x06, 0x15, 0x15, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x04, 0x33, 0x01, 0x27, 0x37, // #"...#54632.3.'7 + 0x27, 0x17, 0x15, 0x04, 0x3a, 0x06, 0x9d, 0xc5, 0xc6, 0xa2, 0x63, 0x9b, 0x2e, 0x2f, 0x9a, 0x62, // '...:.....c../.b + 0xa3, 0xc5, 0xc4, 0x9e, 0x06, 0x4b, 0x58, 0x58, 0x4b, 0x59, 0x70, 0xc5, 0x6f, 0x5a, 0x4a, 0x59, // .....KXXKYp.oZJY + 0x59, 0x4a, 0xae, 0x2e, 0x83, 0xfe, 0xd5, 0x2a, 0x32, 0x3a, 0x86, 0x7c, 0x72, 0x48, 0x01, 0x24, // YJ.....*2:.|rH.$ + 0x72, 0xfe, 0x49, 0x4f, 0x37, 0x01, 0xb9, 0x04, 0x3b, 0x03, 0x04, 0xd2, 0xc7, 0xfe, 0xdd, 0xc9, // r.IO7...;....... + 0xd2, 0x48, 0x48, 0x48, 0x48, 0xd2, 0xc9, 0x01, 0x23, 0xc7, 0xd2, 0x04, 0x03, 0x92, 0x83, 0x7d, // .HHHH...#......} + 0xfe, 0xdd, 0x7f, 0x82, 0x70, 0x6b, 0xea, 0xea, 0x6b, 0x70, 0x82, 0x7f, 0x01, 0x23, 0x7d, 0x83, // ....pk..kp...#}. + 0x01, 0xcc, 0x81, 0x7b, 0x36, 0x34, 0x12, 0x24, 0x6c, 0x6e, 0x7c, 0xfe, 0x51, 0x48, 0x6d, 0x7e, // ...{64.$ln|.QHm~ + 0x06, 0x75, 0x00, 0x00, 0x00, 0x02, 0x00, 0x9d, 0xff, 0xeb, 0x06, 0x69, 0x07, 0x05, 0x00, 0x07, // .u.........i.... + 0x00, 0x28, 0x00, 0x6c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x0c, // .(.l...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x17, 0x10, 0xb0, 0x06, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x07, 0xb0, 0x0a, // ......+X...Y.... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // +X...Y....+X...Y + 0xb0, 0x07, 0x10, 0xb0, 0x04, 0xd0, 0xb0, 0x17, 0x10, 0xb0, 0x1f, 0xd0, 0xb0, 0x28, 0xd0, 0xb0, // .............(.. + 0x12, 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x24, // .......+X!...Y.$ + 0xd0, 0xb2, 0x0f, 0x12, 0x1f, 0x11, 0x12, 0x39, 0xb0, 0x12, 0x10, 0xb0, 0x0c, 0xd0, 0x30, 0x31, // .......9......01 + 0x01, 0x35, 0x21, 0x17, 0x21, 0x15, 0x23, 0x35, 0x05, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, // .5!.!.#5....#"&' + 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, // ..#"&5.3...3265. + 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x01, 0xd5, 0x03, 0x35, 0x01, 0xfe, 0xb5, // 3...3265....5... + 0xb2, 0x03, 0x5b, 0xe7, 0xbb, 0x6d, 0xaa, 0x2f, 0x33, 0xb0, 0x71, 0xb4, 0xdc, 0xc5, 0x6f, 0x5c, // ..[..m./3.q...o. + 0x6c, 0x84, 0xcc, 0x7a, 0x64, 0x63, 0x7a, 0x06, 0x98, 0x6d, 0x6d, 0x7e, 0x7e, 0xe8, 0xfb, 0xd7, // l..zdcz..mm~~... + 0xc9, 0xd3, 0x57, 0x56, 0x56, 0x57, 0xd3, 0xc9, 0x04, 0x29, 0xfb, 0xd7, 0x7f, 0x83, 0x83, 0x7f, // ..WVVW...)...... + 0x04, 0x29, 0xfb, 0xd7, 0x7e, 0x84, 0x84, 0x7e, 0x04, 0x29, 0x00, 0x00, 0x00, 0x02, 0x00, 0x7c, // .)..~..~.).....| + 0xff, 0xeb, 0x05, 0xa4, 0x05, 0xb1, 0x00, 0x07, 0x00, 0x28, 0x00, 0x6f, 0x00, 0xb0, 0x00, 0x45, // .........(.o...E + 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, 0x17, 0x10, 0xb0, 0x06, 0xb0, 0x0a, 0x2b, 0x58, // /....>Y.......+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x07, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x01, // ...Y....+X...Y.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x07, 0x10, 0xb0, 0x04, 0xd0, 0xb0, 0x12, // ..+X...Y........ + 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x17, 0x10, 0xb0, 0x1f, 0xd0, 0xb2, 0x0f, 0x12, 0x1f, 0x11, 0x12, // ................ + 0x39, 0xb0, 0x12, 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // 9........+X!...Y + 0xb0, 0x24, 0xd0, 0xb0, 0x1f, 0x10, 0xb0, 0x28, 0xd0, 0x30, 0x31, 0x01, 0x35, 0x21, 0x17, 0x21, // .$.....(.01.5!.! + 0x15, 0x23, 0x35, 0x01, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, // .#5....#"&'..#"& + 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, // 5.3...3265.3...3 + 0x32, 0x36, 0x35, 0x11, 0x01, 0x7c, 0x03, 0x35, 0x03, 0xfe, 0xb3, 0xb2, 0x02, 0xef, 0xd2, 0xa9, // 265..|.5........ + 0x5d, 0x92, 0x2c, 0x2f, 0x9a, 0x61, 0xa3, 0xc5, 0xc5, 0x58, 0x4b, 0x59, 0x70, 0xc6, 0x63, 0x53, // ].,/.a...XKYp.cS + 0x51, 0x65, 0x05, 0x44, 0x6d, 0x6d, 0x80, 0x80, 0xfe, 0xf6, 0xfd, 0x26, 0xb6, 0xbf, 0x47, 0x47, // Qe.Dmm.....&..GG + 0x47, 0x47, 0xbe, 0xb7, 0x02, 0xda, 0xfd, 0x26, 0x6c, 0x6f, 0x70, 0x6b, 0x02, 0xda, 0xfd, 0x26, // GG.....&lopk...& + 0x6c, 0x6f, 0x70, 0x6b, 0x02, 0xda, 0x00, 0x00, 0x00, 0x01, 0x00, 0x76, 0xfe, 0x81, 0x04, 0xbf, // lopk.......v.... + 0x05, 0xc5, 0x00, 0x19, 0x00, 0x3e, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, // .....>.../..EX.. + 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ..>Y........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x26, 0x00, 0x35, 0x11, 0x10, 0x00, 0x33, 0x32, 0x00, // .Y01.#.&.5...32. + 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x02, 0x15, 0x11, 0x14, 0x12, 0x33, 0x33, 0x03, 0x17, // ..#4&#".....33.. + 0xc4, 0xd7, 0xfe, 0xfa, 0x01, 0x37, 0xf7, 0xf7, 0x01, 0x24, 0x04, 0x02, 0xbd, 0xb4, 0xa4, 0xa5, // .....7...$...... + 0xc4, 0xc4, 0xa5, 0x73, 0xfe, 0x81, 0x01, 0x70, 0x1d, 0x01, 0x52, 0xf6, 0x01, 0x03, 0x01, 0x0d, // ...s...p..R..... + 0x01, 0x5f, 0xfe, 0xf9, 0xd9, 0x06, 0x99, 0xb2, 0xfe, 0xf6, 0xc5, 0xfe, 0xfb, 0xc7, 0xfe, 0xf6, // ._.............. + 0x00, 0x01, 0x00, 0x62, 0xfe, 0x81, 0x03, 0xe1, 0x04, 0x4e, 0x00, 0x19, 0x00, 0x3e, 0x00, 0xb0, // ...b.....N...>.. + 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x09, 0x10, 0xb1, // .EX../....>Y.... + 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x19, // ....+X!...Y..... + 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x11, 0x26, // ...+X!...Y01.#.& + 0x02, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, // .554.32...#4&#". + 0x15, 0x15, 0x14, 0x16, 0x33, 0x33, 0x02, 0xa7, 0xc5, 0xb5, 0xcb, 0xff, 0xdc, 0xb6, 0xee, 0x04, // ....33.......... + 0x02, 0xb2, 0x89, 0x63, 0x8a, 0x8c, 0x8b, 0x8b, 0x6a, 0xfe, 0x81, 0x01, 0x72, 0x20, 0x01, 0x2a, // ...c....j...r .* + 0xcb, 0x2a, 0xe3, 0x01, 0x39, 0xe0, 0xa3, 0x06, 0x62, 0x8c, 0xe6, 0x9b, 0x2a, 0x9f, 0xe4, 0x00, // .*..9...b...*... + 0x00, 0x01, 0x00, 0x70, 0x00, 0x00, 0x04, 0x94, 0x05, 0x3e, 0x00, 0x13, 0x00, 0x13, 0x00, 0xb0, // ...p.....>...... + 0x0e, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0x30, // ./..EX../....>Y0 + 0x31, 0x01, 0x05, 0x07, 0x25, 0x03, 0x23, 0x13, 0x25, 0x37, 0x05, 0x13, 0x25, 0x37, 0x05, 0x13, // 1...%.#.%7..%7.. + 0x33, 0x03, 0x05, 0x07, 0x25, 0x02, 0x5c, 0x01, 0x21, 0x47, 0xfe, 0xdd, 0xb5, 0xae, 0xe1, 0xfe, // 3...%...!G...... + 0xdf, 0x47, 0x01, 0x25, 0xca, 0xfe, 0xde, 0x49, 0x01, 0x23, 0xb9, 0xab, 0xe5, 0x01, 0x25, 0x4b, // .G.%...I.#....%K + 0xfe, 0xe0, 0x01, 0xbf, 0xac, 0x7d, 0xaa, 0xfe, 0xc0, 0x01, 0x8e, 0xab, 0x7c, 0xab, 0x01, 0x6c, // .....}......|..l + 0xab, 0x7e, 0xab, 0x01, 0x4a, 0xfe, 0x69, 0xab, 0x7c, 0xaa, 0x00, 0x00, 0x00, 0x01, 0x00, 0xd4, // .~..J.i.|....... + 0x04, 0xa4, 0x03, 0xa3, 0x05, 0xfc, 0x00, 0x07, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x03, // ............./.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x15, 0x27, 0x37, 0x21, 0x27, // ..+X...Y01..'7!' + 0x17, 0x15, 0x01, 0x83, 0xaf, 0x01, 0x02, 0x20, 0x01, 0xaf, 0x05, 0x22, 0x7e, 0x01, 0xeb, 0x6c, // ....... ..."~..l + 0x01, 0xd9, 0x00, 0x00, 0x00, 0x01, 0x00, 0xfb, 0x05, 0x17, 0x03, 0xf3, 0x06, 0x15, 0x00, 0x11, // ................ + 0x00, 0x27, 0x00, 0xb0, 0x10, 0x2f, 0xb0, 0x0c, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // .'.../....+X...Y + 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x10, 0x10, 0xb0, 0x11, 0xb0, // ....+X...Y...... + 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x32, 0x24, 0x33, 0x32, 0x16, 0x15, // .+X...Y01.2$32.. + 0x15, 0x23, 0x35, 0x34, 0x26, 0x23, 0x22, 0x04, 0x23, 0x23, 0x35, 0x01, 0x27, 0x71, 0x01, 0x24, // .#54&#".##5.'q.$ + 0x49, 0x71, 0x7d, 0x86, 0x3b, 0x31, 0x2b, 0xfe, 0xd5, 0x82, 0x2e, 0x05, 0x99, 0x7c, 0x6e, 0x6c, // Iq}.;1+......|nl + 0x24, 0x12, 0x34, 0x36, 0x7c, 0x82, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x05, 0x15, 0x01, 0xf5, // $.46|........... + 0x06, 0x57, 0x00, 0x05, 0x00, 0x10, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x01, 0xb0, 0x0a, 0x2b, 0x58, // .W......./....+X + 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x35, 0x33, 0x07, 0x17, 0x07, 0x01, 0x00, 0xbb, 0x01, // ...Y01.53....... + 0x3b, 0x51, 0x05, 0xdc, 0x7b, 0x8c, 0x74, 0x42, 0x00, 0x01, 0x01, 0x2c, 0x05, 0x15, 0x02, 0x21, // ;Q..{.tB...,...! + 0x06, 0x57, 0x00, 0x05, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // .W......./....+X + 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x27, 0x37, 0x27, 0x33, 0x15, 0x01, 0x7c, 0x50, 0x3a, // ...Y01.'7'3..|P: + 0x01, 0xbc, 0x05, 0x15, 0x42, 0x74, 0x8c, 0x7b, 0x00, 0x08, 0x00, 0x3b, 0xfe, 0xc4, 0x07, 0xd4, // ....Bt.{...;.... + 0x05, 0xaf, 0x00, 0x0f, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3f, 0x00, 0x4f, 0x00, 0x5f, 0x00, 0x6f, // ......./.?.O._.o + 0x00, 0x7f, 0x00, 0x9a, 0x00, 0xb0, 0x64, 0x2f, 0xb0, 0x74, 0x2f, 0xb0, 0x44, 0x2f, 0xb0, 0x54, // ......d/.t/.D/.T + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb1, 0x0c, // /..EX../....>Y.. + 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x54, 0x10, 0xb0, 0x14, 0xd0, // ...+X!...Y.T.... + 0xb1, 0x1c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x64, 0x10, 0xb0, // .....+X!...Y.d.. + 0x24, 0xd0, 0xb1, 0x2c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x74, // $..,...+X!...Y.t + 0x10, 0xb0, 0x34, 0xd0, 0xb1, 0x3c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // ..4..<...+X!...Y + 0xb0, 0x44, 0x10, 0xb1, 0x4c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // .D..L...+X!...Y. + 0x54, 0x10, 0xb1, 0x5c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x64, // T......+X!...Y.d + 0x10, 0xb1, 0x6c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x74, 0x10, // ..l...+X!...Y.t. + 0xb1, 0x7c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x27, // .|...+X!...Y01.' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x13, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x13, 0x27, // &632...#4&#"...' + 0x26, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x03, 0x2f, // &632...#4&#".../ + 0x02, 0x05, 0x70, 0x61, 0x60, 0x71, 0x04, 0x02, 0x68, 0x31, 0x32, 0x32, 0x2f, 0x01, 0xe6, 0x02, // ..pa`q..h122/... + 0x05, 0x71, 0x60, 0x60, 0x72, 0x04, 0x02, 0x69, 0x30, 0x33, 0x32, 0x2e, 0x51, 0x02, 0x05, 0x71, // .q``r..i032.Q..q + 0x60, 0x60, 0x71, 0x04, 0x02, 0x68, 0x30, 0x33, 0x32, 0x2f, 0xfe, 0xd2, 0x02, 0x05, 0x71, 0x60, // ``q..h032/....q` + 0x60, 0x71, 0x04, 0x02, 0x68, 0x30, 0x33, 0x32, 0x2f, 0xfd, 0x57, 0x02, 0x05, 0x70, 0x61, 0x60, // `q..h032/.W..pa` + 0x71, 0x04, 0x02, 0x68, 0x31, 0x32, 0x32, 0x2f, 0xfd, 0x55, 0x02, 0x05, 0x71, 0x61, 0x60, 0x71, // q..h122/.U..qa`q + 0x04, 0x02, 0x68, 0x31, 0x32, 0x32, 0x2f, 0xfe, 0xe6, 0x02, 0x05, 0x71, 0x60, 0x60, 0x71, 0x04, // ..h122/....q``q. + 0x02, 0x68, 0x30, 0x33, 0x32, 0x2f, 0x3d, 0x02, 0x05, 0x71, 0x60, 0x60, 0x72, 0x04, 0x02, 0x69, // .h032/=..q``r..i + 0x30, 0x33, 0x32, 0x2e, 0x04, 0xf3, 0x06, 0x4f, 0x67, 0x67, 0x4f, 0x06, 0x2b, 0x3a, 0x3a, 0x2b, // 032....OggO.+::+ + 0xfe, 0xeb, 0x06, 0x4e, 0x68, 0x67, 0x4f, 0x06, 0x2c, 0x39, 0x3a, 0x2b, 0xfe, 0x09, 0x06, 0x4e, // ...NhgO.,9:+...N + 0x68, 0x67, 0x4f, 0x06, 0x2c, 0x39, 0x3a, 0x2b, 0xfd, 0xf9, 0x06, 0x4e, 0x68, 0x67, 0x4f, 0x06, // hgO.,9:+...NhgO. + 0x2c, 0x39, 0x3a, 0x2b, 0xfe, 0xe4, 0x06, 0x50, 0x66, 0x66, 0x50, 0x06, 0x2c, 0x39, 0x39, 0x2c, // ,9:+...PffP.,99, + 0x05, 0x1a, 0x06, 0x4f, 0x67, 0x67, 0x4f, 0x06, 0x2b, 0x3a, 0x3a, 0x2b, 0xfe, 0x09, 0x06, 0x4e, // ...OggO.+::+...N + 0x68, 0x67, 0x4f, 0x06, 0x2c, 0x39, 0x3a, 0x2b, 0xfd, 0xf9, 0x06, 0x4e, 0x68, 0x67, 0x4f, 0x06, // hgO.,9:+...NhgO. + 0x2c, 0x39, 0x3a, 0x2b, 0x00, 0x08, 0x00, 0x4d, 0xfe, 0x63, 0x07, 0x8d, 0x05, 0xc6, 0x00, 0x04, // ,9:+...M.c...... + 0x00, 0x09, 0x00, 0x0e, 0x00, 0x13, 0x00, 0x19, 0x00, 0x1e, 0x00, 0x23, 0x00, 0x28, 0x00, 0x25, // ...........#.(.% + 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x22, 0x2f, 0xb0, 0x16, 0x2f, 0xb0, 0x12, 0x2f, 0xb0, 0x0b, 0x2f, // .../."/../../../ + 0xb0, 0x1c, 0x2f, 0xb0, 0x27, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, // ../.'/..EX../... + 0x0c, 0x3e, 0x59, 0x30, 0x31, 0x05, 0x17, 0x03, 0x23, 0x13, 0x03, 0x27, 0x13, 0x33, 0x03, 0x01, // .>Y01...#..'.3.. + 0x37, 0x05, 0x15, 0x25, 0x05, 0x07, 0x25, 0x35, 0x05, 0x01, 0x37, 0x25, 0x17, 0x06, 0x05, 0x01, // 7..%..%5..7%.... + 0x07, 0x05, 0x27, 0x25, 0x03, 0x27, 0x03, 0x37, 0x13, 0x01, 0x17, 0x13, 0x07, 0x03, 0x04, 0x50, // ..'%.'.7.......P + 0x0b, 0x7a, 0x60, 0x46, 0x3a, 0x0c, 0x7a, 0x60, 0x46, 0x02, 0x1e, 0x0d, 0x01, 0x4d, 0xfe, 0xa6, // .z`F:.z`F....M.. + 0xfb, 0x74, 0x0d, 0xfe, 0xb3, 0x01, 0x5a, 0x03, 0x9c, 0x02, 0x01, 0x41, 0x44, 0x25, 0xfe, 0xff, // .t....Z....AD%.. + 0xfc, 0xf3, 0x02, 0xfe, 0xc0, 0x45, 0x01, 0x26, 0x2b, 0x11, 0x94, 0x41, 0xc6, 0x03, 0x60, 0x11, // .....E.&+..A..`. + 0x95, 0x42, 0xc5, 0x3c, 0x0e, 0xfe, 0xad, 0x01, 0x61, 0x04, 0xa2, 0x0e, 0x01, 0x52, 0xfe, 0xa0, // .B.<....a....R.. + 0xfe, 0x11, 0x0c, 0x7c, 0x62, 0x47, 0x3b, 0x0c, 0x7c, 0x62, 0x47, 0x01, 0xae, 0x10, 0x99, 0x44, // ...|bG;.|bG....D + 0x17, 0xb1, 0xfc, 0x8e, 0x11, 0x99, 0x45, 0xc8, 0x02, 0xe4, 0x02, 0x01, 0x46, 0x45, 0xfe, 0xd5, // ......E.....FE.. + 0xfc, 0xe3, 0x02, 0xfe, 0xbb, 0x47, 0x01, 0x2b, 0xff, 0xff, 0x00, 0xb4, 0xfe, 0xd8, 0x05, 0xa5, // .....G.+........ + 0x07, 0x4e, 0x02, 0x26, 0x01, 0xc4, 0x00, 0x00, 0x00, 0x27, 0x01, 0x54, 0x01, 0x31, 0x01, 0x9e, // .N.&.....'.T.1.. + 0x01, 0x07, 0x00, 0x0f, 0x04, 0x6a, 0xff, 0xda, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....j.......EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8f, // ./....>Y01...... + 0xfe, 0xd8, 0x04, 0xa0, 0x05, 0xf7, 0x02, 0x26, 0x01, 0xe4, 0x00, 0x00, 0x00, 0x27, 0x01, 0x54, // .......&.....'.T + 0x00, 0x99, 0x00, 0x47, 0x01, 0x07, 0x00, 0x0f, 0x03, 0x65, 0xff, 0xda, 0x00, 0x33, 0x00, 0xb2, // ...G.....e...3.. + 0x8f, 0x10, 0x01, 0x71, 0xb2, 0xcf, 0x10, 0x01, 0x71, 0xb2, 0x1f, 0x10, 0x01, 0x72, 0xb6, 0x3f, // ...q....q....r.? + 0x10, 0x4f, 0x10, 0x5f, 0x10, 0x03, 0x5d, 0xb2, 0xff, 0x10, 0x01, 0x71, 0xb2, 0xaf, 0x10, 0x01, // .O._..]....q.... + 0x71, 0xb6, 0x60, 0x10, 0x70, 0x10, 0x80, 0x10, 0x03, 0x5d, 0xb2, 0x00, 0x10, 0x01, 0x71, 0x30, // q.`.p....]....q0 + 0x31, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcd, 0x00, 0x00, 0x04, 0xbb, 0x05, 0xb0, 0x00, 0x12, // 1............... + 0x00, 0x1b, 0x00, 0x59, 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x12, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...Y.../../..EX. + 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb0, 0x12, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0xd0, 0xb0, 0x12, 0x10, 0xb0, 0x0d, 0xd0, 0xb0, 0x02, 0x10, // ...Y............ + 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, // .....+X!...Y.... + 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x23, 0x15, // ....+X!...Y01.#. + 0x21, 0x32, 0x04, 0x15, 0x14, 0x04, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, // !2....#!.#5353.3 + 0x03, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x02, 0x4e, 0xe6, 0x01, 0x67, 0xe9, 0x01, // ..!2654&#.N..g.. + 0x03, 0xfe, 0xfc, 0xe8, 0xfd, 0xd4, 0xd6, 0xd6, 0xc5, 0xe6, 0xe6, 0x01, 0x67, 0x93, 0x94, 0x93, // ............g... + 0x94, 0x04, 0x4d, 0xdd, 0xef, 0xc5, 0xc6, 0xf6, 0x04, 0x4d, 0x9b, 0xc8, 0xc8, 0xfd, 0xed, 0xfd, // ..M......M...... + 0xc5, 0xa9, 0x7b, 0x77, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdb, 0x00, 0x00, 0x04, 0x00, // ..{w............ + 0x06, 0x72, 0x00, 0x12, 0x00, 0x1b, 0x00, 0x6d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, // .r.....m...EX../ + 0x1b, 0xb1, 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x11, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // .>Y........+X!.. + 0xf4, 0x59, 0xb2, 0x02, 0x0a, 0x11, 0x11, 0x12, 0x39, 0xb0, 0x02, 0x2f, 0xb0, 0x01, 0x10, 0xb0, // .Y......9../.... + 0x0b, 0xd0, 0xb0, 0x11, 0x10, 0xb0, 0x0e, 0xd0, 0xb0, 0x11, 0x10, 0xb0, 0x10, 0xb0, 0x0a, 0x2b, // ...............+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // X...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x21, // ..Y01.!.!2....#! + 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, // .#5353.!..!2654& + 0x23, 0x02, 0x9f, 0xfe, 0xbf, 0x01, 0x0d, 0xc0, 0xd5, 0xd7, 0xbe, 0xfe, 0x2e, 0xbe, 0xbe, 0xc5, // #............... + 0x01, 0x41, 0xfe, 0xbf, 0x01, 0x0d, 0x6a, 0x65, 0x66, 0x69, 0x05, 0x15, 0xfd, 0xd7, 0xcd, 0xa5, // .A....jefi...... + 0xa5, 0xd5, 0x05, 0x15, 0x9b, 0xc2, 0xc2, 0xfc, 0xa2, 0xfe, 0x48, 0x7d, 0x5c, 0x5a, 0x85, 0x00, // ..........H}.Z.. + 0x00, 0x02, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xe6, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x1b, 0x00, 0x57, // ...............W + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb2, 0x0f, 0x01, 0x03, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x0f, 0x2f, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb2, 0x09, 0x00, 0x03, 0x11, 0x12, 0x39, 0xb0, 0x03, 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, // Y......9........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x1b, 0x0f, 0x11, 0x12, 0x39, 0xb2, 0x15, // +X!...Y......9.. + 0x0f, 0x1b, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, 0x04, 0x15, 0x14, // ....901..#.!2... + 0x07, 0x17, 0x07, 0x27, 0x06, 0x23, 0x25, 0x21, 0x32, 0x37, 0x27, 0x37, 0x17, 0x36, 0x35, 0x34, // ...'.#%!27'7.654 + 0x26, 0x23, 0x21, 0x01, 0x79, 0xc5, 0x02, 0x2d, 0xe9, 0x01, 0x02, 0x6d, 0x87, 0x74, 0x93, 0x6a, // &#!.y..-...m.t.j + 0x94, 0xfe, 0x98, 0x01, 0x68, 0x4e, 0x3a, 0x6c, 0x73, 0x6f, 0x28, 0x93, 0x93, 0xfe, 0x98, 0x02, // ....hN:lso(..... + 0x48, 0xfd, 0xb8, 0x05, 0xb0, 0xf0, 0xc4, 0xb7, 0x73, 0x92, 0x68, 0xa0, 0x30, 0x9a, 0x16, 0x76, // H.......s.h.0..v + 0x68, 0x79, 0x43, 0x5a, 0x79, 0xa2, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8f, 0xfe, 0x60, 0x04, 0x2c, // hyCZy........`., + 0x04, 0x4e, 0x00, 0x15, 0x00, 0x27, 0x00, 0x78, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, // .N...'.x...EX../ + 0x1b, 0xb1, 0x0d, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, // ....>Y..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x08, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb2, 0x02, 0x12, // ..EX../....>Y... + 0x07, 0x11, 0x12, 0x39, 0xb2, 0x0a, 0x07, 0x12, 0x11, 0x12, 0x39, 0xb2, 0x0f, 0x12, 0x07, 0x11, // ...9......9..... + 0x12, 0x39, 0xb0, 0x12, 0x10, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9........+X!... + 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x20, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y.... ...+X!...Y + 0xb2, 0x24, 0x19, 0x20, 0x11, 0x12, 0x39, 0xb2, 0x25, 0x20, 0x19, 0x11, 0x12, 0x39, 0x30, 0x31, // .$. ..9.% ...901 + 0x01, 0x14, 0x07, 0x17, 0x07, 0x27, 0x06, 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, // .....'.#"&'.#.3. + 0x36, 0x36, 0x33, 0x32, 0x12, 0x11, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, // 6632..#4&#"..... + 0x33, 0x32, 0x37, 0x27, 0x37, 0x17, 0x36, 0x35, 0x04, 0x29, 0x67, 0x6a, 0x74, 0x69, 0x57, 0x74, // 327'7.65.)gjtiWt + 0x64, 0x97, 0x35, 0xc5, 0xa9, 0x12, 0x35, 0x9c, 0x66, 0xc9, 0xdf, 0xc5, 0x91, 0x8d, 0x55, 0x78, // d.5...5.f.....Ux + 0x25, 0x25, 0x78, 0x57, 0x51, 0x3a, 0x6c, 0x74, 0x5f, 0x2a, 0x01, 0xf4, 0xe0, 0x8d, 0x75, 0x69, // %%xWQ:lt_*....ui + 0x74, 0x32, 0x43, 0x43, 0xfd, 0xef, 0x05, 0xda, 0x85, 0x4a, 0x4f, 0xfe, 0xc1, 0xfe, 0xfa, 0xb8, // t2CC.....JO..... + 0xed, 0x4d, 0x43, 0xfd, 0xf5, 0x43, 0x4b, 0x22, 0x78, 0x69, 0x6a, 0x5a, 0x7c, 0x00, 0x00, 0x00, // .MC..CK"xijZ|... + 0x00, 0x01, 0x00, 0xa3, 0x00, 0x00, 0x04, 0x24, 0x06, 0xfe, 0x00, 0x07, 0x00, 0x2f, 0x00, 0xb0, // .......$...../.. + 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb1, // .EX../....>Y.... + 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, // ....+X!...Y01.!. + 0x23, 0x11, 0x21, 0x11, 0x33, 0x04, 0x24, 0xfd, 0x44, 0xc5, 0x02, 0xbc, 0xc5, 0x05, 0x15, 0xfa, // #.!.3.$.D....... + 0xeb, 0x05, 0xb0, 0x01, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x03, 0x44, // ....N..........D + 0x05, 0x75, 0x00, 0x07, 0x00, 0x2f, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, // .u.../.../..EX.. + 0x2f, 0x1b, 0xb1, 0x04, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ..>Y........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x03, 0x44, 0xfe, // ..Y01.!.#.!.3.D. + 0x10, 0xc5, 0x01, 0xf0, 0xc5, 0x03, 0x9e, 0xfc, 0x62, 0x04, 0x3a, 0x01, 0x3b, 0x00, 0x00, 0x00, // ........b.:.;... + 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x04, 0x31, 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x47, 0x00, 0xb0, // .......1.....G.. + 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x0d, 0x10, 0xb1, // .EX../....>Y.... + 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x0d, // ....+X!...Y..... + 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x08, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ............+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x15, // ..Y01.!.#.#53.!. + 0x21, 0x11, 0x21, 0x02, 0x7d, 0xfe, 0xfc, 0xc5, 0xb8, 0xb8, 0x03, 0x7d, 0xfd, 0x48, 0x01, 0x04, // !.!.}......}.H.. + 0x02, 0xa9, 0xfd, 0x57, 0x02, 0xa9, 0x9b, 0x02, 0x6c, 0x9b, 0xfe, 0x2f, 0x00, 0x01, 0xff, 0xf3, // ...W....l../.... + 0x00, 0x00, 0x03, 0x3f, 0x04, 0x3a, 0x00, 0x0d, 0x00, 0x51, 0x00, 0xb0, 0x0d, 0x2f, 0xb0, 0x00, // ...?.:...Q.../.. + 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb2, 0x5f, 0x0d, 0x01, 0x5d, 0xb2, 0x2f, 0x0d, // ./....>Y._..]./. + 0x01, 0x5d, 0xb0, 0x0d, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .]........+X!... + 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x0d, 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x08, 0x10, 0xb1, 0x0a, 0x02, // Y............... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, // ..+X!...Y01.!.#. + 0x23, 0x35, 0x33, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x02, 0x74, 0xfe, 0xe0, 0xc5, 0x9c, 0x9c, // #53.!.!.!.t..... + 0x02, 0xb0, 0xfe, 0x15, 0x01, 0x20, 0x01, 0xdc, 0xfe, 0x24, 0x01, 0xdc, 0x9b, 0x01, 0xc3, 0x9c, // ..... ...$...... + 0xfe, 0xd9, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, 0xfe, 0xe0, 0x04, 0x85, 0x05, 0xb0, 0x00, 0x16, // ................ + 0x00, 0x57, 0x00, 0xb0, 0x0a, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, // .W.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x16, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, // ........+X!...Y. + 0x02, 0x13, 0x16, 0x11, 0x12, 0x39, 0xb0, 0x02, 0x2f, 0xb0, 0x0a, 0x10, 0xb1, 0x0b, 0x05, 0xb0, // .....9../....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x12, 0x03, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x33, 0x20, 0x00, 0x11, // +X!...Y01.!.3 .. + 0x10, 0x02, 0x2f, 0x02, 0x32, 0x36, 0x35, 0x26, 0x26, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x04, // ../.265&&##.#.!. + 0x31, 0xfd, 0x48, 0xb4, 0x01, 0x1c, 0x01, 0x3c, 0xf3, 0xe3, 0x06, 0x02, 0x97, 0x82, 0x02, 0xc8, // 1.H....<........ + 0xc9, 0xb4, 0xc5, 0x03, 0x7d, 0x05, 0x15, 0xfe, 0x2c, 0xfe, 0xcd, 0xfe, 0xf1, 0xfe, 0xf9, 0xfe, // ....}...,....... + 0xe8, 0x04, 0x02, 0x8e, 0xcc, 0xbf, 0xca, 0xd3, 0xfd, 0x64, 0x05, 0xb0, 0x00, 0x01, 0x00, 0x8f, // .........d...... + 0xfe, 0xe4, 0x03, 0xc2, 0x04, 0x3a, 0x00, 0x15, 0x00, 0x45, 0x00, 0xb0, 0x09, 0x2f, 0xb0, 0x00, // .....:...E.../.. + 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb0, 0x15, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, // ./....>Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x02, 0x12, 0x15, 0x11, 0x12, 0x39, 0xb0, 0x02, // +X!...Y......9.. + 0x2f, 0xb1, 0x11, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // /.....+X!...Y01. + 0x21, 0x11, 0x33, 0x32, 0x00, 0x15, 0x06, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, 0x26, 0x26, 0x23, // !.32.....'665&&# + 0x23, 0x11, 0x23, 0x11, 0x21, 0x03, 0x3f, 0xfe, 0x15, 0x6f, 0xe2, 0x01, 0x1d, 0x02, 0xc2, 0xbe, // #.#.!.?..o...... + 0x34, 0x81, 0x70, 0x02, 0xab, 0x8d, 0x6f, 0xc5, 0x02, 0xb0, 0x03, 0x9e, 0xfe, 0xe9, 0xfe, 0xff, // 4.p...o......... + 0xdc, 0x8a, 0xfe, 0xe7, 0x23, 0x95, 0x22, 0x9d, 0x72, 0x93, 0xa5, 0xfe, 0x1e, 0x04, 0x3a, 0x00, // ....#.".r.....:. + 0xff, 0xff, 0x00, 0x1c, 0xfe, 0x99, 0x07, 0x79, 0x05, 0xb0, 0x02, 0x26, 0x01, 0xc2, 0x00, 0x00, // .......y...&.... + 0x00, 0x07, 0x03, 0x99, 0x06, 0x54, 0x00, 0x00, 0xff, 0xff, 0x00, 0x15, 0xfe, 0x99, 0x06, 0x28, // .....T.........( + 0x04, 0x3a, 0x02, 0x26, 0x01, 0xe2, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x05, 0x03, 0x00, 0x00, // .:.&............ + 0xff, 0xff, 0x00, 0x78, 0xfe, 0x52, 0x04, 0xdf, 0x05, 0xc5, 0x00, 0x26, 0x01, 0xc3, 0x00, 0x00, // ...x.R.....&.... + 0x00, 0x07, 0x03, 0x99, 0x01, 0x9b, 0xff, 0xb9, 0xff, 0xff, 0x00, 0x58, 0xfe, 0x53, 0x03, 0xae, // ...........X.S.. + 0x04, 0x4c, 0x02, 0x26, 0x01, 0xe3, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x01, 0x45, 0xff, 0xba, // .L.&.........E.. + 0xff, 0xff, 0x00, 0xb4, 0xfe, 0x99, 0x05, 0x66, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2e, 0x00, 0x00, // .......f...&.... + 0x00, 0x07, 0x03, 0x99, 0x04, 0x41, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0xfe, 0x99, 0x04, 0x72, // .....A.........r + 0x04, 0x3a, 0x02, 0x26, 0x01, 0xe6, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x03, 0x4d, 0x00, 0x00, // .:.&.........M.. + 0x00, 0x01, 0x00, 0xa3, 0x00, 0x00, 0x04, 0xff, 0x05, 0xb0, 0x00, 0x14, 0x00, 0x81, 0x00, 0xb0, // ................ + 0x0e, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb2, 0xcf, 0x0e, 0x01, 0x5d, 0xb2, 0x1f, 0x0e, 0x01, 0x71, // ....>Y....]....q + 0xb2, 0xbf, 0x0e, 0x01, 0x71, 0xb2, 0xef, 0x0e, 0x01, 0x71, 0xb2, 0x9f, 0x0e, 0x01, 0x71, 0xb2, // ....q....q....q. + 0xef, 0x0e, 0x01, 0x5d, 0xb2, 0x7f, 0x0e, 0x01, 0x5d, 0xb2, 0x2f, 0x0e, 0x01, 0x5d, 0xb0, 0x0e, // ...]....]./..].. + 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x01, 0x09, // ......+X!...Y... + 0x0e, 0x11, 0x12, 0x39, 0xb0, 0x05, 0xd0, 0xb0, 0x0e, 0x10, 0xb0, 0x12, 0xd0, 0x30, 0x31, 0x09, // ...9.........01. + 0x02, 0x23, 0x01, 0x23, 0x15, 0x23, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, // .#.#.#5#.#.3.353 + 0x15, 0x33, 0x01, 0x04, 0xd5, 0xfe, 0x72, 0x01, 0xb8, 0xf6, 0xfe, 0xac, 0x4e, 0x9d, 0x62, 0xc5, // .3....r.....N.b. + 0xc5, 0x62, 0x9d, 0x4c, 0x01, 0x3d, 0x05, 0xb0, 0xfd, 0x4f, 0xfd, 0x01, 0x02, 0x92, 0xf3, 0xf3, // .b.L.=...O...... + 0xfd, 0x6e, 0x05, 0xb0, 0xfd, 0x7c, 0xff, 0xff, 0x02, 0x84, 0x00, 0x00, 0x00, 0x01, 0x00, 0x99, // .n...|.......... + 0x00, 0x00, 0x04, 0x63, 0x04, 0x3a, 0x00, 0x14, 0x00, 0x92, 0x00, 0xb0, 0x0e, 0x2f, 0xb0, 0x00, // ...c.:......./.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb4, 0xbf, 0x0e, 0xcf, 0x0e, 0x02, 0x5d, 0xb2, 0x2f, 0x0e, 0x01, 0x71, 0xb2, 0x9f, // >Y......]./..q.. + 0x0e, 0x01, 0x71, 0xb2, 0xff, 0x0e, 0x01, 0x71, 0xb2, 0x6f, 0x0e, 0x01, 0x72, 0xb2, 0x3f, 0x0e, // ..q....q.o..r.?. + 0x01, 0x72, 0xb2, 0xcf, 0x0e, 0x01, 0x71, 0xb2, 0x6f, 0x0e, 0x01, 0x71, 0xb2, 0xff, 0x0e, 0x01, // .r....q.o..q.... + 0x5d, 0xb2, 0x5f, 0x0e, 0x01, 0x5d, 0xb2, 0x2f, 0x0e, 0x01, 0x5d, 0xb0, 0x0e, 0x10, 0xb1, 0x09, // ]._..]./..]..... + 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x01, 0x09, 0x0e, 0x11, 0x12, // ...+X!...Y...... + 0x39, 0xb0, 0x05, 0xd0, 0xb0, 0x0e, 0x10, 0xb0, 0x12, 0xd0, 0x30, 0x31, 0x09, 0x02, 0x23, 0x01, // 9.........01..#. + 0x23, 0x15, 0x23, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, 0x15, 0x33, 0x13, // #.#5#.#.3.353.3. + 0x04, 0x40, 0xfe, 0xad, 0x01, 0x76, 0xf9, 0xfe, 0xf3, 0x17, 0x9d, 0x4b, 0xc5, 0xc5, 0x4b, 0x9d, // .@...v.....K..K. + 0x0f, 0xff, 0x04, 0x3a, 0xfe, 0x00, 0xfd, 0xc6, 0x01, 0xcb, 0xbf, 0xbf, 0xfe, 0x35, 0x04, 0x3a, // ...:.........5.: + 0xfe, 0x37, 0xd3, 0xd3, 0x01, 0xc9, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf5, 0x00, 0x00, 0x05, 0x34, // .7.............4 + 0x05, 0xb0, 0x00, 0x16, 0x00, 0x9b, 0x00, 0xb0, 0x0e, 0x2f, 0xb0, 0x07, 0x2f, 0xb0, 0x00, 0x45, // ........./../..E + 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x10, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0xcf, 0x0e, 0x01, 0x5d, 0xb2, 0x1f, 0x0e, 0x01, 0x71, 0xb2, 0xbf, 0x0e, 0x01, 0x71, // Y....]....q....q + 0xb2, 0x3f, 0x0e, 0x01, 0x72, 0xb2, 0xef, 0x0e, 0x01, 0x71, 0xb2, 0x9f, 0x0e, 0x01, 0x71, 0xb2, // .?..r....q....q. + 0xef, 0x0e, 0x01, 0x5d, 0xb2, 0x7f, 0x0e, 0x01, 0x5d, 0xb2, 0x2f, 0x0e, 0x01, 0x5d, 0xb0, 0x0e, // ...]....]./..].. + 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, // ......+X!...Y... + 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb0, // .....+X!...Y.... + 0x0a, 0xd0, 0xb0, 0x04, 0x10, 0xb0, 0x0c, 0xd0, 0xb2, 0x13, 0x00, 0x0e, 0x11, 0x12, 0x39, 0x30, // ..............90 + 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, // 1.#.#.#5353.3.#. + 0x33, 0x01, 0x33, 0x17, 0x01, 0x01, 0x07, 0x23, 0x02, 0x37, 0xaa, 0xc5, 0xd3, 0xd3, 0xc5, 0xe9, // 3.3....#.7...... + 0xe9, 0x98, 0x02, 0x09, 0xda, 0x03, 0xfd, 0xcb, 0x02, 0x5e, 0x03, 0xeb, 0x02, 0x91, 0xfd, 0x6f, // .........^.....o + 0x04, 0x82, 0x9b, 0x93, 0x93, 0x9b, 0xfe, 0xaa, 0x02, 0x84, 0x05, 0xfd, 0x45, 0xfd, 0x15, 0x05, // ............E... + 0x00, 0x01, 0xff, 0xcf, 0x00, 0x00, 0x04, 0x30, 0x06, 0x18, 0x00, 0x14, 0x00, 0x7d, 0x00, 0xb0, // .......0.....}.. + 0x08, 0x2f, 0xb0, 0x07, 0x2f, 0xb0, 0x0e, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, // ./../../..EX../. + 0xb1, 0x10, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x4f, 0x0e, 0x01, 0x71, 0xb2, 0xaf, 0x0e, 0x01, 0x71, 0xb2, 0xbf, 0x0e, 0x01, 0x5d, 0xb2, 0x5f, // O..q....q....]._ + 0x0e, 0x01, 0x5d, 0xb0, 0x0e, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..]........+X!.. + 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y........+X!... + 0x59, 0xb2, 0x2f, 0x08, 0x01, 0x5d, 0xb0, 0x07, 0x10, 0xb0, 0x0a, 0xd0, 0xb0, 0x04, 0x10, 0xb0, // Y./..].......... + 0x0c, 0xd0, 0xb2, 0x12, 0x01, 0x0e, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, // ........901.#.#. + 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x33, 0x01, 0x33, 0x01, 0x01, 0x23, // #5353.3.#.3.3..# + 0x01, 0xe9, 0x80, 0xc5, 0xd5, 0xd5, 0xc5, 0xe7, 0xe7, 0x7e, 0x01, 0x28, 0xec, 0xfe, 0x8e, 0x01, // .........~.(.... + 0xa7, 0xe8, 0x01, 0xf3, 0xfe, 0x0d, 0x04, 0xbe, 0x9b, 0xbf, 0xbf, 0x9b, 0xfd, 0xd2, 0x01, 0xaa, // ................ + 0xfe, 0x14, 0xfd, 0xb2, 0x00, 0x01, 0x00, 0x43, 0x00, 0x00, 0x06, 0x8b, 0x05, 0xb0, 0x00, 0x10, // .......C........ + 0x00, 0x79, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, 0x3e, 0x59, // .y...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb2, 0x08, 0x02, 0x06, 0x11, 0x12, 0x39, 0xb0, 0x08, // /....>Y......9.. + 0x2f, 0xb2, 0xcf, 0x08, 0x01, 0x5d, 0xb4, 0xef, 0x08, 0xff, 0x08, 0x02, 0x5d, 0xb2, 0x2f, 0x08, // /....]......]./. + 0x01, 0x5d, 0xb2, 0x9f, 0x08, 0x01, 0x71, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // .]....q.....+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0xb2, 0x0d, 0x01, 0x08, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, // .Y......901.#.#. + 0x21, 0x35, 0x21, 0x11, 0x33, 0x01, 0x33, 0x17, 0x01, 0x01, 0x07, 0x23, 0x03, 0x8e, 0xaa, 0xc5, // !5!.3.3....#.... + 0xfe, 0x24, 0x02, 0xa1, 0x98, 0x02, 0x09, 0xda, 0x03, 0xfd, 0xcb, 0x02, 0x5e, 0x03, 0xeb, 0x02, // .$..........^... + 0x91, 0xfd, 0x6f, 0x05, 0x15, 0x9b, 0xfd, 0x7c, 0x02, 0x84, 0x05, 0xfd, 0x45, 0xfd, 0x15, 0x05, // ..o....|....E... + 0x00, 0x01, 0x00, 0x41, 0x00, 0x00, 0x05, 0x86, 0x04, 0x3a, 0x00, 0x10, 0x00, 0x79, 0x00, 0xb0, // ...A.....:...y.. + 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb2, 0x08, 0x02, 0x07, 0x11, 0x12, 0x39, 0xb0, 0x08, 0x2f, 0xb4, 0xbf, 0x08, // .>Y......9../... + 0xcf, 0x08, 0x02, 0x5d, 0xb2, 0x9f, 0x08, 0x01, 0x71, 0xb2, 0x2f, 0x08, 0x01, 0x5d, 0xb2, 0x6f, // ...]....q./..].o + 0x08, 0x01, 0x72, 0xb1, 0x01, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ..r.....+X!...Y. + 0x07, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0d, // .......+X!...Y.. + 0x01, 0x08, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, // ....901.#.#.!5!. + 0x33, 0x01, 0x33, 0x17, 0x01, 0x01, 0x07, 0x23, 0x03, 0x24, 0x81, 0xc5, 0xfe, 0x63, 0x02, 0x62, // 3.3....#.$...c.b + 0x72, 0x01, 0x65, 0xe7, 0x03, 0xfe, 0x58, 0x01, 0xca, 0x03, 0xf2, 0x01, 0xcb, 0xfe, 0x35, 0x03, // r.e...X.......5. + 0x9e, 0x9c, 0xfe, 0x37, 0x01, 0xc9, 0x05, 0xfd, 0xff, 0xfd, 0xd1, 0x05, 0xff, 0xff, 0x00, 0xb4, // ...7............ + 0xfe, 0x99, 0x05, 0x92, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, // .......&.+...... + 0x04, 0x6d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x99, 0x04, 0x8c, 0x04, 0x3a, 0x02, 0x26, // .m...........:.& + 0x01, 0xe9, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x03, 0x67, 0x00, 0x00, 0x00, 0x01, 0x00, 0xb4, // .........g...... + 0x00, 0x00, 0x07, 0x7a, 0x05, 0xb0, 0x00, 0x0d, 0x00, 0xac, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, // ...z........./.. + 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0x7f, 0x00, 0x01, 0x5d, 0xb2, 0xcf, 0x00, 0x01, 0x5d, 0xb2, 0x1f, 0x00, 0x01, // >Y....]....].... + 0x71, 0xb2, 0x7f, 0x00, 0x01, 0x71, 0xb4, 0xbf, 0x00, 0xcf, 0x00, 0x02, 0x71, 0xb2, 0x1f, 0x00, // q....q......q... + 0x01, 0x72, 0xb2, 0x6f, 0x00, 0x01, 0x72, 0xb2, 0x8f, 0x00, 0x01, 0x72, 0xb2, 0x3f, 0x00, 0x01, // .r.o..r....r.?.. + 0x72, 0xb2, 0xef, 0x00, 0x01, 0x71, 0xb2, 0x9f, 0x00, 0x01, 0x71, 0xb2, 0x4f, 0x00, 0x01, 0x71, // r....q....q.O..q + 0xb4, 0xef, 0x00, 0xff, 0x00, 0x02, 0x5d, 0xb2, 0xaf, 0x00, 0x01, 0x5d, 0xb2, 0x5f, 0x00, 0x01, // ......]....]._.. + 0x5d, 0xb2, 0x2f, 0x00, 0x01, 0x5d, 0xb0, 0x02, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ]./..]........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, // ...Y01.!.!.!.#.! + 0x11, 0x23, 0x11, 0x33, 0x01, 0x79, 0x02, 0xc3, 0x03, 0x3e, 0xfd, 0x87, 0xc5, 0xfd, 0x3d, 0xc5, // .#.3.y...>....=. + 0xc5, 0x03, 0x1e, 0x02, 0x92, 0x9b, 0xfa, 0xeb, 0x02, 0x83, 0xfd, 0x7d, 0x05, 0xb0, 0x00, 0x00, // ...........}.... + 0x00, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x05, 0x65, 0x04, 0x3a, 0x00, 0x0d, 0x00, 0xa8, 0x00, 0xb0, // .......e.:...... + 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb2, 0x9f, 0x00, 0x01, 0x5d, 0xb2, 0xff, 0x00, 0x01, 0x5d, // ....>Y....]....] + 0xb2, 0x6f, 0x00, 0x01, 0x71, 0xb4, 0xcf, 0x00, 0xdf, 0x00, 0x02, 0x71, 0xb4, 0x3f, 0x00, 0x4f, // .o..q......q.?.O + 0x00, 0x02, 0x72, 0xb2, 0xaf, 0x00, 0x01, 0x72, 0xb4, 0x6f, 0x00, 0x7f, 0x00, 0x02, 0x72, 0xb2, // ..r....r.o....r. + 0xff, 0x00, 0x01, 0x71, 0xb2, 0x0f, 0x00, 0x01, 0x72, 0xb2, 0x9f, 0x00, 0x01, 0x71, 0xb4, 0x2f, // ...q....r....q./ + 0x00, 0x3f, 0x00, 0x02, 0x71, 0xb4, 0xbf, 0x00, 0xcf, 0x00, 0x02, 0x5d, 0xb2, 0x5f, 0x00, 0x01, // .?..q......]._.. + 0x5d, 0xb2, 0x2f, 0x00, 0x01, 0x5d, 0xb0, 0x02, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ]./..]........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, // ...Y01.!.!.!.#.! + 0x11, 0x23, 0x11, 0x33, 0x01, 0x54, 0x01, 0xe2, 0x02, 0x2f, 0xfe, 0x96, 0xc5, 0xfe, 0x1e, 0xc5, // .#.3.T.../...... + 0xc5, 0x02, 0x66, 0x01, 0xd4, 0x9c, 0xfc, 0x62, 0x01, 0xcc, 0xfe, 0x34, 0x04, 0x3a, 0x00, 0x00, // ..f....b...4.:.. + 0x00, 0x01, 0x00, 0xb4, 0xfe, 0xe0, 0x07, 0xcd, 0x05, 0xb0, 0x00, 0x18, 0x00, 0x5a, 0x00, 0xb0, // .............Z.. + 0x07, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, 0x1b, 0xb1, 0x18, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x06, 0x3e, 0x59, 0xb0, 0x12, 0xd0, 0xb2, // .EX../....>Y.... + 0x00, 0x12, 0x18, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb0, 0x07, 0x10, 0xb1, 0x09, 0x05, 0xb0, // .....9../....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x10, 0x03, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x18, 0x10, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x33, 0x20, 0x00, 0x11, 0x10, 0x02, 0x2f, // X!...Y01.3 ..../ + 0x02, 0x32, 0x36, 0x35, 0x26, 0x26, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, // .265&&##.#.!.#.! + 0x05, 0x03, 0x72, 0x01, 0x1c, 0x01, 0x3c, 0xf3, 0xe3, 0x06, 0x02, 0x97, 0x82, 0x02, 0xc8, 0xc9, // ..r...<......... + 0x72, 0xc6, 0xfd, 0x3c, 0xc5, 0x04, 0x4f, 0x03, 0x41, 0xfe, 0xcd, 0xfe, 0xf1, 0xfe, 0xf9, 0xfe, // r..<..O.A....... + 0xe8, 0x04, 0x02, 0x8e, 0xcc, 0xbf, 0xca, 0xd3, 0xfd, 0x64, 0x05, 0x15, 0xfa, 0xeb, 0x05, 0xb0, // .........d...... + 0x00, 0x01, 0x00, 0x8f, 0xfe, 0xe4, 0x06, 0xb7, 0x04, 0x3a, 0x00, 0x17, 0x00, 0x48, 0x00, 0xb0, // .........:...H.. + 0x07, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb0, 0x11, 0xd0, 0xb2, // .EX../....>Y.... + 0x00, 0x11, 0x17, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x2f, 0xb1, 0x0f, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // .....9../.....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x17, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x33, 0x32, 0x00, 0x15, 0x06, 0x02, 0x07, 0x27, 0x36, // ...Y01.32.....'6 + 0x36, 0x35, 0x26, 0x26, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x03, 0xfc, // 65&&##.#.!.#.!.. + 0xa8, 0xeb, 0x01, 0x28, 0x02, 0xc2, 0xbe, 0x34, 0x81, 0x70, 0x02, 0xb6, 0x96, 0xa8, 0xc5, 0xfe, // ...(...4.p...... + 0x1d, 0xc5, 0x03, 0x6d, 0x02, 0x87, 0xfe, 0xff, 0xdc, 0x8a, 0xfe, 0xe7, 0x23, 0x95, 0x22, 0x9d, // ...m........#.". + 0x72, 0x94, 0xa4, 0xfe, 0x1e, 0x03, 0x9e, 0xfc, 0x62, 0x04, 0x3a, 0x00, 0x00, 0x02, 0x00, 0x71, // r.......b.:....q + 0xff, 0xe2, 0x05, 0x9b, 0x05, 0xc2, 0x00, 0x2a, 0x00, 0x39, 0x00, 0x8f, 0x00, 0xb0, 0x00, 0x45, // .......*.9.....E + 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, // X. /.. .>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0d, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x03, 0x06, 0x20, 0x11, 0x12, 0x39, 0xb0, 0x0d, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, // Y... ..9........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x16, 0x03, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x19, 0x2e, 0x03, 0x11, 0x12, 0x39, 0xb2, 0x27, 0x03, // X!...Y......9.'. + 0x2e, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb1, 0x2a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...9....*...+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x2f, 0x20, 0x06, 0x11, 0x12, 0x39, 0xb0, 0x20, 0x10, 0xb1, 0x36, 0x02, // ..Y./ ...9. ..6. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x22, 0x26, 0x27, 0x06, // ..+X!...Y01."&'. + 0x06, 0x23, 0x20, 0x00, 0x11, 0x35, 0x10, 0x12, 0x17, 0x17, 0x15, 0x22, 0x02, 0x15, 0x15, 0x14, // .# ..5.....".... + 0x12, 0x33, 0x32, 0x36, 0x37, 0x26, 0x02, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x12, 0x15, 0x15, // .3267&.554.32... + 0x14, 0x02, 0x07, 0x16, 0x16, 0x33, 0x01, 0x14, 0x16, 0x17, 0x33, 0x36, 0x36, 0x35, 0x35, 0x34, // .....3....366554 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x05, 0x9b, 0x6d, 0xc7, 0x58, 0x46, 0x9c, 0x55, 0xfe, 0xef, 0xfe, // &#"....m.XF.U... + 0xaa, 0xfc, 0xc5, 0x06, 0x77, 0x8b, 0xe3, 0xbf, 0x22, 0x3f, 0x1d, 0x7a, 0x83, 0xe5, 0xb7, 0xb6, // ....w..."?.z.... + 0xe4, 0x71, 0x66, 0x33, 0x71, 0x3f, 0xfd, 0x83, 0x75, 0x6f, 0x06, 0x5c, 0x66, 0x73, 0x62, 0x62, // .qf3q?..uo..fsbb + 0x75, 0x1e, 0x25, 0x25, 0x20, 0x21, 0x01, 0x8e, 0x01, 0x2c, 0xa6, 0x01, 0x0f, 0x01, 0x68, 0x05, // u.%% !...,....h. + 0x02, 0x98, 0xfe, 0xf7, 0xcd, 0xa8, 0xeb, 0xfe, 0xd2, 0x06, 0x07, 0x62, 0x01, 0x18, 0xa7, 0xe3, // ...........b.... + 0xec, 0x01, 0x39, 0xfe, 0xcd, 0xf2, 0xf8, 0x9d, 0xfe, 0xf4, 0x5f, 0x0e, 0x0d, 0x02, 0x36, 0x99, // ..9......._...6. + 0xeb, 0x44, 0x43, 0xe5, 0x8d, 0xfb, 0xac, 0xd6, 0xdc, 0xa6, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6c, // .DC............l + 0xff, 0xeb, 0x04, 0xa1, 0x04, 0x4f, 0x00, 0x2a, 0x00, 0x3a, 0x00, 0x8f, 0x00, 0xb0, 0x00, 0x45, // .....O.*.:.....E + 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, // X. /.. .>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x03, 0x06, 0x20, 0x11, 0x12, 0x39, 0xb0, 0x0e, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, // Y... ..9........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x16, 0x03, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x37, 0x20, 0x06, 0x11, 0x12, 0x39, 0xb2, 0x19, 0x37, // X!...Y.7 ...9..7 + 0x03, 0x11, 0x12, 0x39, 0xb2, 0x27, 0x03, 0x37, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb1, 0x2a, // ...9.'.7..9....* + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x20, 0x10, 0xb1, 0x2f, 0x03, // ...+X!...Y. ../. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x22, 0x26, 0x27, 0x06, // ..+X!...Y01."&'. + 0x06, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x12, 0x17, 0x17, 0x15, 0x22, 0x06, 0x15, 0x15, 0x14, // .#".554....".... + 0x16, 0x33, 0x32, 0x36, 0x37, 0x26, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, // .3267&&554632... + 0x14, 0x06, 0x07, 0x16, 0x16, 0x33, 0x03, 0x35, 0x34, 0x26, 0x07, 0x23, 0x26, 0x06, 0x15, 0x15, // .....3.54&.#&... + 0x14, 0x16, 0x17, 0x37, 0x36, 0x36, 0x04, 0xa1, 0x5a, 0xa1, 0x46, 0x3b, 0x84, 0x48, 0xda, 0xfe, // ...766..Z.F;.H.. + 0xed, 0xc3, 0x98, 0x06, 0x48, 0x54, 0xa0, 0x88, 0x16, 0x2b, 0x15, 0x5d, 0x62, 0xad, 0x92, 0x91, // ....HT...+.]b... + 0xb0, 0x42, 0x3c, 0x26, 0x58, 0x31, 0xf6, 0x42, 0x37, 0x06, 0x39, 0x3e, 0x4b, 0x46, 0x06, 0x2d, // .B<&X1.B7.9>KF.- + 0x32, 0x0c, 0x1c, 0x1d, 0x21, 0x21, 0x01, 0x51, 0xfe, 0x39, 0xcd, 0x01, 0x0b, 0x05, 0x02, 0x97, // 2...!!.Q.9...... + 0xaf, 0x89, 0x3b, 0xbc, 0xf2, 0x05, 0x06, 0x4f, 0xd8, 0x7f, 0x67, 0xbd, 0xee, 0xfe, 0xc2, 0x69, // ..;....O..g....i + 0x6f, 0xc3, 0x4b, 0x0b, 0x0a, 0x01, 0x92, 0x6c, 0x7b, 0xa0, 0x05, 0x05, 0x8f, 0x78, 0x6b, 0x66, // o.K....l{....xkf + 0xa2, 0x33, 0x01, 0x31, 0x99, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x76, 0xfe, 0x52, 0x04, 0xbf, // .3.1.......v.R.. + 0x05, 0xc5, 0x02, 0x26, 0x00, 0x26, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x01, 0xe5, 0xff, 0xb9, // ...&.&.......... + 0xff, 0xff, 0x00, 0x61, 0xfe, 0x52, 0x03, 0xf6, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x46, 0x00, 0x00, // ...a.R...N.&.F.. + 0x00, 0x07, 0x03, 0x99, 0x01, 0x58, 0xff, 0xb9, 0xff, 0xff, 0x00, 0x22, 0xfe, 0x99, 0x04, 0x8e, // .....X.....".... + 0x05, 0xb0, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x02, 0x26, 0x00, 0x00, // ...&.7.......&.. + 0xff, 0xff, 0x00, 0x47, 0xfe, 0x99, 0x03, 0xd1, 0x04, 0x3a, 0x02, 0x26, 0x01, 0xee, 0x00, 0x00, // ...G.....:.&.... + 0x00, 0x07, 0x03, 0x99, 0x01, 0xd8, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, // ................ + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2e, 0xfe, 0x5f, 0x03, 0xe4, // .....<......._.. + 0x04, 0x3a, 0x02, 0x06, 0x01, 0x8d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, // .:.............. + 0x05, 0xb0, 0x00, 0x10, 0x00, 0x72, 0x00, 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, // .....r.../..EX.. + 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x0d, 0x10, 0xb0, 0x00, 0xd0, 0x40, 0x1b, 0x34, 0x00, 0x44, 0x00, 0x54, 0x00, 0x64, // Y......@.4.D.T.d + 0x00, 0x74, 0x00, 0x84, 0x00, 0x94, 0x00, 0xa4, 0x00, 0xb4, 0x00, 0xc4, 0x00, 0xd4, 0x00, 0xe4, // .t.............. + 0x00, 0xf4, 0x00, 0x0d, 0x5d, 0xb6, 0x04, 0x00, 0x14, 0x00, 0x24, 0x00, 0x03, 0x71, 0xb0, 0x0d, // ....].....$..q.. + 0x10, 0xb0, 0x04, 0xd0, 0xb0, 0x0d, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ............+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0xd0, 0x30, 0x31, 0x01, 0x01, 0x33, 0x01, 0x33, 0x15, 0x23, 0x07, // ..Y...01..3.3.#. + 0x11, 0x23, 0x11, 0x27, 0x23, 0x35, 0x33, 0x01, 0x33, 0x02, 0x71, 0x01, 0x7c, 0xe1, 0xfe, 0x5d, // .#.'#53.3.q.|..] + 0x78, 0xcc, 0x08, 0xc4, 0x01, 0xe8, 0x94, 0xfe, 0x5e, 0xe1, 0x02, 0xcc, 0x02, 0xe4, 0xfc, 0xfa, // x.......^....... + 0x9b, 0x0f, 0xfe, 0x00, 0x02, 0x0d, 0x02, 0x9b, 0x03, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2e, // ................ + 0xfe, 0x5f, 0x03, 0xe4, 0x04, 0x3a, 0x00, 0x11, 0x00, 0x72, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ._...:...r...EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x08, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb1, 0x06, 0x02, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x0b, 0xd0, 0xb2, 0x34, // .+X!...Y.......4 + 0x0b, 0x01, 0x5d, 0x40, 0x0b, 0x54, 0x0b, 0x64, 0x0b, 0x74, 0x0b, 0x84, 0x0b, 0x94, 0x0b, 0x05, // ..]@.T.d.t...... + 0x5d, 0xb0, 0x06, 0x10, 0xb0, 0x10, 0xd0, 0xb0, 0x11, 0xd0, 0x30, 0x31, 0x05, 0x23, 0x11, 0x23, // ].........01.#.# + 0x11, 0x23, 0x35, 0x33, 0x01, 0x33, 0x01, 0x17, 0x33, 0x37, 0x13, 0x33, 0x01, 0x33, 0x03, 0x51, // .#53.3..37.3.3.Q + 0xe4, 0xc5, 0xd8, 0xbc, 0xfe, 0xa2, 0xca, 0x01, 0x00, 0x11, 0x06, 0x13, 0xf9, 0xc9, 0xfe, 0xa6, // ................ + 0xc7, 0x0d, 0xfe, 0x6c, 0x01, 0x94, 0x9b, 0x03, 0xac, 0xfd, 0x05, 0x4c, 0x4c, 0x02, 0xfb, 0xfc, // ...l.......LL... + 0x54, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x42, 0xfe, 0x99, 0x04, 0xf0, 0x05, 0xb0, 0x02, 0x26, // T......B.......& + 0x00, 0x3b, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x03, 0xcb, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2e, // .;.............. + 0xfe, 0x99, 0x04, 0x0b, 0x04, 0x3a, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, // .....:.&.[...... + 0x02, 0xe6, 0x00, 0x00, 0x00, 0x01, 0x00, 0x37, 0xfe, 0x9d, 0x06, 0x9c, 0x05, 0xb0, 0x00, 0x0f, // .......7........ + 0x00, 0x51, 0x00, 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, // .Q.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x02, 0x10, // ..EX../....>Y... + 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0xd0, 0xb0, // .....+X!...Y.... + 0x0f, 0x10, 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0a, // .......+X!...Y.. + 0xd0, 0x30, 0x31, 0x01, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x11, // .01.!5!.!.!.3.3. + 0x23, 0x11, 0x21, 0x01, 0x8c, 0xfe, 0xab, 0x03, 0xba, 0xfe, 0x61, 0x02, 0xc4, 0xc5, 0xc1, 0xc5, // #.!.......a..... + 0xfb, 0xb5, 0x05, 0x13, 0x9b, 0x9b, 0xfb, 0x88, 0x05, 0x15, 0xfa, 0xf1, 0xfd, 0xfc, 0x01, 0x63, // ...............c + 0x00, 0x01, 0x00, 0x20, 0xfe, 0x9e, 0x05, 0x1d, 0x04, 0x3b, 0x00, 0x0f, 0x00, 0x51, 0x00, 0xb0, // ... .....;...Q.. + 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x01, 0x02, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x05, 0xd0, 0xb0, 0x0f, 0x10, 0xb1, 0x06, // .+X!...Y........ + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0a, 0xd0, 0x30, 0x31, 0x01, // ...+X!...Y...01. + 0x21, 0x35, 0x21, 0x15, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x11, 0x23, 0x11, 0x21, 0x01, // !5!.#.!.3.3.#.!. + 0x2c, 0xfe, 0xf4, 0x02, 0xc4, 0xf3, 0x01, 0xe3, 0xc5, 0x84, 0xc5, 0xfc, 0xd4, 0x03, 0xa0, 0x9b, // ,............... + 0x9b, 0xfc, 0xfa, 0x03, 0xa0, 0xfc, 0x60, 0xfe, 0x04, 0x01, 0x62, 0x00, 0xff, 0xff, 0x00, 0x93, // ......`...b..... + 0xfe, 0x99, 0x05, 0x5d, 0x05, 0xb0, 0x02, 0x26, 0x01, 0xd3, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, // ...]...&........ + 0x04, 0x38, 0x00, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xfe, 0x99, 0x04, 0x6d, 0x04, 0x3b, 0x02, 0x26, // .8.........m.;.& + 0x01, 0xf3, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x03, 0x48, 0x00, 0x00, 0x00, 0x01, 0x00, 0x93, // .........H...... + 0x00, 0x00, 0x04, 0xcc, 0x05, 0xb0, 0x00, 0x1d, 0x00, 0x45, 0x00, 0xb0, 0x14, 0x2f, 0xb0, 0x00, // .........E.../.. + 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x14, 0x10, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0xd0, 0xb0, 0x14, 0x10, 0xb0, 0x18, 0xd0, 0x30, 0x31, 0x01, // ...Y.........01. + 0x11, 0x23, 0x11, 0x06, 0x07, 0x06, 0x07, 0x15, 0x23, 0x35, 0x23, 0x22, 0x26, 0x35, 0x11, 0x33, // .#......#5#"&5.3 + 0x11, 0x14, 0x16, 0x33, 0x33, 0x11, 0x33, 0x11, 0x36, 0x37, 0x36, 0x37, 0x11, 0x04, 0xcc, 0xc5, // ...33.3.6767.... + 0x5f, 0x59, 0x18, 0x19, 0x9e, 0x04, 0xf1, 0xf8, 0xc6, 0x8a, 0x99, 0x04, 0x9e, 0x13, 0x13, 0x60, // _Y.............` + 0x63, 0x05, 0xb0, 0xfa, 0x50, 0x02, 0x5b, 0x1d, 0x0d, 0x04, 0x03, 0xee, 0xe8, 0xd3, 0xed, 0x01, // c...P.[......... + 0xcc, 0xfe, 0x34, 0xa5, 0x7f, 0x01, 0x39, 0xfe, 0xd0, 0x02, 0x03, 0x0e, 0x1b, 0x02, 0xb9, 0x00, // ..4...9......... + 0x00, 0x01, 0x00, 0x7f, 0x00, 0x00, 0x03, 0xdc, 0x04, 0x3b, 0x00, 0x1c, 0x00, 0x4c, 0x00, 0xb0, // .........;...L.. + 0x14, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb4, 0xbf, 0x14, 0xcf, 0x14, 0x02, 0x5d, // ../....>Y......] + 0xb0, 0x14, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x06, 0xd0, 0xb0, 0x14, 0x10, 0xb0, 0x17, 0xd0, 0x30, 0x31, 0x21, 0x23, 0x11, 0x06, 0x07, 0x06, // ........01!#.... + 0x07, 0x15, 0x23, 0x35, 0x26, 0x27, 0x26, 0x35, 0x11, 0x33, 0x11, 0x14, 0x17, 0x16, 0x17, 0x11, // ..#5&'&5.3...... + 0x33, 0x11, 0x37, 0x36, 0x37, 0x11, 0x33, 0x03, 0xdc, 0xc5, 0x39, 0x3c, 0x0d, 0x0e, 0x9e, 0x9c, // 3.767.3...9<.... + 0x5f, 0x6f, 0xc5, 0x38, 0x28, 0x45, 0x9e, 0x19, 0x3c, 0x3b, 0xc5, 0x01, 0x83, 0x0f, 0x08, 0x01, // _o.8(E..<;...... + 0x02, 0x84, 0x82, 0x0d, 0x58, 0x67, 0xca, 0x01, 0x3e, 0xfe, 0xc2, 0x82, 0x3d, 0x2c, 0x0d, 0x01, // ....Xg..>...=,.. + 0x16, 0xfe, 0xea, 0x03, 0x08, 0x0f, 0x02, 0x1b, 0x00, 0x01, 0x00, 0x8a, 0x00, 0x00, 0x04, 0xc3, // ................ + 0x05, 0xb0, 0x00, 0x13, 0x00, 0x3c, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, // .....<.../..EX.. + 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x33, 0x11, 0x33, 0x11, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, // 013.3.6632...#.4 + 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x8a, 0xc5, 0x60, 0xb1, 0x7a, 0xf0, 0xf9, 0xc6, 0x8b, 0x98, // &#".....`.z..... + 0x69, 0xc0, 0x62, 0x05, 0xb0, 0xfd, 0xa5, 0x1b, 0x1c, 0xd4, 0xec, 0xfe, 0x34, 0x01, 0xcc, 0xa4, // i.b.........4... + 0x80, 0x1d, 0x1b, 0xfd, 0x48, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x94, 0x00, 0x01, 0x03, 0xf1, // ....H........... + 0x04, 0x3c, 0x01, 0x0f, 0x01, 0xf3, 0x04, 0x70, 0x04, 0x3c, 0xc0, 0x02, 0x00, 0x10, 0x00, 0xb0, // .<.....p.<...... + 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x06, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0x00, 0x02, 0x00, 0x4d, 0xff, 0xe9, 0x06, 0x2c, 0x05, 0xc3, 0x00, 0x1e, 0x00, 0x27, 0x00, 0x5a, // ...M...,.....'.Z + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0x24, 0x00, 0x0f, 0x11, // EX../....>Y.$... + 0x12, 0x39, 0xb0, 0x24, 0x2f, 0xb1, 0x13, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9.$/.....+X!... + 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x24, 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x18, 0x02, // Y....$.......... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0x10, 0xb1, 0x1f, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x20, 0x00, 0x11, 0x35, 0x26, // .+X!...Y01. ..5& + 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x17, 0x12, 0x00, 0x33, 0x20, 0x00, 0x11, 0x15, 0x21, 0x07, // &773.....3 ...!. + 0x06, 0x12, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x03, 0x22, 0x02, 0x07, 0x17, 0x21, 0x35, // ..3267...."...!5 + 0x34, 0x26, 0x04, 0x47, 0xfe, 0xb6, 0xfe, 0x91, 0x9e, 0xa3, 0x04, 0x02, 0x97, 0x53, 0x55, 0x1b, // 4&.G.........SU. + 0x01, 0x51, 0xe9, 0x01, 0x1b, 0x01, 0x2a, 0xfc, 0x2e, 0x02, 0x05, 0xf7, 0xfd, 0x6b, 0x9a, 0x4b, // .Q....*......k.K + 0x30, 0x32, 0xc0, 0xee, 0xab, 0xd2, 0x0f, 0x03, 0x03, 0x09, 0xb5, 0x17, 0x01, 0x8d, 0x01, 0x47, // 02.............G + 0x06, 0x14, 0xc4, 0x9a, 0x05, 0x5d, 0x7d, 0x12, 0x01, 0x17, 0x01, 0x5e, 0xfe, 0x9d, 0xfe, 0xc9, // .....]}....^.... + 0x6c, 0x05, 0xf9, 0xfe, 0xc4, 0x2e, 0x26, 0x8b, 0x24, 0x3f, 0x05, 0x3f, 0xfe, 0xf2, 0xd1, 0x05, // l.....&.$?.?.... + 0x1f, 0xce, 0xf7, 0x00, 0x00, 0x02, 0xff, 0xdf, 0xff, 0xeb, 0x04, 0x5a, 0x04, 0x4e, 0x00, 0x1d, // ...........Z.N.. + 0x00, 0x26, 0x00, 0x66, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, // .&.f...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x12, 0x00, 0x0e, 0x11, 0x12, 0x39, 0xb0, 0x12, 0x2f, 0xb4, 0xd0, 0x12, 0xe0, 0x12, 0x02, 0x5d, // .....9../......] + 0xb2, 0xa0, 0x12, 0x01, 0x5d, 0xb0, 0x04, 0xd0, 0xb0, 0x12, 0x10, 0xb1, 0x23, 0x02, 0xb0, 0x0a, // ....].......#... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x17, 0x02, // +X!...Y......... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x1e, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x22, 0x00, 0x35, 0x35, 0x26, // .+X!...Y01.".55& + 0x26, 0x35, 0x33, 0x14, 0x16, 0x17, 0x36, 0x24, 0x33, 0x32, 0x12, 0x15, 0x15, 0x21, 0x07, 0x16, // &53...6$32...!.. + 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x03, 0x22, 0x06, 0x07, 0x17, 0x21, 0x35, 0x34, // .3267...."...!54 + 0x26, 0x02, 0xbd, 0xe2, 0xfe, 0xf5, 0x77, 0x7a, 0x9d, 0x2d, 0x30, 0x21, 0x01, 0x02, 0xa3, 0xdb, // &.....wz.-0!.... + 0xe0, 0xfd, 0x42, 0x03, 0x03, 0x98, 0x89, 0x64, 0x97, 0x37, 0x4d, 0x3a, 0xbe, 0xa5, 0x63, 0x8c, // ..B....d.7M:..c. + 0x10, 0x02, 0x01, 0xf3, 0x7c, 0x15, 0x01, 0x2d, 0xf0, 0x08, 0x1d, 0xaf, 0x87, 0x45, 0x62, 0x19, // ....|..-.....Eb. + 0xbd, 0xee, 0xfe, 0xf8, 0xdc, 0x7b, 0x05, 0x9c, 0xc9, 0x39, 0x32, 0x80, 0x39, 0x4c, 0x03, 0xc8, // .....{...92.9L.. + 0xa7, 0x7e, 0x05, 0x1a, 0x74, 0x9c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4d, 0xfe, 0x57, 0x06, 0x2c, // .~..t......M.W., + 0x05, 0xc3, 0x00, 0x26, 0x02, 0x67, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x03, 0x0f, 0xff, 0xbe, // ...&.g.......... + 0xff, 0xff, 0xff, 0xdf, 0xfe, 0x59, 0x04, 0x5a, 0x04, 0x4e, 0x02, 0x26, 0x02, 0x68, 0x00, 0x00, // .....Y.Z.N.&.h.. + 0x00, 0x07, 0x03, 0x99, 0x02, 0x04, 0xff, 0xc0, 0xff, 0xff, 0x00, 0xbe, 0x00, 0x00, 0x01, 0x84, // ................ + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x32, // .....,.........2 + 0x07, 0x4e, 0x02, 0x26, 0x01, 0xc2, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x01, 0xfe, 0x01, 0x9e, // .N.&.......T.... + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x15, 0x00, 0x00, 0x06, 0x04, 0x05, 0xf7, 0x02, 0x26, // 01.............& + 0x01, 0xe2, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x01, 0x64, 0x00, 0x47, 0x00, 0x33, 0x00, 0xb2, // .......T.d.G.3.. + 0x8f, 0x1a, 0x01, 0x71, 0xb2, 0xcf, 0x1a, 0x01, 0x71, 0xb2, 0x1f, 0x1a, 0x01, 0x72, 0xb6, 0x3f, // ...q....q....r.? + 0x1a, 0x4f, 0x1a, 0x5f, 0x1a, 0x03, 0x5d, 0xb2, 0xff, 0x1a, 0x01, 0x71, 0xb2, 0xaf, 0x1a, 0x01, // .O._..]....q.... + 0x71, 0xb6, 0x60, 0x1a, 0x70, 0x1a, 0x80, 0x1a, 0x03, 0x5d, 0xb2, 0x00, 0x1a, 0x01, 0x71, 0x30, // q.`.p....]....q0 + 0x31, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa3, 0xfe, 0xdd, 0x04, 0xd0, 0x05, 0xb0, 0x00, 0x18, // 1............... + 0x00, 0x58, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, // .X.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x0c, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb2, 0x14, 0x10, // ..EX../....>Y... + 0x13, 0x11, 0x12, 0x39, 0xb0, 0x14, 0x2f, 0xb0, 0x00, 0xd0, 0xb0, 0x06, 0x10, 0xb1, 0x08, 0x05, // ...9../......... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x14, 0x10, 0xb1, 0x0f, 0x03, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x16, 0x00, 0x15, 0x10, 0x02, // .+X!...Y01...... + 0x2f, 0x02, 0x32, 0x36, 0x35, 0x26, 0x26, 0x23, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x01, // /.265&&#!.#.3.3. + 0x33, 0x17, 0x02, 0xc5, 0xf6, 0x01, 0x0e, 0xf3, 0xe3, 0x06, 0x02, 0x97, 0x82, 0x02, 0xc8, 0xc9, // 3............... + 0xfe, 0xf7, 0xc5, 0xc5, 0x80, 0x02, 0x08, 0xde, 0x02, 0x03, 0x3a, 0x17, 0xfe, 0xd3, 0xfa, 0xfe, // ..........:..... + 0xf9, 0xfe, 0xe8, 0x04, 0x02, 0x8e, 0xcc, 0xbf, 0xca, 0xd2, 0xfd, 0x68, 0x05, 0xb0, 0xfd, 0x8e, // ...........h.... + 0x02, 0x72, 0x05, 0x00, 0x00, 0x01, 0x00, 0x99, 0xfe, 0xfe, 0x04, 0x1e, 0x04, 0x3a, 0x00, 0x17, // .r...........:.. + 0x00, 0x50, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, // .P.../..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x0a, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb2, 0x13, 0x0f, // ..EX../....>Y... + 0x12, 0x11, 0x12, 0x39, 0xb0, 0x13, 0x2f, 0xb4, 0xbf, 0x13, 0xcf, 0x13, 0x02, 0x5d, 0xb0, 0x00, // ...9../......].. + 0xd0, 0xb0, 0x13, 0x10, 0xb1, 0x0e, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0x30, 0x31, 0x01, 0x16, 0x16, 0x15, 0x06, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, 0x26, 0x26, 0x23, // 01.......'665&&# + 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x17, 0x02, 0x89, 0xb8, 0xd7, 0x02, 0xc2, // #.#.3.3.3....... + 0xbe, 0x33, 0x80, 0x71, 0x02, 0xb2, 0x9a, 0xa8, 0xc5, 0xc5, 0x54, 0x01, 0x83, 0xe7, 0x02, 0x02, // .3.q......T..... + 0x65, 0x1e, 0xde, 0xb9, 0x85, 0xfe, 0xf5, 0x22, 0x96, 0x20, 0x91, 0x6b, 0x90, 0x8b, 0xfe, 0x35, // e......". .k...5 + 0x04, 0x3a, 0xfe, 0x37, 0x01, 0xc9, 0x05, 0x00, 0xff, 0xff, 0x00, 0x31, 0xfe, 0xd8, 0x05, 0x9b, // .:.7.......1.... + 0x05, 0xb0, 0x02, 0x26, 0x01, 0xc7, 0x00, 0x00, 0x00, 0x07, 0x00, 0x0f, 0x04, 0x60, 0xff, 0xda, // ...&.........`.. + 0xff, 0xff, 0x00, 0x1a, 0xfe, 0xd8, 0x04, 0xa0, 0x04, 0x3a, 0x02, 0x26, 0x01, 0xe7, 0x00, 0x00, // .........:.&.... + 0x00, 0x07, 0x00, 0x0f, 0x03, 0x65, 0xff, 0xda, 0x00, 0x01, 0x00, 0xb4, 0xfe, 0x4b, 0x05, 0x01, // .....e.......K.. + 0x05, 0xb0, 0x00, 0x17, 0x00, 0xb3, 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, // ........./..EX.. + 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x03, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x08, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, 0x59, 0xb2, 0x7f, // Y..EX../....>Y.. + 0x01, 0x01, 0x5d, 0xb2, 0xcf, 0x01, 0x01, 0x5d, 0xb2, 0x1f, 0x01, 0x01, 0x71, 0xb2, 0x7f, 0x01, // ..]....]....q... + 0x01, 0x71, 0xb4, 0xbf, 0x01, 0xcf, 0x01, 0x02, 0x71, 0xb2, 0x1f, 0x01, 0x01, 0x72, 0xb2, 0x6f, // .q......q....r.o + 0x01, 0x01, 0x72, 0xb2, 0xbf, 0x01, 0x01, 0x72, 0xb4, 0x8f, 0x01, 0x9f, 0x01, 0x02, 0x72, 0xb2, // ..r....r......r. + 0x3f, 0x01, 0x01, 0x72, 0xb2, 0xef, 0x01, 0x01, 0x71, 0xb2, 0x9f, 0x01, 0x01, 0x71, 0xb2, 0x4f, // ?..r....q....q.O + 0x01, 0x01, 0x71, 0xb4, 0xef, 0x01, 0xff, 0x01, 0x02, 0x5d, 0xb2, 0xaf, 0x01, 0x01, 0x5d, 0xb2, // ..q......]....]. + 0x5f, 0x01, 0x01, 0x5d, 0xb2, 0x2f, 0x01, 0x01, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x0f, 0x02, 0xb0, // _..]./..]....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, // +X!...Y01..!.3.. + 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x23, // .#"&'7..3265.!.# + 0x11, 0x01, 0x79, 0x02, 0xc2, 0xc6, 0xad, 0x9a, 0x1f, 0x35, 0x1c, 0x0e, 0x0d, 0x44, 0x11, 0x3d, // ..y......5...D.= + 0x44, 0xfd, 0x3e, 0xc5, 0x05, 0xb0, 0xfd, 0x6e, 0x02, 0x92, 0xf9, 0xf7, 0xa7, 0xb5, 0x09, 0x09, // D.>....n........ + 0x96, 0x05, 0x08, 0x67, 0x5a, 0x02, 0xdc, 0xfd, 0x7d, 0x05, 0xb0, 0x00, 0x00, 0x01, 0x00, 0x8f, // ...gZ...}....... + 0xfe, 0x4b, 0x03, 0xfb, 0x04, 0x3a, 0x00, 0x17, 0x00, 0xad, 0x00, 0xb0, 0x01, 0x2f, 0xb0, 0x00, // .K...:......./.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x08, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0x9f, 0x01, 0x01, 0x5d, 0xb2, 0xff, 0x01, 0x01, 0x5d, 0xb2, 0x6f, 0x01, 0x01, // >Y....]....].o.. + 0x71, 0xb4, 0xcf, 0x01, 0xdf, 0x01, 0x02, 0x71, 0xb4, 0x3f, 0x01, 0x4f, 0x01, 0x02, 0x72, 0xb2, // q......q.?.O..r. + 0xaf, 0x01, 0x01, 0x72, 0xb2, 0xef, 0x01, 0x01, 0x72, 0xb4, 0x6f, 0x01, 0x7f, 0x01, 0x02, 0x72, // ...r....r.o....r + 0xb2, 0xff, 0x01, 0x01, 0x71, 0xb2, 0x0f, 0x01, 0x01, 0x72, 0xb2, 0x9f, 0x01, 0x01, 0x71, 0xb4, // ....q....r....q. + 0x2f, 0x01, 0x3f, 0x01, 0x02, 0x71, 0xb4, 0xbf, 0x01, 0xcf, 0x01, 0x02, 0x5d, 0xb2, 0x5f, 0x01, // /.?..q......]._. + 0x01, 0x5d, 0xb2, 0x2f, 0x01, 0x01, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, // .]./..]........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x06, 0x23, // !...Y01..!.3...# + 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x23, 0x11, 0x01, // "&'7..3265.!.#.. + 0x54, 0x01, 0xe2, 0xc5, 0xad, 0x99, 0x1f, 0x35, 0x1c, 0x0f, 0x0d, 0x43, 0x11, 0x3c, 0x45, 0xfe, // T......5...C.Y01.....j.... + 0x06, 0x0c, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x01, 0x54, 0x7f, 0x5c, 0x00, 0x36, // ...&.D.....T...6 + 0x00, 0xb2, 0x00, 0x30, 0x01, 0x71, 0xb2, 0xb0, 0x30, 0x01, 0x71, 0xb2, 0x00, 0x30, 0x01, 0x72, // ...0.q..0.q..0.r + 0xb2, 0x8f, 0x30, 0x01, 0x71, 0xb2, 0x20, 0x30, 0x01, 0x72, 0xb4, 0xd0, 0x30, 0xe0, 0x30, 0x02, // ..0.q. 0.r..0.0. + 0x71, 0xb2, 0x90, 0x30, 0x01, 0x71, 0xb6, 0x60, 0x30, 0x70, 0x30, 0x80, 0x30, 0x03, 0x5d, 0xb2, // q..0.q.`0p0.0.]. + 0x20, 0x30, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // 0.]01.......... + 0x07, 0x0d, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0x95, 0x01, 0x5d, // ...&.$.....j...] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x05, 0xcb, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, // ...j.......&.D.. + 0x01, 0x06, 0x00, 0x6a, 0x29, 0x1b, 0x00, 0x2f, 0x00, 0xb2, 0xf0, 0x2d, 0x01, 0x71, 0xb4, 0x00, // ...j)../...-.q.. + 0x2d, 0x10, 0x2d, 0x02, 0x72, 0xb2, 0x60, 0x2d, 0x01, 0x72, 0xb2, 0x40, 0x2d, 0x01, 0x72, 0xb2, // -.-.r.`-.r.@-.r. + 0xf0, 0x30, 0x01, 0x71, 0xb4, 0x00, 0x30, 0x10, 0x30, 0x02, 0x72, 0xb2, 0x60, 0x30, 0x01, 0x72, // .0.q..0.0.r.`0.r + 0xb2, 0x40, 0x30, 0x01, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0xff, 0xec, 0x00, 0x00, 0x07, 0x61, // .@0.r01........a + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x88, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3a, 0xff, 0xeb, 0x06, 0x7c, // ...........:...| + 0x04, 0x4e, 0x02, 0x06, 0x00, 0xa8, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, // .N.............z + 0x07, 0x4e, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0xc8, 0x01, 0x9e, // .N.&.(.....T.... + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x06, 0x0d, 0x02, 0x26, // 01.....c.......& + 0x00, 0x48, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0x82, 0x00, 0x5d, 0x00, 0x31, 0x00, 0xb2, // .H.....T...].1.. + 0x90, 0x24, 0x01, 0x71, 0xb4, 0xd0, 0x24, 0xe0, 0x24, 0x02, 0x71, 0xb2, 0x20, 0x24, 0x01, 0x72, // .$.q..$.$.q. $.r + 0xb2, 0x20, 0x24, 0x01, 0x5d, 0xb2, 0x00, 0x24, 0x01, 0x72, 0xb2, 0xb0, 0x24, 0x01, 0x71, 0xb2, // . $.]..$.r..$.q. + 0x00, 0x24, 0x01, 0x71, 0xb6, 0x60, 0x24, 0x70, 0x24, 0x80, 0x24, 0x03, 0x5d, 0x30, 0x31, 0x00, // .$.q.`$p$.$.]01. + 0x00, 0x02, 0x00, 0x59, 0xff, 0xeb, 0x05, 0x21, 0x05, 0xc5, 0x00, 0x16, 0x00, 0x1f, 0x00, 0x4d, // ...Y...!.......M + 0x00, 0xb0, 0x0b, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, // .../..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0x10, // ......+X!...Y... + 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0b, 0x10, 0xb1, // .....+X!...Y.... + 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x20, 0x00, // ....+X!...Y01. . + 0x11, 0x15, 0x10, 0x00, 0x23, 0x20, 0x00, 0x11, 0x35, 0x21, 0x37, 0x36, 0x02, 0x23, 0x22, 0x06, // ....# ..5!76.#". + 0x07, 0x27, 0x36, 0x36, 0x13, 0x32, 0x12, 0x37, 0x27, 0x21, 0x15, 0x14, 0x16, 0x02, 0x66, 0x01, // .'66.2.7'!....f. + 0x4a, 0x01, 0x71, 0xfe, 0xa2, 0xfc, 0xfe, 0xd0, 0xfe, 0xc2, 0x03, 0xfc, 0x02, 0x04, 0xf9, 0xfc, // J.q............. + 0x6c, 0x99, 0x4a, 0x31, 0x32, 0xbf, 0xf0, 0xaa, 0xd2, 0x11, 0x03, 0xfc, 0xcd, 0xc7, 0x05, 0xc5, // l.J12........... + 0xfe, 0x71, 0xfe, 0xba, 0x31, 0xfe, 0xc4, 0xfe, 0x68, 0x01, 0x61, 0x01, 0x38, 0x6c, 0x05, 0xf8, // .q..1...h.a.8l.. + 0x01, 0x3d, 0x2f, 0x25, 0x8b, 0x23, 0x41, 0xfa, 0xc0, 0x01, 0x0d, 0xd2, 0x05, 0x1f, 0xcf, 0xf6, // .=/%.#A......... + 0xff, 0xff, 0x00, 0x74, 0xff, 0xec, 0x03, 0xfe, 0x04, 0x4f, 0x01, 0x0f, 0x00, 0x48, 0x04, 0x61, // ...t.....O...H.a + 0x04, 0x3a, 0xc0, 0x02, 0x00, 0x13, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, // .:.......EX../.. + 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x17, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x59, // ..>Y...01......Y + 0xff, 0xeb, 0x05, 0x21, 0x06, 0xdf, 0x02, 0x26, 0x02, 0x83, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...!...&.......j + 0x00, 0x73, 0x01, 0x2f, 0x00, 0x89, 0x00, 0xb2, 0xef, 0x21, 0x01, 0x5d, 0xb6, 0x3f, 0x21, 0x4f, // .s./.....!.].?!O + 0x21, 0x5f, 0x21, 0x03, 0x71, 0xb6, 0x0f, 0x21, 0x1f, 0x21, 0x2f, 0x21, 0x03, 0x72, 0xb4, 0x0f, // !_!.q..!.!/!.r.. + 0x21, 0x1f, 0x21, 0x02, 0x5d, 0x40, 0x0f, 0x8f, 0x21, 0x9f, 0x21, 0xaf, 0x21, 0xbf, 0x21, 0xcf, // !.!.]@..!.!.!.!. + 0x21, 0xdf, 0x21, 0xef, 0x21, 0x07, 0x71, 0xb4, 0x0f, 0x21, 0x1f, 0x21, 0x02, 0x71, 0xb4, 0x6f, // !.!.!.q..!.!.q.o + 0x21, 0x7f, 0x21, 0x02, 0x5d, 0xb2, 0xb0, 0x21, 0x01, 0x5d, 0xb2, 0xef, 0x24, 0x01, 0x5d, 0xb6, // !.!.]..!.]..$.]. + 0x3f, 0x24, 0x4f, 0x24, 0x5f, 0x24, 0x03, 0x71, 0xb6, 0x0f, 0x24, 0x1f, 0x24, 0x2f, 0x24, 0x03, // ?$O$_$.q..$.$/$. + 0x72, 0xb4, 0x0f, 0x24, 0x1f, 0x24, 0x02, 0x5d, 0x40, 0x0f, 0x8f, 0x24, 0x9f, 0x24, 0xaf, 0x24, // r..$.$.]@..$.$.$ + 0xbf, 0x24, 0xcf, 0x24, 0xdf, 0x24, 0xef, 0x24, 0x07, 0x71, 0xb4, 0x0f, 0x24, 0x1f, 0x24, 0x02, // .$.$.$.$.q..$.$. + 0x71, 0xb4, 0x6f, 0x24, 0x7f, 0x24, 0x02, 0x5d, 0xb2, 0xb0, 0x24, 0x01, 0x5d, 0x30, 0x31, 0x00, // q.o$.$.]..$.]01. + 0xff, 0xff, 0x00, 0x74, 0xff, 0xec, 0x03, 0xfe, 0x05, 0xcb, 0x00, 0x2f, 0x00, 0x48, 0x04, 0x61, // ...t......./.H.a + 0x04, 0x3a, 0xc0, 0x02, 0x01, 0x06, 0x00, 0x6a, 0x36, 0x1b, 0x00, 0x3f, 0x00, 0xb0, 0x00, 0x45, // .:.....j6..?...E + 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb0, 0x17, 0xd0, 0xb2, 0x60, 0x21, // X../....>Y....`! + 0x01, 0x72, 0xb2, 0x40, 0x21, 0x01, 0x72, 0xb2, 0xf0, 0x21, 0x01, 0x71, 0xb4, 0x00, 0x21, 0x10, // .r.@!.r..!.q..!. + 0x21, 0x02, 0x72, 0xb2, 0x60, 0x24, 0x01, 0x72, 0xb2, 0x40, 0x24, 0x01, 0x72, 0xb2, 0xf0, 0x24, // !.r.`$.r.@$.r..$ + 0x01, 0x71, 0xb4, 0x00, 0x24, 0x10, 0x24, 0x02, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1c, // .q..$.$.r01..... + 0x00, 0x00, 0x07, 0x32, 0x07, 0x0d, 0x00, 0x26, 0x01, 0xc2, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...2...&.......j + 0x01, 0xad, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, // ...].....EX../.. + 0x1a, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x12, 0x3e, // ..>Y..EX../....> + 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x15, 0x00, 0x00, 0x06, 0x04, 0x05, 0xb6, 0x00, 0x26, // Y01............& + 0x01, 0xe2, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0xde, 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, // .......j.....3.. + 0x7f, 0x17, 0x01, 0x72, 0xb4, 0xdf, 0x17, 0xef, 0x17, 0x02, 0x71, 0xb2, 0x5f, 0x17, 0x01, 0x72, // ...r......q._..r + 0xb4, 0x2f, 0x17, 0x3f, 0x17, 0x02, 0x72, 0xb2, 0x7f, 0x1a, 0x01, 0x72, 0xb4, 0xdf, 0x1a, 0xef, // ./.?..r....r.... + 0x1a, 0x02, 0x71, 0xb2, 0x5f, 0x1a, 0x01, 0x72, 0xb4, 0x2f, 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0x30, // ..q._..r./.?..r0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x78, 0xff, 0xeb, 0x04, 0xdf, 0x07, 0x22, 0x02, 0x26, // 1......x.....".& + 0x01, 0xc3, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0xa9, 0x01, 0x72, 0x00, 0x1d, 0x00, 0xb0, // .......j...r.... + 0x00, 0x45, 0x58, 0xb0, 0x2f, 0x2f, 0x1b, 0xb1, 0x2f, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX.//../.>Y..EX + 0xb0, 0x2c, 0x2f, 0x1b, 0xb1, 0x2c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x58, // .,/..,.>Y01....X + 0xff, 0xed, 0x03, 0xae, 0x05, 0xca, 0x00, 0x26, 0x01, 0xe3, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, // .......&.......j + 0x25, 0x1a, 0x00, 0x39, 0x00, 0xb2, 0xf0, 0x2c, 0x01, 0x71, 0xb4, 0x00, 0x2c, 0x10, 0x2c, 0x02, // %..9...,.q..,.,. + 0x72, 0xb2, 0xdf, 0x2c, 0x01, 0x71, 0xb2, 0x60, 0x2c, 0x01, 0x72, 0xb2, 0x40, 0x2c, 0x01, 0x72, // r..,.q.`,.r.@,.r + 0xb2, 0xf0, 0x2f, 0x01, 0x71, 0xb4, 0x00, 0x2f, 0x10, 0x2f, 0x02, 0x72, 0xb2, 0xdf, 0x2f, 0x01, // ../.q.././.r../. + 0x71, 0xb2, 0x60, 0x2f, 0x01, 0x72, 0xb2, 0x40, 0x2f, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, // q.`/.r.@/.r01... + 0x00, 0x01, 0x00, 0x69, 0xff, 0xeb, 0x04, 0x2d, 0x05, 0xb0, 0x00, 0x1c, 0x00, 0x53, 0x00, 0xb0, // ...i...-.....S.. + 0x1c, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb0, 0x03, 0x10, 0xb1, // .EX../....>Y.... + 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1c, 0x10, 0xb0, 0x06, // ....+X!...Y..... + 0xd0, 0xb0, 0x0c, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // .........+X!...Y + 0xb0, 0x1c, 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ........+X!...Y0 + 0x31, 0x01, 0x27, 0x21, 0x35, 0x21, 0x17, 0x01, 0x16, 0x16, 0x15, 0x14, 0x04, 0x23, 0x22, 0x24, // 1.'!5!.......#"$ + 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x03, 0x0d, // 773..32654&##5.. + 0x02, 0xfd, 0x89, 0x03, 0x65, 0x01, 0xfe, 0x67, 0xdb, 0xf1, 0xfe, 0xee, 0xdd, 0xc0, 0xfe, 0xeb, // ....e..g........ + 0x05, 0x02, 0xbd, 0x98, 0x79, 0x8b, 0x9f, 0xa1, 0xa0, 0x92, 0x05, 0x10, 0x05, 0x9b, 0x78, 0xfe, // ....y.........x. + 0x15, 0x0d, 0xe3, 0xc7, 0xc8, 0xe3, 0xd6, 0xcd, 0x06, 0x72, 0x9d, 0x95, 0x78, 0x99, 0x8f, 0x9a, // .........r..x... + 0x00, 0x01, 0x00, 0x69, 0xfe, 0x75, 0x04, 0x2d, 0x04, 0x3a, 0x00, 0x1c, 0x00, 0x47, 0x00, 0xb0, // ...i.u.-.:...G.. + 0x1c, 0x2f, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, // ./../..EX../.... + 0x3e, 0x59, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1c, // >Y.....+X!...Y.. + 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x06, 0x1b, // ......+X!...Y... + 0x1c, 0x11, 0x12, 0x39, 0xb0, 0x0c, 0x10, 0xb1, 0x14, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...9........+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x27, 0x21, 0x35, 0x21, 0x17, 0x01, 0x16, 0x16, 0x15, 0x14, // ..Y01.'!5!...... + 0x04, 0x23, 0x22, 0x24, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, // .#"$773..32654&# + 0x23, 0x35, 0x02, 0xf8, 0x03, 0xfd, 0x9f, 0x03, 0x65, 0x01, 0xfe, 0x74, 0xd6, 0xe9, 0xfe, 0xed, // #5......e..t.... + 0xdc, 0xbf, 0xfe, 0xea, 0x05, 0x02, 0xbd, 0x98, 0x79, 0x8b, 0x9f, 0xa2, 0xa0, 0x93, 0x03, 0x99, // ........y....... + 0x05, 0x9c, 0x78, 0xfe, 0x13, 0x10, 0xe2, 0xc4, 0xc6, 0xe4, 0xd7, 0xcb, 0x06, 0x70, 0x9d, 0x95, // ..x..........p.. + 0x76, 0x9a, 0x8e, 0x9a, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x06, 0xfa, 0x02, 0x26, // v..............& + 0x01, 0xc4, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, 0x00, 0xff, 0x01, 0x4a, 0x00, 0x08, 0x00, 0xb2, // .......q...J.... + 0x0f, 0x0d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfc, // ...]01.......... + 0x05, 0xa5, 0x02, 0x26, 0x01, 0xe4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x71, 0x67, 0xf5, 0x00, 0x00, // ...&.......qg... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x05, 0x01, 0x07, 0x0d, 0x02, 0x26, 0x01, 0xc4, 0x00, 0x00, // ...........&.... + 0x01, 0x07, 0x00, 0x6a, 0x00, 0xdb, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...j...].....EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x03, 0xfc, // ...>Y01......... + 0x05, 0xb6, 0x02, 0x26, 0x01, 0xe4, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x43, 0x06, 0x00, 0x33, // ...&.......jC..3 + 0x00, 0xb2, 0x7f, 0x0d, 0x01, 0x72, 0xb4, 0xdf, 0x0d, 0xef, 0x0d, 0x02, 0x71, 0xb2, 0x5f, 0x0d, // .....r......q._. + 0x01, 0x72, 0xb4, 0x2f, 0x0d, 0x3f, 0x0d, 0x02, 0x72, 0xb2, 0x7f, 0x10, 0x01, 0x72, 0xb4, 0xdf, // .r./.?..r....r.. + 0x10, 0xef, 0x10, 0x02, 0x71, 0xb2, 0x5f, 0x10, 0x01, 0x72, 0xb4, 0x2f, 0x10, 0x3f, 0x10, 0x02, // ....q._..r./.?.. + 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x22, 0x02, 0x26, // r01....q.....".& + 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0xb8, 0x01, 0x72, 0x00, 0x1d, 0x00, 0xb0, // .2.....j...r.... + 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX. /.. .>Y..EX + 0xb0, 0x1d, 0x2f, 0x1b, 0xb1, 0x1d, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, // ../....>Y01....a + 0xff, 0xeb, 0x04, 0x2a, 0x05, 0xcb, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, // ...*...&.R.....j + 0x44, 0x1b, 0x00, 0x2f, 0x00, 0xb2, 0xf0, 0x1d, 0x01, 0x71, 0xb4, 0x00, 0x1d, 0x10, 0x1d, 0x02, // D../.....q...... + 0x72, 0xb2, 0x60, 0x1d, 0x01, 0x72, 0xb2, 0x40, 0x1d, 0x01, 0x72, 0xb2, 0xf0, 0x20, 0x01, 0x71, // r.`..r.@..r.. .q + 0xb4, 0x00, 0x20, 0x10, 0x20, 0x02, 0x72, 0xb2, 0x60, 0x20, 0x01, 0x72, 0xb2, 0x40, 0x20, 0x01, // .. . .r.` .r.@ . + 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x02, 0x06, // r01....q........ + 0x02, 0x1e, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x04, 0x4e, 0x02, 0x06, // .......a...*.N.. + 0x02, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0x08, 0x02, 0x26, // .......q.......& + 0x02, 0x1e, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0xce, 0x01, 0x58, 0x00, 0x1d, 0x00, 0xb0, // .......j...X.... + 0x00, 0x45, 0x58, 0xb0, 0x24, 0x2f, 0x1b, 0xb1, 0x24, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX.$/..$.>Y..EX + 0xb0, 0x21, 0x2f, 0x1b, 0xb1, 0x21, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x61, // .!/..!.>Y01....a + 0xff, 0xeb, 0x04, 0x2a, 0x05, 0xe7, 0x02, 0x26, 0x02, 0x1f, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, // ...*...&.......j + 0x2d, 0x37, 0x00, 0x83, 0x00, 0xb2, 0x60, 0x21, 0x01, 0x72, 0x40, 0x09, 0xc0, 0x21, 0xd0, 0x21, // -7....`!.r@..!.! + 0xe0, 0x21, 0xf0, 0x21, 0x04, 0x5d, 0x40, 0x1b, 0x00, 0x21, 0x10, 0x21, 0x20, 0x21, 0x30, 0x21, // .!.!.]@..!.! !0! + 0x40, 0x21, 0x50, 0x21, 0x60, 0x21, 0x70, 0x21, 0x80, 0x21, 0x90, 0x21, 0xa0, 0x21, 0xb0, 0x21, // @!P!`!p!.!.!.!.! + 0xc0, 0x21, 0x0d, 0x71, 0xb2, 0x40, 0x21, 0x01, 0x72, 0xb2, 0xf0, 0x21, 0x01, 0x71, 0xb4, 0x00, // .!.q.@!.r..!.q.. + 0x21, 0x10, 0x21, 0x02, 0x72, 0xb2, 0x60, 0x24, 0x01, 0x72, 0x40, 0x09, 0xc0, 0x24, 0xd0, 0x24, // !.!.r.`$.r@..$.$ + 0xe0, 0x24, 0xf0, 0x24, 0x04, 0x5d, 0x40, 0x1b, 0x00, 0x24, 0x10, 0x24, 0x20, 0x24, 0x30, 0x24, // .$.$.]@..$.$ $0$ + 0x40, 0x24, 0x50, 0x24, 0x60, 0x24, 0x70, 0x24, 0x80, 0x24, 0x90, 0x24, 0xa0, 0x24, 0xb0, 0x24, // @$P$`$p$.$.$.$.$ + 0xc0, 0x24, 0x0d, 0x71, 0xb2, 0x40, 0x24, 0x01, 0x72, 0xb2, 0xf0, 0x24, 0x01, 0x71, 0xb4, 0x00, // .$.q.@$.r..$.q.. + 0x24, 0x10, 0x24, 0x02, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb5, 0xff, 0xec, 0x04, 0xff, // $.$.r01......... + 0x07, 0x23, 0x02, 0x26, 0x01, 0xd9, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0xb2, 0x01, 0x73, // .#.&.......j...s + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x26, 0x2f, 0x1b, 0xb1, 0x26, 0x12, 0x3e, 0x59, // .....EX.&/..&.>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x23, 0x2f, 0x1b, 0xb1, 0x23, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX.#/..#.>Y01. + 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xe3, 0x05, 0xcb, 0x02, 0x26, 0x01, 0xf9, 0x00, 0x00, // ...c.......&.... + 0x01, 0x06, 0x00, 0x6a, 0x21, 0x1b, 0x00, 0x2f, 0x00, 0xb2, 0xf0, 0x23, 0x01, 0x71, 0xb4, 0x00, // ...j!../...#.q.. + 0x23, 0x10, 0x23, 0x02, 0x72, 0xb2, 0x60, 0x23, 0x01, 0x72, 0xb2, 0x40, 0x23, 0x01, 0x72, 0xb2, // #.#.r.`#.r.@#.r. + 0xf0, 0x26, 0x01, 0x71, 0xb4, 0x00, 0x26, 0x10, 0x26, 0x02, 0x72, 0xb2, 0x60, 0x26, 0x01, 0x72, // .&.q..&.&.r.`&.r + 0xb2, 0x40, 0x26, 0x01, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x55, 0xff, 0xeb, 0x04, 0xc8, // .@&.r01....U.... + 0x06, 0xfa, 0x02, 0x26, 0x01, 0xcf, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, 0x00, 0xa8, 0x01, 0x4a, // ...&.......q...J + 0x00, 0x08, 0x00, 0xb2, 0x0f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, // .......]01...... + 0xfe, 0x4b, 0x03, 0xe8, 0x05, 0xa5, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x71, // .K.....&.......q + 0x24, 0xf5, 0x00, 0x00, 0xff, 0xff, 0x00, 0x55, 0xff, 0xeb, 0x04, 0xc8, 0x07, 0x0d, 0x02, 0x26, // $......U.......& + 0x01, 0xcf, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0x84, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, // .......j...].... + 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1a, // ../....>Y01..... + 0xfe, 0x4b, 0x03, 0xe8, 0x05, 0xb6, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, // .K.....&.......j + 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x17, 0x01, 0x72, 0xb4, 0xdf, 0x17, 0xef, 0x17, 0x02, // ...3.....r...... + 0x71, 0xb2, 0x5f, 0x17, 0x01, 0x72, 0xb4, 0x2f, 0x17, 0x3f, 0x17, 0x02, 0x72, 0xb2, 0x7f, 0x1a, // q._..r./.?..r... + 0x01, 0x72, 0xb4, 0xdf, 0x1a, 0xef, 0x1a, 0x02, 0x71, 0xb2, 0x5f, 0x1a, 0x01, 0x72, 0xb4, 0x2f, // .r......q._..r./ + 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x55, 0xff, 0xeb, 0x04, 0xc8, // .?..r01....U.... + 0x07, 0x4b, 0x02, 0x26, 0x01, 0xcf, 0x00, 0x00, 0x01, 0x07, 0x01, 0x59, 0x01, 0x36, 0x01, 0x5d, // .K.&.......Y.6.] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xfc, 0x05, 0xf4, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, // .....K.....&.... + 0x01, 0x07, 0x01, 0x59, 0x00, 0xb2, 0x00, 0x06, 0x00, 0x0d, 0x00, 0xb2, 0xdf, 0x19, 0x01, 0x71, // ...Y...........q + 0xb2, 0xdf, 0x1f, 0x01, 0x71, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x93, 0x00, 0x00, 0x04, 0xcc, // ....q01......... + 0x07, 0x0d, 0x02, 0x26, 0x01, 0xd3, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x00, 0xae, 0x01, 0x5d, // ...&.......j...] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, 0x1b, 0xb1, 0x18, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0xff, 0xff, 0x00, 0x7f, 0x00, 0x00, 0x03, 0xdc, 0x05, 0xb6, 0x02, 0x26, 0x01, 0xf3, 0x00, 0x00, // ...........&.... + 0x01, 0x06, 0x00, 0x6a, 0x26, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x15, 0x01, 0x72, 0xb4, 0xdf, // ...j&..3.....r.. + 0x15, 0xef, 0x15, 0x02, 0x71, 0xb2, 0x5f, 0x15, 0x01, 0x72, 0xb4, 0x2f, 0x15, 0x3f, 0x15, 0x02, // ....q._..r./.?.. + 0x72, 0xb2, 0x7f, 0x18, 0x01, 0x72, 0xb4, 0xdf, 0x18, 0xef, 0x18, 0x02, 0x71, 0xb2, 0x5f, 0x18, // r....r......q._. + 0x01, 0x72, 0xb4, 0x2f, 0x18, 0x3f, 0x18, 0x02, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, // .r./.?..r01..... + 0xfe, 0x99, 0x04, 0x31, 0x05, 0xb0, 0x02, 0x26, 0x01, 0x6e, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, // ...1...&.n...... + 0x00, 0xe5, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x99, 0x03, 0x3f, 0x04, 0x3a, 0x02, 0x26, // ...........?.:.& + 0x01, 0xdf, 0x00, 0x00, 0x00, 0x07, 0x03, 0x99, 0x00, 0x9f, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // ................ + 0x00, 0x00, 0x06, 0x43, 0x07, 0x0d, 0x00, 0x26, 0x01, 0xd8, 0x11, 0x00, 0x00, 0x27, 0x00, 0x2c, // ...C...&.....'., + 0x04, 0xbf, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x01, 0x7a, 0x01, 0x5d, 0x00, 0x1d, 0x00, 0xb0, // .......j.z.].... + 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x12, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x19, 0x2f, 0x1b, 0xb1, 0x19, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xad, // ../....>Y01..... + 0x00, 0x00, 0x05, 0x98, 0x05, 0xb6, 0x00, 0x26, 0x01, 0xf8, 0x14, 0x00, 0x00, 0x27, 0x00, 0xf3, // .......&.....'.. + 0x04, 0x3a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x01, 0x22, 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, // .:.....j."...3.. + 0x7f, 0x19, 0x01, 0x72, 0xb4, 0xdf, 0x19, 0xef, 0x19, 0x02, 0x71, 0xb2, 0x5f, 0x19, 0x01, 0x72, // ...r......q._..r + 0xb4, 0x2f, 0x19, 0x3f, 0x19, 0x02, 0x72, 0xb2, 0x7f, 0x1c, 0x01, 0x72, 0xb4, 0xdf, 0x1c, 0xef, // ./.?..r....r.... + 0x1c, 0x02, 0x71, 0xb2, 0x5f, 0x1c, 0x01, 0x72, 0xb4, 0x2f, 0x1c, 0x3f, 0x1c, 0x02, 0x72, 0x30, // ..q._..r./.?..r0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x41, 0xfe, 0x4b, 0x04, 0x7d, 0x05, 0xb0, 0x00, 0x26, // 1......A.K.}...& + 0x01, 0x6e, 0x4c, 0x00, 0x00, 0x26, 0x03, 0x82, 0xaf, 0x3f, 0x00, 0x07, 0x03, 0x9b, 0x01, 0x06, // .nL..&...?...... + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x42, 0xfe, 0x4b, 0x03, 0xa1, 0x04, 0x3a, 0x00, 0x26, // .......B.K...:.& + 0x01, 0xdf, 0x62, 0x00, 0x00, 0x26, 0x03, 0x82, 0xb0, 0x91, 0x00, 0x07, 0x03, 0x9b, 0x00, 0xf6, // ..b..&.......... + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x42, 0xfe, 0x4b, 0x05, 0x23, 0x05, 0xb0, 0x02, 0x26, // .......B.K.#...& + 0x00, 0x3b, 0x00, 0x00, 0x00, 0x07, 0x03, 0x9b, 0x03, 0xb1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2e, // .;.............. + 0xfe, 0x4b, 0x04, 0x3e, 0x04, 0x3a, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x07, 0x03, 0x9b, // .K.>.:.&.[...... + 0x02, 0xcc, 0x00, 0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0xd6, 0x05, 0xb0, 0x00, 0x11, // .......B........ + 0x00, 0x64, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, 0x3e, 0x59, // .d...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb2, 0x11, 0x02, 0x0e, 0x11, 0x12, 0x39, 0xb0, 0x11, // /....>Y......9.. + 0x2f, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x04, 0x05, // /.....+X!...Y... + 0x0b, 0x11, 0x12, 0x39, 0xb0, 0x07, 0xd0, 0xb0, 0x11, 0x10, 0xb0, 0x09, 0xd0, 0xb2, 0x0d, 0x0b, // ...9............ + 0x02, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x01, 0x23, 0x01, 0x01, 0x23, 0x01, 0x23, 0x35, // ...901.#.#..#.#5 + 0x33, 0x01, 0x33, 0x01, 0x01, 0x33, 0x01, 0x33, 0x03, 0xd5, 0xac, 0x01, 0xad, 0xeb, 0xfe, 0xa3, // 3.3..3.3........ + 0xfe, 0xa2, 0xee, 0x01, 0xad, 0x9b, 0x8d, 0xfe, 0x6b, 0xec, 0x01, 0x52, 0x01, 0x54, 0xee, 0xfe, // ........k..R.T.. + 0x6a, 0x9f, 0x02, 0x9b, 0xfd, 0x65, 0x02, 0x42, 0xfd, 0xbe, 0x02, 0x9b, 0x9b, 0x02, 0x7a, 0xfd, // j....e.B......z. + 0xc8, 0x02, 0x38, 0xfd, 0x86, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2e, 0x00, 0x00, 0x03, 0xd4, // ..8............. + 0x04, 0x3a, 0x00, 0x11, 0x00, 0x64, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, // .:...d...EX../.. + 0x0b, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb2, 0x11, 0x02, 0x0e, 0x11, // EX../....>Y..... + 0x12, 0x39, 0xb0, 0x11, 0x2f, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .9../.....+X!... + 0x59, 0xb2, 0x04, 0x05, 0x0b, 0x11, 0x12, 0x39, 0xb0, 0x07, 0xd0, 0xb0, 0x11, 0x10, 0xb0, 0x09, // Y......9........ + 0xd0, 0xb2, 0x0d, 0x0b, 0x05, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x01, 0x23, 0x03, 0x03, // .......901.#.#.. + 0x23, 0x01, 0x23, 0x35, 0x33, 0x01, 0x33, 0x13, 0x13, 0x33, 0x01, 0x33, 0x03, 0x38, 0xa0, 0x01, // #.#53.3..3.3.8.. + 0x3c, 0xe2, 0xf0, 0xf0, 0xe4, 0x01, 0x3b, 0xb2, 0xa7, 0xfe, 0xda, 0xe3, 0xe3, 0xe6, 0xe6, 0xfe, // <.....;......... + 0xd9, 0x95, 0x01, 0xde, 0xfe, 0x22, 0x01, 0x99, 0xfe, 0x67, 0x01, 0xde, 0x9b, 0x01, 0xc1, 0xfe, // ....."...g...... + 0x71, 0x01, 0x8f, 0xfe, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x04, 0x72, // q...?......[...r + 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x13, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .......;.../..EX + 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ....>Y.....+X!.. + 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y........+X!... + 0x59, 0x30, 0x31, 0x01, 0x11, 0x33, 0x11, 0x21, 0x22, 0x24, 0x35, 0x34, 0x24, 0x33, 0x01, 0x11, // Y01..3.!"$54$3.. + 0x21, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x03, 0xad, 0xc5, 0xfd, 0xd4, 0xe9, 0xfe, 0xfe, 0x01, // !"....3......... + 0x01, 0xea, 0x01, 0x67, 0xfe, 0x99, 0x94, 0x92, 0x92, 0x94, 0x03, 0x70, 0x02, 0x40, 0xfa, 0x50, // ...g.......p.@.P + 0xf6, 0xc6, 0xc5, 0xef, 0xfd, 0x2a, 0x02, 0x3b, 0xa0, 0x77, 0x7b, 0xa9, 0xff, 0xff, 0x00, 0x62, // .....*.;.w{....b + 0xff, 0xeb, 0x03, 0xf5, 0x06, 0x18, 0x02, 0x06, 0x00, 0x47, 0x00, 0x00, 0x00, 0x02, 0x00, 0x5b, // .........G.....[ + 0x00, 0x00, 0x06, 0x6e, 0x05, 0xb0, 0x00, 0x18, 0x00, 0x21, 0x00, 0x41, 0x00, 0xb0, 0x07, 0x2f, // ...n.....!.A.../ + 0xb0, 0x11, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, // ../..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb1, 0x0a, 0x02, // ..EX../....>Y... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x19, 0xd0, 0xb0, 0x07, 0x10, 0xb1, // ..+X!...Y....... + 0x1a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x22, 0x24, // ....+X!...Y01!"$ + 0x35, 0x34, 0x24, 0x33, 0x21, 0x11, 0x33, 0x11, 0x37, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x33, // 54$3!.3.76676&'3 + 0x16, 0x16, 0x07, 0x06, 0x06, 0x23, 0x25, 0x11, 0x21, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x02, // .....#%.!"....3. + 0x46, 0xe9, 0xfe, 0xfe, 0x01, 0x01, 0xea, 0x01, 0x67, 0xc5, 0x53, 0x6a, 0x74, 0x04, 0x01, 0x1f, // F.......g.Sjt... + 0x1e, 0xbe, 0x21, 0x24, 0x02, 0x04, 0xf3, 0xb0, 0xfe, 0xe8, 0xfe, 0x99, 0x94, 0x92, 0x92, 0x94, // ..!$............ + 0xf6, 0xc6, 0xc5, 0xef, 0x02, 0x40, 0xfa, 0xe9, 0x01, 0x01, 0x8d, 0x7e, 0x4d, 0xa7, 0x4f, 0x64, // .....@.....~M.Od + 0x97, 0x48, 0xcc, 0xda, 0x9a, 0x02, 0x3b, 0xa0, 0x77, 0x7b, 0xa9, 0x00, 0x00, 0x02, 0x00, 0x62, // .H....;.w{.....b + 0xff, 0xe9, 0x06, 0x74, 0x06, 0x18, 0x00, 0x22, 0x00, 0x33, 0x00, 0x59, 0x00, 0xb0, 0x07, 0x2f, // ...t...".3.Y.../ + 0xb0, 0x12, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, // ../..EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, 0xb1, 0x19, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x06, 0x3e, 0x59, 0xb2, 0x2f, 0x07, 0x01, 0x5d, 0xb0, // X../....>Y./..]. + 0x19, 0x10, 0xb1, 0x0c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, // .......+X!...Y.. + 0x10, 0xb1, 0x26, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, 0x10, // ..&...+X!...Y... + 0xb0, 0x2d, 0xd0, 0x30, 0x31, 0x13, 0x10, 0x12, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x06, // .-.01...32...3.. + 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x16, 0x07, 0x02, 0x00, 0x23, 0x06, // .36676&'7.....#. + 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x01, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, // &'..#".5.&&#"... + 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x26, 0x26, 0x35, 0x62, 0xdf, 0xc9, 0x59, 0x8c, 0x34, 0xc5, // ..3267&&5b..Y.4. + 0x02, 0x5c, 0x4d, 0x86, 0x94, 0x04, 0x01, 0x1f, 0x1e, 0xbe, 0x21, 0x24, 0x02, 0x04, 0xfe, 0xec, // ..M.......!$.... + 0xcb, 0x78, 0xa3, 0x29, 0x35, 0xa1, 0x6d, 0xc6, 0xe0, 0x02, 0xc1, 0x27, 0x72, 0x4e, 0x8e, 0x87, // .x.)5.m....'rN.. + 0x86, 0x8d, 0x54, 0x74, 0x27, 0x03, 0x03, 0x02, 0x09, 0x01, 0x05, 0x01, 0x40, 0x3e, 0x3b, 0x02, // ..Tt'.......@>;. + 0x43, 0xfb, 0x41, 0x5f, 0x75, 0x01, 0xd2, 0xb9, 0x61, 0xcb, 0x66, 0x01, 0x7a, 0xbd, 0x5c, 0xfe, // C.A_u...a.f.z... + 0xf6, 0xfe, 0xe4, 0x02, 0x55, 0x5d, 0x57, 0x59, 0x01, 0x1f, 0xea, 0x01, 0x3d, 0x3a, 0x43, 0xea, // ....U]WY....=:C. + 0xbb, 0x15, 0xa4, 0xc5, 0x49, 0x42, 0x0f, 0x22, 0x12, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, // ....IB.".......6 + 0xff, 0xe8, 0x05, 0xd3, 0x05, 0xb0, 0x00, 0x2c, 0x00, 0x57, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x22, // .......,.W.../." + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // /..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x29, 0x2f, 0x1b, 0xb1, 0x29, 0x06, 0x3e, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x05, // EX.)/..).>Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x0c, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x15, 0x04, 0x05, 0x11, 0x12, 0x39, // ..+X!...Y......9 + 0xb0, 0x29, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // .)......+X!...Y0 + 0x31, 0x01, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, // 1.4&##532654&#!5 + 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x15, 0x06, 0x16, 0x33, 0x36, 0x36, // !2...........366 + 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x02, 0x02, 0x23, 0x06, 0x26, 0x27, 0x02, 0xbf, // 76&'3.....#.&'.. + 0x89, 0x74, 0xbf, 0x88, 0xa6, 0x93, 0x8f, 0x98, 0xfe, 0x99, 0x01, 0x67, 0xef, 0xfd, 0x75, 0x6f, // .t.........g..uo + 0x76, 0x69, 0x01, 0x4f, 0x43, 0x74, 0x80, 0x04, 0x01, 0x1f, 0x1e, 0xbe, 0x22, 0x22, 0x01, 0x04, // vi.OCt......"".. + 0xfe, 0xbb, 0xa0, 0xae, 0x08, 0x01, 0x72, 0x76, 0x91, 0x9b, 0x7e, 0x83, 0x79, 0x87, 0x9b, 0xd4, // ......rv..~.y... + 0xc9, 0x71, 0xa5, 0x31, 0x28, 0xb0, 0x80, 0x44, 0x4c, 0x5f, 0x01, 0xd4, 0xb7, 0x61, 0xcc, 0x66, // .q.1(..DL_...a.f + 0x86, 0xb3, 0x5a, 0xfe, 0xf7, 0xfe, 0xe3, 0x03, 0x9d, 0xab, 0x00, 0x00, 0x00, 0x01, 0x00, 0x31, // ..Z............1 + 0xff, 0xe3, 0x04, 0xeb, 0x04, 0x3a, 0x00, 0x2c, 0x00, 0x54, 0x00, 0xb0, 0x18, 0x2f, 0xb0, 0x09, // .....:.,.T.../.. + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // /..EX."/..".>Y.. + 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb1, 0x03, 0x02, 0xb0, 0x0a, // EX../....>Y..... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x18, 0x10, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x22, 0x10, 0xb1, 0x20, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y.".. ...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x29, 0x18, 0x19, 0x11, 0x12, 0x39, 0x30, 0x31, 0x25, 0x06, // !...Y.)....901%. + 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x06, 0x06, 0x23, 0x06, // .36676&'3.....#. + 0x26, 0x27, 0x35, 0x34, 0x26, 0x23, 0x23, 0x27, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, // &'54&##'32654&#! + 0x27, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x02, 0xec, 0x01, 0x27, 0x2f, // '!2...........'/ + 0x6a, 0x75, 0x04, 0x01, 0x20, 0x1e, 0xbe, 0x22, 0x24, 0x02, 0x05, 0xf2, 0xb1, 0x8a, 0x8a, 0x06, // ju.. .."$....... + 0x6a, 0x62, 0xd3, 0x02, 0xb8, 0x77, 0x71, 0x72, 0x77, 0xfe, 0xfa, 0x06, 0x01, 0x0c, 0xce, 0xe2, // jb...wqrw....... + 0x60, 0x5d, 0x63, 0x59, 0xd5, 0x2a, 0x2c, 0x02, 0x99, 0x89, 0x4c, 0xa4, 0x4f, 0x66, 0x92, 0x47, // `]cY.*,...L.Of.G + 0xd7, 0xe6, 0x03, 0x72, 0x81, 0x4b, 0x47, 0x4f, 0x9a, 0x53, 0x4d, 0x51, 0x5f, 0x99, 0xaa, 0x98, // ...r.KGO.SMQ_... + 0x51, 0x72, 0x24, 0x1c, 0x7a, 0x59, 0x00, 0x00, 0x00, 0x01, 0x00, 0x50, 0xfe, 0xfc, 0x03, 0xd1, // Qr$.zY.....P.... + 0x05, 0xb0, 0x00, 0x23, 0x00, 0x54, 0x00, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, // ...#.T.../..EX.. + 0x2f, 0x1b, 0xb1, 0x16, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ..>Y........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x16, 0x10, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0xb2, 0x1d, 0x0c, 0x0d, 0x11, 0x12, 0x39, 0xb0, 0x03, 0x10, 0xb1, 0x22, 0x04, 0xb0, // .Y......9....".. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x03, 0x23, 0x13, 0x23, 0x26, // .+X!...Y01%.#.#& + 0x26, 0x35, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, // &554&##532654&#! + 0x35, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x1d, 0x02, 0x33, 0x03, 0xd1, 0x96, // 5!2.........3... + 0x75, 0x39, 0x3d, 0x29, 0x15, 0x89, 0x74, 0xdc, 0xa2, 0xa7, 0x95, 0x8f, 0x98, 0xfe, 0xee, 0x01, // u9=)..t......... + 0x12, 0xef, 0xfc, 0x75, 0x6f, 0x77, 0x69, 0x88, 0x2e, 0xfe, 0xce, 0x01, 0x04, 0x23, 0x83, 0x47, // ...uowi......#.G + 0x84, 0x76, 0x91, 0x9a, 0x7f, 0x82, 0x7a, 0x88, 0x9b, 0xd4, 0xcb, 0x70, 0xa6, 0x30, 0x28, 0xb0, // .v....z....p.0(. + 0x80, 0x88, 0x10, 0x00, 0x00, 0x01, 0x00, 0x7b, 0xfe, 0xe8, 0x03, 0xc1, 0x04, 0x3a, 0x00, 0x22, // .......{.....:." + 0x00, 0x54, 0x00, 0xb0, 0x0c, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, // .T.../..EX../... + 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x0c, 0x10, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x16, 0x10, 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x1d, // .......+X!...Y.. + 0x0c, 0x0d, 0x11, 0x12, 0x39, 0xb0, 0x04, 0x10, 0xb1, 0x21, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ....9....!...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x03, 0x23, 0x13, 0x23, 0x26, 0x26, 0x35, 0x35, 0x34, // ...Y01%.#.#&&554 + 0x26, 0x23, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x35, 0x21, 0x32, 0x16, // &##532654&#!5!2. + 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x15, 0x33, 0x03, 0xc1, 0x96, 0x75, 0x3e, 0x3f, 0x25, // ........3...u>?% + 0x14, 0x6a, 0x62, 0xef, 0xd2, 0x78, 0x70, 0x71, 0x77, 0xfe, 0xe8, 0x01, 0x18, 0xcd, 0xe1, 0x61, // .jb..xpqw......a + 0x5e, 0x66, 0x59, 0x80, 0x1a, 0xfe, 0xce, 0x01, 0x18, 0x17, 0x63, 0x33, 0x5f, 0x50, 0x5b, 0x9a, // ^fY.......c3_P[. + 0x53, 0x4e, 0x51, 0x5e, 0x99, 0xa9, 0x99, 0x51, 0x74, 0x24, 0x1d, 0x84, 0x61, 0x46, 0x00, 0x00, // SNQ^...Qt$..aF.. + 0x00, 0x01, 0x00, 0x45, 0xff, 0xe8, 0x07, 0x75, 0x05, 0xb0, 0x00, 0x21, 0x00, 0x5a, 0x00, 0xb0, // ...E...u...!.Z.. + 0x17, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x1e, 0x2f, 0x1b, 0xb1, 0x1e, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x00, 0x02, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1e, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x10, 0x02, 0x23, 0x23, 0x35, // X!...Y01.!...##5 + 0x33, 0x32, 0x12, 0x11, 0x11, 0x21, 0x11, 0x06, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, // 32...!...36676&' + 0x37, 0x16, 0x16, 0x07, 0x02, 0x00, 0x23, 0x06, 0x26, 0x27, 0x04, 0x24, 0xfe, 0x28, 0xd8, 0xfa, // 7.....#.&'.$.(.. + 0x35, 0x29, 0x95, 0x85, 0x03, 0x61, 0x01, 0x5b, 0x4d, 0x87, 0x93, 0x04, 0x01, 0x1f, 0x1e, 0xbe, // 5)...a.[M....... + 0x21, 0x24, 0x02, 0x04, 0xfe, 0xec, 0xcb, 0xaa, 0xba, 0x08, 0x05, 0x15, 0xfd, 0xeb, 0xfe, 0x72, // !$.............r + 0xfe, 0x8e, 0x9a, 0x01, 0x20, 0x01, 0x46, 0x02, 0xb0, 0xfb, 0xa9, 0x5f, 0x75, 0x01, 0xd2, 0xb9, // .... .F...._u... + 0x61, 0xcb, 0x66, 0x01, 0x7a, 0xbd, 0x5c, 0xfe, 0xf6, 0xfe, 0xe4, 0x03, 0xb1, 0xc0, 0x00, 0x00, // a.f.z........... + 0x00, 0x01, 0x00, 0x41, 0xff, 0xe8, 0x06, 0x41, 0x04, 0x3a, 0x00, 0x21, 0x00, 0x5a, 0x00, 0xb0, // ...A...A.:.!.Z.. + 0x17, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0a, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x1e, 0x2f, 0x1b, 0xb1, 0x1e, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x00, 0x02, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x07, 0x03, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1e, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, // +X!...Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x10, 0x02, 0x23, 0x23, 0x37, // X!...Y01.!...##7 + 0x37, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x06, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, // 7265.!...36676&' + 0x33, 0x16, 0x16, 0x07, 0x06, 0x02, 0x23, 0x06, 0x26, 0x27, 0x03, 0x2d, 0xfe, 0xcd, 0xb2, 0xce, // 3.....#.&'.-.... + 0x39, 0x04, 0x29, 0x6b, 0x5c, 0x02, 0xbd, 0x01, 0x5a, 0x4c, 0x6b, 0x74, 0x04, 0x01, 0x20, 0x1e, // 9.)k....ZLkt.. . + 0xbf, 0x21, 0x24, 0x02, 0x04, 0xf3, 0xb1, 0xa8, 0xba, 0x08, 0x03, 0x9e, 0xfe, 0xd0, 0xfe, 0xc3, // .!$............. + 0xfe, 0xcf, 0xa8, 0x01, 0xd4, 0xf1, 0x01, 0xcc, 0xfd, 0x1f, 0x5f, 0x75, 0x01, 0xbb, 0xa4, 0x5c, // .........._u.... + 0xc0, 0x61, 0x78, 0xaf, 0x56, 0xf4, 0xfe, 0xfa, 0x03, 0xb1, 0xc0, 0x00, 0x00, 0x01, 0x00, 0xa9, // .ax.V........... + 0xff, 0xe8, 0x07, 0x7e, 0x05, 0xb0, 0x00, 0x1d, 0x00, 0xb6, 0x00, 0xb0, 0x1b, 0x2f, 0xb0, 0x0a, // ...~........./.. + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // /..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x19, 0x2f, 0x1b, 0xb1, 0x19, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x18, 0x06, 0x3e, 0x59, 0xb0, 0x11, 0x10, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x5f, 0x1b, 0x01, 0x5d, 0xb2, 0xaf, 0x1b, 0x01, 0x5d, 0xb4, 0xef, // ...Y._..]....].. + 0x1b, 0xff, 0x1b, 0x02, 0x5d, 0xb2, 0x4f, 0x1b, 0x01, 0x71, 0xb2, 0x9f, 0x1b, 0x01, 0x71, 0xb2, // ....].O..q....q. + 0xef, 0x1b, 0x01, 0x71, 0xb2, 0x3f, 0x1b, 0x01, 0x72, 0xb4, 0x8f, 0x1b, 0x9f, 0x1b, 0x02, 0x72, // ...q.?..r......r + 0xb2, 0x6f, 0x1b, 0x01, 0x72, 0xb2, 0x1f, 0x1b, 0x01, 0x72, 0xb4, 0xbf, 0x1b, 0xcf, 0x1b, 0x02, // .o..r....r...... + 0x71, 0xb2, 0x7f, 0x1b, 0x01, 0x71, 0xb2, 0x1f, 0x1b, 0x01, 0x71, 0xb2, 0xcf, 0x1b, 0x01, 0x5d, // q....q....q....] + 0xb2, 0x7f, 0x1b, 0x01, 0x5d, 0xb2, 0x2f, 0x1b, 0x01, 0x5d, 0xb2, 0xbf, 0x1b, 0x01, 0x72, 0xb0, // ....]./..]....r. + 0x1b, 0x10, 0xb1, 0x16, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x01, 0x11, 0x06, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x16, 0x07, 0x02, // ....36676&'7.... + 0x00, 0x23, 0x06, 0x26, 0x27, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x04, 0xf2, // .#.&'.!.#.3.!... + 0x01, 0x5a, 0x4d, 0x87, 0x94, 0x04, 0x01, 0x20, 0x1e, 0xbe, 0x22, 0x24, 0x02, 0x05, 0xfe, 0xec, // .ZM.... .."$.... + 0xcb, 0xa9, 0xba, 0x08, 0xfd, 0x41, 0xc5, 0xc5, 0x02, 0xbf, 0x05, 0xb0, 0xfb, 0xa9, 0x5f, 0x75, // .....A........_u + 0x01, 0xd2, 0xb9, 0x61, 0xca, 0x67, 0x01, 0x7c, 0xbb, 0x5c, 0xfe, 0xf6, 0xfe, 0xe4, 0x03, 0xb1, // ...a.g.|........ + 0xc0, 0x01, 0x2a, 0xfd, 0x7d, 0x05, 0xb0, 0xfd, 0x6e, 0x02, 0x92, 0x00, 0x00, 0x01, 0x00, 0x8f, // ..*.}...n....... + 0xff, 0xe8, 0x06, 0x55, 0x04, 0x3a, 0x00, 0x1d, 0x00, 0xb2, 0x00, 0xb0, 0x13, 0x2f, 0xb0, 0x06, // ...U.:......./.. + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0a, 0x3e, 0x59, 0xb0, 0x00, // /..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x1a, 0x06, 0x3e, 0x59, 0xb2, 0x9f, 0x06, 0x01, 0x5d, 0xb2, 0xff, 0x06, 0x01, 0x5d, 0xb2, // ...>Y....]....]. + 0x6f, 0x06, 0x01, 0x71, 0xb4, 0xcf, 0x06, 0xdf, 0x06, 0x02, 0x71, 0xb4, 0x3f, 0x06, 0x4f, 0x06, // o..q......q.?.O. + 0x02, 0x72, 0xb2, 0xaf, 0x06, 0x01, 0x72, 0xb4, 0xdf, 0x06, 0xef, 0x06, 0x02, 0x72, 0xb4, 0x6f, // .r....r......r.o + 0x06, 0x7f, 0x06, 0x02, 0x72, 0xb2, 0xff, 0x06, 0x01, 0x71, 0xb2, 0x0f, 0x06, 0x01, 0x72, 0xb2, // ....r....q....r. + 0x9f, 0x06, 0x01, 0x71, 0xb4, 0x2f, 0x06, 0x3f, 0x06, 0x02, 0x71, 0xb4, 0xbf, 0x06, 0xcf, 0x06, // ...q./.?..q..... + 0x02, 0x5d, 0xb2, 0x5f, 0x06, 0x01, 0x5d, 0xb2, 0x2f, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, // .]._..]./..].... + 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1a, 0x10, 0xb1, 0x0d, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, // ...+X!...Y01.!.# + 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x06, 0x16, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, // .3.!.3...36676&' + 0x33, 0x16, 0x16, 0x07, 0x06, 0x02, 0x23, 0x06, 0x26, 0x27, 0x03, 0x40, 0xfe, 0x14, 0xc5, 0xc5, // 3.....#.&'.@.... + 0x01, 0xec, 0xc5, 0x01, 0x5b, 0x4c, 0x6a, 0x75, 0x04, 0x01, 0x1f, 0x1e, 0xbd, 0x22, 0x24, 0x02, // ....[Lju....."$. + 0x04, 0xf2, 0xb2, 0xa9, 0xba, 0x08, 0x01, 0xcc, 0xfe, 0x34, 0x04, 0x3a, 0xfe, 0x2b, 0x01, 0xd5, // .........4.:.+.. + 0xfd, 0x1f, 0x5f, 0x75, 0x01, 0xbb, 0xa4, 0x5b, 0xc1, 0x61, 0x7b, 0xac, 0x56, 0xf4, 0xfe, 0xfa, // .._u...[.a{.V... + 0x03, 0xb1, 0xc0, 0x00, 0x00, 0x01, 0x00, 0x76, 0xff, 0xeb, 0x04, 0x9f, 0x05, 0xc5, 0x00, 0x21, // .......v.......! + 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0c, 0x3e, 0x59, // .;...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x07, 0x10, // ..EX../....>Y... + 0xb1, 0x0e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, // .....+X!...Y.... + 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x20, 0x00, // ....+X!...Y01. . + 0x11, 0x11, 0x10, 0x00, 0x21, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x02, 0x15, 0x11, // ....!2...&&#"... + 0x14, 0x12, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x06, 0x04, 0x02, // ..36676&'3...... + 0xb9, 0xff, 0x00, 0xfe, 0xbd, 0x01, 0x43, 0x01, 0x00, 0x71, 0xb2, 0x44, 0x3f, 0x43, 0x90, 0x55, // ......C..q.D?C.U + 0xaf, 0xcf, 0xcf, 0xaf, 0x88, 0x94, 0x04, 0x01, 0x1b, 0x18, 0xbe, 0x2a, 0x10, 0x01, 0x04, 0xfe, // ...........*.... + 0xeb, 0x15, 0x01, 0x5e, 0x01, 0x0c, 0x01, 0x06, 0x01, 0x0b, 0x01, 0x5f, 0x2d, 0x2b, 0x87, 0x21, // ...^......._-+.! + 0x23, 0xfe, 0xf6, 0xc3, 0xfe, 0xf8, 0xc6, 0xfe, 0xf6, 0x01, 0x9a, 0x89, 0x53, 0xb5, 0x61, 0xc5, // #...........S.a. + 0x56, 0x4e, 0xd8, 0xe6, 0x00, 0x01, 0x00, 0x62, 0xff, 0xeb, 0x03, 0xc6, 0x04, 0x4e, 0x00, 0x21, // VN.....b.....N.! + 0x00, 0x38, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x0a, 0x3e, 0x59, // .8...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, // ..EX../....>Y... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x14, 0x10, 0xb1, 0x1b, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x36, 0x36, 0x37, 0x34, 0x26, // .+X!...Y01%6674& + 0x27, 0x33, 0x16, 0x16, 0x15, 0x06, 0x06, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, // '3.....#".554.32 + 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x02, 0x51, 0x5f, 0x4e, // ...&&#"......Q_N + 0x03, 0x0a, 0x09, 0xbd, 0x0d, 0x0e, 0x04, 0xcc, 0xa5, 0xe6, 0xfe, 0xf7, 0xff, 0xdb, 0x5e, 0x8e, // ..............^. + 0x2f, 0x2e, 0x2f, 0x7a, 0x44, 0x89, 0x8c, 0x95, 0x85, 0x01, 0x53, 0x54, 0x3a, 0x7a, 0x38, 0x44, // /./zD.....ST:z8D + 0x73, 0x35, 0x9e, 0xa4, 0x01, 0x3a, 0xe3, 0x2a, 0xe2, 0x01, 0x3a, 0x23, 0x1f, 0x93, 0x1b, 0x1f, // s5...:.*..:#.... + 0xe7, 0x9a, 0x2a, 0x9e, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x24, 0xff, 0xe8, 0x05, 0x4d, // ..*........$...M + 0x05, 0xb0, 0x00, 0x19, 0x00, 0x41, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // .....A...EX../.. + 0x02, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x04, 0xd0, 0xb0, 0x05, 0xd0, 0xb0, 0x16, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ..............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x06, 0x16, // !...Y01.!5!.!... + 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x16, 0x07, 0x02, 0x00, 0x23, 0x06, 0x26, // 36676&'7.....#.& + 0x27, 0x01, 0xfc, 0xfe, 0x28, 0x04, 0x80, 0xfe, 0x1d, 0x01, 0x5b, 0x4c, 0x87, 0x95, 0x04, 0x01, // '...(.....[L.... + 0x20, 0x1f, 0xbf, 0x22, 0x23, 0x02, 0x04, 0xfe, 0xec, 0xcc, 0xa9, 0xba, 0x08, 0x05, 0x15, 0x9b, // .."#........... + 0x9b, 0xfc, 0x44, 0x5f, 0x75, 0x01, 0xd2, 0xb9, 0x60, 0xca, 0x68, 0x01, 0x7c, 0xbb, 0x5c, 0xfe, // ..D_u...`.h.|... + 0xf6, 0xfe, 0xe4, 0x03, 0xb1, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0xff, 0xe8, 0x04, 0xbd, // ...........F.... + 0x04, 0x3a, 0x00, 0x19, 0x00, 0x41, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, // .:...A...EX../.. + 0x02, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x04, 0xd0, 0xb0, 0x05, 0xd0, 0xb0, 0x16, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ..............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x06, 0x16, // !...Y01.!5!.!... + 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x06, 0x06, 0x23, 0x06, 0x26, // 36676&'3.....#.& + 0x27, 0x01, 0xa8, 0xfe, 0x9e, 0x03, 0x8b, 0xfe, 0x9c, 0x01, 0x5a, 0x4d, 0x6a, 0x75, 0x04, 0x01, // '.........ZMju.. + 0x20, 0x1d, 0xbd, 0x22, 0x24, 0x02, 0x04, 0xf3, 0xb1, 0xa9, 0xba, 0x08, 0x03, 0xa1, 0x99, 0x99, // .."$........... + 0xfd, 0xb8, 0x5f, 0x75, 0x01, 0x9b, 0x89, 0x4c, 0xa7, 0x50, 0x67, 0x94, 0x48, 0xd8, 0xe7, 0x03, // .._u...L.Pg.H... + 0xb1, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x9c, 0xff, 0xeb, 0x05, 0x02, 0x05, 0xc5, 0x00, 0x2a, // ...............* + 0x00, 0x6f, 0x00, 0xb0, 0x29, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, // .o..)/..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x7f, 0x29, 0x01, // .....+X!...Y..). + 0x5d, 0xb2, 0xef, 0x29, 0x01, 0x5d, 0xb2, 0x1f, 0x29, 0x01, 0x71, 0xb2, 0xcf, 0x29, 0x01, 0x5d, // ]..).]..).q..).] + 0xb2, 0x2f, 0x29, 0x01, 0x5d, 0xb2, 0xbf, 0x29, 0x01, 0x71, 0xb0, 0x29, 0x10, 0xb1, 0x2a, 0x02, // ./).]..).q.)..*. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x2a, 0x29, 0x11, 0x12, 0x39, // ..+X!...Y..*)..9 + 0xb0, 0x1a, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, // ...."...+X!...Y0 + 0x31, 0x01, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x33, 0x17, 0x16, 0x04, 0x23, // 1."....32653...# + 0x20, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x24, 0x21, 0x32, 0x04, 0x07, 0x07, // $5467&&54$!2... + 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x33, 0x15, 0x02, 0xcd, 0xb5, 0xb7, // #4&#"....33..... + 0xca, 0xb2, 0x9c, 0xc7, 0xbc, 0x02, 0x04, 0xfe, 0xbc, 0xe1, 0xfe, 0xfe, 0xfe, 0xc1, 0x8e, 0x87, // ................ + 0x78, 0x87, 0x01, 0x2a, 0x01, 0x01, 0xdf, 0x01, 0x32, 0x05, 0x01, 0xbc, 0xc3, 0x8c, 0xb2, 0xb4, // x..*....2....... + 0xa7, 0xaf, 0xb8, 0x02, 0x98, 0x81, 0x85, 0x78, 0x95, 0x9d, 0x72, 0x06, 0xcd, 0xd6, 0xe3, 0xc8, // .......x..r..... + 0x7e, 0xad, 0x2a, 0x30, 0xa6, 0x65, 0xc7, 0xd8, 0xdc, 0xb0, 0x06, 0x69, 0x8e, 0x90, 0x70, 0x72, // ~.*0.e.....i..pr + 0x84, 0x9c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x62, 0xff, 0xed, 0x03, 0xe9, 0x04, 0x4c, 0x02, 0x06, // .......b.....L.. + 0x01, 0x8f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x31, 0xfe, 0x4b, 0x05, 0xbb, 0x05, 0xb0, 0x02, 0x26, // .......1.K.....& + 0x01, 0xc7, 0x00, 0x00, 0x00, 0x07, 0x03, 0x9b, 0x04, 0x49, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, // .........I...... + 0xfe, 0x4b, 0x04, 0xc0, 0x04, 0x3a, 0x02, 0x26, 0x01, 0xe7, 0x00, 0x00, 0x00, 0x07, 0x03, 0x9b, // .K...:.&........ + 0x03, 0x4e, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0xfe, 0x85, 0x05, 0x1a, 0x05, 0xb0, 0x02, 0x26, // .N.............& + 0x00, 0x24, 0x00, 0x00, 0x00, 0x07, 0x01, 0x5a, 0x01, 0x55, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // .$.....Z.U.....j + 0xfe, 0x85, 0x03, 0xf3, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x00, 0x07, 0x01, 0x5a, // .....N.&.D.....Z + 0x00, 0x9c, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x06, 0x52, 0x07, 0x1e, 0x02, 0x26, // ...........R...& + 0x00, 0x30, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x02, 0xa6, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, // .0.....v...Y.... + 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x12, 0x01, // .EX../....>Y.... + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x06, 0x6f, 0x05, 0xdc, 0x02, 0x26, // ]01........o...& + 0x00, 0x50, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x02, 0xb7, 0x00, 0x17, 0x00, 0x1a, 0x00, 0xb2, // .P.....v........ + 0xbf, 0x27, 0x01, 0x71, 0xb6, 0xdf, 0x27, 0xef, 0x27, 0xff, 0x27, 0x03, 0x71, 0xb6, 0x0f, 0x27, // .'.q..'.'.'.q..' + 0x1f, 0x27, 0x2f, 0x27, 0x03, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x06, 0xcf, // .'/'.r01...6.... + 0x07, 0x22, 0x02, 0x26, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x01, 0xeb, 0x01, 0x5d, // .".&.:.....C...] + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x1a, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x2d, 0x00, 0x00, 0x05, 0xdc, // ....]01....-.... + 0x05, 0xcb, 0x02, 0x26, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x01, 0x6e, 0x00, 0x06, // ...&.Z.....C.n.. + 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x16, 0x01, 0x71, 0xb6, 0xdf, 0x16, 0xef, 0x16, 0xff, 0x16, 0x03, // .%.....q........ + 0x71, 0x40, 0x11, 0x0f, 0x16, 0x1f, 0x16, 0x2f, 0x16, 0x3f, 0x16, 0x4f, 0x16, 0x5f, 0x16, 0x6f, // q@...../.?.O._.o + 0x16, 0x7f, 0x16, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x06, 0xcf, // ....r01....6.... + 0x07, 0x1e, 0x02, 0x26, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x02, 0xa5, 0x01, 0x59, // ...&.:.....v...Y + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x2d, 0x00, 0x00, 0x05, 0xdc, // ....]01....-.... + 0x05, 0xc7, 0x02, 0x26, 0x00, 0x5a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x02, 0x28, 0x00, 0x02, // ...&.Z.....v.(.. + 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x19, 0x01, 0x71, 0xb6, 0xdf, 0x19, 0xef, 0x19, 0xff, 0x19, 0x03, // .%.....q........ + 0x71, 0x40, 0x11, 0x0f, 0x19, 0x1f, 0x19, 0x2f, 0x19, 0x3f, 0x19, 0x4f, 0x19, 0x5f, 0x19, 0x6f, // q@...../.?.O._.o + 0x19, 0x7f, 0x19, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x06, 0xcf, // ....r01....6.... + 0x07, 0x0d, 0x02, 0x26, 0x00, 0x3a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, 0x01, 0x80, 0x01, 0x5d, // ...&.:.....j...] + 0x00, 0x1d, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x17, 0x2f, 0x1b, 0xb1, 0x17, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, // ..EX../....>Y01. + 0xff, 0xff, 0x00, 0x2d, 0x00, 0x00, 0x05, 0xdc, 0x05, 0xb6, 0x02, 0x26, 0x00, 0x5a, 0x00, 0x00, // ...-.......&.Z.. + 0x01, 0x07, 0x00, 0x6a, 0x01, 0x03, 0x00, 0x06, 0x00, 0x33, 0x00, 0xb2, 0x7f, 0x17, 0x01, 0x72, // ...j.....3.....r + 0xb4, 0xdf, 0x17, 0xef, 0x17, 0x02, 0x71, 0xb2, 0x5f, 0x17, 0x01, 0x72, 0xb4, 0x2f, 0x17, 0x3f, // ......q._..r./.? + 0x17, 0x02, 0x72, 0xb2, 0x7f, 0x1a, 0x01, 0x72, 0xb4, 0xdf, 0x1a, 0xef, 0x1a, 0x02, 0x71, 0xb2, // ..r....r......q. + 0x5f, 0x1a, 0x01, 0x72, 0xb4, 0x2f, 0x1a, 0x3f, 0x1a, 0x02, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, // _..r./.?..r01... + 0xff, 0xff, 0x00, 0x14, 0xfe, 0xaf, 0x05, 0x1a, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // ...........&.$.. + 0x00, 0x07, 0x01, 0x60, 0x04, 0xee, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xfe, 0xaf, 0x03, 0xf3, // ...`.......j.... + 0x04, 0x4e, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x04, 0x52, 0x00, 0x00, // .N.&.D.....`.R.. + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x07, 0xc8, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // ...........&.$.. + 0x01, 0x07, 0x01, 0x5e, 0x04, 0xe8, 0x01, 0x52, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...^...R.....EX. + 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // ./....>Y01.....j + 0xff, 0xeb, 0x03, 0xf3, 0x06, 0x86, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, // .......&.D.....^ + 0x04, 0x7a, 0x00, 0x10, 0x00, 0x08, 0x00, 0xb2, 0x10, 0x2c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // .z.......,.]01.. + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x24, 0x07, 0xf1, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // .......$...&.$.. + 0x01, 0x07, 0x03, 0x92, 0x00, 0xb3, 0x01, 0x59, 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .......Y.....EX. + 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x12, 0x3e, 0x59, 0xb2, 0xe0, 0x12, 0x01, 0x5d, 0xb0, 0x18, 0xd0, // ./....>Y....]... + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x04, 0xae, 0x06, 0xaf, 0x02, 0x26, // 01.....j.......& + 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x92, 0x3d, 0x17, 0x00, 0x13, 0x00, 0xb0, 0x32, 0x2f, // .D......=.....2/ + 0xb2, 0x3f, 0x32, 0x01, 0x5d, 0xb2, 0x30, 0x32, 0x01, 0x72, 0xb0, 0x38, 0xd0, 0x30, 0x31, 0x00, // .?2.].02.r.8.01. + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x07, 0xe0, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // ...........&.$.. + 0x01, 0x07, 0x03, 0x93, 0x00, 0xc4, 0x01, 0x48, 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .......H.....EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0xb2, 0xe0, 0x10, 0x01, 0x5d, 0xb0, 0x15, 0xd0, // ./....>Y....]... + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xa3, 0xff, 0xeb, 0x03, 0xf3, 0x06, 0x9e, 0x02, 0x26, // 01.............& + 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x93, 0x4e, 0x06, 0x00, 0x0e, 0x00, 0xb0, 0x30, 0x2f, // .D......N.....0/ + 0xb2, 0x3f, 0x30, 0x01, 0x5d, 0xb0, 0x35, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, // .?0.].5.01...... + 0x00, 0x00, 0x05, 0x1a, 0x08, 0x05, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x03, 0x94, // .......&.$...... + 0x00, 0xbc, 0x01, 0x34, 0x00, 0x2f, 0x00, 0xb0, 0x0e, 0x2f, 0xb4, 0xdf, 0x0e, 0xef, 0x0e, 0x02, // ...4./.../...... + 0x5d, 0xb4, 0x3f, 0x0e, 0x4f, 0x0e, 0x02, 0x71, 0xb2, 0x0f, 0x0e, 0x01, 0x5d, 0xb4, 0x0f, 0x0e, // ].?.O..q....]... + 0x1f, 0x0e, 0x02, 0x71, 0xb4, 0x6f, 0x0e, 0x7f, 0x0e, 0x02, 0x5d, 0xb2, 0x3f, 0x0e, 0x01, 0x5d, // ...q.o....].?..] + 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x04, 0x77, // ...01......j...w + 0x06, 0xc5, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x94, 0x46, 0xf4, 0x00, 0x0e, // ...&.D......F... + 0x00, 0xb0, 0x30, 0x2f, 0xb2, 0x3f, 0x30, 0x01, 0x5d, 0xb0, 0x35, 0xd0, 0x30, 0x31, 0x00, 0x00, // ..0/.?0.].5.01.. + 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x08, 0x32, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, // .........2.&.$.. + 0x01, 0x07, 0x03, 0x95, 0x00, 0xba, 0x01, 0x36, 0x00, 0x2f, 0x00, 0xb0, 0x0e, 0x2f, 0xb4, 0xdf, // .......6./.../.. + 0x0e, 0xef, 0x0e, 0x02, 0x5d, 0xb4, 0x3f, 0x0e, 0x4f, 0x0e, 0x02, 0x71, 0xb2, 0x0f, 0x0e, 0x01, // ....].?.O..q.... + 0x5d, 0xb4, 0x0f, 0x0e, 0x1f, 0x0e, 0x02, 0x71, 0xb4, 0x6f, 0x0e, 0x7f, 0x0e, 0x02, 0x5d, 0xb2, // ]......q.o....]. + 0x3f, 0x0e, 0x01, 0x5d, 0xb0, 0x18, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // ?..]...01......j + 0xff, 0xeb, 0x03, 0xf3, 0x06, 0xf2, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x95, // .......&.D...... + 0x4a, 0xf6, 0x00, 0x0e, 0x00, 0xb0, 0x30, 0x2f, 0xb2, 0x3f, 0x30, 0x01, 0x5d, 0xb0, 0x38, 0xd0, // J.....0/.?0.].8. + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0xfe, 0xaf, 0x05, 0x1a, 0x07, 0x48, 0x02, 0x26, // 01...........H.& + 0x00, 0x24, 0x00, 0x00, 0x00, 0x27, 0x01, 0x52, 0x00, 0xb9, 0x01, 0x5d, 0x01, 0x07, 0x01, 0x60, // .$...'.R...]...` + 0x04, 0xee, 0x00, 0x00, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // .........EX../.. + 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xfe, 0xaf, 0x03, 0xf3, // ..>Y01.....j.... + 0x06, 0x06, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x00, 0x26, 0x01, 0x52, 0x4e, 0x1b, 0x01, 0x07, // ...&.D...&.RN... + 0x01, 0x60, 0x04, 0x52, 0x00, 0x00, 0x00, 0x1d, 0x00, 0xb6, 0xd0, 0x30, 0xe0, 0x30, 0xf0, 0x30, // .`.R.......0.0.0 + 0x03, 0x71, 0xb4, 0x00, 0x30, 0x10, 0x30, 0x02, 0x72, 0xb2, 0x60, 0x30, 0x01, 0x72, 0xb2, 0x40, // .q..0.0.r.`0.r.@ + 0x30, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, // 0.r01........... + 0x07, 0xdf, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x03, 0x96, 0x00, 0xe7, 0x01, 0x54, // ...&.$.........T + 0x00, 0x13, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x1f, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, // ...01......j.... + 0x06, 0x9d, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x96, 0x75, 0x12, 0x00, 0x13, // ...&.D......u... + 0x00, 0xb0, 0x30, 0x2f, 0xb2, 0x0f, 0x30, 0x01, 0x5d, 0xb2, 0x3f, 0x30, 0x01, 0x5d, 0xb0, 0x3f, // ..0/..0.].?0.].? + 0xd0, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x05, 0x1a, 0x07, 0xdf, 0x02, 0x26, // .01............& + 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x03, 0x90, 0x00, 0xe7, 0x01, 0x54, 0x00, 0x13, 0x00, 0xb0, // .$.........T.... + 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x12, 0x3e, 0x59, 0xb0, 0x0c, 0xd0, 0x30, // .EX../....>Y...0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xeb, 0x03, 0xf3, 0x06, 0x9d, 0x02, 0x26, // 1......j.......& + 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x90, 0x75, 0x12, 0x00, 0x0e, 0x00, 0xb0, 0x35, 0x2f, // .D......u.....5/ + 0xb2, 0x0f, 0x35, 0x01, 0x5d, 0xb0, 0x2c, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, // ..5.].,.01...... + 0x00, 0x00, 0x05, 0x1a, 0x08, 0x77, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x03, 0x97, // .....w.&.$...... + 0x00, 0xf2, 0x01, 0x4d, 0x00, 0x13, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // ...M.....EX../.. + 0x10, 0x12, 0x3e, 0x59, 0xb0, 0x2c, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // ..>Y.,.01......j + 0xff, 0xeb, 0x03, 0xf3, 0x07, 0x31, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x97, // .....1.&.D...... + 0x79, 0x07, 0x00, 0x18, 0x00, 0xb0, 0x30, 0x2f, 0xb2, 0x0f, 0x30, 0x01, 0x5d, 0xb2, 0x3f, 0x30, // y.....0/..0.].?0 + 0x01, 0x5d, 0xb2, 0x70, 0x30, 0x01, 0x71, 0xb0, 0x4c, 0xd0, 0x30, 0x31, 0xff, 0xff, 0x00, 0x14, // .].p0.q.L.01.... + 0x00, 0x00, 0x05, 0x1a, 0x08, 0x25, 0x02, 0x26, 0x00, 0x24, 0x00, 0x00, 0x01, 0x07, 0x03, 0x98, // .....%.&.$...... + 0x00, 0xed, 0x01, 0x51, 0x00, 0x13, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // ...Q.....EX../.. + 0x10, 0x12, 0x3e, 0x59, 0xb0, 0x1f, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, // ..>Y...01......j + 0xff, 0xeb, 0x03, 0xf3, 0x06, 0xe3, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x01, 0x06, 0x03, 0x98, // .......&.D...... + 0x79, 0x0f, 0x00, 0x1d, 0x00, 0xb0, 0x30, 0x2f, 0xb2, 0x1f, 0x30, 0x01, 0x72, 0xb2, 0x0f, 0x30, // y.....0/..0.r..0 + 0x01, 0x5d, 0xb2, 0xcf, 0x30, 0x01, 0x71, 0xb2, 0x3f, 0x30, 0x01, 0x5d, 0xb0, 0x3f, 0xd0, 0x30, // .]..0.q.?0.].?.0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0xfe, 0xaf, 0x05, 0x1a, 0x07, 0x4e, 0x02, 0x26, // 1............N.& + 0x00, 0x24, 0x00, 0x00, 0x00, 0x27, 0x01, 0x54, 0x00, 0xeb, 0x01, 0x9e, 0x01, 0x07, 0x01, 0x60, // .$...'.T.......` + 0x04, 0xee, 0x00, 0x00, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, // .........EX../.. + 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xfe, 0xaf, 0x03, 0xf3, // ..>Y01.....j.... + 0x06, 0x0c, 0x02, 0x26, 0x00, 0x44, 0x00, 0x00, 0x00, 0x26, 0x01, 0x54, 0x7f, 0x5c, 0x01, 0x07, // ...&.D...&.T.... + 0x01, 0x60, 0x04, 0x52, 0x00, 0x00, 0x00, 0x36, 0x00, 0xb2, 0x00, 0x30, 0x01, 0x71, 0xb2, 0xb0, // .`.R...6...0.q.. + 0x30, 0x01, 0x71, 0xb2, 0x00, 0x30, 0x01, 0x72, 0xb2, 0x8f, 0x30, 0x01, 0x71, 0xb2, 0x20, 0x30, // 0.q..0.r..0.q. 0 + 0x01, 0x72, 0xb4, 0xd0, 0x30, 0xe0, 0x30, 0x02, 0x71, 0xb2, 0x90, 0x30, 0x01, 0x71, 0xb6, 0x60, // .r..0.0.q..0.q.` + 0x30, 0x70, 0x30, 0x80, 0x30, 0x03, 0x5d, 0xb2, 0x20, 0x30, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // 0p0.0.]. 0.]01.. + 0xff, 0xff, 0x00, 0xb4, 0xfe, 0xb9, 0x04, 0x7a, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, // .......z...&.(.. + 0x00, 0x07, 0x01, 0x60, 0x04, 0xcb, 0x00, 0x0a, 0xff, 0xff, 0x00, 0x63, 0xfe, 0xaf, 0x03, 0xed, // ...`.......c.... + 0x04, 0x4e, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x04, 0x94, 0x00, 0x00, // .N.&.H.....`.... + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x07, 0xc8, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, // .......z...&.(.. + 0x01, 0x07, 0x01, 0x5e, 0x04, 0xc3, 0x01, 0x52, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...^...R.....EX. + 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, // ./....>Y01.....c + 0xff, 0xeb, 0x03, 0xed, 0x06, 0x87, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, // .......&.H.....^ + 0x04, 0x7d, 0x00, 0x11, 0x00, 0x08, 0x00, 0xb2, 0x10, 0x20, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // .}....... .]01.. + 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, 0x07, 0x54, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, // .......z.T.&.(.. + 0x01, 0x07, 0x01, 0x58, 0x00, 0x92, 0x01, 0x61, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...X...a.....EX. + 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, // ./....>Y01.....c + 0xff, 0xeb, 0x03, 0xed, 0x06, 0x13, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, // .......&.H.....X + 0x4c, 0x20, 0x00, 0x27, 0x00, 0xb2, 0x40, 0x23, 0x01, 0x72, 0xb2, 0x70, 0x23, 0x01, 0x71, 0xb4, // L .'..@#.r.p#.q. + 0x60, 0x23, 0x70, 0x23, 0x02, 0x72, 0xb2, 0x20, 0x23, 0x01, 0x72, 0x40, 0x0b, 0x90, 0x23, 0xa0, // `#p#.r. #.r@..#. + 0x23, 0xb0, 0x23, 0xc0, 0x23, 0xd0, 0x23, 0x05, 0x71, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0xb4, // #.#.#.#.q01..... + 0x00, 0x00, 0x04, 0xf7, 0x07, 0xf1, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x03, 0x92, // .......&.(...... + 0x00, 0x86, 0x01, 0x59, 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, // ...Y.....EX../.. + 0x12, 0x12, 0x3e, 0x59, 0xb2, 0xe0, 0x12, 0x01, 0x5d, 0xb0, 0x18, 0xd0, 0x30, 0x31, 0x00, 0x00, // ..>Y....]...01.. + 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x04, 0xb1, 0x06, 0xb0, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, // ...c.......&.H.. + 0x01, 0x06, 0x03, 0x92, 0x40, 0x18, 0x00, 0x0e, 0x00, 0xb0, 0x24, 0x2f, 0xb2, 0x3f, 0x24, 0x01, // ....@.....$/.?$. + 0x5d, 0xb0, 0x2c, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xec, 0x00, 0x00, 0x04, 0x7a, // ].,.01.........z + 0x07, 0xe0, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x03, 0x93, 0x00, 0x97, 0x01, 0x48, // ...&.(.........H + 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0xe0, 0x10, 0x01, 0x5d, 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xa6, // ....]...01...... + 0xff, 0xeb, 0x03, 0xed, 0x06, 0x9f, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, 0x01, 0x06, 0x03, 0x93, // .......&.H...... + 0x51, 0x07, 0x00, 0x0e, 0x00, 0xb0, 0x24, 0x2f, 0xb2, 0x3f, 0x24, 0x01, 0x5d, 0xb0, 0x29, 0xd0, // Q.....$/.?$.].). + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0xc0, 0x08, 0x05, 0x02, 0x26, // 01.............& + 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x03, 0x94, 0x00, 0x8f, 0x01, 0x34, 0x00, 0x2f, 0x00, 0xb0, // .(.........4./.. + 0x10, 0x2f, 0xb4, 0xdf, 0x10, 0xef, 0x10, 0x02, 0x5d, 0xb4, 0x3f, 0x10, 0x4f, 0x10, 0x02, 0x71, // ./......].?.O..q + 0xb2, 0x0f, 0x10, 0x01, 0x5d, 0xb4, 0x0f, 0x10, 0x1f, 0x10, 0x02, 0x71, 0xb4, 0x6f, 0x10, 0x7f, // ....]......q.o.. + 0x10, 0x02, 0x5d, 0xb2, 0x3f, 0x10, 0x01, 0x5d, 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, // ..].?..]...01... + 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x04, 0x7a, 0x06, 0xc6, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, // ...c...z...&.H.. + 0x01, 0x06, 0x03, 0x94, 0x49, 0xf5, 0x00, 0x0e, 0x00, 0xb0, 0x22, 0x2f, 0xb2, 0x3f, 0x22, 0x01, // ....I....."/.?". + 0x5d, 0xb0, 0x29, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x7a, // ].).01.........z + 0x08, 0x32, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, 0x03, 0x95, 0x00, 0x93, 0x01, 0x36, // .2.&.(.........6 + 0x00, 0x2f, 0x00, 0xb0, 0x10, 0x2f, 0xb4, 0xdf, 0x10, 0xef, 0x10, 0x02, 0x5d, 0xb4, 0x3f, 0x10, // ./.../......].?. + 0x4f, 0x10, 0x02, 0x71, 0xb2, 0x0f, 0x10, 0x01, 0x5d, 0xb4, 0x0f, 0x10, 0x1f, 0x10, 0x02, 0x71, // O..q....]......q + 0xb4, 0x6f, 0x10, 0x7f, 0x10, 0x02, 0x5d, 0xb2, 0x3f, 0x10, 0x01, 0x5d, 0xb0, 0x18, 0xd0, 0x30, // .o....].?..]...0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xeb, 0x03, 0xed, 0x06, 0xf3, 0x02, 0x26, // 1......c.......& + 0x00, 0x48, 0x00, 0x00, 0x01, 0x06, 0x03, 0x95, 0x4d, 0xf7, 0x00, 0x0e, 0x00, 0xb0, 0x22, 0x2f, // .H......M....."/ + 0xb2, 0x3f, 0x22, 0x01, 0x5d, 0xb0, 0x2c, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, // .?".].,.01...... + 0xfe, 0xb9, 0x04, 0x7a, 0x07, 0x48, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x00, 0x27, 0x01, 0x52, // ...z.H.&.(...'.R + 0x00, 0x97, 0x01, 0x5d, 0x01, 0x07, 0x01, 0x60, 0x04, 0xcb, 0x00, 0x0a, 0x00, 0x10, 0x00, 0xb0, // ...]...`........ + 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x63, 0xfe, 0xaf, 0x03, 0xed, 0x06, 0x07, 0x02, 0x26, 0x00, 0x48, 0x00, 0x00, // ...c.......&.H.. + 0x00, 0x26, 0x01, 0x52, 0x51, 0x1c, 0x01, 0x07, 0x01, 0x60, 0x04, 0x94, 0x00, 0x00, 0x00, 0x22, // .&.RQ....`....." + 0x00, 0x40, 0x0b, 0xb0, 0x24, 0xc0, 0x24, 0xd0, 0x24, 0xe0, 0x24, 0xf0, 0x24, 0x05, 0x71, 0xb4, // .@..$.$.$.$.$.q. + 0x00, 0x24, 0x10, 0x24, 0x02, 0x72, 0xb2, 0x60, 0x24, 0x01, 0x72, 0xb2, 0x40, 0x24, 0x01, 0x72, // .$.$.r.`$.r.@$.r + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xbe, 0x00, 0x00, 0x02, 0x03, 0x07, 0xc8, 0x02, 0x26, // 01.............& + 0x00, 0x2c, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, 0x03, 0x70, 0x01, 0x52, 0x00, 0x10, 0x00, 0xb0, // .,.....^.p.R.... + 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x01, 0xde, 0x06, 0x73, 0x02, 0x26, 0x00, 0xf3, 0x00, 0x00, // .........s.&.... + 0x01, 0x07, 0x01, 0x5e, 0x03, 0x4b, 0xff, 0xfd, 0x00, 0x08, 0x00, 0xb2, 0x10, 0x04, 0x01, 0x5d, // ...^.K.........] + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xfe, 0xb8, 0x01, 0x8e, 0x05, 0xb0, 0x02, 0x26, // 01.............& + 0x00, 0x2c, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x03, 0x78, 0x00, 0x09, 0xff, 0xff, 0x00, 0x95, // .,.....`.x...... + 0xfe, 0xb9, 0x01, 0x6f, 0x06, 0x18, 0x02, 0x26, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, // ...o...&.L.....` + 0x03, 0x59, 0x00, 0x0a, 0xff, 0xff, 0x00, 0x71, 0xfe, 0xa8, 0x05, 0x02, 0x05, 0xc5, 0x02, 0x26, // .Y.....q.......& + 0x00, 0x32, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x05, 0x11, 0xff, 0xf9, 0xff, 0xff, 0x00, 0x61, // .2.....`.......a + 0xfe, 0xa7, 0x04, 0x2a, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, // ...*.N.&.R.....` + 0x04, 0x9d, 0xff, 0xf8, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, 0x07, 0xdd, 0x02, 0x26, // .......q.......& + 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, 0x05, 0x09, 0x01, 0x67, 0x00, 0x10, 0x00, 0xb0, // .2.....^...g.... + 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x2a, 0x06, 0x86, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, // ...a...*...&.R.. + 0x01, 0x07, 0x01, 0x5e, 0x04, 0x95, 0x00, 0x10, 0x00, 0x08, 0x00, 0xb2, 0x10, 0x1c, 0x01, 0x5d, // ...^...........] + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x3d, 0x08, 0x06, 0x02, 0x26, // 01.....q...=...& + 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x03, 0x92, 0x00, 0xcc, 0x01, 0x6e, 0x00, 0x18, 0x00, 0xb0, // .2.........n.... + 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, 0xb1, 0x22, 0x12, 0x3e, 0x59, 0xb2, 0xe0, 0x22, 0x01, // .EX."/..".>Y..". + 0x5d, 0xb0, 0x28, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0xc9, // ].(.01.....a.... + 0x06, 0xaf, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x01, 0x06, 0x03, 0x92, 0x58, 0x17, 0x00, 0x0e, // ...&.R......X... + 0x00, 0xb0, 0x20, 0x2f, 0xb2, 0x3f, 0x20, 0x01, 0x5d, 0xb0, 0x28, 0xd0, 0x30, 0x31, 0x00, 0x00, // .. /.? .].(.01.. + 0xff, 0xff, 0x00, 0x32, 0xff, 0xeb, 0x05, 0x02, 0x07, 0xf5, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, // ...2.......&.2.. + 0x01, 0x07, 0x03, 0x93, 0x00, 0xdd, 0x01, 0x5d, 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .......].....EX. + 0x20, 0x2f, 0x1b, 0xb1, 0x20, 0x12, 0x3e, 0x59, 0xb2, 0xe0, 0x20, 0x01, 0x5d, 0xb0, 0x25, 0xd0, // /.. .>Y.. .].%. + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xeb, 0x04, 0x2a, 0x06, 0x9e, 0x02, 0x26, // 01.........*...& + 0x00, 0x52, 0x00, 0x00, 0x01, 0x06, 0x03, 0x93, 0x69, 0x06, 0x00, 0x0e, 0x00, 0xb0, 0x20, 0x2f, // .R......i..... / + 0xb2, 0x3f, 0x20, 0x01, 0x5d, 0xb0, 0x25, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, // .? .].%.01.....q + 0xff, 0xeb, 0x05, 0x06, 0x08, 0x1a, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x03, 0x94, // .......&.2...... + 0x00, 0xd5, 0x01, 0x49, 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, // ...I.....EX. /.. + 0x20, 0x12, 0x3e, 0x59, 0xb2, 0xe0, 0x20, 0x01, 0x5d, 0xb0, 0x25, 0xd0, 0x30, 0x31, 0x00, 0x00, // .>Y.. .].%.01.. + 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0x92, 0x06, 0xc5, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, // ...a.......&.R.. + 0x01, 0x06, 0x03, 0x94, 0x61, 0xf4, 0x00, 0x0e, 0x00, 0xb0, 0x1e, 0x2f, 0xb2, 0x3f, 0x1e, 0x01, // ....a....../.?.. + 0x5d, 0xb0, 0x25, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0xff, 0xeb, 0x05, 0x02, // ].%.01.....q.... + 0x08, 0x47, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, 0x01, 0x07, 0x03, 0x95, 0x00, 0xd9, 0x01, 0x4b, // .G.&.2.........K + 0x00, 0x18, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1e, 0x2f, 0x1b, 0xb1, 0x1e, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0xe0, 0x1e, 0x01, 0x5d, 0xb0, 0x28, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // ....].(.01.....a + 0xff, 0xeb, 0x04, 0x2a, 0x06, 0xf2, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x01, 0x06, 0x03, 0x95, // ...*...&.R...... + 0x65, 0xf6, 0x00, 0x0e, 0x00, 0xb0, 0x20, 0x2f, 0xb2, 0x3f, 0x20, 0x01, 0x5d, 0xb0, 0x28, 0xd0, // e..... /.? .].(. + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x71, 0xfe, 0xa8, 0x05, 0x02, 0x07, 0x5d, 0x02, 0x26, // 01.....q.....].& + 0x00, 0x32, 0x00, 0x00, 0x00, 0x27, 0x01, 0x52, 0x00, 0xdd, 0x01, 0x72, 0x01, 0x07, 0x01, 0x60, // .2...'.R...r...` + 0x05, 0x11, 0xff, 0xf9, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x20, 0x2f, 0x1b, 0xb1, // .........EX. /.. + 0x20, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xfe, 0xa7, 0x04, 0x2a, // .>Y01.....a...* + 0x06, 0x06, 0x02, 0x26, 0x00, 0x52, 0x00, 0x00, 0x00, 0x26, 0x01, 0x52, 0x69, 0x1b, 0x01, 0x07, // ...&.R...&.Ri... + 0x01, 0x60, 0x04, 0x9d, 0xff, 0xf8, 0x00, 0x1d, 0x00, 0xb6, 0xd0, 0x20, 0xe0, 0x20, 0xf0, 0x20, // .`......... . . + 0x03, 0x71, 0xb4, 0x00, 0x20, 0x10, 0x20, 0x02, 0x72, 0xb2, 0x60, 0x20, 0x01, 0x72, 0xb2, 0x40, // .q.. . .r.` .r.@ + 0x20, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6c, 0xff, 0xeb, 0x05, 0xff, // .r01......l.... + 0x07, 0x0c, 0x02, 0x26, 0x01, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0xe0, 0x01, 0x47, // ...&.C.....v...G + 0x00, 0x44, 0x00, 0xb2, 0x0f, 0x29, 0x01, 0x5d, 0xb2, 0xcf, 0x29, 0x01, 0x5d, 0x40, 0x0b, 0xbf, // .D...).]..).]@.. + 0x29, 0xcf, 0x29, 0xdf, 0x29, 0xef, 0x29, 0xff, 0x29, 0x05, 0x71, 0xb2, 0x0f, 0x29, 0x01, 0x72, // ).).).).).q..).r + 0xb2, 0x5f, 0x29, 0x01, 0x72, 0xb4, 0x2f, 0x29, 0x3f, 0x29, 0x02, 0x72, 0xb6, 0x7f, 0x29, 0x8f, // ._).r./)?).r..). + 0x29, 0x9f, 0x29, 0x03, 0x71, 0xb2, 0x6f, 0x29, 0x01, 0x5d, 0xb2, 0xf0, 0x29, 0x01, 0x5d, 0xb2, // ).).q.o).]..).]. + 0x40, 0x29, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xff, 0xeb, 0x04, 0xe8, // @).q01.....a.... + 0x05, 0xdc, 0x02, 0x26, 0x01, 0x44, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x69, 0x00, 0x17, // ...&.D.....v.i.. + 0x00, 0x1a, 0x00, 0xb2, 0xbf, 0x29, 0x01, 0x71, 0xb6, 0xdf, 0x29, 0xef, 0x29, 0xff, 0x29, 0x03, // .....).q..).).). + 0x71, 0xb6, 0x0f, 0x29, 0x1f, 0x29, 0x2f, 0x29, 0x03, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0x6c, // q..).)/).r01...l + 0xff, 0xeb, 0x05, 0xff, 0x07, 0x10, 0x02, 0x26, 0x01, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, // .......&.C.....C + 0x01, 0x26, 0x01, 0x4b, 0x00, 0x44, 0x00, 0x40, 0x0b, 0xbf, 0x26, 0xcf, 0x26, 0xdf, 0x26, 0xef, // .&.K.D.@..&.&.&. + 0x26, 0xff, 0x26, 0x05, 0x71, 0xb2, 0x0f, 0x26, 0x01, 0x72, 0xb2, 0x5f, 0x26, 0x01, 0x72, 0xb4, // &.&.q..&.r._&.r. + 0x2f, 0x26, 0x3f, 0x26, 0x02, 0x72, 0xb2, 0x6f, 0x27, 0x01, 0x5d, 0xb4, 0x7f, 0x27, 0x8f, 0x27, // /&?&.r.o'.]..'.' + 0x02, 0x71, 0xb2, 0x0f, 0x27, 0x01, 0x5d, 0xb2, 0xcf, 0x27, 0x01, 0x5d, 0xb4, 0x30, 0x27, 0x40, // .q..'.]..'.].0'@ + 0x27, 0x02, 0x71, 0xb2, 0xf0, 0x27, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // '.q..'.]01.....a + 0xff, 0xeb, 0x04, 0xe8, 0x05, 0xe0, 0x02, 0x26, 0x01, 0x44, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, // .......&.D.....C + 0x00, 0xaf, 0x00, 0x1b, 0x00, 0x08, 0x00, 0xb2, 0xbf, 0x26, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, // .........&.q01.. + 0xff, 0xff, 0x00, 0x6c, 0xff, 0xeb, 0x05, 0xff, 0x07, 0xdd, 0x02, 0x26, 0x01, 0x43, 0x00, 0x00, // ...l.......&.C.. + 0x01, 0x07, 0x01, 0x5e, 0x05, 0x0c, 0x01, 0x67, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...^...g.....EX. + 0x26, 0x2f, 0x1b, 0xb1, 0x26, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // &/..&.>Y01.....a + 0xff, 0xeb, 0x04, 0xe8, 0x06, 0x86, 0x02, 0x26, 0x01, 0x44, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, // .......&.D.....^ + 0x04, 0x95, 0x00, 0x10, 0x00, 0x08, 0x00, 0xb2, 0x10, 0x26, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // .........&.]01.. + 0xff, 0xff, 0x00, 0x6c, 0xff, 0xeb, 0x05, 0xff, 0x07, 0x42, 0x02, 0x26, 0x01, 0x43, 0x00, 0x00, // ...l.....B.&.C.. + 0x01, 0x07, 0x01, 0x58, 0x00, 0xdb, 0x01, 0x4f, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...X...O.....EX. + 0x29, 0x2f, 0x1b, 0xb1, 0x29, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, // )/..).>Y01.....a + 0xff, 0xeb, 0x04, 0xe8, 0x06, 0x12, 0x02, 0x26, 0x01, 0x44, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, // .......&.D.....X + 0x64, 0x1f, 0x00, 0x22, 0x00, 0xb4, 0x60, 0x29, 0x70, 0x29, 0x02, 0x72, 0x40, 0x0b, 0x90, 0x29, // d.."..`)p).r@..) + 0xa0, 0x29, 0xb0, 0x29, 0xc0, 0x29, 0xd0, 0x29, 0x05, 0x71, 0xb2, 0x40, 0x29, 0x01, 0x72, 0xb2, // .).).).).q.@).r. + 0x20, 0x29, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6c, 0xfe, 0xaf, 0x05, 0xff, // ).r01.....l.... + 0x06, 0x75, 0x02, 0x26, 0x01, 0x43, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x05, 0x0b, 0x00, 0x00, // .u.&.C.....`.... + 0xff, 0xff, 0x00, 0x61, 0xfe, 0xa7, 0x04, 0xe8, 0x04, 0xc7, 0x02, 0x26, 0x01, 0x44, 0x00, 0x00, // ...a.......&.D.. + 0x00, 0x07, 0x01, 0x60, 0x04, 0x9d, 0xff, 0xf8, 0xff, 0xff, 0x00, 0x93, 0xfe, 0xa8, 0x04, 0xdc, // ...`............ + 0x05, 0xb0, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x05, 0x0f, 0xff, 0xf9, // ...&.8.....`.... + 0xff, 0xff, 0x00, 0x8b, 0xfe, 0xaf, 0x03, 0xfc, 0x04, 0x3a, 0x02, 0x26, 0x00, 0x58, 0x00, 0x00, // .........:.&.X.. + 0x00, 0x07, 0x01, 0x60, 0x04, 0x59, 0x00, 0x00, 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x04, 0xdc, // ...`.Y.......... + 0x07, 0xc8, 0x02, 0x26, 0x00, 0x38, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, 0x05, 0x08, 0x01, 0x52, // ...&.8.....^...R + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x03, 0xfc, 0x06, 0x73, 0x02, 0x26, // 01...........s.& + 0x00, 0x58, 0x00, 0x00, 0x00, 0x07, 0x01, 0x5e, 0x04, 0x93, 0xff, 0xfd, 0xff, 0xff, 0x00, 0x93, // .X.....^........ + 0xff, 0xeb, 0x06, 0x57, 0x07, 0x1e, 0x02, 0x26, 0x01, 0x45, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...W...&.E.....v + 0x01, 0xdb, 0x01, 0x59, 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, // ...Y.....EX../.. + 0x1c, 0x14, 0x3e, 0x59, 0xb2, 0x0f, 0x1c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x8b, // ..>Y....]01..... + 0xff, 0xeb, 0x05, 0x6a, 0x05, 0xc7, 0x02, 0x26, 0x01, 0x46, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...j...&.F.....v + 0x01, 0x67, 0x00, 0x02, 0x00, 0x25, 0x00, 0xb2, 0xbf, 0x21, 0x01, 0x71, 0xb6, 0xdf, 0x21, 0xef, // .g...%...!.q..!. + 0x21, 0xff, 0x21, 0x03, 0x71, 0x40, 0x11, 0x0f, 0x21, 0x1f, 0x21, 0x2f, 0x21, 0x3f, 0x21, 0x4f, // !.!.q@..!.!/!?!O + 0x21, 0x5f, 0x21, 0x6f, 0x21, 0x7f, 0x21, 0x08, 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x93, // !_!o!.!.r01..... + 0xff, 0xeb, 0x06, 0x57, 0x07, 0x22, 0x02, 0x26, 0x01, 0x45, 0x00, 0x00, 0x00, 0x07, 0x00, 0x43, // ...W.".&.E.....C + 0x01, 0x21, 0x01, 0x5d, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x05, 0x6a, 0x05, 0xcb, 0x02, 0x26, // .!.].......j...& + 0x01, 0x46, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0xad, 0x00, 0x06, 0x00, 0x25, 0x00, 0xb2, // .F.....C.....%.. + 0xbf, 0x1e, 0x01, 0x71, 0xb6, 0xdf, 0x1e, 0xef, 0x1e, 0xff, 0x1e, 0x03, 0x71, 0x40, 0x11, 0x0f, // ...q........q@.. + 0x1e, 0x1f, 0x1e, 0x2f, 0x1e, 0x3f, 0x1e, 0x4f, 0x1e, 0x5f, 0x1e, 0x6f, 0x1e, 0x7f, 0x1e, 0x08, // .../.?.O._.o.... + 0x72, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x06, 0x57, 0x07, 0xc8, 0x02, 0x26, // r01........W...& + 0x01, 0x45, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, 0x05, 0x07, 0x01, 0x52, 0x00, 0x10, 0x00, 0xb0, // .E.....^...R.... + 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x05, 0x6a, 0x06, 0x73, 0x02, 0x26, 0x01, 0x46, 0x00, 0x00, // .......j.s.&.F.. + 0x01, 0x07, 0x01, 0x5e, 0x04, 0x93, 0xff, 0xfd, 0x00, 0x08, 0x00, 0xb2, 0x10, 0x1e, 0x01, 0x5d, // ...^...........] + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x93, 0xff, 0xeb, 0x06, 0x57, 0x07, 0x54, 0x02, 0x26, // 01.........W.T.& + 0x01, 0x45, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, 0x00, 0xd6, 0x01, 0x61, 0x00, 0x10, 0x00, 0xb0, // .E.....X...a.... + 0x00, 0x45, 0x58, 0xb0, 0x1f, 0x2f, 0x1b, 0xb1, 0x1f, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, // .EX../....>Y01.. + 0xff, 0xff, 0x00, 0x8b, 0xff, 0xeb, 0x05, 0x6a, 0x05, 0xfd, 0x02, 0x26, 0x01, 0x46, 0x00, 0x00, // .......j...&.F.. + 0x01, 0x06, 0x01, 0x58, 0x62, 0x0a, 0x00, 0x20, 0x00, 0xb2, 0x5f, 0x21, 0x01, 0x72, 0xb2, 0x8f, // ...Xb.. .._!.r.. + 0x21, 0x01, 0x71, 0xb2, 0x3f, 0x21, 0x01, 0x72, 0xb4, 0xef, 0x21, 0xff, 0x21, 0x02, 0x71, 0xb4, // !.q.?!.r..!.!.q. + 0x0f, 0x21, 0x1f, 0x21, 0x02, 0x72, 0x30, 0x31, 0xff, 0xff, 0x00, 0x93, 0xfe, 0xa8, 0x06, 0x57, // .!.!.r01.......W + 0x06, 0x37, 0x02, 0x26, 0x01, 0x45, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x05, 0x0f, 0xff, 0xf9, // .7.&.E.....`.... + 0xff, 0xff, 0x00, 0x8b, 0xfe, 0xaf, 0x05, 0x6a, 0x04, 0xcb, 0x02, 0x26, 0x01, 0x46, 0x00, 0x00, // .......j...&.F.. + 0x00, 0x07, 0x01, 0x60, 0x04, 0x59, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, // ...`.Y.......... + 0x07, 0x21, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0xda, 0x01, 0x5c, // .!.&.<.....C.... + 0x00, 0x15, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x14, 0x3e, 0x59, // .....EX../....>Y + 0xb2, 0x0f, 0x0d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, // ....]01......K.. + 0x05, 0xcb, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x00, 0x43, 0x6b, 0x06, 0x00, 0x25, // ...&.......Ck..% + 0x00, 0xb2, 0xbf, 0x16, 0x01, 0x71, 0xb6, 0xdf, 0x16, 0xef, 0x16, 0xff, 0x16, 0x03, 0x71, 0x40, // .....q........q@ + 0x11, 0x0f, 0x16, 0x1f, 0x16, 0x2f, 0x16, 0x3f, 0x16, 0x4f, 0x16, 0x5f, 0x16, 0x6f, 0x16, 0x7f, // ...../.?.O._.o.. + 0x16, 0x08, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x14, 0xfe, 0xb9, 0x04, 0xce, // ..r01........... + 0x05, 0xb0, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x07, 0x01, 0x60, 0x04, 0xc8, 0x00, 0x0a, // ...&.<.....`.... + 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x13, 0x03, 0xe8, 0x04, 0x3a, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, // .........:.&.... + 0x00, 0x07, 0x01, 0x60, 0x05, 0x24, 0xff, 0x64, 0xff, 0xff, 0x00, 0x14, 0x00, 0x00, 0x04, 0xce, // ...`.$.d........ + 0x07, 0xc7, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x01, 0x5e, 0x04, 0xc0, 0x01, 0x51, // ...&.<.....^...Q + 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x12, 0x3e, 0x59, // .....EX../....>Y + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, 0x06, 0x73, 0x02, 0x26, // 01.......K...s.& + 0x00, 0x5c, 0x00, 0x00, 0x00, 0x07, 0x01, 0x5e, 0x04, 0x51, 0xff, 0xfd, 0xff, 0xff, 0x00, 0x14, // .......^.Q...... + 0x00, 0x00, 0x04, 0xce, 0x07, 0x53, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, // .....S.&.<.....X + 0x00, 0x8f, 0x01, 0x60, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, // ...`.....EX../.. + 0x0c, 0x12, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, 0xfe, 0x4b, 0x03, 0xe8, // ..>Y01.......K.. + 0x05, 0xfd, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, 0x20, 0x0a, 0x00, 0x20, // ...&.......X .. + 0x00, 0xb2, 0x5f, 0x19, 0x01, 0x72, 0xb2, 0x8f, 0x19, 0x01, 0x71, 0xb2, 0x3f, 0x19, 0x01, 0x72, // .._..r....q.?..r + 0xb4, 0xef, 0x19, 0xff, 0x19, 0x02, 0x71, 0xb4, 0x0f, 0x19, 0x1f, 0x19, 0x02, 0x72, 0x30, 0x31, // ......q......r01 + 0xff, 0xff, 0xff, 0x24, 0xff, 0xeb, 0x05, 0x02, 0x06, 0x93, 0x02, 0x26, 0x00, 0x32, 0x00, 0x00, // ...$.......&.2.. + 0x00, 0x07, 0x03, 0x6c, 0xfe, 0xbc, 0x00, 0xce, 0xff, 0xff, 0x00, 0xb4, 0x02, 0x88, 0x04, 0xf2, // ...l............ + 0x03, 0x23, 0x00, 0x46, 0x03, 0x5a, 0xda, 0x00, 0x53, 0x33, 0x40, 0x00, 0xff, 0xff, 0x00, 0xbd, // .#.F.Z..S3@..... + 0x02, 0x88, 0x05, 0xf5, 0x03, 0x23, 0x00, 0x46, 0x03, 0x5a, 0xb0, 0x00, 0x66, 0x66, 0x40, 0x00, // .....#.F.Z..ff@. + 0xff, 0xff, 0x00, 0xbd, 0x02, 0x88, 0x05, 0xf5, 0x03, 0x23, 0x00, 0x46, 0x03, 0x5a, 0xb0, 0x00, // .........#.F.Z.. + 0x66, 0x66, 0x40, 0x00, 0xff, 0xff, 0x00, 0x05, 0xfe, 0x68, 0x03, 0xa0, 0x00, 0x00, 0x00, 0x27, // ff@......h.....' + 0x00, 0x42, 0x00, 0x01, 0xff, 0x02, 0x01, 0x06, 0x00, 0x42, 0x01, 0x00, 0x00, 0x16, 0x00, 0x40, // .B.......B.....@ + 0x09, 0x00, 0x01, 0x10, 0x01, 0x20, 0x01, 0x30, 0x01, 0x04, 0x5d, 0xb4, 0xa0, 0x01, 0xb0, 0x01, // ..... .0..]..... + 0x02, 0x5d, 0x30, 0x31, 0x00, 0x01, 0x00, 0x50, 0x03, 0xfc, 0x01, 0x51, 0x06, 0x18, 0x00, 0x05, // .]01...P...Q.... + 0x00, 0x06, 0x00, 0xb0, 0x01, 0x2f, 0x30, 0x31, 0x13, 0x13, 0x33, 0x03, 0x15, 0x23, 0x50, 0xa0, // ...../01..3..#P. + 0x61, 0x3c, 0xc5, 0x04, 0xb4, 0x01, 0x64, 0xfe, 0x96, 0xb2, 0x00, 0x00, 0x00, 0x01, 0x00, 0x50, // a<....d........P + 0x03, 0xfd, 0x01, 0x51, 0x06, 0x18, 0x00, 0x05, 0x00, 0x06, 0x00, 0xb0, 0x04, 0x2f, 0x30, 0x31, // ...Q........./01 + 0x01, 0x03, 0x23, 0x13, 0x35, 0x33, 0x01, 0x51, 0xa0, 0x61, 0x3c, 0xc5, 0x05, 0x57, 0xfe, 0xa6, // ..#.53.Q.a<..W.. + 0x01, 0x57, 0xc4, 0x00, 0x00, 0x01, 0x00, 0x50, 0xff, 0x01, 0x01, 0x51, 0x00, 0xf9, 0x00, 0x05, // .W.....P...Q.... + 0x00, 0x06, 0x00, 0xb0, 0x04, 0x2f, 0x30, 0x31, 0x25, 0x03, 0x23, 0x13, 0x35, 0x33, 0x01, 0x51, // ...../01%.#.53.Q + 0xa0, 0x61, 0x3c, 0xc5, 0x1a, 0xfe, 0xe7, 0x01, 0x07, 0xf1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2b, // .a<............+ + 0x03, 0xfd, 0x01, 0x2c, 0x06, 0x18, 0x00, 0x47, 0x03, 0x35, 0x01, 0x7c, 0x00, 0x00, 0xc0, 0x02, // ...,...G.5.|.... + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x50, 0x03, 0xfc, 0x02, 0x9a, 0x06, 0x18, 0x00, 0x26, // @......P.......& + 0x03, 0x34, 0x00, 0x00, 0x00, 0x07, 0x03, 0x34, 0x01, 0x49, 0x00, 0x00, 0xff, 0xff, 0x00, 0x50, // .4.....4.I.....P + 0x03, 0xfd, 0x02, 0xa2, 0x06, 0x18, 0x00, 0x26, 0x03, 0x35, 0x00, 0x00, 0x00, 0x07, 0x03, 0x35, // .......&.5.....5 + 0x01, 0x51, 0x00, 0x00, 0x00, 0x02, 0x00, 0x50, 0xff, 0x11, 0x02, 0x85, 0x01, 0x18, 0x00, 0x05, // .Q.....P........ + 0x00, 0x0b, 0x00, 0x09, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x0a, 0xd0, 0x30, 0x31, 0x25, 0x03, 0x23, // ......./...01%.# + 0x13, 0x35, 0x33, 0x05, 0x03, 0x23, 0x13, 0x35, 0x33, 0x01, 0x51, 0xa0, 0x61, 0x3c, 0xc5, 0x01, // .53..#.53.Q.a<.. + 0x34, 0xa0, 0x61, 0x3c, 0xc5, 0x60, 0xfe, 0xb1, 0x01, 0x45, 0xc2, 0xb8, 0xfe, 0xb1, 0x01, 0x4d, // 4.a<.`...E.....M + 0xba, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x46, 0x00, 0x00, 0x04, 0x24, 0x05, 0xb0, 0x00, 0x0b, // .......F...$.... + 0x00, 0x4c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, // .L...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x05, 0xd0, 0x30, 0x31, 0x01, 0x21, // X!...Y......01.! + 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, 0x04, 0x24, 0xfe, 0x71, 0xc5, 0xfe, // .#.!5!.3.!.$.q.. + 0x76, 0x01, 0x8a, 0xc5, 0x01, 0x8f, 0x03, 0x9e, 0xfc, 0x62, 0x03, 0x9e, 0x9c, 0x01, 0x76, 0xfe, // v........b....v. + 0x8a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x57, 0xfe, 0x60, 0x04, 0x34, 0x05, 0xb0, 0x00, 0x13, // .......W.`.4.... + 0x00, 0x7e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0c, 0x3e, 0x59, // .~...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x02, 0x08, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x06, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, // Y.....+X!...Y... + 0xb1, 0x08, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0xd0, 0xb0, // .....+X!...Y.... + 0x10, 0xd0, 0xb0, 0x11, 0xd0, 0xb0, 0x06, 0x10, 0xb0, 0x12, 0xd0, 0xb0, 0x13, 0xd0, 0x30, 0x31, // ..............01 + 0x21, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x11, 0x21, // !!.#.!5!.!5!.3.! + 0x15, 0x21, 0x11, 0x21, 0x04, 0x34, 0xfe, 0x71, 0xc5, 0xfe, 0x77, 0x01, 0x89, 0xfe, 0x77, 0x01, // .!.!.4.q..w...w. + 0x89, 0xc5, 0x01, 0x8f, 0xfe, 0x71, 0x01, 0x8f, 0xfe, 0x60, 0x01, 0xa0, 0x9a, 0x03, 0x04, 0x9c, // .....q...`...... + 0x01, 0x76, 0xfe, 0x8a, 0x9c, 0xfc, 0xfc, 0x00, 0x00, 0x01, 0x00, 0x89, 0x02, 0x17, 0x02, 0x27, // .v.............' + 0x03, 0xe1, 0x00, 0x0d, 0x00, 0x10, 0x00, 0xb0, 0x03, 0x2f, 0xb0, 0x0a, 0xb0, 0x0a, 0x2b, 0x58, // ........./....+X + 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x13, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x06, // ...Y01.4632..... + 0x23, 0x22, 0x26, 0x35, 0x89, 0x70, 0x5e, 0x5f, 0x71, 0x70, 0x5f, 0x5f, 0x70, 0x03, 0x19, 0x58, // #"&5.p^_qp__p..X + 0x70, 0x70, 0x58, 0x3c, 0x59, 0x6d, 0x6e, 0x58, 0xff, 0xff, 0x00, 0xa1, 0x00, 0x00, 0x03, 0x21, // ppXY..EX + 0xb0, 0x16, 0x2f, 0x1b, 0xb1, 0x16, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x10, 0x06, 0x3e, 0x59, 0xb0, 0x16, 0x10, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, // ....>Y.......+X. + 0x1b, 0xdc, 0x59, 0xb0, 0x09, 0xd0, 0xb0, 0x1d, 0x10, 0xb0, 0x24, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, // ..Y.......$..+X. + 0x1b, 0xdc, 0x59, 0xb0, 0x16, 0x10, 0xb1, 0x2b, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y....+...+X!.. + 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x32, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y....2...+X!... + 0x59, 0xb0, 0x10, 0x10, 0xb1, 0x39, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y....9...+X!...Y + 0xb0, 0x32, 0x10, 0xb0, 0x40, 0xd0, 0xb0, 0x24, 0x10, 0xb1, 0x47, 0x01, 0xb0, 0x0a, 0x2b, 0x58, // .2..@..$..G...+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, 0x10, 0xb1, 0x4e, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y....N...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, // ...Y01.4632..663 + 0x32, 0x16, 0x15, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, // 2.....#"&'..#"&5 + 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x01, 0x14, // .4632.....#"&5.. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x05, 0x14, 0x16, 0x33, // .326554&#".....3 + 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x01, 0x14, 0x16, 0x33, 0x32, 0x36, // 26554&#".....326 + 0x35, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x13, 0x27, 0x01, 0x17, 0x03, 0x33, 0xa4, 0x88, // 554&#"...'...3.. + 0x4a, 0x75, 0x25, 0x25, 0x75, 0x4a, 0x89, 0xa5, 0xa4, 0x88, 0x4b, 0x76, 0x25, 0x25, 0x74, 0x49, // Ju%%uJ....Kv%%tI + 0x8a, 0xa4, 0xfd, 0x0d, 0xa4, 0x88, 0x8a, 0xa4, 0xa4, 0x88, 0x89, 0xa5, 0x03, 0x85, 0x51, 0x4b, // ..............QK + 0x4a, 0x50, 0x52, 0x4a, 0x4a, 0x50, 0x01, 0xc8, 0x51, 0x4b, 0x49, 0x50, 0x51, 0x4a, 0x4a, 0x50, // JPRJJP..QKIPQJJP + 0xfb, 0x45, 0x51, 0x4b, 0x49, 0x51, 0x52, 0x4a, 0x4a, 0x50, 0xf8, 0x6d, 0x02, 0xc7, 0x6d, 0x01, // .EQKIQRJJP.m..m. + 0x65, 0x7e, 0xae, 0x3f, 0x36, 0x36, 0x3f, 0xad, 0x7f, 0x4e, 0x80, 0xac, 0x3d, 0x37, 0x37, 0x3d, // e~.?66?..N..=77= + 0xac, 0x80, 0x03, 0x81, 0x7f, 0xae, 0xad, 0x80, 0x4d, 0x7f, 0xac, 0xac, 0x7f, 0xfc, 0xcc, 0x4b, // ........M......K + 0x67, 0x67, 0x4b, 0x4e, 0x4a, 0x68, 0x68, 0x4a, 0x4e, 0x4b, 0x67, 0x67, 0x4b, 0x4e, 0x4a, 0x68, // ggKNJhhJNKggKNJh + 0x68, 0x4a, 0x02, 0xe6, 0x4a, 0x67, 0x66, 0x4b, 0x4d, 0x4a, 0x69, 0x69, 0x4a, 0xfb, 0xd6, 0x43, // hJ..JgfKMJiiJ..C + 0x04, 0x72, 0x43, 0x00, 0xff, 0xff, 0x00, 0x50, 0x04, 0x1f, 0x01, 0x16, 0x06, 0x18, 0x02, 0x06, // .rC....P........ + 0x00, 0x0a, 0x00, 0x00, 0xff, 0xff, 0x00, 0x50, 0x04, 0x10, 0x02, 0x4b, 0x06, 0x18, 0x02, 0x06, // .......P...K.... + 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6c, 0x00, 0x98, 0x02, 0x27, 0x03, 0xb5, 0x00, 0x06, // .......l...'.... + 0x00, 0x09, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x01, 0x2f, 0x30, 0x31, 0x01, 0x13, 0x23, 0x01, 0x35, // ...../../01..#.5 + 0x01, 0x33, 0x01, 0x28, 0xff, 0x94, 0xfe, 0xd9, 0x01, 0x27, 0x94, 0x02, 0x26, 0xfe, 0x72, 0x01, // .3.(.....'..&.r. + 0x85, 0x13, 0x01, 0x85, 0x00, 0x01, 0x00, 0x58, 0x00, 0x98, 0x02, 0x13, 0x03, 0xb5, 0x00, 0x06, // .......X........ + 0x00, 0x09, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x03, 0x2f, 0x30, 0x31, 0x13, 0x01, 0x15, 0x01, 0x23, // ...../../01....# + 0x13, 0x03, 0xec, 0x01, 0x27, 0xfe, 0xd9, 0x94, 0xff, 0xff, 0x03, 0xb5, 0xfe, 0x7b, 0x13, 0xfe, // ....'........{.. + 0x7b, 0x01, 0x8e, 0x01, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xab, 0x00, 0x00, 0x03, 0x8c, // {............... + 0x05, 0xb0, 0x00, 0x26, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x04, 0x02, 0x1b, 0x00, 0x00, // ...&............ + 0x00, 0x01, 0x00, 0x3b, 0x00, 0x6e, 0x03, 0x6f, 0x05, 0x23, 0x00, 0x03, 0x00, 0x09, 0x00, 0xb0, // ...;.n.o.#...... + 0x02, 0x2f, 0xb0, 0x00, 0x2f, 0x30, 0x31, 0x37, 0x27, 0x01, 0x17, 0xa8, 0x6d, 0x02, 0xc7, 0x6d, // ./../017'...m..m + 0x6e, 0x43, 0x04, 0x72, 0x43, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x02, 0x30, 0x03, 0x53, // nC.rC......G.0.S + 0x05, 0xc5, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x3a, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x02, 0x2f, 0xb0, // .......:.../../. + 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x02, 0x10, 0xb0, // .EX../....>Y.... + 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x06, 0xd0, 0xb0, // ...+X...Y....... + 0x01, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x0d, 0xd0, 0xb2, 0x9b, 0x0d, 0x01, 0x5d, // ...............] + 0x30, 0x31, 0x01, 0x33, 0x15, 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x01, 0x33, 0x01, 0x21, 0x11, // 01.3.#.#5!'.3.!. + 0x27, 0x07, 0x02, 0xbe, 0x95, 0x95, 0xac, 0xfe, 0x39, 0x04, 0x01, 0xc6, 0xb1, 0xfe, 0x47, 0x01, // '.......9.....G. + 0x0d, 0x06, 0x0d, 0x03, 0x69, 0x81, 0xb8, 0xb8, 0x60, 0x02, 0x7d, 0xfd, 0xa4, 0x01, 0x79, 0x01, // ....i...`.}...y. + 0x1a, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x7a, 0x02, 0x8b, 0x02, 0xfa, 0x05, 0xba, 0x00, 0x13, // .......z........ + 0x00, 0x32, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, // .2.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0c, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, // .....+X!...Y.... + 0x11, 0xd0, 0x30, 0x31, 0x01, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x23, 0x11, 0x34, // ..01..6632...#.4 + 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x01, 0x02, 0x1f, 0x24, 0x6e, 0x46, 0x7a, 0x87, // &#"...#....$nFz. + 0xb4, 0x47, 0x41, 0x35, 0x48, 0x13, 0xb4, 0x05, 0xab, 0x78, 0x40, 0x47, 0x97, 0x9c, 0xfe, 0x04, // .GA5H....x@G.... + 0x01, 0xdb, 0x66, 0x5b, 0x36, 0x2f, 0xfd, 0xc9, 0x03, 0x20, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1c, // ..f[6/... ...... + 0x00, 0x00, 0x04, 0x77, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x29, 0x00, 0x00, 0x00, 0x07, 0x03, 0x82, // ...w...&.)...... + 0xff, 0x8a, 0xfe, 0x80, 0x00, 0x01, 0x00, 0x46, 0x00, 0x00, 0x04, 0x57, 0x05, 0xc5, 0x00, 0x28, // .......F...W...( + 0x00, 0xa5, 0x00, 0xb0, 0x27, 0x2f, 0xb0, 0x23, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, // ....'/.#/..EX../ + 0x1b, 0xb1, 0x16, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb1, 0x04, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // .>Y.....+X!...Y. + 0x07, 0xd0, 0xb2, 0xa0, 0x27, 0x01, 0x5d, 0xb2, 0xbf, 0x27, 0x01, 0x71, 0xb2, 0xdf, 0x27, 0x01, // ....'.]..'.q..'. + 0x5d, 0xb2, 0x0f, 0x27, 0x01, 0x71, 0xb2, 0x6f, 0x27, 0x01, 0x5d, 0xb2, 0x4f, 0x27, 0x01, 0x71, // ]..'.q.o'.].O'.q + 0xb2, 0x80, 0x27, 0x01, 0x71, 0xb2, 0xf0, 0x27, 0x01, 0x71, 0xb0, 0x27, 0x10, 0xb1, 0x28, 0x02, // ..'.q..'.q.'..(. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0c, 0xd0, 0xb0, 0x27, 0x10, 0xb0, // ..+X!...Y....'.. + 0x0d, 0xd0, 0xb2, 0x3f, 0x23, 0x01, 0x5d, 0xb4, 0x0f, 0x23, 0x1f, 0x23, 0x02, 0x5d, 0xb0, 0x23, // ...?#.]..#.#.].# + 0x10, 0xb1, 0x24, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0f, 0xd0, // ..$...+X!...Y... + 0xb0, 0x23, 0x10, 0xb0, 0x11, 0xd0, 0xb0, 0x16, 0x10, 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // .#............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x06, 0x06, 0x07, 0x21, 0x07, 0x21, 0x35, 0x33, // !...Y01....!.!53 + 0x36, 0x36, 0x37, 0x23, 0x35, 0x33, 0x27, 0x23, 0x35, 0x33, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, // 667#53'#53'4632. + 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x17, 0x21, 0x15, 0x21, 0x17, 0x21, 0x15, // ..#4&#"...!.!.!. + 0x01, 0xb3, 0x02, 0x1e, 0x1b, 0x02, 0xdf, 0x01, 0xfc, 0x30, 0x0a, 0x2d, 0x2f, 0x04, 0xaa, 0xa5, // .........0.-/... + 0x06, 0x9e, 0x98, 0x05, 0xe0, 0xbc, 0xc8, 0xdc, 0x04, 0x02, 0xbe, 0x7e, 0x62, 0x63, 0x74, 0x05, // ...........~bct. + 0x01, 0xa6, 0xfe, 0x60, 0x05, 0x01, 0x9b, 0x01, 0xb9, 0x53, 0x96, 0x36, 0x9a, 0x9a, 0x0c, 0xad, // ...`.....S.6.... + 0x66, 0x9b, 0x8f, 0x9b, 0x92, 0xcc, 0xe9, 0xd1, 0xac, 0x06, 0x76, 0x72, 0x95, 0x85, 0x92, 0x9b, // f.........vr.... + 0x8f, 0x9b, 0x00, 0x00, 0x00, 0x02, 0x00, 0xa4, 0xff, 0xeb, 0x06, 0x10, 0x05, 0xb0, 0x00, 0x23, // ...............# + 0x00, 0x2c, 0x00, 0x7f, 0x00, 0xb0, 0x19, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x22, 0x2f, 0x1b, // .,...../..EX."/. + 0xb1, 0x22, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1c, 0x2f, 0x1b, 0xb1, 0x1c, 0x0c, // .".>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, 0x1b, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, 0x06, 0x3e, 0x59, 0xb0, 0x22, 0x10, 0xb0, // .EX../....>Y.".. + 0x01, 0xd0, 0xb0, 0x22, 0x10, 0xb1, 0x13, 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ..."......+X!... + 0x59, 0xb0, 0x04, 0xd0, 0xb0, 0x0f, 0x10, 0xb1, 0x08, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // Y...........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x19, 0x10, 0xb1, 0x24, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y....$...+X!.. + 0xf4, 0x59, 0xb0, 0x1c, 0x10, 0xb1, 0x2c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y....,...+X!... + 0x59, 0x30, 0x31, 0x01, 0x11, 0x33, 0x15, 0x23, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, // Y01..3.#...3267. + 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x23, 0x06, 0x07, 0x06, 0x23, 0x23, 0x11, 0x23, 0x11, // ..#"&5.#...##.#. + 0x21, 0x32, 0x17, 0x16, 0x17, 0x33, 0x11, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, // !2...3..32654&## + 0x05, 0x39, 0xcd, 0xcd, 0x3f, 0x34, 0x11, 0x29, 0x10, 0x1a, 0x16, 0x55, 0x2b, 0x78, 0x8e, 0x87, // .9..?4.)...U+x.. + 0x14, 0x69, 0x82, 0xe8, 0x9d, 0xc5, 0x01, 0x62, 0xe8, 0x82, 0x69, 0x14, 0x87, 0xfc, 0xf5, 0x9d, // .i.....b..i..... + 0x93, 0x93, 0x93, 0x93, 0x9d, 0x05, 0x3f, 0xfe, 0xfb, 0x92, 0xfd, 0x6f, 0x4c, 0x3e, 0x08, 0x06, // ......?....oL>.. + 0x87, 0x12, 0x17, 0x91, 0x9b, 0x02, 0x91, 0x95, 0x64, 0x7b, 0xfd, 0xcc, 0x05, 0xb0, 0x7d, 0x65, // ........d{....}e + 0x94, 0x01, 0x05, 0xfd, 0x90, 0xa7, 0x7a, 0x7b, 0xaa, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x62, // ......z{.......b + 0xfe, 0xec, 0x04, 0xba, 0x06, 0x18, 0x00, 0x27, 0x00, 0x42, 0x00, 0xa1, 0xff, 0x86, 0x00, 0x06, // .......'.B...... + 0x00, 0xd3, 0x00, 0x00, 0x00, 0x01, 0x00, 0x4f, 0xff, 0xeb, 0x03, 0xd5, 0x05, 0xc5, 0x00, 0x2a, // .......O.......* + 0x00, 0x7a, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x0c, 0x3e, 0x59, // .z...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, 0xb2, 0x2a, 0x26, // ..EX../....>Y.*& + 0x03, 0x2b, 0xb0, 0x2a, 0x10, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .+.*......+X!... + 0x59, 0xb0, 0x0c, 0x10, 0xb1, 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb0, 0x00, 0x10, 0xb0, 0x0f, 0xd0, 0xb0, 0x2a, 0x10, 0xb0, 0x12, 0xd0, 0xb4, 0x0f, 0x26, 0x1f, // .......*......&. + 0x26, 0x02, 0x5d, 0xb0, 0x26, 0x10, 0xb1, 0x27, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // &.].&..'...+X!.. + 0xf4, 0x59, 0xb0, 0x14, 0xd0, 0xb0, 0x26, 0x10, 0xb0, 0x15, 0xd0, 0xb0, 0x1a, 0x10, 0xb1, 0x21, // .Y....&........! + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x07, 0x06, // ...+X!...Y01.!.. + 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x00, 0x35, 0x23, 0x35, 0x33, 0x35, // .3267...#".5#535 + 0x23, 0x35, 0x33, 0x35, 0x34, 0x00, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, // #5354.32...&&#". + 0x15, 0x15, 0x21, 0x15, 0x21, 0x15, 0x21, 0x03, 0x92, 0xfe, 0x1b, 0x02, 0x04, 0xab, 0x93, 0x39, // ..!.!.!........9 + 0x70, 0x34, 0x13, 0x38, 0x7b, 0x3d, 0xe7, 0xfe, 0xe3, 0x92, 0x92, 0x92, 0x92, 0x01, 0x1b, 0xe7, // p4.8{=.......... + 0x3b, 0x75, 0x42, 0x13, 0x36, 0x71, 0x38, 0x92, 0xab, 0x01, 0xec, 0xfe, 0x14, 0x01, 0xec, 0x01, // ;uB.6q8......... + 0xe1, 0x05, 0x8a, 0xcd, 0x11, 0x11, 0x9d, 0x0f, 0x10, 0x01, 0x21, 0xd5, 0x9b, 0x88, 0x9b, 0x0f, // ..........!..... + 0xf4, 0x01, 0x23, 0x10, 0x0f, 0x9f, 0x10, 0x13, 0xce, 0xac, 0x11, 0x9b, 0x88, 0x00, 0x00, 0x00, // ..#............. + 0x00, 0x04, 0x00, 0x7c, 0xff, 0xeb, 0x05, 0x83, 0x05, 0xc5, 0x00, 0x1d, 0x00, 0x2b, 0x00, 0x39, // ...|.........+.9 + 0x00, 0x3d, 0x00, 0x65, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x21, 0x2f, 0xb0, 0x3a, 0x2f, 0xb0, 0x3c, // .=.e.../.!/.:/.< + 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // /..EX../....>Y.. + 0x45, 0x58, 0xb0, 0x28, 0x2f, 0x1b, 0xb1, 0x28, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x13, // EX.(/..(.>Y..... + 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x1a, 0x01, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x28, 0x10, 0xb1, 0x2f, 0x01, 0xb0, // ..+X!...Y.(../.. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x21, 0x10, 0xb1, 0x36, 0x01, 0xb0, 0x0a, // .+X!...Y.!..6... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x16, 0x06, 0x23, 0x22, 0x26, // +X!...Y01....#"& + 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, // 554632...#4&#".. + 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, // ...3265.4632.... + 0x06, 0x23, 0x22, 0x26, 0x35, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, // .#"&53..326554&# + 0x22, 0x06, 0x15, 0x05, 0x27, 0x01, 0x17, 0x02, 0xa5, 0x02, 0x04, 0x96, 0x7e, 0x81, 0x9a, 0x99, // "...'.......~... + 0x80, 0x7e, 0x98, 0x04, 0x02, 0x8a, 0x46, 0x40, 0x41, 0x46, 0x47, 0x42, 0x3f, 0x45, 0x01, 0x0e, // .~....F@AFGB?E.. + 0xa4, 0x89, 0x88, 0xa5, 0xa4, 0x87, 0x8a, 0xa5, 0x92, 0x51, 0x4c, 0x49, 0x50, 0x52, 0x49, 0x4a, // .........QLIPRIJ + 0x51, 0xfe, 0x04, 0x6d, 0x02, 0xc7, 0x6d, 0x04, 0x20, 0x06, 0x69, 0x91, 0xac, 0x7f, 0x4d, 0x7f, // Q..m..m. .i...M. + 0xae, 0x94, 0x67, 0x06, 0x39, 0x4e, 0x69, 0x4a, 0x4d, 0x4a, 0x67, 0x50, 0x36, 0xfd, 0x45, 0x7f, // ..g.9NiJMJgP6.E. + 0xad, 0xad, 0x7f, 0x4e, 0x80, 0xac, 0xac, 0x80, 0x4b, 0x67, 0x67, 0x4b, 0x4e, 0x4a, 0x68, 0x68, // ...N....KggKNJhh + 0x4a, 0xf7, 0x43, 0x04, 0x72, 0x43, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6a, 0xff, 0xed, 0x03, 0x73, // J.C.rC.....j...s + 0x05, 0xc5, 0x00, 0x1b, 0x00, 0x27, 0x00, 0x59, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .....'.Y.../..EX + 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0x10, 0xb1, 0x09, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x17, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x1b, // !...Y........... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x10, 0x10, 0xb1, 0x20, 0x03, // ...+X!...Y.... . + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb0, 0x25, 0xd0, 0x30, // ..+X!...Y....%.0 + 0x31, 0x05, 0x07, 0x06, 0x26, 0x35, 0x35, 0x06, 0x06, 0x23, 0x35, 0x32, 0x36, 0x37, 0x11, 0x34, // 1...&55..#5267.4 + 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x02, 0x07, 0x15, 0x14, 0x16, 0x33, 0x03, 0x35, 0x34, // 632.........3.54 + 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x17, 0x36, 0x36, 0x02, 0xce, 0x06, 0xc7, 0xcd, 0x31, 0x65, // &#"....66.....1e + 0x34, 0x37, 0x65, 0x2e, 0x9f, 0x8b, 0x7a, 0x9b, 0xcb, 0xaf, 0x60, 0x75, 0x20, 0x2c, 0x24, 0x33, // 47e...z...`u ,$3 + 0x32, 0x06, 0x55, 0x5a, 0x0d, 0x02, 0x04, 0xef, 0xd3, 0x0c, 0x0c, 0x0c, 0xb4, 0x0d, 0x0d, 0x01, // 2.UZ............ + 0xd9, 0xb1, 0xca, 0xac, 0x90, 0x2a, 0x9e, 0xfe, 0xae, 0x64, 0x5c, 0x91, 0x92, 0x03, 0xd1, 0x2c, // .....*...d....., + 0x4c, 0x4e, 0x6d, 0x6c, 0xfe, 0x9b, 0x01, 0x40, 0xcc, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xab, // LNml...@........ + 0x00, 0x00, 0x08, 0x4e, 0x05, 0xc2, 0x00, 0x22, 0x00, 0x31, 0xf7, 0x00, 0x00, 0x23, 0x00, 0x7c, // ...N...".1...#.| + 0x05, 0x23, 0xff, 0xfd, 0x00, 0x03, 0x00, 0x10, 0x05, 0xce, 0xff, 0x16, 0x00, 0x02, 0x00, 0x67, // .#.............g + 0x03, 0x97, 0x04, 0x60, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x17, 0x00, 0x6a, 0x00, 0xb0, 0x12, 0x2f, // ...`.......j.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x16, 0x0c, 0x3e, 0x59, 0xb2, 0xef, 0x12, 0x01, 0x5d, 0xb2, 0x6f, 0x12, 0x01, // /....>Y....].o.. + 0x72, 0xb2, 0x9f, 0x12, 0x01, 0x72, 0xb2, 0x5f, 0x12, 0x01, 0x71, 0xb2, 0x40, 0x12, 0x01, 0x5d, // r....r._..q.@..] + 0xb2, 0x80, 0x12, 0x01, 0x5d, 0xb0, 0x12, 0x10, 0xb0, 0x07, 0xd0, 0xb0, 0x03, 0xd0, 0xb0, 0x0f, // ....]........... + 0xd0, 0xb0, 0x08, 0x10, 0xb0, 0x10, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x14, // ........+X...Y.. + 0xd0, 0xb0, 0x15, 0xd0, 0x30, 0x31, 0x01, 0x27, 0x03, 0x23, 0x03, 0x07, 0x11, 0x23, 0x11, 0x33, // ....01.'.#...#.3 + 0x13, 0x33, 0x13, 0x33, 0x11, 0x23, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0x04, 0x03, // .3.3.#.#.#.#5!.. + 0x06, 0x96, 0x33, 0x9c, 0x06, 0x5d, 0x74, 0xa1, 0x06, 0xa2, 0x6e, 0x5d, 0xfd, 0xe4, 0x91, 0x5e, // ..3..]t...n]...^ + 0x91, 0x01, 0x80, 0x04, 0xee, 0x02, 0xfe, 0xa7, 0x01, 0x67, 0x02, 0xfe, 0x9b, 0x02, 0x19, 0xfe, // .........g...... + 0x7a, 0x01, 0x86, 0xfd, 0xe7, 0x01, 0xc7, 0xfe, 0x39, 0x01, 0xc7, 0x52, 0x00, 0x02, 0x00, 0x98, // z.......9..R.... + 0xff, 0xec, 0x04, 0x93, 0x04, 0x4e, 0x00, 0x15, 0x00, 0x1e, 0x00, 0x53, 0x00, 0xb0, 0x00, 0x45, // .....N.....S...E + 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb2, 0x0e, 0x03, 0x09, 0x11, 0x12, 0x39, 0xb0, 0x0e, // /....>Y......9.. + 0x2f, 0xb0, 0x03, 0x10, 0xb0, 0x12, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x70, // /.......+X...Y.p + 0x12, 0x01, 0x71, 0xb0, 0x09, 0x10, 0xb0, 0x16, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // ..q.......+X...Y + 0xb0, 0x0e, 0x10, 0xb0, 0x1a, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x25, // .......+X...Y01% + 0x06, 0x06, 0x23, 0x22, 0x00, 0x35, 0x34, 0x00, 0x33, 0x32, 0x00, 0x15, 0x15, 0x21, 0x11, 0x16, // ..#".54.32...!.. + 0x16, 0x33, 0x32, 0x36, 0x37, 0x01, 0x22, 0x06, 0x07, 0x11, 0x21, 0x11, 0x26, 0x26, 0x04, 0x16, // .3267."...!.&&.. + 0x57, 0xbc, 0x5f, 0xda, 0xfe, 0xce, 0x01, 0x43, 0xc9, 0xcf, 0x01, 0x20, 0xfd, 0x00, 0x37, 0x8d, // W._....C... ..7. + 0x4d, 0x5f, 0xba, 0x57, 0xfe, 0x90, 0x4a, 0x8d, 0x3a, 0x02, 0x1c, 0x36, 0x8b, 0x5e, 0x37, 0x3b, // M_.W..J.:..6.^7; + 0x01, 0x49, 0xe8, 0xe2, 0x01, 0x4f, 0xfe, 0xca, 0xe7, 0x2f, 0xfe, 0xb8, 0x35, 0x39, 0x3c, 0x3e, // .I...O.../..59<> + 0x03, 0x2a, 0x41, 0x39, 0xfe, 0xeb, 0x01, 0x1e, 0x34, 0x3d, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6b, // .*A9....4=.....k + 0xff, 0xf5, 0x06, 0x52, 0x05, 0xb2, 0x00, 0x27, 0x03, 0xae, 0x00, 0x0c, 0x02, 0x86, 0x00, 0x27, // ...R...'.......' + 0x03, 0x46, 0x01, 0x06, 0x00, 0x00, 0x01, 0x07, 0x03, 0x6d, 0x03, 0x4b, 0x00, 0x00, 0x00, 0x26, // .F.......m.K...& + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0c, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x06, 0x3e, 0x59, 0xb0, 0x2b, 0xd0, 0xb0, 0x13, // EX../....>Y.+... + 0x10, 0xb0, 0x37, 0xd0, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6e, 0xff, 0xf5, 0x06, 0xe9, // ..7.01.....n.... + 0x05, 0xc0, 0x00, 0x27, 0x03, 0xab, 0x00, 0x04, 0x02, 0x94, 0x00, 0x27, 0x03, 0x46, 0x01, 0xbf, // ...'.......'.F.. + 0x00, 0x00, 0x01, 0x07, 0x03, 0x6d, 0x03, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x00, 0xb0, 0x00, 0x45, // .....m.....&...E + 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x38, // X../....>Y..EX.8 + 0x2f, 0x1b, 0xb1, 0x38, 0x06, 0x3e, 0x59, 0xb0, 0x50, 0xd0, 0xb0, 0x38, 0x10, 0xb0, 0x5c, 0xd0, // /..8.>Y.P..8.... + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xf5, 0x07, 0x19, 0x05, 0xaf, 0x00, 0x27, // 01.....p.......' + 0x03, 0xa9, 0xff, 0xfe, 0x02, 0x8e, 0x00, 0x27, 0x03, 0x46, 0x01, 0xf7, 0x00, 0x00, 0x01, 0x07, // .......'.F...... + 0x03, 0x6d, 0x04, 0x12, 0x00, 0x00, 0x00, 0x26, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, // .m.....&...EX../ + 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x2d, 0x2f, 0x1b, 0xb1, 0x2d, // ....>Y..EX.-/..- + 0x06, 0x3e, 0x59, 0xb0, 0x45, 0xd0, 0xb0, 0x2d, 0x10, 0xb0, 0x51, 0xd0, 0x30, 0x31, 0x00, 0x00, // .>Y.E..-..Q.01.. + 0xff, 0xff, 0x00, 0x6b, 0xff, 0xf5, 0x06, 0x72, 0x05, 0xaf, 0x00, 0x27, 0x03, 0xb3, 0x00, 0x0c, // ...k...r...'.... + 0x02, 0x8e, 0x00, 0x27, 0x03, 0x46, 0x01, 0x36, 0x00, 0x00, 0x01, 0x07, 0x03, 0x6d, 0x03, 0x6b, // ...'.F.6.....m.k + 0x00, 0x00, 0x00, 0x26, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, // ...&...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x32, 0xd0, 0xb0, 0x1a, 0x10, 0xb0, 0x3e, 0xd0, 0x30, 0x31, 0x00, 0x00, 0x00, 0x02, 0x00, 0x48, // 2.....>.01.....H + 0xff, 0xeb, 0x04, 0x30, 0x05, 0xed, 0x00, 0x14, 0x00, 0x21, 0x00, 0x31, 0x00, 0xb0, 0x00, 0x2f, // ...0.....!.1.../ + 0xb0, 0x0d, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, // ../..EX../....>Y + 0xb1, 0x15, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb1, // .....+X!...Y.... + 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x04, 0x00, // ....+X!...Y01... + 0x11, 0x15, 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x37, 0x26, // ....#".54.32..7& + 0x26, 0x27, 0x13, 0x32, 0x36, 0x35, 0x35, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x01, // &'.2655&&#"..... + 0xe7, 0x01, 0x07, 0x01, 0x42, 0xfe, 0xe0, 0xd7, 0xda, 0xfe, 0xe9, 0xfa, 0xda, 0x5f, 0xa8, 0x36, // ....B........_.6 + 0x03, 0x16, 0xeb, 0xb0, 0x92, 0x85, 0xa9, 0x24, 0xac, 0x7f, 0x88, 0x87, 0xa4, 0x05, 0xed, 0x3f, // .......$.......? + 0xfe, 0x6c, 0xfe, 0xd9, 0xdc, 0xf5, 0xfe, 0xc9, 0x01, 0x18, 0xcf, 0xe9, 0x01, 0x17, 0x3b, 0x34, // .l............;4 + 0x05, 0xc1, 0xec, 0x34, 0xfb, 0x3c, 0xe4, 0xae, 0x81, 0x43, 0x5c, 0xc9, 0x9c, 0x84, 0xc9, 0x00, // ...4.<...C...... + 0x00, 0x01, 0x00, 0xa8, 0xff, 0x2d, 0x04, 0xf4, 0x05, 0xb0, 0x00, 0x07, 0x00, 0x28, 0x00, 0xb0, // .....-.......(.. + 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x04, 0x10, 0xb0, 0x01, 0xd0, 0xb0, 0x06, 0x10, 0xb1, 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // .............+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x05, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x04, 0xf4, // ...Y01.#.!.#.!.. + 0xc5, 0xfd, 0x3e, 0xc5, 0x04, 0x4c, 0xd3, 0x05, 0xe8, 0xfa, 0x18, 0x06, 0x83, 0x00, 0x00, 0x00, // ..>..L.......... + 0x00, 0x01, 0x00, 0x46, 0xfe, 0xf3, 0x04, 0xae, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x31, 0x00, 0xb0, // ...F.........1.. + 0x04, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, // ./..EX../....>Y. + 0x04, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, // .......+X!...Y.. + 0x10, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x01, 0x17, 0x21, 0x15, 0x21, 0x35, 0x01, 0x01, 0x35, 0x21, 0x15, 0x21, 0x07, 0x01, 0x03, 0x65, // ..!.!5..5!.!...e + 0xfd, 0xd2, 0x02, 0x03, 0x75, 0xfb, 0x98, 0x02, 0x62, 0xfd, 0x9e, 0x04, 0x19, 0xfc, 0xd8, 0x02, // ....u...b....... + 0x02, 0x30, 0x02, 0x24, 0xfd, 0x6f, 0x05, 0x9b, 0x92, 0x02, 0xc9, 0x02, 0xcf, 0x93, 0x9b, 0x05, // .0.$.o.......... + 0xfd, 0x67, 0x00, 0x00, 0x00, 0x01, 0x00, 0xa8, 0x02, 0x88, 0x03, 0xeb, 0x03, 0x23, 0x00, 0x03, // .g...........#.. + 0x00, 0x12, 0x00, 0xb0, 0x02, 0x2f, 0xb1, 0x01, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ...../.....+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x35, 0x21, 0x03, 0xeb, 0xfc, 0xbd, 0x03, 0x43, 0x02, 0x88, // .Y01.!5!.....C.. + 0x9b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x04, 0xad, 0x05, 0xb0, 0x00, 0x0b, // .......?........ + 0x00, 0x3e, 0x00, 0xb0, 0x0a, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // .>.../..EX../... + 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x01, 0xd0, 0x40, 0x09, 0x64, 0x01, 0x74, 0x01, 0x84, 0x01, 0x94, 0x01, 0x04, 0x5d, 0xb0, // ...@.d.t......]. + 0x0a, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // .......+X!...Y01 + 0x01, 0x17, 0x33, 0x37, 0x01, 0x33, 0x01, 0x23, 0x03, 0x23, 0x35, 0x21, 0x02, 0x2a, 0x12, 0x06, // ..37.3.#.#5!.*.. + 0x13, 0x01, 0x8f, 0xc9, 0xfd, 0xdb, 0x95, 0xf8, 0xbc, 0x01, 0x48, 0x01, 0x54, 0x53, 0x53, 0x04, // ..........H.TSS. + 0x5c, 0xfa, 0x50, 0x02, 0x74, 0x9c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x68, 0xff, 0xeb, 0x07, 0xbb, // ..P.t......h.... + 0x04, 0x4e, 0x00, 0x19, 0x00, 0x27, 0x00, 0x35, 0x00, 0x5b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .N...'.5.[...EX. + 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x16, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x16, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb1, // >Y..EX../....>Y. + 0x1d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x10, 0x10, 0xb1, 0x24, // ....+X!...Y....$ + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x2b, 0xd0, 0xb0, 0x1d, 0x10, // ...+X!...Y.+.... + 0xb0, 0x32, 0xd0, 0x30, 0x31, 0x01, 0x14, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, // .2.01...#"&'..#" + 0x02, 0x35, 0x35, 0x34, 0x12, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x12, 0x15, 0x05, // .554.32..6632... + 0x14, 0x16, 0x33, 0x32, 0x12, 0x37, 0x35, 0x26, 0x02, 0x23, 0x22, 0x06, 0x15, 0x21, 0x34, 0x26, // ..32.75&.#"..!4& + 0x23, 0x22, 0x02, 0x07, 0x15, 0x16, 0x12, 0x33, 0x32, 0x36, 0x35, 0x07, 0xbb, 0xfa, 0xcd, 0xa5, // #".....3265..... + 0xee, 0x50, 0x50, 0xef, 0xa3, 0xce, 0xf9, 0xf8, 0xcd, 0xa4, 0xf0, 0x51, 0x4f, 0xf0, 0xa5, 0xcb, // .PP........QO... + 0xfa, 0xf9, 0x72, 0x83, 0x7f, 0x89, 0xd5, 0x1b, 0x1c, 0xd5, 0x8a, 0x7e, 0x82, 0x05, 0xc9, 0x84, // ..r........~.... + 0x7c, 0x8a, 0xd4, 0x1e, 0x1d, 0xd4, 0x89, 0x7e, 0x84, 0x01, 0xfb, 0xe1, 0xfe, 0xd1, 0xd7, 0x9c, // |......~........ + 0x9b, 0xd8, 0x01, 0x2f, 0xe1, 0x42, 0xe0, 0x01, 0x31, 0xd8, 0x9b, 0x9a, 0xd9, 0xfe, 0xce, 0xdf, // .../.B..1....... + 0x42, 0xaa, 0xcc, 0x01, 0x17, 0x6c, 0x2a, 0x6a, 0x01, 0x17, 0xcf, 0xa7, 0xa7, 0xcf, 0xfe, 0xeb, // B....l*j........ + 0x6c, 0x2a, 0x6e, 0xfe, 0xeb, 0xcd, 0xa9, 0x00, 0x00, 0x01, 0xff, 0xbc, 0xfe, 0x4b, 0x02, 0x93, // l*n..........K.. + 0x06, 0x2d, 0x00, 0x1b, 0x00, 0x2e, 0x00, 0xb0, 0x11, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // .-......./..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x08, 0x3e, 0x59, 0xb1, 0x0a, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /....>Y.....+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x11, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x05, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, // .Y01...#"&'7..32 + 0x36, 0x35, 0x11, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, // 65.4632...&&#".. + 0x01, 0x70, 0xac, 0x99, 0x1f, 0x33, 0x1d, 0x0e, 0x0e, 0x41, 0x12, 0x3b, 0x45, 0xb6, 0xa2, 0x21, // .p...3...A.;E..! + 0x45, 0x2a, 0x18, 0x14, 0x2c, 0x19, 0x57, 0x5b, 0x59, 0xa7, 0xb5, 0x09, 0x09, 0x96, 0x05, 0x08, // E*..,.W[Y....... + 0x67, 0x5a, 0x05, 0x1c, 0xad, 0xbd, 0x0b, 0x0a, 0x91, 0x05, 0x06, 0x6d, 0x62, 0x00, 0x00, 0x00, // gZ.........mb... + 0x00, 0x02, 0x00, 0x65, 0x01, 0x10, 0x04, 0x14, 0x04, 0x00, 0x00, 0x19, 0x00, 0x33, 0x00, 0x70, // ...e.........3.p + 0x00, 0xb2, 0x16, 0x1d, 0x03, 0x2b, 0xb0, 0x16, 0x10, 0xb1, 0x03, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // .....+........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, // !...Y....+X...Y. + 0x03, 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x09, 0x10, 0xb1, 0x10, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // .............+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x19, 0xd0, 0xb0, 0x1d, 0x10, 0xb0, 0x23, 0xb0, 0x0a, 0x2b, 0x58, // ...Y.......#..+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x1d, 0x10, 0xb0, 0x26, 0xd0, 0xb0, 0x23, 0x10, 0xb1, 0x2a, 0x03, // ...Y....&..#..*. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, 0x10, 0xb1, 0x30, 0x03, 0xb0, // ..+X!...Y....0.. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x2a, 0x10, 0xb0, 0x33, 0xd0, 0x30, 0x31, // .+X!...Y.*..3.01 + 0x13, 0x36, 0x36, 0x33, 0x36, 0x16, 0x17, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, // .6636....3267... + 0x23, 0x22, 0x26, 0x27, 0x26, 0x26, 0x07, 0x22, 0x06, 0x07, 0x07, 0x36, 0x36, 0x33, 0x36, 0x16, // #"&'&&."...6636. + 0x17, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x26, 0x26, // ...3267...#"&'&& + 0x07, 0x22, 0x06, 0x07, 0x6f, 0x2f, 0x7c, 0x41, 0x45, 0x40, 0x65, 0x56, 0x42, 0x42, 0x40, 0x7c, // ."..o/|AE@eVBB@| + 0x30, 0x09, 0x30, 0x7c, 0x40, 0x42, 0x42, 0x56, 0x65, 0x40, 0x45, 0x41, 0x7c, 0x2f, 0x13, 0x2f, // 0.0|@BBVe@EA|/./ + 0x7c, 0x41, 0x45, 0x40, 0x65, 0x59, 0x40, 0x41, 0x40, 0x7c, 0x30, 0x09, 0x30, 0x7c, 0x40, 0x42, // |AE@eY@A@|0.0|@B + 0x42, 0x56, 0x69, 0x3d, 0x44, 0x41, 0x7c, 0x2f, 0x03, 0x6a, 0x44, 0x4e, 0x01, 0x18, 0x32, 0x2c, // BVi=DA|/.jDN..2, + 0x19, 0x4d, 0x45, 0xae, 0x45, 0x4d, 0x19, 0x2c, 0x32, 0x18, 0x01, 0x4e, 0x44, 0xfd, 0x44, 0x4e, // .ME.EM.,2..ND.DN + 0x01, 0x18, 0x32, 0x2e, 0x18, 0x4d, 0x46, 0xaf, 0x45, 0x4d, 0x19, 0x2c, 0x34, 0x17, 0x01, 0x4e, // ..2..MF.EM.,4..N + 0x45, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x98, 0x00, 0xa7, 0x03, 0xda, 0x04, 0xe3, 0x00, 0x13, // E............... + 0x00, 0x38, 0x00, 0xb2, 0x0f, 0x0c, 0x03, 0x2b, 0xb0, 0x0f, 0x10, 0xb1, 0x10, 0x03, 0xb0, 0x0a, // .8.....+........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0xd0, 0xb0, 0x0f, 0x10, 0xb0, 0x03, 0xd0, // +X!...Y......... + 0xb0, 0x0c, 0x10, 0xb0, 0x04, 0xd0, 0xb0, 0x0c, 0x10, 0xb1, 0x0b, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // ..............+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x07, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x15, 0x21, 0x07, 0x21, // !...Y...01.3.!.! + 0x15, 0x21, 0x07, 0x27, 0x37, 0x23, 0x35, 0x21, 0x37, 0x21, 0x35, 0x21, 0x13, 0x17, 0x03, 0x19, // .!.'7#5!7!5!.... + 0xc1, 0xfe, 0xe4, 0x8c, 0x01, 0xa8, 0xfd, 0xfd, 0x85, 0x57, 0x64, 0xc7, 0x01, 0x22, 0x8c, 0xfe, // .........Wd..".. + 0x52, 0x02, 0x09, 0x93, 0x57, 0x03, 0xdb, 0xa4, 0xfc, 0xa4, 0xf0, 0x3c, 0xb4, 0xa4, 0xfc, 0xa4, // R...W......<.... + 0x01, 0x08, 0x3c, 0x00, 0xff, 0xff, 0x00, 0x9e, 0x00, 0x07, 0x03, 0xe7, 0x04, 0x3a, 0x00, 0x27, // ..<..........:.' + 0x03, 0x5a, 0xff, 0xfc, 0xfd, 0x7f, 0x01, 0x47, 0x00, 0x1f, 0x00, 0x57, 0x00, 0xbc, 0x40, 0x00, // .Z.....G...W..@. + 0x39, 0x9a, 0x00, 0x31, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, // 9..1...EX../.... + 0x3e, 0x59, 0xb0, 0x09, 0xd0, 0xb2, 0x0f, 0x09, 0x01, 0x5d, 0xb2, 0x2f, 0x09, 0x01, 0x71, 0xb2, // >Y.......]./..q. + 0xaf, 0x09, 0x01, 0x71, 0xb2, 0xbf, 0x09, 0x01, 0x5d, 0xb2, 0x30, 0x09, 0x01, 0x71, 0xb2, 0xc0, // ...q....].0..q.. + 0x09, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9a, 0x00, 0x05, 0x03, 0xf2, // ..]01........... + 0x04, 0x3a, 0x00, 0x27, 0x03, 0x5a, 0xff, 0xfc, 0xfd, 0x7d, 0x01, 0x47, 0x00, 0x21, 0x00, 0x12, // .:.'.Z...}.G.!.. + 0x00, 0xbc, 0x40, 0x00, 0x39, 0x9a, 0x00, 0x31, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, // ..@.9..1...EX../ + 0x1b, 0xb1, 0x01, 0x06, 0x3e, 0x59, 0xb0, 0x08, 0xd0, 0xb2, 0x0f, 0x08, 0x01, 0x5d, 0xb2, 0x2f, // ....>Y.......]./ + 0x08, 0x01, 0x71, 0xb2, 0xaf, 0x08, 0x01, 0x71, 0xb2, 0xbf, 0x08, 0x01, 0x5d, 0xb2, 0x30, 0x08, // ..q....q....].0. + 0x01, 0x71, 0xb2, 0xc0, 0x08, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x29, // .q....]01......) + 0x00, 0x00, 0x03, 0xdf, 0x05, 0xb0, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, // ...........)...E + 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb0, 0x08, 0xd0, 0xb0, 0x03, 0x10, // /....>Y......... + 0xb0, 0x0d, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, 0x21, 0x01, 0x27, 0x23, 0x07, // ...01.3..#.!.'#. + 0x03, 0x01, 0x17, 0x33, 0x37, 0x01, 0xb7, 0x96, 0x01, 0x92, 0xfe, 0x71, 0x95, 0xfe, 0x6e, 0x02, // ...37......q..n. + 0xed, 0xfe, 0xff, 0x11, 0x06, 0x12, 0xfa, 0x01, 0x01, 0x11, 0x06, 0x12, 0x05, 0xb0, 0xfd, 0x27, // ...............' + 0xfd, 0x29, 0x02, 0xd7, 0x02, 0x00, 0x32, 0x32, 0xfe, 0x00, 0xfe, 0x01, 0x32, 0x32, 0x00, 0x00, // .)....22....22.. + 0x00, 0x01, 0x00, 0x65, 0xff, 0x7a, 0x01, 0x40, 0x00, 0xf3, 0x00, 0x05, 0x00, 0x1c, 0x00, 0xb0, // ...e.z.@........ + 0x04, 0x2f, 0xb2, 0x00, 0x04, 0x01, 0x5d, 0xb4, 0x40, 0x04, 0x50, 0x04, 0x02, 0x5d, 0xb0, 0x02, // ./....].@.P..].. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x25, 0x07, 0x23, 0x37, 0x35, 0x33, // ..+X...Y01%.#753 + 0x01, 0x40, 0x7a, 0x61, 0x3d, 0x9e, 0x67, 0xed, 0xf6, 0x83, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1c, // .@za=.g......... + 0x00, 0x00, 0x03, 0xd5, 0x06, 0x2d, 0x00, 0x17, 0x00, 0x1b, 0x00, 0x73, 0x00, 0xb0, 0x08, 0x2f, // .....-.....s.../ + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x13, 0x2f, 0x1b, 0xb1, 0x13, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x1a, 0x0a, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x18, 0x2f, 0x1b, 0xb1, 0x18, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb2, 0x2f, 0x08, 0x01, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ./..]........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb0, 0x15, 0xd0, 0xb0, 0x16, 0xd0, 0x30, 0x31, 0x33, // ...Y.........013 + 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, // .#5354632...&&#" + 0x06, 0x15, 0x15, 0x33, 0x15, 0x23, 0x11, 0x21, 0x23, 0x11, 0x33, 0xc6, 0xaa, 0xaa, 0xd5, 0xbd, // ...3.#.!#.3..... + 0x43, 0x82, 0x58, 0x22, 0x35, 0x78, 0x3f, 0x75, 0x67, 0xd7, 0xd7, 0x02, 0x4a, 0xc6, 0xc6, 0x03, // C.X"5x?ug...J... + 0xa8, 0x92, 0x75, 0xb6, 0xc8, 0x1f, 0x1e, 0xa0, 0x15, 0x1e, 0x68, 0x6c, 0x75, 0x92, 0xfc, 0x58, // ..u.......hlu..X + 0x04, 0x3a, 0x00, 0x00, 0xff, 0xff, 0x00, 0x38, 0x00, 0x00, 0x04, 0x27, 0x06, 0x2d, 0x00, 0x26, // .:.....8...'.-.& + 0x00, 0x49, 0x00, 0x00, 0x00, 0x07, 0x00, 0x4f, 0x02, 0xc3, 0x00, 0x00, 0xff, 0xff, 0x00, 0x38, // .I.....O.......8 + 0x00, 0x00, 0x06, 0x98, 0x06, 0x2d, 0x00, 0x26, 0x00, 0x49, 0x00, 0x00, 0x00, 0x07, 0x03, 0x64, // .....-.&.I.....d + 0x02, 0xc3, 0x00, 0x00, 0xff, 0xff, 0x00, 0x38, 0x00, 0x00, 0x06, 0xea, 0x06, 0x2d, 0x00, 0x26, // .......8.....-.& + 0x00, 0x49, 0x00, 0x00, 0x00, 0x27, 0x00, 0x49, 0x02, 0xc3, 0x00, 0x00, 0x00, 0x07, 0x00, 0x4f, // .I...'.I.......O + 0x05, 0x86, 0x00, 0x00, 0x00, 0x16, 0x00, 0x5b, 0xfe, 0x72, 0x07, 0xee, 0x05, 0xae, 0x00, 0x0d, // .......[.r...... + 0x00, 0x1c, 0x00, 0x2a, 0x00, 0x3b, 0x00, 0x41, 0x00, 0x47, 0x00, 0x4d, 0x00, 0x53, 0x00, 0x5d, // ...*.;.A.G.M.S.] + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x71, 0x00, 0x75, 0x00, 0x7e, 0x00, 0x82, // .a.e.i.m.q.u.~.. + 0x00, 0x86, 0x00, 0x8a, 0x00, 0x8e, 0x00, 0x92, 0x00, 0x96, 0x02, 0x16, 0x00, 0xb0, 0x3c, 0x2f, // ..............Y..EX.g/..g. + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x63, 0x2f, 0x1b, 0xb1, 0x63, 0x0c, 0x3e, 0x59, 0xb0, // >Y..EX.c/..c.>Y. + 0x00, 0x45, 0x58, 0xb0, 0x5f, 0x2f, 0x1b, 0xb1, 0x5f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX._/.._.>Y..EX + 0xb0, 0x4f, 0x2f, 0x1b, 0xb1, 0x4f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, // .O/..O.>Y..EX../ + 0x1b, 0xb1, 0x0a, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, 0x2f, 0x1b, 0xb1, 0x0f, // ....>Y..EX../... + 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x2b, 0x2f, 0x1b, 0xb1, 0x2b, 0x10, 0x3e, 0x59, // .>Y..EX.+/..+.>Y + 0xb2, 0x40, 0x03, 0x01, 0x5d, 0xb2, 0x40, 0x03, 0x01, 0x71, 0xb2, 0xc0, 0x03, 0x01, 0x5d, 0xb2, // .@..].@..q....]. + 0x40, 0x0e, 0x01, 0x71, 0xb2, 0xc0, 0x0e, 0x01, 0x5d, 0xb2, 0x40, 0x0e, 0x01, 0x5d, 0xb2, 0x7f, // @..q....].@..].. + 0x76, 0x01, 0x72, 0xb2, 0x3f, 0x76, 0x01, 0x5d, 0xb6, 0x5f, 0x76, 0x6f, 0x76, 0x7f, 0x76, 0x03, // v.r.?v.]._vov.v. + 0x5d, 0xb2, 0x5f, 0x76, 0x01, 0x71, 0xb4, 0xdf, 0x76, 0xef, 0x76, 0x02, 0x5d, 0xb2, 0x4f, 0x76, // ]._v.q..v.v.].Ov + 0x01, 0x72, 0xb4, 0xef, 0x76, 0xff, 0x76, 0x02, 0x72, 0xb2, 0x2f, 0x76, 0x01, 0x71, 0xb2, 0xcf, // .r..v.v.r./v.q.. + 0x76, 0x01, 0x71, 0xb0, 0x76, 0x10, 0xb0, 0x54, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // v.q.v..T..+X...Y + 0xb4, 0x10, 0x54, 0x20, 0x54, 0x02, 0x72, 0xb2, 0x16, 0x54, 0x76, 0x11, 0x12, 0x39, 0xb0, 0x0a, // ..T T.r..Tv..9.. + 0x10, 0xb0, 0x20, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x10, 0x20, 0x01, 0x72, // .. ..+X...Y.. .r + 0xb0, 0x03, 0x10, 0xb0, 0x27, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x1f, 0x27, // ....'..+X...Y..' + 0x01, 0x72, 0xb2, 0xc0, 0x30, 0x01, 0x5d, 0xb2, 0x40, 0x30, 0x01, 0x71, 0xb2, 0x40, 0x30, 0x01, // .r..0.].@0.q.@0. + 0x5d, 0xb0, 0x30, 0x10, 0xb0, 0x38, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x88, // ].0..8..+X...Y.. + 0x10, 0xb0, 0x3d, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x3c, 0x10, 0xb0, 0x3f, // ..=..+X...Y.<..? + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x2f, 0x3f, 0x01, 0x71, 0xb2, 0x4f, 0x3f, // ..+X...Y./?.q.O? + 0x01, 0x72, 0xb0, 0x3c, 0x10, 0xb0, 0x72, 0xd0, 0xb0, 0x6e, 0xd0, 0xb0, 0x6a, 0xd0, 0xb0, 0x42, // .r.<..r..n..j..B + 0xd0, 0xb0, 0x3f, 0x10, 0xb0, 0x73, 0xd0, 0xb0, 0x6f, 0xd0, 0xb0, 0x6b, 0xd0, 0xb0, 0x43, 0xd0, // ..?..s..o..k..C. + 0xb0, 0x3d, 0x10, 0xb0, 0x45, 0xd0, 0xb0, 0x49, 0x10, 0xb0, 0x4c, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, // .=..E..I..L..+X. + 0x1b, 0xdc, 0x59, 0xb0, 0x66, 0xd0, 0xb0, 0x62, 0xd0, 0xb0, 0x5e, 0xd0, 0xb0, 0x4e, 0xd0, 0xb0, // ..Y.f..b..^..N.. + 0x48, 0x10, 0xb0, 0x52, 0xd0, 0xb0, 0x0e, 0x10, 0xb0, 0x55, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // H..R.....U..+X.. + 0xdc, 0x59, 0xb2, 0x00, 0x55, 0x01, 0x72, 0xb0, 0x0f, 0x10, 0xb0, 0x7e, 0xb0, 0x0a, 0x2b, 0x58, // .Y..U.r....~..+X + 0xd8, 0x1b, 0xdc, 0x59, 0x40, 0x09, 0xcf, 0x7e, 0xdf, 0x7e, 0xef, 0x7e, 0xff, 0x7e, 0x04, 0x71, // ...Y@..~.~.~.~.q + 0xb2, 0x0f, 0x7e, 0x01, 0x72, 0xb0, 0x84, 0x10, 0xb0, 0x81, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // ..~.r.......+X.. + 0xdc, 0x59, 0xb0, 0x48, 0x10, 0xb0, 0x85, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, // .Y.H.....+X...Y. + 0x80, 0x10, 0xb0, 0x89, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x80, 0x10, 0xb0, // ......+X...Y.... + 0x8c, 0xd0, 0xb0, 0x81, 0x10, 0xb0, 0x8d, 0xd0, 0xb0, 0x84, 0x10, 0xb0, 0x90, 0xd0, 0xb0, 0x85, // ................ + 0x10, 0xb0, 0x91, 0xd0, 0xb0, 0x88, 0x10, 0xb0, 0x94, 0xd0, 0xb0, 0x89, 0x10, 0xb0, 0x95, 0xd0, // ................ + 0x30, 0x31, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, // 01...#"&554632.. + 0x13, 0x11, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x01, // ..32..........#. + 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x01, 0x33, 0x11, // 4&#".....3265.3. + 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x01, 0x11, // ..#"&773..3265.. + 0x33, 0x15, 0x33, 0x15, 0x21, 0x35, 0x33, 0x35, 0x33, 0x11, 0x01, 0x11, 0x21, 0x15, 0x23, 0x15, // 3.3.!5353...!.#. + 0x25, 0x35, 0x21, 0x11, 0x23, 0x35, 0x01, 0x15, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x23, // %5!.#5..32654&'# + 0x13, 0x35, 0x21, 0x15, 0x21, 0x35, 0x21, 0x15, 0x21, 0x35, 0x21, 0x15, 0x01, 0x35, 0x21, 0x15, // .5!.!5!.!5!..5!. + 0x21, 0x35, 0x21, 0x15, 0x21, 0x35, 0x21, 0x15, 0x13, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, // !5!.!5!..32654&# + 0x23, 0x01, 0x23, 0x35, 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x23, 0x35, 0x33, 0x25, 0x23, 0x35, // #.#535#53.#53%#5 + 0x33, 0x35, 0x23, 0x35, 0x33, 0x11, 0x23, 0x35, 0x33, 0x03, 0x39, 0x80, 0x65, 0x68, 0x80, 0x80, // 35#53.#53.9.eh.. + 0x66, 0x66, 0x81, 0x43, 0xbc, 0x65, 0x6f, 0x2c, 0x28, 0x30, 0x36, 0x69, 0x5c, 0xfe, 0x84, 0x4b, // ff.C.eo,(06i...K + 0x40, 0x40, 0x4a, 0x4a, 0x42, 0x3f, 0x4a, 0x03, 0xba, 0x5c, 0x6a, 0x51, 0x5b, 0x69, 0x06, 0x02, // @@JJB?J...jQ[i.. + 0x54, 0x36, 0x32, 0x28, 0x37, 0xf9, 0xc4, 0x71, 0xc4, 0x05, 0x28, 0xc7, 0x6f, 0xf8, 0x6d, 0x01, // T62(7..q..(.o.m. + 0x35, 0xc4, 0x05, 0xec, 0x01, 0x36, 0x6f, 0xfc, 0x5c, 0x7e, 0x32, 0x35, 0x33, 0x2f, 0x05, 0xd0, // 5....6o..~253/.. + 0x01, 0x16, 0xfd, 0x5b, 0x01, 0x15, 0xfd, 0x5c, 0x01, 0x14, 0x02, 0x0a, 0x01, 0x16, 0xfd, 0x5b, // ...[...........[ + 0x01, 0x15, 0xfd, 0x5c, 0x01, 0x14, 0xbc, 0x5d, 0x3a, 0x3c, 0x39, 0x3d, 0x5d, 0xfc, 0xf1, 0x71, // .......]:<9=]..q + 0x71, 0x71, 0x71, 0x71, 0x71, 0x07, 0x22, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x01, 0xd4, 0x62, // qqqqq."oooooo..b + 0x79, 0x79, 0x62, 0x70, 0x60, 0x7b, 0x7b, 0x60, 0xfe, 0xb8, 0x02, 0x25, 0x4b, 0x4b, 0x27, 0x3e, // yybp`{{`...%KK'> + 0x0f, 0x0d, 0x46, 0x2d, 0x4c, 0x4f, 0x01, 0x48, 0x44, 0x4f, 0x4f, 0x44, 0x70, 0x45, 0x4e, 0x4e, // ..F-LO.HDOODpENN + 0x45, 0x01, 0x4f, 0xfe, 0x86, 0x4f, 0x5c, 0x51, 0x4d, 0x06, 0x2e, 0x2d, 0x36, 0x2c, 0xfc, 0xc9, // E.O..O.QM..-6,.. + 0x01, 0x3b, 0xca, 0x71, 0x71, 0xca, 0xfe, 0xc5, 0x06, 0x1f, 0x01, 0x1d, 0x74, 0xa9, 0xa9, 0x74, // .;.qq.......t..t + 0xfe, 0xe3, 0xa9, 0xfc, 0xb6, 0xa9, 0x2b, 0x28, 0x26, 0x2e, 0x02, 0x03, 0x4a, 0x74, 0x74, 0x74, // ......+(&...Jttt + 0x74, 0x74, 0x74, 0xf9, 0x38, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x03, 0xc4, 0x28, 0x28, 0x27, // ttt.8qqqqqq..((' + 0x20, 0xfe, 0xd3, 0xfc, 0x7e, 0xfa, 0xfc, 0x15, 0xf9, 0x7e, 0xfc, 0x7e, 0xfa, 0xfc, 0x15, 0xf9, // ...~....~.~.... + 0x00, 0x05, 0x00, 0x5c, 0xfd, 0xd5, 0x07, 0xd7, 0x08, 0x62, 0x00, 0x03, 0x00, 0x1e, 0x00, 0x22, // .........b....." + 0x00, 0x26, 0x00, 0x2a, 0x00, 0x00, 0x09, 0x03, 0x05, 0x34, 0x36, 0x37, 0x36, 0x36, 0x35, 0x34, // .&.*.....4676654 + 0x26, 0x23, 0x22, 0x06, 0x17, 0x17, 0x33, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, // &#"...36632..... + 0x06, 0x06, 0x15, 0x17, 0x23, 0x15, 0x33, 0x03, 0x33, 0x15, 0x23, 0x03, 0x33, 0x15, 0x23, 0x04, // ....#.3.3.#.3.#. + 0x18, 0x03, 0xbf, 0xfc, 0x41, 0xfc, 0x44, 0x04, 0x0f, 0x1a, 0x28, 0x48, 0x5e, 0xa9, 0x93, 0x88, // ....A.D...(H^... + 0xa7, 0x03, 0x03, 0xc2, 0x01, 0x3b, 0x2b, 0x36, 0x3b, 0x33, 0x2a, 0x4f, 0x3b, 0xca, 0xca, 0xca, // .....;+6;3*O;... + 0x4b, 0x04, 0x04, 0x02, 0x04, 0x04, 0x06, 0x52, 0xfc, 0x31, 0xfc, 0x31, 0x03, 0xcf, 0xf1, 0x35, // K......R.1.1...5 + 0x3d, 0x1a, 0x27, 0x83, 0x4e, 0x80, 0x97, 0x82, 0x82, 0x06, 0x33, 0x34, 0x3f, 0x35, 0x32, 0x4d, // =.'.N.....34?52M + 0x1c, 0x37, 0x5a, 0x58, 0x5b, 0xaa, 0xfd, 0x4c, 0x04, 0x0a, 0x8d, 0x04, 0xff, 0xff, 0xff, 0x99, // .7ZX[..L........ + 0x00, 0x00, 0x02, 0x6a, 0x05, 0xb7, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, // ...j...&.......q + 0xff, 0x1e, 0x00, 0x07, 0x00, 0x08, 0x00, 0xb2, 0x1f, 0x04, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, // ...........]01.. + 0x00, 0x02, 0x00, 0x68, 0x04, 0x6f, 0x02, 0xcc, 0x05, 0xc5, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x13, // ...h.o.......... + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0c, 0x3e, 0x59, 0xb0, 0x01, // ...EX../....>Y.. + 0xd0, 0x30, 0x31, 0x01, 0x13, 0x33, 0x15, 0x03, 0x23, 0x25, 0x37, 0x33, 0x07, 0x15, 0x23, 0x01, // .01..3..#%73..#. + 0x95, 0x66, 0xd1, 0xe5, 0x52, 0xfe, 0xd3, 0xa2, 0x6c, 0x52, 0xbc, 0x04, 0x8c, 0x01, 0x39, 0x15, // .f..R...lR....9. + 0xfe, 0xc1, 0x8d, 0xc6, 0xcc, 0x89, 0x00, 0x00, 0x00, 0x03, 0x00, 0x70, 0xff, 0xf5, 0x03, 0x07, // ...........p.... + 0x03, 0x2c, 0x00, 0x17, 0x00, 0x23, 0x00, 0x2f, 0x00, 0x51, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .,...#./.Q...EX. + 0x15, 0x2f, 0x1b, 0xb1, 0x15, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb2, 0x2d, 0x09, 0x15, 0x11, 0x12, 0x39, 0xb0, 0x2d, 0x2f, 0xb1, // ...>Y.-....9.-/. + 0x1b, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x21, // ....+X!...Y....! + 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x15, 0x10, 0xb1, 0x27, 0x01, // ...+X!...Y....'. + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x07, 0x16, // ..+X!...Y01..... + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, // ....#"&5467&&546 + 0x33, 0x32, 0x16, 0x03, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, // 32..4&#"....326. + 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x02, 0xef, 0x49, 0x3e, 0x49, // 4&#"....326..I>I + 0x56, 0xb9, 0x8c, 0x92, 0xc0, 0x59, 0x4c, 0x42, 0x4a, 0xb1, 0x87, 0x82, 0xac, 0x92, 0x5c, 0x40, // V....YLBJ......@ + 0x46, 0x60, 0x5f, 0x48, 0x41, 0x5a, 0x1a, 0x4b, 0x37, 0x3d, 0x4f, 0x51, 0x3c, 0x35, 0x4c, 0x02, // F`_HAZ.K7=OQ<5L. + 0x50, 0x3b, 0x5b, 0x1b, 0x1c, 0x63, 0x3f, 0x70, 0x7c, 0x7c, 0x70, 0x3f, 0x64, 0x1c, 0x1b, 0x5a, // P;[..c?p||p?d..Z + 0x3b, 0x69, 0x73, 0x73, 0xfe, 0x2f, 0x33, 0x43, 0x42, 0x34, 0x34, 0x3d, 0x3d, 0x01, 0x93, 0x2d, // ;iss./3CB44==..- + 0x35, 0x34, 0x2e, 0x2e, 0x39, 0x39, 0x00, 0x00, 0x00, 0x02, 0x00, 0x68, 0xff, 0xf5, 0x02, 0xec, // 54..99.....h.... + 0x03, 0x2c, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x53, 0x00, 0xb0, 0x07, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .,...'.S.../..EX + 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ....>Y.....+X!.. + 0xf4, 0x59, 0xb6, 0x0f, 0x07, 0x1f, 0x07, 0x2f, 0x07, 0x03, 0x5d, 0xb0, 0x07, 0x10, 0xb1, 0x1b, // .Y...../..]..... + 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x22, 0x01, // ...+X!...Y....". + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x32, 0x36, 0x35, 0x35, // ..+X!...Y01%2655 + 0x06, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x15, 0x14, 0x06, 0x23, // ..#"&54632.....# + 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x13, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, // "&'7...26754&#". + 0x15, 0x14, 0x16, 0x01, 0x97, 0x48, 0x60, 0x1f, 0x54, 0x2f, 0x91, 0xa4, 0xb4, 0x8f, 0x8a, 0xb7, // .....H`.T/...... + 0xc3, 0x92, 0x33, 0x6e, 0x32, 0x1c, 0x2b, 0x54, 0x48, 0x3c, 0x4f, 0x0d, 0x58, 0x42, 0x42, 0x50, // ..3n2.+TH + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb0, 0x00, // Y..EX../....>Y.. + 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, // ......+X!...Y... + 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x14, 0x10, 0xb1, // .....+X!...Y.... + 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x16, // "...+X!...Y01.2. + 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // ..&&#"...6632... + 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, 0x24, 0x13, 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, // .#"&5.4$.".....3 + 0x32, 0x36, 0x35, 0x34, 0x26, 0x02, 0x4f, 0x42, 0x93, 0x43, 0x21, 0x3a, 0x72, 0x49, 0x79, 0x9b, // 2654&.OB.C!:rIy. + 0x32, 0x8f, 0x58, 0xb9, 0xc8, 0xef, 0xbf, 0xba, 0xf7, 0x01, 0x11, 0xa1, 0x58, 0x7a, 0x1b, 0x86, // 2.X.........Xz.. + 0x66, 0x69, 0x80, 0x72, 0x04, 0x9d, 0x1c, 0x17, 0x94, 0x18, 0x16, 0xa3, 0x7d, 0x6a, 0x34, 0x3a, // fi.r........}j4: + 0xc6, 0xb3, 0xab, 0xd5, 0xf8, 0xc4, 0x01, 0x37, 0xc3, 0xf8, 0xfd, 0xb1, 0x40, 0x36, 0x2d, 0x7d, // .......7....@6-} + 0xa7, 0x86, 0x62, 0x68, 0x77, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x47, 0x00, 0x00, 0x04, 0x15, // ..bhw......G.... + 0x04, 0x8d, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x4b, 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .......K.../..EX + 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ....>Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x01, 0x10, 0xb0, 0x0b, // !...Y........... + 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x0d, 0xd0, 0xb2, 0x7b, 0x0d, 0x01, 0x5d, 0xb2, 0x5b, 0x0d, 0x01, // ........{..].[.. + 0x5d, 0x30, 0x31, 0x01, 0x33, 0x15, 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x01, 0x33, 0x03, 0x11, // ]01.3.#.#5!'.3.. + 0x27, 0x01, 0x03, 0x52, 0xc3, 0xc3, 0xc5, 0xfd, 0xbe, 0x04, 0x02, 0x3f, 0xcc, 0xc5, 0x06, 0xfe, // '..R.......?.... + 0x99, 0x01, 0x85, 0x9a, 0xeb, 0xeb, 0x7a, 0x03, 0x28, 0xfc, 0xf8, 0x01, 0xfb, 0x02, 0xfe, 0x03, // ......z.(....... + 0x00, 0x01, 0x00, 0x5a, 0xff, 0xef, 0x03, 0xa3, 0x04, 0x9d, 0x00, 0x2a, 0x00, 0x85, 0x00, 0xb0, // ...Z.......*.... + 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x1a, 0x2f, 0x1b, 0xb1, 0x1a, 0x06, 0x3e, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x06, 0x02, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb0, 0x09, 0xd0, 0xb0, 0x1a, // .+X!...Y........ + 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x2a, 0x06, // .."...+X!...Y.*. + 0x22, 0x11, 0x12, 0x39, 0xb0, 0x2a, 0x2f, 0xb4, 0xdf, 0x2a, 0xef, 0x2a, 0x02, 0x5d, 0xb4, 0x1f, // "..9.*/..*.*.].. + 0x2a, 0x2f, 0x2a, 0x02, 0x5d, 0xb2, 0xaf, 0x2a, 0x01, 0x5d, 0xb4, 0x9f, 0x2a, 0xaf, 0x2a, 0x02, // */*.]..*.]..*.*. + 0x71, 0xb4, 0x6f, 0x2a, 0x7f, 0x2a, 0x02, 0x72, 0xb1, 0x29, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // q.o*.*.r.)...+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x29, 0x2a, 0x11, 0x12, 0x39, 0xb0, 0x1a, 0x10, 0xb0, 0x1f, // ...Y..)*..9..... + 0xd0, 0x30, 0x31, 0x01, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, // .01.2654&#"..#'& + 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, // 632..........#"& + 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x02, 0x00, // 773..32654&##5.. + 0x68, 0x63, 0x6e, 0x6a, 0x54, 0x72, 0xbb, 0x02, 0x06, 0xe2, 0xa7, 0xc0, 0xdd, 0x60, 0x54, 0x60, // hcnjTr.......`T` + 0x67, 0xf0, 0xc0, 0xa8, 0xf1, 0x05, 0x02, 0xba, 0x79, 0x5f, 0x6c, 0x7e, 0x6f, 0x6e, 0xa8, 0x02, // g.......y_l~on.. + 0x9d, 0x5f, 0x54, 0x4c, 0x68, 0x60, 0x47, 0x06, 0x8c, 0xae, 0xac, 0xa0, 0x50, 0x85, 0x26, 0x23, // ._TLh`G.....P.&# + 0x8a, 0x63, 0xa1, 0xb6, 0xab, 0xa2, 0x06, 0x4d, 0x6e, 0x6d, 0x52, 0x62, 0x5f, 0x96, 0x00, 0x00, // .c.....MnmRb_... + 0x00, 0x01, 0x00, 0x59, 0x00, 0x00, 0x03, 0x73, 0x04, 0x9d, 0x00, 0x1a, 0x00, 0x4e, 0x00, 0xb0, // ...Y...s.....N.. + 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ../....>Y.....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0xd0, 0xb2, 0x03, 0x00, 0x11, 0x11, 0x12, 0x39, 0xb0, // !...Y.........9. + 0x11, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x11, // .......+X!...Y.. + 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x17, 0xd0, 0x30, 0x31, 0x21, 0x21, 0x35, 0x01, // ..........01!!5. + 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, // 6654&#"..#'&632. + 0x15, 0x14, 0x06, 0x07, 0x07, 0x17, 0x21, 0x03, 0x73, 0xfc, 0xf3, 0x01, 0x96, 0x66, 0x45, 0x5c, // ......!.s....fE. + 0x57, 0x65, 0x72, 0xbc, 0x02, 0x06, 0xe0, 0xbb, 0xaf, 0xc9, 0x75, 0x9e, 0xf8, 0x03, 0x02, 0x0f, // Wer.......u..... + 0x98, 0x01, 0x96, 0x61, 0x72, 0x3e, 0x54, 0x71, 0x73, 0x53, 0x06, 0x8f, 0xca, 0xb8, 0xa8, 0x6d, // ...ar>TqsS.....m + 0x99, 0xa0, 0xf9, 0x06, 0x00, 0x01, 0x00, 0x4e, 0x00, 0x00, 0x01, 0xc3, 0x04, 0x9d, 0x00, 0x05, // .......N........ + 0x00, 0x36, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, 0x05, 0x0e, 0x3e, 0x59, // .6...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x05, 0x10, // ..EX../....>Y... + 0xb0, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, // ....+X...Y.....+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x07, 0x35, 0x25, 0x01, 0xc3, // X!...Y01!#..5%.. + 0xc5, 0xb0, 0x01, 0x75, 0x03, 0xde, 0x02, 0xa0, 0x21, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x78, // ...u....!......x + 0xff, 0xef, 0x03, 0xfa, 0x04, 0x9d, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, // ...........;...E + 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x11, 0x34, // !...Y01...#"&5.4 + 0x36, 0x33, 0x32, 0x16, 0x15, 0x27, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, // 632..'4&#".....3 + 0x32, 0x36, 0x35, 0x03, 0xfa, 0xf7, 0xc9, 0xca, 0xf8, 0xf7, 0xc9, 0xca, 0xf8, 0xc5, 0x88, 0x75, // 265............u + 0x73, 0x88, 0x89, 0x74, 0x74, 0x87, 0x01, 0x9b, 0xc5, 0xe7, 0xe8, 0xc4, 0x01, 0x57, 0xc3, 0xe8, // s..tt........W.. + 0xe8, 0xc3, 0x01, 0x7c, 0x95, 0x96, 0x7b, 0xfe, 0xa8, 0x7d, 0x97, 0x96, 0x7e, 0x00, 0x00, 0x00, // ...|..{..}..~... + 0x00, 0x01, 0x00, 0x4e, 0x00, 0x00, 0x03, 0xd8, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x46, 0x00, 0xb0, // ...N.........F.. + 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ../....>Y.....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x04, 0x00, 0x02, 0x11, 0x12, 0x39, 0xb0, 0x07, 0x10, 0xb1, // !...Y......9.... + 0x05, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x09, 0x05, 0x07, 0x11, // ....+X!...Y..... + 0x12, 0x39, 0x30, 0x31, 0x25, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, 0x21, 0x15, 0x01, 0x3d, // .901%!.!5.!5!..= + 0x02, 0x9b, 0xfc, 0x76, 0x02, 0x81, 0xfd, 0xa1, 0x03, 0x50, 0x98, 0x98, 0x76, 0x03, 0x7e, 0x99, // ...v.....P..v.~. + 0x72, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x35, 0x04, 0x8d, 0x00, 0x08, // r..........5.... + 0x00, 0x6f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0e, 0x3e, 0x59, // .o...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, 0x2f, 0x1b, 0xb1, 0x07, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x04, 0x07, 0x11, 0x12, // X../....>Y...... + 0x39, 0x40, 0x09, 0x65, 0x00, 0x75, 0x00, 0x85, 0x00, 0x95, 0x00, 0x04, 0x5d, 0xb0, 0x00, 0x10, // 9@.e.u......]... + 0xb0, 0x03, 0xd0, 0xb2, 0x5b, 0x03, 0x01, 0x5d, 0xb6, 0x7b, 0x03, 0x8b, 0x03, 0x9b, 0x03, 0x03, // ....[..].{...... + 0x5d, 0xb2, 0x6a, 0x03, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x06, 0xd0, 0xb6, 0x7b, 0x06, 0x8b, // ].j..].......{.. + 0x06, 0x9b, 0x06, 0x03, 0x5d, 0xb2, 0x5b, 0x06, 0x01, 0x5d, 0xb2, 0x6a, 0x06, 0x01, 0x5d, 0x30, // ....].[..].j..]0 + 0x31, 0x01, 0x01, 0x33, 0x01, 0x11, 0x23, 0x11, 0x01, 0x33, 0x02, 0x29, 0x01, 0x2f, 0xdd, 0xfe, // 1..3..#..3.)./.. + 0x54, 0xc5, 0xfe, 0x5a, 0xdd, 0x02, 0x4d, 0x02, 0x40, 0xfd, 0x0d, 0xfe, 0x66, 0x01, 0xa3, 0x02, // T..Z..M.@...f... + 0xea, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x37, 0x00, 0x00, 0x04, 0x42, 0x04, 0x8d, 0x00, 0x0b, // .......7...B.... + 0x00, 0x61, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0e, 0x3e, 0x59, // .a...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x07, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x07, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x07, 0x0a, 0x11, 0x12, 0x39, 0x40, 0x0b, // /....>Y......9@. + 0x55, 0x00, 0x65, 0x00, 0x75, 0x00, 0x85, 0x00, 0x95, 0x00, 0x05, 0x5d, 0xb2, 0x06, 0x07, 0x0a, // U.e.u......].... + 0x11, 0x12, 0x39, 0xb2, 0x5b, 0x06, 0x01, 0x5d, 0xb6, 0x7a, 0x06, 0x8a, 0x06, 0x9a, 0x06, 0x03, // ..9.[..].z...... + 0x5d, 0x30, 0x31, 0x01, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, 0x01, 0x23, 0x01, 0x01, 0x33, 0x02, // ]01..3..#..#..3. + 0x3a, 0x01, 0x16, 0xe9, 0xfe, 0x78, 0x01, 0x91, 0xe6, 0xfe, 0xe1, 0xfe, 0xe3, 0xe9, 0x01, 0x92, // :....x.......... + 0xfe, 0x77, 0xe8, 0x02, 0xdc, 0x01, 0xb1, 0xfd, 0xbf, 0xfd, 0xb4, 0x01, 0xba, 0xfe, 0x46, 0x02, // .w............F. + 0x4c, 0x02, 0x41, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x05, 0xc0, 0x04, 0x8d, 0x00, 0x11, // L.A....?........ + 0x00, 0x80, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x0e, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x0a, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb0, 0x06, 0xd0, 0xb6, 0x43, 0x06, 0x53, 0x06, 0x63, // ..>Y.......C.S.c + 0x06, 0x03, 0x5d, 0xb2, 0x34, 0x06, 0x01, 0x5d, 0xb4, 0x71, 0x06, 0x81, 0x06, 0x02, 0x5d, 0xb2, // ..].4..].q....]. + 0x90, 0x06, 0x01, 0x5d, 0xb0, 0x01, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x0c, 0xd0, 0xb4, 0x8d, 0x0c, // ...]............ + 0x9d, 0x0c, 0x02, 0x5d, 0x40, 0x09, 0x4c, 0x0c, 0x5c, 0x0c, 0x6c, 0x0c, 0x7c, 0x0c, 0x04, 0x5d, // ...]@.L...l.|..] + 0x30, 0x31, 0x01, 0x15, 0x37, 0x13, 0x33, 0x13, 0x15, 0x37, 0x13, 0x33, 0x01, 0x23, 0x03, 0x23, // 01..7.3..7.3.#.# + 0x03, 0x23, 0x01, 0x33, 0x01, 0xc7, 0x01, 0xdd, 0xb7, 0xdd, 0x01, 0xb3, 0xd3, 0xfe, 0xda, 0xb6, // .#.3............ + 0xe1, 0x06, 0xe3, 0xb5, 0xfe, 0xda, 0xd3, 0x01, 0x08, 0x03, 0x05, 0x03, 0x83, 0xfc, 0x7b, 0x03, // ..............{. + 0x05, 0x03, 0x83, 0xfb, 0x73, 0x03, 0x57, 0xfc, 0xa9, 0x04, 0x8d, 0x00, 0x00, 0x01, 0x00, 0x27, // ....s.W........' + 0x00, 0x00, 0x04, 0x83, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x40, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........@...EX. + 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x08, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x02, 0xd0, 0xb4, 0x44, 0x02, 0x54, 0x02, 0x02, 0x5d, 0x40, 0x09, 0x62, 0x02, // >Y....D.T..]@.b. + 0x72, 0x02, 0x82, 0x02, 0x92, 0x02, 0x04, 0x5d, 0x30, 0x31, 0x01, 0x17, 0x33, 0x37, 0x01, 0x33, // r......]01..37.3 + 0x01, 0x23, 0x01, 0x33, 0x02, 0x3b, 0x17, 0x06, 0x17, 0x01, 0x41, 0xd3, 0xfe, 0x2e, 0xb9, 0xfe, // .#.3.;....A..... + 0x2f, 0xd3, 0x01, 0x29, 0x52, 0x50, 0x03, 0x66, 0xfb, 0x73, 0x04, 0x8d, 0x00, 0x01, 0x00, 0x89, // /..)RP.f.s...... + 0xff, 0xef, 0x04, 0x74, 0x04, 0x8d, 0x00, 0x11, 0x00, 0x36, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...t.....6...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x08, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // >Y.....+X!...Y01 + 0x01, 0x11, 0x14, 0x04, 0x23, 0x22, 0x24, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, // ....#"$5.3...326 + 0x35, 0x11, 0x04, 0x74, 0xfe, 0xe9, 0xdf, 0xdd, 0xfe, 0xe8, 0xc4, 0xa9, 0x88, 0x89, 0xa9, 0x04, // 5..t............ + 0x8d, 0xfd, 0x01, 0xc3, 0xdc, 0xdc, 0xc3, 0x02, 0xff, 0xfd, 0x01, 0x7b, 0x8c, 0x8b, 0x7c, 0x02, // ...........{..|. + 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x47, 0x00, 0x00, 0x03, 0xd1, 0x04, 0x8d, 0x00, 0x07, // .......G........ + 0x00, 0x2f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0e, 0x3e, 0x59, // ./...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x06, 0x10, // ..EX../....>Y... + 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0xd0, 0x30, // .....+X!...Y...0 + 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x03, 0xd1, 0xfe, 0x9b, 0xc5, 0xfe, 0xa0, // 1.!.#.!5!....... + 0x03, 0x8a, 0x03, 0xf4, 0xfc, 0x0c, 0x03, 0xf4, 0x99, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5d, // ...............] + 0xff, 0xef, 0x04, 0x11, 0x04, 0x9d, 0x00, 0x27, 0x00, 0x5f, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .......'._...EX. + 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1d, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x1d, 0x06, 0x3e, 0x59, 0xb2, 0x17, 0x1d, 0x09, 0x11, 0x12, 0x39, 0xb4, 0xa9, 0x17, 0xb9, // ...>Y......9.... + 0x17, 0x02, 0x5d, 0xb4, 0x19, 0x17, 0x29, 0x17, 0x02, 0x5d, 0xb0, 0x17, 0x10, 0xb1, 0x03, 0x03, // ..]...)..]...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x11, 0x02, 0xb0, // ..+X!...Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1d, 0x10, 0xb1, 0x25, 0x02, 0xb0, 0x0a, // .+X!...Y....%... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x34, 0x26, 0x27, 0x26, 0x26, 0x35, // +X!...Y01.4&'&&5 + 0x34, 0x36, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, // 4632...#4&#".... + 0x17, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x24, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, // ......#"$773..32 + 0x36, 0x03, 0x4c, 0x7c, 0xa2, 0xdf, 0xcb, 0xf3, 0xce, 0xd2, 0xeb, 0x05, 0x02, 0xbb, 0x84, 0x77, // 6.L|...........w + 0x7d, 0x7f, 0x73, 0xb2, 0xd7, 0xcc, 0xfe, 0xda, 0xca, 0xfe, 0xee, 0x06, 0x01, 0xbc, 0xa3, 0x76, // }.s............v + 0x83, 0x90, 0x01, 0x30, 0x47, 0x58, 0x28, 0x3a, 0x95, 0x96, 0x93, 0xae, 0xba, 0xa8, 0x06, 0x5c, // ...0GX(:........ + 0x73, 0x5d, 0x4a, 0x49, 0x51, 0x2b, 0x3a, 0x9c, 0x91, 0x9a, 0xa8, 0xaa, 0xb8, 0x06, 0x6c, 0x64, // s]JIQ+:.......ld + 0x5e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x04, 0x2c, 0x04, 0x8d, 0x00, 0x1a, // ^..........,.... + 0x00, 0x23, 0x00, 0x61, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, // .#.a.../..EX../. + 0xb1, 0x03, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x12, 0x2f, 0x1b, 0xb1, 0x12, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0xbf, 0x00, 0x01, 0x71, 0xb2, 0x2f, 0x00, 0x01, 0x71, 0xb2, 0x20, 0x00, 0x01, 0x5d, 0xb0, 0x00, // ...q./..q. ..].. + 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0a, 0x00, // ......+X!...Y... + 0x1b, 0x11, 0x12, 0x39, 0xb0, 0x03, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...9...."...+X!. + 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, // ..Y01..#.!2..... + 0x16, 0x16, 0x15, 0x15, 0x14, 0x16, 0x17, 0x15, 0x23, 0x26, 0x26, 0x35, 0x35, 0x34, 0x26, 0x23, // ........#&&554&# + 0x25, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x01, 0x5e, 0xc5, 0x01, 0xcd, 0xcd, 0xe1, // %!2654&#!.^..... + 0x63, 0x60, 0x68, 0x5b, 0x0b, 0x0d, 0xcb, 0x0c, 0x06, 0x68, 0x62, 0xfe, 0xd9, 0x01, 0x08, 0x78, // c`h[.....hb....x + 0x70, 0x71, 0x77, 0xfe, 0xf8, 0x01, 0xdf, 0xfe, 0x21, 0x04, 0x8d, 0xb4, 0xa2, 0x59, 0x7e, 0x27, // pqw.....!....Y~' + 0x1e, 0x90, 0x69, 0x76, 0x2d, 0x56, 0x16, 0x13, 0x17, 0x62, 0x34, 0x74, 0x5a, 0x64, 0x9a, 0x5e, // ..iv-V...b4tZd.^ + 0x58, 0x5c, 0x69, 0x00, 0x00, 0x02, 0x00, 0x70, 0xff, 0x8a, 0x04, 0x9a, 0x04, 0x9d, 0x00, 0x13, // X.i....p........ + 0x00, 0x21, 0x00, 0x42, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x10, 0x2f, 0x1b, 0xb1, 0x10, 0x0e, // .!.B...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, 0x59, 0xb2, // >Y..EX../....>Y. + 0x03, 0x09, 0x10, 0x11, 0x12, 0x39, 0xb0, 0x10, 0x10, 0xb1, 0x17, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // .....9........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x09, 0x10, 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x07, 0x17, 0x07, 0x27, 0x06, 0x06, 0x23, // ...Y01......'..# + 0x22, 0x00, 0x35, 0x35, 0x34, 0x00, 0x33, 0x32, 0x00, 0x15, 0x27, 0x34, 0x26, 0x23, 0x22, 0x06, // ".554.32..'4&#". + 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x5b, 0x34, 0x30, 0xa3, 0x87, 0xa7, 0x38, // ....3265.[40...8 + 0x85, 0x49, 0xdf, 0xfe, 0xe9, 0x01, 0x15, 0xdf, 0xe0, 0x01, 0x17, 0xc5, 0xa4, 0x8e, 0x8d, 0xa2, // .I.............. + 0xa3, 0x8e, 0x8e, 0xa2, 0x01, 0xcd, 0x59, 0x9b, 0x3c, 0x9f, 0x74, 0xa1, 0x1e, 0x1e, 0x01, 0x09, // ......Y.<.t..... + 0xd5, 0xf3, 0xd4, 0x01, 0x09, 0xfe, 0xf7, 0xd4, 0x01, 0x97, 0xac, 0xac, 0x97, 0xf4, 0x9a, 0xac, // ................ + 0xac, 0x9a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x8b, 0xff, 0xeb, 0x04, 0x52, 0x05, 0xc5, 0x00, 0x0d, // ...........R.... + 0x00, 0x1b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0c, // ...;...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x0a, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, // .......+X!...Y.. + 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x10, 0x00, 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x33, 0x32, 0x00, 0x11, 0x27, 0x34, 0x26, // ..#".....32..'4& + 0x23, 0x22, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x52, 0xfe, 0xfe, 0xe0, // #".....3265.R... + 0xe0, 0xfe, 0xfb, 0x01, 0x04, 0xdf, 0xe0, 0x01, 0x04, 0xc5, 0x93, 0x8c, 0x8b, 0x93, 0x95, 0x8b, // ................ + 0x8c, 0x91, 0x02, 0x2b, 0xfe, 0xe9, 0xfe, 0xd7, 0x01, 0x2a, 0x01, 0x16, 0x01, 0x59, 0x01, 0x16, // ...+.....*...Y.. + 0x01, 0x2b, 0xfe, 0xd5, 0xfe, 0xea, 0x2a, 0xbd, 0xbf, 0xbf, 0xbd, 0xfe, 0x55, 0xbd, 0xc1, 0xc0, // .+....*.....U... + 0xbe, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, 0x04, 0x9d, 0x00, 0x0d, // .......p...[.... + 0x00, 0x1b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x0e, // ...;...EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x0a, 0x10, 0xb1, 0x11, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, // .......+X!...Y.. + 0x10, 0xb1, 0x18, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, // ......+X!...Y01. + 0x14, 0x00, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x00, 0x33, 0x32, 0x00, 0x15, 0x27, 0x34, 0x26, // ..#".554.32..'4& + 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x5b, 0xfe, 0xeb, 0xe0, // #".....3265.[... + 0xdf, 0xfe, 0xe9, 0x01, 0x15, 0xdf, 0xe0, 0x01, 0x17, 0xc5, 0xa4, 0x8e, 0x8d, 0xa2, 0xa3, 0x8e, // ................ + 0x8e, 0xa2, 0x01, 0xcd, 0xd6, 0xfe, 0xf8, 0x01, 0x09, 0xd5, 0xf3, 0xd4, 0x01, 0x09, 0xfe, 0xf7, // ................ + 0xd4, 0x01, 0x97, 0xac, 0xac, 0x97, 0xf4, 0x9a, 0xac, 0xac, 0x9a, 0x00, 0x00, 0x01, 0x00, 0x99, // ................ + 0x00, 0x00, 0x04, 0x76, 0x04, 0x8d, 0x00, 0x0b, 0x00, 0x70, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...v.....p...EX. + 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x0a, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, // >Y..EX../....>Y. + 0x06, 0x10, 0xb0, 0x02, 0xd0, 0xb6, 0x7d, 0x02, 0x8d, 0x02, 0x9d, 0x02, 0x03, 0x5d, 0xb4, 0x5c, // ......}......].. + 0x02, 0x6c, 0x02, 0x02, 0x5d, 0xb2, 0x4b, 0x02, 0x01, 0x5d, 0xb0, 0x00, 0x10, 0xb0, 0x08, 0xd0, // .l..].K..]...... + 0x40, 0x09, 0x24, 0x08, 0x34, 0x08, 0x44, 0x08, 0x54, 0x08, 0x04, 0x5d, 0x40, 0x09, 0x63, 0x08, // @.$.4.D.T..]@.c. + 0x73, 0x08, 0x83, 0x08, 0x93, 0x08, 0x04, 0x5d, 0x30, 0x31, 0x21, 0x23, 0x01, 0x07, 0x11, 0x23, // s......]01!#...# + 0x11, 0x33, 0x01, 0x37, 0x11, 0x33, 0x04, 0x76, 0xc4, 0xfd, 0xb2, 0x06, 0xc5, 0xc5, 0x02, 0x4e, // .3.7.3.v.......N + 0x06, 0xc4, 0x03, 0x5b, 0x02, 0xfc, 0xa7, 0x04, 0x8d, 0xfc, 0xa5, 0x02, 0x03, 0x59, 0x00, 0x00, // ...[.........Y.. + 0x00, 0x01, 0x00, 0x92, 0x02, 0x88, 0x03, 0x13, 0x03, 0x23, 0x00, 0x03, 0x00, 0x12, 0x00, 0xb0, // .........#...... + 0x02, 0x2f, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ./.....+X!...Y01 + 0x01, 0x21, 0x35, 0x21, 0x03, 0x13, 0xfd, 0x7f, 0x02, 0x81, 0x02, 0x88, 0x9b, 0x00, 0x00, 0x00, // .!5!............ + 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x05, 0x55, 0x04, 0x8d, 0x00, 0x0f, 0x00, 0x83, 0x00, 0xb0, // .......U........ + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x08, 0x2f, 0x1b, 0xb1, 0x08, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0c, 0x2f, 0x1b, 0xb1, 0x0c, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb0, 0x08, 0x10, 0xb0, 0x00, 0xd0, 0xb2, 0x25, 0x00, 0x01, 0x5d, 0x40, 0x09, 0x64, 0x00, 0x74, // .......%..]@.d.t + 0x00, 0x84, 0x00, 0x94, 0x00, 0x04, 0x5d, 0xb4, 0x43, 0x00, 0x53, 0x00, 0x02, 0x5d, 0xb0, 0x02, // ......].C.S..].. + 0x10, 0xb0, 0x07, 0xd0, 0xb4, 0x8f, 0x07, 0x9f, 0x07, 0x02, 0x5d, 0x40, 0x09, 0x4c, 0x07, 0x5c, // ..........]@.L.. + 0x07, 0x6c, 0x07, 0x7c, 0x07, 0x04, 0x5d, 0xb2, 0x2b, 0x07, 0x01, 0x5d, 0xb0, 0x0a, 0xd0, 0x30, // .l.|..].+..]...0 + 0x31, 0x01, 0x33, 0x01, 0x33, 0x11, 0x23, 0x11, 0x27, 0x01, 0x23, 0x01, 0x07, 0x11, 0x23, 0x11, // 1.3.3.#.'.#...#. + 0x33, 0x02, 0xf7, 0x06, 0x01, 0x62, 0xf6, 0xc5, 0x06, 0xfe, 0xb4, 0x88, 0xfe, 0xae, 0x06, 0xc5, // 3....b.......... + 0xfe, 0x01, 0x03, 0x03, 0x8a, 0xfb, 0x73, 0x03, 0x29, 0x02, 0xfc, 0xd5, 0x03, 0x3d, 0x02, 0xfc, // ......s.)....=.. + 0xc5, 0x04, 0x8d, 0x00, 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x03, 0x6b, 0x04, 0x8d, 0x00, 0x05, // ...........k.... + 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0e, 0x3e, 0x59, // .)...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, // ..EX../....>Y... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x21, 0x15, 0x21, 0x11, // ..+X!...Y01%!.!. + 0x33, 0x01, 0x5e, 0x02, 0x0d, 0xfd, 0x2e, 0xc5, 0x98, 0x98, 0x04, 0x8d, 0x00, 0x01, 0x00, 0x99, // 3.^............. + 0x00, 0x00, 0x04, 0x41, 0x04, 0x8d, 0x00, 0x0e, 0x00, 0x92, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x00, // ...A........./.. + 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x08, 0x2f, 0x1b, 0xb1, 0x08, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb2, 0x8f, 0x06, 0x01, 0x5d, 0xb4, 0xdf, 0x06, 0xef, 0x06, 0x02, 0x5d, 0xb2, 0x4f, // >Y....]......].O + 0x06, 0x01, 0x71, 0xb2, 0xdf, 0x06, 0x01, 0x71, 0xb2, 0x4f, 0x06, 0x01, 0x72, 0xb4, 0x6f, 0x06, // ..q....q.O..r.o. + 0x7f, 0x06, 0x02, 0x72, 0xb2, 0x0f, 0x06, 0x01, 0x72, 0xb4, 0x9f, 0x06, 0xaf, 0x06, 0x02, 0x71, // ...r....r......q + 0xb2, 0x1f, 0x06, 0x01, 0x71, 0xb2, 0xbf, 0x06, 0x01, 0x5d, 0xb2, 0x5f, 0x06, 0x01, 0x5d, 0xb2, // ....q....]._..]. + 0x1f, 0x06, 0x01, 0x5d, 0xb0, 0x06, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...]........+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x0b, 0x01, 0x06, 0x11, 0x12, 0x39, 0x30, 0x31, 0x01, 0x23, 0x11, 0x23, // ..Y......901.#.# + 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x17, 0x01, 0x01, 0x07, 0x23, 0x01, 0xc1, 0x63, 0xc5, 0xc5, // .3.3.3....#..c.. + 0x54, 0x01, 0x84, 0xe7, 0x03, 0xfe, 0x39, 0x01, 0xe8, 0x03, 0xf1, 0x01, 0xf4, 0xfe, 0x0c, 0x04, // T.....9......... + 0x8d, 0xfe, 0x04, 0x01, 0xfc, 0x05, 0xfd, 0xd6, 0xfd, 0xa7, 0x05, 0x00, 0x00, 0x01, 0x00, 0x40, // ...............@ + 0xff, 0xef, 0x03, 0x77, 0x04, 0x8d, 0x00, 0x10, 0x00, 0x29, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...w.....)...EX. + 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x05, 0x06, 0x3e, 0x59, 0xb1, 0x0d, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0x30, 0x31, 0x01, 0x33, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, // Y01.3...#"&773.. + 0x33, 0x32, 0x36, 0x35, 0x02, 0xb3, 0xc4, 0xe3, 0xaf, 0xc3, 0xe2, 0x06, 0x02, 0xbc, 0x76, 0x6b, // 3265..........vk + 0x58, 0x76, 0x04, 0x8d, 0xfc, 0xd5, 0xaa, 0xc9, 0xb2, 0xaa, 0x06, 0x65, 0x65, 0x79, 0x62, 0x00, // Xv.........eeyb. + 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x01, 0x5d, 0x04, 0x8d, 0x00, 0x03, 0x00, 0x1d, 0x00, 0xb0, // .......]........ + 0x00, 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x33, 0x01, // ../....>Y01!#.3. + 0x5d, 0xc4, 0xc4, 0x04, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x04, 0x5a, // ]..............Z + 0x04, 0x8d, 0x00, 0x0b, 0x00, 0x6e, 0x00, 0x7c, 0xb0, 0x08, 0x2f, 0x18, 0xb0, 0x00, 0x45, 0x58, // .....n.|../...EX + 0xb0, 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x0a, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb2, 0xdf, 0x08, 0x01, 0x5d, 0xb2, 0x6f, 0x08, 0x01, 0x72, 0xb2, 0xaf, 0x08, 0x01, 0x5d, 0xb2, // ....].o..r....]. + 0xdf, 0x08, 0x01, 0x72, 0xb2, 0x0f, 0x08, 0x01, 0x72, 0xb2, 0x70, 0x08, 0x01, 0x5d, 0xb2, 0x40, // ...r....r.p..].@ + 0x08, 0x01, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..]........+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, // .Y01!#.!.#.3.!.3 + 0x04, 0x5a, 0xc6, 0xfd, 0xca, 0xc5, 0xc5, 0x02, 0x36, 0xc6, 0x01, 0xeb, 0xfe, 0x15, 0x04, 0x8d, // .Z......6....... + 0xfd, 0xf7, 0x02, 0x09, 0x00, 0x01, 0x00, 0x70, 0xff, 0xef, 0x04, 0x4b, 0x04, 0x9d, 0x00, 0x20, // .......p...K... + 0x00, 0x54, 0x00, 0xb0, 0x1f, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, // .T.../..EX../... + 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, // .>Y..EX../....>Y + 0xb2, 0x0f, 0x1f, 0x0a, 0x11, 0x12, 0x39, 0xb0, 0x0a, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, // ......9........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x1f, 0x10, 0xb1, 0x1e, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // !...Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x06, 0x06, 0x23, 0x22, 0x00, 0x35, 0x35, 0x34, 0x00, // ...Y01%..#".554. + 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, // 32...#4&#".....3 + 0x32, 0x36, 0x37, 0x35, 0x21, 0x35, 0x21, 0x04, 0x4b, 0x2d, 0xf2, 0xb5, 0xe7, 0xfe, 0xe0, 0x01, // 2675!5!.K-...... + 0x22, 0xe1, 0xde, 0xf3, 0x04, 0x02, 0xbc, 0x91, 0x7e, 0x8c, 0xb2, 0xb0, 0x92, 0x69, 0x89, 0x1f, // ".......~....i.. + 0xfe, 0xfe, 0x01, 0xc5, 0x9d, 0x41, 0x6d, 0x01, 0x09, 0xd5, 0xf3, 0xd3, 0x01, 0x0a, 0xc9, 0x9d, // .....Am......... + 0x06, 0x65, 0x6e, 0xb8, 0x8b, 0xf4, 0x8e, 0xb8, 0x2a, 0x1b, 0xfa, 0x9a, 0x00, 0x01, 0x00, 0x99, // .en.....*....... + 0x00, 0x00, 0x03, 0xca, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x4f, 0x00, 0x7c, 0xb0, 0x08, 0x2f, 0x18, // .........O.|../. + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, // ..EX../....>Y..E + 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb2, 0x9f, 0x08, 0x01, 0x71, 0xb2, // X../....>Y....q. + 0x40, 0x08, 0x01, 0x5d, 0xb2, 0x70, 0x08, 0x01, 0x5d, 0xb0, 0x08, 0x10, 0xb1, 0x01, 0x02, 0xb0, // @..].p..]....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x06, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, // +X!...Y01.!.#.!. + 0x21, 0x11, 0x21, 0x03, 0x73, 0xfd, 0xeb, 0xc5, 0x03, 0x31, 0xfd, 0x94, 0x02, 0x15, 0x01, 0xf5, // !.!.s....1...... + 0xfe, 0x0b, 0x04, 0x8d, 0x99, 0xfe, 0x9b, 0x00, 0x00, 0x01, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, // ................ + 0x04, 0x8d, 0x00, 0x0b, 0x00, 0x56, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x06, 0x2f, 0x1b, 0xb1, // .....V...EX../.. + 0x06, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x0b, 0x04, 0x06, 0x11, 0x12, 0x39, 0xb0, 0x0b, 0x2f, 0xb2, 0xaf, 0x0b, 0x01, 0x5d, // Y......9../....] + 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, // .....+X!...Y.... + 0x02, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x06, 0x10, 0xb1, 0x08, // ....+X!...Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x21, 0x11, 0x21, // ...+X!...Y01.!.! + 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x03, 0x71, 0xfd, 0xed, 0x02, 0x6a, 0xfc, 0xd1, // .!.!.!.!.q...j.. + 0x03, 0x2f, 0xfd, 0x96, 0x02, 0x13, 0x02, 0x12, 0xfe, 0x86, 0x98, 0x04, 0x8d, 0x99, 0xfe, 0xb8, // ./.............. + 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x04, 0x31, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x13, 0x00, 0x3b, // .......1.......; + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0e, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x0a, // EX../....>Y..... + 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0b, 0x02, // ...+X!...Y...... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x33, 0x11, 0x21, 0x32, 0x00, // ..+X!...Y013.!2. + 0x15, 0x15, 0x14, 0x00, 0x23, 0x03, 0x11, 0x33, 0x32, 0x36, 0x35, 0x35, 0x34, 0x26, 0x23, 0x99, // ....#..326554&#. + 0x01, 0xa5, 0xd3, 0x01, 0x20, 0xfe, 0xe0, 0xd3, 0xe0, 0xe0, 0x7e, 0xb0, 0xb0, 0x7e, 0x04, 0x8d, // .... .....~..~.. + 0xfe, 0xf3, 0xd1, 0xd2, 0xd2, 0xfe, 0xf5, 0x03, 0xf4, 0xfc, 0xa4, 0xba, 0x8b, 0xd3, 0x89, 0xbb, // ................ + 0x00, 0x01, 0x00, 0x70, 0xff, 0xef, 0x04, 0x26, 0x04, 0x9d, 0x00, 0x1d, 0x00, 0x3b, 0x00, 0xb0, // ...p...&.....;.. + 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x13, 0x02, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb1, 0x1a, 0x02, 0xb0, 0x0a, // .+X!...Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x17, 0x16, 0x04, 0x23, 0x22, 0x00, // +X!...Y01....#". + 0x35, 0x35, 0x34, 0x00, 0x33, 0x32, 0x16, 0x07, 0x07, 0x23, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, // 554.32...#4&#".. + 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x04, 0x1e, 0x02, 0x05, 0xfe, 0xfd, 0xce, 0xcf, 0xfe, // ...3265......... + 0xeb, 0x01, 0x15, 0xcf, 0xd4, 0xfe, 0x05, 0x02, 0xbd, 0x8e, 0x80, 0x7b, 0xa4, 0xa4, 0x7b, 0x7f, // ...........{..{. + 0x8e, 0x01, 0x7d, 0x06, 0xbd, 0xcb, 0x01, 0x0c, 0xd2, 0xf3, 0xd1, 0x01, 0x0c, 0xcb, 0xbb, 0x06, // ..}............. + 0x79, 0x7a, 0xba, 0x89, 0xf4, 0x8b, 0xbb, 0x7a, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x99, // yz.....z|....... + 0x00, 0x00, 0x04, 0x0d, 0x04, 0x8d, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x21, 0x00, 0x76, 0x00, 0x7c, // ...........!.v.| + 0xb0, 0x19, 0x2f, 0x18, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0e, 0x3e, // ../...EX../....> + 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb2, 0x00, // Y..EX../....>Y.. + 0x19, 0x01, 0x71, 0xb4, 0x60, 0x19, 0x70, 0x19, 0x02, 0x71, 0xb2, 0x9f, 0x19, 0x01, 0x71, 0xb2, // ..q.`.p..q....q. + 0x30, 0x19, 0x01, 0x71, 0xb2, 0x70, 0x19, 0x01, 0x5d, 0xb2, 0x40, 0x19, 0x01, 0x5d, 0xb0, 0x19, // 0..q.p..].@..].. + 0x10, 0xb1, 0x0f, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x08, 0x0f, // ......+X!...Y... + 0x19, 0x11, 0x12, 0x39, 0xb0, 0x00, 0x10, 0xb1, 0x10, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ...9........+X!. + 0x1b, 0xf4, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x20, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..Y.... ...+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x33, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, // .Y013.!2........ + 0x14, 0x06, 0x23, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x23, 0x25, 0x33, 0x32, // ..#..!2654&'#%32 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x99, 0x01, 0x8d, 0xd5, 0xed, 0x5e, 0x57, 0x66, 0x74, 0xdd, // 654&##.....^Wft. + 0xc5, 0xfe, 0xf3, 0x01, 0x0d, 0x6d, 0x6f, 0x6a, 0x67, 0x0b, 0xfe, 0xf3, 0xc8, 0x7c, 0x81, 0x7b, // .....mojg....|.{ + 0x82, 0xc8, 0x04, 0x8d, 0x9f, 0x9f, 0x54, 0x82, 0x21, 0x19, 0x96, 0x60, 0xa2, 0xa7, 0x02, 0x09, // ......T.!..`.... + 0xfe, 0x8f, 0x5e, 0x58, 0x54, 0x64, 0x03, 0x8d, 0x59, 0x55, 0x56, 0x46, 0x00, 0x01, 0x00, 0xa0, // ..^XTd..YUVF.... + 0x04, 0x8c, 0x01, 0x7a, 0x06, 0x17, 0x00, 0x05, 0x00, 0x10, 0x00, 0xb0, 0x05, 0x2f, 0xb0, 0x01, // ...z........./.. + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x13, 0x37, 0x33, 0x03, 0x15, 0x23, // ..+X...Y01.73..# + 0xa0, 0x79, 0x61, 0x15, 0xc5, 0x05, 0x20, 0xf7, 0xfe, 0xff, 0x8a, 0x00, 0x00, 0x02, 0x00, 0x81, // .ya... ......... + 0x04, 0xdf, 0x02, 0xe0, 0x06, 0x8b, 0x00, 0x04, 0x00, 0x14, 0x00, 0x5b, 0x00, 0xb0, 0x09, 0x2f, // ...........[.../ + 0xb2, 0x3f, 0x09, 0x01, 0x5d, 0xb0, 0x11, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x40, // .?..]....+X...Y@ + 0x09, 0x4f, 0x11, 0x5f, 0x11, 0x6f, 0x11, 0x7f, 0x11, 0x04, 0x71, 0xb0, 0x0e, 0xb0, 0x0a, 0x2b, // .O._.o....q....+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x1f, 0x0e, 0x01, 0x71, 0xb2, 0xff, 0x0e, 0x01, 0x71, 0x40, // X...Y....q....q@ + 0x09, 0x0f, 0x0e, 0x1f, 0x0e, 0x2f, 0x0e, 0x3f, 0x0e, 0x04, 0x72, 0xb0, 0x01, 0xb0, 0x0a, 0x2b, // ...../.?..r....+ + 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, // X...Y....+X...Y. + 0x0e, 0x10, 0xb0, 0x14, 0xd0, 0x30, 0x31, 0x01, 0x23, 0x27, 0x37, 0x33, 0x05, 0x17, 0x16, 0x06, // .....01.#'73.... + 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x01, 0xf3, 0x77, 0xc8, // #"&773..3265..w. + 0x02, 0xb3, 0x01, 0x6f, 0x02, 0x06, 0xa4, 0x8b, 0x8c, 0xa4, 0x07, 0x02, 0x97, 0x45, 0x4b, 0x49, // ...o.........EKI + 0x46, 0x05, 0xc6, 0xbf, 0x06, 0xdb, 0x06, 0x59, 0x72, 0x72, 0x59, 0x06, 0x33, 0x3f, 0x3f, 0x33, // F......YrrY.3??3 + 0x00, 0x02, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, 0x04, 0x8d, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x5d, // ...'...........] + 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0e, 0x3e, 0x59, 0xb0, 0x00, // ...EX../....>Y.. + 0x45, 0x58, 0xb0, 0x02, 0x2f, 0x1b, 0xb1, 0x02, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x06, 0x2f, 0x1b, 0xb1, 0x06, 0x06, 0x3e, 0x59, 0xb2, 0x00, 0x02, 0x04, 0x11, 0x12, 0x39, 0xb0, // ./....>Y......9. + 0x00, 0x2f, 0xb4, 0x8f, 0x00, 0x9f, 0x00, 0x02, 0x5d, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, // ./......].....+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x0a, 0xd0, 0xb4, 0x8f, 0x0a, 0x9f, 0x0a, // !...Y........... + 0x02, 0x5d, 0xb6, 0x5c, 0x0a, 0x6c, 0x0a, 0x7c, 0x0a, 0x03, 0x5d, 0x30, 0x31, 0x01, 0x21, 0x03, // .]...l.|..]01.!. + 0x23, 0x01, 0x33, 0x01, 0x23, 0x01, 0x21, 0x03, 0x23, 0x03, 0x57, 0xfe, 0x03, 0x67, 0xcc, 0x01, // #.3.#.!.#.W..g.. + 0xd5, 0xba, 0x01, 0xd4, 0xcb, 0xfd, 0xd6, 0x01, 0x87, 0xc1, 0x06, 0x01, 0x0c, 0xfe, 0xf4, 0x04, // ................ + 0x8d, 0xfb, 0x73, 0x01, 0xa6, 0x01, 0xf2, 0x00, 0x00, 0x02, 0x00, 0x78, 0x04, 0xe4, 0x04, 0x71, // ..s........x...q + 0x06, 0x98, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x40, 0x00, 0xb0, 0x06, 0x2f, 0xb0, 0x05, 0xb0, 0x0a, // .......@.../.... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb6, 0x2f, 0x05, 0x3f, 0x05, 0x4f, 0x05, 0x03, 0x72, 0xb0, // +X...Y./.?.O..r. + 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x06, 0x10, 0xb0, 0x04, 0xd0, 0xb0, // ...+X...Y....... + 0x06, 0x10, 0xb0, 0x0c, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0a, 0xb0, 0x0a, // ......+X...Y.... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x33, 0x01, 0x07, 0x23, 0x27, 0x07, 0x23, // +X...Y01.3..#'.# + 0x27, 0x01, 0x33, 0x03, 0x23, 0x01, 0x99, 0x9e, 0x01, 0x20, 0x02, 0xc6, 0xa7, 0xa7, 0xc7, 0x02, // '.3.#.... ...... + 0x03, 0x26, 0xd3, 0xcc, 0x93, 0x05, 0xeb, 0xfe, 0xff, 0x06, 0x9d, 0x9d, 0x06, 0x01, 0xae, 0xfe, // .&.............. + 0xfc, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x55, 0x04, 0xe4, 0x03, 0x4d, 0x06, 0x98, 0x00, 0x08, // .......U...M.... + 0x00, 0x0c, 0x00, 0x40, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x02, 0xd0, 0xb0, 0x04, 0x10, 0xb0, 0x03, // ...@.../........ + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb6, 0x2f, 0x03, 0x3f, 0x03, 0x4f, 0x03, 0x03, // ..+X...Y./.?.O.. + 0x72, 0xb0, 0x08, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x04, 0x10, 0xb0, 0x09, // r....+X...Y..... + 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0b, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // ..+X...Y....+X.. + 0xdc, 0x59, 0x30, 0x31, 0x01, 0x07, 0x23, 0x27, 0x07, 0x23, 0x27, 0x01, 0x33, 0x05, 0x23, 0x03, // .Y01..#'.#'.3.#. + 0x33, 0x03, 0x4d, 0x02, 0xc7, 0xa7, 0xa7, 0xc6, 0x02, 0x01, 0x20, 0x9e, 0xfe, 0x87, 0x93, 0xcb, // 3.M....... ..... + 0xd2, 0x04, 0xea, 0x06, 0x9d, 0x9d, 0x06, 0x01, 0x01, 0x57, 0x01, 0x04, 0x00, 0x02, 0x00, 0x6e, // .........W.....n + 0x04, 0xe4, 0x04, 0x31, 0x06, 0xd1, 0x00, 0x08, 0x00, 0x18, 0x00, 0x8a, 0x00, 0xb0, 0x04, 0x2f, // ...1.........../ + 0xb0, 0x02, 0xd0, 0xb0, 0x04, 0x10, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // ..........+X...Y + 0xb4, 0xe0, 0x03, 0xf0, 0x03, 0x02, 0x71, 0xb4, 0x00, 0x03, 0x10, 0x03, 0x02, 0x72, 0xb6, 0x80, // ......q......r.. + 0x03, 0x90, 0x03, 0xa0, 0x03, 0x03, 0x5d, 0x40, 0x0b, 0x30, 0x03, 0x40, 0x03, 0x50, 0x03, 0x60, // ......]@.0.@.P.` + 0x03, 0x70, 0x03, 0x05, 0x71, 0xb0, 0x08, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x40, // .p..q....+X...Y@ + 0x17, 0x4f, 0x08, 0x5f, 0x08, 0x6f, 0x08, 0x7f, 0x08, 0x8f, 0x08, 0x9f, 0x08, 0xaf, 0x08, 0xbf, // .O._.o.......... + 0x08, 0xcf, 0x08, 0xdf, 0x08, 0xef, 0x08, 0x0b, 0x71, 0xb0, 0x02, 0x10, 0xb0, 0x09, 0xb0, 0x0a, // ........q....... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0a, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // +X...Y....+X...Y + 0xb0, 0x10, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x11, 0xb0, 0x0a, 0x2b, 0x58, // ....+X...Y....+X + 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x07, 0x23, 0x27, 0x07, 0x23, 0x27, 0x01, 0x33, 0x17, // ...Y01..#'.#'.3. + 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x37, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x07, 0x03, // '6654H....... + 0x4d, 0x02, 0xaa, 0xc4, 0xc4, 0xa9, 0x02, 0x01, 0x0c, 0xc6, 0xf4, 0x01, 0x42, 0x37, 0x4b, 0x3e, // M...........B7K> + 0x06, 0x7f, 0x89, 0x4b, 0x39, 0x01, 0x04, 0xea, 0x06, 0xba, 0xba, 0x06, 0x01, 0x01, 0x7d, 0x85, // ...K9.........}. + 0x04, 0x1a, 0x20, 0x22, 0x20, 0x5e, 0x57, 0x4b, 0x3d, 0x40, 0x07, 0x3d, 0x00, 0x02, 0x00, 0x6e, // .. " ^WK=@.=...n + 0x04, 0xe4, 0x03, 0x4d, 0x06, 0xfc, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x94, 0x00, 0xb0, 0x04, 0x2f, // ...M.........../ + 0xb0, 0x02, 0xd0, 0xb0, 0x04, 0x10, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // ..........+X...Y + 0xb4, 0x90, 0x03, 0xa0, 0x03, 0x02, 0x5d, 0x40, 0x09, 0x40, 0x03, 0x50, 0x03, 0x60, 0x03, 0x70, // ......]@.@.P.`.p + 0x03, 0x04, 0x71, 0xb4, 0x00, 0x03, 0x10, 0x03, 0x02, 0x72, 0xb0, 0x08, 0xb0, 0x0a, 0x2b, 0x58, // ..q......r....+X + 0xd8, 0x1b, 0xdc, 0x59, 0x40, 0x0f, 0x4f, 0x08, 0x5f, 0x08, 0x6f, 0x08, 0x7f, 0x08, 0x8f, 0x08, // ...Y@.O._.o..... + 0x9f, 0x08, 0xaf, 0x08, 0x07, 0x71, 0xb0, 0x0c, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // .....q....+X...Y + 0xb0, 0x0f, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0c, 0x10, 0xb0, 0x12, 0xd0, // ....+X...Y...... + 0xb0, 0x0f, 0x10, 0xb0, 0x16, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb4, 0x2f, 0x16, // .......+X...Y./. + 0x3f, 0x16, 0x02, 0x71, 0xb0, 0x0c, 0x10, 0xb0, 0x19, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, // ?..q.......+X... + 0x59, 0xb4, 0x2f, 0x19, 0x3f, 0x19, 0x02, 0x71, 0xb0, 0x16, 0x10, 0xb0, 0x1c, 0xd0, 0x30, 0x31, // Y./.?..q......01 + 0x01, 0x07, 0x23, 0x27, 0x07, 0x23, 0x27, 0x01, 0x33, 0x37, 0x14, 0x06, 0x23, 0x22, 0x26, 0x23, // ..#'.#'.37..#"&# + 0x22, 0x06, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, 0x36, 0x35, 0x03, 0x4d, 0x02, // "..'4632.3265.M. + 0xaa, 0xc4, 0xc4, 0xa9, 0x02, 0x01, 0x21, 0x9d, 0xb6, 0x61, 0x42, 0x35, 0x71, 0x26, 0x1f, 0x33, // ......!..aB5q&.3 + 0x50, 0x60, 0x42, 0x2a, 0x7b, 0x27, 0x1e, 0x36, 0x04, 0xea, 0x06, 0xb0, 0xb0, 0x06, 0x01, 0x01, // P`B*{'.6........ + 0xfa, 0x45, 0x6b, 0x47, 0x3b, 0x22, 0x13, 0x45, 0x6f, 0x45, 0x38, 0x23, 0x00, 0x02, 0x00, 0x81, // .EkG;".EoE8#.... + 0x04, 0xdf, 0x02, 0xe0, 0x06, 0x8b, 0x00, 0x0f, 0x00, 0x14, 0x00, 0x62, 0x00, 0xb0, 0x04, 0x2f, // ...........b.../ + 0xb0, 0x0c, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x40, 0x09, 0x9f, 0x0c, 0xaf, 0x0c, // ....+X...Y@..... + 0xbf, 0x0c, 0xcf, 0x0c, 0x04, 0x72, 0x40, 0x09, 0x4f, 0x0c, 0x5f, 0x0c, 0x6f, 0x0c, 0x7f, 0x0c, // .....r@.O._.o... + 0x04, 0x71, 0xb0, 0x09, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x1f, 0x09, 0x01, // .q....+X...Y.... + 0x71, 0xb2, 0xff, 0x09, 0x01, 0x71, 0x40, 0x09, 0x0f, 0x09, 0x1f, 0x09, 0x2f, 0x09, 0x3f, 0x09, // q....q@...../.?. + 0x04, 0x72, 0xb0, 0x0f, 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x14, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, // .r..........+X.. + 0xdc, 0x59, 0xb0, 0x10, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x17, // .Y....+X...Y01.. + 0x16, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x27, 0x33, // ..#"&773..3265'3 + 0x17, 0x07, 0x23, 0x02, 0xd8, 0x02, 0x06, 0xa4, 0x8b, 0x8c, 0xa4, 0x07, 0x02, 0x97, 0x45, 0x4b, // ..#...........EK + 0x49, 0x46, 0x5d, 0x9b, 0x02, 0x9f, 0x6a, 0x05, 0xb0, 0x06, 0x59, 0x72, 0x72, 0x59, 0x06, 0x33, // IF]...j...YrrY.3 + 0x3f, 0x3f, 0x33, 0xdb, 0x05, 0xc0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x81, 0x04, 0xe0, 0x02, 0xca, // ??3............. + 0x07, 0x2a, 0x00, 0x0f, 0x00, 0x20, 0x00, 0x78, 0x00, 0xb0, 0x04, 0x2f, 0xb0, 0x0c, 0xb0, 0x0a, // .*... .x.../.... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x40, 0x0b, 0x9f, 0x0c, 0xaf, 0x0c, 0xbf, 0x0c, 0xcf, 0x0c, // +X...Y@......... + 0xdf, 0x0c, 0x05, 0x72, 0x40, 0x09, 0x4f, 0x0c, 0x5f, 0x0c, 0x6f, 0x0c, 0x7f, 0x0c, 0x04, 0x71, // ...r@.O._.o....q + 0xb0, 0x09, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0x1f, 0x09, 0x01, 0x71, 0xb2, // ....+X...Y....q. + 0xff, 0x09, 0x01, 0x71, 0x40, 0x09, 0x0f, 0x09, 0x1f, 0x09, 0x2f, 0x09, 0x3f, 0x09, 0x04, 0x72, // ...q@...../.?..r + 0xb0, 0x0f, 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x10, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // ..........+X...Y + 0xb0, 0x11, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x18, 0xb0, 0x0a, 0x2b, 0x58, // ....+X...Y....+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x19, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, // ...Y....+X...Y01 + 0x01, 0x17, 0x16, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, // ....#"&773..3265 + 0x27, 0x27, 0x36, 0x36, 0x27, 0x35, 0x36, 0x26, 0x23, 0x37, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, // ''66'56H..... + 0x07, 0x02, 0xc2, 0x02, 0x06, 0x9e, 0x86, 0x87, 0x9e, 0x07, 0x02, 0x90, 0x44, 0x48, 0x47, 0x44, // ............DHGD + 0xbc, 0x01, 0x49, 0x3c, 0x05, 0x05, 0x51, 0x46, 0x07, 0x8e, 0x98, 0x53, 0x3f, 0x01, 0x05, 0xb0, // ..I<..QF...S?... + 0x06, 0x59, 0x71, 0x71, 0x59, 0x06, 0x32, 0x40, 0x3f, 0x33, 0x38, 0x7e, 0x03, 0x17, 0x1a, 0x06, // .YqqY.2@?38~.... + 0x1c, 0x1b, 0x53, 0x4e, 0x42, 0x35, 0x37, 0x07, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x81, // ..SNB57.?....... + 0x04, 0xdb, 0x02, 0xd3, 0x06, 0xd4, 0x00, 0x0f, 0x00, 0x23, 0x00, 0x82, 0x00, 0xb0, 0x04, 0x2f, // .........#...../ + 0xb0, 0x0c, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb6, 0x4f, 0x0c, 0x5f, 0x0c, 0x6f, // ....+X...Y.O._.o + 0x0c, 0x03, 0x71, 0x40, 0x09, 0x9f, 0x0c, 0xaf, 0x0c, 0xbf, 0x0c, 0xcf, 0x0c, 0x04, 0x72, 0xb0, // ..q@..........r. + 0x09, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb2, 0xff, 0x09, 0x01, 0x71, 0xb6, 0x0f, // ...+X...Y....q.. + 0x09, 0x1f, 0x09, 0x2f, 0x09, 0x03, 0x72, 0xb2, 0x1f, 0x09, 0x01, 0x71, 0xb0, 0x0f, 0xd0, 0xb0, // .../..r....q.... + 0x09, 0x10, 0xb0, 0x13, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x16, 0xb0, 0x0a, // ......+X...Y.... + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x13, 0x10, 0xb0, 0x19, 0xd0, 0xb0, 0x16, 0x10, 0xb0, // +X...Y.......... + 0x1d, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x13, 0x10, 0xb0, 0x20, 0xb0, 0x0a, // ...+X...Y.... .. + 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x1d, 0x10, 0xb0, 0x23, 0xd0, 0x30, 0x31, 0x01, 0x17, // +X...Y....#.01.. + 0x16, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x13, 0x14, // ..#"&773..3265.. + 0x06, 0x23, 0x22, 0x26, 0x23, 0x22, 0x06, 0x15, 0x27, 0x34, 0x36, 0x33, 0x32, 0x16, 0x33, 0x32, // .#"&#"..'4632.32 + 0x36, 0x35, 0x02, 0xcb, 0x02, 0x06, 0xa0, 0x88, 0x89, 0xa1, 0x07, 0x02, 0x94, 0x43, 0x4a, 0x47, // 65...........CJG + 0x45, 0x94, 0x5f, 0x47, 0x3a, 0x7c, 0x29, 0x22, 0x2d, 0x58, 0x5e, 0x49, 0x2d, 0x87, 0x2b, 0x20, // E._G:|)"-X^I-.+ + 0x30, 0x05, 0xb0, 0x06, 0x5b, 0x74, 0x74, 0x5b, 0x06, 0x34, 0x41, 0x41, 0x34, 0x01, 0x0c, 0x4b, // 0...[tt[.4AA4..K + 0x6b, 0x4c, 0x34, 0x25, 0x15, 0x4a, 0x6f, 0x4c, 0x33, 0x26, 0x00, 0x00, 0x00, 0x01, 0x00, 0x60, // kL4%.JoL3&.....` + 0xfe, 0x99, 0x01, 0x25, 0x00, 0x9d, 0x00, 0x03, 0x00, 0x06, 0x00, 0xb0, 0x02, 0x2f, 0x30, 0x31, // ...%........./01 + 0x01, 0x23, 0x11, 0x33, 0x01, 0x25, 0xc5, 0xc5, 0xfe, 0x99, 0x02, 0x04, 0x00, 0x01, 0x00, 0x13, // .#.3.%.......... + 0xfe, 0x63, 0x01, 0xc9, 0x00, 0x43, 0x00, 0x13, 0x00, 0x12, 0x00, 0xb0, 0x06, 0x2f, 0xb1, 0x0d, // .c...C......./.. + 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x37, 0x16, 0x16, 0x15, // ...+X!...Y017... + 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, // ..#"&'7..32654&' + 0xf8, 0x69, 0x68, 0x85, 0x66, 0x44, 0x60, 0x27, 0x21, 0x1e, 0x37, 0x22, 0x3d, 0x36, 0x46, 0x3b, // .ih.fD`'!.7"=6F; + 0x43, 0x34, 0x8f, 0x4c, 0x63, 0x6e, 0x19, 0x13, 0x7b, 0x0b, 0x0f, 0x30, 0x2a, 0x31, 0x57, 0x2e, // C4.Lcn..{..0*1W. + 0x00, 0x01, 0xff, 0xbe, 0xfe, 0x4b, 0x01, 0x72, 0x00, 0x9a, 0x00, 0x0f, 0x00, 0x1c, 0x00, 0xb0, // .....K.r........ + 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x08, 0x3e, 0x59, 0xb1, 0x0b, 0x03, 0xb0, // .EX../....>Y.... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x15, 0x14, 0x06, 0x23, 0x22, // .+X!...Y01%...#" + 0x26, 0x27, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x01, 0x72, 0xac, 0x99, 0x1f, 0x33, // &'7..32655.r...3 + 0x1d, 0x0e, 0x0e, 0x40, 0x13, 0x3c, 0x44, 0x9a, 0xf3, 0xa7, 0xb5, 0x09, 0x09, 0xa0, 0x05, 0x07, // ...@.Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb0, 0x05, 0x10, // ..EX../....>Y... + 0xb0, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, // ....+X...Y.....+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x05, 0x35, 0x25, 0x02, 0x2a, // X!...Y01!#..5%.* + 0xc5, 0xfe, 0xd6, 0x01, 0xef, 0x04, 0xf0, 0x04, 0x8e, 0x36, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5b, // .........6.....[ + 0x00, 0x00, 0x04, 0x25, 0x05, 0xc5, 0x00, 0x1a, 0x00, 0x52, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...%.....R...EX. + 0x11, 0x2f, 0x1b, 0xb1, 0x11, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x00, 0x06, 0x3e, 0x59, 0xb1, 0x19, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // ...>Y.....+X!... + 0x59, 0xb2, 0x02, 0x19, 0x00, 0x11, 0x12, 0x39, 0xb2, 0x03, 0x00, 0x11, 0x11, 0x12, 0x39, 0xb0, // Y......9......9. + 0x11, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x11, // .......+X!...Y.. + 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x03, 0x10, 0xb0, 0x17, 0xd0, 0x30, 0x31, 0x21, 0x21, 0x35, 0x01, // ..........01!!5. + 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x00, 0x33, 0x32, 0x16, // 6654&#"..#'&.32. + 0x15, 0x14, 0x06, 0x07, 0x01, 0x17, 0x21, 0x04, 0x25, 0xfc, 0x51, 0x01, 0xdd, 0x80, 0x5a, 0x7f, // ......!.%.Q...Z. + 0x69, 0x97, 0x8f, 0xbd, 0x02, 0x05, 0x01, 0x04, 0xe6, 0xc4, 0xe9, 0x8d, 0x7f, 0xfe, 0x81, 0x02, // i............... + 0x02, 0xbc, 0x87, 0x02, 0x12, 0x8f, 0xa8, 0x58, 0x6d, 0x95, 0x9b, 0x8c, 0x06, 0xbc, 0x01, 0x00, // .......Xm....... + 0xe5, 0xb1, 0x77, 0xef, 0x89, 0xfe, 0x5f, 0x05, 0x00, 0x01, 0x00, 0x74, 0xff, 0xeb, 0x04, 0x24, // ..w..._....t...$ + 0x05, 0xc5, 0x00, 0x2a, 0x00, 0x7e, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0f, // ...*.~.../..EX.. + 0x2f, 0x1b, 0xb1, 0x0f, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1b, 0x2f, 0x1b, 0xb1, // /....>Y..EX../.. + 0x1b, 0x06, 0x3e, 0x59, 0xb2, 0xcf, 0x00, 0x01, 0x5d, 0xb2, 0x1f, 0x00, 0x01, 0x71, 0xb2, 0xbf, // ..>Y....]....q.. + 0x00, 0x01, 0x71, 0xb2, 0xef, 0x00, 0x01, 0x5d, 0xb2, 0x7f, 0x00, 0x01, 0x5d, 0xb2, 0x2f, 0x00, // ..q....]....]./. + 0x01, 0x5d, 0xb0, 0x0f, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .]........+X!... + 0x59, 0xb0, 0x0f, 0x10, 0xb0, 0x0a, 0xd0, 0xb0, 0x00, 0x10, 0xb1, 0x2a, 0x02, 0xb0, 0x0a, 0x2b, // Y..........*...+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x15, 0x2a, 0x00, 0x11, 0x12, 0x39, 0xb0, 0x1b, 0x10, // X!...Y..*...9... + 0xb0, 0x20, 0xd0, 0xb0, 0x1b, 0x10, 0xb1, 0x23, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // . .....#...+X!.. + 0xf4, 0x59, 0x30, 0x31, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x23, // .Y01.32654&#"..# + 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x04, 0x23, // '&632..........# + 0x22, 0x24, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x01, // "$773..32654&##. + 0x99, 0xac, 0x8e, 0x76, 0x86, 0x83, 0x73, 0x8b, 0xbd, 0x02, 0x05, 0xfa, 0xc8, 0xd3, 0xfb, 0x72, // ...v..s........r + 0x72, 0x89, 0x71, 0xfe, 0xef, 0xd3, 0xc7, 0xfe, 0xfb, 0x05, 0x03, 0xbc, 0x8d, 0x7b, 0x86, 0x99, // r.q..........{.. + 0x88, 0x92, 0xac, 0x03, 0x33, 0x82, 0x76, 0x7d, 0x82, 0x87, 0x70, 0x06, 0xa5, 0xe7, 0xd7, 0xc7, // ....3.v}..p..... + 0x5a, 0xb3, 0x2f, 0x2b, 0xb8, 0x72, 0xc7, 0xe4, 0xd7, 0xb8, 0x06, 0x73, 0x88, 0x88, 0x85, 0x87, // Z./+.r.....s.... + 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x46, 0x00, 0x00, 0x04, 0x61, 0x05, 0xb0, 0x00, 0x0a, // .......F...a.... + 0x00, 0x0f, 0x00, 0x48, 0x00, 0xb0, 0x02, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, // ...H.../..EX../. + 0xb1, 0x09, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x02, 0x10, 0xb1, 0x01, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x06, 0xd0, 0xb0, 0x01, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x09, 0x10, // Y............... + 0xb0, 0x0d, 0xd0, 0xb4, 0x8b, 0x0d, 0x9b, 0x0d, 0x02, 0x5d, 0x30, 0x31, 0x01, 0x33, 0x15, 0x23, // .........]01.3.# + 0x11, 0x23, 0x11, 0x21, 0x35, 0x01, 0x33, 0x01, 0x21, 0x11, 0x27, 0x07, 0x03, 0x98, 0xc9, 0xc9, // .#.!5.3.!.'..... + 0xc4, 0xfd, 0x72, 0x02, 0x82, 0xd0, 0xfd, 0x80, 0x01, 0xbc, 0x06, 0x13, 0x01, 0xea, 0x9a, 0xfe, // ..r............. + 0xb0, 0x01, 0x50, 0x6f, 0x03, 0xf1, 0xfc, 0x3a, 0x02, 0xbb, 0x01, 0x2f, 0x00, 0x01, 0x00, 0xa7, // ..Po...:.../.... + 0xff, 0xeb, 0x04, 0x22, 0x05, 0xb0, 0x00, 0x1f, 0x00, 0x59, 0x00, 0xb0, 0x08, 0x2f, 0xb0, 0x00, // ...".....Y.../.. + 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, // EX../....>Y..EX. + 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, // ./....>Y........ + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb0, 0x13, 0xd0, 0xb0, 0x0e, 0x10, // +X!...Y......... + 0xb1, 0x16, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb1, // .....+X!...Y.... + 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, 0x10, 0xb0, 0x1f, // ....+X!...Y..... + 0xd0, 0x30, 0x31, 0x13, 0x13, 0x21, 0x15, 0x21, 0x03, 0x36, 0x36, 0x37, 0x36, 0x12, 0x15, 0x14, // .01..!.!.6676... + 0x02, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, // .#"&773..32654&# + 0x22, 0x06, 0x07, 0xbe, 0x54, 0x02, 0xd9, 0xfd, 0xce, 0x30, 0x2e, 0x71, 0x4a, 0xc9, 0xe7, 0xeb, // "...T....0.qJ... + 0xe1, 0xb9, 0xf6, 0x05, 0x02, 0xb3, 0x88, 0x6d, 0x7d, 0x8a, 0x8c, 0x7b, 0x74, 0x68, 0x18, 0x02, // .......m}..{th.. + 0x91, 0x03, 0x1f, 0xaf, 0xfe, 0x67, 0x22, 0x2d, 0x02, 0x02, 0xfe, 0xf6, 0xe1, 0xdb, 0xfe, 0xf6, // .....g"-........ + 0xca, 0xc4, 0x06, 0x77, 0x83, 0xb0, 0x99, 0x8d, 0xb3, 0x46, 0x48, 0x00, 0x00, 0x02, 0x00, 0x93, // ...w.....FH..... + 0xff, 0xeb, 0x04, 0x46, 0x05, 0xc5, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x51, 0x00, 0xb0, 0x00, 0x45, // ...F.....'.Q...E + 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x07, 0x02, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0e, 0x14, 0x00, 0x11, 0x12, 0x39, 0xb0, 0x0e, 0x2f, // X!...Y......9../ + 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x14, 0x10, 0xb1, // .....+X!...Y.... + 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x16, // "...+X!...Y01.2. + 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x36, 0x36, 0x33, 0x32, 0x12, 0x15, 0x14, // ..&&#"...6632... + 0x02, 0x23, 0x22, 0x00, 0x11, 0x11, 0x10, 0x00, 0x13, 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, // .#"......".....3 + 0x32, 0x36, 0x35, 0x34, 0x26, 0x02, 0xb2, 0x4b, 0x93, 0x30, 0x2a, 0x31, 0x6b, 0x48, 0x9c, 0xbf, // 2654&..K.0*1kH.. + 0x40, 0xa5, 0x5f, 0xc3, 0xe8, 0xf7, 0xce, 0xd6, 0xfe, 0xe8, 0x01, 0x38, 0xa4, 0x65, 0x8e, 0x25, // @._........8.e.% + 0xaa, 0x80, 0x79, 0x87, 0x91, 0x05, 0xc5, 0x22, 0x1a, 0x97, 0x19, 0x1f, 0xfa, 0xc9, 0x17, 0x38, // ..y....".......8 + 0x3f, 0xfe, 0xf2, 0xcf, 0xe2, 0xfe, 0xe3, 0x01, 0x36, 0x01, 0x1a, 0x01, 0x16, 0x01, 0x18, 0x01, // ?.......6....... + 0x5c, 0xfd, 0x6f, 0x52, 0x44, 0x76, 0xc9, 0xda, 0xcd, 0x98, 0x90, 0xba, 0x00, 0x01, 0x00, 0x1e, // ..oRDv.......... + 0x00, 0x00, 0x03, 0xce, 0x05, 0xb0, 0x00, 0x0c, 0x00, 0x2c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .........,...EX. + 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x02, 0x02, 0x03, 0x07, 0x23, 0x37, 0x12, 0x12, 0x13, // ...Y01.....#7... + 0x21, 0x35, 0x21, 0x03, 0xce, 0xf3, 0xaa, 0x25, 0x10, 0xc5, 0x10, 0x27, 0xdf, 0xc0, 0xfd, 0x11, // !5!....%...'.... + 0x03, 0xb0, 0x05, 0x15, 0xfe, 0xc5, 0xfe, 0x1b, 0xfe, 0xa8, 0x9d, 0x9d, 0x01, 0x58, 0x02, 0x1e, // .............X.. + 0x01, 0x02, 0x9b, 0x00, 0x00, 0x03, 0x00, 0x7d, 0xff, 0xeb, 0x04, 0x58, 0x05, 0xc5, 0x00, 0x17, // .......}...X.... + 0x00, 0x23, 0x00, 0x2f, 0x00, 0x63, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x15, 0x2f, 0x1b, 0xb1, // .#./.c...EX../.. + 0x15, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, 0x1b, 0xb1, 0x09, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb2, 0x2d, 0x09, 0x15, 0x11, 0x12, 0x39, 0xb0, 0x2d, 0x2f, 0xb2, 0xcf, 0x2d, 0x01, 0x5d, // Y.-....9.-/..-.] + 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x03, 0x1b, 0x2d, // .....+X!...Y...- + 0x11, 0x12, 0x39, 0xb0, 0x03, 0x10, 0xb0, 0x0f, 0xd0, 0xb0, 0x09, 0x10, 0xb1, 0x21, 0x02, 0xb0, // ..9..........!.. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x15, 0x10, 0xb1, 0x27, 0x02, 0xb0, 0x0a, // .+X!...Y....'... + 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, // +X!...Y01....... + 0x14, 0x04, 0x23, 0x22, 0x24, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, // ..#"$5467&&54632 + 0x16, 0x03, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, 0x34, 0x26, // ..4&#"....326.4& + 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x04, 0x2f, 0x85, 0x72, 0x83, 0x9d, 0xfe, // #"....326./.r... + 0xee, 0xdb, 0xdf, 0xfe, 0xf1, 0x99, 0x84, 0x72, 0x82, 0xf8, 0xcb, 0xc9, 0xfd, 0x9c, 0xaa, 0x80, // .......r........ + 0x83, 0xa4, 0xa2, 0x87, 0x83, 0xa5, 0x29, 0x91, 0x70, 0x72, 0x8c, 0x8d, 0x73, 0x71, 0x8e, 0x04, // ......).pr..sq.. + 0x34, 0x72, 0xab, 0x2a, 0x2c, 0xbc, 0x7b, 0xca, 0xd5, 0xd5, 0xca, 0x7c, 0xbb, 0x2c, 0x29, 0xac, // 4r.*,.{....|.,). + 0x72, 0xc0, 0xd1, 0xd1, 0xfc, 0x9a, 0x77, 0x9b, 0x99, 0x79, 0x7c, 0x8d, 0x8e, 0x03, 0x1d, 0x6c, // r.....w..y|....l + 0x8e, 0x89, 0x71, 0x6f, 0x86, 0x86, 0x00, 0x00, 0x00, 0x02, 0x00, 0x62, 0xff, 0xeb, 0x04, 0x10, // ..qo.......b.... + 0x05, 0xc5, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x4a, 0x00, 0xb0, 0x07, 0x2f, 0xb0, 0x00, 0x45, 0x58, // .....'.J.../..EX + 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0c, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, 0x2f, // ../....>Y..EX../ + 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ....>Y.....+X!.. + 0xf4, 0x59, 0xb0, 0x07, 0x10, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y........+X!... + 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x22, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y...."...+X!...Y + 0x30, 0x31, 0x25, 0x32, 0x36, 0x35, 0x35, 0x06, 0x06, 0x23, 0x22, 0x02, 0x35, 0x34, 0x00, 0x33, // 01%2655..#".54.3 + 0x32, 0x00, 0x11, 0x11, 0x10, 0x00, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, 0x13, 0x32, 0x36, // 2.....#"&'7...26 + 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x02, 0x0e, 0x90, 0xad, 0x31, 0x93, // 754&#"........1. + 0x5a, 0xd3, 0xf8, 0x01, 0x07, 0xbc, 0xe4, 0x01, 0x07, 0xfe, 0xe3, 0xe5, 0x4d, 0x9f, 0x3f, 0x1e, // Z...........M.?. + 0x3b, 0x7f, 0x72, 0x6d, 0x91, 0x20, 0x93, 0x8d, 0x6c, 0x98, 0x8d, 0x85, 0xda, 0xd7, 0x42, 0x47, // ;.rm. ..l.....BG + 0x49, 0x01, 0x05, 0xe5, 0xdb, 0x01, 0x18, 0xfe, 0xe3, 0xfe, 0xeb, 0xfe, 0xa5, 0xfe, 0xe3, 0xfe, // I............... + 0xd0, 0x1d, 0x1e, 0x97, 0x1f, 0x19, 0x01, 0xfd, 0x5e, 0x49, 0x7e, 0xbf, 0xc4, 0xc1, 0x97, 0x96, // ........^I~..... + 0xba, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x99, 0x00, 0x00, 0x04, 0x1f, 0x04, 0x8d, 0x00, 0x0a, // ................ + 0x00, 0x13, 0x00, 0x3e, 0x00, 0xb0, 0x00, 0x2f, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, 0x2f, 0x1b, // ...>.../..EX../. + 0xb1, 0x03, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x06, // ...>Y..EX../.... + 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x0b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // >Y........+X!... + 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x12, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0x30, 0x31, 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x25, 0x21, 0x32, // 01..#.!2....#%!2 + 0x36, 0x35, 0x34, 0x26, 0x23, 0x21, 0x01, 0x5e, 0xc5, 0x01, 0xd2, 0xcb, 0xe9, 0xe9, 0xcb, 0xfe, // 654&#!.^........ + 0xf3, 0x01, 0x0d, 0x75, 0x79, 0x79, 0x75, 0xfe, 0xf3, 0x01, 0xa4, 0xfe, 0x5c, 0x04, 0x8d, 0xd0, // ...uyyu......... + 0xa5, 0xa6, 0xce, 0x9a, 0x7e, 0x5a, 0x5c, 0x82, 0x00, 0x01, 0x00, 0x5a, 0xff, 0xef, 0x03, 0xa8, // ....~Z.....Z.... + 0x04, 0x8d, 0x00, 0x1f, 0x00, 0x60, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, // .....`...EX../.. + 0x01, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x01, 0x10, 0xb1, 0x03, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, // Y........+X!...Y + 0xb2, 0x08, 0x0e, 0x01, 0x11, 0x12, 0x39, 0xb0, 0x08, 0x2f, 0xb0, 0x0e, 0x10, 0xb0, 0x13, 0xd0, // ......9../...... + 0xb0, 0x0e, 0x10, 0xb1, 0x16, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ........+X!...Y. + 0x08, 0x10, 0xb1, 0x1c, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x08, // .......+X!...Y.. + 0x10, 0xb0, 0x1f, 0xd0, 0x30, 0x31, 0x13, 0x13, 0x21, 0x15, 0x21, 0x03, 0x36, 0x36, 0x37, 0x36, // ....01..!.!.6676 + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x3f, 0x02, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, // ....#"&?...32654 + 0x26, 0x23, 0x22, 0x06, 0x07, 0x87, 0x47, 0x02, 0xa6, 0xfe, 0x05, 0x21, 0x25, 0x72, 0x38, 0xb5, // &#"...G....!%r8. + 0xcc, 0xd2, 0xdb, 0xb2, 0xef, 0x05, 0x01, 0xbd, 0x7b, 0x63, 0x76, 0x72, 0x6f, 0x65, 0x66, 0x63, // ........{cvroefc + 0x18, 0x01, 0xf8, 0x02, 0x95, 0xa4, 0xfe, 0xca, 0x19, 0x25, 0x02, 0x03, 0xca, 0xb9, 0xb2, 0xd2, // .........%...... + 0xa1, 0x9d, 0x06, 0x0e, 0x53, 0x67, 0x7c, 0x6e, 0x6b, 0x7d, 0x39, 0x35, 0x00, 0x02, 0x00, 0x78, // ....Sg|nk}95...x + 0xff, 0xf5, 0x03, 0x04, 0x03, 0x2c, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x51, 0x00, 0xb0, 0x00, 0x45, // .....,...'.Q...E + 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb0, 0x00, 0x10, 0xb1, 0x07, 0x01, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x0e, 0x14, 0x00, 0x11, 0x12, 0x39, 0xb0, 0x0e, 0x2f, // X!...Y......9../ + 0xb1, 0x1b, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x14, 0x10, 0xb1, // .....+X!...Y.... + 0x22, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x16, // "...+X!...Y01.2. + 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x36, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, // ..&&#"...6632... + 0x06, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x13, 0x22, 0x06, 0x07, 0x15, 0x14, 0x16, 0x33, // .#"&5546.".....3 + 0x32, 0x36, 0x35, 0x34, 0x26, 0x01, 0xde, 0x35, 0x6c, 0x2b, 0x1e, 0x27, 0x52, 0x33, 0x53, 0x69, // 2654&..5l+.'R3Si + 0x24, 0x65, 0x3f, 0x84, 0x94, 0xb6, 0x90, 0x8d, 0xb9, 0xcd, 0x80, 0x40, 0x53, 0x0e, 0x56, 0x44, // $e?........@S.VD + 0x47, 0x54, 0x4a, 0x03, 0x2c, 0x13, 0x10, 0x7f, 0x10, 0x0f, 0x5e, 0x4e, 0x42, 0x22, 0x26, 0x8c, // GTJ.,.....^NB"&. + 0x7a, 0x76, 0x92, 0xaa, 0x87, 0xd6, 0x87, 0xa9, 0xfe, 0x56, 0x2c, 0x26, 0x0a, 0x4e, 0x61, 0x4b, // zv.......V,&.NaK + 0x3b, 0x3f, 0x46, 0x00, 0x00, 0x01, 0x00, 0x72, 0xff, 0xf5, 0x02, 0xf6, 0x03, 0x21, 0x00, 0x1f, // ;?F....r.....!.. + 0x00, 0x5e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x01, 0x2f, 0x1b, 0xb1, 0x01, 0x10, 0x3e, 0x59, // .^...EX../....>Y + 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x06, 0x3e, 0x59, 0xb0, 0x01, 0x10, // ..EX../....>Y... + 0xb1, 0x03, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x08, 0x0e, 0x01, // .....+X!...Y.... + 0x11, 0x12, 0x39, 0xb0, 0x08, 0x2f, 0xb1, 0x1c, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, // ..9../.....+X!.. + 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x16, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, // .Y........+X!... + 0x59, 0xb2, 0x1f, 0x1c, 0x16, 0x11, 0x12, 0x39, 0xb0, 0x1f, 0x10, 0xb0, 0x13, 0xd0, 0x30, 0x31, // Y......9......01 + 0x13, 0x13, 0x21, 0x15, 0x21, 0x07, 0x36, 0x36, 0x37, 0x36, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, // ..!.!.6676....#" + 0x26, 0x3f, 0x02, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x92, // &?...32654&#"... + 0x34, 0x02, 0x04, 0xfe, 0x95, 0x1a, 0x1e, 0x4f, 0x2a, 0x84, 0x96, 0x9f, 0xa6, 0x89, 0xb6, 0x06, // 4......O*....... + 0x01, 0xa2, 0x52, 0x44, 0x4e, 0x4c, 0x4d, 0x43, 0x41, 0x43, 0x0f, 0x01, 0x5a, 0x01, 0xc7, 0x85, // ..RDNLMCAC..Z... + 0xb9, 0x11, 0x19, 0x01, 0x02, 0x91, 0x80, 0x7a, 0x90, 0x6e, 0x6a, 0x06, 0x0a, 0x30, 0x36, 0x45, // .......z.nj..06E + 0x42, 0x42, 0x51, 0x22, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x57, 0x00, 0x00, 0x03, 0x28, // BBQ".......W...( + 0x03, 0x21, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x45, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x09, 0x2f, // .!.....E...EX../ + 0x1b, 0xb1, 0x09, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, // ....>Y..EX../... + 0x06, 0x3e, 0x59, 0xb2, 0x02, 0x04, 0x09, 0x11, 0x12, 0x39, 0xb0, 0x02, 0x2f, 0xb1, 0x01, 0x01, // .>Y......9../... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0x10, 0xb0, 0x06, 0xd0, 0xb0, // ..+X!...Y....... + 0x01, 0x10, 0xb0, 0x0b, 0xd0, 0xb0, 0x09, 0x10, 0xb0, 0x0e, 0xd0, 0x30, 0x31, 0x01, 0x33, 0x15, // ...........01.3. + 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x01, 0x33, 0x01, 0x33, 0x11, 0x27, 0x07, 0x02, 0xaa, 0x7e, // #.#5!'.3.3.'...~ + 0x7e, 0xaa, 0xfe, 0x5f, 0x08, 0x01, 0xa6, 0xad, 0xfe, 0x63, 0xf3, 0x06, 0x0d, 0x01, 0x1a, 0x82, // ~.._.....c...... + 0x98, 0x98, 0x66, 0x02, 0x23, 0xfd, 0xf9, 0x01, 0x36, 0x01, 0x16, 0x00, 0x00, 0x01, 0x00, 0x6a, // ..f.#...6......j + 0xff, 0xf5, 0x02, 0xe4, 0x03, 0x2c, 0x00, 0x2a, 0x00, 0x80, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // .....,.*.....EX. + 0x0e, 0x2f, 0x1b, 0xb1, 0x0e, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x1a, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x1a, 0x06, 0x3e, 0x59, 0xb0, 0x0e, 0x10, 0xb1, 0x06, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0e, 0x10, 0xb0, 0x09, 0xd0, 0xb2, 0x2a, 0x1a, 0x0e, 0x11, 0x12, // ...Y.......*.... + 0x39, 0xb0, 0x2a, 0x2f, 0xb4, 0x0f, 0x2a, 0x1f, 0x2a, 0x02, 0x5d, 0xb6, 0x2f, 0x2a, 0x3f, 0x2a, // 9.*/..*.*.]./*?* + 0x4f, 0x2a, 0x03, 0x71, 0xb2, 0xff, 0x2a, 0x01, 0x71, 0xb4, 0x0f, 0x2a, 0x1f, 0x2a, 0x02, 0x72, // O*.q..*.q..*.*.r + 0xb1, 0x29, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb2, 0x14, 0x29, 0x2a, // .)...+X!...Y..)* + 0x11, 0x12, 0x39, 0xb0, 0x1a, 0x10, 0xb0, 0x1f, 0xd0, 0xb0, 0x1a, 0x10, 0xb1, 0x22, 0x01, 0xb0, // ..9..........".. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x32, 0x36, 0x35, 0x34, 0x26, // .+X!...Y01.2654& + 0x23, 0x22, 0x06, 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x16, // #"..#'&632...... + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x37, 0x33, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, // ....#"&773..3265 + 0x34, 0x26, 0x23, 0x23, 0x35, 0x01, 0xa8, 0x43, 0x41, 0x49, 0x45, 0x38, 0x45, 0xa2, 0x02, 0x06, // 4&##5..CAIE8E... + 0xa9, 0x7e, 0x91, 0xa8, 0x47, 0x3e, 0x46, 0x4c, 0xb4, 0x92, 0x7f, 0xb5, 0x06, 0x01, 0xa3, 0x4b, // .~..G>FL.......K + 0x3f, 0x48, 0x54, 0x49, 0x49, 0x84, 0x01, 0xd7, 0x39, 0x34, 0x2b, 0x3a, 0x30, 0x28, 0x06, 0x5e, // ?HTII...94+:0(.^ + 0x77, 0x77, 0x6e, 0x37, 0x5b, 0x1a, 0x17, 0x60, 0x44, 0x6f, 0x7c, 0x74, 0x6f, 0x06, 0x2e, 0x39, // wwn7[..`Do|to..9 + 0x3b, 0x30, 0x3e, 0x39, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x71, 0x00, 0x00, 0x02, 0xca, // ;0>9~......q.... + 0x03, 0x2c, 0x00, 0x1a, 0x00, 0x4e, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x11, 0x2f, 0x1b, 0xb1, // .,...N...EX../.. + 0x11, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb1, 0x19, 0x01, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x02, 0xd0, // Y.....+X!...Y... + 0xb2, 0x03, 0x00, 0x11, 0x11, 0x12, 0x39, 0xb0, 0x11, 0x10, 0xb1, 0x09, 0x01, 0xb0, 0x0a, 0x2b, // ......9........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x11, 0x10, 0xb0, 0x0c, 0xd0, 0xb0, 0x03, 0x10, 0xb0, // X!...Y.......... + 0x17, 0xd0, 0x30, 0x31, 0x21, 0x21, 0x35, 0x01, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, // ..01!!5.6654&#". + 0x15, 0x23, 0x27, 0x26, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x07, 0x07, 0x17, 0x21, 0x02, // .#'&632.......!. + 0xca, 0xfd, 0xb0, 0x01, 0x2e, 0x45, 0x2c, 0x39, 0x3a, 0x43, 0x49, 0xa1, 0x02, 0x06, 0xa8, 0x8d, // .....E,9:CI..... + 0x87, 0x98, 0x59, 0x74, 0x99, 0x02, 0x01, 0x69, 0x82, 0x01, 0x06, 0x3c, 0x4b, 0x2a, 0x32, 0x3e, // ..Yt...i... + 0x40, 0x32, 0x06, 0x63, 0x8c, 0x80, 0x74, 0x50, 0x70, 0x69, 0x87, 0x06, 0x00, 0x03, 0x00, 0x9b, // @2.c..tPpi...... + 0x04, 0x3d, 0x02, 0x74, 0x06, 0x72, 0x00, 0x04, 0x00, 0x10, 0x00, 0x1c, 0x00, 0x4f, 0x00, 0xb0, // .=.t.r.......O.. + 0x0e, 0x2f, 0xb2, 0x2f, 0x0e, 0x01, 0x71, 0xb2, 0x3f, 0x0e, 0x01, 0x5d, 0xb2, 0x7f, 0x0e, 0x01, // ././..q.?..].... + 0x5d, 0xb2, 0x5f, 0x0e, 0x01, 0x5d, 0xb0, 0x1a, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, // ]._..]....+X...Y + 0xb0, 0x08, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x03, 0xb0, 0x0a, 0x2b, 0x58, // ....+X...Y....+X + 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x00, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb0, 0x0e, // ...Y....+X...Y.. + 0x10, 0xb0, 0x14, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0x30, 0x31, 0x01, 0x33, 0x17, // .....+X...Y01.3. + 0x07, 0x23, 0x07, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x37, 0x14, // .#.4632....#"&7. + 0x16, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x01, 0xab, 0xc7, 0x02, 0xd8, 0x81, // .32654&#"....... + 0x80, 0x66, 0x49, 0x46, 0x64, 0x63, 0x47, 0x49, 0x66, 0x58, 0x33, 0x24, 0x22, 0x31, 0x31, 0x22, // .fIFdcGIfX3$"11" + 0x24, 0x33, 0x06, 0x72, 0x06, 0xb3, 0xd8, 0x48, 0x5f, 0x5f, 0x48, 0x48, 0x5c, 0x5c, 0x48, 0x23, // $3.r...H__HH..H# + 0x31, 0x30, 0x24, 0x25, 0x33, 0x33, 0x00, 0x00, 0x00, 0x01, 0x00, 0x5f, 0x00, 0x00, 0x01, 0x8c, // 10$%33....._.... + 0x03, 0x2c, 0x00, 0x05, 0x00, 0x36, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x05, 0x2f, 0x1b, 0xb1, // .,...6...EX../.. + 0x05, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x00, 0x2f, 0x1b, 0xb1, 0x00, 0x06, 0x3e, // ..>Y..EX../....> + 0x59, 0xb0, 0x05, 0x10, 0xb0, 0x04, 0xb0, 0x0a, 0x2b, 0x58, 0xd8, 0x1b, 0xdc, 0x59, 0xb1, 0x03, // Y.......+X...Y.. + 0x05, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x21, 0x23, 0x11, 0x23, // ...+X!...Y01!#.# + 0x35, 0x25, 0x01, 0x8c, 0xae, 0x7f, 0x01, 0x2d, 0x02, 0x8f, 0x86, 0x17, 0x00, 0x02, 0x00, 0x78, // 5%.....-.......x + 0xff, 0xf5, 0x03, 0x1e, 0x03, 0x2c, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x3b, 0x00, 0xb0, 0x00, 0x45, // .....,.....;...E + 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, 0x0a, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x03, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x03, 0x06, 0x3e, 0x59, 0xb0, 0x0a, 0x10, 0xb1, 0x11, 0x01, 0xb0, 0x0a, 0x2b, // /....>Y........+ + 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x03, 0x10, 0xb1, 0x18, 0x01, 0xb0, 0x0a, 0x2b, 0x58, // X!...Y........+X + 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, // !...Y01...#"&554 + 0x36, 0x33, 0x32, 0x16, 0x15, 0x27, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, // 632..'4&#".....3 + 0x32, 0x36, 0x35, 0x03, 0x1e, 0xbb, 0x97, 0x99, 0xbb, 0xba, 0x98, 0x98, 0xbc, 0xad, 0x59, 0x4e, // 265...........YN + 0x4e, 0x58, 0x59, 0x4f, 0x4d, 0x58, 0x01, 0x1b, 0x88, 0x9e, 0x9e, 0x88, 0xeb, 0x86, 0xa0, 0xa0, // NXYOMX.......... + 0x86, 0x01, 0x4c, 0x56, 0x56, 0x4c, 0xec, 0x4e, 0x56, 0x56, 0x4e, 0x00, 0x00, 0x02, 0x00, 0x47, // ..LVVL.NVVN....G + 0xff, 0xef, 0x03, 0xa0, 0x04, 0x9d, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x4e, 0x00, 0xb0, 0x00, 0x45, // .........'.N...E + 0x58, 0xb0, 0x0d, 0x2f, 0x1b, 0xb1, 0x0d, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x14, // X../....>Y..EX.. + 0x2f, 0x1b, 0xb1, 0x14, 0x06, 0x3e, 0x59, 0xb1, 0x00, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // /....>Y.....+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x07, 0x14, 0x0d, 0x11, 0x12, 0x39, 0xb0, 0x07, 0x2f, 0xb1, 0x1b, 0x05, // ..Y......9../... + 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x0d, 0x10, 0xb1, 0x22, 0x02, 0xb0, // ..+X!...Y....".. + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x25, 0x32, 0x36, 0x35, 0x35, 0x06, // .+X!...Y01%2655. + 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x11, 0x14, 0x04, 0x23, 0x22, // .#"&54632.....#" + 0x26, 0x27, 0x37, 0x16, 0x16, 0x13, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, // &'7...26754&#".. + 0x14, 0x16, 0x01, 0xde, 0x6c, 0x91, 0x2d, 0x7f, 0x48, 0xc3, 0xdd, 0xf0, 0xbe, 0xb9, 0xf2, 0xff, // ....l.-.H....... + 0x00, 0xc2, 0x44, 0x94, 0x43, 0x1f, 0x3c, 0x75, 0x5b, 0x58, 0x7c, 0x19, 0x85, 0x63, 0x66, 0x80, // ..D.C.Y..EX../....> + 0x59, 0xb2, 0x2d, 0x09, 0x15, 0x11, 0x12, 0x39, 0xb0, 0x2d, 0x2f, 0xb2, 0xaf, 0x2d, 0x01, 0x5d, // Y.-....9.-/..-.] + 0xb4, 0x1f, 0x2d, 0x2f, 0x2d, 0x02, 0x5d, 0xb1, 0x1b, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, // ..-/-.].....+X!. + 0x1b, 0xf4, 0x59, 0xb2, 0x03, 0x1b, 0x2d, 0x11, 0x12, 0x39, 0xb0, 0x03, 0x10, 0xb0, 0x0f, 0xd0, // ..Y...-..9...... + 0xb0, 0x09, 0x10, 0xb1, 0x21, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, // ....!...+X!...Y. + 0x15, 0x10, 0xb1, 0x27, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, // ...'...+X!...Y01 + 0x01, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x35, 0x34, 0x36, 0x37, // .........#"&5467 + 0x26, 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x03, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, // &&54632..4&#"... + 0x16, 0x33, 0x32, 0x36, 0x03, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, // .326.4&#"....326 + 0x03, 0xa6, 0x66, 0x56, 0x66, 0x79, 0xf7, 0xb9, 0xc2, 0xff, 0x7b, 0x6a, 0x5b, 0x68, 0xe9, 0xb4, // ..fVfy....{j[h.. + 0xac, 0xe3, 0xa3, 0x8b, 0x61, 0x69, 0x91, 0x91, 0x6b, 0x62, 0x88, 0x23, 0x77, 0x52, 0x5d, 0x7b, // ....ai..kb.#wR]{ + 0x7d, 0x5d, 0x53, 0x74, 0x03, 0x5c, 0x57, 0x84, 0x25, 0x27, 0x90, 0x5e, 0xa2, 0xb6, 0xb6, 0xa2, // }]St..W.%'.^.... + 0x5e, 0x91, 0x26, 0x25, 0x84, 0x57, 0x99, 0xa8, 0xa8, 0xfd, 0x56, 0x54, 0x6f, 0x6f, 0x54, 0x57, // ^.&%.W....VTooTW + 0x6d, 0x6d, 0x02, 0x64, 0x4a, 0x62, 0x5e, 0x4e, 0x4d, 0x63, 0x63, 0x00, 0x00, 0x01, 0x00, 0x47, // mm.dJb^NMcc....G + 0x00, 0x00, 0x03, 0x67, 0x04, 0x8d, 0x00, 0x0c, 0x00, 0x2c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, // ...g.....,...EX. + 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x0e, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, // ./....>Y..EX../. + 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x09, 0x02, 0xb0, 0x0a, 0x2b, 0x58, 0x21, // ...>Y........+X! + 0xd8, 0x1b, 0xf4, 0x59, 0x30, 0x31, 0x01, 0x06, 0x02, 0x11, 0x15, 0x23, 0x35, 0x10, 0x12, 0x37, // ...Y01.....#5..7 + 0x21, 0x35, 0x21, 0x03, 0x67, 0xbd, 0xa3, 0xc5, 0xe7, 0x8e, 0xfd, 0x90, 0x03, 0x20, 0x03, 0xf4, // !5!.g........ .. + 0xe8, 0xfe, 0xc0, 0xfe, 0xed, 0xb9, 0xb9, 0x01, 0x0c, 0x01, 0x96, 0x99, 0x99, 0x00, 0x00, 0x00, // ................ + 0x00, 0x01, 0x00, 0x5f, 0x00, 0x00, 0x02, 0xac, 0x03, 0x21, 0x00, 0x0c, 0x00, 0x2f, 0x00, 0xb0, // ..._.....!.../.. + 0x00, 0x45, 0x58, 0xb0, 0x0b, 0x2f, 0x1b, 0xb1, 0x0b, 0x10, 0x3e, 0x59, 0xb0, 0x00, 0x45, 0x58, // .EX../....>Y..EX + 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x06, 0x3e, 0x59, 0xb0, 0x0b, 0x10, 0xb1, 0x09, 0x01, 0xb0, // ../....>Y....... + 0x0a, 0x2b, 0x58, 0x21, 0xd8, 0x1b, 0xf4, 0x59, 0xb0, 0x00, 0xd0, 0x30, 0x31, 0x01, 0x06, 0x06, // .+X!...Y...01... + 0x15, 0x15, 0x23, 0x35, 0x34, 0x12, 0x37, 0x21, 0x35, 0x21, 0x02, 0xac, 0x86, 0x6f, 0xac, 0x9b, // ..#54.7!5!...o.. + 0x59, 0xfe, 0x60, 0x02, 0x4d, 0x02, 0x9e, 0x9e, 0xcb, 0xb6, 0x7f, 0x7f, 0xb5, 0x01, 0x17, 0x53, // Y.`.M..........S + 0x83, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x81, 0x04, 0xa4, 0x02, 0xd8, 0x05, 0xb0, 0x02, 0x06, // ................ + 0x01, 0x54, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf6, 0x00, 0x00, 0x04, 0x31, 0x04, 0x8d, 0x02, 0x26, // .T.........1...& + 0x03, 0x8c, 0x00, 0x00, 0x01, 0x07, 0x03, 0x82, 0xff, 0x64, 0xff, 0x7d, 0x00, 0x2f, 0x00, 0xb2, // .........d.}./.. + 0x1f, 0x16, 0x01, 0x71, 0xb2, 0x9f, 0x16, 0x01, 0x71, 0xb2, 0x6f, 0x16, 0x01, 0x72, 0xb4, 0x1f, // ...q....q.o..r.. + 0x16, 0x2f, 0x16, 0x02, 0x5d, 0xb4, 0x0f, 0x16, 0x1f, 0x16, 0x02, 0x72, 0xb2, 0x4f, 0x16, 0x01, // ./..]......r.O.. + 0x71, 0xb2, 0xff, 0x16, 0x01, 0x5d, 0xb2, 0x5f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, // q....]._..]01... + 0xff, 0xff, 0xff, 0xf6, 0x00, 0x00, 0x04, 0x31, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x8c, 0x00, 0x00, // .......1...&.... + 0x01, 0x07, 0x03, 0x82, 0xff, 0x64, 0xff, 0x7d, 0x00, 0x34, 0x00, 0xb2, 0xaf, 0x16, 0x01, 0x5d, // .....d.}.4.....] + 0xb2, 0x1f, 0x16, 0x01, 0x71, 0xb2, 0x9f, 0x16, 0x01, 0x71, 0xb2, 0x6f, 0x16, 0x01, 0x72, 0xb4, // ....q....q.o..r. + 0x0f, 0x16, 0x1f, 0x16, 0x02, 0x72, 0xb2, 0x4f, 0x16, 0x01, 0x71, 0xb2, 0xff, 0x16, 0x01, 0x5d, // .....r.O..q....] + 0xb2, 0x5f, 0x16, 0x01, 0x5d, 0xb4, 0x1f, 0x16, 0x2f, 0x16, 0x02, 0x5d, 0x30, 0x31, 0x00, 0x00, // ._..].../..]01.. + 0xff, 0xff, 0x00, 0x47, 0x00, 0x00, 0x03, 0xd1, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x7b, 0x00, 0x00, // ...G.......&.{.. + 0x01, 0x06, 0x03, 0x82, 0x2d, 0xfa, 0x00, 0x08, 0x00, 0xb2, 0x00, 0x0a, 0x01, 0x5d, 0x30, 0x31, // ....-........]01 + 0xff, 0xff, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, 0x05, 0xdf, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, // ...'.......&.... + 0x01, 0x07, 0x00, 0x43, 0x00, 0xbe, 0x00, 0x1a, 0x00, 0x2f, 0x00, 0xb6, 0xbf, 0x0c, 0xcf, 0x0c, // ...C...../...... + 0xdf, 0x0c, 0x03, 0x5d, 0xb2, 0x9f, 0x0c, 0x01, 0x71, 0xb2, 0xdf, 0x0c, 0x01, 0x71, 0xb2, 0x1f, // ...]....q....q.. + 0x0c, 0x01, 0x5d, 0xb2, 0xbf, 0x0c, 0x01, 0x71, 0xb2, 0x2f, 0x0c, 0x01, 0x71, 0xb2, 0x8f, 0x0c, // ..]....q./..q... + 0x01, 0x5d, 0xb2, 0x6f, 0x0c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x27, // .].o..]01......' + 0x00, 0x00, 0x04, 0x8a, 0x05, 0xdb, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.......v + 0x01, 0x78, 0x00, 0x16, 0x00, 0x4a, 0x00, 0xb4, 0xbf, 0x0f, 0xcf, 0x0f, 0x02, 0x5d, 0xb2, 0x9f, // .x...J.......].. + 0x0f, 0x01, 0x71, 0xb2, 0xef, 0x0f, 0x01, 0x71, 0xb2, 0x2f, 0x0f, 0x01, 0x71, 0xb2, 0x8f, 0x0f, // ..q....q./..q... + 0x01, 0x5d, 0xb2, 0x6f, 0x0f, 0x01, 0x5d, 0xb2, 0xdf, 0x10, 0x01, 0x71, 0xb2, 0x1f, 0x10, 0x01, // .].o..]....q.... + 0x5d, 0xb2, 0xff, 0x10, 0x01, 0x71, 0x40, 0x0b, 0x0f, 0x10, 0x1f, 0x10, 0x2f, 0x10, 0x3f, 0x10, // ]....q@...../.?. + 0x4f, 0x10, 0x05, 0x72, 0xb2, 0xbf, 0x10, 0x01, 0x71, 0xb2, 0xdf, 0x10, 0x01, 0x5d, 0x30, 0x31, // O..r....q....]01 + 0xff, 0xff, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, 0x06, 0x05, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, // ...'.......&.... + 0x01, 0x06, 0x01, 0x52, 0x78, 0x1a, 0x00, 0x1c, 0x00, 0xb2, 0x6f, 0x0d, 0x01, 0x5d, 0xb2, 0xdf, // ...Rx.....o..].. + 0x10, 0x01, 0x71, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0xbf, 0x10, 0x01, 0x5d, 0xb2, 0x8f, 0x10, // ..q....]....]... + 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, 0x06, 0x11, 0x02, 0x26, // .]01...'.......& + 0x03, 0x91, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, 0x73, 0x1e, 0x00, 0x25, 0x00, 0x40, 0x0b, 0x0f, // .......Xs..%.@.. + 0x0f, 0x1f, 0x0f, 0x2f, 0x0f, 0x3f, 0x0f, 0x4f, 0x0f, 0x05, 0x71, 0xb2, 0x1f, 0x0f, 0x01, 0x5d, // .../.?.O..q....] + 0xb2, 0x8f, 0x0f, 0x01, 0x71, 0xb2, 0x8f, 0x0f, 0x01, 0x5d, 0xb2, 0x6f, 0x0f, 0x01, 0x5d, 0x30, // ....q....].o..]0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, 0x05, 0xca, 0x02, 0x26, // 1......'.......& + 0x03, 0x91, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x53, 0x1a, 0x00, 0x5b, 0x00, 0xb2, 0x0f, 0x0d, // .......jS..[.... + 0x01, 0x71, 0x40, 0x09, 0x8f, 0x0d, 0x9f, 0x0d, 0xaf, 0x0d, 0xbf, 0x0d, 0x04, 0x71, 0xb2, 0x1f, // .q@..........q.. + 0x0d, 0x01, 0x5d, 0xb2, 0xdf, 0x0d, 0x01, 0x71, 0xb4, 0x5f, 0x0d, 0x6f, 0x0d, 0x02, 0x71, 0xb2, // ..]....q._.o..q. + 0x8f, 0x0d, 0x01, 0x5d, 0xb2, 0x6f, 0x0d, 0x01, 0x5d, 0xb2, 0x8f, 0x10, 0x01, 0x5d, 0xb4, 0x5f, // ...].o..]....]._ + 0x10, 0x6f, 0x10, 0x02, 0x71, 0xb2, 0xdf, 0x10, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x10, 0x9f, 0x10, // .o..q....q@..... + 0xaf, 0x10, 0xbf, 0x10, 0x04, 0x71, 0xb2, 0x0f, 0x10, 0x01, 0x71, 0xb2, 0x6f, 0x10, 0x01, 0x5d, // .....q....q.o..] + 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, // ....]01....'.... + 0x06, 0x49, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, 0x01, 0x07, 0x01, 0x56, 0x00, 0xff, 0x00, 0x67, // .I.&.......V...g + 0x00, 0x35, 0x00, 0xb2, 0x2f, 0x15, 0x01, 0x71, 0xb2, 0x0f, 0x15, 0x01, 0x5d, 0xb2, 0x4f, 0x15, // .5../..q....].O. + 0x01, 0x71, 0xb2, 0xdf, 0x15, 0x01, 0x5d, 0xb2, 0xbf, 0x15, 0x01, 0x5d, 0xb2, 0xdf, 0x1b, 0x01, // .q....]....].... + 0x5d, 0xb2, 0x4f, 0x1b, 0x01, 0x71, 0xb2, 0x2f, 0x1b, 0x01, 0x71, 0xb2, 0xbf, 0x1b, 0x01, 0x5d, // ].O..q./..q....] + 0xb2, 0x0f, 0x1b, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x27, 0x00, 0x00, 0x04, 0x8a, // ....]01....'.... + 0x06, 0xe2, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, 0x01, 0x07, 0x03, 0xad, 0x01, 0x0e, 0x00, 0x70, // ...&...........p + 0x00, 0x1c, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x04, 0x2f, 0x1b, 0xb1, 0x04, 0x0e, 0x3e, 0x59, // .....EX../....>Y + 0xb0, 0x1a, 0xdc, 0xb0, 0x0f, 0xd0, 0xb0, 0x1a, 0x10, 0xb0, 0x20, 0xd0, 0x30, 0x31, 0x00, 0x00, // .......... .01.. + 0xff, 0xff, 0x00, 0x70, 0xfe, 0x48, 0x04, 0x26, 0x04, 0x9d, 0x02, 0x26, 0x03, 0x8d, 0x00, 0x00, // ...p.H.&...&.... + 0x00, 0x07, 0x00, 0x7a, 0x01, 0x6d, 0xff, 0xfb, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, // ...z.m.......... + 0x05, 0xdf, 0x02, 0x26, 0x03, 0x8b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0x8a, 0x00, 0x1a, // ...&.......C.... + 0x00, 0x2f, 0x00, 0xb6, 0xbf, 0x0c, 0xcf, 0x0c, 0xdf, 0x0c, 0x03, 0x5d, 0xb2, 0x9f, 0x0c, 0x01, // ./.........].... + 0x71, 0xb2, 0xdf, 0x0c, 0x01, 0x71, 0xb2, 0x1f, 0x0c, 0x01, 0x5d, 0xb2, 0xbf, 0x0c, 0x01, 0x71, // q....q....]....q + 0xb2, 0x2f, 0x0c, 0x01, 0x71, 0xb2, 0x8f, 0x0c, 0x01, 0x5d, 0xb2, 0x6f, 0x0c, 0x01, 0x5d, 0x30, // ./..q....].o..]0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, 0x05, 0xdb, 0x02, 0x26, // 1..............& + 0x03, 0x8b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x44, 0x00, 0x16, 0x00, 0x44, 0x00, 0xb4, // .......v.D...D.. + 0xbf, 0x0f, 0xcf, 0x0f, 0x02, 0x5d, 0xb2, 0x9f, 0x0f, 0x01, 0x71, 0xb2, 0x2f, 0x0f, 0x01, 0x71, // .....]....q./..q + 0xb2, 0x8f, 0x0f, 0x01, 0x5d, 0xb2, 0x6f, 0x0f, 0x01, 0x5d, 0xb6, 0xdf, 0x10, 0xef, 0x10, 0xff, // ....].o..]...... + 0x10, 0x03, 0x71, 0x40, 0x0b, 0x0f, 0x10, 0x1f, 0x10, 0x2f, 0x10, 0x3f, 0x10, 0x4f, 0x10, 0x05, // ..q@...../.?.O.. + 0x72, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0xbf, 0x10, 0x01, 0x71, 0xb2, 0xdf, 0x10, 0x01, 0x5d, // r....]....q....] + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, 0x06, 0x05, 0x02, 0x26, // 01.............& + 0x03, 0x8b, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x44, 0x1a, 0x00, 0x1c, 0x00, 0xb2, 0x6f, 0x0d, // .......RD.....o. + 0x01, 0x5d, 0xb2, 0xdf, 0x10, 0x01, 0x71, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0xbf, 0x10, 0x01, // .]....q....].... + 0x5d, 0xb2, 0x8f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, // ]....]01........ + 0x05, 0xca, 0x02, 0x26, 0x03, 0x8b, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x1f, 0x1a, 0x00, 0x5b, // ...&.......j...[ + 0x00, 0xb2, 0x0f, 0x0d, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x0d, 0x9f, 0x0d, 0xaf, 0x0d, 0xbf, 0x0d, // .....q@......... + 0x04, 0x71, 0xb2, 0x1f, 0x0d, 0x01, 0x5d, 0xb2, 0xdf, 0x0d, 0x01, 0x71, 0xb4, 0x5f, 0x0d, 0x6f, // .q....]....q._.o + 0x0d, 0x02, 0x71, 0xb2, 0x8f, 0x0d, 0x01, 0x5d, 0xb2, 0x6f, 0x0d, 0x01, 0x5d, 0xb2, 0x8f, 0x10, // ..q....].o..]... + 0x01, 0x5d, 0xb4, 0x5f, 0x10, 0x6f, 0x10, 0x02, 0x71, 0xb2, 0xdf, 0x10, 0x01, 0x71, 0x40, 0x09, // .]._.o..q....q@. + 0x8f, 0x10, 0x9f, 0x10, 0xaf, 0x10, 0xbf, 0x10, 0x04, 0x71, 0xb2, 0x0f, 0x10, 0x01, 0x71, 0xb2, // .........q....q. + 0x6f, 0x10, 0x01, 0x5d, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0xff, 0xb7, // o..]....]01..... + 0x00, 0x00, 0x01, 0x5d, 0x05, 0xdf, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, // ...]...&.......C + 0xff, 0x65, 0x00, 0x1a, 0x00, 0x2f, 0x00, 0xb6, 0xbf, 0x04, 0xcf, 0x04, 0xdf, 0x04, 0x03, 0x5d, // .e.../.........] + 0xb2, 0x9f, 0x04, 0x01, 0x71, 0xb2, 0xdf, 0x04, 0x01, 0x71, 0xb2, 0x1f, 0x04, 0x01, 0x5d, 0xb2, // ....q....q....]. + 0xbf, 0x04, 0x01, 0x71, 0xb2, 0x2f, 0x04, 0x01, 0x71, 0xb2, 0x8f, 0x04, 0x01, 0x5d, 0xb2, 0x6f, // ...q./..q....].o + 0x04, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x02, 0x41, // ..]01..........A + 0x05, 0xdb, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, 0x01, 0x06, 0x00, 0x76, 0x1d, 0x16, 0x00, 0x44, // ...&.......v...D + 0x00, 0xb4, 0xbf, 0x07, 0xcf, 0x07, 0x02, 0x5d, 0xb2, 0x9f, 0x07, 0x01, 0x71, 0xb2, 0x2f, 0x07, // .......]....q./. + 0x01, 0x71, 0xb2, 0x8f, 0x07, 0x01, 0x5d, 0xb2, 0x6f, 0x07, 0x01, 0x5d, 0xb6, 0xdf, 0x08, 0xef, // .q....].o..].... + 0x08, 0xff, 0x08, 0x03, 0x71, 0x40, 0x0b, 0x0f, 0x08, 0x1f, 0x08, 0x2f, 0x08, 0x3f, 0x08, 0x4f, // ....q@...../.?.O + 0x08, 0x05, 0x72, 0xb2, 0x1f, 0x08, 0x01, 0x5d, 0xb2, 0xbf, 0x08, 0x01, 0x71, 0xb2, 0xdf, 0x08, // ..r....]....q... + 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0xff, 0xca, 0x00, 0x00, 0x02, 0x30, 0x06, 0x05, 0x02, 0x26, // .]01.......0...& + 0x03, 0x87, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0xff, 0x1f, 0x00, 0x1a, 0x00, 0x1c, 0x00, 0xb2, // .......R........ + 0x6f, 0x06, 0x01, 0x5d, 0xb2, 0xdf, 0x08, 0x01, 0x71, 0xb2, 0x1f, 0x08, 0x01, 0x5d, 0xb2, 0xbf, // o..]....q....].. + 0x08, 0x01, 0x5d, 0xb2, 0x8f, 0x08, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0xff, 0xa4, // ..]....]01...... + 0x00, 0x00, 0x02, 0x55, 0x05, 0xca, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6a, // ...U...&.......j + 0xfe, 0xfa, 0x00, 0x1a, 0x00, 0x5b, 0x00, 0xb2, 0x0f, 0x05, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x05, // .....[.....q@... + 0x9f, 0x05, 0xaf, 0x05, 0xbf, 0x05, 0x04, 0x71, 0xb2, 0x1f, 0x05, 0x01, 0x5d, 0xb2, 0xdf, 0x05, // .......q....]... + 0x01, 0x71, 0xb4, 0x5f, 0x05, 0x6f, 0x05, 0x02, 0x71, 0xb2, 0x8f, 0x05, 0x01, 0x5d, 0xb2, 0x6f, // .q._.o..q....].o + 0x05, 0x01, 0x5d, 0xb2, 0x8f, 0x08, 0x01, 0x5d, 0xb4, 0x5f, 0x08, 0x6f, 0x08, 0x02, 0x71, 0xb2, // ..]....]._.o..q. + 0xdf, 0x08, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x08, 0x9f, 0x08, 0xaf, 0x08, 0xbf, 0x08, 0x04, 0x71, // ...q@..........q + 0xb2, 0x0f, 0x08, 0x01, 0x71, 0xb2, 0x6f, 0x08, 0x01, 0x5d, 0xb2, 0x1f, 0x08, 0x01, 0x5d, 0x30, // ....q.o..]....]0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x04, 0x76, 0x06, 0x11, 0x02, 0x26, // 1..........v...& + 0x03, 0x81, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, 0x00, 0x92, 0x00, 0x1e, 0x00, 0x25, 0x00, 0x40, // .......X.....%.@ + 0x0b, 0x0f, 0x0f, 0x1f, 0x0f, 0x2f, 0x0f, 0x3f, 0x0f, 0x4f, 0x0f, 0x05, 0x71, 0xb2, 0x1f, 0x0f, // ...../.?.O..q... + 0x01, 0x5d, 0xb2, 0x8f, 0x0f, 0x01, 0x71, 0xb2, 0x8f, 0x0f, 0x01, 0x5d, 0xb2, 0x6f, 0x0f, 0x01, // .]....q....].o.. + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, 0x05, 0xef, 0x02, 0x26, // ]01....p...[...& + 0x03, 0x80, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0xbe, 0x00, 0x2a, 0x00, 0x41, 0x00, 0xb2, // .......C...*.A.. + 0xc0, 0x1c, 0x01, 0x71, 0xb2, 0x6f, 0x1c, 0x01, 0x5d, 0xb6, 0xbf, 0x1c, 0xcf, 0x1c, 0xdf, 0x1c, // ...q.o..]....... + 0x03, 0x5d, 0xb2, 0x1f, 0x1c, 0x01, 0x5d, 0xb2, 0x8f, 0x1c, 0x01, 0x5d, 0xb2, 0xf0, 0x1c, 0x01, // .]....]....].... + 0x5d, 0xb4, 0x00, 0x1c, 0x10, 0x1c, 0x02, 0x71, 0xb2, 0xa0, 0x1c, 0x01, 0x71, 0x40, 0x0d, 0x30, // ]......q....q@.0 + 0x1c, 0x40, 0x1c, 0x50, 0x1c, 0x60, 0x1c, 0x70, 0x1c, 0x80, 0x1c, 0x06, 0x71, 0x30, 0x31, 0x00, // .@.P.`.p....q01. + 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, 0x05, 0xeb, 0x02, 0x26, 0x03, 0x80, 0x00, 0x00, // ...p...[...&.... + 0x01, 0x07, 0x00, 0x76, 0x01, 0x78, 0x00, 0x26, 0x00, 0x3b, 0x00, 0xb2, 0x8f, 0x1f, 0x01, 0x5d, // ...v.x.&.;.....] + 0xb2, 0xcf, 0x1f, 0x01, 0x5d, 0xb2, 0xc0, 0x20, 0x01, 0x71, 0xb2, 0xbf, 0x20, 0x01, 0x5d, 0xb2, // ....].. .q.. .]. + 0x1f, 0x20, 0x01, 0x5d, 0xb2, 0xdf, 0x20, 0x01, 0x5d, 0xb2, 0x6f, 0x20, 0x01, 0x5d, 0xb2, 0xa0, // . .].. .].o .].. + 0x20, 0x01, 0x71, 0x40, 0x0d, 0x30, 0x20, 0x40, 0x20, 0x50, 0x20, 0x60, 0x20, 0x70, 0x20, 0x80, // .q@.0 @ P ` p . + 0x20, 0x06, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, // .q01......p...[ + 0x06, 0x15, 0x02, 0x26, 0x03, 0x80, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x78, 0x2a, 0x00, 0x3a, // ...&.......Rx*.: + 0x00, 0xb2, 0x8f, 0x20, 0x01, 0x5d, 0xb2, 0x1f, 0x20, 0x01, 0x5d, 0xb2, 0xbf, 0x20, 0x01, 0x5d, // ... .].. .].. .] + 0xb2, 0x6f, 0x20, 0x01, 0x5d, 0xb2, 0xf0, 0x20, 0x01, 0x5d, 0x40, 0x1b, 0x00, 0x20, 0x10, 0x20, // .o .].. .]@.. . + 0x20, 0x20, 0x30, 0x20, 0x40, 0x20, 0x50, 0x20, 0x60, 0x20, 0x70, 0x20, 0x80, 0x20, 0x90, 0x20, // 0 @ P ` p . . + 0xa0, 0x20, 0xb0, 0x20, 0xc0, 0x20, 0x0d, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, // . . . .q01.....p + 0xff, 0xef, 0x04, 0x5b, 0x06, 0x21, 0x02, 0x26, 0x03, 0x80, 0x00, 0x00, 0x01, 0x06, 0x01, 0x58, // ...[.!.&.......X + 0x73, 0x2e, 0x00, 0x24, 0x00, 0xb2, 0x6f, 0x1f, 0x01, 0x5d, 0xb2, 0x1f, 0x1f, 0x01, 0x5d, 0xb2, // s..$..o..]....]. + 0x8f, 0x1f, 0x01, 0x5d, 0xb6, 0xd0, 0x1f, 0xe0, 0x1f, 0xf0, 0x1f, 0x03, 0x5d, 0xb6, 0x50, 0x1f, // ...]........].P. + 0x60, 0x1f, 0x70, 0x1f, 0x03, 0x71, 0x30, 0x31, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, // `.p..q01...p...[ + 0x05, 0xda, 0x02, 0x26, 0x03, 0x80, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x53, 0x2a, 0x00, 0x57, // ...&.......jS*.W + 0x00, 0xb2, 0xc0, 0x1d, 0x01, 0x71, 0xb2, 0x6f, 0x1d, 0x01, 0x5d, 0xb2, 0x1f, 0x1d, 0x01, 0x5d, // .....q.o..]....] + 0xb2, 0x8f, 0x1d, 0x01, 0x5d, 0xb2, 0xf0, 0x1d, 0x01, 0x5d, 0xb2, 0x70, 0x1d, 0x01, 0x71, 0x40, // ....]....].p..q@ + 0x09, 0x10, 0x1d, 0x20, 0x1d, 0x30, 0x1d, 0x40, 0x1d, 0x04, 0x71, 0xb2, 0x70, 0x20, 0x01, 0x71, // ... .0.@..q.p .q + 0xb2, 0x6f, 0x20, 0x01, 0x5d, 0xb2, 0x1f, 0x20, 0x01, 0x5d, 0xb2, 0x8f, 0x20, 0x01, 0x5d, 0xb2, // .o .].. .].. .]. + 0xc0, 0x20, 0x01, 0x71, 0x40, 0x09, 0x10, 0x20, 0x20, 0x20, 0x30, 0x20, 0x40, 0x20, 0x04, 0x71, // . .q@.. 0 @ .q + 0xb2, 0xf0, 0x20, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x89, 0xff, 0xef, 0x04, 0x74, // .. .]01........t + 0x05, 0xe0, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x43, 0x00, 0xdb, 0x00, 0x1b, // ...&.z.....C.... + 0x00, 0x2a, 0x00, 0xb6, 0xbf, 0x12, 0xcf, 0x12, 0xdf, 0x12, 0x03, 0x5d, 0xb2, 0x9f, 0x12, 0x01, // .*.........].... + 0x71, 0xb2, 0x1f, 0x12, 0x01, 0x5d, 0xb2, 0xbf, 0x12, 0x01, 0x71, 0xb2, 0x2f, 0x12, 0x01, 0x71, // q....]....q./..q + 0xb2, 0x8f, 0x12, 0x01, 0x5d, 0xb2, 0x6f, 0x12, 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x89, // ....].o..]01.... + 0xff, 0xef, 0x04, 0x74, 0x05, 0xdc, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // ...t...&.z.....v + 0x01, 0x95, 0x00, 0x17, 0x00, 0x42, 0x00, 0xb2, 0x8f, 0x15, 0x01, 0x5d, 0xb2, 0x9f, 0x15, 0x01, // .....B.....].... + 0x71, 0xb2, 0xcf, 0x15, 0x01, 0x5d, 0xb2, 0xbf, 0x16, 0x01, 0x5d, 0xb2, 0x2f, 0x16, 0x01, 0x71, // q....]....]./..q + 0xb6, 0xdf, 0x16, 0xef, 0x16, 0xff, 0x16, 0x03, 0x71, 0xb6, 0x0f, 0x16, 0x1f, 0x16, 0x2f, 0x16, // ........q...../. + 0x03, 0x72, 0xb2, 0xbf, 0x16, 0x01, 0x71, 0xb2, 0xdf, 0x16, 0x01, 0x5d, 0xb2, 0x6f, 0x16, 0x01, // .r....q....].o.. + 0x5d, 0xb2, 0x1f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x89, 0xff, 0xef, 0x04, 0x74, // ]....]01.......t + 0x06, 0x06, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x00, 0x95, 0x00, 0x1b, // ...&.z.....R.... + 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x16, 0x01, 0x5d, 0xb2, 0x1f, 0x16, 0x01, 0x5d, 0xb2, 0x8f, 0x16, // .......]....]... + 0x01, 0x5d, 0xb2, 0x6f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x89, // .].o..]01....... + 0xff, 0xef, 0x04, 0x74, 0x05, 0xcb, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, // ...t...&.z.....j + 0x70, 0x1b, 0x00, 0x51, 0x00, 0xb2, 0x0f, 0x13, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x13, 0x9f, 0x13, // p..Q.....q@..... + 0xaf, 0x13, 0xbf, 0x13, 0x04, 0x71, 0xb2, 0x1f, 0x13, 0x01, 0x5d, 0xb4, 0x5f, 0x13, 0x6f, 0x13, // .....q....]._.o. + 0x02, 0x71, 0xb2, 0x8f, 0x13, 0x01, 0x5d, 0xb2, 0x6f, 0x13, 0x01, 0x5d, 0xb2, 0x8f, 0x16, 0x01, // .q....].o..].... + 0x5d, 0xb4, 0x5f, 0x16, 0x6f, 0x16, 0x02, 0x71, 0x40, 0x09, 0x8f, 0x16, 0x9f, 0x16, 0xaf, 0x16, // ]._.o..q@....... + 0xbf, 0x16, 0x04, 0x71, 0xb2, 0x0f, 0x16, 0x01, 0x71, 0xb2, 0x6f, 0x16, 0x01, 0x5d, 0xb2, 0x1f, // ...q....q.o..].. + 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x35, // ..]01..........5 + 0x05, 0xda, 0x02, 0x26, 0x03, 0x76, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x46, 0x00, 0x15, // ...&.v.....v.F.. + 0x00, 0x47, 0x00, 0xb2, 0x8f, 0x0c, 0x01, 0x5d, 0xb2, 0x9f, 0x0c, 0x01, 0x71, 0xb2, 0xcf, 0x0c, // .G.....]....q... + 0x01, 0x5d, 0xb2, 0xbf, 0x0d, 0x01, 0x5d, 0xb2, 0x2f, 0x0d, 0x01, 0x71, 0xb6, 0xdf, 0x0d, 0xef, // .]....]./..q.... + 0x0d, 0xff, 0x0d, 0x03, 0x71, 0x40, 0x0b, 0x0f, 0x0d, 0x1f, 0x0d, 0x2f, 0x0d, 0x3f, 0x0d, 0x4f, // ....q@...../.?.O + 0x0d, 0x05, 0x72, 0xb2, 0xbf, 0x0d, 0x01, 0x71, 0xb2, 0xdf, 0x0d, 0x01, 0x5d, 0xb2, 0x6f, 0x0d, // ..r....q....].o. + 0x01, 0x5d, 0xb2, 0x1f, 0x0d, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x27, // .]....]01......' + 0x00, 0x00, 0x04, 0x8a, 0x05, 0xb7, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, 0x01, 0x06, 0x00, 0x71, // .......&.......q + 0x77, 0x07, 0x00, 0x08, 0x00, 0xb2, 0x1f, 0x0c, 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x27, // w........]01...' + 0x00, 0x00, 0x04, 0x8a, 0x06, 0x0b, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, // .......&.......T + 0x00, 0xa9, 0x00, 0x5b, 0x00, 0x14, 0x00, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0x8f, 0x10, 0x01, // ...[.......].... + 0x71, 0xb4, 0x5f, 0x10, 0x6f, 0x10, 0x02, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x27, // q._.o..q01.....' + 0xfe, 0x50, 0x04, 0xbd, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x91, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, // .P.....&.......W + 0x02, 0xea, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x26, 0x05, 0xeb, 0x02, 0x26, // .......p...&...& + 0x03, 0x8d, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x68, 0x00, 0x26, 0x00, 0x3b, 0x00, 0xb2, // .......v.h.&.;.. + 0x1f, 0x21, 0x01, 0x5d, 0xb2, 0xcf, 0x21, 0x01, 0x5d, 0xb2, 0x8f, 0x21, 0x01, 0x5d, 0xb2, 0xc0, // .!.]..!.]..!.].. + 0x22, 0x01, 0x71, 0xb2, 0xdf, 0x22, 0x01, 0x5d, 0xb2, 0x6f, 0x22, 0x01, 0x5d, 0xb2, 0xbf, 0x22, // ".q..".].o".].." + 0x01, 0x5d, 0xb2, 0xa0, 0x22, 0x01, 0x71, 0x40, 0x0d, 0x30, 0x22, 0x40, 0x22, 0x50, 0x22, 0x60, // .]..".q@.0"@"P"` + 0x22, 0x70, 0x22, 0x80, 0x22, 0x06, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, // "p".".q01......p + 0xff, 0xef, 0x04, 0x26, 0x06, 0x15, 0x02, 0x26, 0x03, 0x8d, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, // ...&...&.......R + 0x68, 0x2a, 0x00, 0x3a, 0x00, 0xb2, 0x8f, 0x22, 0x01, 0x5d, 0xb2, 0x1f, 0x22, 0x01, 0x5d, 0xb2, // h*.:...".]..".]. + 0xbf, 0x22, 0x01, 0x5d, 0xb2, 0x6f, 0x22, 0x01, 0x5d, 0xb2, 0xf0, 0x22, 0x01, 0x5d, 0x40, 0x1b, // .".].o".]..".]@. + 0x00, 0x22, 0x10, 0x22, 0x20, 0x22, 0x30, 0x22, 0x40, 0x22, 0x50, 0x22, 0x60, 0x22, 0x70, 0x22, // ."." "0"@"P"`"p" + 0x80, 0x22, 0x90, 0x22, 0xa0, 0x22, 0xb0, 0x22, 0xc0, 0x22, 0x0d, 0x71, 0x30, 0x31, 0x00, 0x00, // .".".".".".q01.. + 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x26, 0x05, 0xda, 0x02, 0x26, 0x03, 0x8d, 0x00, 0x00, // ...p...&...&.... + 0x01, 0x07, 0x01, 0x55, 0x01, 0x38, 0x00, 0x2a, 0x00, 0x4c, 0x00, 0xb2, 0xf0, 0x1e, 0x01, 0x5d, // ...U.8.*.L.....] + 0xb2, 0x10, 0x1e, 0x01, 0x71, 0xb2, 0xc0, 0x1f, 0x01, 0x71, 0xb2, 0x10, 0x1f, 0x01, 0x72, 0xb2, // ....q....q....r. + 0x8f, 0x1f, 0x01, 0x5d, 0xb2, 0xdf, 0x1f, 0x01, 0x5d, 0xb2, 0x1f, 0x1f, 0x01, 0x5d, 0xb2, 0xbf, // ...]....]....].. + 0x1f, 0x01, 0x5d, 0xb2, 0x6f, 0x1f, 0x01, 0x5d, 0xb4, 0xe0, 0x1f, 0xf0, 0x1f, 0x02, 0x71, 0x40, // ..].o..]......q@ + 0x0d, 0x20, 0x1f, 0x30, 0x1f, 0x40, 0x1f, 0x50, 0x1f, 0x60, 0x1f, 0x70, 0x1f, 0x06, 0x71, 0xb2, // . .0.@.P.`.p..q. + 0x00, 0x1f, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x26, // ...q01.....p...& + 0x06, 0x16, 0x02, 0x26, 0x03, 0x8d, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, 0x7f, 0x2b, 0x00, 0x3a, // ...&.......S.+.: + 0x00, 0xb2, 0x8f, 0x22, 0x01, 0x5d, 0xb2, 0x1f, 0x22, 0x01, 0x5d, 0xb2, 0xbf, 0x22, 0x01, 0x5d, // ...".]..".]..".] + 0xb2, 0x6f, 0x22, 0x01, 0x5d, 0xb2, 0xf0, 0x22, 0x01, 0x5d, 0x40, 0x1b, 0x00, 0x22, 0x10, 0x22, // .o".]..".]@.."." + 0x20, 0x22, 0x30, 0x22, 0x40, 0x22, 0x50, 0x22, 0x60, 0x22, 0x70, 0x22, 0x80, 0x22, 0x90, 0x22, // "0"@"P"`"p"."." + 0xa0, 0x22, 0xb0, 0x22, 0xc0, 0x22, 0x0d, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, // .".".".q01...... + 0x00, 0x00, 0x04, 0x31, 0x06, 0x06, 0x02, 0x26, 0x03, 0x8c, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, // ...1...&.......S + 0x2c, 0x1b, 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x18, 0x01, 0x5d, 0xb2, 0x1f, 0x18, 0x01, 0x5d, 0xb2, // ,........]....]. + 0x8f, 0x18, 0x01, 0x5d, 0xb2, 0x6f, 0x18, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x99, // ...].o..]01..... + 0x00, 0x00, 0x03, 0xc8, 0x05, 0xb7, 0x02, 0x26, 0x03, 0x8b, 0x00, 0x00, 0x01, 0x06, 0x00, 0x71, // .......&.......q + 0x43, 0x07, 0x00, 0x08, 0x00, 0xb2, 0x1f, 0x0c, 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x99, // C........]01.... + 0x00, 0x00, 0x03, 0xc8, 0x06, 0x0b, 0x02, 0x26, 0x03, 0x8b, 0x00, 0x00, 0x01, 0x06, 0x01, 0x54, // .......&.......T + 0x75, 0x5b, 0x00, 0x14, 0x00, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0x8f, 0x10, 0x01, 0x71, 0xb4, // u[.......]....q. + 0x5f, 0x10, 0x6f, 0x10, 0x02, 0x71, 0x30, 0x31, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, // _.o..q01........ + 0x05, 0xca, 0x02, 0x26, 0x03, 0x8b, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x01, 0x14, 0x00, 0x1a, // ...&.......U.... + 0x00, 0x37, 0x00, 0xb2, 0x1f, 0x0d, 0x01, 0x5d, 0xb2, 0x8f, 0x0d, 0x01, 0x5d, 0xb2, 0xdf, 0x0d, // .7.....]....]... + 0x01, 0x5d, 0xb2, 0xdf, 0x0d, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x0d, 0x9f, 0x0d, 0xaf, 0x0d, 0xbf, // .]....q@........ + 0x0d, 0x04, 0x71, 0xb2, 0xbf, 0x0d, 0x01, 0x5d, 0xb2, 0x6f, 0x0d, 0x01, 0x5d, 0xb2, 0xf0, 0x0d, // ..q....].o..]... + 0x01, 0x71, 0xb2, 0x10, 0x0d, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, // .q....r01....... + 0xfe, 0x50, 0x03, 0xc8, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x8b, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, // .P.....&.......W + 0x01, 0x18, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0xc8, 0x06, 0x06, 0x02, 0x26, // ...............& + 0x03, 0x8b, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, 0x5b, 0x1b, 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x10, // .......S[....... + 0x01, 0x5d, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0x8f, 0x10, 0x01, 0x5d, 0xb2, 0x6f, 0x10, 0x01, // .]....]....].o.. + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x4b, 0x06, 0x15, 0x02, 0x26, // ]01....p...K...& + 0x03, 0x89, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x74, 0x2a, 0x00, 0x3a, 0x00, 0xb2, 0x8f, 0x25, // .......Rt*.:...% + 0x01, 0x5d, 0xb2, 0x1f, 0x25, 0x01, 0x5d, 0xb2, 0xbf, 0x25, 0x01, 0x5d, 0xb2, 0x6f, 0x25, 0x01, // .]..%.]..%.].o%. + 0x5d, 0xb2, 0xf0, 0x25, 0x01, 0x5d, 0x40, 0x1b, 0x00, 0x25, 0x10, 0x25, 0x20, 0x25, 0x30, 0x25, // ]..%.]@..%.% %0% + 0x40, 0x25, 0x50, 0x25, 0x60, 0x25, 0x70, 0x25, 0x80, 0x25, 0x90, 0x25, 0xa0, 0x25, 0xb0, 0x25, // @%P%`%p%.%.%.%.% + 0xc0, 0x25, 0x0d, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x4b, // .%.q01.....p...K + 0x06, 0x1b, 0x02, 0x26, 0x03, 0x89, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0x00, 0xa5, 0x00, 0x6b, // ...&.......T...k + 0x00, 0x17, 0x00, 0xb2, 0x70, 0x25, 0x01, 0x72, 0xb2, 0x20, 0x25, 0x01, 0x5d, 0xb2, 0x70, 0x25, // ....p%.r. %.].p% + 0x01, 0x71, 0xb2, 0x40, 0x25, 0x01, 0x71, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, // .q.@%.q01......p + 0xff, 0xef, 0x04, 0x4b, 0x05, 0xda, 0x02, 0x26, 0x03, 0x89, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, // ...K...&.......U + 0x01, 0x44, 0x00, 0x2a, 0x00, 0x4c, 0x00, 0xb2, 0xf0, 0x21, 0x01, 0x5d, 0xb2, 0x10, 0x21, 0x01, // .D.*.L...!.]..!. + 0x71, 0xb2, 0xc0, 0x22, 0x01, 0x71, 0xb2, 0x10, 0x22, 0x01, 0x72, 0xb2, 0x8f, 0x22, 0x01, 0x5d, // q..".q..".r..".] + 0xb2, 0xdf, 0x22, 0x01, 0x5d, 0xb2, 0x1f, 0x22, 0x01, 0x5d, 0xb2, 0xbf, 0x22, 0x01, 0x5d, 0xb2, // ..".]..".]..".]. + 0x6f, 0x22, 0x01, 0x5d, 0xb4, 0xe0, 0x22, 0xf0, 0x22, 0x02, 0x71, 0x40, 0x0d, 0x20, 0x22, 0x30, // o".]..".".q@. "0 + 0x22, 0x40, 0x22, 0x50, 0x22, 0x60, 0x22, 0x70, 0x22, 0x06, 0x71, 0xb2, 0x00, 0x22, 0x01, 0x71, // "@"P"`"p".q..".q + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xfe, 0x15, 0x04, 0x4b, 0x04, 0x9d, 0x02, 0x26, // 01.....p...K...& + 0x03, 0x89, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x59, 0xfe, 0x9b, 0xff, 0xff, 0x00, 0x99, // .......c.Y...... + 0x00, 0x00, 0x04, 0x5a, 0x06, 0x05, 0x02, 0x26, 0x03, 0x88, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, // ...Z...&.......R + 0x7f, 0x1a, 0x00, 0x1c, 0x00, 0xb2, 0xbf, 0x10, 0x01, 0x5d, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, // .........]....]. + 0xdf, 0x10, 0x01, 0x71, 0xb2, 0x8f, 0x10, 0x01, 0x5d, 0xb2, 0x6f, 0x10, 0x01, 0x5d, 0x30, 0x31, // ...q....].o..]01 + 0xff, 0xff, 0xff, 0xa1, 0x00, 0x00, 0x02, 0x57, 0x06, 0x11, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, // .......W...&.... + 0x01, 0x07, 0x01, 0x58, 0xff, 0x1a, 0x00, 0x1e, 0x00, 0x25, 0x00, 0x40, 0x0b, 0x0f, 0x07, 0x1f, // ...X.....%.@.... + 0x07, 0x2f, 0x07, 0x3f, 0x07, 0x4f, 0x07, 0x05, 0x71, 0xb2, 0x1f, 0x07, 0x01, 0x5d, 0xb2, 0x8f, // ./.?.O..q....].. + 0x07, 0x01, 0x71, 0xb2, 0x8f, 0x07, 0x01, 0x5d, 0xb2, 0x6f, 0x07, 0x01, 0x5d, 0x30, 0x31, 0x00, // ..q....].o..]01. + 0xff, 0xff, 0x00, 0x89, 0xff, 0xef, 0x04, 0x74, 0x06, 0x09, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, // .......t...&.z.. + 0x01, 0x07, 0x01, 0x59, 0x01, 0x22, 0x00, 0x1b, 0x00, 0x3d, 0x00, 0xb4, 0x5f, 0x15, 0x6f, 0x15, // ...Y."...=.._.o. + 0x02, 0x71, 0x40, 0x09, 0x8f, 0x15, 0x9f, 0x15, 0xaf, 0x15, 0xbf, 0x15, 0x04, 0x71, 0xb2, 0xdf, // .q@..........q.. + 0x16, 0x01, 0x5d, 0xb2, 0xbf, 0x17, 0x01, 0x5d, 0x40, 0x09, 0x8f, 0x1b, 0x9f, 0x1b, 0xaf, 0x1b, // ..]....]@....... + 0xbf, 0x1b, 0x04, 0x71, 0xb2, 0xbf, 0x1b, 0x01, 0x5d, 0xb4, 0x5f, 0x1b, 0x6f, 0x1b, 0x02, 0x71, // ...q....]._.o..q + 0xb2, 0xdf, 0x1b, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0xff, 0xd1, 0x00, 0x00, 0x02, 0x28, // ....]01........( + 0x06, 0x0b, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, 0xff, 0x50, 0x00, 0x5b, // ...&.......T.P.[ + 0x00, 0x14, 0x00, 0xb2, 0x1f, 0x08, 0x01, 0x5d, 0xb2, 0x8f, 0x08, 0x01, 0x71, 0xb4, 0x5f, 0x08, // .......]....q._. + 0x6f, 0x08, 0x02, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3c, 0xfe, 0x50, 0x01, 0xcb, // o..q01.....<.P.. + 0x04, 0x8d, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, 0x00, 0x06, 0x01, 0x57, 0xf8, 0x00, 0x00, 0x00, // ...&.......W.... + 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x01, 0x69, 0x05, 0xca, 0x02, 0x26, 0x03, 0x87, 0x00, 0x00, // .......i...&.... + 0x01, 0x06, 0x01, 0x55, 0xef, 0x1a, 0x00, 0x37, 0x00, 0xb2, 0x1f, 0x05, 0x01, 0x5d, 0xb2, 0x8f, // ...U...7.....].. + 0x05, 0x01, 0x5d, 0xb2, 0xdf, 0x05, 0x01, 0x5d, 0xb2, 0xdf, 0x05, 0x01, 0x71, 0x40, 0x09, 0x8f, // ..]....]....q@.. + 0x05, 0x9f, 0x05, 0xaf, 0x05, 0xbf, 0x05, 0x04, 0x71, 0xb2, 0xbf, 0x05, 0x01, 0x5d, 0xb2, 0x6f, // ........q....].o + 0x05, 0x01, 0x5d, 0xb2, 0xf0, 0x05, 0x01, 0x71, 0xb2, 0x10, 0x05, 0x01, 0x72, 0x30, 0x31, 0x00, // ..]....q....r01. + 0xff, 0xff, 0x00, 0x40, 0xff, 0xef, 0x04, 0x42, 0x05, 0xfc, 0x02, 0x26, 0x03, 0x86, 0x00, 0x00, // ...@...B...&.... + 0x01, 0x07, 0x01, 0x52, 0x01, 0x31, 0x00, 0x11, 0x00, 0x3a, 0x00, 0xb2, 0xef, 0x13, 0x01, 0x71, // ...R.1...:.....q + 0xb2, 0xbf, 0x15, 0x01, 0x5d, 0xb2, 0xff, 0x15, 0x01, 0x71, 0x40, 0x11, 0x0f, 0x15, 0x1f, 0x15, // ....]....q@..... + 0x2f, 0x15, 0x3f, 0x15, 0x4f, 0x15, 0x5f, 0x15, 0x6f, 0x15, 0x7f, 0x15, 0x08, 0x72, 0xb2, 0x1f, // /.?.O._.o....r.. + 0x15, 0x01, 0x5d, 0xb2, 0xdf, 0x15, 0x01, 0x71, 0xb2, 0x8f, 0x15, 0x01, 0x5d, 0xb2, 0x6f, 0x15, // ..]....q....].o. + 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x99, 0xfe, 0x21, 0x04, 0x41, 0x04, 0x8d, 0x02, 0x26, // .]01.....!.A...& + 0x03, 0x85, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x06, 0xfe, 0xa7, 0xff, 0xff, 0x00, 0x6b, // .......c.......k + 0x00, 0x00, 0x03, 0x6b, 0x05, 0xab, 0x02, 0x26, 0x03, 0x84, 0x00, 0x00, 0x01, 0x06, 0x00, 0x76, // ...k...&.......v + 0xe8, 0xe6, 0x00, 0x60, 0x00, 0xb2, 0x9f, 0x09, 0x01, 0x71, 0xb2, 0x1f, 0x09, 0x01, 0x5d, 0xb2, // ...`.....q....]. + 0xcf, 0x09, 0x01, 0x5d, 0xb2, 0x8f, 0x09, 0x01, 0x5d, 0xb2, 0xdf, 0x0a, 0x01, 0x5d, 0xb2, 0xbf, // ...]....]....].. + 0x0a, 0x01, 0x71, 0x40, 0x09, 0xaf, 0x0a, 0xbf, 0x0a, 0xcf, 0x0a, 0xdf, 0x0a, 0x04, 0x72, 0xb2, // ..q@..........r. + 0xff, 0x0a, 0x01, 0x72, 0xb6, 0xdf, 0x0a, 0xef, 0x0a, 0xff, 0x0a, 0x03, 0x71, 0x40, 0x13, 0x0f, // ...r........q@.. + 0x0a, 0x1f, 0x0a, 0x2f, 0x0a, 0x3f, 0x0a, 0x4f, 0x0a, 0x5f, 0x0a, 0x6f, 0x0a, 0x7f, 0x0a, 0x8f, // .../.?.O._.o.... + 0x0a, 0x09, 0x72, 0xb2, 0x2f, 0x0a, 0x01, 0x71, 0xb2, 0xbf, 0x0a, 0x01, 0x5d, 0xb2, 0x6f, 0x0a, // ..r./..q....].o. + 0x01, 0x5d, 0x30, 0x31, 0xff, 0xff, 0x00, 0x99, 0xfe, 0x23, 0x03, 0x6b, 0x04, 0x8d, 0x02, 0x26, // .]01.....#.k...& + 0x03, 0x84, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x00, 0xe3, 0xfe, 0xa9, 0xff, 0xff, 0x00, 0x99, // .......c........ + 0x00, 0x00, 0x03, 0x6b, 0x04, 0x8e, 0x02, 0x26, 0x03, 0x84, 0x00, 0x00, 0x01, 0x07, 0x03, 0x63, // ...k...&.......c + 0x01, 0x4b, 0x03, 0x9b, 0x00, 0x10, 0x00, 0xb0, 0x00, 0x45, 0x58, 0xb0, 0x0a, 0x2f, 0x1b, 0xb1, // .K.......EX../.. + 0x0a, 0x0e, 0x3e, 0x59, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x03, 0x6b, // ..>Y01.........k + 0x04, 0x8d, 0x02, 0x26, 0x03, 0x84, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x01, 0x31, 0xfd, 0x2a, // ...&.......U.1.* + 0x00, 0x0b, 0x00, 0xb0, 0x08, 0x2f, 0xb2, 0x1f, 0x08, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, // ...../....]01... + 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x04, 0x76, 0x05, 0xdb, 0x02, 0x26, 0x03, 0x81, 0x00, 0x00, // .......v...&.... + 0x01, 0x07, 0x00, 0x76, 0x01, 0x97, 0x00, 0x16, 0x00, 0x3f, 0x00, 0xb2, 0x9f, 0x0f, 0x01, 0x71, // ...v.....?.....q + 0xb2, 0x8f, 0x10, 0x01, 0x5d, 0xb2, 0x2f, 0x10, 0x01, 0x71, 0xb6, 0xdf, 0x10, 0xef, 0x10, 0xff, // ....]./..q...... + 0x10, 0x03, 0x71, 0x40, 0x09, 0x1f, 0x10, 0x2f, 0x10, 0x3f, 0x10, 0x4f, 0x10, 0x04, 0x72, 0xb2, // ..q@.../.?.O..r. + 0xbf, 0x10, 0x01, 0x71, 0xb6, 0xbf, 0x10, 0xcf, 0x10, 0xdf, 0x10, 0x03, 0x5d, 0xb2, 0x6f, 0x10, // ...q........].o. + 0x01, 0x5d, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x99, // .]....]01....... + 0xfe, 0x23, 0x04, 0x76, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x81, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, // .#.v...&.......c + 0x01, 0x7b, 0xfe, 0xa9, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x04, 0x76, 0x06, 0x06, 0x02, 0x26, // .{.........v...& + 0x03, 0x81, 0x00, 0x00, 0x01, 0x07, 0x01, 0x53, 0x00, 0xae, 0x00, 0x1b, 0x00, 0x17, 0x00, 0xb2, // .......S........ + 0xbf, 0x10, 0x01, 0x5d, 0xb2, 0x1f, 0x10, 0x01, 0x5d, 0xb2, 0x8f, 0x10, 0x01, 0x5d, 0xb2, 0x6f, // ...]....]....].o + 0x10, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, // ..]01......p...[ + 0x05, 0xc7, 0x02, 0x26, 0x03, 0x80, 0x00, 0x00, 0x01, 0x06, 0x00, 0x71, 0x77, 0x17, 0x00, 0x1f, // ...&.......qw... + 0x00, 0xb2, 0x1f, 0x1c, 0x01, 0x5d, 0x40, 0x0b, 0x30, 0x1c, 0x40, 0x1c, 0x50, 0x1c, 0x60, 0x1c, // .....]@.0.@.P.`. + 0x70, 0x1c, 0x05, 0x72, 0xb6, 0x90, 0x1c, 0xa0, 0x1c, 0xb0, 0x1c, 0x03, 0x72, 0x30, 0x31, 0x00, // p..r........r01. + 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, 0x06, 0x1b, 0x02, 0x26, 0x03, 0x80, 0x00, 0x00, // ...p...[...&.... + 0x01, 0x07, 0x01, 0x54, 0x00, 0xa9, 0x00, 0x6b, 0x00, 0x17, 0x00, 0xb2, 0x70, 0x20, 0x01, 0x72, // ...T...k....p .r + 0xb2, 0x20, 0x20, 0x01, 0x5d, 0xb2, 0x70, 0x20, 0x01, 0x71, 0xb2, 0x40, 0x20, 0x01, 0x71, 0x30, // . .].p .q.@ .q0 + 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x70, 0xff, 0xef, 0x04, 0x5b, 0x06, 0x18, 0x02, 0x26, // 1......p...[...& + 0x03, 0x80, 0x00, 0x00, 0x01, 0x07, 0x01, 0x59, 0x01, 0x05, 0x00, 0x2a, 0x00, 0x51, 0x00, 0xb2, // .......Y...*.Q.. + 0xf0, 0x1f, 0x01, 0x5d, 0x40, 0x0b, 0x00, 0x1f, 0x10, 0x1f, 0x20, 0x1f, 0x30, 0x1f, 0x40, 0x1f, // ...]@..... .0.@. + 0x05, 0x71, 0xb2, 0xc0, 0x1f, 0x01, 0x71, 0xb2, 0x70, 0x1f, 0x01, 0x71, 0xb2, 0xbf, 0x20, 0x01, // .q....q.p..q.. . + 0x5d, 0xb2, 0xdf, 0x20, 0x01, 0x5d, 0xb2, 0xc0, 0x25, 0x01, 0x71, 0xb2, 0xbf, 0x25, 0x01, 0x5d, // ].. .]..%.q..%.] + 0xb2, 0xdf, 0x25, 0x01, 0x5d, 0xb2, 0x70, 0x25, 0x01, 0x71, 0xb2, 0xf0, 0x25, 0x01, 0x5d, 0x40, // ..%.].p%.q..%.]@ + 0x0b, 0x00, 0x25, 0x10, 0x25, 0x20, 0x25, 0x30, 0x25, 0x40, 0x25, 0x05, 0x71, 0x30, 0x31, 0x00, // ..%.% %0%@%.q01. + 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x04, 0x2c, 0x05, 0xdb, 0x02, 0x26, 0x03, 0x7d, 0x00, 0x00, // .......,...&.}.. + 0x01, 0x07, 0x00, 0x76, 0x01, 0x25, 0x00, 0x16, 0x00, 0x41, 0x00, 0xb2, 0x9f, 0x27, 0x01, 0x71, // ...v.%...A...'.q + 0xb6, 0xbf, 0x28, 0xcf, 0x28, 0xdf, 0x28, 0x03, 0x5d, 0xb2, 0xbf, 0x28, 0x01, 0x71, 0xb2, 0x1f, // ..(.(.(.]..(.q.. + 0x28, 0x01, 0x5d, 0xb6, 0xdf, 0x28, 0xef, 0x28, 0xff, 0x28, 0x03, 0x71, 0x40, 0x0b, 0x0f, 0x28, // (.]..(.(.(.q@..( + 0x1f, 0x28, 0x2f, 0x28, 0x3f, 0x28, 0x4f, 0x28, 0x05, 0x72, 0xb2, 0x2f, 0x28, 0x01, 0x71, 0xb2, // .(/(?(O(.r./(.q. + 0x8f, 0x28, 0x01, 0x5d, 0xb2, 0x6f, 0x28, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x99, // .(.].o(.]01..... + 0xfe, 0x23, 0x04, 0x2c, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x7d, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, // .#.,...&.}.....c + 0x01, 0x09, 0xfe, 0xa9, 0xff, 0xff, 0x00, 0x99, 0x00, 0x00, 0x04, 0x2c, 0x06, 0x06, 0x02, 0x26, // ...........,...& + 0x03, 0x7d, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, 0x3c, 0x1b, 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x28, // .}.....S<......( + 0x01, 0x5d, 0xb2, 0x1f, 0x28, 0x01, 0x5d, 0xb2, 0x8f, 0x28, 0x01, 0x5d, 0xb2, 0x6f, 0x28, 0x01, // .]..(.]..(.].o(. + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x5d, 0xff, 0xef, 0x04, 0x11, 0x05, 0xeb, 0x02, 0x26, // ]01....].......& + 0x03, 0x7c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, 0x01, 0x50, 0x00, 0x26, 0x00, 0x35, 0x00, 0x40, // .|.....v.P.&.5.@ + 0x0d, 0x30, 0x2c, 0x40, 0x2c, 0x50, 0x2c, 0x60, 0x2c, 0x70, 0x2c, 0x80, 0x2c, 0x06, 0x71, 0xb2, // .0,@,P,`,p,.,.q. + 0x8f, 0x2c, 0x01, 0x5d, 0xb2, 0x1f, 0x2c, 0x01, 0x5d, 0xb6, 0xbf, 0x2c, 0xcf, 0x2c, 0xdf, 0x2c, // .,.]..,.]..,.,., + 0x03, 0x5d, 0xb2, 0x6f, 0x2c, 0x01, 0x5d, 0xb2, 0xc0, 0x2c, 0x01, 0x71, 0xb2, 0xa0, 0x2c, 0x01, // .].o,.]..,.q..,. + 0x71, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x5d, 0xff, 0xef, 0x04, 0x11, 0x06, 0x15, 0x02, 0x26, // q01....].......& + 0x03, 0x7c, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x50, 0x2a, 0x00, 0x3a, 0x00, 0xb2, 0x8f, 0x2c, // .|.....RP*.:..., + 0x01, 0x5d, 0xb2, 0x1f, 0x2c, 0x01, 0x5d, 0xb2, 0xbf, 0x2c, 0x01, 0x5d, 0xb2, 0x6f, 0x2c, 0x01, // .]..,.]..,.].o,. + 0x5d, 0xb2, 0xf0, 0x2c, 0x01, 0x5d, 0x40, 0x1b, 0x00, 0x2c, 0x10, 0x2c, 0x20, 0x2c, 0x30, 0x2c, // ]..,.]@..,., ,0, + 0x40, 0x2c, 0x50, 0x2c, 0x60, 0x2c, 0x70, 0x2c, 0x80, 0x2c, 0x90, 0x2c, 0xa0, 0x2c, 0xb0, 0x2c, // @,P,`,p,.,.,.,., + 0xc0, 0x2c, 0x0d, 0x71, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5d, 0xfe, 0x48, 0x04, 0x11, // .,.q01.....].H.. + 0x04, 0x9d, 0x02, 0x26, 0x03, 0x7c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x7a, 0x01, 0x55, 0xff, 0xfb, // ...&.|.....z.U.. + 0xff, 0xff, 0x00, 0x5d, 0xff, 0xef, 0x04, 0x11, 0x06, 0x16, 0x02, 0x26, 0x03, 0x7c, 0x00, 0x00, // ...].......&.|.. + 0x01, 0x06, 0x01, 0x53, 0x67, 0x2b, 0x00, 0x3a, 0x00, 0xb2, 0x8f, 0x2c, 0x01, 0x5d, 0xb2, 0x1f, // ...Sg+.:...,.].. + 0x2c, 0x01, 0x5d, 0xb2, 0xbf, 0x2c, 0x01, 0x5d, 0xb2, 0x6f, 0x2c, 0x01, 0x5d, 0xb2, 0xf0, 0x2c, // ,.]..,.].o,.].., + 0x01, 0x5d, 0x40, 0x1b, 0x00, 0x2c, 0x10, 0x2c, 0x20, 0x2c, 0x30, 0x2c, 0x40, 0x2c, 0x50, 0x2c, // .]@..,., ,0,@,P, + 0x60, 0x2c, 0x70, 0x2c, 0x80, 0x2c, 0x90, 0x2c, 0xa0, 0x2c, 0xb0, 0x2c, 0xc0, 0x2c, 0x0d, 0x71, // `,p,.,.,.,.,.,.q + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x47, 0xfe, 0x23, 0x03, 0xd1, 0x04, 0x8d, 0x02, 0x26, // 01.....G.#.....& + 0x03, 0x7b, 0x00, 0x00, 0x00, 0x07, 0x03, 0x63, 0x01, 0x0a, 0xfe, 0xa9, 0xff, 0xff, 0x00, 0x47, // .{.....c.......G + 0x00, 0x00, 0x03, 0xd1, 0x06, 0x05, 0x02, 0x26, 0x03, 0x7b, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, // .......&.{.....S + 0x3d, 0x1a, 0x00, 0x17, 0x00, 0xb2, 0xbf, 0x0c, 0x01, 0x5d, 0xb2, 0x1f, 0x0c, 0x01, 0x5d, 0xb2, // =........]....]. + 0x8f, 0x0c, 0x01, 0x5d, 0xb2, 0x6f, 0x0c, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x89, // ...].o..]01..... + 0xff, 0xef, 0x04, 0x74, 0x06, 0x12, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x58, // ...t...&.z.....X + 0x00, 0x90, 0x00, 0x1f, 0x00, 0x20, 0x00, 0x40, 0x0b, 0x0f, 0x15, 0x1f, 0x15, 0x2f, 0x15, 0x3f, // ..... .@...../.? + 0x15, 0x4f, 0x15, 0x05, 0x71, 0xb2, 0x1f, 0x15, 0x01, 0x5d, 0xb2, 0x8f, 0x15, 0x01, 0x5d, 0xb2, // .O..q....]....]. + 0x6f, 0x15, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x89, 0xff, 0xef, 0x04, 0x74, // o..]01.........t + 0x05, 0xb8, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x71, 0x00, 0x94, 0x00, 0x08, // ...&.z.....q.... + 0x00, 0x08, 0x00, 0xb2, 0x1f, 0x12, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x89, // .......]01...... + 0xff, 0xef, 0x04, 0x74, 0x06, 0x0c, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x01, 0x07, 0x01, 0x54, // ...t...&.z.....T + 0x00, 0xc6, 0x00, 0x5c, 0x00, 0x19, 0x00, 0xb2, 0x8f, 0x16, 0x01, 0x71, 0xb2, 0x1f, 0x16, 0x01, // ...........q.... + 0x5d, 0xb4, 0x5f, 0x16, 0x6f, 0x16, 0x02, 0x71, 0xb2, 0x20, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, // ]._.o..q. ..]01. + 0xff, 0xff, 0x00, 0x89, 0xff, 0xef, 0x04, 0x74, 0x06, 0x4a, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, // .......t.J.&.z.. + 0x01, 0x07, 0x01, 0x56, 0x01, 0x1c, 0x00, 0x68, 0x00, 0x35, 0x00, 0xb2, 0x2f, 0x1b, 0x01, 0x71, // ...V...h.5../..q + 0xb2, 0x0f, 0x1b, 0x01, 0x5d, 0xb2, 0x4f, 0x1b, 0x01, 0x71, 0xb2, 0xdf, 0x1b, 0x01, 0x5d, 0xb2, // ....].O..q....]. + 0xbf, 0x1b, 0x01, 0x5d, 0xb2, 0xdf, 0x21, 0x01, 0x5d, 0xb2, 0x4f, 0x21, 0x01, 0x71, 0xb2, 0x2f, // ...]..!.].O!.q./ + 0x21, 0x01, 0x71, 0xb2, 0xbf, 0x21, 0x01, 0x5d, 0xb2, 0x0f, 0x21, 0x01, 0x5d, 0x30, 0x31, 0x00, // !.q..!.]..!.]01. + 0xff, 0xff, 0x00, 0x5d, 0xff, 0xef, 0x08, 0x82, 0x04, 0x9d, 0x00, 0x26, 0x03, 0x7c, 0x00, 0x00, // ...].......&.|.. + 0x00, 0x07, 0x03, 0x7c, 0x04, 0x71, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4e, 0x00, 0x00, 0x03, 0xd8, // ...|.q.....N.... + 0x06, 0x06, 0x02, 0x26, 0x03, 0x75, 0x00, 0x00, 0x01, 0x06, 0x01, 0x53, 0x3a, 0x1b, 0x00, 0x17, // ...&.u.....S:... + 0x00, 0xb2, 0xbf, 0x0e, 0x01, 0x5d, 0xb2, 0x1f, 0x0e, 0x01, 0x5d, 0xb2, 0x8f, 0x0e, 0x01, 0x5d, // .....]....]....] + 0xb2, 0x6f, 0x0e, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x4e, 0x00, 0x00, 0x03, 0xd8, // .o..]01....N.... + 0x05, 0xca, 0x02, 0x26, 0x03, 0x75, 0x00, 0x00, 0x01, 0x07, 0x01, 0x55, 0x00, 0xf3, 0x00, 0x1a, // ...&.u.....U.... + 0x00, 0x37, 0x00, 0xb2, 0x1f, 0x0b, 0x01, 0x5d, 0xb2, 0x8f, 0x0b, 0x01, 0x5d, 0xb2, 0xdf, 0x0b, // .7.....]....]... + 0x01, 0x5d, 0xb2, 0xdf, 0x0b, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x0b, 0x9f, 0x0b, 0xaf, 0x0b, 0xbf, // .]....q@........ + 0x0b, 0x04, 0x71, 0xb2, 0xbf, 0x0b, 0x01, 0x5d, 0xb2, 0x6f, 0x0b, 0x01, 0x5d, 0xb2, 0xf0, 0x0b, // ..q....].o..]... + 0x01, 0x71, 0xb2, 0x10, 0x0b, 0x01, 0x72, 0x30, 0x31, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4e, // .q....r01......N + 0x00, 0x00, 0x03, 0xd8, 0x05, 0xdb, 0x02, 0x26, 0x03, 0x75, 0x00, 0x00, 0x01, 0x07, 0x00, 0x76, // .......&.u.....v + 0x01, 0x23, 0x00, 0x16, 0x00, 0x41, 0x00, 0xb2, 0x9f, 0x0d, 0x01, 0x71, 0xb6, 0xbf, 0x0e, 0xcf, // .#...A.....q.... + 0x0e, 0xdf, 0x0e, 0x03, 0x5d, 0xb2, 0xbf, 0x0e, 0x01, 0x71, 0xb2, 0x1f, 0x0e, 0x01, 0x5d, 0xb6, // ....]....q....]. + 0xdf, 0x0e, 0xef, 0x0e, 0xff, 0x0e, 0x03, 0x71, 0x40, 0x0b, 0x0f, 0x0e, 0x1f, 0x0e, 0x2f, 0x0e, // .......q@...../. + 0x3f, 0x0e, 0x4f, 0x0e, 0x05, 0x72, 0xb2, 0x2f, 0x0e, 0x01, 0x71, 0xb2, 0x8f, 0x0e, 0x01, 0x5d, // ?.O..r./..q....] + 0xb2, 0x6f, 0x0e, 0x01, 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x35, // .o..]01........5 + 0x05, 0xc9, 0x02, 0x26, 0x03, 0x76, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6a, 0x21, 0x19, 0x00, 0x63, // ...&.v.....j!..c + 0x00, 0xb2, 0x0f, 0x0a, 0x01, 0x71, 0x40, 0x09, 0x8f, 0x0a, 0x9f, 0x0a, 0xaf, 0x0a, 0xbf, 0x0a, // .....q@......... + 0x04, 0x71, 0xb2, 0x1f, 0x0a, 0x01, 0x5d, 0xb6, 0xdf, 0x0a, 0xef, 0x0a, 0xff, 0x0a, 0x03, 0x71, // .q....]........q + 0xb4, 0x5f, 0x0a, 0x6f, 0x0a, 0x02, 0x71, 0xb2, 0x8f, 0x0a, 0x01, 0x5d, 0xb2, 0x6f, 0x0a, 0x01, // ._.o..q....].o.. + 0x5d, 0xb2, 0x8f, 0x0d, 0x01, 0x5d, 0xb4, 0x5f, 0x0d, 0x6f, 0x0d, 0x02, 0x71, 0xb6, 0xdf, 0x0d, // ]....]._.o..q... + 0xef, 0x0d, 0xff, 0x0d, 0x03, 0x71, 0x40, 0x09, 0x8f, 0x0d, 0x9f, 0x0d, 0xaf, 0x0d, 0xbf, 0x0d, // .....q@......... + 0x04, 0x71, 0xb2, 0x0f, 0x0d, 0x01, 0x71, 0xb2, 0x6f, 0x0d, 0x01, 0x5d, 0xb2, 0x1f, 0x0d, 0x01, // .q....q.o..].... + 0x5d, 0x30, 0x31, 0x00, 0xff, 0xff, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x35, 0x06, 0x04, 0x02, 0x26, // ]01........5...& + 0x03, 0x76, 0x00, 0x00, 0x01, 0x06, 0x01, 0x52, 0x46, 0x19, 0x00, 0x26, 0x00, 0xb2, 0xef, 0x0b, // .v.....RF..&.... + 0x01, 0x71, 0xb2, 0xbf, 0x0d, 0x01, 0x5d, 0xb2, 0xff, 0x0d, 0x01, 0x71, 0xb2, 0x1f, 0x0d, 0x01, // .q....]....q.... + 0x5d, 0xb2, 0xdf, 0x0d, 0x01, 0x71, 0xb2, 0x8f, 0x0d, 0x01, 0x5d, 0xb2, 0x6f, 0x0d, 0x01, 0x5d, // ]....q....].o..] + 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3f, 0x00, 0x00, 0x05, 0xc0, 0x06, 0x05, 0x02, 0x26, // 01.....?.......& + 0x03, 0x78, 0x00, 0x00, 0x01, 0x07, 0x01, 0x52, 0x01, 0x1b, 0x00, 0x1a, 0x00, 0x1c, 0x00, 0xb2, // .x.....R........ + 0xbf, 0x16, 0x01, 0x5d, 0xb2, 0x1f, 0x16, 0x01, 0x5d, 0xb2, 0xdf, 0x16, 0x01, 0x71, 0xb2, 0x8f, // ...]....]....q.. + 0x16, 0x01, 0x5d, 0xb2, 0x6f, 0x16, 0x01, 0x5d, 0x30, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0x89, // ..].o..]01...... + 0xfe, 0x50, 0x04, 0x74, 0x04, 0x8d, 0x02, 0x26, 0x03, 0x7a, 0x00, 0x00, 0x00, 0x07, 0x01, 0x57, // .P.t...&.z.....W + 0x01, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x01, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .v.......J...... + 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, // ................ + 0x00, 0x1f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x25, 0x00, 0x01, // .............%.. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x1a, 0x00, 0x2c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // .........,...... + 0x00, 0x04, 0x00, 0x0e, 0x00, 0x46, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x16, // .....F.......... + 0x00, 0x54, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x6a, 0x00, 0x01, // .T...........j.. + 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x20, 0x00, 0x78, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ....... .x...... + 0x00, 0x09, 0x00, 0x06, 0x00, 0x98, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0a, // ................ + 0x00, 0x9e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x13, 0x00, 0xa8, 0x00, 0x01, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x2e, 0x00, 0xbb, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x0e, 0x00, 0x2a, 0x00, 0xe9, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x0e, // ...*............ + 0x00, 0x46, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x3e, 0x01, 0x13, 0x00, 0x03, // .F.........>.... + 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x0c, 0x01, 0x51, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .........Q...... + 0x00, 0x02, 0x00, 0x0e, 0x01, 0x5d, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x34, // .....].........4 + 0x01, 0x6b, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x1c, 0x01, 0x9f, 0x00, 0x03, // .k.............. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x2c, 0x01, 0xbb, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .......,........ + 0x00, 0x06, 0x00, 0x1c, 0x01, 0xe7, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x07, 0x00, 0x40, // ...............@ + 0x02, 0x03, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x09, 0x00, 0x0c, 0x02, 0x43, 0x00, 0x03, // .............C.. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x0b, 0x00, 0x14, 0x02, 0x4f, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .........O...... + 0x00, 0x0c, 0x00, 0x26, 0x02, 0x63, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x00, 0x5c, // ...&.c.......... + 0x02, 0x89, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0e, 0x00, 0x54, 0x02, 0xe5, 0x46, 0x6f, // ...........T..Fo + 0x6e, 0x74, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x63, 0x6f, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, // nt data copyrigh + 0x74, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x20, 0x32, 0x30, 0x31, 0x32, 0x52, 0x6f, 0x62, // t Google 2012Rob + 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, // otoRegularGoogle + 0x3a, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x6f, 0x20, 0x52, 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x3a, // :Roboto Regular: + 0x32, 0x30, 0x31, 0x33, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x6f, 0x20, 0x52, 0x65, 0x67, 0x75, 0x6c, // 2013Roboto Regul + 0x61, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x31, 0x2e, 0x31, 0x30, 0x30, 0x31, // arVersion 1.1001 + 0x34, 0x31, 0x3b, 0x20, 0x32, 0x30, 0x31, 0x33, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x6f, 0x2d, 0x52, // 41; 2013Roboto-R + 0x65, 0x67, 0x75, 0x6c, 0x61, 0x72, 0x52, 0x6f, 0x62, 0x6f, 0x74, 0x6f, 0x20, 0x69, 0x73, 0x20, // egularRoboto is + 0x61, 0x20, 0x74, 0x72, 0x61, 0x64, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x47, // a trademark of G + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x47, 0x6f, 0x6f, 0x67, // oogle.GoogleGoog + 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x69, 0x61, 0x6e, 0x20, // le.comChristian + 0x52, 0x6f, 0x62, 0x65, 0x72, 0x74, 0x73, 0x6f, 0x6e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, // RobertsonLicense + 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x70, 0x61, 0x63, // d under the Apac + 0x68, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x2c, 0x20, 0x56, 0x65, 0x72, 0x73, // he License, Vers + 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e, 0x30, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, // ion 2.0http://ww + 0x77, 0x2e, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0x69, 0x63, // w.apache.org/lic + 0x65, 0x6e, 0x73, 0x65, 0x73, 0x2f, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x2d, 0x32, 0x2e, // enses/LICENSE-2. + 0x30, 0x00, 0x46, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, 0x00, // 0.F.o.n.t. .d.a. + 0x74, 0x00, 0x61, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, // t.a. .c.o.p.y.r. + 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, // i.g.h.t. .G.o.o. + 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, // g.l.e. .2.0.1.2. + 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x52, 0x00, 0x65, 0x00, // R.o.b.o.t.o.R.e. + 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, // g.u.l.a.r.G.o.o. + 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x3a, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, // g.l.e.:.R.o.b.o. + 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, // t.o. .R.e.g.u.l. + 0x61, 0x00, 0x72, 0x00, 0x3a, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x33, 0x00, 0x52, 0x00, // a.r.:.2.0.1.3.R. + 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x52, 0x00, 0x65, 0x00, // o.b.o.t.o. .R.e. + 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, // g.u.l.a.r.V.e.r. + 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x31, 0x00, // s.i.o.n. .1...1. + 0x30, 0x00, 0x30, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x3b, 0x00, 0x20, 0x00, 0x32, 0x00, // 0.0.1.4.1.;. .2. + 0x30, 0x00, 0x31, 0x00, 0x33, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, // 0.1.3.R.o.b.o.t. + 0x6f, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, // o.-.R.e.g.u.l.a. + 0x72, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, // r.R.o.b.o.t.o. . + 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, // i.s. .a. .t.r.a. + 0x64, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x6f, 0x00, // d.e.m.a.r.k. .o. + 0x66, 0x00, 0x20, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, // f. .G.o.o.g.l.e. + 0x2e, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x47, 0x00, // ..G.o.o.g.l.e.G. + 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, // o.o.g.l.e...c.o. + 0x6d, 0x00, 0x43, 0x00, 0x68, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x69, 0x00, // m.C.h.r.i.s.t.i. + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, // a.n. .R.o.b.e.r. + 0x74, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, // t.s.o.n.L.i.c.e. + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, // n.s.e.d. .u.n.d. + 0x65, 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x41, 0x00, // e.r. .t.h.e. .A. + 0x70, 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, // p.a.c.h.e. .L.i. + 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x56, 0x00, // c.e.n.s.e.,. .V. + 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x32, 0x00, // e.r.s.i.o.n. .2. + 0x2e, 0x00, 0x30, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, // ..0.h.t.t.p.:./. + 0x2f, 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, // /.w.w.w...a.p.a. + 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, // c.h.e...o.r.g./. + 0x6c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x73, 0x00, // l.i.c.e.n.s.e.s. + 0x2f, 0x00, 0x4c, 0x00, 0x49, 0x00, 0x43, 0x00, 0x45, 0x00, 0x4e, 0x00, 0x53, 0x00, 0x45, 0x00, // /.L.I.C.E.N.S.E. + 0x2d, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // -.2...0......... + 0xff, 0x6a, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .j.d............ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x01, 0x02, 0x00, 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, // .+.,.-.../.0.1.2 + 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, // .3.4.5.6.7.8.9.: + 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, // .;.<.=.>.?.@.A.B + 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, // .C.D.E.F.G.H.I.J + 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, // .K.L.M.N.O.P.Q.R + 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, // .S.T.U.V.W.X.Y.Z + 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xac, // .[...].^._.`.a.. + 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, 0x03, 0x00, 0x8a, 0x01, 0x04, 0x00, 0x83, // ................ + 0x00, 0x93, 0x00, 0xf2, 0x00, 0xf3, 0x00, 0x8d, 0x00, 0x97, 0x00, 0x88, 0x01, 0x05, 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, // .......b.c...d.. + 0x00, 0x65, 0x00, 0xc8, 0x00, 0xca, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0xe9, // .e.............. + 0x00, 0x66, 0x00, 0xd3, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xaf, 0x00, 0x67, 0x00, 0xf0, 0x00, 0x91, // .f.........g.... + 0x00, 0xd6, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0x68, 0x00, 0xeb, 0x00, 0xed, 0x00, 0x89, 0x00, 0x6a, // .......h.......j + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x6e, 0x00, 0xa0, 0x00, 0x6f, 0x00, 0x71, // .i.k.m.l.n...o.q + 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x74, 0x00, 0x76, 0x00, 0x77, 0x00, 0xea, // .p.r.s.u.t.v.w.. + 0x00, 0x78, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x7b, 0x00, 0x7d, 0x00, 0x7c, 0x00, 0xb8, 0x00, 0xa1, // .x.z.y.{.}.|.... + 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x80, 0x00, 0x81, 0x00, 0xec, 0x00, 0xee, 0x00, 0xba, 0x01, 0x06, // ...~............ + 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0a, 0x01, 0x0b, 0x00, 0xfd, 0x00, 0xfe, 0x01, 0x0c, // ................ + 0x01, 0x0d, 0x01, 0x0e, 0x01, 0x0f, 0x00, 0xff, 0x01, 0x00, 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, 0x00, 0xf8, 0x00, 0xf9, 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, // .).*.+.,.-.../.0 + 0x00, 0xd7, 0x01, 0x31, 0x01, 0x32, 0x01, 0x33, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, // ...1.2.3.4.5.6.7 + 0x01, 0x38, 0x01, 0x39, 0x01, 0x3a, 0x01, 0x3b, 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, 0x01, 0x3f, // .8.9.:.;.<.=.>.? + 0x00, 0xe2, 0x00, 0xe3, 0x01, 0x40, 0x01, 0x41, 0x01, 0x42, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, // .....@.A.B.C.D.E + 0x01, 0x46, 0x01, 0x47, 0x01, 0x48, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4b, 0x01, 0x4c, 0x01, 0x4d, // .F.G.H.I.J.K.L.M + 0x01, 0x4e, 0x00, 0xb0, 0x00, 0xb1, 0x01, 0x4f, 0x01, 0x50, 0x01, 0x51, 0x01, 0x52, 0x01, 0x53, // .N.....O.P.Q.R.S + 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x00, 0xfb, 0x00, 0xfc, 0x00, 0xe4, // .T.U.V.W.X...... + 0x00, 0xe5, 0x01, 0x59, 0x01, 0x5a, 0x01, 0x5b, 0x01, 0x5c, 0x01, 0x5d, 0x01, 0x5e, 0x01, 0x5f, // ...Y.Z.[...].^._ + 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64, 0x01, 0x65, 0x01, 0x66, 0x01, 0x67, // .`.a.b.c.d.e.f.g + 0x01, 0x68, 0x01, 0x69, 0x01, 0x6a, 0x01, 0x6b, 0x01, 0x6c, 0x01, 0x6d, 0x01, 0x6e, 0x00, 0xbb, // .h.i.j.k.l.m.n.. + 0x01, 0x6f, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x00, 0xe6, 0x00, 0xe7, 0x01, 0x73, 0x00, 0xa6, // .o.p.q.r.....s.. + 0x01, 0x74, 0x01, 0x75, 0x01, 0x76, 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7b, // .t.u.v.w.x.y.z.{ + 0x01, 0x7c, 0x01, 0x7d, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x81, 0x01, 0x82, 0x00, 0xd8, // .|.}.~.......... + 0x00, 0xe1, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd, 0x00, 0xe0, 0x00, 0xd9, 0x00, 0xdf, 0x01, 0x83, // ................ + 0x01, 0x84, 0x01, 0x85, 0x01, 0x86, 0x01, 0x87, 0x01, 0x88, 0x01, 0x89, 0x01, 0x8a, 0x01, 0x8b, // ................ + 0x01, 0x8c, 0x01, 0x8d, 0x01, 0x8e, 0x01, 0x8f, 0x01, 0x90, 0x01, 0x91, 0x01, 0x92, 0x01, 0x93, // ................ + 0x01, 0x94, 0x01, 0x95, 0x01, 0x96, 0x01, 0x97, 0x01, 0x98, 0x01, 0x99, 0x01, 0x9a, 0x01, 0x9b, // ................ + 0x01, 0x9c, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0x9f, 0x01, 0xa0, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, // ................ + 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, 0x01, 0xa7, 0x01, 0xa8, 0x01, 0xa9, 0x01, 0xaa, 0x01, 0xab, // ................ + 0x00, 0x9f, 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb0, 0x01, 0xb1, 0x01, 0xb2, // ................ + 0x01, 0xb3, 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xb6, 0x01, 0xb7, 0x01, 0xb8, 0x01, 0xb9, 0x01, 0xba, // ................ + 0x01, 0xbb, 0x01, 0xbc, 0x01, 0xbd, 0x01, 0xbe, 0x01, 0xbf, 0x01, 0xc0, 0x01, 0xc1, 0x00, 0x9b, // ................ + 0x01, 0xc2, 0x01, 0xc3, 0x01, 0xc4, 0x01, 0xc5, 0x01, 0xc6, 0x01, 0xc7, 0x01, 0xc8, 0x01, 0xc9, // ................ + 0x01, 0xca, 0x01, 0xcb, 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, 0x01, 0xcf, 0x01, 0xd0, 0x01, 0xd1, // ................ + 0x01, 0xd2, 0x01, 0xd3, 0x01, 0xd4, 0x01, 0xd5, 0x01, 0xd6, 0x01, 0xd7, 0x01, 0xd8, 0x01, 0xd9, // ................ + 0x01, 0xda, 0x01, 0xdb, 0x01, 0xdc, 0x01, 0xdd, 0x01, 0xde, 0x01, 0xdf, 0x01, 0xe0, 0x01, 0xe1, // ................ + 0x01, 0xe2, 0x01, 0xe3, 0x01, 0xe4, 0x01, 0xe5, 0x01, 0xe6, 0x01, 0xe7, 0x01, 0xe8, 0x01, 0xe9, // ................ + 0x01, 0xea, 0x01, 0xeb, 0x01, 0xec, 0x01, 0xed, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf0, 0x01, 0xf1, // ................ + 0x01, 0xf2, 0x01, 0xf3, 0x01, 0xf4, 0x01, 0xf5, 0x01, 0xf6, 0x01, 0xf7, 0x01, 0xf8, 0x01, 0xf9, // ................ + 0x01, 0xfa, 0x01, 0xfb, 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x02, 0x00, 0x02, 0x01, // ................ + 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, 0x02, 0x09, // ................ + 0x02, 0x0a, 0x02, 0x0b, 0x02, 0x0c, 0x02, 0x0d, 0x02, 0x0e, 0x02, 0x0f, 0x02, 0x10, 0x02, 0x11, // ................ + 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x02, 0x18, 0x02, 0x19, // ................ + 0x02, 0x1a, 0x02, 0x1b, 0x02, 0x1c, 0x02, 0x1d, 0x02, 0x1e, 0x02, 0x1f, 0x02, 0x20, 0x02, 0x21, // ............. .! + 0x02, 0x22, 0x02, 0x23, 0x02, 0x24, 0x02, 0x25, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28, 0x02, 0x29, // .".#.$.%.&.'.(.) + 0x02, 0x2a, 0x02, 0x2b, 0x02, 0x2c, 0x02, 0x2d, 0x02, 0x2e, 0x02, 0x2f, 0x02, 0x30, 0x02, 0x31, // .*.+.,.-.../.0.1 + 0x02, 0x32, 0x02, 0x33, 0x02, 0x34, 0x02, 0x35, 0x02, 0x36, 0x02, 0x37, 0x02, 0x38, 0x02, 0x39, // .2.3.4.5.6.7.8.9 + 0x02, 0x3a, 0x02, 0x3b, 0x02, 0x3c, 0x02, 0x3d, 0x02, 0x3e, 0x02, 0x3f, 0x02, 0x40, 0x02, 0x41, // .:.;.<.=.>.?.@.A + 0x02, 0x42, 0x02, 0x43, 0x02, 0x44, 0x02, 0x45, 0x02, 0x46, 0x02, 0x47, 0x02, 0x48, 0x02, 0x49, // .B.C.D.E.F.G.H.I + 0x02, 0x4a, 0x02, 0x4b, 0x02, 0x4c, 0x02, 0x4d, 0x02, 0x4e, 0x02, 0x4f, 0x02, 0x50, 0x02, 0x51, // .J.K.L.M.N.O.P.Q + 0x02, 0x52, 0x02, 0x53, 0x02, 0x54, 0x02, 0x55, 0x02, 0x56, 0x02, 0x57, 0x02, 0x58, 0x02, 0x59, // .R.S.T.U.V.W.X.Y + 0x02, 0x5a, 0x02, 0x5b, 0x02, 0x5c, 0x02, 0x5d, 0x02, 0x5e, 0x02, 0x5f, 0x02, 0x60, 0x02, 0x61, // .Z.[...].^._.`.a + 0x02, 0x62, 0x02, 0x63, 0x02, 0x64, 0x02, 0x65, 0x02, 0x66, 0x02, 0x67, 0x02, 0x68, 0x02, 0x69, // .b.c.d.e.f.g.h.i + 0x02, 0x6a, 0x02, 0x6b, 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x6e, 0x02, 0x6f, 0x02, 0x70, 0x02, 0x71, // .j.k.l.m.n.o.p.q + 0x02, 0x72, 0x02, 0x73, 0x02, 0x74, 0x02, 0x75, 0x02, 0x76, 0x02, 0x77, 0x02, 0x78, 0x02, 0x79, // .r.s.t.u.v.w.x.y + 0x02, 0x7a, 0x02, 0x7b, 0x02, 0x7c, 0x02, 0x7d, 0x02, 0x7e, 0x02, 0x7f, 0x02, 0x80, 0x02, 0x81, // .z.{.|.}.~...... + 0x02, 0x82, 0x02, 0x83, 0x02, 0x84, 0x02, 0x85, 0x02, 0x86, 0x02, 0x87, 0x02, 0x88, 0x02, 0x89, // ................ + 0x02, 0x8a, 0x02, 0x8b, 0x02, 0x8c, 0x02, 0x8d, 0x02, 0x8e, 0x02, 0x8f, 0x02, 0x90, 0x02, 0x91, // ................ + 0x02, 0x92, 0x02, 0x93, 0x02, 0x94, 0x02, 0x95, 0x02, 0x96, 0x02, 0x97, 0x02, 0x98, 0x02, 0x99, // ................ + 0x02, 0x9a, 0x02, 0x9b, 0x02, 0x9c, 0x02, 0x9d, 0x02, 0x9e, 0x02, 0x9f, 0x02, 0xa0, 0x02, 0xa1, // ................ + 0x02, 0xa2, 0x02, 0xa3, 0x02, 0xa4, 0x02, 0xa5, 0x02, 0xa6, 0x02, 0xa7, 0x02, 0xa8, 0x02, 0xa9, // ................ + 0x02, 0xaa, 0x02, 0xab, 0x02, 0xac, 0x02, 0xad, 0x02, 0xae, 0x02, 0xaf, 0x02, 0xb0, 0x02, 0xb1, // ................ + 0x02, 0xb2, 0x02, 0xb3, 0x02, 0xb4, 0x02, 0xb5, 0x02, 0xb6, 0x02, 0xb7, 0x02, 0xb8, 0x02, 0xb9, // ................ + 0x02, 0xba, 0x02, 0xbb, 0x02, 0xbc, 0x02, 0xbd, 0x02, 0xbe, 0x02, 0xbf, 0x02, 0xc0, 0x02, 0xc1, // ................ + 0x02, 0xc2, 0x02, 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02, 0xc7, 0x02, 0xc8, 0x02, 0xc9, // ................ + 0x02, 0xca, 0x02, 0xcb, 0x02, 0xcc, 0x02, 0xcd, 0x02, 0xce, 0x02, 0xcf, 0x02, 0xd0, 0x02, 0xd1, // ................ + 0x02, 0xd2, 0x02, 0xd3, 0x02, 0xd4, 0x02, 0xd5, 0x02, 0xd6, 0x02, 0xd7, 0x02, 0xd8, 0x02, 0xd9, // ................ + 0x02, 0xda, 0x02, 0xdb, 0x02, 0xdc, 0x02, 0xdd, 0x02, 0xde, 0x02, 0xdf, 0x02, 0xe0, 0x02, 0xe1, // ................ + 0x02, 0xe2, 0x02, 0xe3, 0x02, 0xe4, 0x02, 0xe5, 0x02, 0xe6, 0x02, 0xe7, 0x02, 0xe8, 0x02, 0xe9, // ................ + 0x02, 0xea, 0x02, 0xeb, 0x02, 0xec, 0x02, 0xed, 0x02, 0xee, 0x02, 0xef, 0x02, 0xf0, 0x02, 0xf1, // ................ + 0x02, 0xf2, 0x02, 0xf3, 0x02, 0xf4, 0x02, 0xf5, 0x02, 0xf6, 0x02, 0xf7, 0x02, 0xf8, 0x02, 0xf9, // ................ + 0x02, 0xfa, 0x02, 0xfb, 0x02, 0xfc, 0x02, 0xfd, 0x02, 0xfe, 0x02, 0xff, 0x03, 0x00, 0x03, 0x01, // ................ + 0x03, 0x02, 0x03, 0x03, 0x03, 0x04, 0x03, 0x05, 0x03, 0x06, 0x03, 0x07, 0x03, 0x08, 0x03, 0x09, // ................ + 0x03, 0x0a, 0x03, 0x0b, 0x03, 0x0c, 0x03, 0x0d, 0x03, 0x0e, 0x03, 0x0f, 0x03, 0x10, 0x03, 0x11, // ................ + 0x03, 0x12, 0x03, 0x13, 0x03, 0x14, 0x03, 0x15, 0x03, 0x16, 0x03, 0x17, 0x03, 0x18, 0x03, 0x19, // ................ + 0x03, 0x1a, 0x03, 0x1b, 0x03, 0x1c, 0x03, 0x1d, 0x03, 0x1e, 0x03, 0x1f, 0x03, 0x20, 0x03, 0x21, // ............. .! + 0x03, 0x22, 0x03, 0x23, 0x03, 0x24, 0x03, 0x25, 0x03, 0x26, 0x03, 0x27, 0x03, 0x28, 0x03, 0x29, // .".#.$.%.&.'.(.) + 0x03, 0x2a, 0x03, 0x2b, 0x03, 0x2c, 0x03, 0x2d, 0x03, 0x2e, 0x03, 0x2f, 0x03, 0x30, 0x03, 0x31, // .*.+.,.-.../.0.1 + 0x03, 0x32, 0x03, 0x33, 0x03, 0x34, 0x03, 0x35, 0x03, 0x36, 0x03, 0x37, 0x03, 0x38, 0x03, 0x39, // .2.3.4.5.6.7.8.9 + 0x03, 0x3a, 0x03, 0x3b, 0x03, 0x3c, 0x03, 0x3d, 0x03, 0x3e, 0x03, 0x3f, 0x03, 0x40, 0x03, 0x41, // .:.;.<.=.>.?.@.A + 0x03, 0x42, 0x03, 0x43, 0x03, 0x44, 0x03, 0x45, 0x03, 0x46, 0x03, 0x47, 0x03, 0x48, 0x03, 0x49, // .B.C.D.E.F.G.H.I + 0x03, 0x4a, 0x03, 0x4b, 0x03, 0x4c, 0x03, 0x4d, 0x03, 0x4e, 0x03, 0x4f, 0x03, 0x50, 0x03, 0x51, // .J.K.L.M.N.O.P.Q + 0x03, 0x52, 0x03, 0x53, 0x03, 0x54, 0x03, 0x55, 0x03, 0x56, 0x00, 0xb2, 0x00, 0xb3, 0x03, 0x57, // .R.S.T.U.V.....W + 0x03, 0x58, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xc4, 0x03, 0x59, 0x00, 0xb4, 0x00, 0xb5, 0x00, 0xc5, // .X.......Y...... + 0x00, 0x82, 0x00, 0xc2, 0x00, 0x87, 0x03, 0x5a, 0x00, 0xab, 0x00, 0xc6, 0x03, 0x5b, 0x03, 0x5c, // .......Z.....[.. + 0x00, 0xbe, 0x00, 0xbf, 0x03, 0x5d, 0x00, 0xbc, 0x03, 0x5e, 0x03, 0x5f, 0x00, 0xf7, 0x03, 0x60, // .....]...^._...` + 0x03, 0x61, 0x03, 0x62, 0x03, 0x63, 0x03, 0x64, 0x03, 0x65, 0x03, 0x66, 0x00, 0x8c, 0x03, 0x67, // .a.b.c.d.e.f...g + 0x03, 0x68, 0x03, 0x69, 0x03, 0x6a, 0x03, 0x6b, 0x00, 0x98, 0x00, 0x9a, 0x00, 0x99, 0x00, 0xef, // .h.i.j.k........ + 0x00, 0xa5, 0x00, 0x92, 0x00, 0x9c, 0x00, 0xa7, 0x00, 0x8f, 0x00, 0x94, 0x00, 0x95, 0x00, 0xb9, // ................ + 0x03, 0x6c, 0x00, 0xc0, 0x03, 0x6d, 0x03, 0x6e, 0x03, 0x6f, 0x03, 0x70, 0x03, 0x71, 0x03, 0x72, // .l...m.n.o.p.q.r + 0x03, 0x73, 0x03, 0x74, 0x03, 0x75, 0x03, 0x76, 0x03, 0x77, 0x03, 0x78, 0x03, 0x79, 0x03, 0x7a, // .s.t.u.v.w.x.y.z + 0x03, 0x7b, 0x03, 0x7c, 0x03, 0x7d, 0x03, 0x7e, 0x03, 0x7f, 0x03, 0x80, 0x03, 0x81, 0x03, 0x82, // .{.|.}.~........ + 0x03, 0x83, 0x03, 0x84, 0x03, 0x85, 0x03, 0x86, 0x03, 0x87, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8a, // ................ + 0x03, 0x8b, 0x03, 0x8c, 0x03, 0x8d, 0x03, 0x8e, 0x03, 0x8f, 0x03, 0x90, 0x03, 0x91, 0x03, 0x92, // ................ + 0x03, 0x93, 0x03, 0x94, 0x03, 0x95, 0x03, 0x96, 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, // ................ + 0x03, 0x9b, 0x03, 0x9c, 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, 0x03, 0xa2, // ................ + 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x03, 0xa6, 0x03, 0xa7, 0x03, 0xa8, 0x03, 0xa9, 0x03, 0xaa, // ................ + 0x03, 0xab, 0x03, 0xac, 0x03, 0xad, 0x03, 0xae, 0x03, 0xaf, 0x03, 0xb0, 0x03, 0xb1, 0x03, 0xb2, // ................ + 0x03, 0xb3, 0x03, 0xb4, 0x03, 0xb5, 0x03, 0xb6, 0x03, 0xb7, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, // ................ + 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbe, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, // ................ + 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, // ................ + 0x03, 0xcb, 0x03, 0xcc, 0x03, 0xcd, 0x03, 0xce, 0x03, 0xcf, 0x03, 0xd0, 0x03, 0xd1, 0x03, 0xd2, // ................ + 0x03, 0xd3, 0x03, 0xd4, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xd7, 0x03, 0xd8, 0x03, 0xd9, 0x03, 0xda, // ................ + 0x03, 0xdb, 0x03, 0xdc, 0x03, 0xdd, 0x03, 0xde, 0x03, 0xdf, 0x03, 0xe0, 0x03, 0xe1, 0x03, 0xe2, // ................ + 0x03, 0xe3, 0x03, 0xe4, 0x03, 0xe5, 0x03, 0xe6, 0x03, 0xe7, 0x03, 0xe8, 0x03, 0xe9, 0x03, 0xea, // ................ + 0x03, 0xeb, 0x03, 0xec, 0x03, 0xed, 0x03, 0xee, 0x03, 0xef, 0x03, 0xf0, 0x03, 0xf1, 0x03, 0xf2, // ................ + 0x03, 0xf3, 0x03, 0xf4, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0xf7, 0x03, 0xf8, 0x03, 0xf9, 0x03, 0xfa, // ................ + 0x03, 0xfb, 0x03, 0xfc, 0x03, 0xfd, 0x03, 0xfe, 0x03, 0xff, 0x04, 0x00, 0x04, 0x01, 0x04, 0x02, // ................ + 0x04, 0x03, 0x04, 0x04, 0x04, 0x05, 0x04, 0x06, 0x04, 0x07, 0x04, 0x08, 0x04, 0x09, 0x04, 0x0a, // ................ + 0x04, 0x0b, 0x04, 0x0c, 0x04, 0x0d, 0x04, 0x0e, 0x04, 0x0f, 0x04, 0x10, 0x04, 0x11, 0x04, 0x12, // ................ + 0x04, 0x4e, 0x55, 0x4c, 0x4c, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, 0x41, 0x44, 0x06, 0x6d, 0x61, // .NULL.uni00AD.ma + 0x63, 0x72, 0x6f, 0x6e, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x63, 0x65, 0x6e, 0x74, 0x65, // cron.periodcente + 0x72, 0x65, 0x64, 0x07, 0x41, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x61, 0x6d, 0x61, 0x63, // red.Amacron.amac + 0x72, 0x6f, 0x6e, 0x06, 0x41, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x61, 0x62, 0x72, 0x65, 0x76, // ron.Abreve.abrev + 0x65, 0x07, 0x41, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x07, 0x61, 0x6f, 0x67, 0x6f, 0x6e, 0x65, // e.Aogonek.aogone + 0x6b, 0x0b, 0x43, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x63, 0x63, // k.Ccircumflex.cc + 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x30, // ircumflex.uni010 + 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x30, 0x42, 0x06, 0x44, 0x63, 0x61, 0x72, 0x6f, 0x6e, // A.uni010B.Dcaron + 0x06, 0x64, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x44, 0x63, 0x72, 0x6f, 0x61, 0x74, 0x06, 0x64, // .dcaron.Dcroat.d + 0x63, 0x72, 0x6f, 0x61, 0x74, 0x07, 0x45, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x65, 0x6d, // croat.Emacron.em + 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x06, 0x45, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x65, 0x62, 0x72, // acron.Ebreve.ebr + 0x65, 0x76, 0x65, 0x0a, 0x45, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0a, 0x65, // eve.Edotaccent.e + 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x07, 0x45, 0x6f, 0x67, 0x6f, 0x6e, 0x65, // dotaccent.Eogone + 0x6b, 0x07, 0x65, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x06, 0x45, 0x63, 0x61, 0x72, 0x6f, 0x6e, // k.eogonek.Ecaron + 0x06, 0x65, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x0b, 0x47, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, // .ecaron.Gcircumf + 0x6c, 0x65, 0x78, 0x0b, 0x67, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x07, // lex.gcircumflex. + 0x75, 0x6e, 0x69, 0x30, 0x31, 0x32, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x32, 0x31, 0x0c, // uni0120.uni0121. + 0x47, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x67, 0x63, 0x6f, // Gcommaaccent.gco + 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0b, 0x48, 0x63, 0x69, 0x72, 0x63, 0x75, // mmaaccent.Hcircu + 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x68, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, // mflex.hcircumfle + 0x78, 0x04, 0x48, 0x62, 0x61, 0x72, 0x04, 0x68, 0x62, 0x61, 0x72, 0x06, 0x49, 0x74, 0x69, 0x6c, // x.Hbar.hbar.Itil + 0x64, 0x65, 0x06, 0x69, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x07, 0x49, 0x6d, 0x61, 0x63, 0x72, 0x6f, // de.itilde.Imacro + 0x6e, 0x07, 0x69, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x06, 0x49, 0x62, 0x72, 0x65, 0x76, 0x65, // n.imacron.Ibreve + 0x06, 0x69, 0x62, 0x72, 0x65, 0x76, 0x65, 0x07, 0x49, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x07, // .ibreve.Iogonek. + 0x69, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x0a, 0x49, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, // iogonek.Idotacce + 0x6e, 0x74, 0x02, 0x49, 0x4a, 0x02, 0x69, 0x6a, 0x0b, 0x4a, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, // nt.IJ.ij.Jcircum + 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x6a, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, // flex.jcircumflex + 0x0c, 0x4b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x6b, 0x63, // .Kcommaaccent.kc + 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x6b, 0x67, 0x72, 0x65, 0x65, // ommaaccent.kgree + 0x6e, 0x6c, 0x61, 0x6e, 0x64, 0x69, 0x63, 0x06, 0x4c, 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, 0x6c, // nlandic.Lacute.l + 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x4c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, // acute.Lcommaacce + 0x6e, 0x74, 0x0c, 0x6c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x06, // nt.lcommaaccent. + 0x4c, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x6c, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x04, 0x4c, 0x64, // Lcaron.lcaron.Ld + 0x6f, 0x74, 0x04, 0x6c, 0x64, 0x6f, 0x74, 0x06, 0x4e, 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, 0x6e, // ot.ldot.Nacute.n + 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x4e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, // acute.Ncommaacce + 0x6e, 0x74, 0x0c, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x06, // nt.ncommaaccent. + 0x4e, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x6e, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x0b, 0x6e, 0x61, // Ncaron.ncaron.na + 0x70, 0x6f, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x68, 0x65, 0x03, 0x45, 0x6e, 0x67, 0x03, 0x65, 0x6e, // postrophe.Eng.en + 0x67, 0x07, 0x4f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x6f, 0x6d, 0x61, 0x63, 0x72, 0x6f, // g.Omacron.omacro + 0x6e, 0x06, 0x4f, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x6f, 0x62, 0x72, 0x65, 0x76, 0x65, 0x0d, // n.Obreve.obreve. + 0x4f, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x0d, 0x6f, 0x68, // Ohungarumlaut.oh + 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x06, 0x52, 0x61, 0x63, 0x75, // ungarumlaut.Racu + 0x74, 0x65, 0x06, 0x72, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x52, 0x63, 0x6f, 0x6d, 0x6d, 0x61, // te.racute.Rcomma + 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, // accent.rcommaacc + 0x65, 0x6e, 0x74, 0x06, 0x52, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x72, 0x63, 0x61, 0x72, 0x6f, // ent.Rcaron.rcaro + 0x6e, 0x06, 0x53, 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, 0x73, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0b, // n.Sacute.sacute. + 0x53, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x73, 0x63, 0x69, 0x72, // Scircumflex.scir + 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0c, 0x54, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, // cumflex.Tcommaac + 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x74, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, // cent.tcommaaccen + 0x74, 0x06, 0x54, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x74, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x04, // t.Tcaron.tcaron. + 0x54, 0x62, 0x61, 0x72, 0x04, 0x74, 0x62, 0x61, 0x72, 0x06, 0x55, 0x74, 0x69, 0x6c, 0x64, 0x65, // Tbar.tbar.Utilde + 0x06, 0x75, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x07, 0x55, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, // .utilde.Umacron. + 0x75, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x06, 0x55, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x75, // umacron.Ubreve.u + 0x62, 0x72, 0x65, 0x76, 0x65, 0x05, 0x55, 0x72, 0x69, 0x6e, 0x67, 0x05, 0x75, 0x72, 0x69, 0x6e, // breve.Uring.urin + 0x67, 0x0d, 0x55, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x0d, // g.Uhungarumlaut. + 0x75, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x07, 0x55, 0x6f, // uhungarumlaut.Uo + 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x07, 0x75, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x0b, 0x57, 0x63, // gonek.uogonek.Wc + 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x77, 0x63, 0x69, 0x72, 0x63, 0x75, // ircumflex.wcircu + 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x59, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, // mflex.Ycircumfle + 0x78, 0x0b, 0x79, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x06, 0x5a, 0x61, // x.ycircumflex.Za + 0x63, 0x75, 0x74, 0x65, 0x06, 0x7a, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0a, 0x5a, 0x64, 0x6f, 0x74, // cute.zacute.Zdot + 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0a, 0x7a, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, // accent.zdotaccen + 0x74, 0x05, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x05, 0x4f, 0x68, 0x6f, 0x72, 0x6e, 0x05, 0x6f, 0x68, // t.longs.Ohorn.oh + 0x6f, 0x72, 0x6e, 0x05, 0x55, 0x68, 0x6f, 0x72, 0x6e, 0x05, 0x75, 0x68, 0x6f, 0x72, 0x6e, 0x07, // orn.Uhorn.uhorn. + 0x75, 0x6e, 0x69, 0x30, 0x31, 0x46, 0x30, 0x0a, 0x41, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x75, // uni01F0.Aringacu + 0x74, 0x65, 0x0a, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x75, 0x74, 0x65, 0x07, 0x41, 0x45, // te.aringacute.AE + 0x61, 0x63, 0x75, 0x74, 0x65, 0x07, 0x61, 0x65, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0b, 0x4f, 0x73, // acute.aeacute.Os + 0x6c, 0x61, 0x73, 0x68, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0b, 0x6f, 0x73, 0x6c, 0x61, 0x73, 0x68, // lashacute.oslash + 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x53, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, // acute.Scommaacce + 0x6e, 0x74, 0x0c, 0x73, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x07, // nt.scommaaccent. + 0x75, 0x6e, 0x69, 0x30, 0x32, 0x33, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x42, 0x43, 0x07, // uni0237.uni02BC. + 0x75, 0x6e, 0x69, 0x30, 0x32, 0x46, 0x33, 0x09, 0x67, 0x72, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, // uni02F3.gravecom + 0x62, 0x09, 0x61, 0x63, 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x09, 0x74, 0x69, 0x6c, 0x64, // b.acutecomb.tild + 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, // ecomb.hook.uni03 + 0x30, 0x46, 0x08, 0x64, 0x6f, 0x74, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x05, 0x74, 0x6f, 0x6e, 0x6f, // 0F.dotbelow.tono + 0x73, 0x0d, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0a, // s.dieresistonos. + 0x41, 0x6c, 0x70, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x09, 0x61, 0x6e, 0x6f, 0x74, 0x65, // Alphatonos.anote + 0x6c, 0x65, 0x69, 0x61, 0x0c, 0x45, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, // leia.Epsilontono + 0x73, 0x08, 0x45, 0x74, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x09, 0x49, 0x6f, 0x74, 0x61, 0x74, // s.Etatonos.Iotat + 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x4f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, // onos.Omicrontono + 0x73, 0x0c, 0x55, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0a, 0x4f, // s.Upsilontonos.O + 0x6d, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x11, 0x69, 0x6f, 0x74, 0x61, 0x64, 0x69, // megatonos.iotadi + 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x05, 0x41, 0x6c, 0x70, 0x68, // eresistonos.Alph + 0x61, 0x04, 0x42, 0x65, 0x74, 0x61, 0x05, 0x47, 0x61, 0x6d, 0x6d, 0x61, 0x05, 0x44, 0x65, 0x6c, // a.Beta.Gamma.Del + 0x74, 0x61, 0x07, 0x45, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x04, 0x5a, 0x65, 0x74, 0x61, 0x03, // ta.Epsilon.Zeta. + 0x45, 0x74, 0x61, 0x05, 0x54, 0x68, 0x65, 0x74, 0x61, 0x04, 0x49, 0x6f, 0x74, 0x61, 0x05, 0x4b, // Eta.Theta.Iota.K + 0x61, 0x70, 0x70, 0x61, 0x06, 0x4c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x02, 0x4d, 0x75, 0x02, 0x4e, // appa.Lambda.Mu.N + 0x75, 0x02, 0x58, 0x69, 0x07, 0x4f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x02, 0x50, 0x69, 0x03, // u.Xi.Omicron.Pi. + 0x52, 0x68, 0x6f, 0x05, 0x53, 0x69, 0x67, 0x6d, 0x61, 0x03, 0x54, 0x61, 0x75, 0x07, 0x55, 0x70, // Rho.Sigma.Tau.Up + 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x03, 0x50, 0x68, 0x69, 0x03, 0x43, 0x68, 0x69, 0x03, 0x50, 0x73, // silon.Phi.Chi.Ps + 0x69, 0x0c, 0x49, 0x6f, 0x74, 0x61, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x0f, 0x55, // i.Iotadieresis.U + 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x0a, 0x61, // psilondieresis.a + 0x6c, 0x70, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, // lphatonos.epsilo + 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x08, 0x65, 0x74, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x09, // ntonos.etatonos. + 0x69, 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x14, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, // iotatonos.upsilo + 0x6e, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x05, 0x61, // ndieresistonos.a + 0x6c, 0x70, 0x68, 0x61, 0x04, 0x62, 0x65, 0x74, 0x61, 0x05, 0x67, 0x61, 0x6d, 0x6d, 0x61, 0x05, // lpha.beta.gamma. + 0x64, 0x65, 0x6c, 0x74, 0x61, 0x07, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x04, 0x7a, 0x65, // delta.epsilon.ze + 0x74, 0x61, 0x03, 0x65, 0x74, 0x61, 0x05, 0x74, 0x68, 0x65, 0x74, 0x61, 0x04, 0x69, 0x6f, 0x74, // ta.eta.theta.iot + 0x61, 0x05, 0x6b, 0x61, 0x70, 0x70, 0x61, 0x06, 0x6c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x07, 0x75, // a.kappa.lambda.u + 0x6e, 0x69, 0x30, 0x33, 0x42, 0x43, 0x02, 0x6e, 0x75, 0x02, 0x78, 0x69, 0x07, 0x6f, 0x6d, 0x69, // ni03BC.nu.xi.omi + 0x63, 0x72, 0x6f, 0x6e, 0x03, 0x72, 0x68, 0x6f, 0x06, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x31, 0x05, // cron.rho.sigma1. + 0x73, 0x69, 0x67, 0x6d, 0x61, 0x03, 0x74, 0x61, 0x75, 0x07, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, // sigma.tau.upsilo + 0x6e, 0x03, 0x70, 0x68, 0x69, 0x03, 0x63, 0x68, 0x69, 0x03, 0x70, 0x73, 0x69, 0x05, 0x6f, 0x6d, // n.phi.chi.psi.om + 0x65, 0x67, 0x61, 0x0c, 0x69, 0x6f, 0x74, 0x61, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, // ega.iotadieresis + 0x0f, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, // .upsilondieresis + 0x0c, 0x6f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x75, 0x70, // .omicrontonos.up + 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0a, 0x6f, 0x6d, 0x65, 0x67, 0x61, // silontonos.omega + 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, 0x44, 0x31, 0x07, 0x75, 0x6e, // tonos.uni03D1.un + 0x69, 0x30, 0x33, 0x44, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, 0x44, 0x36, 0x07, 0x75, 0x6e, // i03D2.uni03D6.un + 0x69, 0x30, 0x34, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x31, 0x07, 0x75, 0x6e, // i0400.uni0401.un + 0x69, 0x30, 0x34, 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x33, 0x07, 0x75, 0x6e, // i0402.uni0403.un + 0x69, 0x30, 0x34, 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x35, 0x07, 0x75, 0x6e, // i0404.uni0405.un + 0x69, 0x30, 0x34, 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x37, 0x07, 0x75, 0x6e, // i0406.uni0407.un + 0x69, 0x30, 0x34, 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x39, 0x07, 0x75, 0x6e, // i0408.uni0409.un + 0x69, 0x30, 0x34, 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x42, 0x07, 0x75, 0x6e, // i040A.uni040B.un + 0x69, 0x30, 0x34, 0x30, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x44, 0x07, 0x75, 0x6e, // i040C.uni040D.un + 0x69, 0x30, 0x34, 0x30, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x46, 0x07, 0x75, 0x6e, // i040E.uni040F.un + 0x69, 0x30, 0x34, 0x31, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x31, 0x07, 0x75, 0x6e, // i0410.uni0411.un + 0x69, 0x30, 0x34, 0x31, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x33, 0x07, 0x75, 0x6e, // i0412.uni0413.un + 0x69, 0x30, 0x34, 0x31, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x35, 0x07, 0x75, 0x6e, // i0414.uni0415.un + 0x69, 0x30, 0x34, 0x31, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x37, 0x07, 0x75, 0x6e, // i0416.uni0417.un + 0x69, 0x30, 0x34, 0x31, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x39, 0x07, 0x75, 0x6e, // i0418.uni0419.un + 0x69, 0x30, 0x34, 0x31, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x42, 0x07, 0x75, 0x6e, // i041A.uni041B.un + 0x69, 0x30, 0x34, 0x31, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x44, 0x07, 0x75, 0x6e, // i041C.uni041D.un + 0x69, 0x30, 0x34, 0x31, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x46, 0x07, 0x75, 0x6e, // i041E.uni041F.un + 0x69, 0x30, 0x34, 0x32, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x31, 0x07, 0x75, 0x6e, // i0420.uni0421.un + 0x69, 0x30, 0x34, 0x32, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x33, 0x07, 0x75, 0x6e, // i0422.uni0423.un + 0x69, 0x30, 0x34, 0x32, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x35, 0x07, 0x75, 0x6e, // i0424.uni0425.un + 0x69, 0x30, 0x34, 0x32, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x37, 0x07, 0x75, 0x6e, // i0426.uni0427.un + 0x69, 0x30, 0x34, 0x32, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x39, 0x07, 0x75, 0x6e, // i0428.uni0429.un + 0x69, 0x30, 0x34, 0x32, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x42, 0x07, 0x75, 0x6e, // i042A.uni042B.un + 0x69, 0x30, 0x34, 0x32, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x44, 0x07, 0x75, 0x6e, // i042C.uni042D.un + 0x69, 0x30, 0x34, 0x32, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x46, 0x07, 0x75, 0x6e, // i042E.uni042F.un + 0x69, 0x30, 0x34, 0x33, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x31, 0x07, 0x75, 0x6e, // i0430.uni0431.un + 0x69, 0x30, 0x34, 0x33, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x33, 0x07, 0x75, 0x6e, // i0432.uni0433.un + 0x69, 0x30, 0x34, 0x33, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x35, 0x07, 0x75, 0x6e, // i0434.uni0435.un + 0x69, 0x30, 0x34, 0x33, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x37, 0x07, 0x75, 0x6e, // i0436.uni0437.un + 0x69, 0x30, 0x34, 0x33, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x39, 0x07, 0x75, 0x6e, // i0438.uni0439.un + 0x69, 0x30, 0x34, 0x33, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x42, 0x07, 0x75, 0x6e, // i043A.uni043B.un + 0x69, 0x30, 0x34, 0x33, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x44, 0x07, 0x75, 0x6e, // i043C.uni043D.un + 0x69, 0x30, 0x34, 0x33, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x46, 0x07, 0x75, 0x6e, // i043E.uni043F.un + 0x69, 0x30, 0x34, 0x34, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x31, 0x07, 0x75, 0x6e, // i0440.uni0441.un + 0x69, 0x30, 0x34, 0x34, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x33, 0x07, 0x75, 0x6e, // i0442.uni0443.un + 0x69, 0x30, 0x34, 0x34, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x35, 0x07, 0x75, 0x6e, // i0444.uni0445.un + 0x69, 0x30, 0x34, 0x34, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x37, 0x07, 0x75, 0x6e, // i0446.uni0447.un + 0x69, 0x30, 0x34, 0x34, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x39, 0x07, 0x75, 0x6e, // i0448.uni0449.un + 0x69, 0x30, 0x34, 0x34, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x42, 0x07, 0x75, 0x6e, // i044A.uni044B.un + 0x69, 0x30, 0x34, 0x34, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x44, 0x07, 0x75, 0x6e, // i044C.uni044D.un + 0x69, 0x30, 0x34, 0x34, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x46, 0x07, 0x75, 0x6e, // i044E.uni044F.un + 0x69, 0x30, 0x34, 0x35, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x31, 0x07, 0x75, 0x6e, // i0450.uni0451.un + 0x69, 0x30, 0x34, 0x35, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x33, 0x07, 0x75, 0x6e, // i0452.uni0453.un + 0x69, 0x30, 0x34, 0x35, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x35, 0x07, 0x75, 0x6e, // i0454.uni0455.un + 0x69, 0x30, 0x34, 0x35, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x37, 0x07, 0x75, 0x6e, // i0456.uni0457.un + 0x69, 0x30, 0x34, 0x35, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x39, 0x07, 0x75, 0x6e, // i0458.uni0459.un + 0x69, 0x30, 0x34, 0x35, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x42, 0x07, 0x75, 0x6e, // i045A.uni045B.un + 0x69, 0x30, 0x34, 0x35, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x44, 0x07, 0x75, 0x6e, // i045C.uni045D.un + 0x69, 0x30, 0x34, 0x35, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x46, 0x07, 0x75, 0x6e, // i045E.uni045F.un + 0x69, 0x30, 0x34, 0x36, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x31, 0x07, 0x75, 0x6e, // i0460.uni0461.un + 0x69, 0x30, 0x34, 0x36, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x33, 0x07, 0x75, 0x6e, // i0462.uni0463.un + 0x69, 0x30, 0x34, 0x36, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x35, 0x07, 0x75, 0x6e, // i0464.uni0465.un + 0x69, 0x30, 0x34, 0x36, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x37, 0x07, 0x75, 0x6e, // i0466.uni0467.un + 0x69, 0x30, 0x34, 0x36, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x39, 0x07, 0x75, 0x6e, // i0468.uni0469.un + 0x69, 0x30, 0x34, 0x36, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x42, 0x07, 0x75, 0x6e, // i046A.uni046B.un + 0x69, 0x30, 0x34, 0x36, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x44, 0x07, 0x75, 0x6e, // i046C.uni046D.un + 0x69, 0x30, 0x34, 0x36, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x46, 0x07, 0x75, 0x6e, // i046E.uni046F.un + 0x69, 0x30, 0x34, 0x37, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x31, 0x07, 0x75, 0x6e, // i0470.uni0471.un + 0x69, 0x30, 0x34, 0x37, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x33, 0x07, 0x75, 0x6e, // i0472.uni0473.un + 0x69, 0x30, 0x34, 0x37, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x35, 0x07, 0x75, 0x6e, // i0474.uni0475.un + 0x69, 0x30, 0x34, 0x37, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x37, 0x07, 0x75, 0x6e, // i0476.uni0477.un + 0x69, 0x30, 0x34, 0x37, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x39, 0x07, 0x75, 0x6e, // i0478.uni0479.un + 0x69, 0x30, 0x34, 0x37, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x42, 0x07, 0x75, 0x6e, // i047A.uni047B.un + 0x69, 0x30, 0x34, 0x37, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x44, 0x07, 0x75, 0x6e, // i047C.uni047D.un + 0x69, 0x30, 0x34, 0x37, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x46, 0x07, 0x75, 0x6e, // i047E.uni047F.un + 0x69, 0x30, 0x34, 0x38, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x31, 0x07, 0x75, 0x6e, // i0480.uni0481.un + 0x69, 0x30, 0x34, 0x38, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x33, 0x07, 0x75, 0x6e, // i0482.uni0483.un + 0x69, 0x30, 0x34, 0x38, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x35, 0x07, 0x75, 0x6e, // i0484.uni0485.un + 0x69, 0x30, 0x34, 0x38, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x38, 0x07, 0x75, 0x6e, // i0486.uni0488.un + 0x69, 0x30, 0x34, 0x38, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x41, 0x07, 0x75, 0x6e, // i0489.uni048A.un + 0x69, 0x30, 0x34, 0x38, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x43, 0x07, 0x75, 0x6e, // i048B.uni048C.un + 0x69, 0x30, 0x34, 0x38, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x45, 0x07, 0x75, 0x6e, // i048D.uni048E.un + 0x69, 0x30, 0x34, 0x38, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x30, 0x07, 0x75, 0x6e, // i048F.uni0490.un + 0x69, 0x30, 0x34, 0x39, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x32, 0x07, 0x75, 0x6e, // i0491.uni0492.un + 0x69, 0x30, 0x34, 0x39, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x34, 0x07, 0x75, 0x6e, // i0493.uni0494.un + 0x69, 0x30, 0x34, 0x39, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x36, 0x07, 0x75, 0x6e, // i0495.uni0496.un + 0x69, 0x30, 0x34, 0x39, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x38, 0x07, 0x75, 0x6e, // i0497.uni0498.un + 0x69, 0x30, 0x34, 0x39, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x41, 0x07, 0x75, 0x6e, // i0499.uni049A.un + 0x69, 0x30, 0x34, 0x39, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x43, 0x07, 0x75, 0x6e, // i049B.uni049C.un + 0x69, 0x30, 0x34, 0x39, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x45, 0x07, 0x75, 0x6e, // i049D.uni049E.un + 0x69, 0x30, 0x34, 0x39, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x30, 0x07, 0x75, 0x6e, // i049F.uni04A0.un + 0x69, 0x30, 0x34, 0x41, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x32, 0x07, 0x75, 0x6e, // i04A1.uni04A2.un + 0x69, 0x30, 0x34, 0x41, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x34, 0x07, 0x75, 0x6e, // i04A3.uni04A4.un + 0x69, 0x30, 0x34, 0x41, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x36, 0x07, 0x75, 0x6e, // i04A5.uni04A6.un + 0x69, 0x30, 0x34, 0x41, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x38, 0x07, 0x75, 0x6e, // i04A7.uni04A8.un + 0x69, 0x30, 0x34, 0x41, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x41, 0x07, 0x75, 0x6e, // i04A9.uni04AA.un + 0x69, 0x30, 0x34, 0x41, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x43, 0x07, 0x75, 0x6e, // i04AB.uni04AC.un + 0x69, 0x30, 0x34, 0x41, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x45, 0x07, 0x75, 0x6e, // i04AD.uni04AE.un + 0x69, 0x30, 0x34, 0x41, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x30, 0x07, 0x75, 0x6e, // i04AF.uni04B0.un + 0x69, 0x30, 0x34, 0x42, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x32, 0x07, 0x75, 0x6e, // i04B1.uni04B2.un + 0x69, 0x30, 0x34, 0x42, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x34, 0x07, 0x75, 0x6e, // i04B3.uni04B4.un + 0x69, 0x30, 0x34, 0x42, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x36, 0x07, 0x75, 0x6e, // i04B5.uni04B6.un + 0x69, 0x30, 0x34, 0x42, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x38, 0x07, 0x75, 0x6e, // i04B7.uni04B8.un + 0x69, 0x30, 0x34, 0x42, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x41, 0x07, 0x75, 0x6e, // i04B9.uni04BA.un + 0x69, 0x30, 0x34, 0x42, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x43, 0x07, 0x75, 0x6e, // i04BB.uni04BC.un + 0x69, 0x30, 0x34, 0x42, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x45, 0x07, 0x75, 0x6e, // i04BD.uni04BE.un + 0x69, 0x30, 0x34, 0x42, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x30, 0x07, 0x75, 0x6e, // i04BF.uni04C0.un + 0x69, 0x30, 0x34, 0x43, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x32, 0x07, 0x75, 0x6e, // i04C1.uni04C2.un + 0x69, 0x30, 0x34, 0x43, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x34, 0x07, 0x75, 0x6e, // i04C3.uni04C4.un + 0x69, 0x30, 0x34, 0x43, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x36, 0x07, 0x75, 0x6e, // i04C5.uni04C6.un + 0x69, 0x30, 0x34, 0x43, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x38, 0x07, 0x75, 0x6e, // i04C7.uni04C8.un + 0x69, 0x30, 0x34, 0x43, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x41, 0x07, 0x75, 0x6e, // i04C9.uni04CA.un + 0x69, 0x30, 0x34, 0x43, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x43, 0x07, 0x75, 0x6e, // i04CB.uni04CC.un + 0x69, 0x30, 0x34, 0x43, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x45, 0x07, 0x75, 0x6e, // i04CD.uni04CE.un + 0x69, 0x30, 0x34, 0x43, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x30, 0x07, 0x75, 0x6e, // i04CF.uni04D0.un + 0x69, 0x30, 0x34, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x32, 0x07, 0x75, 0x6e, // i04D1.uni04D2.un + 0x69, 0x30, 0x34, 0x44, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x34, 0x07, 0x75, 0x6e, // i04D3.uni04D4.un + 0x69, 0x30, 0x34, 0x44, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x36, 0x07, 0x75, 0x6e, // i04D5.uni04D6.un + 0x69, 0x30, 0x34, 0x44, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x38, 0x07, 0x75, 0x6e, // i04D7.uni04D8.un + 0x69, 0x30, 0x34, 0x44, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x41, 0x07, 0x75, 0x6e, // i04D9.uni04DA.un + 0x69, 0x30, 0x34, 0x44, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x43, 0x07, 0x75, 0x6e, // i04DB.uni04DC.un + 0x69, 0x30, 0x34, 0x44, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x45, 0x07, 0x75, 0x6e, // i04DD.uni04DE.un + 0x69, 0x30, 0x34, 0x44, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x30, 0x07, 0x75, 0x6e, // i04DF.uni04E0.un + 0x69, 0x30, 0x34, 0x45, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x32, 0x07, 0x75, 0x6e, // i04E1.uni04E2.un + 0x69, 0x30, 0x34, 0x45, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x34, 0x07, 0x75, 0x6e, // i04E3.uni04E4.un + 0x69, 0x30, 0x34, 0x45, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x36, 0x07, 0x75, 0x6e, // i04E5.uni04E6.un + 0x69, 0x30, 0x34, 0x45, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x38, 0x07, 0x75, 0x6e, // i04E7.uni04E8.un + 0x69, 0x30, 0x34, 0x45, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x41, 0x07, 0x75, 0x6e, // i04E9.uni04EA.un + 0x69, 0x30, 0x34, 0x45, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x43, 0x07, 0x75, 0x6e, // i04EB.uni04EC.un + 0x69, 0x30, 0x34, 0x45, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x45, 0x07, 0x75, 0x6e, // i04ED.uni04EE.un + 0x69, 0x30, 0x34, 0x45, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x30, 0x07, 0x75, 0x6e, // i04EF.uni04F0.un + 0x69, 0x30, 0x34, 0x46, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x32, 0x07, 0x75, 0x6e, // i04F1.uni04F2.un + 0x69, 0x30, 0x34, 0x46, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x34, 0x07, 0x75, 0x6e, // i04F3.uni04F4.un + 0x69, 0x30, 0x34, 0x46, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x36, 0x07, 0x75, 0x6e, // i04F5.uni04F6.un + 0x69, 0x30, 0x34, 0x46, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x38, 0x07, 0x75, 0x6e, // i04F7.uni04F8.un + 0x69, 0x30, 0x34, 0x46, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x41, 0x07, 0x75, 0x6e, // i04F9.uni04FA.un + 0x69, 0x30, 0x34, 0x46, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x43, 0x07, 0x75, 0x6e, // i04FB.uni04FC.un + 0x69, 0x30, 0x34, 0x46, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x45, 0x07, 0x75, 0x6e, // i04FD.uni04FE.un + 0x69, 0x30, 0x34, 0x46, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x30, 0x07, 0x75, 0x6e, // i04FF.uni0500.un + 0x69, 0x30, 0x35, 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x32, 0x07, 0x75, 0x6e, // i0501.uni0502.un + 0x69, 0x30, 0x35, 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x34, 0x07, 0x75, 0x6e, // i0503.uni0504.un + 0x69, 0x30, 0x35, 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x36, 0x07, 0x75, 0x6e, // i0505.uni0506.un + 0x69, 0x30, 0x35, 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x38, 0x07, 0x75, 0x6e, // i0507.uni0508.un + 0x69, 0x30, 0x35, 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x41, 0x07, 0x75, 0x6e, // i0509.uni050A.un + 0x69, 0x30, 0x35, 0x30, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x43, 0x07, 0x75, 0x6e, // i050B.uni050C.un + 0x69, 0x30, 0x35, 0x30, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x45, 0x07, 0x75, 0x6e, // i050D.uni050E.un + 0x69, 0x30, 0x35, 0x30, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x31, 0x30, 0x07, 0x75, 0x6e, // i050F.uni0510.un + 0x69, 0x30, 0x35, 0x31, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x31, 0x32, 0x07, 0x75, 0x6e, // i0511.uni0512.un + 0x69, 0x30, 0x35, 0x31, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x30, 0x30, 0x07, 0x75, 0x6e, // i0513.uni1E00.un + 0x69, 0x31, 0x45, 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x33, 0x45, 0x07, 0x75, 0x6e, // i1E01.uni1E3E.un + 0x69, 0x31, 0x45, 0x33, 0x46, 0x06, 0x57, 0x67, 0x72, 0x61, 0x76, 0x65, 0x06, 0x77, 0x67, 0x72, // i1E3F.Wgrave.wgr + 0x61, 0x76, 0x65, 0x06, 0x57, 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, 0x77, 0x61, 0x63, 0x75, 0x74, // ave.Wacute.wacut + 0x65, 0x09, 0x57, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x09, 0x77, 0x64, 0x69, 0x65, // e.Wdieresis.wdie + 0x72, 0x65, 0x73, 0x69, 0x73, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x30, 0x07, 0x75, 0x6e, // resis.uni1EA0.un + 0x69, 0x31, 0x45, 0x41, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x32, 0x07, 0x75, 0x6e, // i1EA1.uni1EA2.un + 0x69, 0x31, 0x45, 0x41, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x34, 0x07, 0x75, 0x6e, // i1EA3.uni1EA4.un + 0x69, 0x31, 0x45, 0x41, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x36, 0x07, 0x75, 0x6e, // i1EA5.uni1EA6.un + 0x69, 0x31, 0x45, 0x41, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x38, 0x07, 0x75, 0x6e, // i1EA7.uni1EA8.un + 0x69, 0x31, 0x45, 0x41, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x41, 0x07, 0x75, 0x6e, // i1EA9.uni1EAA.un + 0x69, 0x31, 0x45, 0x41, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x43, 0x07, 0x75, 0x6e, // i1EAB.uni1EAC.un + 0x69, 0x31, 0x45, 0x41, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x45, 0x07, 0x75, 0x6e, // i1EAD.uni1EAE.un + 0x69, 0x31, 0x45, 0x41, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x30, 0x07, 0x75, 0x6e, // i1EAF.uni1EB0.un + 0x69, 0x31, 0x45, 0x42, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x32, 0x07, 0x75, 0x6e, // i1EB1.uni1EB2.un + 0x69, 0x31, 0x45, 0x42, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x34, 0x07, 0x75, 0x6e, // i1EB3.uni1EB4.un + 0x69, 0x31, 0x45, 0x42, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x36, 0x07, 0x75, 0x6e, // i1EB5.uni1EB6.un + 0x69, 0x31, 0x45, 0x42, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x38, 0x07, 0x75, 0x6e, // i1EB7.uni1EB8.un + 0x69, 0x31, 0x45, 0x42, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x41, 0x07, 0x75, 0x6e, // i1EB9.uni1EBA.un + 0x69, 0x31, 0x45, 0x42, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x43, 0x07, 0x75, 0x6e, // i1EBB.uni1EBC.un + 0x69, 0x31, 0x45, 0x42, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x45, 0x07, 0x75, 0x6e, // i1EBD.uni1EBE.un + 0x69, 0x31, 0x45, 0x42, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x30, 0x07, 0x75, 0x6e, // i1EBF.uni1EC0.un + 0x69, 0x31, 0x45, 0x43, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x32, 0x07, 0x75, 0x6e, // i1EC1.uni1EC2.un + 0x69, 0x31, 0x45, 0x43, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x34, 0x07, 0x75, 0x6e, // i1EC3.uni1EC4.un + 0x69, 0x31, 0x45, 0x43, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x36, 0x07, 0x75, 0x6e, // i1EC5.uni1EC6.un + 0x69, 0x31, 0x45, 0x43, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x38, 0x07, 0x75, 0x6e, // i1EC7.uni1EC8.un + 0x69, 0x31, 0x45, 0x43, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x41, 0x07, 0x75, 0x6e, // i1EC9.uni1ECA.un + 0x69, 0x31, 0x45, 0x43, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x43, 0x07, 0x75, 0x6e, // i1ECB.uni1ECC.un + 0x69, 0x31, 0x45, 0x43, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x45, 0x07, 0x75, 0x6e, // i1ECD.uni1ECE.un + 0x69, 0x31, 0x45, 0x43, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x30, 0x07, 0x75, 0x6e, // i1ECF.uni1ED0.un + 0x69, 0x31, 0x45, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x32, 0x07, 0x75, 0x6e, // i1ED1.uni1ED2.un + 0x69, 0x31, 0x45, 0x44, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x34, 0x07, 0x75, 0x6e, // i1ED3.uni1ED4.un + 0x69, 0x31, 0x45, 0x44, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x36, 0x07, 0x75, 0x6e, // i1ED5.uni1ED6.un + 0x69, 0x31, 0x45, 0x44, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x38, 0x07, 0x75, 0x6e, // i1ED7.uni1ED8.un + 0x69, 0x31, 0x45, 0x44, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x41, 0x07, 0x75, 0x6e, // i1ED9.uni1EDA.un + 0x69, 0x31, 0x45, 0x44, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x43, 0x07, 0x75, 0x6e, // i1EDB.uni1EDC.un + 0x69, 0x31, 0x45, 0x44, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x45, 0x07, 0x75, 0x6e, // i1EDD.uni1EDE.un + 0x69, 0x31, 0x45, 0x44, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x30, 0x07, 0x75, 0x6e, // i1EDF.uni1EE0.un + 0x69, 0x31, 0x45, 0x45, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x32, 0x07, 0x75, 0x6e, // i1EE1.uni1EE2.un + 0x69, 0x31, 0x45, 0x45, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x34, 0x07, 0x75, 0x6e, // i1EE3.uni1EE4.un + 0x69, 0x31, 0x45, 0x45, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x36, 0x07, 0x75, 0x6e, // i1EE5.uni1EE6.un + 0x69, 0x31, 0x45, 0x45, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x38, 0x07, 0x75, 0x6e, // i1EE7.uni1EE8.un + 0x69, 0x31, 0x45, 0x45, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x41, 0x07, 0x75, 0x6e, // i1EE9.uni1EEA.un + 0x69, 0x31, 0x45, 0x45, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x43, 0x07, 0x75, 0x6e, // i1EEB.uni1EEC.un + 0x69, 0x31, 0x45, 0x45, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x45, 0x07, 0x75, 0x6e, // i1EED.uni1EEE.un + 0x69, 0x31, 0x45, 0x45, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x30, 0x07, 0x75, 0x6e, // i1EEF.uni1EF0.un + 0x69, 0x31, 0x45, 0x46, 0x31, 0x06, 0x59, 0x67, 0x72, 0x61, 0x76, 0x65, 0x06, 0x79, 0x67, 0x72, // i1EF1.Ygrave.ygr + 0x61, 0x76, 0x65, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, // ave.uni1EF4.uni1 + 0x45, 0x46, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, // EF5.uni1EF6.uni1 + 0x45, 0x46, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, // EF7.uni1EF8.uni1 + 0x45, 0x46, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x46, 0x34, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x32, // EF9.uni1F4D.uni2 + 0x30, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x32, // 000.uni2001.uni2 + 0x30, 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x32, // 002.uni2003.uni2 + 0x30, 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, // 004.uni2005.uni2 + 0x30, 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x32, // 006.uni2007.uni2 + 0x30, 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x32, // 008.uni2009.uni2 + 0x30, 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x32, // 00A.uni200B.uni2 + 0x30, 0x31, 0x35, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x64, 0x62, // 015.underscoredb + 0x6c, 0x0d, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x64, 0x07, // l.quotereversed. + 0x75, 0x6e, 0x69, 0x32, 0x30, 0x32, 0x35, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x06, 0x73, // uni2025.minute.s + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x64, 0x62, 0x6c, 0x07, // econd.exclamdbl. + 0x75, 0x6e, 0x69, 0x32, 0x30, 0x37, 0x34, 0x09, 0x6e, 0x73, 0x75, 0x70, 0x65, 0x72, 0x69, 0x6f, // uni2074.nsuperio + 0x72, 0x04, 0x6c, 0x69, 0x72, 0x61, 0x06, 0x70, 0x65, 0x73, 0x65, 0x74, 0x61, 0x07, 0x75, 0x6e, // r.lira.peseta.un + 0x69, 0x32, 0x30, 0x41, 0x42, 0x04, 0x45, 0x75, 0x72, 0x6f, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x31, // i20AB.Euro.uni21 + 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x31, 0x31, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x31, // 05.uni2113.uni21 + 0x31, 0x36, 0x09, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x09, 0x6f, 0x6e, 0x65, // 16.estimated.one + 0x65, 0x69, 0x67, 0x68, 0x74, 0x68, 0x0c, 0x74, 0x68, 0x72, 0x65, 0x65, 0x65, 0x69, 0x67, 0x68, // eighth.threeeigh + 0x74, 0x68, 0x73, 0x0b, 0x66, 0x69, 0x76, 0x65, 0x65, 0x69, 0x67, 0x68, 0x74, 0x68, 0x73, 0x0c, // ths.fiveeighths. + 0x73, 0x65, 0x76, 0x65, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x74, 0x68, 0x73, 0x0b, 0x63, 0x6f, 0x6d, // seveneighths.com + 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x42, 0x30, 0x32, // maaccent.uniFB02 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x42, 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x42, 0x30, 0x34, // .uniFB03.uniFB04 + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x45, 0x46, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x46, 0x46, 0x43, // .uniFEFF.uniFFFC + 0x07, 0x75, 0x6e, 0x69, 0x46, 0x46, 0x46, 0x44, 0x0c, 0x49, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, // .uniFFFD.Imacron + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x64, 0x61, 0x73, 0x69, 0x61, 0x6f, 0x78, 0x69, 0x61, 0x09, // .smcp.dasiaoxia. + 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x73, 0x75, 0x70, 0x08, 0x6e, 0x69, 0x6e, 0x65, 0x2e, 0x73, // eight.sup.nine.s + 0x75, 0x70, 0x08, 0x73, 0x69, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x66, 0x6f, 0x75, 0x72, // up.six.smcp.four + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, // .smcp.three.smcp + 0x08, 0x74, 0x77, 0x6f, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, 0x6f, 0x6e, 0x65, 0x2e, 0x73, 0x6d, // .two.smcp.one.sm + 0x63, 0x70, 0x09, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x5a, 0x2e, 0x73, // cp.zero.smcp.Z.s + 0x6d, 0x63, 0x70, 0x06, 0x59, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x58, 0x2e, 0x73, 0x6d, 0x63, // mcp.Y.smcp.X.smc + 0x70, 0x06, 0x57, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x56, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, // p.W.smcp.V.smcp. + 0x55, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x54, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x53, 0x2e, // U.smcp.T.smcp.S. + 0x73, 0x6d, 0x63, 0x70, 0x06, 0x52, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x51, 0x2e, 0x73, 0x6d, // smcp.R.smcp.Q.sm + 0x63, 0x70, 0x09, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x06, 0x4f, 0x2e, 0x73, // cp.zero.lnum.O.s + 0x6d, 0x63, 0x70, 0x06, 0x4e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, 0x63, 0x72, 0x6f, 0x73, 0x73, // mcp.N.smcp.cross + 0x62, 0x61, 0x72, 0x06, 0x4d, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x4c, 0x2e, 0x73, 0x6d, 0x63, // bar.M.smcp.L.smc + 0x70, 0x06, 0x4b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x4a, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, // p.K.smcp.J.smcp. + 0x49, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x48, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x47, 0x2e, // I.smcp.H.smcp.G. + 0x73, 0x6d, 0x63, 0x70, 0x06, 0x46, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x45, 0x2e, 0x73, 0x6d, // smcp.F.smcp.E.sm + 0x63, 0x70, 0x06, 0x44, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x43, 0x2e, 0x73, 0x6d, 0x63, 0x70, // cp.D.smcp.C.smcp + 0x06, 0x42, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, // .B.smcp.commaacc + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x0e, 0x62, 0x72, 0x65, 0x76, 0x65, 0x67, // entrotate.breveg + 0x72, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x06, 0x41, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x13, // ravecomb.A.smcp. + 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x61, 0x63, 0x75, 0x74, 0x65, 0x63, // circumflexacutec + 0x6f, 0x6d, 0x62, 0x13, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x67, 0x72, // omb.circumflexgr + 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x12, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, // avecomb.circumfl + 0x65, 0x78, 0x68, 0x6f, 0x6f, 0x6b, 0x63, 0x6f, 0x6d, 0x62, 0x13, 0x63, 0x69, 0x72, 0x63, 0x75, // exhookcomb.circu + 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x0e, 0x62, // mflextildecomb.b + 0x72, 0x65, 0x76, 0x65, 0x61, 0x63, 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x0d, 0x62, 0x72, // reveacutecomb.br + 0x65, 0x76, 0x65, 0x68, 0x6f, 0x6f, 0x6b, 0x63, 0x6f, 0x6d, 0x62, 0x0e, 0x62, 0x72, 0x65, 0x76, // evehookcomb.brev + 0x65, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x0b, 0x63, 0x79, 0x72, 0x69, 0x6c, // etildecomb.cyril + 0x6c, 0x69, 0x63, 0x74, 0x69, 0x63, 0x10, 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x68, // lictic.cyrillich + 0x6f, 0x6f, 0x6b, 0x6c, 0x65, 0x66, 0x74, 0x0c, 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, // ookleft.cyrillic + 0x68, 0x6f, 0x6f, 0x6b, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x69, 0x67, 0x68, 0x74, 0x68, // hook.largerighth + 0x6f, 0x6f, 0x6b, 0x08, 0x6f, 0x6e, 0x65, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x08, 0x74, 0x77, 0x6f, // ook.one.lnum.two + 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x0a, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, // .lnum.three.lnum + 0x09, 0x66, 0x6f, 0x75, 0x72, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x09, 0x66, 0x69, 0x76, 0x65, 0x2e, // .four.lnum.five. + 0x6c, 0x6e, 0x75, 0x6d, 0x08, 0x73, 0x69, 0x78, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x0a, 0x73, 0x65, // lnum.six.lnum.se + 0x76, 0x65, 0x6e, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x0a, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x6c, // ven.lnum.eight.l + 0x6e, 0x75, 0x6d, 0x09, 0x6e, 0x69, 0x6e, 0x65, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x06, 0x50, 0x2e, // num.nine.lnum.P. + 0x73, 0x6d, 0x63, 0x70, 0x09, 0x66, 0x69, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x07, 0x73, // smcp.five.smcp.s + 0x69, 0x78, 0x2e, 0x73, 0x75, 0x70, 0x08, 0x66, 0x69, 0x76, 0x65, 0x2e, 0x73, 0x75, 0x70, 0x08, // ix.sup.five.sup. + 0x66, 0x6f, 0x75, 0x72, 0x2e, 0x73, 0x75, 0x70, 0x09, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2e, 0x73, // four.sup.three.s + 0x75, 0x70, 0x07, 0x74, 0x77, 0x6f, 0x2e, 0x73, 0x75, 0x70, 0x09, 0x72, 0x69, 0x6e, 0x67, 0x61, // up.two.sup.ringa + 0x63, 0x75, 0x74, 0x65, 0x07, 0x6f, 0x6e, 0x65, 0x2e, 0x73, 0x75, 0x70, 0x08, 0x7a, 0x65, 0x72, // cute.one.sup.zer + 0x6f, 0x2e, 0x73, 0x75, 0x70, 0x09, 0x6e, 0x69, 0x6e, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, // o.sup.nine.smcp. + 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, 0x73, 0x65, 0x76, 0x65, 0x6e, // eight.smcp.seven + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x2e, 0x73, 0x75, 0x70, 0x0d, // .smcp.seven.sup. + 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x62, 0x72, 0x65, 0x76, 0x65, 0x0b, 0x44, 0x63, // cyrillicbreve.Dc + 0x72, 0x6f, 0x61, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, 0x45, 0x74, 0x68, 0x2e, 0x73, 0x6d, // roat.smcp.Eth.sm + 0x63, 0x70, 0x09, 0x54, 0x62, 0x61, 0x72, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x67, 0x72, // cp.Tbar.smcp.Agr + 0x61, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, // ave.smcp.Aacute. + 0x73, 0x6d, 0x63, 0x70, 0x10, 0x41, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, // smcp.Acircumflex + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Atilde.smc + 0x70, 0x0e, 0x41, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, // p.Adieresis.smcp + 0x0a, 0x41, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x41, 0x72, 0x69, 0x6e, // .Aring.smcp.Arin + 0x67, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0d, 0x43, 0x63, 0x65, 0x64, // gacute.smcp.Cced + 0x69, 0x6c, 0x6c, 0x61, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x67, 0x72, 0x61, 0x76, 0x65, // illa.smcp.Egrave + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Eacute.smc + 0x70, 0x10, 0x45, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, // p.Ecircumflex.sm + 0x63, 0x70, 0x0e, 0x45, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, // cp.Edieresis.smc + 0x70, 0x0b, 0x49, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x49, 0x61, // p.Igrave.smcp.Ia + 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x49, 0x63, 0x69, 0x72, 0x63, 0x75, // cute.smcp.Icircu + 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x49, 0x64, 0x69, 0x65, 0x72, // mflex.smcp.Idier + 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4e, 0x74, 0x69, 0x6c, 0x64, 0x65, // esis.smcp.Ntilde + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4f, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Ograve.smc + 0x70, 0x0b, 0x4f, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x4f, 0x63, // p.Oacute.smcp.Oc + 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4f, // ircumflex.smcp.O + 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x4f, 0x64, 0x69, 0x65, 0x72, // tilde.smcp.Odier + 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x67, 0x72, 0x61, 0x76, 0x65, // esis.smcp.Ugrave + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Uacute.smc + 0x70, 0x10, 0x55, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, // p.Ucircumflex.sm + 0x63, 0x70, 0x0e, 0x55, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, // cp.Udieresis.smc + 0x70, 0x0b, 0x59, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x41, 0x6d, // p.Yacute.smcp.Am + 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x62, 0x72, 0x65, 0x76, // acron.smcp.Abrev + 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x41, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x2e, 0x73, // e.smcp.Aogonek.s + 0x6d, 0x63, 0x70, 0x0b, 0x43, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, // mcp.Cacute.smcp. + 0x43, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, // Ccircumflex.smcp + 0x0c, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x30, 0x41, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x43, 0x63, // .uni010A.smcp.Cc + 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x44, 0x63, 0x61, 0x72, 0x6f, 0x6e, // aron.smcp.Dcaron + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x45, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, // .smcp.Emacron.sm + 0x63, 0x70, 0x0b, 0x45, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x45, // cp.Ebreve.smcp.E + 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x45, // dotaccent.smcp.E + 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x63, 0x61, 0x72, // ogonek.smcp.Ecar + 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x47, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, // on.smcp.Gcircumf + 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x47, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, // lex.smcp.Gbreve. + 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x32, 0x30, 0x2e, 0x73, 0x6d, 0x63, // smcp.uni0120.smc + 0x70, 0x11, 0x47, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, // p.Gcommaaccent.s + 0x6d, 0x63, 0x70, 0x10, 0x48, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, // mcp.Hcircumflex. + 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x49, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, // smcp.Itilde.smcp + 0x12, 0x55, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x2e, 0x73, // .Uhungarumlaut.s + 0x6d, 0x63, 0x70, 0x0b, 0x49, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, // mcp.Ibreve.smcp. + 0x49, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x49, 0x64, 0x6f, // Iogonek.smcp.Ido + 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x4a, 0x63, 0x69, // taccent.smcp.Jci + 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x4b, 0x63, // rcumflex.smcp.Kc + 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, // ommaaccent.smcp. + 0x4c, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x4c, 0x63, 0x6f, 0x6d, // Lacute.smcp.Lcom + 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4c, 0x63, // maaccent.smcp.Lc + 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x4c, 0x64, 0x6f, 0x74, 0x2e, 0x73, // aron.smcp.Ldot.s + 0x6d, 0x63, 0x70, 0x0b, 0x4e, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, // mcp.Nacute.smcp. + 0x4e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, // Ncommaaccent.smc + 0x70, 0x0b, 0x4e, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x4f, 0x6d, // p.Ncaron.smcp.Om + 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4f, 0x62, 0x72, 0x65, 0x76, // acron.smcp.Obrev + 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x12, 0x4f, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, // e.smcp.Ohungarum + 0x6c, 0x61, 0x75, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x52, 0x61, 0x63, 0x75, 0x74, 0x65, // laut.smcp.Racute + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x52, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, // .smcp.Rcommaacce + 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x52, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, // nt.smcp.Rcaron.s + 0x6d, 0x63, 0x70, 0x0b, 0x53, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, // mcp.Sacute.smcp. + 0x53, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, // Scircumflex.smcp + 0x0d, 0x53, 0x63, 0x65, 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x53, // .Scedilla.smcp.S + 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x54, 0x63, 0x6f, 0x6d, 0x6d, // caron.smcp.Tcomm + 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x54, 0x63, 0x61, // aaccent.smcp.Tca + 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, // ron.smcp.Utilde. + 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x55, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, // smcp.Umacron.smc + 0x70, 0x0b, 0x55, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, 0x55, 0x72, // p.Ubreve.smcp.Ur + 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x67, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x64, // ing.smcp.germand + 0x62, 0x6c, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x5a, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, // bls.smcp.Zcaron. + 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x5a, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, // smcp.Zdotaccent. + 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x5a, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, // smcp.Zacute.smcp + 0x0e, 0x59, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, // .Ydieresis.smcp. + 0x59, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, // Ycircumflex.smcp + 0x10, 0x57, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, // .Wcircumflex.smc + 0x70, 0x0c, 0x55, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x00, 0x00, // p.Uogonek.smcp.. + 0x00, 0x01, 0x00, 0x02, 0x00, 0x08, 0x00, 0x02, 0xff, 0xff, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, // ................ + 0x00, 0x0a, 0x00, 0x30, 0x00, 0x44, 0x00, 0x02, 0x44, 0x46, 0x4c, 0x54, 0x00, 0x0e, 0x6c, 0x61, // ...0.D..DFLT..la + 0x74, 0x6e, 0x00, 0x1a, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x00, // tn.............. + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x6b, 0x65, // ..............ke + 0x72, 0x6e, 0x00, 0x0e, 0x6b, 0x65, 0x72, 0x6e, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // rn..kern........ + 0x00, 0x01, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0x32, 0xa8, 0x00, 0x01, // ............2... + 0x03, 0x2e, 0x00, 0x04, 0x00, 0x00, 0x01, 0x92, 0x31, 0xe6, 0x31, 0xe6, 0x06, 0x56, 0x30, 0x3c, // ........1.1..V0< + 0x1e, 0xf4, 0x2d, 0xa6, 0x31, 0xc4, 0x30, 0xc4, 0x06, 0xac, 0x30, 0xe0, 0x30, 0xe0, 0x2d, 0x64, // ..-.1.0...0.0.-d + 0x0d, 0x78, 0x30, 0xe0, 0x30, 0xe0, 0x31, 0xc4, 0x21, 0xfe, 0x09, 0xd6, 0x0a, 0x50, 0x2d, 0xb8, // .x0.0.1.!....P-. + 0x2d, 0x24, 0x30, 0x26, 0x2f, 0xca, 0x31, 0x24, 0x0d, 0xa4, 0x0a, 0xb6, 0x30, 0xa6, 0x2e, 0x92, // -$0&/.1$....0... + 0x30, 0xda, 0x0a, 0xf8, 0x0c, 0x22, 0x31, 0x02, 0x2e, 0x92, 0x0d, 0x96, 0x31, 0xa6, 0x0d, 0x18, // 0...."1.....1... + 0x30, 0x20, 0x31, 0xa6, 0x0d, 0x36, 0x30, 0x3c, 0x30, 0x3c, 0x30, 0x3c, 0x30, 0x3c, 0x30, 0x3c, // 0 1..60<0<0<0<0< + 0x30, 0x3c, 0x2d, 0xa6, 0x30, 0xc4, 0x30, 0xc4, 0x30, 0xc4, 0x30, 0xc4, 0x30, 0xe0, 0x30, 0xe0, // 0<-.0.0.0.0.0.0. + 0x30, 0xe0, 0x30, 0xe0, 0x31, 0xc4, 0x30, 0xe0, 0x31, 0xc4, 0x31, 0xc4, 0x31, 0xc4, 0x31, 0xc4, // 0.0.1.0.1.1.1.1. + 0x31, 0xc4, 0x31, 0x24, 0x30, 0xa6, 0x30, 0xa6, 0x30, 0xa6, 0x30, 0xa6, 0x30, 0xa6, 0x30, 0xa6, // 1.1$0.0.0.0.0.0. + 0x30, 0xda, 0x30, 0xda, 0x30, 0xda, 0x30, 0xda, 0x31, 0x02, 0x31, 0x02, 0x31, 0x02, 0x31, 0x02, // 0.0.0.0.1.1.1.1. + 0x31, 0x02, 0x31, 0xa6, 0x2e, 0x92, 0x31, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, // 1.1...1.0<0.0<0. + 0x30, 0x3c, 0x30, 0xa6, 0x2d, 0xa6, 0x2d, 0xa6, 0x2d, 0xa6, 0x2d, 0xa6, 0x31, 0xc4, 0x31, 0xc4, // 0<0.-.-.-.-.1.1. + 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, // 0.0.0.0.0.0.0.0. + 0x30, 0xc4, 0x30, 0xda, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, // 0.0.0.0.0.0.0.0. + 0x2d, 0x64, 0x0d, 0x78, 0x0d, 0x78, 0x0d, 0x78, 0x0d, 0x78, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, // -d.x.x.x.x0.0.0. + 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, 0x0d, 0x96, 0x0d, 0x96, // 1.1.1.1.1.1..... + 0x0d, 0x96, 0x2d, 0xb8, 0x2d, 0xb8, 0x2d, 0xb8, 0x30, 0x26, 0x31, 0x24, 0x31, 0xa6, 0x31, 0x24, // ..-.-.-.0&1$1.1$ + 0x0d, 0xa4, 0x0d, 0xa4, 0x0d, 0xa4, 0x30, 0x3c, 0x30, 0xa6, 0x31, 0xe6, 0x30, 0x3c, 0x30, 0xc4, // ......0<0.1.0<0. + 0x30, 0xe0, 0x30, 0xe0, 0x31, 0xc4, 0x31, 0x24, 0x30, 0x3c, 0x1e, 0xf4, 0x2e, 0xfa, 0x30, 0x3c, // 0.0.1.1$0<....0< + 0x30, 0xc4, 0x0d, 0xa4, 0x30, 0xe0, 0x31, 0xc4, 0x30, 0xe0, 0x2d, 0x64, 0x30, 0x3c, 0x30, 0xe0, // 0...0.1.0.-d0<0. + 0x30, 0xe0, 0x0d, 0xb6, 0x31, 0xc4, 0x21, 0xfe, 0x0e, 0xa0, 0x2d, 0xb8, 0x31, 0x24, 0x0f, 0x8e, // 0...1.!...-.1$.. + 0x2f, 0xca, 0x10, 0x6c, 0x30, 0xe0, 0x31, 0x24, 0x11, 0x0e, 0x31, 0xa6, 0x11, 0x14, 0x11, 0x1e, // /..l0.1$..1..... + 0x13, 0xe0, 0x15, 0xba, 0x31, 0xa6, 0x16, 0xa4, 0x31, 0x02, 0x2e, 0x92, 0x17, 0x9e, 0x17, 0xa4, // ....1...1....... + 0x19, 0x8e, 0x19, 0xc4, 0x1b, 0x56, 0x1b, 0x88, 0x31, 0x02, 0x30, 0xc4, 0x30, 0xc4, 0x1c, 0x06, // .....V..1.0.0... + 0x2e, 0xfa, 0x30, 0xe0, 0x30, 0xe0, 0x2c, 0xdc, 0x2c, 0xdc, 0x1d, 0x74, 0x2d, 0x64, 0x2e, 0xac, // ..0.0.,.,..t-d.. + 0x30, 0xe0, 0x30, 0x3c, 0x1e, 0x06, 0x1e, 0xf4, 0x2e, 0xfa, 0x1e, 0xfe, 0x30, 0xc4, 0x2f, 0xca, // 0.0<........0./. + 0x21, 0x38, 0x30, 0xe0, 0x2d, 0x64, 0x30, 0xe0, 0x30, 0xe0, 0x30, 0xe0, 0x31, 0xc4, 0x21, 0xfe, // !80.-d0.0.0.1.!. + 0x2d, 0xa6, 0x2d, 0xb8, 0x2e, 0xac, 0x2f, 0xca, 0x30, 0xe0, 0x30, 0xe0, 0x22, 0x20, 0x2c, 0xdc, // -.-.../.0.0." ,. + 0x2c, 0xdc, 0x23, 0xb2, 0x24, 0x70, 0x24, 0xfa, 0x30, 0xa6, 0x25, 0x54, 0x26, 0x2e, 0x2f, 0xc0, // ,.#.$p$.0.%T&./. + 0x26, 0xb4, 0x30, 0xda, 0x30, 0x20, 0x26, 0xda, 0x27, 0x04, 0x31, 0x02, 0x2e, 0x92, 0x28, 0x5e, // &.0.0 &.'.1...(^ + 0x31, 0xa6, 0x2e, 0x92, 0x30, 0x20, 0x2a, 0xcc, 0x2b, 0x06, 0x2d, 0x02, 0x2d, 0x02, 0x2e, 0x92, // 1...0 *.+.-.-... + 0x2c, 0x30, 0x30, 0xda, 0x30, 0xda, 0x2f, 0xc0, 0x2c, 0xb2, 0x2d, 0x02, 0x2d, 0x02, 0x31, 0xa6, // ,00.0./.,.-.-.1. + 0x2c, 0xdc, 0x2d, 0x02, 0x30, 0x3c, 0x31, 0x02, 0x2d, 0x24, 0x31, 0xa6, 0x2d, 0x24, 0x31, 0xa6, // ,.-.0<1.-$1.-$1. + 0x2d, 0x3a, 0x2e, 0x92, 0x2e, 0xfa, 0x2f, 0xc0, 0x2e, 0xfa, 0x2f, 0xca, 0x30, 0x20, 0x2d, 0x64, // -:..../.../.0 -d + 0x2d, 0x64, 0x2d, 0x64, 0x2d, 0x64, 0x30, 0xe0, 0x2d, 0xa6, 0x2d, 0xb8, 0x31, 0x24, 0x31, 0xa6, // -d-d-d0.-.-.1$1. + 0x31, 0x24, 0x2f, 0xca, 0x30, 0x20, 0x30, 0xe0, 0x2f, 0xca, 0x30, 0x20, 0x30, 0xe0, 0x30, 0xe0, // 1$/.0 0./.0 0.0. + 0x30, 0xe0, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xda, // 0.0<0.0<0.0.0.0. + 0x30, 0xda, 0x2f, 0xca, 0x30, 0x20, 0x31, 0xc4, 0x31, 0x02, 0x31, 0x02, 0x2e, 0x92, 0x2e, 0xac, // 0./.0 1.1.1..... + 0x31, 0xa6, 0x2e, 0xac, 0x31, 0xa6, 0x2e, 0xac, 0x31, 0xa6, 0x2e, 0xfa, 0x2f, 0xc0, 0x2f, 0xc0, // 1...1...1..././. + 0x2f, 0xca, 0x30, 0x20, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0xe0, 0x30, 0x26, 0x30, 0x26, 0x30, 0x26, // /.0 0<0.0.0&0&0& + 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, // 0<0.0<0.0<0.0<0. + 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, // 0<0.0<0.0<0.0<0. + 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, 0x30, 0x3c, 0x30, 0xa6, // 0<0.0<0.0<0.0<0. + 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, // 0.0.0.0.0.0.0.0. + 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, 0x30, 0xc4, 0x30, 0xda, // 0.0.0.0.0.0.0.0. + 0x30, 0xe0, 0x30, 0xe0, 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, // 0.0.1.1.1.1.1.1. + 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, 0x31, 0xc4, 0x31, 0x02, // 1.1.1.1.1.1.1.1. + 0x31, 0x02, 0x31, 0x24, 0x31, 0xa6, 0x31, 0x24, 0x31, 0xa6, 0x31, 0x24, 0x31, 0xa6, 0x31, 0x24, // 1.1$1.1$1.1$1.1$ + 0x31, 0xa6, 0x31, 0xc4, 0x31, 0xe6, 0x31, 0xe6, 0x31, 0xe6, 0x31, 0xe6, 0x31, 0xe6, 0x31, 0xe6, // 1.1.1.1.1.1.1.1. + 0x31, 0xe6, 0x32, 0x08, 0x31, 0xec, 0x32, 0x74, 0x32, 0x02, 0x32, 0x08, 0x32, 0x0e, 0x32, 0x24, // 1.2.1.2t2.2.2.2$ + 0x32, 0x36, 0x32, 0x48, 0x32, 0x5a, 0x32, 0x74, 0x32, 0x7a, 0x32, 0x84, 0x00, 0x01, 0x01, 0x92, // 262H2Z2t2z2..... + 0x00, 0x05, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x24, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, 0x00, 0x28, // .......$.%.&.'.( + 0x00, 0x29, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, // .).+.,.../.0.1.2 + 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, // .3.4.5.7.9.:.;.< + 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x44, 0x00, 0x45, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x52, // .=.>.D.E.H.I.N.R + 0x00, 0x53, 0x00, 0x55, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5e, 0x00, 0x82, // .S.U.Y.Z.[...^.. + 0x00, 0x83, 0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x89, 0x00, 0x8a, 0x00, 0x8b, // ................ + 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f, 0x00, 0x90, 0x00, 0x91, 0x00, 0x92, 0x00, 0x93, // ................ + 0x00, 0x94, 0x00, 0x95, 0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x9f, 0x00, 0xa2, 0x00, 0xa3, // ................ + 0x00, 0xa4, 0x00, 0xa5, 0x00, 0xa6, 0x00, 0xa7, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad, // ................ + 0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xbf, 0x00, 0xc0, 0x00, 0xc1, // ................ + 0x00, 0xc2, 0x00, 0xc3, 0x00, 0xc4, 0x00, 0xc5, 0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xca, // ................ + 0x00, 0xcc, 0x00, 0xce, 0x00, 0xd0, 0x00, 0xd2, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, 0x00, 0xd7, // ................ + 0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd, 0x00, 0xe6, 0x00, 0xea, // ................ + 0x00, 0xec, 0x00, 0xee, 0x00, 0xf0, 0x00, 0xf2, 0x00, 0xf8, 0x00, 0xfb, 0x00, 0xfd, 0x00, 0xff, // ................ + 0x01, 0x01, 0x01, 0x05, 0x01, 0x07, 0x01, 0x09, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x10, 0x01, 0x11, // ................ + 0x01, 0x12, 0x01, 0x13, 0x01, 0x17, 0x01, 0x19, 0x01, 0x1b, 0x01, 0x24, 0x01, 0x26, 0x01, 0x28, // ...........$.&.( + 0x01, 0x36, 0x01, 0x38, 0x01, 0x39, 0x01, 0x3a, 0x01, 0x3b, 0x01, 0x3d, 0x01, 0x3f, 0x01, 0x48, // .6.8.9.:.;.=.?.H + 0x01, 0x49, 0x01, 0x51, 0x01, 0x63, 0x01, 0x65, 0x01, 0x66, 0x01, 0x67, 0x01, 0x68, 0x01, 0x69, // .I.Q.c.e.f.g.h.i + 0x01, 0x6c, 0x01, 0x6d, 0x01, 0x6e, 0x01, 0x6f, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, // .l.m.n.o.p.q.r.s + 0x01, 0x74, 0x01, 0x75, 0x01, 0x76, 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7c, // .t.u.v.w.x.y.z.| + 0x01, 0x7d, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x80, 0x01, 0x81, 0x01, 0x82, 0x01, 0x84, 0x01, 0x85, // .}.~............ + 0x01, 0x8b, 0x01, 0x8d, 0x01, 0x8e, 0x01, 0x90, 0x01, 0x93, 0x01, 0x95, 0x01, 0x97, 0x01, 0x98, // ................ + 0x01, 0x99, 0x01, 0x9b, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0xa0, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, // ................ + 0x01, 0xa6, 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb2, 0x01, 0xb3, 0x01, 0xb5, // ................ + 0x01, 0xb6, 0x01, 0xb7, 0x01, 0xb8, 0x01, 0xba, 0x01, 0xbb, 0x01, 0xbc, 0x01, 0xbd, 0x01, 0xbe, // ................ + 0x01, 0xbf, 0x01, 0xc0, 0x01, 0xc1, 0x01, 0xc2, 0x01, 0xc3, 0x01, 0xc4, 0x01, 0xc6, 0x01, 0xc7, // ................ + 0x01, 0xc8, 0x01, 0xc9, 0x01, 0xca, 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, 0x01, 0xcf, 0x01, 0xd1, // ................ + 0x01, 0xd2, 0x01, 0xd4, 0x01, 0xd5, 0x01, 0xd6, 0x01, 0xd8, 0x01, 0xd9, 0x01, 0xda, 0x01, 0xdb, // ................ + 0x01, 0xdc, 0x01, 0xdd, 0x01, 0xde, 0x01, 0xdf, 0x01, 0xe0, 0x01, 0xe1, 0x01, 0xe2, 0x01, 0xe3, // ................ + 0x01, 0xe6, 0x01, 0xea, 0x01, 0xec, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf0, 0x01, 0xf1, 0x01, 0xf2, // ................ + 0x01, 0xf5, 0x01, 0xf6, 0x01, 0xf8, 0x01, 0xf9, 0x01, 0xfa, 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xff, // ................ + 0x02, 0x00, 0x02, 0x05, 0x02, 0x06, 0x02, 0x0a, 0x02, 0x0e, 0x02, 0x0f, 0x02, 0x12, 0x02, 0x1f, // ................ + 0x02, 0x20, 0x02, 0x21, 0x02, 0x22, 0x02, 0x23, 0x02, 0x2d, 0x02, 0x3a, 0x02, 0x3b, 0x02, 0x3c, // . .!.".#.-.:.;.< + 0x02, 0x3d, 0x02, 0x41, 0x02, 0x42, 0x02, 0x45, 0x02, 0x47, 0x02, 0x49, 0x02, 0x4b, 0x02, 0x4d, // .=.A.B.E.G.I.K.M + 0x02, 0x55, 0x02, 0x57, 0x02, 0x59, 0x02, 0x5a, 0x02, 0x5b, 0x02, 0x5d, 0x02, 0x5e, 0x02, 0x6b, // .U.W.Y.Z.[.].^.k + 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x74, 0x02, 0x78, 0x02, 0x7a, 0x02, 0x7b, 0x02, 0x7c, 0x02, 0x7d, // .l.m.t.x.z.{.|.} + 0x02, 0x7e, 0x02, 0x81, 0x02, 0x82, 0x02, 0x84, 0x02, 0x86, 0x02, 0x87, 0x02, 0x88, 0x02, 0x91, // .~.............. + 0x02, 0x92, 0x02, 0x96, 0x02, 0x98, 0x02, 0x99, 0x02, 0x9a, 0x02, 0x9b, 0x02, 0x9c, 0x02, 0x9d, // ................ + 0x02, 0x9e, 0x02, 0xa1, 0x02, 0xa2, 0x02, 0xa6, 0x02, 0xa7, 0x02, 0xa8, 0x02, 0xbf, 0x02, 0xc0, // ................ + 0x02, 0xc1, 0x02, 0xc3, 0x02, 0xc5, 0x02, 0xc7, 0x02, 0xc9, 0x02, 0xca, 0x02, 0xcb, 0x02, 0xcc, // ................ + 0x02, 0xcd, 0x02, 0xce, 0x02, 0xcf, 0x02, 0xd0, 0x02, 0xd1, 0x02, 0xd2, 0x02, 0xd3, 0x02, 0xd4, // ................ + 0x02, 0xd5, 0x02, 0xd6, 0x02, 0xd7, 0x02, 0xd8, 0x02, 0xd9, 0x02, 0xda, 0x02, 0xdb, 0x02, 0xdc, // ................ + 0x02, 0xdd, 0x02, 0xde, 0x02, 0xdf, 0x02, 0xe0, 0x02, 0xe1, 0x02, 0xe2, 0x02, 0xe3, 0x02, 0xe4, // ................ + 0x02, 0xe5, 0x02, 0xe6, 0x02, 0xe7, 0x02, 0xe8, 0x02, 0xe9, 0x02, 0xea, 0x02, 0xeb, 0x02, 0xec, // ................ + 0x02, 0xed, 0x02, 0xee, 0x02, 0xef, 0x02, 0xf0, 0x02, 0xf1, 0x02, 0xf3, 0x02, 0xf5, 0x02, 0xf6, // ................ + 0x02, 0xf7, 0x02, 0xf8, 0x02, 0xf9, 0x02, 0xfa, 0x02, 0xfb, 0x02, 0xfc, 0x02, 0xfd, 0x02, 0xfe, // ................ + 0x02, 0xff, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x03, 0x0a, 0x03, 0x1b, 0x03, 0x1c, 0x03, 0x1d, // ................ + 0x03, 0x1e, 0x03, 0x1f, 0x03, 0x20, 0x03, 0x21, 0x03, 0x22, 0x03, 0x23, 0x03, 0x34, 0x03, 0x35, // ..... .!.".#.4.5 + 0x03, 0x37, 0x03, 0x38, 0x03, 0x39, 0x03, 0x41, 0x03, 0x42, 0x03, 0x75, 0x03, 0x76, 0x03, 0x77, // .7.8.9.A.B.u.v.w + 0x03, 0x78, 0x03, 0x79, 0x03, 0x7b, 0x03, 0x7d, 0x03, 0x7e, 0x03, 0x80, 0x03, 0x84, 0x03, 0x85, // .x.y.{.}.~...... + 0x03, 0x8c, 0x03, 0x91, 0x00, 0x15, 0x00, 0x39, 0x00, 0x14, 0x00, 0x3a, 0x00, 0x25, 0x00, 0x3c, // .......9...:.%.< + 0x00, 0x16, 0x00, 0x9f, 0x00, 0x16, 0x01, 0x36, 0x00, 0x25, 0x01, 0x38, 0x00, 0x16, 0x01, 0x3a, // .......6.%.8...: + 0x00, 0x16, 0x01, 0x69, 0x00, 0x16, 0x01, 0x7f, 0x00, 0x16, 0x01, 0x85, 0x00, 0x16, 0x02, 0x20, // ...i........... + 0x00, 0x14, 0x02, 0x22, 0x00, 0x14, 0x02, 0x59, 0x00, 0x16, 0x02, 0x5b, 0x00, 0x16, 0x02, 0xc3, // ..."...Y...[.... + 0x00, 0x25, 0x02, 0xc5, 0x00, 0x25, 0x02, 0xc7, 0x00, 0x25, 0x03, 0x1b, 0x00, 0x16, 0x03, 0x1d, // .%...%...%...... + 0x00, 0x16, 0x03, 0x1f, 0x00, 0x16, 0x03, 0x21, 0x00, 0x16, 0x00, 0xca, 0x00, 0x0f, 0xfe, 0xef, // .......!........ + 0x00, 0x11, 0xfe, 0xef, 0x00, 0x1d, 0xfe, 0xef, 0x00, 0x24, 0xff, 0xc5, 0x00, 0x37, 0x00, 0x14, // .........$...7.. + 0x00, 0x44, 0xff, 0xde, 0x00, 0x46, 0xff, 0xeb, 0x00, 0x47, 0xff, 0xeb, 0x00, 0x48, 0xff, 0xeb, // .D...F...G...H.. + 0x00, 0x4a, 0xff, 0xeb, 0x00, 0x52, 0xff, 0xeb, 0x00, 0x54, 0xff, 0xeb, 0x00, 0x55, 0xff, 0xe6, // .J...R...T...U.. + 0x00, 0x58, 0xff, 0xea, 0x00, 0x59, 0xff, 0xe8, 0x00, 0x5c, 0xff, 0xe8, 0x00, 0x82, 0xff, 0xc5, // .X...Y.......... + 0x00, 0x83, 0xff, 0xc5, 0x00, 0x84, 0xff, 0xc5, 0x00, 0x85, 0xff, 0xc5, 0x00, 0x86, 0xff, 0xc5, // ................ + 0x00, 0x87, 0xff, 0xc5, 0x00, 0xa2, 0xff, 0xde, 0x00, 0xa3, 0xff, 0xde, 0x00, 0xa4, 0xff, 0xde, // ................ + 0x00, 0xa5, 0xff, 0xde, 0x00, 0xa6, 0xff, 0xde, 0x00, 0xa7, 0xff, 0xde, 0x00, 0xa9, 0xff, 0xeb, // ................ + 0x00, 0xaa, 0xff, 0xeb, 0x00, 0xab, 0xff, 0xeb, 0x00, 0xac, 0xff, 0xeb, 0x00, 0xad, 0xff, 0xeb, // ................ + 0x00, 0xb4, 0xff, 0xeb, 0x00, 0xb5, 0xff, 0xeb, 0x00, 0xb6, 0xff, 0xeb, 0x00, 0xb7, 0xff, 0xeb, // ................ + 0x00, 0xb8, 0xff, 0xeb, 0x00, 0xbb, 0xff, 0xea, 0x00, 0xbc, 0xff, 0xea, 0x00, 0xbd, 0xff, 0xea, // ................ + 0x00, 0xbe, 0xff, 0xea, 0x00, 0xbf, 0xff, 0xe8, 0x00, 0xc1, 0xff, 0xe8, 0x00, 0xc2, 0xff, 0xc5, // ................ + 0x00, 0xc3, 0xff, 0xde, 0x00, 0xc4, 0xff, 0xc5, 0x00, 0xc5, 0xff, 0xde, 0x00, 0xc6, 0xff, 0xc5, // ................ + 0x00, 0xc7, 0xff, 0xde, 0x00, 0xc9, 0xff, 0xeb, 0x00, 0xcb, 0xff, 0xeb, 0x00, 0xcd, 0xff, 0xeb, // ................ + 0x00, 0xcf, 0xff, 0xeb, 0x00, 0xd1, 0xff, 0xeb, 0x00, 0xd5, 0xff, 0xeb, 0x00, 0xd7, 0xff, 0xeb, // ................ + 0x00, 0xd9, 0xff, 0xeb, 0x00, 0xdb, 0xff, 0xeb, 0x00, 0xdd, 0xff, 0xeb, 0x00, 0xdf, 0xff, 0xeb, // ................ + 0x00, 0xe1, 0xff, 0xeb, 0x00, 0xe3, 0xff, 0xeb, 0x00, 0xe5, 0xff, 0xeb, 0x01, 0x0f, 0xff, 0xeb, // ................ + 0x01, 0x11, 0xff, 0xeb, 0x01, 0x13, 0xff, 0xeb, 0x01, 0x15, 0xff, 0xeb, 0x01, 0x24, 0x00, 0x14, // .............$.. + 0x01, 0x26, 0x00, 0x14, 0x01, 0x2b, 0xff, 0xea, 0x01, 0x2d, 0xff, 0xea, 0x01, 0x2f, 0xff, 0xea, // .&...+...-.../.. + 0x01, 0x31, 0xff, 0xea, 0x01, 0x33, 0xff, 0xea, 0x01, 0x35, 0xff, 0xea, 0x01, 0x39, 0xff, 0xe8, // .1...3...5...9.. + 0x01, 0x44, 0xff, 0xeb, 0x01, 0x46, 0xff, 0xea, 0x01, 0x48, 0xff, 0xc5, 0x01, 0x49, 0xff, 0xde, // .D...F...H...I.. + 0x01, 0x63, 0xff, 0xc5, 0x01, 0x6c, 0xff, 0xc5, 0x01, 0x6f, 0xff, 0xc5, 0x01, 0x76, 0xff, 0xc5, // .c...l...o...v.. + 0x01, 0x86, 0xff, 0xeb, 0x01, 0x8a, 0xff, 0xea, 0x01, 0x8b, 0xff, 0xeb, 0x01, 0x8d, 0xff, 0xe8, // ................ + 0x01, 0x97, 0xff, 0xe8, 0x01, 0x99, 0xff, 0xeb, 0x01, 0x9c, 0xff, 0xeb, 0x01, 0x9d, 0xff, 0xeb, // ................ + 0x01, 0x9f, 0xff, 0xea, 0x01, 0xa5, 0xff, 0xea, 0x01, 0xa6, 0xff, 0xeb, 0x01, 0xa7, 0xff, 0xea, // ................ + 0x01, 0xae, 0x00, 0x14, 0x01, 0xb7, 0x00, 0x14, 0x01, 0xbc, 0xff, 0xc5, 0x01, 0xce, 0x00, 0x14, // ................ + 0x01, 0xdc, 0xff, 0xde, 0x01, 0xe1, 0xff, 0xeb, 0x01, 0xea, 0xff, 0xeb, 0x01, 0xed, 0xff, 0xeb, // ................ + 0x01, 0xef, 0xff, 0xe8, 0x01, 0xf0, 0xff, 0xeb, 0x01, 0xfc, 0xff, 0xeb, 0x01, 0xfd, 0xff, 0xeb, // ................ + 0x02, 0x00, 0xff, 0xeb, 0x02, 0x0a, 0xff, 0xe8, 0x02, 0x12, 0xff, 0xc5, 0x02, 0x1f, 0xff, 0xeb, // ................ + 0x02, 0x21, 0xff, 0xe8, 0x02, 0x23, 0xff, 0xe8, 0x02, 0x25, 0xff, 0xeb, 0x02, 0x29, 0xff, 0xeb, // .!...#...%...).. + 0x02, 0x2d, 0xff, 0xeb, 0x02, 0x4b, 0x00, 0x14, 0x02, 0x54, 0xff, 0xeb, 0x02, 0x56, 0xff, 0xeb, // .-...K...T...V.. + 0x02, 0x57, 0x00, 0x14, 0x02, 0x5a, 0xff, 0xe8, 0x02, 0x5f, 0x00, 0x14, 0x02, 0x7b, 0xff, 0xc5, // .W...Z..._...{.. + 0x02, 0x7c, 0xff, 0xde, 0x02, 0x7d, 0xff, 0xc5, 0x02, 0x7e, 0xff, 0xde, 0x02, 0x82, 0xff, 0xeb, // .|...}...~...... + 0x02, 0x84, 0xff, 0xeb, 0x02, 0x86, 0xff, 0xeb, 0x02, 0x92, 0xff, 0xeb, 0x02, 0x94, 0xff, 0xeb, // ................ + 0x02, 0x96, 0xff, 0xeb, 0x02, 0x9a, 0xff, 0xe8, 0x02, 0x9c, 0xff, 0xe8, 0x02, 0x9e, 0xff, 0xe8, // ................ + 0x02, 0xac, 0xff, 0xeb, 0x02, 0xad, 0xff, 0xeb, 0x02, 0xae, 0xff, 0xeb, 0x02, 0xb8, 0xff, 0xeb, // ................ + 0x02, 0xbf, 0xff, 0xc5, 0x02, 0xc0, 0xff, 0xde, 0x02, 0xc9, 0xff, 0xc5, 0x02, 0xca, 0xff, 0xde, // ................ + 0x02, 0xcb, 0xff, 0xc5, 0x02, 0xcc, 0xff, 0xde, 0x02, 0xcd, 0xff, 0xc5, 0x02, 0xce, 0xff, 0xde, // ................ + 0x02, 0xcf, 0xff, 0xc5, 0x02, 0xd0, 0xff, 0xde, 0x02, 0xd1, 0xff, 0xc5, 0x02, 0xd2, 0xff, 0xde, // ................ + 0x02, 0xd3, 0xff, 0xc5, 0x02, 0xd4, 0xff, 0xde, 0x02, 0xd5, 0xff, 0xc5, 0x02, 0xd6, 0xff, 0xde, // ................ + 0x02, 0xd7, 0xff, 0xc5, 0x02, 0xd8, 0xff, 0xde, 0x02, 0xd9, 0xff, 0xc5, 0x02, 0xda, 0xff, 0xde, // ................ + 0x02, 0xdb, 0xff, 0xc5, 0x02, 0xdc, 0xff, 0xde, 0x02, 0xdd, 0xff, 0xc5, 0x02, 0xde, 0xff, 0xde, // ................ + 0x02, 0xdf, 0xff, 0xc5, 0x02, 0xe0, 0xff, 0xde, 0x02, 0xe2, 0xff, 0xeb, 0x02, 0xe4, 0xff, 0xeb, // ................ + 0x02, 0xe6, 0xff, 0xeb, 0x02, 0xe8, 0xff, 0xeb, 0x02, 0xea, 0xff, 0xeb, 0x02, 0xec, 0xff, 0xeb, // ................ + 0x02, 0xee, 0xff, 0xeb, 0x02, 0xf0, 0xff, 0xeb, 0x02, 0xf6, 0xff, 0xeb, 0x02, 0xf8, 0xff, 0xeb, // ................ + 0x02, 0xfa, 0xff, 0xeb, 0x02, 0xfc, 0xff, 0xeb, 0x02, 0xfe, 0xff, 0xeb, 0x03, 0x00, 0xff, 0xeb, // ................ + 0x03, 0x02, 0xff, 0xeb, 0x03, 0x04, 0xff, 0xeb, 0x03, 0x06, 0xff, 0xeb, 0x03, 0x08, 0xff, 0xeb, // ................ + 0x03, 0x0a, 0xff, 0xeb, 0x03, 0x0c, 0xff, 0xeb, 0x03, 0x0e, 0xff, 0xea, 0x03, 0x10, 0xff, 0xea, // ................ + 0x03, 0x12, 0xff, 0xea, 0x03, 0x14, 0xff, 0xea, 0x03, 0x16, 0xff, 0xea, 0x03, 0x18, 0xff, 0xea, // ................ + 0x03, 0x1a, 0xff, 0xea, 0x03, 0x1c, 0xff, 0xe8, 0x03, 0x1e, 0xff, 0xe8, 0x03, 0x20, 0xff, 0xe8, // ............. .. + 0x03, 0x22, 0xff, 0xe8, 0x03, 0x36, 0xfe, 0xef, 0x03, 0x3a, 0xfe, 0xef, 0x03, 0x3e, 0xfe, 0xef, // ."...6...:...>.. + 0x03, 0x3f, 0xfe, 0xef, 0x00, 0x1e, 0x00, 0x37, 0xff, 0xdf, 0x00, 0x39, 0xff, 0xe4, 0x00, 0x3a, // .?.....7...9...: + 0xff, 0xec, 0x00, 0x3c, 0xff, 0xdd, 0x00, 0x9f, 0xff, 0xdd, 0x01, 0x24, 0xff, 0xdf, 0x01, 0x26, // ...<.......$...& + 0xff, 0xdf, 0x01, 0x36, 0xff, 0xec, 0x01, 0x38, 0xff, 0xdd, 0x01, 0x3a, 0xff, 0xdd, 0x01, 0x69, // ...6...8...:...i + 0xff, 0xdd, 0x01, 0x7f, 0xff, 0xdd, 0x01, 0x85, 0xff, 0xdd, 0x01, 0xae, 0xff, 0xdf, 0x01, 0xb7, // ................ + 0xff, 0xdf, 0x01, 0xce, 0xff, 0xdf, 0x02, 0x20, 0xff, 0xe4, 0x02, 0x22, 0xff, 0xe4, 0x02, 0x4b, // ....... ..."...K + 0xff, 0xdf, 0x02, 0x57, 0xff, 0xdf, 0x02, 0x59, 0xff, 0xdd, 0x02, 0x5b, 0xff, 0xdd, 0x02, 0x5f, // ...W...Y...[..._ + 0xff, 0xdf, 0x02, 0xc3, 0xff, 0xec, 0x02, 0xc5, 0xff, 0xec, 0x02, 0xc7, 0xff, 0xec, 0x03, 0x1b, // ................ + 0xff, 0xdd, 0x03, 0x1d, 0xff, 0xdd, 0x03, 0x1f, 0xff, 0xdd, 0x03, 0x21, 0xff, 0xdd, 0x00, 0x19, // ...........!.... + 0x00, 0x37, 0xff, 0xce, 0x00, 0x39, 0xff, 0xed, 0x00, 0x3c, 0xff, 0xd0, 0x00, 0x9f, 0xff, 0xd0, // .7...9...<...... + 0x01, 0x24, 0xff, 0xce, 0x01, 0x26, 0xff, 0xce, 0x01, 0x38, 0xff, 0xd0, 0x01, 0x3a, 0xff, 0xd0, // .$...&...8...:.. + 0x01, 0x69, 0xff, 0xd0, 0x01, 0x7f, 0xff, 0xd0, 0x01, 0x85, 0xff, 0xd0, 0x01, 0xae, 0xff, 0xce, // .i.............. + 0x01, 0xb7, 0xff, 0xce, 0x01, 0xce, 0xff, 0xce, 0x02, 0x20, 0xff, 0xed, 0x02, 0x22, 0xff, 0xed, // ......... ...".. + 0x02, 0x4b, 0xff, 0xce, 0x02, 0x57, 0xff, 0xce, 0x02, 0x59, 0xff, 0xd0, 0x02, 0x5b, 0xff, 0xd0, // .K...W...Y...[.. + 0x02, 0x5f, 0xff, 0xce, 0x03, 0x1b, 0xff, 0xd0, 0x03, 0x1d, 0xff, 0xd0, 0x03, 0x1f, 0xff, 0xd0, // ._.............. + 0x03, 0x21, 0xff, 0xd0, 0x00, 0x10, 0x00, 0x2d, 0xff, 0xee, 0x00, 0x38, 0xff, 0xee, 0x00, 0x9b, // .!.....-...8.... + 0xff, 0xee, 0x00, 0x9c, 0xff, 0xee, 0x00, 0x9d, 0xff, 0xee, 0x00, 0x9e, 0xff, 0xee, 0x00, 0xf6, // ................ + 0xff, 0xee, 0x01, 0x2a, 0xff, 0xee, 0x01, 0x2c, 0xff, 0xee, 0x01, 0x2e, 0xff, 0xee, 0x01, 0x30, // ...*...,.......0 + 0xff, 0xee, 0x01, 0x32, 0xff, 0xee, 0x01, 0x34, 0xff, 0xee, 0x01, 0xb4, 0xff, 0xee, 0x03, 0x0d, // ...2...4........ + 0xff, 0xee, 0x03, 0x0f, 0xff, 0xee, 0x00, 0x4a, 0x00, 0x05, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x10, // .......J........ + 0x00, 0x0c, 0x00, 0x14, 0x00, 0x40, 0x00, 0x12, 0x00, 0x46, 0xff, 0xe8, 0x00, 0x47, 0xff, 0xe8, // .....@...F...G.. + 0x00, 0x48, 0xff, 0xe8, 0x00, 0x4a, 0xff, 0xe8, 0x00, 0x54, 0xff, 0xe8, 0x00, 0x60, 0x00, 0x13, // .H...J...T...`.. + 0x00, 0xa9, 0xff, 0xe8, 0x00, 0xaa, 0xff, 0xe8, 0x00, 0xab, 0xff, 0xe8, 0x00, 0xac, 0xff, 0xe8, // ................ + 0x00, 0xad, 0xff, 0xe8, 0x00, 0xc9, 0xff, 0xe8, 0x00, 0xcb, 0xff, 0xe8, 0x00, 0xcd, 0xff, 0xe8, // ................ + 0x00, 0xcf, 0xff, 0xe8, 0x00, 0xd1, 0xff, 0xe8, 0x00, 0xd5, 0xff, 0xe8, 0x00, 0xd7, 0xff, 0xe8, // ................ + 0x00, 0xd9, 0xff, 0xe8, 0x00, 0xdb, 0xff, 0xe8, 0x00, 0xdd, 0xff, 0xe8, 0x00, 0xdf, 0xff, 0xe8, // ................ + 0x00, 0xe1, 0xff, 0xe8, 0x00, 0xe3, 0xff, 0xe8, 0x00, 0xe5, 0xff, 0xe8, 0x01, 0x15, 0xff, 0xe8, // ................ + 0x01, 0x44, 0xff, 0xe8, 0x01, 0x51, 0x00, 0x10, 0x01, 0x86, 0xff, 0xe8, 0x01, 0x8b, 0xff, 0xe8, // .D...Q.......... + 0x01, 0x9c, 0xff, 0xe8, 0x01, 0x9d, 0xff, 0xe8, 0x01, 0xe1, 0xff, 0xe8, 0x01, 0xed, 0xff, 0xe8, // ................ + 0x01, 0xf0, 0xff, 0xe8, 0x01, 0xfc, 0xff, 0xe8, 0x01, 0xfd, 0xff, 0xe8, 0x02, 0x00, 0xff, 0xe8, // ................ + 0x02, 0x25, 0xff, 0xe8, 0x02, 0x29, 0xff, 0xe8, 0x02, 0x2d, 0xff, 0xe8, 0x02, 0x54, 0xff, 0xe8, // .%...)...-...T.. + 0x02, 0x56, 0xff, 0xe8, 0x02, 0x82, 0xff, 0xe8, 0x02, 0x84, 0xff, 0xe8, 0x02, 0x86, 0xff, 0xe8, // .V.............. + 0x02, 0x94, 0xff, 0xe8, 0x02, 0xac, 0xff, 0xe8, 0x02, 0xad, 0xff, 0xe8, 0x02, 0xae, 0xff, 0xe8, // ................ + 0x02, 0xb8, 0xff, 0xe8, 0x02, 0xe2, 0xff, 0xe8, 0x02, 0xe4, 0xff, 0xe8, 0x02, 0xe6, 0xff, 0xe8, // ................ + 0x02, 0xe8, 0xff, 0xe8, 0x02, 0xea, 0xff, 0xe8, 0x02, 0xec, 0xff, 0xe8, 0x02, 0xee, 0xff, 0xe8, // ................ + 0x02, 0xf0, 0xff, 0xe8, 0x03, 0x04, 0xff, 0xe8, 0x03, 0x06, 0xff, 0xe8, 0x03, 0x08, 0xff, 0xe8, // ................ + 0x03, 0x0c, 0xff, 0xe8, 0x03, 0x34, 0x00, 0x10, 0x03, 0x35, 0x00, 0x10, 0x03, 0x37, 0x00, 0x10, // .....4...5...7.. + 0x03, 0x38, 0x00, 0x10, 0x03, 0x39, 0x00, 0x10, 0x03, 0x41, 0x00, 0x10, 0x03, 0x42, 0x00, 0x10, // .8...9...A...B.. + 0x00, 0x3d, 0x00, 0x46, 0xff, 0xec, 0x00, 0x47, 0xff, 0xec, 0x00, 0x48, 0xff, 0xec, 0x00, 0x4a, // .=.F...G...H...J + 0xff, 0xec, 0x00, 0x54, 0xff, 0xec, 0x00, 0xa9, 0xff, 0xec, 0x00, 0xaa, 0xff, 0xec, 0x00, 0xab, // ...T............ + 0xff, 0xec, 0x00, 0xac, 0xff, 0xec, 0x00, 0xad, 0xff, 0xec, 0x00, 0xc9, 0xff, 0xec, 0x00, 0xcb, // ................ + 0xff, 0xec, 0x00, 0xcd, 0xff, 0xec, 0x00, 0xcf, 0xff, 0xec, 0x00, 0xd1, 0xff, 0xec, 0x00, 0xd5, // ................ + 0xff, 0xec, 0x00, 0xd7, 0xff, 0xec, 0x00, 0xd9, 0xff, 0xec, 0x00, 0xdb, 0xff, 0xec, 0x00, 0xdd, // ................ + 0xff, 0xec, 0x00, 0xdf, 0xff, 0xec, 0x00, 0xe1, 0xff, 0xec, 0x00, 0xe3, 0xff, 0xec, 0x00, 0xe5, // ................ + 0xff, 0xec, 0x01, 0x15, 0xff, 0xec, 0x01, 0x44, 0xff, 0xec, 0x01, 0x86, 0xff, 0xec, 0x01, 0x8b, // .......D........ + 0xff, 0xec, 0x01, 0x9c, 0xff, 0xec, 0x01, 0x9d, 0xff, 0xec, 0x01, 0xe1, 0xff, 0xec, 0x01, 0xed, // ................ + 0xff, 0xec, 0x01, 0xf0, 0xff, 0xec, 0x01, 0xfc, 0xff, 0xec, 0x01, 0xfd, 0xff, 0xec, 0x02, 0x00, // ................ + 0xff, 0xec, 0x02, 0x25, 0xff, 0xec, 0x02, 0x29, 0xff, 0xec, 0x02, 0x2d, 0xff, 0xec, 0x02, 0x54, // ...%...)...-...T + 0xff, 0xec, 0x02, 0x56, 0xff, 0xec, 0x02, 0x82, 0xff, 0xec, 0x02, 0x84, 0xff, 0xec, 0x02, 0x86, // ...V............ + 0xff, 0xec, 0x02, 0x94, 0xff, 0xec, 0x02, 0xac, 0xff, 0xec, 0x02, 0xad, 0xff, 0xec, 0x02, 0xae, // ................ + 0xff, 0xec, 0x02, 0xb8, 0xff, 0xec, 0x02, 0xe2, 0xff, 0xec, 0x02, 0xe4, 0xff, 0xec, 0x02, 0xe6, // ................ + 0xff, 0xec, 0x02, 0xe8, 0xff, 0xec, 0x02, 0xea, 0xff, 0xec, 0x02, 0xec, 0xff, 0xec, 0x02, 0xee, // ................ + 0xff, 0xec, 0x02, 0xf0, 0xff, 0xec, 0x03, 0x04, 0xff, 0xec, 0x03, 0x06, 0xff, 0xec, 0x03, 0x08, // ................ + 0xff, 0xec, 0x03, 0x0c, 0xff, 0xec, 0x00, 0x07, 0x00, 0x0f, 0xff, 0x84, 0x00, 0x11, 0xff, 0x84, // ................ + 0x00, 0x1d, 0xff, 0x84, 0x03, 0x36, 0xff, 0x84, 0x03, 0x3a, 0xff, 0x84, 0x03, 0x3e, 0xff, 0x84, // .....6...:...>.. + 0x03, 0x3f, 0xff, 0x84, 0x00, 0x10, 0x00, 0x2d, 0xff, 0xec, 0x00, 0x38, 0xff, 0xec, 0x00, 0x9b, // .?.....-...8.... + 0xff, 0xec, 0x00, 0x9c, 0xff, 0xec, 0x00, 0x9d, 0xff, 0xec, 0x00, 0x9e, 0xff, 0xec, 0x00, 0xf6, // ................ + 0xff, 0xec, 0x01, 0x2a, 0xff, 0xec, 0x01, 0x2c, 0xff, 0xec, 0x01, 0x2e, 0xff, 0xec, 0x01, 0x30, // ...*...,.......0 + 0xff, 0xec, 0x01, 0x32, 0xff, 0xec, 0x01, 0x34, 0xff, 0xec, 0x01, 0xb4, 0xff, 0xec, 0x03, 0x0d, // ...2...4........ + 0xff, 0xec, 0x03, 0x0f, 0xff, 0xec, 0x00, 0x07, 0x00, 0x5a, 0xff, 0xcc, 0x03, 0x76, 0xff, 0xb5, // .........Z...v.. + 0x03, 0x78, 0xff, 0xd6, 0x03, 0x79, 0xff, 0xb7, 0x03, 0x7a, 0xff, 0xee, 0x03, 0x7b, 0xff, 0xbb, // .x...y...z...{.. + 0x03, 0x7e, 0xff, 0xf2, 0x00, 0x03, 0x00, 0x49, 0x00, 0x0f, 0x00, 0x57, 0x00, 0x11, 0x00, 0x5a, // .~.....I...W...Z + 0x00, 0x11, 0x00, 0x04, 0x00, 0x5a, 0xff, 0xe5, 0x01, 0x80, 0xff, 0xcb, 0x01, 0xa2, 0xff, 0xe4, // .....Z.......... + 0x03, 0x7e, 0xff, 0xec, 0x00, 0x3a, 0x00, 0x26, 0xff, 0xf3, 0x00, 0x2a, 0xff, 0xf3, 0x00, 0x32, // .~...:.&...*...2 + 0xff, 0xf3, 0x00, 0x34, 0xff, 0xf3, 0x00, 0x89, 0xff, 0xf3, 0x00, 0x94, 0xff, 0xf3, 0x00, 0x95, // ...4............ + 0xff, 0xf3, 0x00, 0x96, 0xff, 0xf3, 0x00, 0x97, 0xff, 0xf3, 0x00, 0x98, 0xff, 0xf3, 0x00, 0x9a, // ................ + 0xff, 0xf3, 0x00, 0xc8, 0xff, 0xf3, 0x00, 0xca, 0xff, 0xf3, 0x00, 0xcc, 0xff, 0xf3, 0x00, 0xce, // ................ + 0xff, 0xf3, 0x00, 0xde, 0xff, 0xf3, 0x00, 0xe0, 0xff, 0xf3, 0x00, 0xe2, 0xff, 0xf3, 0x00, 0xe4, // ................ + 0xff, 0xf3, 0x01, 0x0e, 0xff, 0xf3, 0x01, 0x10, 0xff, 0xf3, 0x01, 0x12, 0xff, 0xf3, 0x01, 0x14, // ................ + 0xff, 0xf3, 0x01, 0x43, 0xff, 0xf3, 0x01, 0x4c, 0xff, 0xf3, 0x01, 0x68, 0xff, 0xf3, 0x01, 0x73, // ...C...L...h...s + 0xff, 0xf3, 0x01, 0x7a, 0xff, 0xf3, 0x01, 0x95, 0x00, 0x0d, 0x01, 0xb0, 0xff, 0xf3, 0x01, 0xca, // ...z............ + 0xff, 0xf3, 0x01, 0xcd, 0xff, 0xf3, 0x02, 0x0c, 0xff, 0xf3, 0x02, 0x1e, 0xff, 0xf3, 0x02, 0x24, // ...............$ + 0xff, 0xf3, 0x02, 0x26, 0xff, 0xf3, 0x02, 0x28, 0xff, 0xf3, 0x02, 0x2a, 0xff, 0xf3, 0x02, 0x2c, // ...&...(...*..., + 0xff, 0xf3, 0x02, 0x53, 0xff, 0xf3, 0x02, 0x55, 0xff, 0xf3, 0x02, 0x91, 0xff, 0xf3, 0x02, 0x93, // ...S...U........ + 0xff, 0xf3, 0x02, 0x95, 0xff, 0xf3, 0x02, 0xb7, 0xff, 0xf3, 0x02, 0xf5, 0xff, 0xf3, 0x02, 0xf7, // ................ + 0xff, 0xf3, 0x02, 0xf9, 0xff, 0xf3, 0x02, 0xfb, 0xff, 0xf3, 0x02, 0xfd, 0xff, 0xf3, 0x02, 0xff, // ................ + 0xff, 0xf3, 0x03, 0x01, 0xff, 0xf3, 0x03, 0x03, 0xff, 0xf3, 0x03, 0x05, 0xff, 0xf3, 0x03, 0x07, // ................ + 0xff, 0xf3, 0x03, 0x09, 0xff, 0xf3, 0x03, 0x0b, 0xff, 0xf3, 0x03, 0x23, 0xff, 0xf3, 0x00, 0x3b, // ...........#...; + 0x00, 0x26, 0xff, 0xe6, 0x00, 0x2a, 0xff, 0xe6, 0x00, 0x32, 0xff, 0xe6, 0x00, 0x34, 0xff, 0xe6, // .&...*...2...4.. + 0x00, 0x89, 0xff, 0xe6, 0x00, 0x94, 0xff, 0xe6, 0x00, 0x95, 0xff, 0xe6, 0x00, 0x96, 0xff, 0xe6, // ................ + 0x00, 0x97, 0xff, 0xe6, 0x00, 0x98, 0xff, 0xe6, 0x00, 0x9a, 0xff, 0xe6, 0x00, 0xc8, 0xff, 0xe6, // ................ + 0x00, 0xca, 0xff, 0xe6, 0x00, 0xcc, 0xff, 0xe6, 0x00, 0xce, 0xff, 0xe6, 0x00, 0xde, 0xff, 0xe6, // ................ + 0x00, 0xe0, 0xff, 0xe6, 0x00, 0xe2, 0xff, 0xe6, 0x00, 0xe4, 0xff, 0xe6, 0x01, 0x0e, 0xff, 0xe6, // ................ + 0x01, 0x10, 0xff, 0xe6, 0x01, 0x12, 0xff, 0xe6, 0x01, 0x14, 0xff, 0xe6, 0x01, 0x43, 0xff, 0xe6, // .............C.. + 0x01, 0x4c, 0xff, 0xe6, 0x01, 0x68, 0xff, 0xe6, 0x01, 0x73, 0xff, 0xe6, 0x01, 0x7a, 0xff, 0xe6, // .L...h...s...z.. + 0x01, 0x80, 0xff, 0xc2, 0x01, 0x95, 0x00, 0x10, 0x01, 0xb0, 0xff, 0xe6, 0x01, 0xca, 0xff, 0xe6, // ................ + 0x01, 0xcd, 0xff, 0xe6, 0x02, 0x0c, 0xff, 0xe6, 0x02, 0x1e, 0xff, 0xe6, 0x02, 0x24, 0xff, 0xe6, // .............$.. + 0x02, 0x26, 0xff, 0xe6, 0x02, 0x28, 0xff, 0xe6, 0x02, 0x2a, 0xff, 0xe6, 0x02, 0x2c, 0xff, 0xe6, // .&...(...*...,.. + 0x02, 0x53, 0xff, 0xe6, 0x02, 0x55, 0xff, 0xe6, 0x02, 0x91, 0xff, 0xe6, 0x02, 0x93, 0xff, 0xe6, // .S...U.......... + 0x02, 0x95, 0xff, 0xe6, 0x02, 0xb7, 0xff, 0xe6, 0x02, 0xf5, 0xff, 0xe6, 0x02, 0xf7, 0xff, 0xe6, // ................ + 0x02, 0xf9, 0xff, 0xe6, 0x02, 0xfb, 0xff, 0xe6, 0x02, 0xfd, 0xff, 0xe6, 0x02, 0xff, 0xff, 0xe6, // ................ + 0x03, 0x01, 0xff, 0xe6, 0x03, 0x03, 0xff, 0xe6, 0x03, 0x05, 0xff, 0xe6, 0x03, 0x07, 0xff, 0xe6, // ................ + 0x03, 0x09, 0xff, 0xe6, 0x03, 0x0b, 0xff, 0xe6, 0x03, 0x23, 0xff, 0xe6, 0x00, 0x37, 0x00, 0x24, // .........#...7.$ + 0xff, 0xe4, 0x00, 0x3b, 0xff, 0xd2, 0x00, 0x3c, 0xff, 0xd3, 0x00, 0x82, 0xff, 0xe4, 0x00, 0x83, // ...;...<........ + 0xff, 0xe4, 0x00, 0x84, 0xff, 0xe4, 0x00, 0x85, 0xff, 0xe4, 0x00, 0x86, 0xff, 0xe4, 0x00, 0x87, // ................ + 0xff, 0xe4, 0x00, 0x9f, 0xff, 0xd3, 0x00, 0xc2, 0xff, 0xe4, 0x00, 0xc4, 0xff, 0xe4, 0x00, 0xc6, // ................ + 0xff, 0xe4, 0x01, 0x38, 0xff, 0xd3, 0x01, 0x3a, 0xff, 0xd3, 0x01, 0x48, 0xff, 0xe4, 0x01, 0x63, // ...8...:...H...c + 0xff, 0xe4, 0x01, 0x69, 0xff, 0xd3, 0x01, 0x6c, 0xff, 0xe4, 0x01, 0x6f, 0xff, 0xe4, 0x01, 0x76, // ...i...l...o...v + 0xff, 0xe4, 0x01, 0x7f, 0xff, 0xd3, 0x01, 0x81, 0xff, 0xd2, 0x01, 0x85, 0xff, 0xd3, 0x01, 0x95, // ................ + 0xff, 0xe2, 0x01, 0xbc, 0xff, 0xe4, 0x01, 0xc2, 0xff, 0xd2, 0x01, 0xd1, 0xff, 0xd2, 0x02, 0x12, // ................ + 0xff, 0xe4, 0x02, 0x41, 0xff, 0xd2, 0x02, 0x59, 0xff, 0xd3, 0x02, 0x5b, 0xff, 0xd3, 0x02, 0x5d, // ...A...Y...[...] + 0xff, 0xd2, 0x02, 0x6c, 0xff, 0xd2, 0x02, 0x7b, 0xff, 0xe4, 0x02, 0x7d, 0xff, 0xe4, 0x02, 0x87, // ...l...{...}.... + 0xff, 0xd2, 0x02, 0xa7, 0xff, 0xd2, 0x02, 0xbf, 0xff, 0xe4, 0x02, 0xc9, 0xff, 0xe4, 0x02, 0xcb, // ................ + 0xff, 0xe4, 0x02, 0xcd, 0xff, 0xe4, 0x02, 0xcf, 0xff, 0xe4, 0x02, 0xd1, 0xff, 0xe4, 0x02, 0xd3, // ................ + 0xff, 0xe4, 0x02, 0xd5, 0xff, 0xe4, 0x02, 0xd7, 0xff, 0xe4, 0x02, 0xd9, 0xff, 0xe4, 0x02, 0xdb, // ................ + 0xff, 0xe4, 0x02, 0xdd, 0xff, 0xe4, 0x02, 0xdf, 0xff, 0xe4, 0x03, 0x1b, 0xff, 0xd3, 0x03, 0x1d, // ................ + 0xff, 0xd3, 0x03, 0x1f, 0xff, 0xd3, 0x03, 0x21, 0xff, 0xd3, 0x00, 0x28, 0x00, 0x0f, 0xff, 0x46, // .......!...(...F + 0x00, 0x11, 0xff, 0x46, 0x00, 0x1d, 0xff, 0x46, 0x00, 0x24, 0xff, 0xcd, 0x00, 0x82, 0xff, 0xcd, // ...F...F.$...... + 0x00, 0x83, 0xff, 0xcd, 0x00, 0x84, 0xff, 0xcd, 0x00, 0x85, 0xff, 0xcd, 0x00, 0x86, 0xff, 0xcd, // ................ + 0x00, 0x87, 0xff, 0xcd, 0x00, 0xc2, 0xff, 0xcd, 0x00, 0xc4, 0xff, 0xcd, 0x00, 0xc6, 0xff, 0xcd, // ................ + 0x01, 0x48, 0xff, 0xcd, 0x01, 0x63, 0xff, 0xcd, 0x01, 0x6c, 0xff, 0xcd, 0x01, 0x6f, 0xff, 0xcd, // .H...c...l...o.. + 0x01, 0x76, 0xff, 0xcd, 0x01, 0x9b, 0xff, 0xf2, 0x01, 0xbc, 0xff, 0xcd, 0x02, 0x12, 0xff, 0xcd, // .v.............. + 0x02, 0x7b, 0xff, 0xcd, 0x02, 0x7d, 0xff, 0xcd, 0x02, 0xbf, 0xff, 0xcd, 0x02, 0xc9, 0xff, 0xcd, // .{...}.......... + 0x02, 0xcb, 0xff, 0xcd, 0x02, 0xcd, 0xff, 0xcd, 0x02, 0xcf, 0xff, 0xcd, 0x02, 0xd1, 0xff, 0xcd, // ................ + 0x02, 0xd3, 0xff, 0xcd, 0x02, 0xd5, 0xff, 0xcd, 0x02, 0xd7, 0xff, 0xcd, 0x02, 0xd9, 0xff, 0xcd, // ................ + 0x02, 0xdb, 0xff, 0xcd, 0x02, 0xdd, 0xff, 0xcd, 0x02, 0xdf, 0xff, 0xcd, 0x03, 0x36, 0xff, 0x46, // .............6.F + 0x03, 0x3a, 0xff, 0x46, 0x03, 0x3e, 0xff, 0x46, 0x03, 0x3f, 0xff, 0x46, 0x00, 0x01, 0x01, 0x95, // .:.F.>.F.?.F.... + 0x00, 0x0e, 0x00, 0x02, 0x01, 0x9e, 0xff, 0xed, 0x01, 0xa1, 0xff, 0xec, 0x00, 0xb0, 0x00, 0x46, // ...............F + 0xff, 0xdc, 0x00, 0x47, 0xff, 0xdc, 0x00, 0x48, 0xff, 0xdc, 0x00, 0x4a, 0xff, 0xdc, 0x00, 0x50, // ...G...H...J...P + 0xff, 0xc2, 0x00, 0x51, 0xff, 0xc2, 0x00, 0x52, 0xff, 0xd6, 0x00, 0x53, 0xff, 0xc2, 0x00, 0x54, // ...Q...R...S...T + 0xff, 0xdc, 0x00, 0x58, 0xff, 0xdd, 0x00, 0x59, 0xff, 0xe1, 0x00, 0x5c, 0xff, 0xe1, 0x00, 0xa9, // ...X...Y........ + 0xff, 0xdc, 0x00, 0xaa, 0xff, 0xdc, 0x00, 0xab, 0xff, 0xdc, 0x00, 0xac, 0xff, 0xdc, 0x00, 0xad, // ................ + 0xff, 0xdc, 0x00, 0xb3, 0xff, 0xc2, 0x00, 0xb4, 0xff, 0xd6, 0x00, 0xb5, 0xff, 0xd6, 0x00, 0xb6, // ................ + 0xff, 0xd6, 0x00, 0xb7, 0xff, 0xd6, 0x00, 0xb8, 0xff, 0xd6, 0x00, 0xbb, 0xff, 0xdd, 0x00, 0xbc, // ................ + 0xff, 0xdd, 0x00, 0xbd, 0xff, 0xdd, 0x00, 0xbe, 0xff, 0xdd, 0x00, 0xbf, 0xff, 0xe1, 0x00, 0xc1, // ................ + 0xff, 0xe1, 0x00, 0xc9, 0xff, 0xdc, 0x00, 0xcb, 0xff, 0xdc, 0x00, 0xcd, 0xff, 0xdc, 0x00, 0xcf, // ................ + 0xff, 0xdc, 0x00, 0xd1, 0xff, 0xdc, 0x00, 0xd5, 0xff, 0xdc, 0x00, 0xd7, 0xff, 0xdc, 0x00, 0xd9, // ................ + 0xff, 0xdc, 0x00, 0xdb, 0xff, 0xdc, 0x00, 0xdd, 0xff, 0xdc, 0x00, 0xdf, 0xff, 0xdc, 0x00, 0xe1, // ................ + 0xff, 0xdc, 0x00, 0xe3, 0xff, 0xdc, 0x00, 0xe5, 0xff, 0xdc, 0x01, 0x06, 0xff, 0xc2, 0x01, 0x08, // ................ + 0xff, 0xc2, 0x01, 0x0a, 0xff, 0xc2, 0x01, 0x0b, 0xff, 0xc2, 0x01, 0x0f, 0xff, 0xd6, 0x01, 0x11, // ................ + 0xff, 0xd6, 0x01, 0x13, 0xff, 0xd6, 0x01, 0x15, 0xff, 0xdc, 0x01, 0x2b, 0xff, 0xdd, 0x01, 0x2d, // ...........+...- + 0xff, 0xdd, 0x01, 0x2f, 0xff, 0xdd, 0x01, 0x31, 0xff, 0xdd, 0x01, 0x33, 0xff, 0xdd, 0x01, 0x35, // .../...1...3...5 + 0xff, 0xdd, 0x01, 0x39, 0xff, 0xe1, 0x01, 0x44, 0xff, 0xdc, 0x01, 0x46, 0xff, 0xdd, 0x01, 0x86, // ...9...D...F.... + 0xff, 0xdc, 0x01, 0x88, 0xff, 0xc2, 0x01, 0x8a, 0xff, 0xdd, 0x01, 0x8b, 0xff, 0xdc, 0x01, 0x8d, // ................ + 0xff, 0xe1, 0x01, 0x8e, 0xff, 0xee, 0x01, 0x8f, 0xff, 0xe6, 0x01, 0x91, 0xff, 0xc2, 0x01, 0x92, // ................ + 0xff, 0xeb, 0x01, 0x93, 0xff, 0xe9, 0x01, 0x97, 0xff, 0xe1, 0x01, 0x98, 0xff, 0xf0, 0x01, 0x99, // ................ + 0xff, 0xd6, 0x01, 0x9a, 0xff, 0xe7, 0x01, 0x9c, 0xff, 0xdc, 0x01, 0x9d, 0xff, 0xdc, 0x01, 0x9e, // ................ + 0xff, 0xe3, 0x01, 0x9f, 0xff, 0xdd, 0x01, 0xa0, 0xff, 0xce, 0x01, 0xa2, 0xff, 0xd4, 0x01, 0xa3, // ................ + 0xff, 0xdb, 0x01, 0xa5, 0xff, 0xdd, 0x01, 0xa6, 0xff, 0xd6, 0x01, 0xa7, 0xff, 0xdd, 0x01, 0xdf, // ................ + 0xff, 0xc2, 0x01, 0xe1, 0xff, 0xdc, 0x01, 0xe4, 0xff, 0xc2, 0x01, 0xe5, 0xff, 0xc2, 0x01, 0xe6, // ................ + 0xff, 0xc2, 0x01, 0xe8, 0xff, 0xc2, 0x01, 0xe9, 0xff, 0xc2, 0x01, 0xea, 0xff, 0xd6, 0x01, 0xeb, // ................ + 0xff, 0xc2, 0x01, 0xec, 0xff, 0xc2, 0x01, 0xed, 0xff, 0xdc, 0x01, 0xef, 0xff, 0xe1, 0x01, 0xf0, // ................ + 0xff, 0xdc, 0x01, 0xf2, 0xff, 0xc2, 0x01, 0xf4, 0xff, 0xc2, 0x01, 0xf5, 0xff, 0xc2, 0x01, 0xf8, // ................ + 0xff, 0xc2, 0x01, 0xfa, 0xff, 0xc2, 0x01, 0xfc, 0xff, 0xdc, 0x01, 0xfd, 0xff, 0xdc, 0x01, 0xff, // ................ + 0xff, 0xc2, 0x02, 0x00, 0xff, 0xdc, 0x02, 0x06, 0xff, 0xc2, 0x02, 0x08, 0xff, 0xc2, 0x02, 0x09, // ................ + 0xff, 0xc2, 0x02, 0x0a, 0xff, 0xe1, 0x02, 0x1f, 0xff, 0xd6, 0x02, 0x21, 0xff, 0xe1, 0x02, 0x23, // ...........!...# + 0xff, 0xe1, 0x02, 0x25, 0xff, 0xdc, 0x02, 0x29, 0xff, 0xdc, 0x02, 0x2d, 0xff, 0xdc, 0x02, 0x36, // ...%...)...-...6 + 0xff, 0xc2, 0x02, 0x46, 0xff, 0xc2, 0x02, 0x4e, 0xff, 0xc2, 0x02, 0x50, 0xff, 0xc2, 0x02, 0x54, // ...F...N...P...T + 0xff, 0xdc, 0x02, 0x56, 0xff, 0xdc, 0x02, 0x5a, 0xff, 0xe1, 0x02, 0x73, 0xff, 0xc2, 0x02, 0x75, // ...V...Z...s...u + 0xff, 0xc2, 0x02, 0x79, 0xff, 0xc2, 0x02, 0x82, 0xff, 0xdc, 0x02, 0x84, 0xff, 0xdc, 0x02, 0x86, // ...y............ + 0xff, 0xdc, 0x02, 0x8e, 0xff, 0xc2, 0x02, 0x90, 0xff, 0xc2, 0x02, 0x92, 0xff, 0xd6, 0x02, 0x94, // ................ + 0xff, 0xdc, 0x02, 0x96, 0xff, 0xd6, 0x02, 0x9a, 0xff, 0xe1, 0x02, 0x9c, 0xff, 0xe1, 0x02, 0x9e, // ................ + 0xff, 0xe1, 0x02, 0xa2, 0xff, 0xc2, 0x02, 0xa4, 0xff, 0xc2, 0x02, 0xa6, 0xff, 0xc2, 0x02, 0xac, // ................ + 0xff, 0xdc, 0x02, 0xad, 0xff, 0xdc, 0x02, 0xae, 0xff, 0xdc, 0x02, 0xb8, 0xff, 0xdc, 0x02, 0xc2, // ................ + 0xff, 0xc2, 0x02, 0xe2, 0xff, 0xdc, 0x02, 0xe4, 0xff, 0xdc, 0x02, 0xe6, 0xff, 0xdc, 0x02, 0xe8, // ................ + 0xff, 0xdc, 0x02, 0xea, 0xff, 0xdc, 0x02, 0xec, 0xff, 0xdc, 0x02, 0xee, 0xff, 0xdc, 0x02, 0xf0, // ................ + 0xff, 0xdc, 0x02, 0xf6, 0xff, 0xd6, 0x02, 0xf8, 0xff, 0xd6, 0x02, 0xfa, 0xff, 0xd6, 0x02, 0xfc, // ................ + 0xff, 0xd6, 0x02, 0xfe, 0xff, 0xd6, 0x03, 0x00, 0xff, 0xd6, 0x03, 0x02, 0xff, 0xd6, 0x03, 0x04, // ................ + 0xff, 0xdc, 0x03, 0x06, 0xff, 0xdc, 0x03, 0x08, 0xff, 0xdc, 0x03, 0x0a, 0xff, 0xd6, 0x03, 0x0c, // ................ + 0xff, 0xdc, 0x03, 0x0e, 0xff, 0xdd, 0x03, 0x10, 0xff, 0xdd, 0x03, 0x12, 0xff, 0xdd, 0x03, 0x14, // ................ + 0xff, 0xdd, 0x03, 0x16, 0xff, 0xdd, 0x03, 0x18, 0xff, 0xdd, 0x03, 0x1a, 0xff, 0xdd, 0x03, 0x1c, // ................ + 0xff, 0xe1, 0x03, 0x1e, 0xff, 0xe1, 0x03, 0x20, 0xff, 0xe1, 0x03, 0x22, 0xff, 0xe1, 0x00, 0x76, // ....... ..."...v + 0x00, 0x05, 0xff, 0xda, 0x00, 0x0a, 0xff, 0xda, 0x00, 0x46, 0xff, 0xf0, 0x00, 0x47, 0xff, 0xf0, // .........F...G.. + 0x00, 0x48, 0xff, 0xf0, 0x00, 0x4a, 0xff, 0xf0, 0x00, 0x54, 0xff, 0xf0, 0x00, 0x58, 0xff, 0xef, // .H...J...T...X.. + 0x00, 0x59, 0xff, 0xdc, 0x00, 0x5c, 0xff, 0xdc, 0x00, 0xa9, 0xff, 0xf0, 0x00, 0xaa, 0xff, 0xf0, // .Y.............. + 0x00, 0xab, 0xff, 0xf0, 0x00, 0xac, 0xff, 0xf0, 0x00, 0xad, 0xff, 0xf0, 0x00, 0xbb, 0xff, 0xef, // ................ + 0x00, 0xbc, 0xff, 0xef, 0x00, 0xbd, 0xff, 0xef, 0x00, 0xbe, 0xff, 0xef, 0x00, 0xbf, 0xff, 0xdc, // ................ + 0x00, 0xc1, 0xff, 0xdc, 0x00, 0xc9, 0xff, 0xf0, 0x00, 0xcb, 0xff, 0xf0, 0x00, 0xcd, 0xff, 0xf0, // ................ + 0x00, 0xcf, 0xff, 0xf0, 0x00, 0xd1, 0xff, 0xf0, 0x00, 0xd5, 0xff, 0xf0, 0x00, 0xd7, 0xff, 0xf0, // ................ + 0x00, 0xd9, 0xff, 0xf0, 0x00, 0xdb, 0xff, 0xf0, 0x00, 0xdd, 0xff, 0xf0, 0x00, 0xdf, 0xff, 0xf0, // ................ + 0x00, 0xe1, 0xff, 0xf0, 0x00, 0xe3, 0xff, 0xf0, 0x00, 0xe5, 0xff, 0xf0, 0x01, 0x15, 0xff, 0xf0, // ................ + 0x01, 0x2b, 0xff, 0xef, 0x01, 0x2d, 0xff, 0xef, 0x01, 0x2f, 0xff, 0xef, 0x01, 0x31, 0xff, 0xef, // .+...-.../...1.. + 0x01, 0x33, 0xff, 0xef, 0x01, 0x35, 0xff, 0xef, 0x01, 0x39, 0xff, 0xdc, 0x01, 0x44, 0xff, 0xf0, // .3...5...9...D.. + 0x01, 0x46, 0xff, 0xef, 0x01, 0x51, 0xff, 0xda, 0x01, 0x86, 0xff, 0xf0, 0x01, 0x8a, 0xff, 0xef, // .F...Q.......... + 0x01, 0x8b, 0xff, 0xf0, 0x01, 0x8d, 0xff, 0xdc, 0x01, 0x92, 0xff, 0xec, 0x01, 0x95, 0x00, 0x0f, // ................ + 0x01, 0x97, 0xff, 0xdc, 0x01, 0x9a, 0xff, 0xea, 0x01, 0x9c, 0xff, 0xf0, 0x01, 0x9d, 0xff, 0xf0, // ................ + 0x01, 0x9e, 0xff, 0xdc, 0x01, 0x9f, 0xff, 0xef, 0x01, 0xa0, 0xff, 0xe7, 0x01, 0xa5, 0xff, 0xef, // ................ + 0x01, 0xa7, 0xff, 0xef, 0x01, 0xe1, 0xff, 0xf0, 0x01, 0xed, 0xff, 0xf0, 0x01, 0xef, 0xff, 0xdc, // ................ + 0x01, 0xf0, 0xff, 0xf0, 0x01, 0xfc, 0xff, 0xf0, 0x01, 0xfd, 0xff, 0xf0, 0x02, 0x00, 0xff, 0xf0, // ................ + 0x02, 0x0a, 0xff, 0xdc, 0x02, 0x21, 0xff, 0xdc, 0x02, 0x23, 0xff, 0xdc, 0x02, 0x25, 0xff, 0xf0, // .....!...#...%.. + 0x02, 0x29, 0xff, 0xf0, 0x02, 0x2d, 0xff, 0xf0, 0x02, 0x54, 0xff, 0xf0, 0x02, 0x56, 0xff, 0xf0, // .)...-...T...V.. + 0x02, 0x5a, 0xff, 0xdc, 0x02, 0x82, 0xff, 0xf0, 0x02, 0x84, 0xff, 0xf0, 0x02, 0x86, 0xff, 0xf0, // .Z.............. + 0x02, 0x94, 0xff, 0xf0, 0x02, 0x9a, 0xff, 0xdc, 0x02, 0x9c, 0xff, 0xdc, 0x02, 0x9e, 0xff, 0xdc, // ................ + 0x02, 0xac, 0xff, 0xf0, 0x02, 0xad, 0xff, 0xf0, 0x02, 0xae, 0xff, 0xf0, 0x02, 0xb8, 0xff, 0xf0, // ................ + 0x02, 0xe2, 0xff, 0xf0, 0x02, 0xe4, 0xff, 0xf0, 0x02, 0xe6, 0xff, 0xf0, 0x02, 0xe8, 0xff, 0xf0, // ................ + 0x02, 0xea, 0xff, 0xf0, 0x02, 0xec, 0xff, 0xf0, 0x02, 0xee, 0xff, 0xf0, 0x02, 0xf0, 0xff, 0xf0, // ................ + 0x03, 0x04, 0xff, 0xf0, 0x03, 0x06, 0xff, 0xf0, 0x03, 0x08, 0xff, 0xf0, 0x03, 0x0c, 0xff, 0xf0, // ................ + 0x03, 0x0e, 0xff, 0xef, 0x03, 0x10, 0xff, 0xef, 0x03, 0x12, 0xff, 0xef, 0x03, 0x14, 0xff, 0xef, // ................ + 0x03, 0x16, 0xff, 0xef, 0x03, 0x18, 0xff, 0xef, 0x03, 0x1a, 0xff, 0xef, 0x03, 0x1c, 0xff, 0xdc, // ................ + 0x03, 0x1e, 0xff, 0xdc, 0x03, 0x20, 0xff, 0xdc, 0x03, 0x22, 0xff, 0xdc, 0x03, 0x34, 0xff, 0xda, // ..... ..."...4.. + 0x03, 0x35, 0xff, 0xda, 0x03, 0x37, 0xff, 0xda, 0x03, 0x38, 0xff, 0xda, 0x03, 0x39, 0xff, 0xda, // .5...7...8...9.. + 0x03, 0x41, 0xff, 0xda, 0x03, 0x42, 0xff, 0xda, 0x00, 0x3a, 0x00, 0x05, 0xff, 0xa0, 0x00, 0x0a, // .A...B...:...... + 0xff, 0xa0, 0x00, 0x49, 0xff, 0xe9, 0x00, 0x58, 0xff, 0xf1, 0x00, 0x59, 0xff, 0xc5, 0x00, 0x5c, // ...I...X...Y.... + 0xff, 0xc5, 0x00, 0xbb, 0xff, 0xf1, 0x00, 0xbc, 0xff, 0xf1, 0x00, 0xbd, 0xff, 0xf1, 0x00, 0xbe, // ................ + 0xff, 0xf1, 0x00, 0xbf, 0xff, 0xc5, 0x00, 0xc1, 0xff, 0xc5, 0x01, 0x2b, 0xff, 0xf1, 0x01, 0x2d, // ...........+...- + 0xff, 0xf1, 0x01, 0x2f, 0xff, 0xf1, 0x01, 0x31, 0xff, 0xf1, 0x01, 0x33, 0xff, 0xf1, 0x01, 0x35, // .../...1...3...5 + 0xff, 0xf1, 0x01, 0x39, 0xff, 0xc5, 0x01, 0x46, 0xff, 0xf1, 0x01, 0x51, 0xff, 0xa0, 0x01, 0x8a, // ...9...F...Q.... + 0xff, 0xf1, 0x01, 0x8d, 0xff, 0xc5, 0x01, 0x92, 0xff, 0xee, 0x01, 0x95, 0x00, 0x10, 0x01, 0x97, // ................ + 0xff, 0xc5, 0x01, 0x9a, 0xff, 0xec, 0x01, 0x9e, 0xff, 0xbe, 0x01, 0x9f, 0xff, 0xf1, 0x01, 0xa1, // ................ + 0xff, 0xda, 0x01, 0xa5, 0xff, 0xf1, 0x01, 0xa7, 0xff, 0xf1, 0x01, 0xef, 0xff, 0xc5, 0x02, 0x0a, // ................ + 0xff, 0xc5, 0x02, 0x21, 0xff, 0xc5, 0x02, 0x23, 0xff, 0xc5, 0x02, 0x5a, 0xff, 0xc5, 0x02, 0x9a, // ...!...#...Z.... + 0xff, 0xc5, 0x02, 0x9c, 0xff, 0xc5, 0x02, 0x9e, 0xff, 0xc5, 0x03, 0x0e, 0xff, 0xf1, 0x03, 0x10, // ................ + 0xff, 0xf1, 0x03, 0x12, 0xff, 0xf1, 0x03, 0x14, 0xff, 0xf1, 0x03, 0x16, 0xff, 0xf1, 0x03, 0x18, // ................ + 0xff, 0xf1, 0x03, 0x1a, 0xff, 0xf1, 0x03, 0x1c, 0xff, 0xc5, 0x03, 0x1e, 0xff, 0xc5, 0x03, 0x20, // ............... + 0xff, 0xc5, 0x03, 0x22, 0xff, 0xc5, 0x03, 0x34, 0xff, 0xa0, 0x03, 0x35, 0xff, 0xa0, 0x03, 0x37, // ..."...4...5...7 + 0xff, 0xa0, 0x03, 0x38, 0xff, 0xa0, 0x03, 0x39, 0xff, 0xa0, 0x03, 0x41, 0xff, 0xa0, 0x03, 0x42, // ...8...9...A...B + 0xff, 0xa0, 0x00, 0x3e, 0x00, 0x46, 0xff, 0xe7, 0x00, 0x47, 0xff, 0xe7, 0x00, 0x48, 0xff, 0xe7, // ...>.F...G...H.. + 0x00, 0x4a, 0xff, 0xe7, 0x00, 0x54, 0xff, 0xe7, 0x00, 0xa9, 0xff, 0xe7, 0x00, 0xaa, 0xff, 0xe7, // .J...T.......... + 0x00, 0xab, 0xff, 0xe7, 0x00, 0xac, 0xff, 0xe7, 0x00, 0xad, 0xff, 0xe7, 0x00, 0xc9, 0xff, 0xe7, // ................ + 0x00, 0xcb, 0xff, 0xe7, 0x00, 0xcd, 0xff, 0xe7, 0x00, 0xcf, 0xff, 0xe7, 0x00, 0xd1, 0xff, 0xe7, // ................ + 0x00, 0xd5, 0xff, 0xe7, 0x00, 0xd7, 0xff, 0xe7, 0x00, 0xd9, 0xff, 0xe7, 0x00, 0xdb, 0xff, 0xe7, // ................ + 0x00, 0xdd, 0xff, 0xe7, 0x00, 0xdf, 0xff, 0xe7, 0x00, 0xe1, 0xff, 0xe7, 0x00, 0xe3, 0xff, 0xe7, // ................ + 0x00, 0xe5, 0xff, 0xe7, 0x01, 0x15, 0xff, 0xe7, 0x01, 0x44, 0xff, 0xe7, 0x01, 0x86, 0xff, 0xe7, // .........D...... + 0x01, 0x8b, 0xff, 0xe7, 0x01, 0x95, 0x00, 0x0f, 0x01, 0x9c, 0xff, 0xe7, 0x01, 0x9d, 0xff, 0xe7, // ................ + 0x01, 0xe1, 0xff, 0xe7, 0x01, 0xed, 0xff, 0xe7, 0x01, 0xf0, 0xff, 0xe7, 0x01, 0xfc, 0xff, 0xe7, // ................ + 0x01, 0xfd, 0xff, 0xe7, 0x02, 0x00, 0xff, 0xe7, 0x02, 0x25, 0xff, 0xe7, 0x02, 0x29, 0xff, 0xe7, // .........%...).. + 0x02, 0x2d, 0xff, 0xe7, 0x02, 0x54, 0xff, 0xe7, 0x02, 0x56, 0xff, 0xe7, 0x02, 0x82, 0xff, 0xe7, // .-...T...V...... + 0x02, 0x84, 0xff, 0xe7, 0x02, 0x86, 0xff, 0xe7, 0x02, 0x94, 0xff, 0xe7, 0x02, 0xac, 0xff, 0xe7, // ................ + 0x02, 0xad, 0xff, 0xe7, 0x02, 0xae, 0xff, 0xe7, 0x02, 0xb8, 0xff, 0xe7, 0x02, 0xe2, 0xff, 0xe7, // ................ + 0x02, 0xe4, 0xff, 0xe7, 0x02, 0xe6, 0xff, 0xe7, 0x02, 0xe8, 0xff, 0xe7, 0x02, 0xea, 0xff, 0xe7, // ................ + 0x02, 0xec, 0xff, 0xe7, 0x02, 0xee, 0xff, 0xe7, 0x02, 0xf0, 0xff, 0xe7, 0x03, 0x04, 0xff, 0xe7, // ................ + 0x03, 0x06, 0xff, 0xe7, 0x03, 0x08, 0xff, 0xe7, 0x03, 0x0c, 0xff, 0xe7, 0x00, 0x01, 0x01, 0x9e, // ................ + 0x00, 0x0b, 0x00, 0x7a, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x0c, 0x00, 0x46, 0xff, 0xe8, // ...z.........F.. + 0x00, 0x47, 0xff, 0xe8, 0x00, 0x48, 0xff, 0xe8, 0x00, 0x49, 0x00, 0x0c, 0x00, 0x4a, 0xff, 0xe8, // .G...H...I...J.. + 0x00, 0x52, 0xff, 0xea, 0x00, 0x54, 0xff, 0xe8, 0x00, 0x59, 0x00, 0x0b, 0x00, 0x5c, 0x00, 0x0b, // .R...T...Y...... + 0x00, 0xa9, 0xff, 0xe8, 0x00, 0xaa, 0xff, 0xe8, 0x00, 0xab, 0xff, 0xe8, 0x00, 0xac, 0xff, 0xe8, // ................ + 0x00, 0xad, 0xff, 0xe8, 0x00, 0xb4, 0xff, 0xea, 0x00, 0xb5, 0xff, 0xea, 0x00, 0xb6, 0xff, 0xea, // ................ + 0x00, 0xb7, 0xff, 0xea, 0x00, 0xb8, 0xff, 0xea, 0x00, 0xbf, 0x00, 0x0b, 0x00, 0xc1, 0x00, 0x0b, // ................ + 0x00, 0xc9, 0xff, 0xe8, 0x00, 0xcb, 0xff, 0xe8, 0x00, 0xcd, 0xff, 0xe8, 0x00, 0xcf, 0xff, 0xe8, // ................ + 0x00, 0xd1, 0xff, 0xe8, 0x00, 0xd5, 0xff, 0xe8, 0x00, 0xd7, 0xff, 0xe8, 0x00, 0xd9, 0xff, 0xe8, // ................ + 0x00, 0xdb, 0xff, 0xe8, 0x00, 0xdd, 0xff, 0xe8, 0x00, 0xdf, 0xff, 0xe8, 0x00, 0xe1, 0xff, 0xe8, // ................ + 0x00, 0xe3, 0xff, 0xe8, 0x00, 0xe5, 0xff, 0xe8, 0x01, 0x0f, 0xff, 0xea, 0x01, 0x11, 0xff, 0xea, // ................ + 0x01, 0x13, 0xff, 0xea, 0x01, 0x15, 0xff, 0xe8, 0x01, 0x39, 0x00, 0x0b, 0x01, 0x44, 0xff, 0xe8, // .........9...D.. + 0x01, 0x51, 0x00, 0x0c, 0x01, 0x86, 0xff, 0xe8, 0x01, 0x8b, 0xff, 0xe8, 0x01, 0x8d, 0x00, 0x0b, // .Q.............. + 0x01, 0x8e, 0xff, 0xed, 0x01, 0x97, 0x00, 0x0b, 0x01, 0x99, 0xff, 0xea, 0x01, 0x9a, 0x00, 0x0b, // ................ + 0x01, 0x9c, 0xff, 0xe8, 0x01, 0x9d, 0xff, 0xe8, 0x01, 0x9e, 0x00, 0x0c, 0x01, 0xa6, 0xff, 0xea, // ................ + 0x01, 0xe1, 0xff, 0xe8, 0x01, 0xea, 0xff, 0xea, 0x01, 0xed, 0xff, 0xe8, 0x01, 0xef, 0x00, 0x0b, // ................ + 0x01, 0xf0, 0xff, 0xe8, 0x01, 0xfc, 0xff, 0xe8, 0x01, 0xfd, 0xff, 0xe8, 0x02, 0x00, 0xff, 0xe8, // ................ + 0x02, 0x0a, 0x00, 0x0b, 0x02, 0x1f, 0xff, 0xea, 0x02, 0x21, 0x00, 0x0b, 0x02, 0x23, 0x00, 0x0b, // .........!...#.. + 0x02, 0x25, 0xff, 0xe8, 0x02, 0x29, 0xff, 0xe8, 0x02, 0x2d, 0xff, 0xe8, 0x02, 0x54, 0xff, 0xe8, // .%...)...-...T.. + 0x02, 0x56, 0xff, 0xe8, 0x02, 0x5a, 0x00, 0x0b, 0x02, 0x82, 0xff, 0xe8, 0x02, 0x84, 0xff, 0xe8, // .V...Z.......... + 0x02, 0x86, 0xff, 0xe8, 0x02, 0x92, 0xff, 0xea, 0x02, 0x94, 0xff, 0xe8, 0x02, 0x96, 0xff, 0xea, // ................ + 0x02, 0x9a, 0x00, 0x0b, 0x02, 0x9c, 0x00, 0x0b, 0x02, 0x9e, 0x00, 0x0b, 0x02, 0xac, 0xff, 0xe8, // ................ + 0x02, 0xad, 0xff, 0xe8, 0x02, 0xae, 0xff, 0xe8, 0x02, 0xb8, 0xff, 0xe8, 0x02, 0xe2, 0xff, 0xe8, // ................ + 0x02, 0xe4, 0xff, 0xe8, 0x02, 0xe6, 0xff, 0xe8, 0x02, 0xe8, 0xff, 0xe8, 0x02, 0xea, 0xff, 0xe8, // ................ + 0x02, 0xec, 0xff, 0xe8, 0x02, 0xee, 0xff, 0xe8, 0x02, 0xf0, 0xff, 0xe8, 0x02, 0xf6, 0xff, 0xea, // ................ + 0x02, 0xf8, 0xff, 0xea, 0x02, 0xfa, 0xff, 0xea, 0x02, 0xfc, 0xff, 0xea, 0x02, 0xfe, 0xff, 0xea, // ................ + 0x03, 0x00, 0xff, 0xea, 0x03, 0x02, 0xff, 0xea, 0x03, 0x04, 0xff, 0xe8, 0x03, 0x06, 0xff, 0xe8, // ................ + 0x03, 0x08, 0xff, 0xe8, 0x03, 0x0a, 0xff, 0xea, 0x03, 0x0c, 0xff, 0xe8, 0x03, 0x1c, 0x00, 0x0b, // ................ + 0x03, 0x1e, 0x00, 0x0b, 0x03, 0x20, 0x00, 0x0b, 0x03, 0x22, 0x00, 0x0b, 0x03, 0x34, 0x00, 0x0c, // ..... ..."...4.. + 0x03, 0x35, 0x00, 0x0c, 0x03, 0x37, 0x00, 0x0c, 0x03, 0x38, 0x00, 0x0c, 0x03, 0x39, 0x00, 0x0c, // .5...7...8...9.. + 0x03, 0x41, 0x00, 0x0c, 0x03, 0x42, 0x00, 0x0c, 0x03, 0x76, 0x00, 0x0d, 0x03, 0x79, 0x00, 0x0d, // .A...B...v...y.. + 0x03, 0x7b, 0x00, 0x0e, 0x03, 0x7c, 0xff, 0xf5, 0x03, 0x7e, 0xff, 0xec, 0x00, 0x0d, 0x00, 0x5b, // .{...|...~.....[ + 0xff, 0xed, 0x00, 0x5d, 0xff, 0xed, 0x01, 0x3c, 0xff, 0xed, 0x01, 0x3e, 0xff, 0xed, 0x01, 0x40, // ...]...<...>...@ + 0xff, 0xed, 0x01, 0xa1, 0xff, 0xe1, 0x01, 0xe2, 0xff, 0xed, 0x01, 0xf1, 0xff, 0xed, 0x02, 0x42, // ...............B + 0xff, 0xed, 0x02, 0x5e, 0xff, 0xed, 0x02, 0x6d, 0xff, 0xed, 0x02, 0x88, 0xff, 0xed, 0x02, 0xa8, // ...^...m........ + 0xff, 0xed, 0x00, 0x64, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x0a, 0x00, 0x0b, 0x00, 0x46, 0xff, 0xeb, // ...d.........F.. + 0x00, 0x47, 0xff, 0xeb, 0x00, 0x48, 0xff, 0xeb, 0x00, 0x49, 0x00, 0x0b, 0x00, 0x4a, 0xff, 0xeb, // .G...H...I...J.. + 0x00, 0x52, 0xff, 0xe9, 0x00, 0x54, 0xff, 0xeb, 0x00, 0xa9, 0xff, 0xeb, 0x00, 0xaa, 0xff, 0xeb, // .R...T.......... + 0x00, 0xab, 0xff, 0xeb, 0x00, 0xac, 0xff, 0xeb, 0x00, 0xad, 0xff, 0xeb, 0x00, 0xb4, 0xff, 0xe9, // ................ + 0x00, 0xb5, 0xff, 0xe9, 0x00, 0xb6, 0xff, 0xe9, 0x00, 0xb7, 0xff, 0xe9, 0x00, 0xb8, 0xff, 0xe9, // ................ + 0x00, 0xc9, 0xff, 0xeb, 0x00, 0xcb, 0xff, 0xeb, 0x00, 0xcd, 0xff, 0xeb, 0x00, 0xcf, 0xff, 0xeb, // ................ + 0x00, 0xd1, 0xff, 0xeb, 0x00, 0xd5, 0xff, 0xeb, 0x00, 0xd7, 0xff, 0xeb, 0x00, 0xd9, 0xff, 0xeb, // ................ + 0x00, 0xdb, 0xff, 0xeb, 0x00, 0xdd, 0xff, 0xeb, 0x00, 0xdf, 0xff, 0xeb, 0x00, 0xe1, 0xff, 0xeb, // ................ + 0x00, 0xe3, 0xff, 0xeb, 0x00, 0xe5, 0xff, 0xeb, 0x01, 0x0f, 0xff, 0xe9, 0x01, 0x11, 0xff, 0xe9, // ................ + 0x01, 0x13, 0xff, 0xe9, 0x01, 0x15, 0xff, 0xeb, 0x01, 0x44, 0xff, 0xeb, 0x01, 0x51, 0x00, 0x0b, // .........D...Q.. + 0x01, 0x86, 0xff, 0xeb, 0x01, 0x8b, 0xff, 0xeb, 0x01, 0x8e, 0xff, 0xee, 0x01, 0x8f, 0xff, 0xf2, // ................ + 0x01, 0x99, 0xff, 0xe9, 0x01, 0x9c, 0xff, 0xeb, 0x01, 0x9d, 0xff, 0xeb, 0x01, 0xa0, 0xff, 0xf1, // ................ + 0x01, 0xa1, 0x00, 0x0f, 0x01, 0xa3, 0xff, 0xef, 0x01, 0xa6, 0xff, 0xe9, 0x01, 0xe1, 0xff, 0xeb, // ................ + 0x01, 0xea, 0xff, 0xe9, 0x01, 0xed, 0xff, 0xeb, 0x01, 0xf0, 0xff, 0xeb, 0x01, 0xfc, 0xff, 0xeb, // ................ + 0x01, 0xfd, 0xff, 0xeb, 0x02, 0x00, 0xff, 0xeb, 0x02, 0x1f, 0xff, 0xe9, 0x02, 0x25, 0xff, 0xeb, // .............%.. + 0x02, 0x29, 0xff, 0xeb, 0x02, 0x2d, 0xff, 0xeb, 0x02, 0x54, 0xff, 0xeb, 0x02, 0x56, 0xff, 0xeb, // .)...-...T...V.. + 0x02, 0x82, 0xff, 0xeb, 0x02, 0x84, 0xff, 0xeb, 0x02, 0x86, 0xff, 0xeb, 0x02, 0x92, 0xff, 0xe9, // ................ + 0x02, 0x94, 0xff, 0xeb, 0x02, 0x96, 0xff, 0xe9, 0x02, 0xac, 0xff, 0xeb, 0x02, 0xad, 0xff, 0xeb, // ................ + 0x02, 0xae, 0xff, 0xeb, 0x02, 0xb8, 0xff, 0xeb, 0x02, 0xe2, 0xff, 0xeb, 0x02, 0xe4, 0xff, 0xeb, // ................ + 0x02, 0xe6, 0xff, 0xeb, 0x02, 0xe8, 0xff, 0xeb, 0x02, 0xea, 0xff, 0xeb, 0x02, 0xec, 0xff, 0xeb, // ................ + 0x02, 0xee, 0xff, 0xeb, 0x02, 0xf0, 0xff, 0xeb, 0x02, 0xf6, 0xff, 0xe9, 0x02, 0xf8, 0xff, 0xe9, // ................ + 0x02, 0xfa, 0xff, 0xe9, 0x02, 0xfc, 0xff, 0xe9, 0x02, 0xfe, 0xff, 0xe9, 0x03, 0x00, 0xff, 0xe9, // ................ + 0x03, 0x02, 0xff, 0xe9, 0x03, 0x04, 0xff, 0xeb, 0x03, 0x06, 0xff, 0xeb, 0x03, 0x08, 0xff, 0xeb, // ................ + 0x03, 0x0a, 0xff, 0xe9, 0x03, 0x0c, 0xff, 0xeb, 0x03, 0x34, 0x00, 0x0b, 0x03, 0x35, 0x00, 0x0b, // .........4...5.. + 0x03, 0x37, 0x00, 0x0b, 0x03, 0x38, 0x00, 0x0b, 0x03, 0x39, 0x00, 0x0b, 0x03, 0x41, 0x00, 0x0b, // .7...8...9...A.. + 0x03, 0x42, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x5b, 0xff, 0xf2, 0x00, 0x5d, 0xff, 0xf2, 0x01, 0x3c, // .B.....[...]...< + 0xff, 0xf2, 0x01, 0x3e, 0xff, 0xf2, 0x01, 0x40, 0xff, 0xf2, 0x01, 0xe2, 0xff, 0xf2, 0x01, 0xf1, // ...>...@........ + 0xff, 0xf2, 0x02, 0x42, 0xff, 0xf2, 0x02, 0x5e, 0xff, 0xf2, 0x02, 0x6d, 0xff, 0xf2, 0x02, 0x88, // ...B...^...m.... + 0xff, 0xf2, 0x02, 0xa8, 0xff, 0xf2, 0x00, 0x1f, 0x00, 0x59, 0xff, 0xf4, 0x00, 0x5b, 0xff, 0xf2, // .........Y...[.. + 0x00, 0x5c, 0xff, 0xf4, 0x00, 0x5d, 0xff, 0xf3, 0x00, 0xbf, 0xff, 0xf4, 0x00, 0xc1, 0xff, 0xf4, // .....].......... + 0x01, 0x39, 0xff, 0xf4, 0x01, 0x3c, 0xff, 0xf3, 0x01, 0x3e, 0xff, 0xf3, 0x01, 0x40, 0xff, 0xf3, // .9...<...>...@.. + 0x01, 0x8d, 0xff, 0xf4, 0x01, 0x97, 0xff, 0xf4, 0x01, 0xe2, 0xff, 0xf2, 0x01, 0xef, 0xff, 0xf4, // ................ + 0x01, 0xf1, 0xff, 0xf2, 0x02, 0x0a, 0xff, 0xf4, 0x02, 0x21, 0xff, 0xf4, 0x02, 0x23, 0xff, 0xf4, // .........!...#.. + 0x02, 0x42, 0xff, 0xf2, 0x02, 0x5a, 0xff, 0xf4, 0x02, 0x5e, 0xff, 0xf2, 0x02, 0x6d, 0xff, 0xf2, // .B...Z...^...m.. + 0x02, 0x88, 0xff, 0xf2, 0x02, 0x9a, 0xff, 0xf4, 0x02, 0x9c, 0xff, 0xf4, 0x02, 0x9e, 0xff, 0xf4, // ................ + 0x02, 0xa8, 0xff, 0xf2, 0x03, 0x1c, 0xff, 0xf4, 0x03, 0x1e, 0xff, 0xf4, 0x03, 0x20, 0xff, 0xf4, // ............. .. + 0x03, 0x22, 0xff, 0xf4, 0x00, 0x5b, 0x00, 0x05, 0xff, 0xca, 0x00, 0x0a, 0xff, 0xca, 0x00, 0x37, // ."...[.........7 + 0xff, 0xd2, 0x00, 0x39, 0xff, 0xd4, 0x00, 0x3b, 0xff, 0xf4, 0x00, 0x3c, 0xff, 0xd3, 0x00, 0x59, // ...9...;...<...Y + 0xff, 0xe6, 0x00, 0x5b, 0xff, 0xef, 0x00, 0x5c, 0xff, 0xe6, 0x00, 0x9f, 0xff, 0xd3, 0x00, 0xbf, // ...[............ + 0xff, 0xe6, 0x00, 0xc1, 0xff, 0xe6, 0x01, 0x24, 0xff, 0xd2, 0x01, 0x26, 0xff, 0xd2, 0x01, 0x38, // .......$...&...8 + 0xff, 0xd3, 0x01, 0x39, 0xff, 0xe6, 0x01, 0x3a, 0xff, 0xd3, 0x01, 0x51, 0xff, 0xca, 0x01, 0x69, // ...9...:...Q...i + 0xff, 0xd3, 0x01, 0x7f, 0xff, 0xd3, 0x01, 0x81, 0xff, 0xf4, 0x01, 0x85, 0xff, 0xd3, 0x01, 0x8d, // ................ + 0xff, 0xe6, 0x01, 0x97, 0xff, 0xe6, 0x01, 0xae, 0xff, 0xd2, 0x01, 0xb7, 0xff, 0xd2, 0x01, 0xba, // ................ + 0xff, 0xed, 0x01, 0xc2, 0xff, 0xf4, 0x01, 0xce, 0xff, 0xd2, 0x01, 0xcf, 0xff, 0xed, 0x01, 0xd1, // ................ + 0xff, 0xf4, 0x01, 0xd3, 0xff, 0xe1, 0x01, 0xd8, 0xff, 0xd4, 0x01, 0xe2, 0xff, 0xef, 0x01, 0xee, // ................ + 0xff, 0xc9, 0x01, 0xef, 0xff, 0xe6, 0x01, 0xf1, 0xff, 0xef, 0x02, 0x0a, 0xff, 0xe6, 0x02, 0x0d, // ................ + 0xff, 0xe5, 0x02, 0x20, 0xff, 0xd4, 0x02, 0x21, 0xff, 0xe6, 0x02, 0x22, 0xff, 0xd4, 0x02, 0x23, // ... ...!..."...# + 0xff, 0xe6, 0x02, 0x2b, 0xff, 0xe3, 0x02, 0x41, 0xff, 0xf4, 0x02, 0x42, 0xff, 0xef, 0x02, 0x4b, // ...+...A...B...K + 0xff, 0xd2, 0x02, 0x4c, 0xff, 0xc4, 0x02, 0x57, 0xff, 0xd2, 0x02, 0x59, 0xff, 0xd3, 0x02, 0x5a, // ...L...W...Y...Z + 0xff, 0xe6, 0x02, 0x5b, 0xff, 0xd3, 0x02, 0x5d, 0xff, 0xf4, 0x02, 0x5e, 0xff, 0xef, 0x02, 0x5f, // ...[...]...^..._ + 0xff, 0xd2, 0x02, 0x61, 0xff, 0xe1, 0x02, 0x63, 0xff, 0xe1, 0x02, 0x6c, 0xff, 0xf4, 0x02, 0x6d, // ...a...c...l...m + 0xff, 0xef, 0x02, 0x76, 0xff, 0xe1, 0x02, 0x87, 0xff, 0xf4, 0x02, 0x88, 0xff, 0xef, 0x02, 0x99, // ...v............ + 0xff, 0xed, 0x02, 0x9a, 0xff, 0xe6, 0x02, 0x9b, 0xff, 0xed, 0x02, 0x9c, 0xff, 0xe6, 0x02, 0x9d, // ................ + 0xff, 0xed, 0x02, 0x9e, 0xff, 0xe6, 0x02, 0x9f, 0xff, 0xe1, 0x02, 0xa7, 0xff, 0xf4, 0x02, 0xa8, // ................ + 0xff, 0xef, 0x02, 0xaf, 0xff, 0xd4, 0x02, 0xb0, 0xff, 0xf5, 0x02, 0xb1, 0xff, 0xe7, 0x02, 0xb9, // ................ + 0xff, 0x67, 0x02, 0xba, 0xff, 0xc9, 0x03, 0x1b, 0xff, 0xd3, 0x03, 0x1c, 0xff, 0xe6, 0x03, 0x1d, // .g.............. + 0xff, 0xd3, 0x03, 0x1e, 0xff, 0xe6, 0x03, 0x1f, 0xff, 0xd3, 0x03, 0x20, 0xff, 0xe6, 0x03, 0x21, // ........... ...! + 0xff, 0xd3, 0x03, 0x22, 0xff, 0xe6, 0x03, 0x34, 0xff, 0xca, 0x03, 0x35, 0xff, 0xca, 0x03, 0x37, // ..."...4...5...7 + 0xff, 0xca, 0x03, 0x38, 0xff, 0xca, 0x03, 0x39, 0xff, 0xca, 0x03, 0x41, 0xff, 0xca, 0x03, 0x42, // ...8...9...A...B + 0xff, 0xca, 0x00, 0x24, 0x00, 0x37, 0xff, 0xbe, 0x00, 0x59, 0xff, 0xef, 0x00, 0x5c, 0xff, 0xef, // ...$.7...Y...... + 0x00, 0xbf, 0xff, 0xef, 0x00, 0xc1, 0xff, 0xef, 0x01, 0x24, 0xff, 0xbe, 0x01, 0x26, 0xff, 0xbe, // .........$...&.. + 0x01, 0x39, 0xff, 0xef, 0x01, 0x8d, 0xff, 0xef, 0x01, 0x97, 0xff, 0xef, 0x01, 0xae, 0xff, 0xbe, // .9.............. + 0x01, 0xb7, 0xff, 0xbe, 0x01, 0xce, 0xff, 0xbe, 0x01, 0xd8, 0xff, 0xc9, 0x01, 0xee, 0xff, 0xdf, // ................ + 0x01, 0xef, 0xff, 0xef, 0x02, 0x0a, 0xff, 0xef, 0x02, 0x0d, 0xff, 0xed, 0x02, 0x21, 0xff, 0xef, // .............!.. + 0x02, 0x23, 0xff, 0xef, 0x02, 0x2b, 0xff, 0xeb, 0x02, 0x4b, 0xff, 0xbe, 0x02, 0x4c, 0xff, 0xdf, // .#...+...K...L.. + 0x02, 0x57, 0xff, 0xbe, 0x02, 0x5a, 0xff, 0xef, 0x02, 0x5f, 0xff, 0xbe, 0x02, 0x67, 0xff, 0xe9, // .W...Z..._...g.. + 0x02, 0x9a, 0xff, 0xef, 0x02, 0x9c, 0xff, 0xef, 0x02, 0x9e, 0xff, 0xef, 0x02, 0xb0, 0xff, 0xf5, // ................ + 0x02, 0xba, 0xff, 0xe0, 0x03, 0x1c, 0xff, 0xef, 0x03, 0x1e, 0xff, 0xef, 0x03, 0x20, 0xff, 0xef, // ............. .. + 0x03, 0x22, 0xff, 0xef, 0x00, 0x3b, 0x00, 0x37, 0xff, 0xe6, 0x00, 0x39, 0xff, 0xe7, 0x00, 0x3b, // ."...;.7...9...; + 0xff, 0xf2, 0x00, 0x3c, 0xff, 0xe7, 0x00, 0x5b, 0xff, 0xf1, 0x00, 0x9f, 0xff, 0xe7, 0x01, 0x24, // ...<...[.......$ + 0xff, 0xe6, 0x01, 0x26, 0xff, 0xe6, 0x01, 0x38, 0xff, 0xe7, 0x01, 0x3a, 0xff, 0xe7, 0x01, 0x69, // ...&...8...:...i + 0xff, 0xe7, 0x01, 0x7f, 0xff, 0xe7, 0x01, 0x81, 0xff, 0xf2, 0x01, 0x85, 0xff, 0xe7, 0x01, 0xae, // ................ + 0xff, 0xe6, 0x01, 0xb7, 0xff, 0xe6, 0x01, 0xba, 0xff, 0xee, 0x01, 0xc2, 0xff, 0xf2, 0x01, 0xce, // ................ + 0xff, 0xe6, 0x01, 0xcf, 0xff, 0xee, 0x01, 0xd1, 0xff, 0xf2, 0x01, 0xd3, 0xff, 0xe8, 0x01, 0xd8, // ................ + 0xff, 0xe6, 0x01, 0xe2, 0xff, 0xf1, 0x01, 0xee, 0xff, 0xd0, 0x01, 0xf1, 0xff, 0xf1, 0x02, 0x20, // ............... + 0xff, 0xe7, 0x02, 0x22, 0xff, 0xe7, 0x02, 0x41, 0xff, 0xf2, 0x02, 0x42, 0xff, 0xf1, 0x02, 0x4b, // ..."...A...B...K + 0xff, 0xe6, 0x02, 0x4c, 0xff, 0xce, 0x02, 0x57, 0xff, 0xe6, 0x02, 0x59, 0xff, 0xe7, 0x02, 0x5b, // ...L...W...Y...[ + 0xff, 0xe7, 0x02, 0x5d, 0xff, 0xf2, 0x02, 0x5e, 0xff, 0xf1, 0x02, 0x5f, 0xff, 0xe6, 0x02, 0x61, // ...]...^..._...a + 0xff, 0xe8, 0x02, 0x63, 0xff, 0xe8, 0x02, 0x6c, 0xff, 0xf2, 0x02, 0x6d, 0xff, 0xf1, 0x02, 0x76, // ...c...l...m...v + 0xff, 0xe8, 0x02, 0x87, 0xff, 0xf2, 0x02, 0x88, 0xff, 0xf1, 0x02, 0x99, 0xff, 0xee, 0x02, 0x9b, // ................ + 0xff, 0xee, 0x02, 0x9d, 0xff, 0xee, 0x02, 0x9f, 0xff, 0xe8, 0x02, 0xa7, 0xff, 0xf2, 0x02, 0xa8, // ................ + 0xff, 0xf1, 0x02, 0xaf, 0xff, 0xe7, 0x02, 0xb1, 0xff, 0xed, 0x02, 0xb9, 0xff, 0xe6, 0x02, 0xba, // ................ + 0xff, 0xd0, 0x03, 0x1b, 0xff, 0xe7, 0x03, 0x1d, 0xff, 0xe7, 0x03, 0x1f, 0xff, 0xe7, 0x03, 0x21, // ...............! + 0xff, 0xe7, 0x00, 0x02, 0x02, 0x16, 0x00, 0x0b, 0x02, 0xb9, 0xff, 0xe6, 0x00, 0x8e, 0x00, 0x24, // ...............$ + 0x00, 0x10, 0x00, 0x26, 0xff, 0xe8, 0x00, 0x2a, 0xff, 0xe8, 0x00, 0x32, 0xff, 0xe8, 0x00, 0x34, // ...&...*...2...4 + 0xff, 0xe8, 0x00, 0x37, 0xff, 0xe0, 0x00, 0x39, 0xff, 0xe0, 0x00, 0x3c, 0xff, 0xdf, 0x00, 0x82, // ...7...9...<.... + 0x00, 0x10, 0x00, 0x83, 0x00, 0x10, 0x00, 0x84, 0x00, 0x10, 0x00, 0x85, 0x00, 0x10, 0x00, 0x86, // ................ + 0x00, 0x10, 0x00, 0x87, 0x00, 0x10, 0x00, 0x89, 0xff, 0xe8, 0x00, 0x94, 0xff, 0xe8, 0x00, 0x95, // ................ + 0xff, 0xe8, 0x00, 0x96, 0xff, 0xe8, 0x00, 0x97, 0xff, 0xe8, 0x00, 0x98, 0xff, 0xe8, 0x00, 0x9a, // ................ + 0xff, 0xe8, 0x00, 0x9f, 0xff, 0xdf, 0x00, 0xc2, 0x00, 0x10, 0x00, 0xc4, 0x00, 0x10, 0x00, 0xc6, // ................ + 0x00, 0x10, 0x00, 0xc8, 0xff, 0xe8, 0x00, 0xca, 0xff, 0xe8, 0x00, 0xcc, 0xff, 0xe8, 0x00, 0xce, // ................ + 0xff, 0xe8, 0x00, 0xde, 0xff, 0xe8, 0x00, 0xe0, 0xff, 0xe8, 0x00, 0xe2, 0xff, 0xe8, 0x00, 0xe4, // ................ + 0xff, 0xe8, 0x01, 0x0e, 0xff, 0xe8, 0x01, 0x10, 0xff, 0xe8, 0x01, 0x12, 0xff, 0xe8, 0x01, 0x14, // ................ + 0xff, 0xe8, 0x01, 0x24, 0xff, 0xe0, 0x01, 0x26, 0xff, 0xe0, 0x01, 0x38, 0xff, 0xdf, 0x01, 0x3a, // ...$...&...8...: + 0xff, 0xdf, 0x01, 0x43, 0xff, 0xe8, 0x01, 0x48, 0x00, 0x10, 0x01, 0x4c, 0xff, 0xe8, 0x01, 0x63, // ...C...H...L...c + 0x00, 0x10, 0x01, 0x68, 0xff, 0xe8, 0x01, 0x69, 0xff, 0xdf, 0x01, 0x6c, 0x00, 0x10, 0x01, 0x6f, // ...h...i...l...o + 0x00, 0x10, 0x01, 0x73, 0xff, 0xe8, 0x01, 0x76, 0x00, 0x10, 0x01, 0x7a, 0xff, 0xe8, 0x01, 0x7f, // ...s...v...z.... + 0xff, 0xdf, 0x01, 0x85, 0xff, 0xdf, 0x01, 0xae, 0xff, 0xe0, 0x01, 0xb0, 0xff, 0xe8, 0x01, 0xb5, // ................ + 0x00, 0x10, 0x01, 0xb7, 0xff, 0xe0, 0x01, 0xbc, 0x00, 0x10, 0x01, 0xc0, 0x00, 0x14, 0x01, 0xc7, // ................ + 0x00, 0x10, 0x01, 0xca, 0xff, 0xe8, 0x01, 0xcd, 0xff, 0xe8, 0x01, 0xce, 0xff, 0xe0, 0x01, 0xd3, // ................ + 0xff, 0xe1, 0x01, 0xd8, 0xff, 0xe0, 0x01, 0xe0, 0x00, 0x13, 0x01, 0xe7, 0x00, 0x10, 0x01, 0xf3, // ................ + 0xff, 0xe0, 0x02, 0x05, 0x00, 0x10, 0x02, 0x0c, 0xff, 0xe8, 0x02, 0x12, 0x00, 0x10, 0x02, 0x1e, // ................ + 0xff, 0xe8, 0x02, 0x20, 0xff, 0xe0, 0x02, 0x22, 0xff, 0xe0, 0x02, 0x24, 0xff, 0xe8, 0x02, 0x26, // ... ..."...$...& + 0xff, 0xe8, 0x02, 0x28, 0xff, 0xe8, 0x02, 0x2a, 0xff, 0xe8, 0x02, 0x2c, 0xff, 0xe8, 0x02, 0x4b, // ...(...*...,...K + 0xff, 0xe0, 0x02, 0x53, 0xff, 0xe8, 0x02, 0x55, 0xff, 0xe8, 0x02, 0x57, 0xff, 0xe0, 0x02, 0x59, // ...S...U...W...Y + 0xff, 0xdf, 0x02, 0x5b, 0xff, 0xdf, 0x02, 0x5f, 0xff, 0xe0, 0x02, 0x61, 0xff, 0xe1, 0x02, 0x62, // ...[..._...a...b + 0xff, 0xe0, 0x02, 0x63, 0xff, 0xe1, 0x02, 0x64, 0xff, 0xe0, 0x02, 0x68, 0xff, 0xe1, 0x02, 0x70, // ...c...d...h...p + 0x00, 0x10, 0x02, 0x71, 0x00, 0x10, 0x02, 0x76, 0xff, 0xe1, 0x02, 0x77, 0xff, 0xe0, 0x02, 0x7b, // ...q...v...w...{ + 0x00, 0x10, 0x02, 0x7d, 0x00, 0x10, 0x02, 0x83, 0xff, 0xe9, 0x02, 0x91, 0xff, 0xe8, 0x02, 0x93, // ...}............ + 0xff, 0xe8, 0x02, 0x95, 0xff, 0xe8, 0x02, 0x9f, 0xff, 0xe1, 0x02, 0xa0, 0xff, 0xe0, 0x02, 0xaf, // ................ + 0xff, 0xdf, 0x02, 0xb1, 0xff, 0xde, 0x02, 0xb3, 0x00, 0x10, 0x02, 0xb7, 0xff, 0xe8, 0x02, 0xb9, // ................ + 0xff, 0xdf, 0x02, 0xbb, 0xff, 0xf2, 0x02, 0xbd, 0x00, 0x10, 0x02, 0xbe, 0x00, 0x10, 0x02, 0xbf, // ................ + 0x00, 0x10, 0x02, 0xc9, 0x00, 0x10, 0x02, 0xcb, 0x00, 0x10, 0x02, 0xcd, 0x00, 0x10, 0x02, 0xcf, // ................ + 0x00, 0x10, 0x02, 0xd1, 0x00, 0x10, 0x02, 0xd3, 0x00, 0x10, 0x02, 0xd5, 0x00, 0x10, 0x02, 0xd7, // ................ + 0x00, 0x10, 0x02, 0xd9, 0x00, 0x10, 0x02, 0xdb, 0x00, 0x10, 0x02, 0xdd, 0x00, 0x10, 0x02, 0xdf, // ................ + 0x00, 0x10, 0x02, 0xf5, 0xff, 0xe8, 0x02, 0xf7, 0xff, 0xe8, 0x02, 0xf9, 0xff, 0xe8, 0x02, 0xfb, // ................ + 0xff, 0xe8, 0x02, 0xfd, 0xff, 0xe8, 0x02, 0xff, 0xff, 0xe8, 0x03, 0x01, 0xff, 0xe8, 0x03, 0x03, // ................ + 0xff, 0xe8, 0x03, 0x05, 0xff, 0xe8, 0x03, 0x07, 0xff, 0xe8, 0x03, 0x09, 0xff, 0xe8, 0x03, 0x0b, // ................ + 0xff, 0xe8, 0x03, 0x1b, 0xff, 0xdf, 0x03, 0x1d, 0xff, 0xdf, 0x03, 0x1f, 0xff, 0xdf, 0x03, 0x21, // ...............! + 0xff, 0xdf, 0x03, 0x23, 0xff, 0xe8, 0x00, 0x31, 0x00, 0x1a, 0xff, 0xf2, 0x00, 0x37, 0xff, 0xf1, // ...#...1.....7.. + 0x00, 0x39, 0xff, 0xf4, 0x00, 0x3b, 0xff, 0xf4, 0x00, 0x3c, 0xff, 0xf0, 0x00, 0x9f, 0xff, 0xf0, // .9...;...<...... + 0x01, 0x24, 0xff, 0xf1, 0x01, 0x26, 0xff, 0xf1, 0x01, 0x38, 0xff, 0xf0, 0x01, 0x3a, 0xff, 0xf0, // .$...&...8...:.. + 0x01, 0x69, 0xff, 0xf0, 0x01, 0x7f, 0xff, 0xf0, 0x01, 0x81, 0xff, 0xf4, 0x01, 0x85, 0xff, 0xf0, // .i.............. + 0x01, 0xae, 0xff, 0xf1, 0x01, 0xb5, 0xff, 0xf5, 0x01, 0xb7, 0xff, 0xf1, 0x01, 0xba, 0xff, 0xf3, // ................ + 0x01, 0xc2, 0xff, 0xf4, 0x01, 0xc7, 0xff, 0xf5, 0x01, 0xce, 0xff, 0xf1, 0x01, 0xcf, 0xff, 0xf3, // ................ + 0x01, 0xd1, 0xff, 0xf4, 0x01, 0xd8, 0xff, 0xf1, 0x02, 0x20, 0xff, 0xf4, 0x02, 0x22, 0xff, 0xf4, // ......... ...".. + 0x02, 0x41, 0xff, 0xf4, 0x02, 0x4b, 0xff, 0xf1, 0x02, 0x57, 0xff, 0xf1, 0x02, 0x59, 0xff, 0xf0, // .A...K...W...Y.. + 0x02, 0x5b, 0xff, 0xf0, 0x02, 0x5d, 0xff, 0xf4, 0x02, 0x5f, 0xff, 0xf1, 0x02, 0x6c, 0xff, 0xf4, // .[...]..._...l.. + 0x02, 0x70, 0xff, 0xf5, 0x02, 0x87, 0xff, 0xf4, 0x02, 0x99, 0xff, 0xf3, 0x02, 0x9b, 0xff, 0xf3, // .p.............. + 0x02, 0x9d, 0xff, 0xf3, 0x02, 0xa7, 0xff, 0xf4, 0x02, 0xaf, 0xff, 0xf2, 0x02, 0xb1, 0xff, 0xf2, // ................ + 0x02, 0xb3, 0xff, 0xf5, 0x02, 0xb9, 0xff, 0xf2, 0x02, 0xbd, 0xff, 0xf5, 0x03, 0x1b, 0xff, 0xf0, // ................ + 0x03, 0x1d, 0xff, 0xf0, 0x03, 0x1f, 0xff, 0xf0, 0x03, 0x21, 0xff, 0xf0, 0x00, 0x08, 0x00, 0x57, // .........!.....W + 0x00, 0x0e, 0x00, 0x88, 0xfe, 0xdb, 0x01, 0x8e, 0xff, 0xd8, 0x01, 0x95, 0xff, 0x9a, 0x01, 0x9b, // ................ + 0xff, 0xc8, 0x01, 0xc0, 0xff, 0x15, 0x01, 0xe0, 0xff, 0x55, 0x02, 0xab, 0xff, 0xd0, 0x00, 0x64, // .........U.....d + 0x00, 0x24, 0x00, 0x0f, 0x00, 0x37, 0xff, 0xe6, 0x00, 0x39, 0xff, 0xe6, 0x00, 0x3b, 0x00, 0x0e, // .$...7...9...;.. + 0x00, 0x3c, 0xff, 0xe6, 0x00, 0x82, 0x00, 0x0f, 0x00, 0x83, 0x00, 0x0f, 0x00, 0x84, 0x00, 0x0f, // .<.............. + 0x00, 0x85, 0x00, 0x0f, 0x00, 0x86, 0x00, 0x0f, 0x00, 0x87, 0x00, 0x0f, 0x00, 0x9f, 0xff, 0xe6, // ................ + 0x00, 0xc2, 0x00, 0x0f, 0x00, 0xc4, 0x00, 0x0f, 0x00, 0xc6, 0x00, 0x0f, 0x01, 0x24, 0xff, 0xe6, // .............$.. + 0x01, 0x26, 0xff, 0xe6, 0x01, 0x38, 0xff, 0xe6, 0x01, 0x3a, 0xff, 0xe6, 0x01, 0x48, 0x00, 0x0f, // .&...8...:...H.. + 0x01, 0x63, 0x00, 0x0f, 0x01, 0x69, 0xff, 0xe6, 0x01, 0x6c, 0x00, 0x0f, 0x01, 0x6f, 0x00, 0x0f, // .c...i...l...o.. + 0x01, 0x76, 0x00, 0x0f, 0x01, 0x7f, 0xff, 0xe6, 0x01, 0x81, 0x00, 0x0e, 0x01, 0x85, 0xff, 0xe6, // .v.............. + 0x01, 0xae, 0xff, 0xe6, 0x01, 0xb5, 0x00, 0x0e, 0x01, 0xb7, 0xff, 0xe6, 0x01, 0xba, 0x00, 0x0b, // ................ + 0x01, 0xbc, 0x00, 0x0f, 0x01, 0xc0, 0x00, 0x13, 0x01, 0xc2, 0x00, 0x0e, 0x01, 0xc7, 0x00, 0x0e, // ................ + 0x01, 0xce, 0xff, 0xe6, 0x01, 0xcf, 0x00, 0x0b, 0x01, 0xd1, 0x00, 0x0e, 0x01, 0xd3, 0xff, 0xe5, // ................ + 0x01, 0xd8, 0xff, 0xe6, 0x01, 0xd9, 0xff, 0xf4, 0x01, 0xe0, 0x00, 0x12, 0x01, 0xe7, 0x00, 0x0f, // ................ + 0x01, 0xee, 0xff, 0xe7, 0x01, 0xf3, 0xff, 0xe8, 0x02, 0x05, 0x00, 0x0f, 0x02, 0x12, 0x00, 0x0f, // ................ + 0x02, 0x20, 0xff, 0xe6, 0x02, 0x22, 0xff, 0xe6, 0x02, 0x41, 0x00, 0x0e, 0x02, 0x4b, 0xff, 0xe6, // . ..."...A...K.. + 0x02, 0x4c, 0xff, 0xe7, 0x02, 0x57, 0xff, 0xe6, 0x02, 0x59, 0xff, 0xe6, 0x02, 0x5b, 0xff, 0xe6, // .L...W...Y...[.. + 0x02, 0x5d, 0x00, 0x0e, 0x02, 0x5f, 0xff, 0xe6, 0x02, 0x61, 0xff, 0xe5, 0x02, 0x62, 0xff, 0xe8, // .]..._...a...b.. + 0x02, 0x63, 0xff, 0xe5, 0x02, 0x64, 0xff, 0xe8, 0x02, 0x6c, 0x00, 0x0e, 0x02, 0x70, 0x00, 0x0e, // .c...d...l...p.. + 0x02, 0x71, 0x00, 0x0f, 0x02, 0x76, 0xff, 0xe5, 0x02, 0x77, 0xff, 0xe8, 0x02, 0x7b, 0x00, 0x0f, // .q...v...w...{.. + 0x02, 0x7d, 0x00, 0x0f, 0x02, 0x87, 0x00, 0x0e, 0x02, 0x99, 0x00, 0x0b, 0x02, 0x9b, 0x00, 0x0b, // .}.............. + 0x02, 0x9d, 0x00, 0x0b, 0x02, 0x9f, 0xff, 0xe5, 0x02, 0xa0, 0xff, 0xe8, 0x02, 0xa7, 0x00, 0x0e, // ................ + 0x02, 0xaf, 0xff, 0xe6, 0x02, 0xb1, 0xff, 0xe6, 0x02, 0xb3, 0x00, 0x0e, 0x02, 0xb9, 0xff, 0xe6, // ................ + 0x02, 0xba, 0xff, 0xe7, 0x02, 0xbd, 0x00, 0x0e, 0x02, 0xbe, 0x00, 0x0f, 0x02, 0xbf, 0x00, 0x0f, // ................ + 0x02, 0xc9, 0x00, 0x0f, 0x02, 0xcb, 0x00, 0x0f, 0x02, 0xcd, 0x00, 0x0f, 0x02, 0xcf, 0x00, 0x0f, // ................ + 0x02, 0xd1, 0x00, 0x0f, 0x02, 0xd3, 0x00, 0x0f, 0x02, 0xd5, 0x00, 0x0f, 0x02, 0xd7, 0x00, 0x0f, // ................ + 0x02, 0xd9, 0x00, 0x0f, 0x02, 0xdb, 0x00, 0x0f, 0x02, 0xdd, 0x00, 0x0f, 0x02, 0xdf, 0x00, 0x0f, // ................ + 0x03, 0x1b, 0xff, 0xe6, 0x03, 0x1d, 0xff, 0xe6, 0x03, 0x1f, 0xff, 0xe6, 0x03, 0x21, 0xff, 0xe6, // .............!.. + 0x00, 0x2f, 0x00, 0x37, 0xff, 0xe3, 0x00, 0x3b, 0xff, 0xe5, 0x00, 0x3c, 0xff, 0xe4, 0x00, 0x9f, // ./.7...;...<.... + 0xff, 0xe4, 0x01, 0x24, 0xff, 0xe3, 0x01, 0x26, 0xff, 0xe3, 0x01, 0x38, 0xff, 0xe4, 0x01, 0x3a, // ...$...&...8...: + 0xff, 0xe4, 0x01, 0x69, 0xff, 0xe4, 0x01, 0x7f, 0xff, 0xe4, 0x01, 0x81, 0xff, 0xe5, 0x01, 0x85, // ...i............ + 0xff, 0xe4, 0x01, 0xae, 0xff, 0xe3, 0x01, 0xb5, 0xff, 0xe5, 0x01, 0xb7, 0xff, 0xe3, 0x01, 0xba, // ................ + 0xff, 0xe9, 0x01, 0xc0, 0xff, 0xe2, 0x01, 0xc2, 0xff, 0xe5, 0x01, 0xc7, 0xff, 0xe5, 0x01, 0xce, // ................ + 0xff, 0xe3, 0x01, 0xcf, 0xff, 0xe9, 0x01, 0xd1, 0xff, 0xe5, 0x01, 0xe7, 0xff, 0xea, 0x02, 0x05, // ................ + 0xff, 0xea, 0x02, 0x41, 0xff, 0xe5, 0x02, 0x4b, 0xff, 0xe3, 0x02, 0x57, 0xff, 0xe3, 0x02, 0x59, // ...A...K...W...Y + 0xff, 0xe4, 0x02, 0x5b, 0xff, 0xe4, 0x02, 0x5d, 0xff, 0xe5, 0x02, 0x5f, 0xff, 0xe3, 0x02, 0x6c, // ...[...]..._...l + 0xff, 0xe5, 0x02, 0x70, 0xff, 0xe5, 0x02, 0x71, 0xff, 0xea, 0x02, 0x87, 0xff, 0xe5, 0x02, 0x99, // ...p...q........ + 0xff, 0xe9, 0x02, 0x9b, 0xff, 0xe9, 0x02, 0x9d, 0xff, 0xe9, 0x02, 0xa7, 0xff, 0xe5, 0x02, 0xb3, // ................ + 0xff, 0xe5, 0x02, 0xb9, 0xff, 0xe4, 0x02, 0xbd, 0xff, 0xe5, 0x02, 0xbe, 0xff, 0xea, 0x03, 0x1b, // ................ + 0xff, 0xe4, 0x03, 0x1d, 0xff, 0xe4, 0x03, 0x1f, 0xff, 0xe4, 0x03, 0x21, 0xff, 0xe4, 0x00, 0x22, // ...........!..." + 0x00, 0x37, 0xff, 0xe2, 0x00, 0x3b, 0xff, 0xe4, 0x01, 0x24, 0xff, 0xe2, 0x01, 0x26, 0xff, 0xe2, // .7...;...$...&.. + 0x01, 0x81, 0xff, 0xe4, 0x01, 0xae, 0xff, 0xe2, 0x01, 0xb5, 0xff, 0xe4, 0x01, 0xb7, 0xff, 0xe2, // ................ + 0x01, 0xba, 0xff, 0xe9, 0x01, 0xc0, 0xff, 0xe1, 0x01, 0xc2, 0xff, 0xe4, 0x01, 0xc7, 0xff, 0xe4, // ................ + 0x01, 0xce, 0xff, 0xe2, 0x01, 0xcf, 0xff, 0xe9, 0x01, 0xd1, 0xff, 0xe4, 0x01, 0xe0, 0xff, 0xe4, // ................ + 0x01, 0xe7, 0xff, 0xeb, 0x02, 0x05, 0xff, 0xeb, 0x02, 0x41, 0xff, 0xe4, 0x02, 0x4b, 0xff, 0xe2, // .........A...K.. + 0x02, 0x57, 0xff, 0xe2, 0x02, 0x5d, 0xff, 0xe4, 0x02, 0x5f, 0xff, 0xe2, 0x02, 0x6c, 0xff, 0xe4, // .W...]..._...l.. + 0x02, 0x70, 0xff, 0xe4, 0x02, 0x71, 0xff, 0xeb, 0x02, 0x87, 0xff, 0xe4, 0x02, 0x99, 0xff, 0xe9, // .p...q.......... + 0x02, 0x9b, 0xff, 0xe9, 0x02, 0x9d, 0xff, 0xe9, 0x02, 0xa7, 0xff, 0xe4, 0x02, 0xb3, 0xff, 0xe4, // ................ + 0x02, 0xbd, 0xff, 0xe4, 0x02, 0xbe, 0xff, 0xeb, 0x00, 0x16, 0x00, 0x37, 0xff, 0xeb, 0x00, 0x3c, // ...........7...< + 0xff, 0xf3, 0x00, 0x9f, 0xff, 0xf3, 0x01, 0x24, 0xff, 0xeb, 0x01, 0x26, 0xff, 0xeb, 0x01, 0x38, // .......$...&...8 + 0xff, 0xf3, 0x01, 0x3a, 0xff, 0xf3, 0x01, 0x69, 0xff, 0xf3, 0x01, 0x7f, 0xff, 0xf3, 0x01, 0x85, // ...:...i........ + 0xff, 0xf3, 0x01, 0xae, 0xff, 0xeb, 0x01, 0xb7, 0xff, 0xeb, 0x01, 0xce, 0xff, 0xeb, 0x02, 0x4b, // ...............K + 0xff, 0xeb, 0x02, 0x57, 0xff, 0xeb, 0x02, 0x59, 0xff, 0xf3, 0x02, 0x5b, 0xff, 0xf3, 0x02, 0x5f, // ...W...Y...[..._ + 0xff, 0xeb, 0x03, 0x1b, 0xff, 0xf3, 0x03, 0x1d, 0xff, 0xf3, 0x03, 0x1f, 0xff, 0xf3, 0x03, 0x21, // ...............! + 0xff, 0xf3, 0x00, 0x36, 0x00, 0x50, 0xff, 0xef, 0x00, 0x51, 0xff, 0xef, 0x00, 0x53, 0xff, 0xef, // ...6.P...Q...S.. + 0x00, 0x5b, 0xff, 0xf0, 0x00, 0xb3, 0xff, 0xef, 0x01, 0x06, 0xff, 0xef, 0x01, 0x08, 0xff, 0xef, // .[.............. + 0x01, 0x0a, 0xff, 0xef, 0x01, 0x0b, 0xff, 0xef, 0x01, 0x88, 0xff, 0xef, 0x01, 0x91, 0xff, 0xef, // ................ + 0x01, 0xdf, 0xff, 0xef, 0x01, 0xe0, 0xff, 0xee, 0x01, 0xe2, 0xff, 0xf0, 0x01, 0xe4, 0xff, 0xef, // ................ + 0x01, 0xe5, 0xff, 0xef, 0x01, 0xe6, 0xff, 0xef, 0x01, 0xe8, 0xff, 0xef, 0x01, 0xe9, 0xff, 0xef, // ................ + 0x01, 0xeb, 0xff, 0xef, 0x01, 0xec, 0xff, 0xef, 0x01, 0xee, 0xff, 0xee, 0x01, 0xf1, 0xff, 0xf0, // ................ + 0x01, 0xf2, 0xff, 0xef, 0x01, 0xf4, 0xff, 0xef, 0x01, 0xf5, 0xff, 0xef, 0x01, 0xf8, 0xff, 0xef, // ................ + 0x01, 0xfa, 0xff, 0xef, 0x01, 0xff, 0xff, 0xef, 0x02, 0x06, 0xff, 0xef, 0x02, 0x08, 0xff, 0xef, // ................ + 0x02, 0x09, 0xff, 0xef, 0x02, 0x0d, 0xff, 0xf4, 0x02, 0x2b, 0xff, 0xf1, 0x02, 0x36, 0xff, 0xef, // .........+...6.. + 0x02, 0x42, 0xff, 0xf0, 0x02, 0x46, 0xff, 0xef, 0x02, 0x4c, 0xff, 0xef, 0x02, 0x4e, 0xff, 0xef, // .B...F...L...N.. + 0x02, 0x50, 0xff, 0xef, 0x02, 0x5e, 0xff, 0xf0, 0x02, 0x6d, 0xff, 0xf0, 0x02, 0x73, 0xff, 0xef, // .P...^...m...s.. + 0x02, 0x75, 0xff, 0xef, 0x02, 0x79, 0xff, 0xef, 0x02, 0x88, 0xff, 0xf0, 0x02, 0x8e, 0xff, 0xef, // .u...y.......... + 0x02, 0x90, 0xff, 0xef, 0x02, 0xa2, 0xff, 0xef, 0x02, 0xa4, 0xff, 0xef, 0x02, 0xa6, 0xff, 0xef, // ................ + 0x02, 0xa8, 0xff, 0xf0, 0x02, 0xba, 0xff, 0xef, 0x02, 0xc2, 0xff, 0xef, 0x00, 0x21, 0x00, 0x05, // .............!.. + 0xff, 0xf2, 0x00, 0x0a, 0xff, 0xf2, 0x00, 0x59, 0xff, 0xf5, 0x00, 0x5c, 0xff, 0xf5, 0x00, 0xbf, // .......Y........ + 0xff, 0xf5, 0x00, 0xc1, 0xff, 0xf5, 0x01, 0x39, 0xff, 0xf5, 0x01, 0x51, 0xff, 0xf2, 0x01, 0x8d, // .......9...Q.... + 0xff, 0xf5, 0x01, 0x97, 0xff, 0xf5, 0x01, 0xee, 0xff, 0xf4, 0x01, 0xef, 0xff, 0xf5, 0x02, 0x0a, // ................ + 0xff, 0xf5, 0x02, 0x0d, 0xff, 0xf5, 0x02, 0x21, 0xff, 0xf5, 0x02, 0x23, 0xff, 0xf5, 0x02, 0x4c, // .......!...#...L + 0xff, 0xf5, 0x02, 0x5a, 0xff, 0xf5, 0x02, 0x9a, 0xff, 0xf5, 0x02, 0x9c, 0xff, 0xf5, 0x02, 0x9e, // ...Z............ + 0xff, 0xf5, 0x02, 0xba, 0xff, 0xf5, 0x03, 0x1c, 0xff, 0xf5, 0x03, 0x1e, 0xff, 0xf5, 0x03, 0x20, // ............... + 0xff, 0xf5, 0x03, 0x22, 0xff, 0xf5, 0x03, 0x34, 0xff, 0xf2, 0x03, 0x35, 0xff, 0xf2, 0x03, 0x37, // ..."...4...5...7 + 0xff, 0xf2, 0x03, 0x38, 0xff, 0xf2, 0x03, 0x39, 0xff, 0xf2, 0x03, 0x41, 0xff, 0xf2, 0x03, 0x42, // ...8...9...A...B + 0xff, 0xf2, 0x00, 0x09, 0x01, 0xe0, 0x00, 0x14, 0x01, 0xee, 0xff, 0xed, 0x01, 0xf3, 0xff, 0xed, // ................ + 0x02, 0x4c, 0xff, 0xed, 0x02, 0x62, 0xff, 0xed, 0x02, 0x64, 0xff, 0xed, 0x02, 0x77, 0xff, 0xed, // .L...b...d...w.. + 0x02, 0xa0, 0xff, 0xed, 0x02, 0xba, 0xff, 0xed, 0x00, 0x0a, 0x00, 0x05, 0xff, 0xf5, 0x00, 0x0a, // ................ + 0xff, 0xf5, 0x01, 0x51, 0xff, 0xf5, 0x03, 0x34, 0xff, 0xf5, 0x03, 0x35, 0xff, 0xf5, 0x03, 0x37, // ...Q...4...5...7 + 0xff, 0xf5, 0x03, 0x38, 0xff, 0xf5, 0x03, 0x39, 0xff, 0xf5, 0x03, 0x41, 0xff, 0xf5, 0x03, 0x42, // ...8...9...A...B + 0xff, 0xf5, 0x00, 0x56, 0x00, 0x46, 0xff, 0xf0, 0x00, 0x47, 0xff, 0xf0, 0x00, 0x48, 0xff, 0xf0, // ...V.F...G...H.. + 0x00, 0x4a, 0xff, 0xf0, 0x00, 0x52, 0xff, 0xc8, 0x00, 0x54, 0xff, 0xf0, 0x00, 0xa9, 0xff, 0xf0, // .J...R...T...... + 0x00, 0xaa, 0xff, 0xf0, 0x00, 0xab, 0xff, 0xf0, 0x00, 0xac, 0xff, 0xf0, 0x00, 0xad, 0xff, 0xf0, // ................ + 0x00, 0xb4, 0xff, 0xc8, 0x00, 0xb5, 0xff, 0xc8, 0x00, 0xb6, 0xff, 0xc8, 0x00, 0xb7, 0xff, 0xc8, // ................ + 0x00, 0xb8, 0xff, 0xc8, 0x00, 0xc9, 0xff, 0xf0, 0x00, 0xcb, 0xff, 0xf0, 0x00, 0xcd, 0xff, 0xf0, // ................ + 0x00, 0xcf, 0xff, 0xf0, 0x00, 0xd1, 0xff, 0xf0, 0x00, 0xd5, 0xff, 0xf0, 0x00, 0xd7, 0xff, 0xf0, // ................ + 0x00, 0xd9, 0xff, 0xf0, 0x00, 0xdb, 0xff, 0xf0, 0x00, 0xdd, 0xff, 0xf0, 0x00, 0xdf, 0xff, 0xf0, // ................ + 0x00, 0xe1, 0xff, 0xf0, 0x00, 0xe3, 0xff, 0xf0, 0x00, 0xe5, 0xff, 0xf0, 0x01, 0x0f, 0xff, 0xc8, // ................ + 0x01, 0x11, 0xff, 0xc8, 0x01, 0x13, 0xff, 0xc8, 0x01, 0x15, 0xff, 0xf0, 0x01, 0x44, 0xff, 0xf0, // .............D.. + 0x01, 0x86, 0xff, 0xf0, 0x01, 0x8b, 0xff, 0xf0, 0x01, 0x99, 0xff, 0xc8, 0x01, 0x9c, 0xff, 0xf0, // ................ + 0x01, 0x9d, 0xff, 0xf0, 0x01, 0xa6, 0xff, 0xc8, 0x01, 0xe1, 0xff, 0xf0, 0x01, 0xea, 0xff, 0xc8, // ................ + 0x01, 0xed, 0xff, 0xf0, 0x01, 0xf0, 0xff, 0xf0, 0x01, 0xfc, 0xff, 0xf0, 0x01, 0xfd, 0xff, 0xf0, // ................ + 0x02, 0x00, 0xff, 0xf0, 0x02, 0x1f, 0xff, 0xc8, 0x02, 0x25, 0xff, 0xf0, 0x02, 0x27, 0xff, 0xeb, // .........%...'.. + 0x02, 0x29, 0xff, 0xf0, 0x02, 0x2d, 0xff, 0xf0, 0x02, 0x54, 0xff, 0xf0, 0x02, 0x56, 0xff, 0xf0, // .)...-...T...V.. + 0x02, 0x82, 0xff, 0xf0, 0x02, 0x84, 0xff, 0xf0, 0x02, 0x86, 0xff, 0xf0, 0x02, 0x92, 0xff, 0xc8, // ................ + 0x02, 0x94, 0xff, 0xf0, 0x02, 0x96, 0xff, 0xc8, 0x02, 0xac, 0xff, 0xf0, 0x02, 0xad, 0xff, 0xf0, // ................ + 0x02, 0xae, 0xff, 0xf0, 0x02, 0xb8, 0xff, 0xf0, 0x02, 0xe2, 0xff, 0xf0, 0x02, 0xe4, 0xff, 0xf0, // ................ + 0x02, 0xe6, 0xff, 0xf0, 0x02, 0xe8, 0xff, 0xf0, 0x02, 0xea, 0xff, 0xf0, 0x02, 0xec, 0xff, 0xf0, // ................ + 0x02, 0xee, 0xff, 0xf0, 0x02, 0xf0, 0xff, 0xf0, 0x02, 0xf6, 0xff, 0xc8, 0x02, 0xf8, 0xff, 0xc8, // ................ + 0x02, 0xfa, 0xff, 0xc8, 0x02, 0xfc, 0xff, 0xc8, 0x02, 0xfe, 0xff, 0xc8, 0x03, 0x00, 0xff, 0xc8, // ................ + 0x03, 0x02, 0xff, 0xc8, 0x03, 0x04, 0xff, 0xf0, 0x03, 0x06, 0xff, 0xf0, 0x03, 0x08, 0xff, 0xf0, // ................ + 0x03, 0x0a, 0xff, 0xc8, 0x03, 0x0c, 0xff, 0xf0, 0x03, 0x7e, 0xff, 0xeb, 0x00, 0x9b, 0x00, 0x05, // .........~...... + 0x00, 0x0d, 0x00, 0x0a, 0x00, 0x0d, 0x00, 0x44, 0xff, 0xf0, 0x00, 0x46, 0xff, 0xee, 0x00, 0x47, // .......D...F...G + 0xff, 0xee, 0x00, 0x48, 0xff, 0xee, 0x00, 0x49, 0x00, 0x0d, 0x00, 0x4a, 0xff, 0xee, 0x00, 0x52, // ...H...I...J...R + 0xff, 0xea, 0x00, 0x54, 0xff, 0xee, 0x00, 0x59, 0x00, 0x0b, 0x00, 0x5c, 0x00, 0x0b, 0x00, 0xa2, // ...T...Y........ + 0xff, 0xf0, 0x00, 0xa3, 0xff, 0xf0, 0x00, 0xa4, 0xff, 0xf0, 0x00, 0xa5, 0xff, 0xf0, 0x00, 0xa6, // ................ + 0xff, 0xf0, 0x00, 0xa7, 0xff, 0xf0, 0x00, 0xa9, 0xff, 0xee, 0x00, 0xaa, 0xff, 0xee, 0x00, 0xab, // ................ + 0xff, 0xee, 0x00, 0xac, 0xff, 0xee, 0x00, 0xad, 0xff, 0xee, 0x00, 0xb4, 0xff, 0xea, 0x00, 0xb5, // ................ + 0xff, 0xea, 0x00, 0xb6, 0xff, 0xea, 0x00, 0xb7, 0xff, 0xea, 0x00, 0xb8, 0xff, 0xea, 0x00, 0xbf, // ................ + 0x00, 0x0b, 0x00, 0xc1, 0x00, 0x0b, 0x00, 0xc3, 0xff, 0xf0, 0x00, 0xc5, 0xff, 0xf0, 0x00, 0xc7, // ................ + 0xff, 0xf0, 0x00, 0xc9, 0xff, 0xee, 0x00, 0xcb, 0xff, 0xee, 0x00, 0xcd, 0xff, 0xee, 0x00, 0xcf, // ................ + 0xff, 0xee, 0x00, 0xd1, 0xff, 0xee, 0x00, 0xd5, 0xff, 0xee, 0x00, 0xd7, 0xff, 0xee, 0x00, 0xd9, // ................ + 0xff, 0xee, 0x00, 0xdb, 0xff, 0xee, 0x00, 0xdd, 0xff, 0xee, 0x00, 0xdf, 0xff, 0xee, 0x00, 0xe1, // ................ + 0xff, 0xee, 0x00, 0xe3, 0xff, 0xee, 0x00, 0xe5, 0xff, 0xee, 0x01, 0x0f, 0xff, 0xea, 0x01, 0x11, // ................ + 0xff, 0xea, 0x01, 0x13, 0xff, 0xea, 0x01, 0x15, 0xff, 0xee, 0x01, 0x39, 0x00, 0x0b, 0x01, 0x44, // ...........9...D + 0xff, 0xee, 0x01, 0x49, 0xff, 0xf0, 0x01, 0x51, 0x00, 0x0d, 0x01, 0x86, 0xff, 0xee, 0x01, 0x8b, // ...I...Q........ + 0xff, 0xee, 0x01, 0x8d, 0x00, 0x0b, 0x01, 0x97, 0x00, 0x0b, 0x01, 0x99, 0xff, 0xea, 0x01, 0x9c, // ................ + 0xff, 0xee, 0x01, 0x9d, 0xff, 0xee, 0x01, 0xa6, 0xff, 0xea, 0x01, 0xdc, 0xff, 0xf0, 0x01, 0xe0, // ................ + 0xff, 0xc8, 0x01, 0xe1, 0xff, 0xee, 0x01, 0xe7, 0xff, 0xd7, 0x01, 0xea, 0xff, 0xea, 0x01, 0xed, // ................ + 0xff, 0xee, 0x01, 0xef, 0x00, 0x0b, 0x01, 0xf0, 0xff, 0xee, 0x01, 0xfc, 0xff, 0xee, 0x01, 0xfd, // ................ + 0xff, 0xee, 0x02, 0x00, 0xff, 0xee, 0x02, 0x05, 0xff, 0xd7, 0x02, 0x0a, 0x00, 0x0b, 0x02, 0x1f, // ................ + 0xff, 0xea, 0x02, 0x21, 0x00, 0x0b, 0x02, 0x23, 0x00, 0x0b, 0x02, 0x25, 0xff, 0xee, 0x02, 0x27, // ...!...#...%...' + 0xff, 0xec, 0x02, 0x29, 0xff, 0xee, 0x02, 0x2b, 0x00, 0x0c, 0x02, 0x2d, 0xff, 0xee, 0x02, 0x54, // ...)...+...-...T + 0xff, 0xee, 0x02, 0x56, 0xff, 0xee, 0x02, 0x5a, 0x00, 0x0b, 0x02, 0x71, 0xff, 0xd7, 0x02, 0x7c, // ...V...Z...q...| + 0xff, 0xf0, 0x02, 0x7e, 0xff, 0xf0, 0x02, 0x82, 0xff, 0xee, 0x02, 0x84, 0xff, 0xee, 0x02, 0x86, // ...~............ + 0xff, 0xee, 0x02, 0x92, 0xff, 0xea, 0x02, 0x94, 0xff, 0xee, 0x02, 0x96, 0xff, 0xea, 0x02, 0x9a, // ................ + 0x00, 0x0b, 0x02, 0x9c, 0x00, 0x0b, 0x02, 0x9e, 0x00, 0x0b, 0x02, 0xac, 0xff, 0xee, 0x02, 0xad, // ................ + 0xff, 0xee, 0x02, 0xae, 0xff, 0xee, 0x02, 0xb0, 0x00, 0x0b, 0x02, 0xb2, 0x00, 0x0b, 0x02, 0xb8, // ................ + 0xff, 0xee, 0x02, 0xbe, 0xff, 0xd7, 0x02, 0xc0, 0xff, 0xf0, 0x02, 0xca, 0xff, 0xf0, 0x02, 0xcc, // ................ + 0xff, 0xf0, 0x02, 0xce, 0xff, 0xf0, 0x02, 0xd0, 0xff, 0xf0, 0x02, 0xd2, 0xff, 0xf0, 0x02, 0xd4, // ................ + 0xff, 0xf0, 0x02, 0xd6, 0xff, 0xf0, 0x02, 0xd8, 0xff, 0xf0, 0x02, 0xda, 0xff, 0xf0, 0x02, 0xdc, // ................ + 0xff, 0xf0, 0x02, 0xde, 0xff, 0xf0, 0x02, 0xe0, 0xff, 0xf0, 0x02, 0xe2, 0xff, 0xee, 0x02, 0xe4, // ................ + 0xff, 0xee, 0x02, 0xe6, 0xff, 0xee, 0x02, 0xe8, 0xff, 0xee, 0x02, 0xea, 0xff, 0xee, 0x02, 0xec, // ................ + 0xff, 0xee, 0x02, 0xee, 0xff, 0xee, 0x02, 0xf0, 0xff, 0xee, 0x02, 0xf6, 0xff, 0xea, 0x02, 0xf8, // ................ + 0xff, 0xea, 0x02, 0xfa, 0xff, 0xea, 0x02, 0xfc, 0xff, 0xea, 0x02, 0xfe, 0xff, 0xea, 0x03, 0x00, // ................ + 0xff, 0xea, 0x03, 0x02, 0xff, 0xea, 0x03, 0x04, 0xff, 0xee, 0x03, 0x06, 0xff, 0xee, 0x03, 0x08, // ................ + 0xff, 0xee, 0x03, 0x0a, 0xff, 0xea, 0x03, 0x0c, 0xff, 0xee, 0x03, 0x1c, 0x00, 0x0b, 0x03, 0x1e, // ................ + 0x00, 0x0b, 0x03, 0x20, 0x00, 0x0b, 0x03, 0x22, 0x00, 0x0b, 0x03, 0x34, 0x00, 0x0d, 0x03, 0x35, // ... ..."...4...5 + 0x00, 0x0d, 0x03, 0x37, 0x00, 0x0d, 0x03, 0x38, 0x00, 0x0d, 0x03, 0x39, 0x00, 0x0d, 0x03, 0x41, // ...7...8...9...A + 0x00, 0x0d, 0x03, 0x42, 0x00, 0x0d, 0x03, 0x76, 0x00, 0x0d, 0x03, 0x79, 0x00, 0x0d, 0x03, 0x7b, // ...B...v...y...{ + 0x00, 0x0e, 0x03, 0x7c, 0xff, 0xf5, 0x03, 0x7e, 0xff, 0xec, 0x00, 0x0e, 0x01, 0xe0, 0x00, 0x14, // ...|...~........ + 0x01, 0xe7, 0x00, 0x10, 0x01, 0xee, 0xff, 0xf0, 0x01, 0xf3, 0xff, 0xf0, 0x01, 0xfb, 0x00, 0x0c, // ................ + 0x02, 0x05, 0x00, 0x10, 0x02, 0x4c, 0xff, 0xf0, 0x02, 0x62, 0xff, 0xf0, 0x02, 0x64, 0xff, 0xf0, // .....L...b...d.. + 0x02, 0x71, 0x00, 0x10, 0x02, 0x77, 0xff, 0xf0, 0x02, 0xa0, 0xff, 0xf0, 0x02, 0xba, 0xff, 0xf0, // .q...w.......... + 0x02, 0xbe, 0x00, 0x10, 0x00, 0x4a, 0x00, 0x46, 0xff, 0xee, 0x00, 0x47, 0xff, 0xee, 0x00, 0x48, // .....J.F...G...H + 0xff, 0xee, 0x00, 0x4a, 0xff, 0xee, 0x00, 0x54, 0xff, 0xee, 0x00, 0xa9, 0xff, 0xee, 0x00, 0xaa, // ...J...T........ + 0xff, 0xee, 0x00, 0xab, 0xff, 0xee, 0x00, 0xac, 0xff, 0xee, 0x00, 0xad, 0xff, 0xee, 0x00, 0xc9, // ................ + 0xff, 0xee, 0x00, 0xcb, 0xff, 0xee, 0x00, 0xcd, 0xff, 0xee, 0x00, 0xcf, 0xff, 0xee, 0x00, 0xd1, // ................ + 0xff, 0xee, 0x00, 0xd5, 0xff, 0xee, 0x00, 0xd7, 0xff, 0xee, 0x00, 0xd9, 0xff, 0xee, 0x00, 0xdb, // ................ + 0xff, 0xee, 0x00, 0xdd, 0xff, 0xee, 0x00, 0xdf, 0xff, 0xee, 0x00, 0xe1, 0xff, 0xee, 0x00, 0xe3, // ................ + 0xff, 0xee, 0x00, 0xe5, 0xff, 0xee, 0x01, 0x15, 0xff, 0xee, 0x01, 0x44, 0xff, 0xee, 0x01, 0x86, // ...........D.... + 0xff, 0xee, 0x01, 0x8b, 0xff, 0xee, 0x01, 0x9c, 0xff, 0xee, 0x01, 0x9d, 0xff, 0xee, 0x01, 0xe0, // ................ + 0x00, 0x12, 0x01, 0xe1, 0xff, 0xee, 0x01, 0xe7, 0x00, 0x0e, 0x01, 0xed, 0xff, 0xee, 0x01, 0xee, // ................ + 0xff, 0xe3, 0x01, 0xf0, 0xff, 0xee, 0x01, 0xf3, 0xff, 0xe3, 0x01, 0xfc, 0xff, 0xee, 0x01, 0xfd, // ................ + 0xff, 0xee, 0x02, 0x00, 0xff, 0xee, 0x02, 0x05, 0x00, 0x0e, 0x02, 0x25, 0xff, 0xee, 0x02, 0x29, // ...........%...) + 0xff, 0xee, 0x02, 0x2d, 0xff, 0xee, 0x02, 0x4c, 0xff, 0xe2, 0x02, 0x54, 0xff, 0xee, 0x02, 0x56, // ...-...L...T...V + 0xff, 0xee, 0x02, 0x62, 0xff, 0xe3, 0x02, 0x64, 0xff, 0xe3, 0x02, 0x71, 0x00, 0x0e, 0x02, 0x77, // ...b...d...q...w + 0xff, 0xe3, 0x02, 0x82, 0xff, 0xee, 0x02, 0x84, 0xff, 0xee, 0x02, 0x86, 0xff, 0xee, 0x02, 0x94, // ................ + 0xff, 0xee, 0x02, 0xa0, 0xff, 0xe3, 0x02, 0xac, 0xff, 0xee, 0x02, 0xad, 0xff, 0xee, 0x02, 0xae, // ................ + 0xff, 0xee, 0x02, 0xb8, 0xff, 0xee, 0x02, 0xba, 0xff, 0xe3, 0x02, 0xbe, 0x00, 0x0e, 0x02, 0xe2, // ................ + 0xff, 0xee, 0x02, 0xe4, 0xff, 0xee, 0x02, 0xe6, 0xff, 0xee, 0x02, 0xe8, 0xff, 0xee, 0x02, 0xea, // ................ + 0xff, 0xee, 0x02, 0xec, 0xff, 0xee, 0x02, 0xee, 0xff, 0xee, 0x02, 0xf0, 0xff, 0xee, 0x03, 0x04, // ................ + 0xff, 0xee, 0x03, 0x06, 0xff, 0xee, 0x03, 0x08, 0xff, 0xee, 0x03, 0x0c, 0xff, 0xee, 0x00, 0x20, // ............... + 0x00, 0x59, 0xff, 0xf4, 0x00, 0x5b, 0xff, 0xf0, 0x00, 0x5c, 0xff, 0xf4, 0x00, 0xbf, 0xff, 0xf4, // .Y...[.......... + 0x00, 0xc1, 0xff, 0xf4, 0x01, 0x39, 0xff, 0xf4, 0x01, 0x8d, 0xff, 0xf4, 0x01, 0x97, 0xff, 0xf4, // .....9.......... + 0x01, 0xe0, 0xff, 0xef, 0x01, 0xe2, 0xff, 0xf0, 0x01, 0xe7, 0xff, 0xf3, 0x01, 0xef, 0xff, 0xf4, // ................ + 0x01, 0xf1, 0xff, 0xf0, 0x02, 0x05, 0xff, 0xf3, 0x02, 0x0a, 0xff, 0xf4, 0x02, 0x21, 0xff, 0xf4, // .............!.. + 0x02, 0x23, 0xff, 0xf4, 0x02, 0x42, 0xff, 0xf0, 0x02, 0x5a, 0xff, 0xf4, 0x02, 0x5e, 0xff, 0xf0, // .#...B...Z...^.. + 0x02, 0x6d, 0xff, 0xf0, 0x02, 0x71, 0xff, 0xf3, 0x02, 0x88, 0xff, 0xf0, 0x02, 0x9a, 0xff, 0xf4, // .m...q.......... + 0x02, 0x9c, 0xff, 0xf4, 0x02, 0x9e, 0xff, 0xf4, 0x02, 0xa8, 0xff, 0xf0, 0x02, 0xbe, 0xff, 0xf3, // ................ + 0x03, 0x1c, 0xff, 0xf4, 0x03, 0x1e, 0xff, 0xf4, 0x03, 0x20, 0xff, 0xf4, 0x03, 0x22, 0xff, 0xf4, // ......... ...".. + 0x00, 0x0a, 0x00, 0x05, 0xff, 0xd6, 0x00, 0x0a, 0xff, 0xd6, 0x01, 0x51, 0xff, 0xd6, 0x03, 0x34, // ...........Q...4 + 0xff, 0xd6, 0x03, 0x35, 0xff, 0xd6, 0x03, 0x37, 0xff, 0xd6, 0x03, 0x38, 0xff, 0xd6, 0x03, 0x39, // ...5...7...8...9 + 0xff, 0xd6, 0x03, 0x41, 0xff, 0xd6, 0x03, 0x42, 0xff, 0xd6, 0x00, 0x09, 0x01, 0xd8, 0xff, 0xc3, // ...A...B........ + 0x01, 0xee, 0xff, 0xcf, 0x02, 0x4c, 0xff, 0xce, 0x02, 0x63, 0xff, 0xe7, 0x02, 0x67, 0xff, 0xdf, // .....L...c...g.. + 0x02, 0xaf, 0xff, 0xd1, 0x02, 0xb1, 0xff, 0xec, 0x02, 0xb9, 0xff, 0xa0, 0x02, 0xba, 0xff, 0xd1, // ................ + 0x00, 0x08, 0x01, 0xee, 0xff, 0xba, 0x02, 0x0d, 0xff, 0xd9, 0x02, 0x2b, 0xff, 0xdb, 0x02, 0x4c, // ...........+...L + 0xff, 0xa0, 0x02, 0x64, 0xff, 0xed, 0x02, 0xb0, 0xff, 0xf0, 0x02, 0xb2, 0xff, 0xf2, 0x02, 0xba, // ...d............ + 0xff, 0xba, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x40, 0x00, 0x11, 0x00, 0x55, 0xff, 0xe2, // .........@...U.. + 0x00, 0x60, 0x00, 0x13, 0x03, 0x7e, 0xff, 0xd9, 0x00, 0x0a, 0x00, 0x05, 0xff, 0xd8, 0x00, 0x0a, // .`...~.......... + 0xff, 0xd8, 0x01, 0x51, 0xff, 0xd8, 0x03, 0x34, 0xff, 0xd8, 0x03, 0x35, 0xff, 0xd8, 0x03, 0x37, // ...Q...4...5...7 + 0xff, 0xd8, 0x03, 0x38, 0xff, 0xd8, 0x03, 0x39, 0xff, 0xd8, 0x03, 0x41, 0xff, 0xd8, 0x03, 0x42, // ...8...9...A...B + 0xff, 0xd8, 0x00, 0x10, 0x00, 0x5a, 0xff, 0xc1, 0x01, 0x80, 0xff, 0xc5, 0x01, 0x9e, 0xff, 0xb4, // .....Z.......... + 0x01, 0xdd, 0xff, 0xd7, 0x01, 0xee, 0xff, 0xb9, 0x02, 0x0d, 0xff, 0xb2, 0x02, 0x27, 0xff, 0xd2, // .............'.. + 0x02, 0x2b, 0xff, 0xc8, 0x02, 0x4c, 0xff, 0xa0, 0x02, 0x64, 0xff, 0xc5, 0x02, 0x83, 0xff, 0xe4, // .+...L...d...... + 0x02, 0xb0, 0xff, 0xcc, 0x02, 0xb2, 0xff, 0xcc, 0x02, 0xba, 0xff, 0xcb, 0x02, 0xbb, 0xff, 0xef, // ................ + 0x03, 0x7e, 0xff, 0xe7, 0x00, 0x04, 0x00, 0x0c, 0xff, 0xe6, 0x00, 0x40, 0xff, 0xf4, 0x00, 0x60, // .~.........@...` + 0xff, 0xef, 0x02, 0x68, 0xff, 0xed, 0x00, 0x36, 0x00, 0x55, 0xff, 0xbf, 0x00, 0x5a, 0xff, 0xd1, // ...h...6.U...Z.. + 0x00, 0x6d, 0xff, 0x69, 0x00, 0x7d, 0xff, 0x6d, 0x00, 0x88, 0xff, 0x44, 0x00, 0xa8, 0xff, 0xac, // .m.i.}.m...D.... + 0x00, 0xba, 0xff, 0xa1, 0x01, 0x80, 0xff, 0xb8, 0x01, 0x8e, 0xff, 0xf1, 0x01, 0x8f, 0xff, 0x7e, // ...............~ + 0x01, 0x93, 0xff, 0x7b, 0x01, 0x9a, 0xff, 0x9b, 0x01, 0x9b, 0xff, 0x79, 0x01, 0x9e, 0xff, 0xb2, // ...{.......y.... + 0x01, 0xa0, 0xff, 0x7e, 0x01, 0xa1, 0xff, 0xb3, 0x01, 0xa2, 0xff, 0x7d, 0x01, 0xa3, 0xff, 0x7c, // ...~.......}...| + 0x01, 0xc0, 0xff, 0xaf, 0x01, 0xd8, 0x00, 0x0f, 0x01, 0xdd, 0xff, 0xe4, 0x01, 0xde, 0xff, 0xa0, // ................ + 0x01, 0xe0, 0xff, 0x74, 0x01, 0xe3, 0xff, 0x80, 0x01, 0xee, 0xff, 0xb2, 0x01, 0xf7, 0xff, 0x7d, // ...t...........} + 0x01, 0xf9, 0xff, 0x80, 0x01, 0xfb, 0xff, 0x79, 0x02, 0x0b, 0xff, 0x7d, 0x02, 0x0d, 0xff, 0x7f, // .......y...}.... + 0x02, 0x27, 0xff, 0x67, 0x02, 0x2b, 0xff, 0xda, 0x02, 0x3a, 0xff, 0x81, 0x02, 0x3c, 0xff, 0x98, // .'.g.+...:...<.. + 0x02, 0x48, 0xff, 0x7d, 0x02, 0x4c, 0xff, 0xb3, 0x02, 0x52, 0xff, 0xa0, 0x02, 0x64, 0xff, 0x7c, // .H.}.L...R...d.| + 0x02, 0x66, 0xff, 0x7c, 0x02, 0x67, 0xff, 0x9a, 0x02, 0x68, 0xff, 0x6c, 0x02, 0x83, 0xff, 0xe6, // .f.|.g...h.l.... + 0x02, 0xab, 0xff, 0x6b, 0x02, 0xb0, 0xff, 0x92, 0x02, 0xb2, 0xff, 0xad, 0x02, 0xb6, 0xff, 0x7b, // ...k...........{ + 0x02, 0xb9, 0x00, 0x0f, 0x02, 0xba, 0xff, 0x91, 0x02, 0xbb, 0xff, 0xf2, 0x03, 0x77, 0xff, 0xed, // .............w.. + 0x03, 0x78, 0xff, 0xf1, 0x03, 0x7b, 0xff, 0xf1, 0x03, 0x7c, 0xff, 0xbc, 0x03, 0x7e, 0xff, 0xb9, // .x...{...|...~.. + 0x00, 0x06, 0x01, 0x9e, 0xff, 0xea, 0x01, 0xa1, 0xff, 0xe8, 0x01, 0xe0, 0xff, 0xee, 0x01, 0xee, // ................ + 0xff, 0xeb, 0x02, 0x4c, 0xff, 0xec, 0x02, 0xba, 0xff, 0xec, 0x00, 0x13, 0x01, 0xc0, 0xff, 0xae, // ...L............ + 0x01, 0xd8, 0x00, 0x12, 0x01, 0xde, 0xff, 0xe0, 0x01, 0xe0, 0xff, 0xad, 0x01, 0xe3, 0xff, 0xd6, // ................ + 0x01, 0xf7, 0xff, 0xdf, 0x01, 0xfb, 0xff, 0xd2, 0x02, 0x0b, 0xff, 0xe0, 0x02, 0x27, 0xff, 0xce, // .............'.. + 0x02, 0x3a, 0xff, 0xdd, 0x02, 0x3c, 0xff, 0xe2, 0x02, 0x48, 0xff, 0xe0, 0x02, 0x52, 0xff, 0xe0, // .:...<...H...R.. + 0x02, 0x64, 0xff, 0xe9, 0x02, 0x66, 0xff, 0xde, 0x02, 0x68, 0xff, 0xda, 0x02, 0xab, 0xff, 0xbd, // .d...f...h...... + 0x02, 0xb6, 0xff, 0xdf, 0x02, 0xb9, 0x00, 0x11, 0x00, 0x31, 0x00, 0x55, 0xff, 0x7e, 0x00, 0x5a, // .........1.U.~.Z + 0xff, 0x9d, 0x00, 0x6d, 0xfe, 0xeb, 0x00, 0x7d, 0xfe, 0xf2, 0x00, 0x88, 0xfe, 0xac, 0x00, 0xa8, // ...m...}........ + 0xff, 0x5d, 0x00, 0xba, 0xff, 0x4b, 0x01, 0x80, 0xff, 0x72, 0x01, 0x8e, 0xff, 0xd2, 0x01, 0x8f, // .]...K...r...... + 0xff, 0x0f, 0x01, 0x93, 0xff, 0x0a, 0x01, 0x9a, 0xff, 0x41, 0x01, 0x9b, 0xff, 0x07, 0x01, 0x9e, // .........A...... + 0xff, 0x68, 0x01, 0xa0, 0xff, 0x0f, 0x01, 0xa1, 0xff, 0x6a, 0x01, 0xa2, 0xff, 0x0e, 0x01, 0xa3, // .h.......j...... + 0xff, 0x0b, 0x01, 0xc0, 0xff, 0x63, 0x01, 0xd8, 0x00, 0x05, 0x01, 0xdd, 0xff, 0xbd, 0x01, 0xde, // .....c.......... + 0xff, 0x49, 0x01, 0xe0, 0xfe, 0xfe, 0x01, 0xe3, 0xff, 0x13, 0x01, 0xee, 0xff, 0x68, 0x01, 0xf7, // .I...........h.. + 0xff, 0x0e, 0x01, 0xf9, 0xff, 0x13, 0x01, 0xfb, 0xff, 0x07, 0x02, 0x0b, 0xff, 0x0e, 0x02, 0x0d, // ................ + 0xff, 0x11, 0x02, 0x27, 0xfe, 0xe9, 0x02, 0x2b, 0xff, 0xac, 0x02, 0x3a, 0xff, 0x15, 0x02, 0x3c, // ...'...+...:...< + 0xff, 0x3c, 0x02, 0x48, 0xff, 0x0e, 0x02, 0x4c, 0xff, 0x6a, 0x02, 0x52, 0xff, 0x49, 0x02, 0x64, // .<.H...L.j.R.I.d + 0xff, 0x0c, 0x02, 0x66, 0xff, 0x0c, 0x02, 0x67, 0xff, 0x3f, 0x02, 0x68, 0xfe, 0xf1, 0x02, 0x83, // ...f...g.?.h.... + 0xff, 0xc0, 0x02, 0xab, 0xfe, 0xef, 0x02, 0xb0, 0xff, 0x31, 0x02, 0xb2, 0xff, 0x5f, 0x02, 0xb6, // .........1..._.. + 0xff, 0x0a, 0x02, 0xb9, 0x00, 0x05, 0x02, 0xba, 0xff, 0x30, 0x02, 0xbb, 0xff, 0xd5, 0x00, 0x02, // .........0...... + 0x01, 0xe0, 0xff, 0xc9, 0x02, 0x27, 0xff, 0xee, 0x00, 0x15, 0x01, 0x80, 0xff, 0xd4, 0x01, 0x8e, // .....'.......... + 0xff, 0xf0, 0x01, 0x92, 0xff, 0xed, 0x01, 0x95, 0x00, 0x11, 0x01, 0x9e, 0xff, 0xe0, 0x01, 0xa0, // ................ + 0xff, 0xe7, 0x01, 0xa2, 0xff, 0xe5, 0x01, 0xa3, 0xff, 0xee, 0x01, 0xc0, 0x00, 0x12, 0x01, 0xdd, // ................ + 0xff, 0xe9, 0x01, 0xee, 0xff, 0xd7, 0x02, 0x4c, 0xff, 0xd7, 0x02, 0x64, 0xff, 0xd3, 0x02, 0x67, // .......L...d...g + 0xff, 0xd6, 0x02, 0x68, 0xff, 0xc5, 0x02, 0x83, 0xff, 0xe7, 0x02, 0xaf, 0x00, 0x0d, 0x02, 0xb1, // ...h............ + 0x00, 0x0c, 0x02, 0xba, 0xff, 0xd6, 0x02, 0xbb, 0xff, 0xf2, 0x03, 0x7e, 0xff, 0xe9, 0x00, 0x01, // ...........~.... + 0x02, 0x27, 0xff, 0xf1, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x40, 0x00, 0x0c, 0x00, 0x55, // .'.........@...U + 0xff, 0xeb, 0x00, 0x60, 0x00, 0x0e, 0x03, 0x7e, 0xff, 0xe7, 0x00, 0x1a, 0x00, 0x22, 0xff, 0xb0, // ...`...~.....".. + 0x00, 0x57, 0xff, 0xef, 0x00, 0x5a, 0xff, 0xdf, 0x01, 0x45, 0xff, 0xee, 0x01, 0x80, 0xff, 0xe5, // .W...Z...E...... + 0x01, 0x82, 0xff, 0xd1, 0x01, 0x95, 0x00, 0x11, 0x01, 0x9e, 0xff, 0xc8, 0x01, 0xc0, 0x00, 0x13, // ................ + 0x01, 0xd8, 0xff, 0xc5, 0x01, 0xee, 0xff, 0xca, 0x02, 0x4c, 0xff, 0x82, 0x02, 0x63, 0xff, 0x65, // .........L...c.e + 0x02, 0x64, 0xff, 0x85, 0x02, 0x67, 0xff, 0x68, 0x02, 0x68, 0xff, 0xdd, 0x02, 0x83, 0xff, 0xf2, // .d...g.h.h...... + 0x02, 0xaf, 0xff, 0xb0, 0x02, 0xb1, 0xff, 0xca, 0x02, 0xb9, 0xff, 0xa8, 0x02, 0xba, 0xff, 0xc7, // ................ + 0x03, 0x76, 0xff, 0xc4, 0x03, 0x78, 0xff, 0xdd, 0x03, 0x79, 0xff, 0xcd, 0x03, 0x7a, 0xff, 0xf1, // .v...x...y...z.. + 0x03, 0x7b, 0xff, 0xc7, 0x00, 0x07, 0x01, 0xee, 0xff, 0xf0, 0x02, 0x0d, 0xff, 0xf1, 0x02, 0x2b, // .{.............+ + 0xff, 0xf3, 0x02, 0x4c, 0xff, 0xf1, 0x02, 0xb0, 0xff, 0xf3, 0x02, 0xb2, 0xff, 0xf3, 0x02, 0xba, // ...L............ + 0xff, 0xf1, 0x00, 0x05, 0x00, 0x49, 0xff, 0xee, 0x00, 0x5a, 0xff, 0xea, 0x03, 0x76, 0xff, 0xf0, // .....I...Z...v.. + 0x03, 0x78, 0xff, 0xed, 0x03, 0x79, 0xff, 0xf0, 0x00, 0x01, 0x01, 0xee, 0xff, 0xf5, 0x00, 0x08, // .x...y.......... + 0x01, 0xc0, 0x00, 0x15, 0x01, 0xe0, 0x00, 0x15, 0x02, 0x63, 0xff, 0xe4, 0x02, 0x64, 0xff, 0xe5, // .........c...d.. + 0x02, 0x67, 0xff, 0xe4, 0x02, 0xaf, 0xff, 0xe3, 0x02, 0xb1, 0xff, 0xe2, 0x02, 0xb9, 0xff, 0xe4, // .g.............. + 0x00, 0x08, 0x01, 0x9e, 0xff, 0xea, 0x01, 0xa1, 0xff, 0xea, 0x01, 0xee, 0xff, 0xea, 0x02, 0x0d, // ................ + 0xff, 0xf0, 0x02, 0x2b, 0xff, 0xf1, 0x02, 0x4c, 0xff, 0xeb, 0x02, 0xb0, 0xff, 0xf5, 0x02, 0xba, // ...+...L........ + 0xff, 0xec, 0x00, 0x20, 0x00, 0x09, 0xff, 0xe2, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x0d, 0xff, 0xcf, // ... ............ + 0x00, 0x40, 0x00, 0x12, 0x00, 0x49, 0xff, 0xea, 0x00, 0x55, 0xff, 0xd8, 0x00, 0x57, 0xff, 0xea, // .@...I...U...W.. + 0x00, 0x60, 0x00, 0x13, 0x00, 0x6d, 0xff, 0xae, 0x00, 0x7d, 0xff, 0xcd, 0x00, 0x88, 0xff, 0xa0, // .`...m...}...... + 0x00, 0xa8, 0xff, 0xc1, 0x00, 0xba, 0xff, 0xc0, 0x01, 0x80, 0xff, 0xd0, 0x01, 0x8c, 0xff, 0xea, // ................ + 0x01, 0x8e, 0xff, 0xee, 0x01, 0x8f, 0xff, 0xc6, 0x01, 0x90, 0x00, 0x0d, 0x01, 0x92, 0xff, 0xe9, // ................ + 0x01, 0x93, 0xff, 0xd6, 0x01, 0x9a, 0xff, 0xe8, 0x01, 0x9b, 0xff, 0xba, 0x01, 0x9e, 0xff, 0xe9, // ................ + 0x01, 0xa0, 0xff, 0xcb, 0x01, 0xa1, 0xff, 0xc1, 0x01, 0xa2, 0xff, 0xda, 0x01, 0xa3, 0xff, 0xc7, // ................ + 0x03, 0x3d, 0xff, 0xd3, 0x03, 0x77, 0xff, 0xef, 0x03, 0x78, 0xff, 0xf3, 0x03, 0x7b, 0xff, 0xf3, // .=...w...x...{.. + 0x03, 0x7e, 0xff, 0xcb, 0x00, 0x07, 0x00, 0x49, 0x00, 0x0d, 0x01, 0x8e, 0xff, 0xf5, 0x01, 0x9a, // .~.....I........ + 0x00, 0x0b, 0x01, 0x9b, 0xff, 0xea, 0x01, 0x9e, 0x00, 0x0c, 0x01, 0xe0, 0xff, 0xc8, 0x02, 0x27, // ...............' + 0xff, 0xf1, 0x00, 0x08, 0x00, 0x88, 0xff, 0xdf, 0x01, 0x79, 0xff, 0xf3, 0x01, 0x7d, 0xff, 0xf0, // .........y...}.. + 0x01, 0x95, 0xff, 0xea, 0x01, 0xc0, 0xff, 0xdf, 0x01, 0xd8, 0xff, 0xe0, 0x02, 0xb9, 0xff, 0xe0, // ................ + 0x03, 0x77, 0xff, 0xf5, 0x00, 0x01, 0x00, 0x5a, 0x00, 0x0b, 0x00, 0x05, 0x03, 0x76, 0x00, 0x10, // .w.....Z.....v.. + 0x03, 0x78, 0x00, 0x0d, 0x03, 0x79, 0x00, 0x10, 0x03, 0x7b, 0x00, 0x0f, 0x03, 0x7e, 0xff, 0xeb, // .x...y...{...~.. + 0x00, 0x01, 0x03, 0x7b, 0x00, 0x0e, 0x00, 0x01, 0x03, 0x7e, 0xff, 0xf0, 0x00, 0x05, 0x03, 0x76, // ...{.....~.....v + 0x00, 0x0d, 0x03, 0x79, 0x00, 0x0d, 0x03, 0x7b, 0x00, 0x0e, 0x03, 0x7c, 0xff, 0xf5, 0x03, 0x7e, // ...y...{...|...~ + 0xff, 0xec, 0x00, 0x04, 0x03, 0x76, 0xff, 0xee, 0x03, 0x78, 0xff, 0xf5, 0x03, 0x79, 0xff, 0xf1, // .....v...x...y.. + 0x03, 0x7b, 0xff, 0xf2, 0x00, 0x04, 0x03, 0x76, 0xff, 0xe5, 0x03, 0x78, 0xff, 0xf1, 0x03, 0x79, // .{.....v...x...y + 0xff, 0xeb, 0x03, 0x7b, 0xff, 0xe9, 0x00, 0x04, 0x03, 0x76, 0xff, 0xea, 0x03, 0x77, 0xff, 0xec, // ...{.....v...w.. + 0x03, 0x79, 0xff, 0xf1, 0x03, 0x7b, 0xff, 0xee, 0x00, 0x06, 0x03, 0x76, 0xff, 0xb4, 0x03, 0x78, // .y...{.....v...x + 0xff, 0xd5, 0x03, 0x79, 0xff, 0xb7, 0x03, 0x7a, 0xff, 0xec, 0x03, 0x7b, 0xff, 0xbb, 0x03, 0x7e, // ...y...z...{...~ + 0xff, 0xf0, 0x00, 0x01, 0x03, 0x7e, 0xff, 0xeb, 0x00, 0x02, 0x03, 0x78, 0xff, 0xf5, 0x03, 0x79, // .....~.....x...y + 0xff, 0xee, 0x00, 0x06, 0x03, 0x76, 0xff, 0xbf, 0x03, 0x78, 0xff, 0xd8, 0x03, 0x79, 0xff, 0xc7, // .....v...x...y.. + 0x03, 0x7a, 0xff, 0xec, 0x03, 0x7b, 0xff, 0xc0, 0x03, 0x7e, 0xff, 0xf2, 0x00, 0x02, 0x07, 0x50, // .z...{...~.....P + 0x00, 0x04, 0x00, 0x00, 0x0a, 0x24, 0x14, 0xd8, 0x00, 0x20, 0x00, 0x1d, 0x00, 0x00, 0xff, 0xda, // .....$... ...... + 0xff, 0x88, 0xff, 0xce, 0xff, 0xc5, 0xff, 0xec, 0xff, 0xa6, 0xff, 0xa5, 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, 0xfe, 0xe6, 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, // ................ + 0xff, 0xe5, 0xff, 0xe8, 0xff, 0xc9, 0xff, 0xf3, 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, 0xff, 0xe3, 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, 0xff, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xe5, 0xff, 0xea, 0xff, 0xd5, 0x00, 0x00, 0xff, 0x87, 0xff, 0xea, // ................ + 0xff, 0xe9, 0xff, 0xe1, 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, 0xff, 0xed, 0x00, 0x00, 0xff, 0xed, 0x00, 0x00, 0x00, 0x14, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, // ................ + 0xff, 0xe6, 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, 0x12, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe3, 0x00, 0x00, 0xff, 0xe4, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe4, 0x00, 0x11, // ................ + 0xff, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xea, 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, 0xff, 0xe6, 0x00, 0x00, 0xff, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe9, 0xff, 0xd8, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xa3, 0xff, 0x5e, 0xff, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .......^........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x32, 0xff, 0x33, 0xfe, 0xea, 0x00, 0x00, 0x00, 0x00, // .......2.3...... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf2, 0xff, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0xff, 0xe7, 0xff, 0xe8, 0xff, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x4f, 0xff, 0xf5, 0xff, 0xf3, 0x00, 0x00, 0xff, 0xf3, 0x00, 0x00, // .....O.......... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6e, 0xff, 0xce, 0xff, 0xdd, 0xff, 0x71, // .........n.....q + 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0xff, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x94, // ................ + 0xff, 0xad, 0xff, 0xa7, 0xff, 0xa7, 0xff, 0xb1, 0xff, 0xb4, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, // ................ + 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xcb, 0xff, 0xbf, 0xff, 0xaf, 0x00, 0x00, // ................ + 0xff, 0x7e, 0xff, 0x7c, 0xfe, 0xf1, 0xff, 0xe4, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0xff, 0xb3, // .~.|............ + 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xb5, 0xff, 0xd2, 0xff, 0xd4, 0x00, 0x00, // ................ + 0xff, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x29, 0x00, 0x00, // .............).. + 0x00, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xff, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x66, // ...............f + 0xff, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0xff, 0xd5, 0xff, 0xdf, 0xff, 0xe1, 0x00, 0x00, 0xff, 0xe1, 0x00, 0x00, 0x00, 0x0e, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xed, // .......r........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0xff, 0xe6, 0x00, 0x00, 0xff, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xff, 0xeb, 0xff, 0xe1, 0x00, 0x00, 0x00, 0x11, // ................ + 0xff, 0xd1, 0xff, 0x67, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...g............ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x6c, 0xff, 0xc1, 0xff, 0xbf, 0xff, 0xd8, 0xff, 0xbf, // .......l........ + 0xff, 0xc6, 0x00, 0x11, 0x00, 0x12, 0x00, 0x12, 0x00, 0x00, 0xff, 0x1a, 0x00, 0x0d, 0x00, 0x00, // ................ + 0x00, 0x00, 0xff, 0xd9, 0xff, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x6a, 0xff, 0xe3, // .............j.. + 0xff, 0xa0, 0x00, 0x11, 0xff, 0xf0, 0xff, 0xe9, 0xff, 0xe2, 0xff, 0xa0, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x0d, 0x00, 0x00, 0xff, 0xeb, 0x00, 0x00, 0xff, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xed, 0xff, 0xe5, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, 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, 0xff, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0xff, 0xe3, 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, 0xff, 0xf5, 0x00, 0x00, 0xff, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xf1, 0xff, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf5, 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, 0xff, 0xf2, 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, 0xff, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0xff, 0xf0, 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, 0xff, 0xec, 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, 0xff, 0xf1, 0x00, 0x00, 0xff, 0xf0, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xeb, 0xff, 0xf0, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xff, 0xed, 0x00, 0x00, 0xff, 0xec, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x54, 0x00, 0x00, 0x00, 0x00, // ...........T.... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 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, 0x0f, // ................ + 0x00, 0x00, 0xff, 0xf1, 0xff, 0xf3, 0x00, 0x00, 0xff, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....[.......... + 0x00, 0x00, 0xff, 0xd7, 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, 0xff, 0xec, // ................ + 0x00, 0x00, 0xff, 0xd9, 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, 0xff, 0xf0, 0x00, 0x00, 0xff, 0xf0, 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, 0xff, 0x34, // ...............4 + 0xff, 0x5e, 0xff, 0x55, 0xff, 0x55, 0xff, 0x66, 0xff, 0x6a, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, // .^.U.U.f.j...... + 0x00, 0x00, 0xfe, 0x38, 0x00, 0x00, 0x00, 0x00, 0xff, 0x92, 0xff, 0x7d, 0xff, 0x62, 0x00, 0x00, // ...8.......}.b.. + 0xff, 0x0f, 0xff, 0x0c, 0xfe, 0x20, 0xff, 0xbd, 0x00, 0x00, 0x00, 0x05, 0xff, 0xd1, 0xff, 0x6a, // ..... .........j + 0xff, 0x86, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x9c, 0xff, 0xc8, 0xff, 0xad, 0xff, 0xeb, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0xff, 0xa5, 0xff, 0xaf, 0xff, 0xbd, 0xff, 0xae, 0xff, 0xbd, 0xff, 0xd2, 0x00, 0x12, // ................ + 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0xfe, 0x77, 0x00, 0x00, 0x00, 0x00, 0xff, 0xca, 0x00, 0x00, // .......w........ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xbb, 0xff, 0xe9, 0xff, 0x3b, 0xff, 0xe9, 0x00, 0x00, 0x00, 0x00, // .........;...... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0xff, 0xec, 0x00, 0x00, 0xff, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xd8, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....y.......... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xdd, 0x00, 0x00, 0x00, 0x00, 0xff, 0xed, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x68, // ...............h + 0x00, 0x05, 0x00, 0x0a, 0x00, 0x0f, 0x00, 0x11, 0x00, 0x1d, 0x00, 0x25, 0x00, 0x26, 0x00, 0x27, // ...........%.&.' + 0x00, 0x28, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x2d, 0x00, 0x2e, 0x00, 0x2f, 0x00, 0x30, 0x00, 0x31, // .(.+.,.-.../.0.1 + 0x00, 0x32, 0x00, 0x33, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, // .2.3.7.8.9.:.;.< + 0x00, 0x3d, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x48, 0x00, 0x4b, 0x00, 0x50, 0x00, 0x51, // .=.D.E.F.H.K.P.Q + 0x00, 0x52, 0x00, 0x53, 0x00, 0x55, 0x00, 0x59, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x89, // .R.S.U.Y.[...].. + 0x00, 0x8a, 0x00, 0x8b, 0x00, 0x8c, 0x00, 0x8d, 0x00, 0x8e, 0x00, 0x8f, 0x00, 0x90, 0x00, 0x91, // ................ + 0x00, 0x92, 0x00, 0x93, 0x00, 0x94, 0x00, 0x95, 0x00, 0x96, 0x00, 0x97, 0x00, 0x98, 0x00, 0x9b, // ................ + 0x00, 0x9c, 0x00, 0x9d, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa2, 0x00, 0xa3, 0x00, 0xa4, 0x00, 0xa5, // ................ + 0x00, 0xa6, 0x00, 0xa7, 0x00, 0xa9, 0x00, 0xaa, 0x00, 0xab, 0x00, 0xac, 0x00, 0xad, 0x00, 0xb3, // ................ + 0x00, 0xb4, 0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xbf, 0x00, 0xc0, 0x00, 0xc1, // ................ + 0x00, 0xc3, 0x00, 0xc5, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x00, 0xca, 0x00, 0xcb, 0x00, 0xcc, // ................ + 0x00, 0xcd, 0x00, 0xce, 0x00, 0xcf, 0x00, 0xd0, 0x00, 0xd2, 0x00, 0xd4, 0x00, 0xd5, 0x00, 0xd6, // ................ + 0x00, 0xd7, 0x00, 0xd8, 0x00, 0xd9, 0x00, 0xda, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd, 0x00, 0xe6, // ................ + 0x00, 0xe7, 0x00, 0xea, 0x00, 0xec, 0x00, 0xee, 0x00, 0xf0, 0x00, 0xf2, 0x00, 0xf6, 0x00, 0xf8, // ................ + 0x00, 0xfb, 0x00, 0xfd, 0x00, 0xff, 0x01, 0x01, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, // ................ + 0x01, 0x09, 0x01, 0x0a, 0x01, 0x0b, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x10, 0x01, 0x11, 0x01, 0x12, // ................ + 0x01, 0x13, 0x01, 0x17, 0x01, 0x19, 0x01, 0x1b, 0x01, 0x24, 0x01, 0x26, 0x01, 0x28, 0x01, 0x2a, // .........$.&.(.* + 0x01, 0x2c, 0x01, 0x2e, 0x01, 0x30, 0x01, 0x32, 0x01, 0x34, 0x01, 0x36, 0x01, 0x38, 0x01, 0x39, // .,...0.2.4.6.8.9 + 0x01, 0x3a, 0x01, 0x3b, 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, 0x01, 0x3f, 0x01, 0x40, 0x01, 0x49, // .:.;.<.=.>.?.@.I + 0x01, 0x51, 0x01, 0x65, 0x01, 0x66, 0x01, 0x67, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6d, 0x01, 0x6e, // .Q.e.f.g.h.i.m.n + 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x77, 0x01, 0x78, // .p.q.r.s.t.u.w.x + 0x01, 0x7a, 0x01, 0x7c, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x81, 0x01, 0x84, 0x01, 0x85, 0x01, 0x88, // .z.|.~.......... + 0x01, 0x8d, 0x01, 0x91, 0x01, 0x97, 0x01, 0x99, 0x01, 0x9b, 0x01, 0xa6, 0x01, 0xac, 0x01, 0xad, // ................ + 0x01, 0xaf, 0x01, 0xb2, 0x01, 0xb3, 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xb6, 0x01, 0xb8, 0x01, 0xba, // ................ + 0x01, 0xbb, 0x01, 0xbe, 0x01, 0xbf, 0x01, 0xc1, 0x01, 0xc2, 0x01, 0xc4, 0x01, 0xc6, 0x01, 0xc7, // ................ + 0x01, 0xc8, 0x01, 0xc9, 0x01, 0xca, 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, 0x01, 0xcf, 0x01, 0xd1, // ................ + 0x01, 0xd2, 0x01, 0xd4, 0x01, 0xd6, 0x01, 0xd8, 0x01, 0xdc, 0x01, 0xdf, 0x01, 0xe1, 0x01, 0xe2, // ................ + 0x01, 0xea, 0x01, 0xec, 0x01, 0xed, 0x01, 0xef, 0x01, 0xf0, 0x01, 0xf1, 0x01, 0xf6, 0x01, 0xf8, // ................ + 0x01, 0xf9, 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xff, 0x02, 0x05, 0x02, 0x06, 0x02, 0x0a, 0x02, 0x0e, // ................ + 0x02, 0x0f, 0x02, 0x1f, 0x02, 0x20, 0x02, 0x21, 0x02, 0x22, 0x02, 0x23, 0x02, 0x3a, 0x02, 0x3b, // ..... .!.".#.:.; + 0x02, 0x3c, 0x02, 0x3d, 0x02, 0x41, 0x02, 0x42, 0x02, 0x45, 0x02, 0x47, 0x02, 0x49, 0x02, 0x4b, // .<.=.A.B.E.G.I.K + 0x02, 0x4d, 0x02, 0x55, 0x02, 0x56, 0x02, 0x57, 0x02, 0x59, 0x02, 0x5a, 0x02, 0x5b, 0x02, 0x5d, // .M.U.V.W.Y.Z.[.] + 0x02, 0x5e, 0x02, 0x66, 0x02, 0x6b, 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x74, 0x02, 0x78, 0x02, 0x7a, // .^.f.k.l.m.t.x.z + 0x02, 0x7c, 0x02, 0x7e, 0x02, 0x81, 0x02, 0x82, 0x02, 0x84, 0x02, 0x86, 0x02, 0x87, 0x02, 0x88, // .|.~............ + 0x02, 0x91, 0x02, 0x92, 0x02, 0x96, 0x02, 0x98, 0x02, 0x99, 0x02, 0x9a, 0x02, 0x9b, 0x02, 0x9c, // ................ + 0x02, 0x9d, 0x02, 0x9e, 0x02, 0xa1, 0x02, 0xa2, 0x02, 0xa6, 0x02, 0xa7, 0x02, 0xa8, 0x02, 0xc0, // ................ + 0x02, 0xc1, 0x02, 0xc2, 0x02, 0xc3, 0x02, 0xc5, 0x02, 0xc7, 0x02, 0xca, 0x02, 0xcc, 0x02, 0xce, // ................ + 0x02, 0xd0, 0x02, 0xd2, 0x02, 0xd4, 0x02, 0xd6, 0x02, 0xd8, 0x02, 0xda, 0x02, 0xdc, 0x02, 0xde, // ................ + 0x02, 0xe0, 0x02, 0xe1, 0x02, 0xe2, 0x02, 0xe3, 0x02, 0xe4, 0x02, 0xe5, 0x02, 0xe6, 0x02, 0xe7, // ................ + 0x02, 0xe8, 0x02, 0xe9, 0x02, 0xea, 0x02, 0xeb, 0x02, 0xec, 0x02, 0xed, 0x02, 0xee, 0x02, 0xef, // ................ + 0x02, 0xf0, 0x02, 0xf1, 0x02, 0xf3, 0x02, 0xf5, 0x02, 0xf6, 0x02, 0xf7, 0x02, 0xf8, 0x02, 0xf9, // ................ + 0x02, 0xfa, 0x02, 0xfb, 0x02, 0xfc, 0x02, 0xfd, 0x02, 0xfe, 0x02, 0xff, 0x03, 0x00, 0x03, 0x01, // ................ + 0x03, 0x02, 0x03, 0x0a, 0x03, 0x0d, 0x03, 0x0f, 0x03, 0x1b, 0x03, 0x1c, 0x03, 0x1d, 0x03, 0x1e, // ................ + 0x03, 0x1f, 0x03, 0x20, 0x03, 0x21, 0x03, 0x22, 0x03, 0x23, 0x03, 0x34, 0x03, 0x35, 0x03, 0x36, // ... .!.".#.4.5.6 + 0x03, 0x37, 0x03, 0x38, 0x03, 0x39, 0x03, 0x3a, 0x03, 0x3e, 0x03, 0x3f, 0x03, 0x41, 0x03, 0x42, // .7.8.9.:.>.?.A.B + 0x00, 0x02, 0x01, 0xc8, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, // ................ + 0x00, 0x11, 0x00, 0x11, 0x00, 0x01, 0x00, 0x12, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x1d, // ................ + 0x00, 0x01, 0x00, 0x1e, 0x00, 0x24, 0x00, 0x00, 0x00, 0x25, 0x00, 0x25, 0x00, 0x02, 0x00, 0x26, // .....$...%.%...& + 0x00, 0x26, 0x00, 0x03, 0x00, 0x27, 0x00, 0x27, 0x00, 0x04, 0x00, 0x28, 0x00, 0x28, 0x00, 0x05, // .&...'.'...(.(.. + 0x00, 0x29, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x06, 0x00, 0x2d, 0x00, 0x2d, // .).*...+.,...-.- + 0x00, 0x07, 0x00, 0x2e, 0x00, 0x2e, 0x00, 0x08, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x09, 0x00, 0x30, // ........././...0 + 0x00, 0x31, 0x00, 0x06, 0x00, 0x32, 0x00, 0x32, 0x00, 0x04, 0x00, 0x33, 0x00, 0x33, 0x00, 0x0a, // .1...2.2...3.3.. + 0x00, 0x34, 0x00, 0x36, 0x00, 0x00, 0x00, 0x37, 0x00, 0x37, 0x00, 0x0b, 0x00, 0x38, 0x00, 0x38, // .4.6...7.7...8.8 + 0x00, 0x07, 0x00, 0x39, 0x00, 0x39, 0x00, 0x0c, 0x00, 0x3a, 0x00, 0x3a, 0x00, 0x0d, 0x00, 0x3b, // ...9.9...:.:...; + 0x00, 0x3b, 0x00, 0x0e, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x3d, 0x00, 0x3d, 0x00, 0x10, // .;...<.<...=.=.. + 0x00, 0x3e, 0x00, 0x43, 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x00, 0x11, 0x00, 0x45, 0x00, 0x45, // .>.C...D.D...E.E + 0x00, 0x12, 0x00, 0x46, 0x00, 0x46, 0x00, 0x13, 0x00, 0x47, 0x00, 0x47, 0x00, 0x00, 0x00, 0x48, // ...F.F...G.G...H + 0x00, 0x48, 0x00, 0x14, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x4b, 0x00, 0x15, // .H...I.J...K.K.. + 0x00, 0x4c, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x51, 0x00, 0x15, 0x00, 0x52, 0x00, 0x52, // .L.O...P.Q...R.R + 0x00, 0x16, 0x00, 0x53, 0x00, 0x53, 0x00, 0x12, 0x00, 0x54, 0x00, 0x54, 0x00, 0x00, 0x00, 0x55, // ...S.S...T.T...U + 0x00, 0x55, 0x00, 0x17, 0x00, 0x56, 0x00, 0x58, 0x00, 0x00, 0x00, 0x59, 0x00, 0x59, 0x00, 0x18, // .U...V.X...Y.Y.. + 0x00, 0x5a, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x5b, 0x00, 0x19, 0x00, 0x5c, 0x00, 0x5c, // .Z.Z...[.[...... + 0x00, 0x18, 0x00, 0x5d, 0x00, 0x5d, 0x00, 0x1a, 0x00, 0x5e, 0x00, 0x88, 0x00, 0x00, 0x00, 0x89, // ...].]...^...... + 0x00, 0x89, 0x00, 0x03, 0x00, 0x8a, 0x00, 0x8d, 0x00, 0x05, 0x00, 0x8e, 0x00, 0x91, 0x00, 0x06, // ................ + 0x00, 0x92, 0x00, 0x92, 0x00, 0x04, 0x00, 0x93, 0x00, 0x93, 0x00, 0x06, 0x00, 0x94, 0x00, 0x98, // ................ + 0x00, 0x04, 0x00, 0x99, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x9e, 0x00, 0x07, 0x00, 0x9f, // ................ + 0x00, 0x9f, 0x00, 0x0f, 0x00, 0xa0, 0x00, 0xa1, 0x00, 0x00, 0x00, 0xa2, 0x00, 0xa7, 0x00, 0x11, // ................ + 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa9, 0x00, 0xa9, 0x00, 0x13, 0x00, 0xaa, 0x00, 0xad, // ................ + 0x00, 0x14, 0x00, 0xae, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb3, 0x00, 0xb3, 0x00, 0x15, 0x00, 0xb4, // ................ + 0x00, 0xb8, 0x00, 0x16, 0x00, 0xb9, 0x00, 0xbe, 0x00, 0x00, 0x00, 0xbf, 0x00, 0xbf, 0x00, 0x18, // ................ + 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x12, 0x00, 0xc1, 0x00, 0xc1, 0x00, 0x18, 0x00, 0xc2, 0x00, 0xc2, // ................ + 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0x11, 0x00, 0xc4, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xc5, // ................ + 0x00, 0xc5, 0x00, 0x11, 0x00, 0xc6, 0x00, 0xc6, 0x00, 0x00, 0x00, 0xc7, 0x00, 0xc7, 0x00, 0x11, // ................ + 0x00, 0xc8, 0x00, 0xc8, 0x00, 0x03, 0x00, 0xc9, 0x00, 0xc9, 0x00, 0x13, 0x00, 0xca, 0x00, 0xca, // ................ + 0x00, 0x03, 0x00, 0xcb, 0x00, 0xcb, 0x00, 0x13, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0x03, 0x00, 0xcd, // ................ + 0x00, 0xcd, 0x00, 0x13, 0x00, 0xce, 0x00, 0xce, 0x00, 0x03, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0x13, // ................ + 0x00, 0xd0, 0x00, 0xd0, 0x00, 0x04, 0x00, 0xd1, 0x00, 0xd1, 0x00, 0x00, 0x00, 0xd2, 0x00, 0xd2, // ................ + 0x00, 0x04, 0x00, 0xd3, 0x00, 0xd3, 0x00, 0x00, 0x00, 0xd4, 0x00, 0xd4, 0x00, 0x05, 0x00, 0xd5, // ................ + 0x00, 0xd5, 0x00, 0x14, 0x00, 0xd6, 0x00, 0xd6, 0x00, 0x05, 0x00, 0xd7, 0x00, 0xd7, 0x00, 0x14, // ................ + 0x00, 0xd8, 0x00, 0xd8, 0x00, 0x05, 0x00, 0xd9, 0x00, 0xd9, 0x00, 0x14, 0x00, 0xda, 0x00, 0xda, // ................ + 0x00, 0x05, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0x14, 0x00, 0xdc, 0x00, 0xdc, 0x00, 0x05, 0x00, 0xdd, // ................ + 0x00, 0xdd, 0x00, 0x14, 0x00, 0xde, 0x00, 0xe5, 0x00, 0x00, 0x00, 0xe6, 0x00, 0xe6, 0x00, 0x06, // ................ + 0x00, 0xe7, 0x00, 0xe7, 0x00, 0x15, 0x00, 0xe8, 0x00, 0xe9, 0x00, 0x00, 0x00, 0xea, 0x00, 0xea, // ................ + 0x00, 0x06, 0x00, 0xeb, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xec, 0x00, 0xec, 0x00, 0x06, 0x00, 0xed, // ................ + 0x00, 0xed, 0x00, 0x00, 0x00, 0xee, 0x00, 0xee, 0x00, 0x06, 0x00, 0xef, 0x00, 0xef, 0x00, 0x00, // ................ + 0x00, 0xf0, 0x00, 0xf0, 0x00, 0x06, 0x00, 0xf1, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf2, // ................ + 0x00, 0x06, 0x00, 0xf3, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xf6, 0x00, 0xf6, 0x00, 0x07, 0x00, 0xf7, // ................ + 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x08, 0x00, 0xf9, 0x00, 0xfa, 0x00, 0x00, // ................ + 0x00, 0xfb, 0x00, 0xfb, 0x00, 0x09, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfd, 0x00, 0xfd, // ................ + 0x00, 0x09, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x09, 0x01, 0x00, // ................ + 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x09, 0x01, 0x02, 0x01, 0x04, 0x00, 0x00, // ................ + 0x01, 0x05, 0x01, 0x05, 0x00, 0x06, 0x01, 0x06, 0x01, 0x06, 0x00, 0x15, 0x01, 0x07, 0x01, 0x07, // ................ + 0x00, 0x06, 0x01, 0x08, 0x01, 0x08, 0x00, 0x15, 0x01, 0x09, 0x01, 0x09, 0x00, 0x06, 0x01, 0x0a, // ................ + 0x01, 0x0b, 0x00, 0x15, 0x01, 0x0c, 0x01, 0x0d, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x0e, 0x00, 0x04, // ................ + 0x01, 0x0f, 0x01, 0x0f, 0x00, 0x16, 0x01, 0x10, 0x01, 0x10, 0x00, 0x04, 0x01, 0x11, 0x01, 0x11, // ................ + 0x00, 0x16, 0x01, 0x12, 0x01, 0x12, 0x00, 0x04, 0x01, 0x13, 0x01, 0x13, 0x00, 0x16, 0x01, 0x14, // ................ + 0x01, 0x16, 0x00, 0x00, 0x01, 0x17, 0x01, 0x17, 0x00, 0x17, 0x01, 0x18, 0x01, 0x18, 0x00, 0x00, // ................ + 0x01, 0x19, 0x01, 0x19, 0x00, 0x17, 0x01, 0x1a, 0x01, 0x1a, 0x00, 0x00, 0x01, 0x1b, 0x01, 0x1b, // ................ + 0x00, 0x17, 0x01, 0x1c, 0x01, 0x23, 0x00, 0x00, 0x01, 0x24, 0x01, 0x24, 0x00, 0x0b, 0x01, 0x25, // .....#...$.$...% + 0x01, 0x25, 0x00, 0x00, 0x01, 0x26, 0x01, 0x26, 0x00, 0x0b, 0x01, 0x27, 0x01, 0x27, 0x00, 0x00, // .%...&.&...'.'.. + 0x01, 0x28, 0x01, 0x28, 0x00, 0x0b, 0x01, 0x29, 0x01, 0x29, 0x00, 0x00, 0x01, 0x2a, 0x01, 0x2a, // .(.(...).)...*.* + 0x00, 0x07, 0x01, 0x2b, 0x01, 0x2b, 0x00, 0x00, 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x07, 0x01, 0x2d, // ...+.+...,.,...- + 0x01, 0x2d, 0x00, 0x00, 0x01, 0x2e, 0x01, 0x2e, 0x00, 0x07, 0x01, 0x2f, 0x01, 0x2f, 0x00, 0x00, // .-........././.. + 0x01, 0x30, 0x01, 0x30, 0x00, 0x07, 0x01, 0x31, 0x01, 0x31, 0x00, 0x00, 0x01, 0x32, 0x01, 0x32, // .0.0...1.1...2.2 + 0x00, 0x07, 0x01, 0x33, 0x01, 0x33, 0x00, 0x00, 0x01, 0x34, 0x01, 0x34, 0x00, 0x07, 0x01, 0x35, // ...3.3...4.4...5 + 0x01, 0x35, 0x00, 0x00, 0x01, 0x36, 0x01, 0x36, 0x00, 0x0d, 0x01, 0x37, 0x01, 0x37, 0x00, 0x00, // .5...6.6...7.7.. + 0x01, 0x38, 0x01, 0x38, 0x00, 0x0f, 0x01, 0x39, 0x01, 0x39, 0x00, 0x18, 0x01, 0x3a, 0x01, 0x3a, // .8.8...9.9...:.: + 0x00, 0x0f, 0x01, 0x3b, 0x01, 0x3b, 0x00, 0x10, 0x01, 0x3c, 0x01, 0x3c, 0x00, 0x1a, 0x01, 0x3d, // ...;.;...<.<...= + 0x01, 0x3d, 0x00, 0x10, 0x01, 0x3e, 0x01, 0x3e, 0x00, 0x1a, 0x01, 0x3f, 0x01, 0x3f, 0x00, 0x10, // .=...>.>...?.?.. + 0x01, 0x40, 0x01, 0x40, 0x00, 0x1a, 0x01, 0x41, 0x01, 0x48, 0x00, 0x00, 0x01, 0x49, 0x01, 0x49, // .@.@...A.H...I.I + 0x00, 0x11, 0x01, 0x4a, 0x01, 0x64, 0x00, 0x00, 0x01, 0x65, 0x01, 0x65, 0x00, 0x05, 0x01, 0x66, // ...J.d...e.e...f + 0x01, 0x67, 0x00, 0x06, 0x01, 0x68, 0x01, 0x68, 0x00, 0x04, 0x01, 0x69, 0x01, 0x69, 0x00, 0x0f, // .g...h.h...i.i.. + 0x01, 0x6a, 0x01, 0x6c, 0x00, 0x00, 0x01, 0x6d, 0x01, 0x6d, 0x00, 0x02, 0x01, 0x6e, 0x01, 0x6e, // .j.l...m.m...n.n + 0x00, 0x1b, 0x01, 0x6f, 0x01, 0x6f, 0x00, 0x00, 0x01, 0x70, 0x01, 0x70, 0x00, 0x05, 0x01, 0x71, // ...o.o...p.p...q + 0x01, 0x71, 0x00, 0x10, 0x01, 0x72, 0x01, 0x72, 0x00, 0x06, 0x01, 0x73, 0x01, 0x73, 0x00, 0x04, // .q...r.r...s.s.. + 0x01, 0x74, 0x01, 0x74, 0x00, 0x06, 0x01, 0x75, 0x01, 0x75, 0x00, 0x08, 0x01, 0x76, 0x01, 0x76, // .t.t...u.u...v.v + 0x00, 0x00, 0x01, 0x77, 0x01, 0x78, 0x00, 0x06, 0x01, 0x79, 0x01, 0x79, 0x00, 0x00, 0x01, 0x7a, // ...w.x...y.y...z + 0x01, 0x7a, 0x00, 0x04, 0x01, 0x7b, 0x01, 0x7b, 0x00, 0x00, 0x01, 0x7c, 0x01, 0x7c, 0x00, 0x0a, // .z...{.{...|.|.. + 0x01, 0x7d, 0x01, 0x7d, 0x00, 0x00, 0x01, 0x7e, 0x01, 0x7e, 0x00, 0x0b, 0x01, 0x7f, 0x01, 0x7f, // .}.}...~.~...... + 0x00, 0x0f, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x01, 0x81, 0x01, 0x81, 0x00, 0x0e, 0x01, 0x82, // ................ + 0x01, 0x83, 0x00, 0x00, 0x01, 0x84, 0x01, 0x84, 0x00, 0x06, 0x01, 0x85, 0x01, 0x85, 0x00, 0x0f, // ................ + 0x01, 0x86, 0x01, 0x87, 0x00, 0x00, 0x01, 0x88, 0x01, 0x88, 0x00, 0x15, 0x01, 0x89, 0x01, 0x8c, // ................ + 0x00, 0x00, 0x01, 0x8d, 0x01, 0x8d, 0x00, 0x18, 0x01, 0x8e, 0x01, 0x90, 0x00, 0x00, 0x01, 0x91, // ................ + 0x01, 0x91, 0x00, 0x15, 0x01, 0x92, 0x01, 0x96, 0x00, 0x00, 0x01, 0x97, 0x01, 0x97, 0x00, 0x18, // ................ + 0x01, 0x98, 0x01, 0x98, 0x00, 0x00, 0x01, 0x99, 0x01, 0x99, 0x00, 0x16, 0x01, 0x9a, 0x01, 0x9a, // ................ + 0x00, 0x00, 0x01, 0x9b, 0x01, 0x9b, 0x00, 0x12, 0x01, 0x9c, 0x01, 0xa5, 0x00, 0x00, 0x01, 0xa6, // ................ + 0x01, 0xa6, 0x00, 0x16, 0x01, 0xa7, 0x01, 0xab, 0x00, 0x00, 0x01, 0xac, 0x01, 0xad, 0x00, 0x05, // ................ + 0x01, 0xae, 0x01, 0xae, 0x00, 0x00, 0x01, 0xaf, 0x01, 0xaf, 0x00, 0x1b, 0x01, 0xb0, 0x01, 0xb1, // ................ + 0x00, 0x00, 0x01, 0xb2, 0x01, 0xb3, 0x00, 0x06, 0x01, 0xb4, 0x01, 0xb4, 0x00, 0x07, 0x01, 0xb5, // ................ + 0x01, 0xb6, 0x00, 0x1c, 0x01, 0xb7, 0x01, 0xb7, 0x00, 0x00, 0x01, 0xb8, 0x01, 0xb8, 0x00, 0x08, // ................ + 0x01, 0xb9, 0x01, 0xb9, 0x00, 0x00, 0x01, 0xba, 0x01, 0xba, 0x00, 0x1d, 0x01, 0xbb, 0x01, 0xbb, // ................ + 0x00, 0x06, 0x01, 0xbc, 0x01, 0xbd, 0x00, 0x00, 0x01, 0xbe, 0x01, 0xbe, 0x00, 0x02, 0x01, 0xbf, // ................ + 0x01, 0xbf, 0x00, 0x1b, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x01, 0xc1, 0x01, 0xc1, 0x00, 0x05, // ................ + 0x01, 0xc2, 0x01, 0xc2, 0x00, 0x0e, 0x01, 0xc3, 0x01, 0xc3, 0x00, 0x00, 0x01, 0xc4, 0x01, 0xc4, // ................ + 0x00, 0x06, 0x01, 0xc5, 0x01, 0xc5, 0x00, 0x00, 0x01, 0xc6, 0x01, 0xc6, 0x00, 0x08, 0x01, 0xc7, // ................ + 0x01, 0xc9, 0x00, 0x06, 0x01, 0xca, 0x01, 0xca, 0x00, 0x04, 0x01, 0xcb, 0x01, 0xcb, 0x00, 0x00, // ................ + 0x01, 0xcc, 0x01, 0xcc, 0x00, 0x0a, 0x01, 0xcd, 0x01, 0xcd, 0x00, 0x03, 0x01, 0xce, 0x01, 0xce, // ................ + 0x00, 0x0b, 0x01, 0xcf, 0x01, 0xcf, 0x00, 0x1d, 0x01, 0xd0, 0x01, 0xd0, 0x00, 0x00, 0x01, 0xd1, // ................ + 0x01, 0xd1, 0x00, 0x0e, 0x01, 0xd2, 0x01, 0xd2, 0x00, 0x06, 0x01, 0xd3, 0x01, 0xd3, 0x00, 0x00, // ................ + 0x01, 0xd4, 0x01, 0xd4, 0x00, 0x06, 0x01, 0xd5, 0x01, 0xd5, 0x00, 0x00, 0x01, 0xd6, 0x01, 0xd6, // ................ + 0x00, 0x1c, 0x01, 0xd7, 0x01, 0xd7, 0x00, 0x00, 0x01, 0xd8, 0x01, 0xd8, 0x00, 0x1c, 0x01, 0xd9, // ................ + 0x01, 0xdb, 0x00, 0x00, 0x01, 0xdc, 0x01, 0xdc, 0x00, 0x11, 0x01, 0xdd, 0x01, 0xde, 0x00, 0x00, // ................ + 0x01, 0xdf, 0x01, 0xdf, 0x00, 0x1e, 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe1, 0x01, 0xe1, // ................ + 0x00, 0x14, 0x01, 0xe2, 0x01, 0xe2, 0x00, 0x19, 0x01, 0xe3, 0x01, 0xe9, 0x00, 0x00, 0x01, 0xea, // ................ + 0x01, 0xea, 0x00, 0x16, 0x01, 0xeb, 0x01, 0xeb, 0x00, 0x00, 0x01, 0xec, 0x01, 0xec, 0x00, 0x12, // ................ + 0x01, 0xed, 0x01, 0xed, 0x00, 0x13, 0x01, 0xee, 0x01, 0xee, 0x00, 0x00, 0x01, 0xef, 0x01, 0xef, // ................ + 0x00, 0x18, 0x01, 0xf0, 0x01, 0xf0, 0x00, 0x12, 0x01, 0xf1, 0x01, 0xf1, 0x00, 0x19, 0x01, 0xf2, // ................ + 0x01, 0xf5, 0x00, 0x00, 0x01, 0xf6, 0x01, 0xf6, 0x00, 0x1f, 0x01, 0xf7, 0x01, 0xf7, 0x00, 0x00, // ................ + 0x01, 0xf8, 0x01, 0xf8, 0x00, 0x1f, 0x01, 0xf9, 0x01, 0xf9, 0x00, 0x12, 0x01, 0xfa, 0x01, 0xfb, // ................ + 0x00, 0x00, 0x01, 0xfc, 0x01, 0xfd, 0x00, 0x14, 0x01, 0xfe, 0x01, 0xfe, 0x00, 0x00, 0x01, 0xff, // ................ + 0x01, 0xff, 0x00, 0x1e, 0x02, 0x00, 0x02, 0x04, 0x00, 0x00, 0x02, 0x05, 0x02, 0x06, 0x00, 0x1f, // ................ + 0x02, 0x07, 0x02, 0x09, 0x00, 0x00, 0x02, 0x0a, 0x02, 0x0a, 0x00, 0x18, 0x02, 0x0b, 0x02, 0x0d, // ................ + 0x00, 0x00, 0x02, 0x0e, 0x02, 0x0e, 0x00, 0x1c, 0x02, 0x0f, 0x02, 0x0f, 0x00, 0x1f, 0x02, 0x10, // ................ + 0x02, 0x1e, 0x00, 0x00, 0x02, 0x1f, 0x02, 0x1f, 0x00, 0x16, 0x02, 0x20, 0x02, 0x20, 0x00, 0x0c, // ........... . .. + 0x02, 0x21, 0x02, 0x21, 0x00, 0x18, 0x02, 0x22, 0x02, 0x22, 0x00, 0x0c, 0x02, 0x23, 0x02, 0x23, // .!.!..."."...#.# + 0x00, 0x18, 0x02, 0x24, 0x02, 0x39, 0x00, 0x00, 0x02, 0x3a, 0x02, 0x3a, 0x00, 0x12, 0x02, 0x3b, // ...$.9...:.:...; + 0x02, 0x3b, 0x00, 0x1b, 0x02, 0x3c, 0x02, 0x3c, 0x00, 0x1e, 0x02, 0x3d, 0x02, 0x3d, 0x00, 0x1b, // .;...<.<...=.=.. + 0x02, 0x3e, 0x02, 0x40, 0x00, 0x00, 0x02, 0x41, 0x02, 0x41, 0x00, 0x0e, 0x02, 0x42, 0x02, 0x42, // .>.@...A.A...B.B + 0x00, 0x19, 0x02, 0x43, 0x02, 0x44, 0x00, 0x00, 0x02, 0x45, 0x02, 0x45, 0x00, 0x08, 0x02, 0x46, // ...C.D...E.E...F + 0x02, 0x46, 0x00, 0x00, 0x02, 0x47, 0x02, 0x47, 0x00, 0x08, 0x02, 0x48, 0x02, 0x48, 0x00, 0x00, // .F...G.G...H.H.. + 0x02, 0x49, 0x02, 0x49, 0x00, 0x08, 0x02, 0x4a, 0x02, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x02, 0x4b, // .I.I...J.J...K.K + 0x00, 0x08, 0x02, 0x4c, 0x02, 0x4c, 0x00, 0x00, 0x02, 0x4d, 0x02, 0x4d, 0x00, 0x06, 0x02, 0x4e, // ...L.L...M.M...N + 0x02, 0x54, 0x00, 0x00, 0x02, 0x55, 0x02, 0x55, 0x00, 0x03, 0x02, 0x56, 0x02, 0x56, 0x00, 0x13, // .T...U.U...V.V.. + 0x02, 0x57, 0x02, 0x57, 0x00, 0x0b, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 0x02, 0x59, 0x02, 0x59, // .W.W...X.X...Y.Y + 0x00, 0x0f, 0x02, 0x5a, 0x02, 0x5a, 0x00, 0x18, 0x02, 0x5b, 0x02, 0x5b, 0x00, 0x0f, 0x02, 0x5c, // ...Z.Z...[.[.... + 0x02, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x02, 0x5d, 0x00, 0x0e, 0x02, 0x5e, 0x02, 0x5e, 0x00, 0x19, // .....].]...^.^.. + 0x02, 0x5f, 0x02, 0x65, 0x00, 0x00, 0x02, 0x66, 0x02, 0x66, 0x00, 0x15, 0x02, 0x67, 0x02, 0x6a, // ._.e...f.f...g.j + 0x00, 0x00, 0x02, 0x6b, 0x02, 0x6b, 0x00, 0x06, 0x02, 0x6c, 0x02, 0x6c, 0x00, 0x0e, 0x02, 0x6d, // ...k.k...l.l...m + 0x02, 0x6d, 0x00, 0x19, 0x02, 0x6e, 0x02, 0x73, 0x00, 0x00, 0x02, 0x74, 0x02, 0x74, 0x00, 0x06, // .m...n.s...t.t.. + 0x02, 0x75, 0x02, 0x77, 0x00, 0x00, 0x02, 0x78, 0x02, 0x78, 0x00, 0x06, 0x02, 0x79, 0x02, 0x79, // .u.w...x.x...y.y + 0x00, 0x00, 0x02, 0x7a, 0x02, 0x7a, 0x00, 0x06, 0x02, 0x7b, 0x02, 0x7b, 0x00, 0x00, 0x02, 0x7c, // ...z.z...{.{...| + 0x02, 0x7c, 0x00, 0x11, 0x02, 0x7d, 0x02, 0x7d, 0x00, 0x00, 0x02, 0x7e, 0x02, 0x7e, 0x00, 0x11, // .|...}.}...~.~.. + 0x02, 0x7f, 0x02, 0x80, 0x00, 0x00, 0x02, 0x81, 0x02, 0x81, 0x00, 0x05, 0x02, 0x82, 0x02, 0x82, // ................ + 0x00, 0x14, 0x02, 0x83, 0x02, 0x83, 0x00, 0x00, 0x02, 0x84, 0x02, 0x84, 0x00, 0x14, 0x02, 0x85, // ................ + 0x02, 0x85, 0x00, 0x00, 0x02, 0x86, 0x02, 0x86, 0x00, 0x14, 0x02, 0x87, 0x02, 0x87, 0x00, 0x0e, // ................ + 0x02, 0x88, 0x02, 0x88, 0x00, 0x19, 0x02, 0x89, 0x02, 0x90, 0x00, 0x00, 0x02, 0x91, 0x02, 0x91, // ................ + 0x00, 0x04, 0x02, 0x92, 0x02, 0x92, 0x00, 0x16, 0x02, 0x93, 0x02, 0x95, 0x00, 0x00, 0x02, 0x96, // ................ + 0x02, 0x96, 0x00, 0x16, 0x02, 0x97, 0x02, 0x97, 0x00, 0x00, 0x02, 0x98, 0x02, 0x98, 0x00, 0x12, // ................ + 0x02, 0x99, 0x02, 0x99, 0x00, 0x1d, 0x02, 0x9a, 0x02, 0x9a, 0x00, 0x18, 0x02, 0x9b, 0x02, 0x9b, // ................ + 0x00, 0x1d, 0x02, 0x9c, 0x02, 0x9c, 0x00, 0x18, 0x02, 0x9d, 0x02, 0x9d, 0x00, 0x1d, 0x02, 0x9e, // ................ + 0x02, 0x9e, 0x00, 0x18, 0x02, 0x9f, 0x02, 0xa0, 0x00, 0x00, 0x02, 0xa1, 0x02, 0xa1, 0x00, 0x1b, // ................ + 0x02, 0xa2, 0x02, 0xa2, 0x00, 0x1e, 0x02, 0xa3, 0x02, 0xa5, 0x00, 0x00, 0x02, 0xa6, 0x02, 0xa6, // ................ + 0x00, 0x1e, 0x02, 0xa7, 0x02, 0xa7, 0x00, 0x0e, 0x02, 0xa8, 0x02, 0xa8, 0x00, 0x19, 0x02, 0xa9, // ................ + 0x02, 0xbf, 0x00, 0x00, 0x02, 0xc0, 0x02, 0xc0, 0x00, 0x11, 0x02, 0xc1, 0x02, 0xc1, 0x00, 0x06, // ................ + 0x02, 0xc2, 0x02, 0xc2, 0x00, 0x15, 0x02, 0xc3, 0x02, 0xc3, 0x00, 0x0d, 0x02, 0xc4, 0x02, 0xc4, // ................ + 0x00, 0x00, 0x02, 0xc5, 0x02, 0xc5, 0x00, 0x0d, 0x02, 0xc6, 0x02, 0xc6, 0x00, 0x00, 0x02, 0xc7, // ................ + 0x02, 0xc7, 0x00, 0x0d, 0x02, 0xc8, 0x02, 0xc9, 0x00, 0x00, 0x02, 0xca, 0x02, 0xca, 0x00, 0x11, // ................ + 0x02, 0xcb, 0x02, 0xcb, 0x00, 0x00, 0x02, 0xcc, 0x02, 0xcc, 0x00, 0x11, 0x02, 0xcd, 0x02, 0xcd, // ................ + 0x00, 0x00, 0x02, 0xce, 0x02, 0xce, 0x00, 0x11, 0x02, 0xcf, 0x02, 0xcf, 0x00, 0x00, 0x02, 0xd0, // ................ + 0x02, 0xd0, 0x00, 0x11, 0x02, 0xd1, 0x02, 0xd1, 0x00, 0x00, 0x02, 0xd2, 0x02, 0xd2, 0x00, 0x11, // ................ + 0x02, 0xd3, 0x02, 0xd3, 0x00, 0x00, 0x02, 0xd4, 0x02, 0xd4, 0x00, 0x11, 0x02, 0xd5, 0x02, 0xd5, // ................ + 0x00, 0x00, 0x02, 0xd6, 0x02, 0xd6, 0x00, 0x11, 0x02, 0xd7, 0x02, 0xd7, 0x00, 0x00, 0x02, 0xd8, // ................ + 0x02, 0xd8, 0x00, 0x11, 0x02, 0xd9, 0x02, 0xd9, 0x00, 0x00, 0x02, 0xda, 0x02, 0xda, 0x00, 0x11, // ................ + 0x02, 0xdb, 0x02, 0xdb, 0x00, 0x00, 0x02, 0xdc, 0x02, 0xdc, 0x00, 0x11, 0x02, 0xdd, 0x02, 0xdd, // ................ + 0x00, 0x00, 0x02, 0xde, 0x02, 0xde, 0x00, 0x11, 0x02, 0xdf, 0x02, 0xdf, 0x00, 0x00, 0x02, 0xe0, // ................ + 0x02, 0xe0, 0x00, 0x11, 0x02, 0xe1, 0x02, 0xe1, 0x00, 0x05, 0x02, 0xe2, 0x02, 0xe2, 0x00, 0x14, // ................ + 0x02, 0xe3, 0x02, 0xe3, 0x00, 0x05, 0x02, 0xe4, 0x02, 0xe4, 0x00, 0x14, 0x02, 0xe5, 0x02, 0xe5, // ................ + 0x00, 0x05, 0x02, 0xe6, 0x02, 0xe6, 0x00, 0x14, 0x02, 0xe7, 0x02, 0xe7, 0x00, 0x05, 0x02, 0xe8, // ................ + 0x02, 0xe8, 0x00, 0x14, 0x02, 0xe9, 0x02, 0xe9, 0x00, 0x05, 0x02, 0xea, 0x02, 0xea, 0x00, 0x14, // ................ + 0x02, 0xeb, 0x02, 0xeb, 0x00, 0x05, 0x02, 0xec, 0x02, 0xec, 0x00, 0x14, 0x02, 0xed, 0x02, 0xed, // ................ + 0x00, 0x05, 0x02, 0xee, 0x02, 0xee, 0x00, 0x14, 0x02, 0xef, 0x02, 0xef, 0x00, 0x05, 0x02, 0xf0, // ................ + 0x02, 0xf0, 0x00, 0x14, 0x02, 0xf1, 0x02, 0xf1, 0x00, 0x06, 0x02, 0xf2, 0x02, 0xf2, 0x00, 0x00, // ................ + 0x02, 0xf3, 0x02, 0xf3, 0x00, 0x06, 0x02, 0xf4, 0x02, 0xf4, 0x00, 0x00, 0x02, 0xf5, 0x02, 0xf5, // ................ + 0x00, 0x04, 0x02, 0xf6, 0x02, 0xf6, 0x00, 0x16, 0x02, 0xf7, 0x02, 0xf7, 0x00, 0x04, 0x02, 0xf8, // ................ + 0x02, 0xf8, 0x00, 0x16, 0x02, 0xf9, 0x02, 0xf9, 0x00, 0x04, 0x02, 0xfa, 0x02, 0xfa, 0x00, 0x16, // ................ + 0x02, 0xfb, 0x02, 0xfb, 0x00, 0x04, 0x02, 0xfc, 0x02, 0xfc, 0x00, 0x16, 0x02, 0xfd, 0x02, 0xfd, // ................ + 0x00, 0x04, 0x02, 0xfe, 0x02, 0xfe, 0x00, 0x16, 0x02, 0xff, 0x02, 0xff, 0x00, 0x04, 0x03, 0x00, // ................ + 0x03, 0x00, 0x00, 0x16, 0x03, 0x01, 0x03, 0x01, 0x00, 0x04, 0x03, 0x02, 0x03, 0x02, 0x00, 0x16, // ................ + 0x03, 0x03, 0x03, 0x09, 0x00, 0x00, 0x03, 0x0a, 0x03, 0x0a, 0x00, 0x16, 0x03, 0x0b, 0x03, 0x0c, // ................ + 0x00, 0x00, 0x03, 0x0d, 0x03, 0x0d, 0x00, 0x07, 0x03, 0x0e, 0x03, 0x0e, 0x00, 0x00, 0x03, 0x0f, // ................ + 0x03, 0x0f, 0x00, 0x07, 0x03, 0x10, 0x03, 0x1a, 0x00, 0x00, 0x03, 0x1b, 0x03, 0x1b, 0x00, 0x0f, // ................ + 0x03, 0x1c, 0x03, 0x1c, 0x00, 0x18, 0x03, 0x1d, 0x03, 0x1d, 0x00, 0x0f, 0x03, 0x1e, 0x03, 0x1e, // ................ + 0x00, 0x18, 0x03, 0x1f, 0x03, 0x1f, 0x00, 0x0f, 0x03, 0x20, 0x03, 0x20, 0x00, 0x18, 0x03, 0x21, // ......... . ...! + 0x03, 0x21, 0x00, 0x0f, 0x03, 0x22, 0x03, 0x22, 0x00, 0x18, 0x03, 0x23, 0x03, 0x23, 0x00, 0x04, // .!..."."...#.#.. + 0x03, 0x24, 0x03, 0x35, 0x00, 0x00, 0x03, 0x36, 0x03, 0x36, 0x00, 0x01, 0x03, 0x37, 0x03, 0x39, // .$.5...6.6...7.9 + 0x00, 0x00, 0x03, 0x3a, 0x03, 0x3a, 0x00, 0x01, 0x03, 0x3b, 0x03, 0x3d, 0x00, 0x00, 0x03, 0x3e, // ...:.:...;.=...> + 0x03, 0x3f, 0x00, 0x01, 0x00, 0x02, 0x01, 0xfd, 0x00, 0x05, 0x00, 0x05, 0x00, 0x01, 0x00, 0x06, // .?.............. + 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x01, 0x00, 0x0b, 0x00, 0x0e, 0x00, 0x00, // ................ + 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x15, 0x00, 0x11, 0x00, 0x11, // ................ + 0x00, 0x0c, 0x00, 0x12, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0x1e, // ................ + 0x00, 0x23, 0x00, 0x00, 0x00, 0x24, 0x00, 0x24, 0x00, 0x02, 0x00, 0x25, 0x00, 0x25, 0x00, 0x00, // .#...$.$...%.%.. + 0x00, 0x26, 0x00, 0x26, 0x00, 0x16, 0x00, 0x27, 0x00, 0x29, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x2a, // .&.&...'.)...*.* + 0x00, 0x16, 0x00, 0x2b, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x2d, 0x00, 0x1c, 0x00, 0x2e, // ...+.,...-.-.... + 0x00, 0x31, 0x00, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x16, 0x00, 0x33, 0x00, 0x33, 0x00, 0x00, // .1...2.2...3.3.. + 0x00, 0x34, 0x00, 0x34, 0x00, 0x16, 0x00, 0x35, 0x00, 0x35, 0x00, 0x00, 0x00, 0x36, 0x00, 0x36, // .4.4...5.5...6.6 + 0x00, 0x19, 0x00, 0x37, 0x00, 0x37, 0x00, 0x08, 0x00, 0x38, 0x00, 0x38, 0x00, 0x17, 0x00, 0x39, // ...7.7...8.8...9 + 0x00, 0x39, 0x00, 0x09, 0x00, 0x3a, 0x00, 0x3a, 0x00, 0x18, 0x00, 0x3b, 0x00, 0x3b, 0x00, 0x0d, // .9...:.:...;.;.. + 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x0a, 0x00, 0x3d, 0x00, 0x3d, 0x00, 0x0e, 0x00, 0x3e, 0x00, 0x43, // .<.<...=.=...>.C + 0x00, 0x00, 0x00, 0x44, 0x00, 0x44, 0x00, 0x03, 0x00, 0x45, 0x00, 0x45, 0x00, 0x00, 0x00, 0x46, // ...D.D...E.E...F + 0x00, 0x48, 0x00, 0x04, 0x00, 0x49, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x4a, 0x00, 0x04, // .H...I.I...J.J.. + 0x00, 0x4b, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x50, 0x00, 0x51, 0x00, 0x05, 0x00, 0x52, 0x00, 0x52, // .K.O...P.Q...R.R + 0x00, 0x06, 0x00, 0x53, 0x00, 0x53, 0x00, 0x05, 0x00, 0x54, 0x00, 0x54, 0x00, 0x04, 0x00, 0x55, // ...S.S...T.T...U + 0x00, 0x55, 0x00, 0x00, 0x00, 0x56, 0x00, 0x56, 0x00, 0x07, 0x00, 0x57, 0x00, 0x57, 0x00, 0x00, // .U...V.V...W.W.. + 0x00, 0x58, 0x00, 0x58, 0x00, 0x10, 0x00, 0x59, 0x00, 0x59, 0x00, 0x11, 0x00, 0x5a, 0x00, 0x5a, // .X.X...Y.Y...Z.Z + 0x00, 0x00, 0x00, 0x5b, 0x00, 0x5b, 0x00, 0x1a, 0x00, 0x5c, 0x00, 0x5c, 0x00, 0x11, 0x00, 0x5d, // ...[.[.........] + 0x00, 0x5d, 0x00, 0x1b, 0x00, 0x5e, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x15, // .]...^.n...o.o.. + 0x00, 0x70, 0x00, 0x81, 0x00, 0x00, 0x00, 0x82, 0x00, 0x87, 0x00, 0x02, 0x00, 0x88, 0x00, 0x88, // .p.............. + 0x00, 0x00, 0x00, 0x89, 0x00, 0x89, 0x00, 0x16, 0x00, 0x8a, 0x00, 0x93, 0x00, 0x00, 0x00, 0x94, // ................ + 0x00, 0x98, 0x00, 0x16, 0x00, 0x99, 0x00, 0x99, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x9a, 0x00, 0x16, // ................ + 0x00, 0x9b, 0x00, 0x9e, 0x00, 0x17, 0x00, 0x9f, 0x00, 0x9f, 0x00, 0x0a, 0x00, 0xa0, 0x00, 0xa1, // ................ + 0x00, 0x00, 0x00, 0xa2, 0x00, 0xa7, 0x00, 0x03, 0x00, 0xa8, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xa9, // ................ + 0x00, 0xad, 0x00, 0x04, 0x00, 0xae, 0x00, 0xb2, 0x00, 0x00, 0x00, 0xb3, 0x00, 0xb3, 0x00, 0x05, // ................ + 0x00, 0xb4, 0x00, 0xb8, 0x00, 0x06, 0x00, 0xb9, 0x00, 0xba, 0x00, 0x00, 0x00, 0xbb, 0x00, 0xbe, // ................ + 0x00, 0x10, 0x00, 0xbf, 0x00, 0xbf, 0x00, 0x11, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc1, // ................ + 0x00, 0xc1, 0x00, 0x11, 0x00, 0xc2, 0x00, 0xc2, 0x00, 0x02, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0x03, // ................ + 0x00, 0xc4, 0x00, 0xc4, 0x00, 0x02, 0x00, 0xc5, 0x00, 0xc5, 0x00, 0x03, 0x00, 0xc6, 0x00, 0xc6, // ................ + 0x00, 0x02, 0x00, 0xc7, 0x00, 0xc7, 0x00, 0x03, 0x00, 0xc8, 0x00, 0xc8, 0x00, 0x16, 0x00, 0xc9, // ................ + 0x00, 0xc9, 0x00, 0x04, 0x00, 0xca, 0x00, 0xca, 0x00, 0x16, 0x00, 0xcb, 0x00, 0xcb, 0x00, 0x04, // ................ + 0x00, 0xcc, 0x00, 0xcc, 0x00, 0x16, 0x00, 0xcd, 0x00, 0xcd, 0x00, 0x04, 0x00, 0xce, 0x00, 0xce, // ................ + 0x00, 0x16, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0x04, 0x00, 0xd0, 0x00, 0xd0, 0x00, 0x00, 0x00, 0xd1, // ................ + 0x00, 0xd1, 0x00, 0x04, 0x00, 0xd2, 0x00, 0xd4, 0x00, 0x00, 0x00, 0xd5, 0x00, 0xd5, 0x00, 0x04, // ................ + 0x00, 0xd6, 0x00, 0xd6, 0x00, 0x00, 0x00, 0xd7, 0x00, 0xd7, 0x00, 0x04, 0x00, 0xd8, 0x00, 0xd8, // ................ + 0x00, 0x00, 0x00, 0xd9, 0x00, 0xd9, 0x00, 0x04, 0x00, 0xda, 0x00, 0xda, 0x00, 0x00, 0x00, 0xdb, // ................ + 0x00, 0xdb, 0x00, 0x04, 0x00, 0xdc, 0x00, 0xdc, 0x00, 0x00, 0x00, 0xdd, 0x00, 0xdd, 0x00, 0x04, // ................ + 0x00, 0xde, 0x00, 0xde, 0x00, 0x16, 0x00, 0xdf, 0x00, 0xdf, 0x00, 0x04, 0x00, 0xe0, 0x00, 0xe0, // ................ + 0x00, 0x16, 0x00, 0xe1, 0x00, 0xe1, 0x00, 0x04, 0x00, 0xe2, 0x00, 0xe2, 0x00, 0x16, 0x00, 0xe3, // ................ + 0x00, 0xe3, 0x00, 0x04, 0x00, 0xe4, 0x00, 0xe4, 0x00, 0x16, 0x00, 0xe5, 0x00, 0xe5, 0x00, 0x04, // ................ + 0x00, 0xe6, 0x00, 0xf5, 0x00, 0x00, 0x00, 0xf6, 0x00, 0xf6, 0x00, 0x1c, 0x00, 0xf7, 0x01, 0x05, // ................ + 0x00, 0x00, 0x01, 0x06, 0x01, 0x06, 0x00, 0x05, 0x01, 0x07, 0x01, 0x07, 0x00, 0x00, 0x01, 0x08, // ................ + 0x01, 0x08, 0x00, 0x05, 0x01, 0x09, 0x01, 0x09, 0x00, 0x00, 0x01, 0x0a, 0x01, 0x0b, 0x00, 0x05, // ................ + 0x01, 0x0c, 0x01, 0x0d, 0x00, 0x00, 0x01, 0x0e, 0x01, 0x0e, 0x00, 0x16, 0x01, 0x0f, 0x01, 0x0f, // ................ + 0x00, 0x06, 0x01, 0x10, 0x01, 0x10, 0x00, 0x16, 0x01, 0x11, 0x01, 0x11, 0x00, 0x06, 0x01, 0x12, // ................ + 0x01, 0x12, 0x00, 0x16, 0x01, 0x13, 0x01, 0x13, 0x00, 0x06, 0x01, 0x14, 0x01, 0x14, 0x00, 0x16, // ................ + 0x01, 0x15, 0x01, 0x15, 0x00, 0x04, 0x01, 0x16, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x1c, 0x01, 0x1c, // ................ + 0x00, 0x19, 0x01, 0x1d, 0x01, 0x1d, 0x00, 0x07, 0x01, 0x1e, 0x01, 0x1e, 0x00, 0x19, 0x01, 0x1f, // ................ + 0x01, 0x1f, 0x00, 0x07, 0x01, 0x20, 0x01, 0x20, 0x00, 0x19, 0x01, 0x21, 0x01, 0x21, 0x00, 0x07, // ..... . ...!.!.. + 0x01, 0x22, 0x01, 0x22, 0x00, 0x19, 0x01, 0x23, 0x01, 0x23, 0x00, 0x07, 0x01, 0x24, 0x01, 0x24, // ."."...#.#...$.$ + 0x00, 0x08, 0x01, 0x25, 0x01, 0x25, 0x00, 0x00, 0x01, 0x26, 0x01, 0x26, 0x00, 0x08, 0x01, 0x27, // ...%.%...&.&...' + 0x01, 0x29, 0x00, 0x00, 0x01, 0x2a, 0x01, 0x2a, 0x00, 0x17, 0x01, 0x2b, 0x01, 0x2b, 0x00, 0x10, // .)...*.*...+.+.. + 0x01, 0x2c, 0x01, 0x2c, 0x00, 0x17, 0x01, 0x2d, 0x01, 0x2d, 0x00, 0x10, 0x01, 0x2e, 0x01, 0x2e, // .,.,...-.-...... + 0x00, 0x17, 0x01, 0x2f, 0x01, 0x2f, 0x00, 0x10, 0x01, 0x30, 0x01, 0x30, 0x00, 0x17, 0x01, 0x31, // ..././...0.0...1 + 0x01, 0x31, 0x00, 0x10, 0x01, 0x32, 0x01, 0x32, 0x00, 0x17, 0x01, 0x33, 0x01, 0x33, 0x00, 0x10, // .1...2.2...3.3.. + 0x01, 0x34, 0x01, 0x34, 0x00, 0x17, 0x01, 0x35, 0x01, 0x35, 0x00, 0x10, 0x01, 0x36, 0x01, 0x36, // .4.4...5.5...6.6 + 0x00, 0x18, 0x01, 0x37, 0x01, 0x37, 0x00, 0x00, 0x01, 0x38, 0x01, 0x38, 0x00, 0x0a, 0x01, 0x39, // ...7.7...8.8...9 + 0x01, 0x39, 0x00, 0x11, 0x01, 0x3a, 0x01, 0x3a, 0x00, 0x0a, 0x01, 0x3b, 0x01, 0x3b, 0x00, 0x0e, // .9...:.:...;.;.. + 0x01, 0x3c, 0x01, 0x3c, 0x00, 0x1b, 0x01, 0x3d, 0x01, 0x3d, 0x00, 0x0e, 0x01, 0x3e, 0x01, 0x3e, // .<.<...=.=...>.> + 0x00, 0x1b, 0x01, 0x3f, 0x01, 0x3f, 0x00, 0x0e, 0x01, 0x40, 0x01, 0x40, 0x00, 0x1b, 0x01, 0x41, // ...?.?...@.@...A + 0x01, 0x42, 0x00, 0x00, 0x01, 0x43, 0x01, 0x43, 0x00, 0x16, 0x01, 0x44, 0x01, 0x44, 0x00, 0x04, // .B...C.C...D.D.. + 0x01, 0x45, 0x01, 0x45, 0x00, 0x00, 0x01, 0x46, 0x01, 0x46, 0x00, 0x10, 0x01, 0x47, 0x01, 0x47, // .E.E...F.F...G.G + 0x00, 0x00, 0x01, 0x48, 0x01, 0x48, 0x00, 0x02, 0x01, 0x49, 0x01, 0x49, 0x00, 0x03, 0x01, 0x4a, // ...H.H...I.I...J + 0x01, 0x4b, 0x00, 0x00, 0x01, 0x4c, 0x01, 0x4c, 0x00, 0x16, 0x01, 0x4d, 0x01, 0x4d, 0x00, 0x00, // .K...L.L...M.M.. + 0x01, 0x4e, 0x01, 0x4e, 0x00, 0x19, 0x01, 0x4f, 0x01, 0x4f, 0x00, 0x07, 0x01, 0x50, 0x01, 0x50, // .N.N...O.O...P.P + 0x00, 0x00, 0x01, 0x51, 0x01, 0x51, 0x00, 0x01, 0x01, 0x52, 0x01, 0x62, 0x00, 0x00, 0x01, 0x63, // ...Q.Q...R.b...c + 0x01, 0x63, 0x00, 0x02, 0x01, 0x64, 0x01, 0x67, 0x00, 0x00, 0x01, 0x68, 0x01, 0x68, 0x00, 0x16, // .c...d.g...h.h.. + 0x01, 0x69, 0x01, 0x69, 0x00, 0x0a, 0x01, 0x6a, 0x01, 0x6b, 0x00, 0x00, 0x01, 0x6c, 0x01, 0x6c, // .i.i...j.k...l.l + 0x00, 0x02, 0x01, 0x6d, 0x01, 0x6e, 0x00, 0x00, 0x01, 0x6f, 0x01, 0x6f, 0x00, 0x02, 0x01, 0x70, // ...m.n...o.o...p + 0x01, 0x70, 0x00, 0x00, 0x01, 0x71, 0x01, 0x71, 0x00, 0x0e, 0x01, 0x72, 0x01, 0x72, 0x00, 0x00, // .p...q.q...r.r.. + 0x01, 0x73, 0x01, 0x73, 0x00, 0x16, 0x01, 0x74, 0x01, 0x75, 0x00, 0x00, 0x01, 0x76, 0x01, 0x76, // .s.s...t.u...v.v + 0x00, 0x02, 0x01, 0x77, 0x01, 0x79, 0x00, 0x00, 0x01, 0x7a, 0x01, 0x7a, 0x00, 0x16, 0x01, 0x7b, // ...w.y...z.z...{ + 0x01, 0x7e, 0x00, 0x00, 0x01, 0x7f, 0x01, 0x7f, 0x00, 0x0a, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, // .~.............. + 0x01, 0x81, 0x01, 0x81, 0x00, 0x0d, 0x01, 0x82, 0x01, 0x84, 0x00, 0x00, 0x01, 0x85, 0x01, 0x85, // ................ + 0x00, 0x0a, 0x01, 0x86, 0x01, 0x86, 0x00, 0x04, 0x01, 0x87, 0x01, 0x87, 0x00, 0x00, 0x01, 0x88, // ................ + 0x01, 0x88, 0x00, 0x05, 0x01, 0x89, 0x01, 0x89, 0x00, 0x00, 0x01, 0x8a, 0x01, 0x8a, 0x00, 0x10, // ................ + 0x01, 0x8b, 0x01, 0x8b, 0x00, 0x04, 0x01, 0x8c, 0x01, 0x8c, 0x00, 0x00, 0x01, 0x8d, 0x01, 0x8d, // ................ + 0x00, 0x11, 0x01, 0x8e, 0x01, 0x90, 0x00, 0x00, 0x01, 0x91, 0x01, 0x91, 0x00, 0x05, 0x01, 0x92, // ................ + 0x01, 0x96, 0x00, 0x00, 0x01, 0x97, 0x01, 0x97, 0x00, 0x11, 0x01, 0x98, 0x01, 0x98, 0x00, 0x00, // ................ + 0x01, 0x99, 0x01, 0x99, 0x00, 0x06, 0x01, 0x9a, 0x01, 0x9b, 0x00, 0x00, 0x01, 0x9c, 0x01, 0x9d, // ................ + 0x00, 0x04, 0x01, 0x9e, 0x01, 0x9e, 0x00, 0x00, 0x01, 0x9f, 0x01, 0x9f, 0x00, 0x10, 0x01, 0xa0, // ................ + 0x01, 0xa4, 0x00, 0x00, 0x01, 0xa5, 0x01, 0xa5, 0x00, 0x10, 0x01, 0xa6, 0x01, 0xa6, 0x00, 0x06, // ................ + 0x01, 0xa7, 0x01, 0xa7, 0x00, 0x10, 0x01, 0xa8, 0x01, 0xad, 0x00, 0x00, 0x01, 0xae, 0x01, 0xae, // ................ + 0x00, 0x08, 0x01, 0xaf, 0x01, 0xaf, 0x00, 0x00, 0x01, 0xb0, 0x01, 0xb0, 0x00, 0x16, 0x01, 0xb1, // ................ + 0x01, 0xb3, 0x00, 0x00, 0x01, 0xb4, 0x01, 0xb4, 0x00, 0x1c, 0x01, 0xb5, 0x01, 0xb5, 0x00, 0x0f, // ................ + 0x01, 0xb6, 0x01, 0xb6, 0x00, 0x00, 0x01, 0xb7, 0x01, 0xb7, 0x00, 0x08, 0x01, 0xb8, 0x01, 0xb9, // ................ + 0x00, 0x00, 0x01, 0xba, 0x01, 0xba, 0x00, 0x0b, 0x01, 0xbb, 0x01, 0xbb, 0x00, 0x00, 0x01, 0xbc, // ................ + 0x01, 0xbc, 0x00, 0x02, 0x01, 0xbd, 0x01, 0xc1, 0x00, 0x00, 0x01, 0xc2, 0x01, 0xc2, 0x00, 0x0d, // ................ + 0x01, 0xc3, 0x01, 0xc6, 0x00, 0x00, 0x01, 0xc7, 0x01, 0xc7, 0x00, 0x0f, 0x01, 0xc8, 0x01, 0xc9, // ................ + 0x00, 0x00, 0x01, 0xca, 0x01, 0xca, 0x00, 0x16, 0x01, 0xcb, 0x01, 0xcc, 0x00, 0x00, 0x01, 0xcd, // ................ + 0x01, 0xcd, 0x00, 0x16, 0x01, 0xce, 0x01, 0xce, 0x00, 0x08, 0x01, 0xcf, 0x01, 0xcf, 0x00, 0x0b, // ................ + 0x01, 0xd0, 0x01, 0xd0, 0x00, 0x00, 0x01, 0xd1, 0x01, 0xd1, 0x00, 0x0d, 0x01, 0xd2, 0x01, 0xd2, // ................ + 0x00, 0x00, 0x01, 0xd3, 0x01, 0xd3, 0x00, 0x12, 0x01, 0xd4, 0x01, 0xdb, 0x00, 0x00, 0x01, 0xdc, // ................ + 0x01, 0xdc, 0x00, 0x03, 0x01, 0xdd, 0x01, 0xde, 0x00, 0x00, 0x01, 0xdf, 0x01, 0xdf, 0x00, 0x05, // ................ + 0x01, 0xe0, 0x01, 0xe0, 0x00, 0x00, 0x01, 0xe1, 0x01, 0xe1, 0x00, 0x04, 0x01, 0xe2, 0x01, 0xe2, // ................ + 0x00, 0x1a, 0x01, 0xe3, 0x01, 0xe3, 0x00, 0x00, 0x01, 0xe4, 0x01, 0xe6, 0x00, 0x05, 0x01, 0xe7, // ................ + 0x01, 0xe7, 0x00, 0x13, 0x01, 0xe8, 0x01, 0xe9, 0x00, 0x05, 0x01, 0xea, 0x01, 0xea, 0x00, 0x06, // ................ + 0x01, 0xeb, 0x01, 0xec, 0x00, 0x05, 0x01, 0xed, 0x01, 0xed, 0x00, 0x04, 0x01, 0xee, 0x01, 0xee, // ................ + 0x00, 0x00, 0x01, 0xef, 0x01, 0xef, 0x00, 0x11, 0x01, 0xf0, 0x01, 0xf0, 0x00, 0x04, 0x01, 0xf1, // ................ + 0x01, 0xf1, 0x00, 0x1a, 0x01, 0xf2, 0x01, 0xf2, 0x00, 0x05, 0x01, 0xf3, 0x01, 0xf3, 0x00, 0x14, // ................ + 0x01, 0xf4, 0x01, 0xf5, 0x00, 0x05, 0x01, 0xf6, 0x01, 0xf7, 0x00, 0x00, 0x01, 0xf8, 0x01, 0xf8, // ................ + 0x00, 0x05, 0x01, 0xf9, 0x01, 0xf9, 0x00, 0x00, 0x01, 0xfa, 0x01, 0xfa, 0x00, 0x05, 0x01, 0xfb, // ................ + 0x01, 0xfb, 0x00, 0x00, 0x01, 0xfc, 0x01, 0xfd, 0x00, 0x04, 0x01, 0xfe, 0x01, 0xfe, 0x00, 0x00, // ................ + 0x01, 0xff, 0x01, 0xff, 0x00, 0x05, 0x02, 0x00, 0x02, 0x00, 0x00, 0x04, 0x02, 0x01, 0x02, 0x01, // ................ + 0x00, 0x07, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00, 0x02, 0x05, 0x02, 0x05, 0x00, 0x13, 0x02, 0x06, // ................ + 0x02, 0x06, 0x00, 0x05, 0x02, 0x07, 0x02, 0x07, 0x00, 0x00, 0x02, 0x08, 0x02, 0x09, 0x00, 0x05, // ................ + 0x02, 0x0a, 0x02, 0x0a, 0x00, 0x11, 0x02, 0x0b, 0x02, 0x0b, 0x00, 0x00, 0x02, 0x0c, 0x02, 0x0c, // ................ + 0x00, 0x16, 0x02, 0x0d, 0x02, 0x11, 0x00, 0x00, 0x02, 0x12, 0x02, 0x12, 0x00, 0x02, 0x02, 0x13, // ................ + 0x02, 0x1d, 0x00, 0x00, 0x02, 0x1e, 0x02, 0x1e, 0x00, 0x16, 0x02, 0x1f, 0x02, 0x1f, 0x00, 0x06, // ................ + 0x02, 0x20, 0x02, 0x20, 0x00, 0x09, 0x02, 0x21, 0x02, 0x21, 0x00, 0x11, 0x02, 0x22, 0x02, 0x22, // . . ...!.!..."." + 0x00, 0x09, 0x02, 0x23, 0x02, 0x23, 0x00, 0x11, 0x02, 0x24, 0x02, 0x24, 0x00, 0x16, 0x02, 0x25, // ...#.#...$.$...% + 0x02, 0x25, 0x00, 0x04, 0x02, 0x26, 0x02, 0x26, 0x00, 0x16, 0x02, 0x27, 0x02, 0x27, 0x00, 0x00, // .%...&.&...'.'.. + 0x02, 0x28, 0x02, 0x28, 0x00, 0x16, 0x02, 0x29, 0x02, 0x29, 0x00, 0x04, 0x02, 0x2a, 0x02, 0x2a, // .(.(...).)...*.* + 0x00, 0x16, 0x02, 0x2b, 0x02, 0x2b, 0x00, 0x00, 0x02, 0x2c, 0x02, 0x2c, 0x00, 0x16, 0x02, 0x2d, // ...+.+...,.,...- + 0x02, 0x2d, 0x00, 0x04, 0x02, 0x2e, 0x02, 0x35, 0x00, 0x00, 0x02, 0x36, 0x02, 0x36, 0x00, 0x05, // .-.....5...6.6.. + 0x02, 0x37, 0x02, 0x40, 0x00, 0x00, 0x02, 0x41, 0x02, 0x41, 0x00, 0x0d, 0x02, 0x42, 0x02, 0x42, // .7.@...A.A...B.B + 0x00, 0x1a, 0x02, 0x43, 0x02, 0x45, 0x00, 0x00, 0x02, 0x46, 0x02, 0x46, 0x00, 0x05, 0x02, 0x47, // ...C.E...F.F...G + 0x02, 0x4a, 0x00, 0x00, 0x02, 0x4b, 0x02, 0x4b, 0x00, 0x08, 0x02, 0x4c, 0x02, 0x4d, 0x00, 0x00, // .J...K.K...L.M.. + 0x02, 0x4e, 0x02, 0x4e, 0x00, 0x05, 0x02, 0x4f, 0x02, 0x4f, 0x00, 0x00, 0x02, 0x50, 0x02, 0x50, // .N.N...O.O...P.P + 0x00, 0x05, 0x02, 0x51, 0x02, 0x52, 0x00, 0x00, 0x02, 0x53, 0x02, 0x53, 0x00, 0x16, 0x02, 0x54, // ...Q.R...S.S...T + 0x02, 0x54, 0x00, 0x04, 0x02, 0x55, 0x02, 0x55, 0x00, 0x16, 0x02, 0x56, 0x02, 0x56, 0x00, 0x04, // .T...U.U...V.V.. + 0x02, 0x57, 0x02, 0x57, 0x00, 0x08, 0x02, 0x58, 0x02, 0x58, 0x00, 0x00, 0x02, 0x59, 0x02, 0x59, // .W.W...X.X...Y.Y + 0x00, 0x0a, 0x02, 0x5a, 0x02, 0x5a, 0x00, 0x11, 0x02, 0x5b, 0x02, 0x5b, 0x00, 0x0a, 0x02, 0x5c, // ...Z.Z...[.[.... + 0x02, 0x5c, 0x00, 0x00, 0x02, 0x5d, 0x02, 0x5d, 0x00, 0x0d, 0x02, 0x5e, 0x02, 0x5e, 0x00, 0x1a, // .....].]...^.^.. + 0x02, 0x5f, 0x02, 0x5f, 0x00, 0x08, 0x02, 0x60, 0x02, 0x60, 0x00, 0x00, 0x02, 0x61, 0x02, 0x61, // ._._...`.`...a.a + 0x00, 0x12, 0x02, 0x62, 0x02, 0x62, 0x00, 0x14, 0x02, 0x63, 0x02, 0x6b, 0x00, 0x00, 0x02, 0x6c, // ...b.b...c.k...l + 0x02, 0x6c, 0x00, 0x0d, 0x02, 0x6d, 0x02, 0x6d, 0x00, 0x1a, 0x02, 0x6e, 0x02, 0x6f, 0x00, 0x00, // .l...m.m...n.o.. + 0x02, 0x70, 0x02, 0x70, 0x00, 0x0f, 0x02, 0x71, 0x02, 0x71, 0x00, 0x13, 0x02, 0x72, 0x02, 0x72, // .p.p...q.q...r.r + 0x00, 0x00, 0x02, 0x73, 0x02, 0x73, 0x00, 0x05, 0x02, 0x74, 0x02, 0x74, 0x00, 0x00, 0x02, 0x75, // ...s.s...t.t...u + 0x02, 0x75, 0x00, 0x05, 0x02, 0x76, 0x02, 0x76, 0x00, 0x12, 0x02, 0x77, 0x02, 0x77, 0x00, 0x14, // .u...v.v...w.w.. + 0x02, 0x78, 0x02, 0x78, 0x00, 0x00, 0x02, 0x79, 0x02, 0x79, 0x00, 0x05, 0x02, 0x7a, 0x02, 0x7a, // .x.x...y.y...z.z + 0x00, 0x00, 0x02, 0x7b, 0x02, 0x7b, 0x00, 0x02, 0x02, 0x7c, 0x02, 0x7c, 0x00, 0x03, 0x02, 0x7d, // ...{.{...|.|...} + 0x02, 0x7d, 0x00, 0x02, 0x02, 0x7e, 0x02, 0x7e, 0x00, 0x03, 0x02, 0x7f, 0x02, 0x81, 0x00, 0x00, // .}...~.~........ + 0x02, 0x82, 0x02, 0x82, 0x00, 0x04, 0x02, 0x83, 0x02, 0x83, 0x00, 0x00, 0x02, 0x84, 0x02, 0x84, // ................ + 0x00, 0x04, 0x02, 0x85, 0x02, 0x85, 0x00, 0x00, 0x02, 0x86, 0x02, 0x86, 0x00, 0x04, 0x02, 0x87, // ................ + 0x02, 0x87, 0x00, 0x0d, 0x02, 0x88, 0x02, 0x88, 0x00, 0x1a, 0x02, 0x89, 0x02, 0x8d, 0x00, 0x00, // ................ + 0x02, 0x8e, 0x02, 0x8e, 0x00, 0x05, 0x02, 0x8f, 0x02, 0x8f, 0x00, 0x00, 0x02, 0x90, 0x02, 0x90, // ................ + 0x00, 0x05, 0x02, 0x91, 0x02, 0x91, 0x00, 0x16, 0x02, 0x92, 0x02, 0x92, 0x00, 0x06, 0x02, 0x93, // ................ + 0x02, 0x93, 0x00, 0x16, 0x02, 0x94, 0x02, 0x94, 0x00, 0x04, 0x02, 0x95, 0x02, 0x95, 0x00, 0x16, // ................ + 0x02, 0x96, 0x02, 0x96, 0x00, 0x06, 0x02, 0x97, 0x02, 0x98, 0x00, 0x00, 0x02, 0x99, 0x02, 0x99, // ................ + 0x00, 0x0b, 0x02, 0x9a, 0x02, 0x9a, 0x00, 0x11, 0x02, 0x9b, 0x02, 0x9b, 0x00, 0x0b, 0x02, 0x9c, // ................ + 0x02, 0x9c, 0x00, 0x11, 0x02, 0x9d, 0x02, 0x9d, 0x00, 0x0b, 0x02, 0x9e, 0x02, 0x9e, 0x00, 0x11, // ................ + 0x02, 0x9f, 0x02, 0x9f, 0x00, 0x12, 0x02, 0xa0, 0x02, 0xa0, 0x00, 0x14, 0x02, 0xa1, 0x02, 0xa1, // ................ + 0x00, 0x00, 0x02, 0xa2, 0x02, 0xa2, 0x00, 0x05, 0x02, 0xa3, 0x02, 0xa3, 0x00, 0x00, 0x02, 0xa4, // ................ + 0x02, 0xa4, 0x00, 0x05, 0x02, 0xa5, 0x02, 0xa5, 0x00, 0x00, 0x02, 0xa6, 0x02, 0xa6, 0x00, 0x05, // ................ + 0x02, 0xa7, 0x02, 0xa7, 0x00, 0x0d, 0x02, 0xa8, 0x02, 0xa8, 0x00, 0x1a, 0x02, 0xa9, 0x02, 0xab, // ................ + 0x00, 0x00, 0x02, 0xac, 0x02, 0xae, 0x00, 0x04, 0x02, 0xaf, 0x02, 0xb2, 0x00, 0x00, 0x02, 0xb3, // ................ + 0x02, 0xb3, 0x00, 0x0f, 0x02, 0xb4, 0x02, 0xb6, 0x00, 0x00, 0x02, 0xb7, 0x02, 0xb7, 0x00, 0x16, // ................ + 0x02, 0xb8, 0x02, 0xb8, 0x00, 0x04, 0x02, 0xb9, 0x02, 0xbc, 0x00, 0x00, 0x02, 0xbd, 0x02, 0xbd, // ................ + 0x00, 0x0f, 0x02, 0xbe, 0x02, 0xbe, 0x00, 0x13, 0x02, 0xbf, 0x02, 0xbf, 0x00, 0x02, 0x02, 0xc0, // ................ + 0x02, 0xc0, 0x00, 0x03, 0x02, 0xc1, 0x02, 0xc1, 0x00, 0x00, 0x02, 0xc2, 0x02, 0xc2, 0x00, 0x05, // ................ + 0x02, 0xc3, 0x02, 0xc3, 0x00, 0x18, 0x02, 0xc4, 0x02, 0xc4, 0x00, 0x00, 0x02, 0xc5, 0x02, 0xc5, // ................ + 0x00, 0x18, 0x02, 0xc6, 0x02, 0xc6, 0x00, 0x00, 0x02, 0xc7, 0x02, 0xc7, 0x00, 0x18, 0x02, 0xc8, // ................ + 0x02, 0xc8, 0x00, 0x00, 0x02, 0xc9, 0x02, 0xc9, 0x00, 0x02, 0x02, 0xca, 0x02, 0xca, 0x00, 0x03, // ................ + 0x02, 0xcb, 0x02, 0xcb, 0x00, 0x02, 0x02, 0xcc, 0x02, 0xcc, 0x00, 0x03, 0x02, 0xcd, 0x02, 0xcd, // ................ + 0x00, 0x02, 0x02, 0xce, 0x02, 0xce, 0x00, 0x03, 0x02, 0xcf, 0x02, 0xcf, 0x00, 0x02, 0x02, 0xd0, // ................ + 0x02, 0xd0, 0x00, 0x03, 0x02, 0xd1, 0x02, 0xd1, 0x00, 0x02, 0x02, 0xd2, 0x02, 0xd2, 0x00, 0x03, // ................ + 0x02, 0xd3, 0x02, 0xd3, 0x00, 0x02, 0x02, 0xd4, 0x02, 0xd4, 0x00, 0x03, 0x02, 0xd5, 0x02, 0xd5, // ................ + 0x00, 0x02, 0x02, 0xd6, 0x02, 0xd6, 0x00, 0x03, 0x02, 0xd7, 0x02, 0xd7, 0x00, 0x02, 0x02, 0xd8, // ................ + 0x02, 0xd8, 0x00, 0x03, 0x02, 0xd9, 0x02, 0xd9, 0x00, 0x02, 0x02, 0xda, 0x02, 0xda, 0x00, 0x03, // ................ + 0x02, 0xdb, 0x02, 0xdb, 0x00, 0x02, 0x02, 0xdc, 0x02, 0xdc, 0x00, 0x03, 0x02, 0xdd, 0x02, 0xdd, // ................ + 0x00, 0x02, 0x02, 0xde, 0x02, 0xde, 0x00, 0x03, 0x02, 0xdf, 0x02, 0xdf, 0x00, 0x02, 0x02, 0xe0, // ................ + 0x02, 0xe0, 0x00, 0x03, 0x02, 0xe1, 0x02, 0xe1, 0x00, 0x00, 0x02, 0xe2, 0x02, 0xe2, 0x00, 0x04, // ................ + 0x02, 0xe3, 0x02, 0xe3, 0x00, 0x00, 0x02, 0xe4, 0x02, 0xe4, 0x00, 0x04, 0x02, 0xe5, 0x02, 0xe5, // ................ + 0x00, 0x00, 0x02, 0xe6, 0x02, 0xe6, 0x00, 0x04, 0x02, 0xe7, 0x02, 0xe7, 0x00, 0x00, 0x02, 0xe8, // ................ + 0x02, 0xe8, 0x00, 0x04, 0x02, 0xe9, 0x02, 0xe9, 0x00, 0x00, 0x02, 0xea, 0x02, 0xea, 0x00, 0x04, // ................ + 0x02, 0xeb, 0x02, 0xeb, 0x00, 0x00, 0x02, 0xec, 0x02, 0xec, 0x00, 0x04, 0x02, 0xed, 0x02, 0xed, // ................ + 0x00, 0x00, 0x02, 0xee, 0x02, 0xee, 0x00, 0x04, 0x02, 0xef, 0x02, 0xef, 0x00, 0x00, 0x02, 0xf0, // ................ + 0x02, 0xf0, 0x00, 0x04, 0x02, 0xf1, 0x02, 0xf4, 0x00, 0x00, 0x02, 0xf5, 0x02, 0xf5, 0x00, 0x16, // ................ + 0x02, 0xf6, 0x02, 0xf6, 0x00, 0x06, 0x02, 0xf7, 0x02, 0xf7, 0x00, 0x16, 0x02, 0xf8, 0x02, 0xf8, // ................ + 0x00, 0x06, 0x02, 0xf9, 0x02, 0xf9, 0x00, 0x16, 0x02, 0xfa, 0x02, 0xfa, 0x00, 0x06, 0x02, 0xfb, // ................ + 0x02, 0xfb, 0x00, 0x16, 0x02, 0xfc, 0x02, 0xfc, 0x00, 0x06, 0x02, 0xfd, 0x02, 0xfd, 0x00, 0x16, // ................ + 0x02, 0xfe, 0x02, 0xfe, 0x00, 0x06, 0x02, 0xff, 0x02, 0xff, 0x00, 0x16, 0x03, 0x00, 0x03, 0x00, // ................ + 0x00, 0x06, 0x03, 0x01, 0x03, 0x01, 0x00, 0x16, 0x03, 0x02, 0x03, 0x02, 0x00, 0x06, 0x03, 0x03, // ................ + 0x03, 0x03, 0x00, 0x16, 0x03, 0x04, 0x03, 0x04, 0x00, 0x04, 0x03, 0x05, 0x03, 0x05, 0x00, 0x16, // ................ + 0x03, 0x06, 0x03, 0x06, 0x00, 0x04, 0x03, 0x07, 0x03, 0x07, 0x00, 0x16, 0x03, 0x08, 0x03, 0x08, // ................ + 0x00, 0x04, 0x03, 0x09, 0x03, 0x09, 0x00, 0x16, 0x03, 0x0a, 0x03, 0x0a, 0x00, 0x06, 0x03, 0x0b, // ................ + 0x03, 0x0b, 0x00, 0x16, 0x03, 0x0c, 0x03, 0x0c, 0x00, 0x04, 0x03, 0x0d, 0x03, 0x0d, 0x00, 0x17, // ................ + 0x03, 0x0e, 0x03, 0x0e, 0x00, 0x10, 0x03, 0x0f, 0x03, 0x0f, 0x00, 0x17, 0x03, 0x10, 0x03, 0x10, // ................ + 0x00, 0x10, 0x03, 0x11, 0x03, 0x11, 0x00, 0x00, 0x03, 0x12, 0x03, 0x12, 0x00, 0x10, 0x03, 0x13, // ................ + 0x03, 0x13, 0x00, 0x00, 0x03, 0x14, 0x03, 0x14, 0x00, 0x10, 0x03, 0x15, 0x03, 0x15, 0x00, 0x00, // ................ + 0x03, 0x16, 0x03, 0x16, 0x00, 0x10, 0x03, 0x17, 0x03, 0x17, 0x00, 0x00, 0x03, 0x18, 0x03, 0x18, // ................ + 0x00, 0x10, 0x03, 0x19, 0x03, 0x19, 0x00, 0x00, 0x03, 0x1a, 0x03, 0x1a, 0x00, 0x10, 0x03, 0x1b, // ................ + 0x03, 0x1b, 0x00, 0x0a, 0x03, 0x1c, 0x03, 0x1c, 0x00, 0x11, 0x03, 0x1d, 0x03, 0x1d, 0x00, 0x0a, // ................ + 0x03, 0x1e, 0x03, 0x1e, 0x00, 0x11, 0x03, 0x1f, 0x03, 0x1f, 0x00, 0x0a, 0x03, 0x20, 0x03, 0x20, // ............. . + 0x00, 0x11, 0x03, 0x21, 0x03, 0x21, 0x00, 0x0a, 0x03, 0x22, 0x03, 0x22, 0x00, 0x11, 0x03, 0x23, // ...!.!..."."...# + 0x03, 0x23, 0x00, 0x16, 0x03, 0x24, 0x03, 0x2f, 0x00, 0x00, 0x03, 0x30, 0x03, 0x32, 0x00, 0x15, // .#...$./...0.2.. + 0x03, 0x33, 0x03, 0x33, 0x00, 0x00, 0x03, 0x34, 0x03, 0x35, 0x00, 0x01, 0x03, 0x36, 0x03, 0x36, // .3.3...4.5...6.6 + 0x00, 0x0c, 0x03, 0x37, 0x03, 0x39, 0x00, 0x01, 0x03, 0x3a, 0x03, 0x3a, 0x00, 0x0c, 0x03, 0x3b, // ...7.9...:.:...; + 0x03, 0x3d, 0x00, 0x00, 0x03, 0x3e, 0x03, 0x3f, 0x00, 0x0c, 0x03, 0x40, 0x03, 0x40, 0x00, 0x00, // .=...>.?...@.@.. + 0x03, 0x41, 0x03, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x36, // .A.B...........6 + 0x00, 0x6e, 0x00, 0x02, 0x44, 0x46, 0x4c, 0x54, 0x00, 0x0e, 0x6c, 0x61, 0x74, 0x6e, 0x00, 0x20, // .n..DFLT..latn. + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, // ................ + 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, 0x00, 0x01, 0x00, 0x05, // ................ + 0x61, 0x61, 0x6c, 0x74, 0x00, 0x20, 0x61, 0x61, 0x6c, 0x74, 0x00, 0x20, 0x6c, 0x69, 0x67, 0x61, // aalt. aalt. liga + 0x00, 0x26, 0x6c, 0x6e, 0x75, 0x6d, 0x00, 0x2c, 0x73, 0x6d, 0x63, 0x70, 0x00, 0x32, 0x00, 0x00, // .&lnum.,smcp.2.. + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, // ................ + 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x0a, 0x02, 0x5a, 0x04, 0x90, 0x04, 0xb0, // ...........Z.... + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x01, 0xd2, 0x00, 0xe6, 0x03, 0x7f, // ................ + 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, 0x03, 0xa2, 0x03, 0xa3, 0x03, 0xa4, // ................ + 0x03, 0xa5, 0x03, 0x91, 0x03, 0x8e, 0x03, 0x8d, 0x03, 0x8c, 0x03, 0x8b, 0x03, 0x8a, 0x03, 0x89, // ................ + 0x03, 0x88, 0x03, 0x87, 0x03, 0x86, 0x03, 0x85, 0x03, 0x84, 0x03, 0x83, 0x03, 0x81, 0x03, 0x80, // ................ + 0x03, 0xa6, 0x03, 0x7e, 0x03, 0x7d, 0x03, 0x7c, 0x03, 0x7b, 0x03, 0x7a, 0x03, 0x79, 0x03, 0x78, // ...~.}.|.{.z.y.x + 0x03, 0x77, 0x03, 0x76, 0x03, 0x75, 0x03, 0x91, 0x03, 0x8e, 0x03, 0x8d, 0x03, 0x8c, 0x03, 0x8b, // .w.v.u.......... + 0x03, 0x8a, 0x03, 0x89, 0x03, 0x88, 0x03, 0x87, 0x03, 0x86, 0x03, 0x85, 0x03, 0x84, 0x03, 0x83, // ................ + 0x03, 0x81, 0x03, 0x80, 0x03, 0xa6, 0x03, 0x7e, 0x03, 0x7d, 0x03, 0x7c, 0x03, 0x7b, 0x03, 0x7a, // .......~.}.|.{.z + 0x03, 0x79, 0x03, 0x78, 0x03, 0x77, 0x03, 0x76, 0x03, 0x75, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, // .y.x.w.v.u...... + 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, 0x03, 0xc3, // ................ + 0x03, 0xc4, 0x03, 0xc5, 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xb6, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, // ................ + 0x03, 0xcb, 0x03, 0xcc, 0x03, 0xcd, 0x03, 0xce, 0x03, 0xcf, 0x03, 0xd0, 0x03, 0xd1, 0x03, 0xd2, // ................ + 0x04, 0x03, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbf, // ................ + 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, 0x03, 0xc6, 0x03, 0xc7, // ................ + 0x03, 0xb6, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, 0x03, 0xcb, 0x03, 0xcc, 0x03, 0xcd, 0x03, 0xce, // ................ + 0x03, 0xcf, 0x03, 0xd0, 0x03, 0xd1, 0x03, 0xd2, 0x04, 0x07, 0x03, 0xd3, 0x03, 0xd3, 0x03, 0xd4, // ................ + 0x03, 0xd4, 0x03, 0xd5, 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xd6, 0x03, 0xd7, 0x03, 0xd7, 0x03, 0xd9, // ................ + 0x03, 0xd9, 0x03, 0xda, 0x03, 0xda, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xdb, 0x03, 0xdb, 0x03, 0xdc, // ................ + 0x03, 0xdc, 0x03, 0xdd, 0x03, 0xdd, 0x03, 0xde, 0x03, 0xde, 0x03, 0xdf, 0x03, 0xdf, 0x03, 0xe0, // ................ + 0x03, 0xe0, 0x03, 0xe1, 0x03, 0xe1, 0x03, 0xe3, 0x03, 0xe3, 0x03, 0xe4, 0x03, 0xe4, 0x03, 0xe5, // ................ + 0x03, 0xe5, 0x03, 0x6b, 0x03, 0x6b, 0x03, 0xe7, 0x03, 0xe7, 0x03, 0xe8, 0x03, 0xe8, 0x03, 0xe9, // ...k.k.......... + 0x03, 0xea, 0x03, 0xea, 0x03, 0xeb, 0x03, 0xeb, 0x03, 0xec, 0x03, 0xec, 0x03, 0xed, 0x03, 0xed, // ................ + 0x03, 0xee, 0x03, 0xee, 0x03, 0xef, 0x03, 0xef, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf1, 0x03, 0xf1, // ................ + 0x03, 0xf2, 0x03, 0xf2, 0x03, 0xf3, 0x03, 0xf3, 0x03, 0xf4, 0x03, 0xf4, 0x03, 0xf5, 0x03, 0xf5, // ................ + 0x03, 0xf6, 0x03, 0xf6, 0x03, 0xf7, 0x03, 0xf7, 0x03, 0xf8, 0x03, 0xf8, 0x03, 0xf9, 0x03, 0xf9, // ................ + 0x03, 0xfa, 0x03, 0xfa, 0x03, 0xfb, 0x03, 0xfb, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfd, 0x03, 0xfd, // ................ + 0x03, 0xfe, 0x03, 0xfe, 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xff, 0x03, 0xff, 0x04, 0x00, 0x04, 0x00, // ................ + 0x04, 0x01, 0x04, 0x01, 0x04, 0x02, 0x04, 0x02, 0x03, 0xe6, 0x03, 0xe6, 0x04, 0x0a, 0x04, 0x0a, // ................ + 0x04, 0x09, 0x04, 0x09, 0x04, 0x08, 0x04, 0x08, 0x04, 0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x05, // ................ + 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x03, 0xbe, 0x03, 0xbe, 0x00, 0x02, 0x00, 0x13, 0x00, 0x13, // ................ + 0x00, 0x1c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x3d, 0x00, 0x0a, 0x00, 0x44, 0x00, 0x5d, 0x00, 0x24, // .....$.=...D.].$ + 0x00, 0x82, 0x00, 0x87, 0x00, 0x3e, 0x00, 0x89, 0x00, 0x98, 0x00, 0x44, 0x00, 0x9b, 0x00, 0x9f, // .....>.....D.... + 0x00, 0x54, 0x00, 0xa1, 0x00, 0xa7, 0x00, 0x59, 0x00, 0xa9, 0x00, 0xb8, 0x00, 0x60, 0x00, 0xbb, // .T.....Y.....`.. + 0x00, 0xbf, 0x00, 0x70, 0x00, 0xc1, 0x00, 0xcb, 0x00, 0x75, 0x00, 0xce, 0x00, 0xe1, 0x00, 0x80, // ...p.....u...... + 0x00, 0xe4, 0x00, 0xe7, 0x00, 0x94, 0x00, 0xea, 0x00, 0xf2, 0x00, 0x98, 0x00, 0xf6, 0x00, 0xf9, // ................ + 0x00, 0xa1, 0x00, 0xfb, 0x01, 0x02, 0x00, 0xa5, 0x01, 0x05, 0x01, 0x0a, 0x00, 0xad, 0x01, 0x0e, // ................ + 0x01, 0x13, 0x00, 0xb3, 0x01, 0x16, 0x01, 0x40, 0x00, 0xb9, 0x01, 0x48, 0x01, 0x49, 0x00, 0xe4, // .......@...H.I.. + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x01, 0xbe, 0x00, 0xdc, 0x03, 0x91, // ................ + 0x03, 0x8e, 0x03, 0x8d, 0x03, 0x8c, 0x03, 0x8b, 0x03, 0x8a, 0x03, 0x89, 0x03, 0x88, 0x03, 0x87, // ................ + 0x03, 0x86, 0x03, 0x85, 0x03, 0x84, 0x03, 0x83, 0x03, 0x81, 0x03, 0x80, 0x03, 0xa6, 0x03, 0x7e, // ...............~ + 0x03, 0x7d, 0x03, 0x7c, 0x03, 0x7b, 0x03, 0x7a, 0x03, 0x79, 0x03, 0x78, 0x03, 0x77, 0x03, 0x76, // .}.|.{.z.y.x.w.v + 0x03, 0x75, 0x03, 0x91, 0x03, 0x8e, 0x03, 0x8d, 0x03, 0x8c, 0x03, 0x8b, 0x03, 0x8a, 0x03, 0x89, // .u.............. + 0x03, 0x88, 0x03, 0x87, 0x03, 0x86, 0x03, 0x85, 0x03, 0x84, 0x03, 0x83, 0x03, 0x81, 0x03, 0x80, // ................ + 0x03, 0xa6, 0x03, 0x7e, 0x03, 0x7d, 0x03, 0x7c, 0x03, 0x7b, 0x03, 0x7a, 0x03, 0x79, 0x03, 0x78, // ...~.}.|.{.z.y.x + 0x03, 0x77, 0x03, 0x76, 0x03, 0x75, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, // .w.v.u.......... + 0x03, 0xbd, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, // ................ + 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xb6, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, 0x03, 0xcb, 0x03, 0xcc, // ................ + 0x03, 0xcd, 0x03, 0xce, 0x03, 0xcf, 0x03, 0xd0, 0x03, 0xd1, 0x03, 0xd2, 0x04, 0x03, 0x03, 0xb8, // ................ + 0x03, 0xb9, 0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, // ................ + 0x03, 0xc2, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xb6, 0x03, 0xc8, // ................ + 0x03, 0xc9, 0x03, 0xca, 0x03, 0xcb, 0x03, 0xcc, 0x03, 0xcd, 0x03, 0xce, 0x03, 0xcf, 0x03, 0xd0, // ................ + 0x03, 0xd1, 0x03, 0xd2, 0x04, 0x07, 0x03, 0xd3, 0x03, 0xd3, 0x03, 0xd4, 0x03, 0xd4, 0x03, 0xd5, // ................ + 0x03, 0xd5, 0x03, 0xd6, 0x03, 0xd6, 0x03, 0xd7, 0x03, 0xd7, 0x03, 0xd9, 0x03, 0xd9, 0x03, 0xda, // ................ + 0x03, 0xda, 0x03, 0xb5, 0x03, 0xb5, 0x03, 0xdb, 0x03, 0xdb, 0x03, 0xdc, 0x03, 0xdc, 0x03, 0xdd, // ................ + 0x03, 0xdd, 0x03, 0xde, 0x03, 0xde, 0x03, 0xdf, 0x03, 0xdf, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe1, // ................ + 0x03, 0xe1, 0x03, 0xe3, 0x03, 0xe3, 0x03, 0xe4, 0x03, 0xe4, 0x03, 0xe5, 0x03, 0xe5, 0x03, 0x6b, // ...............k + 0x03, 0x6b, 0x03, 0xe7, 0x03, 0xe7, 0x03, 0xe8, 0x03, 0xe8, 0x03, 0xe9, 0x03, 0xea, 0x03, 0xea, // .k.............. + 0x03, 0xeb, 0x03, 0xeb, 0x03, 0xec, 0x03, 0xec, 0x03, 0xed, 0x03, 0xed, 0x03, 0xee, 0x03, 0xee, // ................ + 0x03, 0xef, 0x03, 0xef, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf1, 0x03, 0xf1, 0x03, 0xf2, 0x03, 0xf2, // ................ + 0x03, 0xf3, 0x03, 0xf3, 0x03, 0xf4, 0x03, 0xf4, 0x03, 0xf5, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0xf6, // ................ + 0x03, 0xf7, 0x03, 0xf7, 0x03, 0xf8, 0x03, 0xf8, 0x03, 0xf9, 0x03, 0xf9, 0x03, 0xfa, 0x03, 0xfa, // ................ + 0x03, 0xfb, 0x03, 0xfb, 0x03, 0xfc, 0x03, 0xfc, 0x03, 0xfd, 0x03, 0xfd, 0x03, 0xfe, 0x03, 0xfe, // ................ + 0x03, 0xb7, 0x03, 0xb7, 0x03, 0xff, 0x03, 0xff, 0x04, 0x00, 0x04, 0x00, 0x04, 0x01, 0x04, 0x01, // ................ + 0x04, 0x02, 0x04, 0x02, 0x03, 0xe6, 0x03, 0xe6, 0x04, 0x0a, 0x04, 0x0a, 0x04, 0x09, 0x04, 0x09, // ................ + 0x04, 0x08, 0x04, 0x08, 0x04, 0x07, 0x04, 0x06, 0x04, 0x06, 0x04, 0x05, 0x04, 0x05, 0x04, 0x04, // ................ + 0x04, 0x04, 0x03, 0xbe, 0x03, 0xbe, 0x00, 0x02, 0x00, 0x12, 0x00, 0x24, 0x00, 0x3d, 0x00, 0x00, // ...........$.=.. + 0x00, 0x44, 0x00, 0x5d, 0x00, 0x1a, 0x00, 0x82, 0x00, 0x87, 0x00, 0x34, 0x00, 0x89, 0x00, 0x98, // .D.].......4.... + 0x00, 0x3a, 0x00, 0x9b, 0x00, 0x9f, 0x00, 0x4a, 0x00, 0xa1, 0x00, 0xa7, 0x00, 0x4f, 0x00, 0xa9, // .:.....J.....O.. + 0x00, 0xb8, 0x00, 0x56, 0x00, 0xbb, 0x00, 0xbf, 0x00, 0x66, 0x00, 0xc1, 0x00, 0xcb, 0x00, 0x6b, // ...V.....f.....k + 0x00, 0xce, 0x00, 0xe1, 0x00, 0x76, 0x00, 0xe4, 0x00, 0xe7, 0x00, 0x8a, 0x00, 0xea, 0x00, 0xf2, // .....v.......... + 0x00, 0x8e, 0x00, 0xf6, 0x00, 0xf9, 0x00, 0x97, 0x00, 0xfb, 0x01, 0x02, 0x00, 0x9b, 0x01, 0x05, // ................ + 0x01, 0x0a, 0x00, 0xa3, 0x01, 0x0e, 0x01, 0x13, 0x00, 0xa9, 0x01, 0x16, 0x01, 0x40, 0x00, 0xaf, // .............@.. + 0x01, 0x48, 0x01, 0x49, 0x00, 0xda, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, // .H.I............ + 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x03, 0x64, 0x00, 0x02, 0x00, 0x4c, // ...........d...L + 0x00, 0x01, 0x00, 0x01, 0x00, 0x49, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, // .....I.......... + 0x00, 0x1a, 0x00, 0x0a, 0x03, 0x7f, 0x03, 0x9d, 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, // ................ + 0x03, 0xa2, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, 0x00, 0x02, 0x00, 0x01, 0x00, 0x13, 0x00, 0x1c, // ................ + 0x00, 0x00, 0x00, 0x00, // .... +}; diff --git a/3rdparty/bgfx/examples/common/imgui/robotomono_regular.ttf.h b/3rdparty/bgfx/examples/common/imgui/robotomono_regular.ttf.h new file mode 100644 index 00000000000..2809cc89b1c --- /dev/null +++ b/3rdparty/bgfx/examples/common/imgui/robotomono_regular.ttf.h @@ -0,0 +1,7097 @@ +static const uint8_t s_robotoMonoRegularTtf[113500] = +{ + 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x47, 0x44, 0x45, 0x46, // ............GDEF + 0x0b, 0x31, 0x0b, 0x32, 0x00, 0x01, 0xb8, 0xd4, 0x00, 0x00, 0x00, 0x40, 0x47, 0x53, 0x55, 0x42, // .1.2.......@GSUB + 0xe6, 0x11, 0xdf, 0x13, 0x00, 0x01, 0xb9, 0x14, 0x00, 0x00, 0x02, 0x48, 0x4f, 0x53, 0x2f, 0x32, // ...........HOS/2 + 0xb8, 0xae, 0xe9, 0xf9, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, // ...........`cmap + 0x53, 0xe7, 0xa2, 0x2f, 0x00, 0x00, 0x12, 0x0c, 0x00, 0x00, 0x08, 0x6a, 0x63, 0x76, 0x74, 0x20, // S../.......jcvt + 0x61, 0xf2, 0x14, 0x5d, 0x00, 0x00, 0x26, 0xb8, 0x00, 0x00, 0x00, 0x9c, 0x66, 0x70, 0x67, 0x6d, // a..]..&.....fpgm + 0xf4, 0x44, 0xc2, 0xb4, 0x00, 0x00, 0x1a, 0x78, 0x00, 0x00, 0x0b, 0x96, 0x67, 0x61, 0x73, 0x70, // .D.....x....gasp + 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0xb8, 0xcc, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, // ............glyf + 0xd4, 0x6e, 0xd1, 0x08, 0x00, 0x00, 0x2f, 0x78, 0x00, 0x01, 0x62, 0x74, 0x68, 0x65, 0x61, 0x64, // .n..../x..bthead + 0xf9, 0x32, 0x25, 0x3c, 0x00, 0x00, 0x01, 0x0c, 0x00, 0x00, 0x00, 0x36, 0x68, 0x68, 0x65, 0x61, // .2%<.......6hhea + 0x0b, 0x0d, 0x04, 0x19, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, // .......D...$hmtx + 0x1d, 0xca, 0x38, 0x5b, 0x00, 0x00, 0x01, 0xe8, 0x00, 0x00, 0x10, 0x22, 0x6c, 0x6f, 0x63, 0x61, // ..8[......."loca + 0xbd, 0x06, 0x13, 0xd7, 0x00, 0x00, 0x27, 0x54, 0x00, 0x00, 0x08, 0x24, 0x6d, 0x61, 0x78, 0x70, // ......'T...$maxp + 0x05, 0xd4, 0x0d, 0x1a, 0x00, 0x00, 0x01, 0x68, 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, // .......h... name + 0x43, 0xed, 0x6c, 0x10, 0x00, 0x01, 0x91, 0xec, 0x00, 0x00, 0x03, 0x0a, 0x70, 0x6f, 0x73, 0x74, // C.l.........post + 0xe5, 0x42, 0xa7, 0xe9, 0x00, 0x01, 0x94, 0xf8, 0x00, 0x00, 0x23, 0xd1, 0x70, 0x72, 0x65, 0x70, // .B........#.prep + 0x33, 0xcd, 0x13, 0x82, 0x00, 0x00, 0x26, 0x10, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x01, 0x00, 0x00, // 3.....&......... + 0x00, 0x02, 0x00, 0x41, 0xa0, 0x74, 0xe9, 0x59, 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x08, 0x00, // ...A.t.Y_.<..... + 0x00, 0x00, 0x00, 0x00, 0xc4, 0xf0, 0x11, 0x2e, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x83, 0xc8, 0x87, // ................ + 0xfc, 0x05, 0xfd, 0xd5, 0x07, 0x99, 0x08, 0x73, 0x00, 0x00, 0x00, 0x09, 0x00, 0x02, 0x00, 0x00, // .......s........ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x6c, 0xfe, 0x0c, 0x00, 0x00, 0x09, 0x9a, // .........l...... + 0xfc, 0x05, 0xf8, 0x72, 0x07, 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...r............ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x11, 0x00, 0xb0, // ................ + 0x00, 0x16, 0x00, 0x70, 0x00, 0x05, 0x00, 0x02, 0x00, 0x50, 0x00, 0x60, 0x00, 0x77, 0x00, 0x00, // ...p.....P.`.w.. + 0x00, 0xdd, 0x0b, 0x97, 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x04, 0xce, 0x01, 0x90, 0x00, 0x05, // ................ + 0x00, 0x00, 0x05, 0x9a, 0x05, 0x33, 0x00, 0x00, 0x01, 0x1f, 0x05, 0x9a, 0x05, 0x33, 0x00, 0x00, // .....3.......3.. + 0x03, 0xd1, 0x00, 0x66, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...f............ + 0x00, 0x00, 0xe0, 0x00, 0x02, 0xff, 0x10, 0x00, 0x20, 0x5b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, // ........ [... .. + 0x00, 0x00, 0x70, 0x79, 0x72, 0x73, 0x00, 0x40, 0x00, 0x00, 0xff, 0xfd, 0x06, 0x00, 0xfe, 0x00, // ..pyrs.@........ + 0x00, 0x66, 0x07, 0x9a, 0x02, 0x00, 0x20, 0x00, 0x01, 0x9f, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x3a, // .f.... ...O....: + 0x05, 0xb0, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x04, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ..... .......... + 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x62, 0x04, 0xcd, 0x00, 0x3d, // ...........b...= + 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0x2c, 0x04, 0xcd, 0x00, 0x6b, 0x04, 0xcd, 0x01, 0xee, // .......,...k.... + 0x04, 0xcd, 0x01, 0x65, 0x04, 0xcd, 0x01, 0x40, 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x00, 0x77, // ...e...@.......w + 0x04, 0xcd, 0x01, 0x62, 0x04, 0xce, 0x00, 0xda, 0x04, 0xcd, 0x01, 0xf0, 0x04, 0xcd, 0x00, 0xfc, // ...b............ + 0x04, 0xcd, 0x00, 0x91, 0x04, 0xcd, 0x00, 0xd0, 0x04, 0xcd, 0x00, 0x55, 0x04, 0xcd, 0x00, 0x5e, // ...........U...^ + 0x04, 0xcd, 0x00, 0x4b, 0x04, 0xcd, 0x00, 0xbb, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0x70, // ...K...........p + 0x04, 0xcd, 0x00, 0xb1, 0x04, 0xcd, 0x00, 0x95, 0x04, 0xcd, 0x02, 0x22, 0x04, 0xcd, 0x01, 0xe6, // ...........".... + 0x04, 0xcd, 0x00, 0xaa, 0x04, 0xcd, 0x00, 0xad, 0x04, 0xcd, 0x00, 0xb2, 0x04, 0xcd, 0x00, 0xbf, // ................ + 0x04, 0xcd, 0x00, 0x40, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0xac, 0x04, 0xcd, 0x00, 0x6b, // ...@...Q.......k + 0x04, 0xcd, 0x00, 0x9b, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xbf, 0x04, 0xcd, 0x00, 0x64, // ...............d + 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0x62, 0x04, 0xcd, 0x00, 0xac, // ...........b.... + 0x04, 0xcd, 0x00, 0xc6, 0x04, 0xcd, 0x00, 0x94, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x6a, // ...............j + 0x04, 0xcd, 0x00, 0xbf, 0x04, 0xcd, 0x00, 0x5e, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0x76, // .......^.......v + 0x04, 0xcd, 0x00, 0x4c, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x47, 0x04, 0xcd, 0x00, 0x49, // ...L.......G...I + 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x01, 0xaa, // ...W...=...r.... + 0x04, 0xcd, 0x00, 0xe7, 0x04, 0xcd, 0x01, 0x95, 0x04, 0xcd, 0x00, 0xe7, 0x04, 0xcd, 0x00, 0x9b, // ................ + 0x04, 0xcd, 0x01, 0x9f, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x8f, // ................ + 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xce, 0x00, 0x98, 0x04, 0xcd, 0x00, 0x8c, // ................ + 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xd3, 0x04, 0xcd, 0x00, 0xb0, // ................ + 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0x7a, // .......].......z + 0x04, 0xcd, 0x00, 0xad, 0x04, 0xcd, 0x00, 0x8c, 0x04, 0xcd, 0x01, 0x49, 0x04, 0xcd, 0x00, 0xaf, // ...........I.... + 0x04, 0xcd, 0x00, 0x8e, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x62, 0x04, 0xcd, 0x00, 0x30, // ...........b...0 + 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x01, 0x43, // ...n...D.......C + 0x04, 0xcd, 0x02, 0x1c, 0x04, 0xcd, 0x01, 0x43, 0x04, 0xcd, 0x00, 0x30, 0x04, 0xcd, 0x01, 0xf2, // .......C...0.... + 0x04, 0xcd, 0x00, 0x93, 0x04, 0xcd, 0x00, 0x71, 0x04, 0xcd, 0x00, 0x67, 0x04, 0xcd, 0x00, 0x21, // .......q...g...! + 0x04, 0xcd, 0x01, 0xff, 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x01, 0x1f, 0x04, 0xcd, 0x00, 0x5a, // .......W.......Z + 0x04, 0xcd, 0x01, 0x1c, 0x04, 0xcd, 0x00, 0xd4, 0x04, 0xcd, 0x00, 0xbd, 0x04, 0xcd, 0x00, 0x57, // ...............W + 0x04, 0xcd, 0x01, 0x01, 0x04, 0xcd, 0x01, 0x69, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x01, 0x3c, // .......i.......< + 0x04, 0xcd, 0x01, 0x43, 0x04, 0xcd, 0x01, 0x9a, 0x04, 0xcd, 0x00, 0xbc, 0x04, 0xcd, 0x00, 0xd3, // ...C............ + 0x04, 0xcd, 0x01, 0xf8, 0x04, 0xcd, 0x01, 0xcd, 0x04, 0xcd, 0x01, 0x82, 0x04, 0xcd, 0x01, 0x10, // ................ + 0x04, 0xcd, 0x00, 0xf1, 0x04, 0xcd, 0x00, 0x30, 0x04, 0xcd, 0x00, 0x24, 0x04, 0xcd, 0x00, 0x25, // .......0...$...% + 0x04, 0xcd, 0x00, 0xcc, 0x04, 0xcd, 0x00, 0x20, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0x47, // ....... .......G + 0x04, 0xcd, 0x00, 0xa8, 0x04, 0xcd, 0x00, 0xa9, 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0x49, // ...........+...I + 0x04, 0xcd, 0x00, 0x73, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0xad, 0x04, 0xcd, 0x00, 0x18, // ...s...z........ + 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0x80, 0x04, 0xcd, 0x00, 0x50, 0x04, 0xcd, 0x00, 0xba, // ...........P.... + 0x04, 0xcd, 0x00, 0x3a, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0xb8, // ...:............ + 0x04, 0xcd, 0x00, 0x4f, 0x04, 0xcd, 0x00, 0x2e, 0x04, 0xcd, 0x01, 0xc8, 0x04, 0xcd, 0x00, 0xa0, // ...O............ + 0x04, 0xcd, 0x00, 0x63, 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, // ...c...w........ + 0x04, 0xcd, 0x00, 0xb0, 0x04, 0xcd, 0x00, 0xb1, 0x04, 0xcd, 0x00, 0xc1, 0x04, 0xcd, 0x01, 0x30, // ...............0 + 0x04, 0xcd, 0x01, 0x3b, 0x04, 0xcd, 0x01, 0xf2, 0x04, 0xcd, 0x01, 0x9a, 0x04, 0xcd, 0x01, 0x8e, // ...;............ + 0x04, 0xcd, 0x00, 0x8a, 0x04, 0xcd, 0x00, 0xf6, 0x04, 0xcd, 0x01, 0xad, 0x04, 0x52, 0xfc, 0xca, // .............R.. + 0x04, 0x52, 0xfd, 0x68, 0x04, 0x52, 0xfc, 0x88, 0x04, 0x52, 0xfd, 0x59, 0x04, 0x52, 0xfc, 0x05, // .R.h.R...R.Y.R.. + 0x04, 0x52, 0xfd, 0x27, 0x04, 0xcd, 0x02, 0x29, 0x04, 0xcd, 0x01, 0x13, 0x04, 0xcd, 0x02, 0x30, // .R.'...).......0 + 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0x2e, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x36, // ...........j...6 + 0x04, 0xcd, 0x00, 0x91, 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0x70, 0x04, 0xcd, 0x00, 0x45, // ...........p...E + 0x04, 0xcd, 0x00, 0x65, 0x04, 0xcd, 0x00, 0x61, 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0xae, // ...e...a........ + 0x04, 0xcd, 0x00, 0x47, 0x04, 0xcd, 0x00, 0x78, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x75, // ...G...x.......u + 0x04, 0xcd, 0x00, 0xa4, 0x04, 0xcd, 0x00, 0xb9, 0x04, 0xcd, 0x00, 0xb8, 0x04, 0xcd, 0x00, 0x39, // ...............9 + 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x59, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x78, // .......Y.......x + 0x04, 0xcd, 0x00, 0x6d, 0x04, 0xcd, 0x00, 0xad, 0x04, 0xcd, 0x00, 0x9e, 0x04, 0xcd, 0x00, 0x6e, // ...m...........n + 0x04, 0xcd, 0x00, 0x61, 0x04, 0xcd, 0x00, 0x4f, 0x04, 0xcd, 0x00, 0x98, 0x04, 0xcd, 0x00, 0x36, // ...a...O.......6 + 0x04, 0xcd, 0x00, 0x2e, 0x04, 0xcd, 0x00, 0x2a, 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0x1e, // .......*........ + 0x04, 0xcd, 0x00, 0x83, 0x04, 0xcd, 0x00, 0x43, 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0xa2, // .......C........ + 0x04, 0xcd, 0x00, 0x46, 0x04, 0xcd, 0x00, 0x1d, 0x04, 0xcd, 0x00, 0x59, 0x04, 0xcd, 0x00, 0xa2, // ...F.......Y.... + 0x04, 0xcd, 0x00, 0x2f, 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0xa6, 0x04, 0xcd, 0x00, 0xab, // .../...+........ + 0x04, 0xcd, 0x00, 0x7d, 0x04, 0xcd, 0x00, 0x7d, 0x04, 0xcd, 0x00, 0x32, 0x04, 0xcd, 0x00, 0x90, // ...}...}...2.... + 0x04, 0xcd, 0x00, 0xa8, 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x41, // .......r...w...A + 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0xa4, 0x04, 0xcd, 0x00, 0xb7, 0x04, 0xcd, 0x00, 0x36, // ...............6 + 0x04, 0xcd, 0x00, 0x11, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0xa4, // ................ + 0x04, 0xcd, 0x00, 0x37, 0x04, 0xcd, 0x00, 0x89, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0xa5, // ...7............ + 0x04, 0xcd, 0x00, 0x68, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0xaa, 0x04, 0xcd, 0x00, 0x8d, // ...h...z........ + 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0x76, 0x04, 0xcd, 0x00, 0x39, 0x04, 0xcd, 0x00, 0x90, // .......v...9.... + 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0x71, 0x04, 0xcd, 0x00, 0x4f, // ...........q...O + 0x04, 0xcd, 0xff, 0xe9, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x26, 0x04, 0xcd, 0x00, 0x82, // ...........&.... + 0x04, 0xcd, 0x00, 0x1c, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x6b, 0x04, 0xcd, 0x00, 0x5f, // ...........k..._ + 0x04, 0xcd, 0x00, 0x1c, 0x04, 0xcd, 0x00, 0x7d, 0x04, 0xcd, 0x00, 0x9b, 0x04, 0xcd, 0x00, 0x27, // .......}.......' + 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x00, 0x71, 0x04, 0xcd, 0x00, 0x70, 0x04, 0xcd, 0x00, 0x55, // ...W...q...p...U + 0x04, 0xcd, 0x00, 0x69, 0x04, 0xcd, 0x00, 0x50, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0xca, // ...i...P...Q.... + 0x04, 0xcd, 0x00, 0xde, 0x04, 0xcd, 0x00, 0x63, 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0x1a, // .......c...].... + 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x45, 0x04, 0xcd, 0x00, 0x37, 0x04, 0xcd, 0x00, 0x6a, // ...Q...E...7...j + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x4d, 0x04, 0xcd, 0x00, 0x67, 0x04, 0xcd, 0x00, 0x71, // ...z...M...g...q + 0x04, 0xcd, 0x00, 0x5f, 0x04, 0xcd, 0x00, 0x97, 0x04, 0xcd, 0x00, 0xbf, 0x04, 0xcd, 0x00, 0x76, // ..._...........v + 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xc3, 0x00, 0x00, 0x02, 0x3c, // ...............< + 0x00, 0x00, 0xfe, 0xe7, 0x00, 0x00, 0x00, 0x4e, 0x04, 0xcd, 0x00, 0xbf, 0x04, 0xcd, 0x00, 0xad, // .......N........ + 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xb9, 0x04, 0xcd, 0x00, 0xb8, // ................ + 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xa3, 0x04, 0xcd, 0x00, 0x2d, 0x04, 0xcd, 0x00, 0x38, // ...........-...8 + 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x6d, 0x04, 0xcd, 0x00, 0x74, // ...r...n...m...t + 0x04, 0xcd, 0x00, 0x68, 0x04, 0xcd, 0x00, 0x5c, 0x04, 0xcd, 0x00, 0x39, 0x04, 0xcd, 0x00, 0x34, // ...h.......9...4 + 0x04, 0xcd, 0x00, 0xab, 0x04, 0xcd, 0x00, 0x92, 0x04, 0xcd, 0x00, 0xe3, 0x04, 0xcd, 0x00, 0x26, // ...............& + 0x04, 0xcd, 0x00, 0x26, 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0xb6, // ...&............ + 0x04, 0xcd, 0x00, 0xb3, 0x04, 0xcd, 0x00, 0x5a, 0x04, 0xcd, 0x00, 0x94, 0x04, 0xcd, 0x00, 0x89, // .......Z........ + 0x04, 0xcd, 0x00, 0x42, 0x04, 0xcd, 0x00, 0x74, 0x04, 0xcd, 0x00, 0x61, 0x04, 0xcd, 0x00, 0x4d, // ...B...t...a...M + 0x04, 0xcd, 0x00, 0x65, 0x04, 0xcd, 0x00, 0x37, 0x04, 0xcd, 0x00, 0x50, 0x04, 0xcd, 0x00, 0xb3, // ...e...7...P.... + 0x04, 0xcd, 0x00, 0xd0, 0x04, 0xcd, 0x00, 0x14, 0x04, 0xcd, 0x00, 0x2f, 0x04, 0xcd, 0x00, 0x6f, // .........../...o + 0x04, 0xcd, 0x00, 0x75, 0x04, 0xcd, 0x00, 0x8e, 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x00, 0x4c, // ...u...........L + 0x04, 0xcd, 0x00, 0x49, 0x04, 0xcd, 0x00, 0x6c, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, // ...I...l........ + 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, // ................ + 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, // ................ + 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x49, 0x04, 0xcd, 0x00, 0x4e, // ...........I...N + 0x04, 0xcd, 0x00, 0xa6, 0x04, 0xcd, 0x01, 0xec, 0x04, 0xcd, 0x01, 0xcd, 0x04, 0xcd, 0x01, 0xbc, // ................ + 0x04, 0xcd, 0x01, 0xcf, 0x04, 0xcd, 0x01, 0x49, 0x04, 0xcd, 0x01, 0x2d, 0x04, 0xcd, 0x01, 0x2f, // .......I...-.../ + 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x79, 0x04, 0xcd, 0x01, 0x9a, 0x04, 0xcd, 0x01, 0x5c, // ...w...y........ + 0x04, 0xcd, 0x01, 0x09, 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x01, 0x8c, 0x04, 0xcd, 0x01, 0x8c, // .......6........ + 0x04, 0xcd, 0x01, 0x2b, 0x04, 0xcd, 0x01, 0x0f, 0x04, 0xcd, 0x01, 0x4b, 0x04, 0xcd, 0x00, 0x69, // ...+.......K...i + 0x04, 0xcd, 0x00, 0x7f, 0x04, 0xcd, 0x00, 0x7f, 0x04, 0xcd, 0x00, 0x49, 0x04, 0xcd, 0x00, 0xdd, // ...........I.... + 0x04, 0xcd, 0x00, 0x79, 0x04, 0xcd, 0x00, 0x67, 0x04, 0xcd, 0x00, 0x99, 0x04, 0xcd, 0x00, 0x50, // ...y...g.......P + 0x04, 0xcd, 0x00, 0x32, 0x04, 0xcd, 0x00, 0x24, 0x04, 0xcd, 0x00, 0x40, 0x04, 0xcd, 0x00, 0x7e, // ...2...$...@...~ + 0x04, 0xcd, 0x00, 0xa7, 0x04, 0xcd, 0x00, 0x33, 0x04, 0xcd, 0x00, 0xa9, 0x04, 0xcd, 0x00, 0x39, // .......3.......9 + 0x04, 0xcd, 0x00, 0x35, 0x04, 0xcd, 0x00, 0xf8, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xa9, // ...5............ + 0x04, 0xcd, 0x00, 0xbb, 0x04, 0xcd, 0x00, 0xc2, 0x04, 0xcd, 0x00, 0x8e, 0x04, 0xcd, 0x01, 0x2e, // ................ + 0x04, 0xcd, 0x00, 0x00, 0x04, 0xcd, 0x00, 0x5c, 0x04, 0xcd, 0x00, 0x0f, 0x04, 0xcd, 0x00, 0xb8, // ................ + 0x04, 0xcd, 0x01, 0x3a, 0x04, 0xcd, 0x01, 0x11, 0x04, 0xcd, 0x00, 0xfc, 0x04, 0xcd, 0x00, 0x10, // ...:............ + 0x04, 0xcd, 0x01, 0x0b, 0x04, 0xcd, 0x01, 0x30, 0x04, 0xcd, 0x01, 0xf9, 0x04, 0xcd, 0x00, 0x36, // .......0.......6 + 0x04, 0xcd, 0x00, 0xd0, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0xb7, 0x04, 0xcd, 0x00, 0xc8, // .......n........ + 0x04, 0xcd, 0x00, 0xe7, 0x04, 0xcd, 0x00, 0x7c, 0x04, 0xcd, 0x00, 0x9b, 0x04, 0xcd, 0x00, 0xd9, // .......|........ + 0x04, 0xcd, 0x00, 0x96, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0xd1, 0x04, 0xcd, 0x00, 0x9b, // ................ + 0x04, 0xcd, 0x00, 0xc2, 0x04, 0xcd, 0x00, 0x82, 0x04, 0xcd, 0x00, 0x5e, 0x04, 0xcd, 0x00, 0x90, // ...........^.... + 0x04, 0xcd, 0x00, 0x8a, 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0x56, // .......].......V + 0x04, 0xcd, 0x00, 0x2f, 0x04, 0xcd, 0x00, 0x60, 0x04, 0xcd, 0x00, 0x4d, 0x04, 0xcd, 0x00, 0xb9, // .../...`...M.... + 0x04, 0xcd, 0x01, 0x52, 0x04, 0xcd, 0x01, 0x0e, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xc5, // ...R............ + 0x04, 0xcd, 0x00, 0x89, 0x04, 0xcd, 0x00, 0xd1, 0x04, 0xcd, 0x00, 0xe1, 0x04, 0xcd, 0x00, 0xbc, // ................ + 0x04, 0xcd, 0x00, 0xd1, 0x04, 0xcd, 0x00, 0xba, 0x04, 0xcd, 0x01, 0x3f, 0x04, 0xcd, 0x01, 0x5b, // ...........?...[ + 0x04, 0xcd, 0x01, 0x42, 0x04, 0xcd, 0x01, 0x38, 0x04, 0xcd, 0x01, 0x23, 0x04, 0xcd, 0x01, 0x40, // ...B...8...#...@ + 0x04, 0xcd, 0x01, 0x3b, 0x04, 0xcd, 0x01, 0x30, 0x04, 0xcd, 0x01, 0x3e, 0x04, 0xcd, 0x01, 0x40, // ...;...0...>...@ + 0x04, 0xcd, 0x01, 0x35, 0x04, 0xcd, 0x01, 0xd1, 0x04, 0xcd, 0x01, 0xf5, 0x04, 0xcd, 0x01, 0x74, // ...5...........t + 0x04, 0xcd, 0x02, 0x06, 0x04, 0xcd, 0x01, 0x69, 0x04, 0xcd, 0x01, 0x60, 0x04, 0xcd, 0x00, 0x6e, // .......i...`...n + 0x04, 0xcd, 0x00, 0xb2, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x01, 0xa0, 0x04, 0xcd, 0x00, 0xd0, // ................ + 0x04, 0xcd, 0x00, 0x54, 0x04, 0xcd, 0x00, 0xcc, 0x04, 0xcd, 0x00, 0x6b, 0x04, 0xcd, 0x00, 0xa3, // ...T.......k.... + 0x04, 0xcd, 0x00, 0xa9, 0x04, 0xcd, 0x00, 0x79, 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x00, 0xce, // .......y........ + 0x04, 0xcb, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0x5a, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0xd2, // .......Z........ + 0x04, 0xcd, 0x01, 0x3b, 0x04, 0xcd, 0x00, 0x00, 0x04, 0xce, 0x00, 0xda, 0x04, 0xeb, 0xff, 0xd4, // ...;............ + 0x04, 0xeb, 0xff, 0xd4, 0x04, 0xeb, 0x00, 0x1a, 0x04, 0xcd, 0x00, 0x4c, 0x04, 0xcd, 0x00, 0x8e, // ...........L.... + 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x51, // ...Q...Q...Q...Q + 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x6b, // ...Q...Q...Q...k + 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x6a, // .......j...j...j + 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x8b, // ...j...j........ + 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x9c, // ...........=.... + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x9c, // ................ + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x87, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xcb, // ................ + 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x7a, // ...z...z...z...z + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0xb4, // ...z............ + 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x51, // .......D...D...Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, // .......Q.......Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x6b, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x6b, // .......k.......k + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x6b, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x6b, // .......k.......k + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x9b, 0x05, 0x63, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb6, // .........c...... + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0x64, 0x04, 0xcd, 0x00, 0x8c, 0x04, 0xcd, 0x00, 0x64, // .......d.......d + 0x04, 0xcd, 0x00, 0x8c, 0x04, 0xcd, 0x00, 0x64, 0x04, 0xcd, 0x00, 0x8c, 0x04, 0xcd, 0x00, 0x64, // .......d.......d + 0x04, 0xcd, 0x00, 0x8c, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0x62, 0x04, 0xcd, 0x00, 0xb0, 0x04, 0xcd, 0x00, 0xac, 0x04, 0xcd, 0x00, 0xb0, // ...b............ + 0x04, 0xcd, 0x00, 0xc6, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xc6, 0x04, 0xcd, 0x00, 0xcb, // ................ + 0x04, 0xcd, 0x00, 0xc6, 0x05, 0x63, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xc6, 0x05, 0xa9, 0x00, 0xcb, // .....c.......... + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0xff, 0xba, 0x04, 0xcd, 0x00, 0x6a, // ...............j + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x6a, // ...z...j...z...j + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x01, 0x49, 0x04, 0xcd, 0x00, 0xb5, // ...z.......I.... + 0x04, 0xcd, 0x01, 0x10, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x01, 0x14, 0x04, 0xcd, 0x00, 0x76, // ...............v + 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x76, 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x76, // .......v.......v + 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x76, 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x76, // .......v.......v + 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0x4c, 0x04, 0xcd, 0x00, 0x8e, 0x04, 0xcd, 0x00, 0x4c, // .......L.......L + 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0x8e, 0x04, 0xcd, 0x00, 0x4c, 0x04, 0xf5, 0x00, 0x8e, // ...].......L.... + 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, // ................ + 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, // ................ + 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, // ................ + 0x04, 0xcd, 0x00, 0x49, 0x04, 0xcd, 0x00, 0x30, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x44, // ...I...0...=...D + 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x00, 0x72, // ...=...r.......r + 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x00, 0xa0, 0x04, 0xcd, 0x00, 0x20, // .......r....... + 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0x47, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0xff, 0xe7, // ...+...G...z.... + 0x04, 0xcd, 0xff, 0xe7, 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x36, // .......]...6...6 + 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x36, // ...6...6...6...6 + 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xc8, // ...6...n........ + 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xd9, 0x04, 0xcd, 0x00, 0xd9, // ................ + 0x04, 0xcd, 0x00, 0xd9, 0x04, 0xcd, 0x00, 0xd9, 0x04, 0xcd, 0x00, 0xc2, 0x04, 0xcd, 0x00, 0x82, // ................ + 0x04, 0xcd, 0x00, 0x82, 0x04, 0xcd, 0x00, 0x82, 0x04, 0xcd, 0x00, 0x82, 0x04, 0xcd, 0x00, 0x82, // ................ + 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, // ................ + 0x04, 0xcd, 0x00, 0x4d, 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x36, 0x04, 0xcd, 0x00, 0x36, // ...M...6...6...6 + 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x6e, // ...n...n...n...n + 0x04, 0xcd, 0x00, 0xb7, 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xc8, // ................ + 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0xc8, 0x04, 0xcd, 0x00, 0x7c, 0x04, 0xcd, 0x00, 0x7c, // ...........|...| + 0x04, 0xcd, 0x00, 0x7c, 0x04, 0xcd, 0x00, 0x7c, 0x04, 0xcd, 0x00, 0x9b, 0x04, 0xcd, 0x00, 0xd9, // ...|...|........ + 0x04, 0xcd, 0x00, 0xd9, 0x04, 0xcd, 0x00, 0xd9, 0x04, 0xcd, 0x00, 0xd9, 0x04, 0xcd, 0x00, 0xd9, // ................ + 0x04, 0xcd, 0x00, 0x96, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xd1, // ................ + 0x04, 0xcd, 0x00, 0xd1, 0x04, 0xcd, 0x00, 0xd1, 0x04, 0xcd, 0x00, 0xc2, 0x04, 0xcd, 0x00, 0xc2, // ................ + 0x04, 0xcd, 0x00, 0xc2, 0x04, 0xcd, 0x00, 0x82, 0x04, 0xcd, 0x00, 0x82, 0x04, 0xcd, 0x00, 0x82, // ................ + 0x04, 0xcd, 0x00, 0x90, 0x04, 0xcd, 0x00, 0x90, 0x04, 0xcd, 0x00, 0x90, 0x04, 0xcd, 0x00, 0x8a, // ................ + 0x04, 0xcd, 0x00, 0x8a, 0x04, 0xcd, 0x00, 0x8a, 0x04, 0xcd, 0x00, 0x8a, 0x04, 0xcd, 0x00, 0x5d, // ...............] + 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, // ...]............ + 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0x2f, // .............../ + 0x04, 0xcd, 0x00, 0x4d, 0x04, 0xcd, 0x00, 0x4d, 0x04, 0xcd, 0x00, 0xb9, 0x04, 0xcd, 0x00, 0xb9, // ...M...M........ + 0x04, 0xcd, 0x00, 0xb9, 0x04, 0xcd, 0x00, 0x51, 0x05, 0x31, 0x00, 0x0f, 0x05, 0x31, 0xff, 0xfd, // .......Q.1...1.. + 0x05, 0x31, 0xff, 0xec, 0x04, 0xe1, 0x00, 0x09, 0x05, 0x31, 0xff, 0xb2, 0x04, 0xe1, 0x00, 0x05, // .1.......1...... + 0x04, 0xcd, 0x00, 0xb8, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0xac, 0x04, 0xcd, 0x00, 0xb6, // .......Q........ + 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xac, // ...r............ + 0x04, 0xcd, 0x00, 0x94, 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0xbf, // ...........j.... + 0x04, 0xcd, 0x00, 0x4c, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x00, 0xae, // ...L...=...W.... + 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xa4, // ...=............ + 0x04, 0xcd, 0x00, 0xb8, 0x04, 0xcd, 0x00, 0x9e, 0x04, 0xcd, 0x00, 0xba, 0x04, 0xcd, 0x00, 0x7a, // ...............z + 0x04, 0xcd, 0x00, 0xbc, 0x04, 0xcd, 0x00, 0x62, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0xb8, // .......b...n.... + 0x04, 0xcd, 0x00, 0x9e, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x9e, 0x04, 0xcd, 0x00, 0x4f, // .......z.......O + 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xb5, 0x04, 0xcd, 0x00, 0x76, 0x04, 0xcd, 0x00, 0xae, // ...........v.... + 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0x62, 0x04, 0xcd, 0x00, 0xa9, 0x04, 0xcd, 0x00, 0xac, // .......b........ + 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0xac, 0x04, 0xcd, 0x00, 0xb5, // ...+...Q........ + 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0x94, 0x04, 0xcd, 0x00, 0x8d, // ................ + 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0xbf, 0x04, 0xcd, 0x00, 0x6b, // ...j...........k + 0x04, 0xcd, 0x00, 0x4c, 0x04, 0xcd, 0x00, 0x45, 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x00, 0x9c, // ...L...E...W.... + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0xad, // ...........z.... + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x87, // .......D...n.... + 0x04, 0xcd, 0x00, 0xb7, 0x04, 0xcd, 0x00, 0xaf, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xcb, // ................ + 0x04, 0xcd, 0x00, 0xd3, 0x04, 0xcd, 0x00, 0xa4, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x49, // ...........D...I + 0x04, 0xcd, 0x00, 0x30, 0x04, 0xcd, 0x00, 0x49, 0x04, 0xcd, 0x00, 0x30, 0x04, 0xcd, 0x00, 0x49, // ...0...I...0...I + 0x04, 0xcd, 0x00, 0x30, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x01, 0xee, // ...0...=...D.... + 0x04, 0xcd, 0x01, 0x62, 0x09, 0x9a, 0x01, 0xe6, 0x04, 0xcd, 0x00, 0xb0, 0x04, 0xcd, 0x01, 0xcd, // ...b............ + 0x04, 0xcd, 0x00, 0x94, 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, // .......]...Q.... + 0x04, 0xcd, 0xff, 0x89, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0x87, // ................ + 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x65, 0x04, 0xcd, 0x00, 0x61, 0x04, 0xcd, 0x00, 0x1a, // .......e...a.... + 0x04, 0xcd, 0x00, 0x35, 0x04, 0xcd, 0x00, 0x59, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0x6b, // ...5...Y.......k + 0x04, 0xcd, 0x00, 0x8f, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x47, 0x04, 0xcd, 0x00, 0xae, // .......=...G.... + 0x04, 0xcd, 0x00, 0x1d, 0x04, 0xcd, 0x00, 0x11, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0x51, // ...............Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x20, // .......Q....... + 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0x5a, // ...+...........Z + 0x04, 0xcd, 0x00, 0xb1, 0x04, 0xcd, 0x00, 0xb1, 0x04, 0xcd, 0x00, 0x1d, 0x04, 0xcd, 0x00, 0x11, // ................ + 0x04, 0xcd, 0x00, 0x59, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0xa5, // ...Y............ + 0x04, 0xcd, 0x00, 0xa2, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x7a, // ...........j...z + 0x04, 0xcd, 0x00, 0x63, 0x04, 0xcd, 0x00, 0x5d, 0x04, 0xcd, 0x00, 0x63, 0x04, 0xcd, 0x00, 0x5d, // ...c...]...c...] + 0x04, 0xcd, 0x00, 0x72, 0x04, 0xcd, 0x00, 0x81, 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0x44, // ...r.......+...D + 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x2b, 0x04, 0xcd, 0x00, 0x44, // ...+...D...+...D + 0x04, 0xcd, 0x00, 0xab, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0x90, 0x04, 0xcd, 0x00, 0x90, // ................ + 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0x2f, // ...W...n......./ + 0x04, 0xcd, 0x00, 0x37, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, // ...7...Q.......Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0xff, 0xfc, // .......Q........ + 0x04, 0xcd, 0xff, 0xf8, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, // .......Q.......Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, // .......Q.......Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, // .......Q.......Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0x51, // .......Q.......Q + 0x04, 0xcd, 0x00, 0x9c, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0xff, 0xf2, 0x04, 0xcd, 0xff, 0xf3, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xb6, // ................ + 0x04, 0xcd, 0x00, 0x87, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0xae, // ................ + 0x04, 0xcd, 0x00, 0xcb, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x6a, // .......j...z...j + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x00, // ...z...j...z.... + 0x04, 0xcd, 0xff, 0xed, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x6a, // .......j...z...j + 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x6a, 0x04, 0xcd, 0x00, 0x7a, 0x04, 0xcd, 0x00, 0x63, // ...z...j...z...c + 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x63, 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x63, // ...w...c...w...c + 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x63, 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x63, // ...w...c...w...c + 0x04, 0xcd, 0x00, 0x77, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, // ...w............ + 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, // ................ + 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, // ................ + 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xb4, 0x04, 0xcd, 0x00, 0x3d, // ...............= + 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x3d, 0x04, 0xcd, 0x00, 0x44, 0x04, 0xcd, 0x00, 0x3d, // ...D...=...D...= + 0x04, 0xcd, 0x00, 0x44, 0x04, 0xeb, 0x00, 0x8b, 0x04, 0xeb, 0x00, 0x8b, 0x04, 0xcd, 0x00, 0xa9, // ...D............ + 0x04, 0xcd, 0x00, 0xa4, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xa5, 0x04, 0xcd, 0x00, 0x4c, // ...............L + 0x04, 0xcd, 0x00, 0x68, 0x04, 0xcd, 0x00, 0x57, 0x04, 0xcd, 0x00, 0x6e, 0x04, 0xcd, 0x00, 0xab, // ...h...W...n.... + 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xab, 0x04, 0xcd, 0x00, 0x8d, 0x04, 0xcd, 0x00, 0xb5, // ................ + 0x04, 0xcd, 0x00, 0xb7, 0x04, 0xcd, 0x00, 0x1d, 0x04, 0xcd, 0x00, 0x11, 0x04, 0xcd, 0x00, 0x26, // ...............& + 0x04, 0xcd, 0x00, 0x26, 0x04, 0xcd, 0x00, 0xae, 0x04, 0xcd, 0x00, 0x12, 0x04, 0xcd, 0xff, 0xd4, // ...&............ + 0x04, 0xcd, 0xff, 0xd4, 0x04, 0xcd, 0xff, 0xfd, 0x04, 0xcd, 0xff, 0xfb, 0x04, 0xe1, 0x00, 0x09, // ................ + 0x04, 0xe1, 0xff, 0xf3, 0x04, 0xcd, 0x00, 0xa2, 0x00, 0xa5, 0x00, 0x8d, 0x00, 0xa5, 0x00, 0x94, // ................ + 0x00, 0x89, 0x00, 0x2f, 0x00, 0x37, 0x00, 0x3d, 0x00, 0x47, 0x00, 0x57, 0x00, 0x6e, 0x00, 0x8b, // .../.7.=.G.W.n.. + 0x00, 0x11, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, // ...N............ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, // ...............` + 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x04, 0x06, 0x44, 0x00, 0x00, 0x00, 0xe0, // ...........D.... + 0x00, 0x80, 0x00, 0x06, 0x00, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x21, // .....`.........! + 0x00, 0x7e, 0x00, 0xa0, 0x00, 0xac, 0x00, 0xad, 0x00, 0xbf, 0x00, 0xc6, 0x00, 0xcf, 0x00, 0xe6, // .~.............. + 0x00, 0xef, 0x00, 0xfe, 0x01, 0x0f, 0x01, 0x11, 0x01, 0x25, 0x01, 0x27, 0x01, 0x30, 0x01, 0x53, // .........%.'.0.S + 0x01, 0x5f, 0x01, 0x67, 0x01, 0x7e, 0x01, 0x7f, 0x01, 0x92, 0x01, 0xa1, 0x01, 0xb0, 0x01, 0xf0, // ._.g.~.......... + 0x01, 0xff, 0x02, 0x1b, 0x02, 0x37, 0x02, 0x59, 0x02, 0xbc, 0x02, 0xc7, 0x02, 0xc9, 0x02, 0xdd, // .....7.Y........ + 0x02, 0xf3, 0x03, 0x01, 0x03, 0x03, 0x03, 0x09, 0x03, 0x0f, 0x03, 0x23, 0x03, 0x8a, 0x03, 0x8c, // ...........#.... + 0x03, 0x92, 0x03, 0xa1, 0x03, 0xb0, 0x03, 0xb9, 0x03, 0xc9, 0x03, 0xce, 0x03, 0xd2, 0x03, 0xd6, // ................ + 0x04, 0x25, 0x04, 0x2f, 0x04, 0x45, 0x04, 0x4f, 0x04, 0x62, 0x04, 0x6f, 0x04, 0x77, 0x04, 0x86, // .%./.E.O.b.o.w.. + 0x04, 0xce, 0x04, 0xd7, 0x04, 0xe1, 0x04, 0xf5, 0x05, 0x01, 0x05, 0x10, 0x05, 0x13, 0x1e, 0x01, // ................ + 0x1e, 0x3f, 0x1e, 0x85, 0x1e, 0xf1, 0x1e, 0xf3, 0x1e, 0xf9, 0x1f, 0x4d, 0x20, 0x0b, 0x20, 0x15, // .?.........M . . + 0x20, 0x1e, 0x20, 0x22, 0x20, 0x26, 0x20, 0x30, 0x20, 0x33, 0x20, 0x3a, 0x20, 0x3c, 0x20, 0x44, // . " & 0 3 : < D + 0x20, 0x74, 0x20, 0x7f, 0x20, 0xa4, 0x20, 0xa7, 0x20, 0xac, 0x21, 0x05, 0x21, 0x13, 0x21, 0x16, // t . . . .!.!.!. + 0x21, 0x22, 0x21, 0x26, 0x21, 0x2e, 0x21, 0x5e, 0x22, 0x02, 0x22, 0x06, 0x22, 0x0f, 0x22, 0x12, // !"!&!.!^".".".". + 0x22, 0x1a, 0x22, 0x1e, 0x22, 0x2b, 0x22, 0x48, 0x22, 0x60, 0x22, 0x65, 0x25, 0xca, 0xf6, 0xc3, // "."."+"H"`"e%... + 0xfe, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x09, 0x00, 0x0d, // ................ + 0x00, 0x20, 0x00, 0x22, 0x00, 0xa0, 0x00, 0xa1, 0x00, 0xad, 0x00, 0xae, 0x00, 0xc0, 0x00, 0xc7, // . ."............ + 0x00, 0xd0, 0x00, 0xe7, 0x00, 0xf0, 0x00, 0xff, 0x01, 0x10, 0x01, 0x12, 0x01, 0x26, 0x01, 0x28, // .............&.( + 0x01, 0x31, 0x01, 0x54, 0x01, 0x60, 0x01, 0x68, 0x01, 0x7f, 0x01, 0x92, 0x01, 0xa0, 0x01, 0xaf, // .1.T.`.h........ + 0x01, 0xf0, 0x01, 0xfa, 0x02, 0x18, 0x02, 0x37, 0x02, 0x59, 0x02, 0xbc, 0x02, 0xc6, 0x02, 0xc9, // .......7.Y...... + 0x02, 0xd8, 0x02, 0xf3, 0x03, 0x00, 0x03, 0x03, 0x03, 0x09, 0x03, 0x0f, 0x03, 0x23, 0x03, 0x84, // .............#.. + 0x03, 0x8c, 0x03, 0x8e, 0x03, 0x93, 0x03, 0xa3, 0x03, 0xb1, 0x03, 0xba, 0x03, 0xca, 0x03, 0xd1, // ................ + 0x03, 0xd6, 0x04, 0x00, 0x04, 0x26, 0x04, 0x30, 0x04, 0x46, 0x04, 0x50, 0x04, 0x63, 0x04, 0x70, // .....&.0.F.P.c.p + 0x04, 0x78, 0x04, 0x88, 0x04, 0xcf, 0x04, 0xd8, 0x04, 0xe2, 0x04, 0xf6, 0x05, 0x02, 0x05, 0x11, // .x.............. + 0x1e, 0x00, 0x1e, 0x3e, 0x1e, 0x80, 0x1e, 0xa0, 0x1e, 0xf2, 0x1e, 0xf4, 0x1f, 0x4d, 0x20, 0x00, // ...>.........M . + 0x20, 0x13, 0x20, 0x17, 0x20, 0x20, 0x20, 0x25, 0x20, 0x30, 0x20, 0x32, 0x20, 0x39, 0x20, 0x3c, // . . % 0 2 9 < + 0x20, 0x44, 0x20, 0x74, 0x20, 0x7f, 0x20, 0xa3, 0x20, 0xa7, 0x20, 0xab, 0x21, 0x05, 0x21, 0x13, // D t . . . .!.!. + 0x21, 0x16, 0x21, 0x22, 0x21, 0x26, 0x21, 0x2e, 0x21, 0x5b, 0x22, 0x02, 0x22, 0x06, 0x22, 0x0f, // !.!"!&!.![".".". + 0x22, 0x11, 0x22, 0x1a, 0x22, 0x1e, 0x22, 0x2b, 0x22, 0x48, 0x22, 0x60, 0x22, 0x64, 0x25, 0xca, // "."."."+"H"`"d%. + 0xf6, 0xc3, 0xfe, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x00, 0x01, 0x04, 0x0c, 0x04, 0x06, 0xff, 0xf5, // ................ + 0x00, 0x00, 0xff, 0xe2, 0x01, 0x43, 0xff, 0xc0, 0x01, 0x37, 0xff, 0xbf, 0x00, 0x00, 0x01, 0x2a, // .....C...7.....* + 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x01, 0x21, 0x00, 0x00, 0x01, 0x1f, 0x00, 0x00, 0x01, 0x1d, // ...%...!........ + 0x00, 0x00, 0x01, 0x13, 0x00, 0x00, 0x01, 0x16, 0xff, 0x15, 0xff, 0x03, 0xfe, 0xf6, 0xfe, 0xe9, // ................ + 0x01, 0x58, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x63, 0xfe, 0x42, 0x00, 0x8d, 0xfd, 0xd6, 0xfd, 0xa5, // .X.....c.B...... + 0xfd, 0xc6, 0xfd, 0xb1, 0xfd, 0xa5, 0xfd, 0xa4, 0xfd, 0x9f, 0xfd, 0x9a, 0xfd, 0x87, 0x00, 0x00, // ................ + 0xff, 0x67, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x07, 0x00, 0x00, 0xff, 0x47, 0xfc, 0xfb, // .g.f.........G.. + 0xfc, 0xf8, 0x00, 0x00, 0xfc, 0xb6, 0x00, 0x00, 0xfc, 0xae, 0x00, 0x00, 0xfc, 0xa3, 0x00, 0x00, // ................ + 0xfc, 0x9f, 0x00, 0x00, 0xfe, 0x91, 0x00, 0x00, 0xfe, 0x8e, 0x00, 0x00, 0xfc, 0x47, 0x00, 0x00, // .............G.. + 0xe5, 0x4c, 0xe5, 0x0c, 0xe4, 0xbd, 0xe4, 0xeb, 0xe4, 0x51, 0xe4, 0xe9, 0xe4, 0x01, 0xe1, 0x58, // .L.......Q.....X + 0x00, 0x00, 0xe1, 0x4f, 0xe1, 0x4e, 0xe1, 0x4c, 0xe1, 0x43, 0xe3, 0x13, 0xe1, 0x3b, 0xe3, 0x0b, // ...O.N.L.C...;.. + 0xe1, 0x32, 0xe1, 0x03, 0xe0, 0xf9, 0x00, 0x00, 0xe0, 0xd3, 0x00, 0x00, 0xe0, 0x77, 0xe0, 0x6a, // .2...........w.j + 0xe0, 0x68, 0xe0, 0x5d, 0xdf, 0x91, 0xe0, 0x52, 0xe0, 0x26, 0xdf, 0x83, 0xde, 0xa9, 0xdf, 0x77, // .h.]...R.&.....w + 0xdf, 0x76, 0xdf, 0x6f, 0xdf, 0x6c, 0xdf, 0x60, 0xdf, 0x44, 0xdf, 0x2d, 0xdf, 0x2a, 0xdb, 0xc6, // .v.o.l.`.D.-.*.. + 0x0a, 0xce, 0x02, 0x93, 0x01, 0x97, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, // ................ + 0x00, 0xda, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, // ................ + 0x01, 0x1e, 0x00, 0x00, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .....`.......... + 0x00, 0x00, 0x01, 0x62, 0x01, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ...b.l.......... + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x5a, // ...............Z + 0x00, 0x00, 0x00, 0x00, 0x01, 0x62, 0x01, 0x7e, 0x00, 0x00, 0x01, 0x96, 0x00, 0x00, 0x00, 0x00, // .....b.~........ + 0x00, 0x00, 0x01, 0xae, 0x00, 0x00, 0x01, 0xf6, 0x00, 0x00, 0x02, 0x1e, 0x00, 0x00, 0x02, 0x40, // ...............@ + 0x00, 0x00, 0x02, 0x4c, 0x00, 0x00, 0x02, 0xd6, 0x00, 0x00, 0x02, 0xe6, 0x00, 0x00, 0x02, 0xfa, // ...L............ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x02, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xde, 0x00, 0x00, 0x02, 0xde, 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, 0x03, 0x04, 0x10, 0x01, 0xea, 0x01, 0xeb, // ................ + 0x01, 0xec, 0x01, 0xed, 0x01, 0xee, 0x01, 0xef, 0x00, 0x7f, 0x01, 0xe6, 0x01, 0xfa, 0x01, 0xfb, // ................ + 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x00, 0x80, 0x00, 0x81, 0x02, 0x00, 0x02, 0x01, // ................ + 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x00, 0x82, 0x00, 0x83, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, // ................ + 0x02, 0x08, 0x02, 0x09, 0x02, 0x0a, 0x00, 0x84, 0x00, 0x85, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, // ................ + 0x02, 0x18, 0x02, 0x19, 0x02, 0x1a, 0x00, 0x86, 0x00, 0x87, 0x02, 0x1b, 0x02, 0x1c, 0x02, 0x1d, // ................ + 0x02, 0x1e, 0x02, 0x1f, 0x00, 0x88, 0x01, 0xe5, 0x03, 0xe3, 0x00, 0x89, 0x01, 0xe7, 0x00, 0x8a, // ................ + 0x00, 0x8b, 0x00, 0x8c, 0x02, 0x4e, 0x02, 0x4f, 0x02, 0x50, 0x02, 0x51, 0x00, 0x8d, 0x02, 0x52, // .....N.O.P.Q...R + 0x02, 0x53, 0x02, 0x54, 0x02, 0x55, 0x02, 0x56, 0x02, 0x57, 0x02, 0x58, 0x02, 0x59, 0x00, 0x8e, // .S.T.U.V.W.X.Y.. + 0x00, 0x8f, 0x02, 0x5a, 0x02, 0x5b, 0x02, 0x5c, 0x02, 0x5d, 0x02, 0x5e, 0x02, 0x5f, 0x02, 0x60, // ...Z.[...].^._.` + 0x00, 0x90, 0x00, 0x91, 0x02, 0x61, 0x02, 0x62, 0x02, 0x63, 0x02, 0x64, 0x02, 0x65, 0x02, 0x66, // .....a.b.c.d.e.f + 0x00, 0x92, 0x00, 0x93, 0x02, 0x75, 0x02, 0x76, 0x02, 0x79, 0x02, 0x7b, 0x02, 0x7c, 0x02, 0x7d, // .....u.v.y.{.|.} + 0x01, 0xe8, 0x01, 0xe9, 0x01, 0xf0, 0x02, 0x0b, 0x02, 0x95, 0x02, 0x96, 0x02, 0x97, 0x02, 0x98, // ................ + 0x02, 0x73, 0x02, 0x74, 0x02, 0x77, 0x02, 0x78, 0x00, 0xab, 0x00, 0xac, 0x02, 0xef, 0x00, 0xad, // .s.t.w.x........ + 0x02, 0xf0, 0x02, 0xf1, 0x02, 0xf2, 0x00, 0xae, 0x00, 0xaf, 0x02, 0xf9, 0x02, 0xfa, 0x02, 0xfb, // ................ + 0x00, 0xb0, 0x02, 0xfc, 0x02, 0xfd, 0x00, 0xb1, 0x02, 0xfe, 0x02, 0xff, 0x00, 0xb2, 0x03, 0x00, // ................ + 0x00, 0xb3, 0x03, 0x01, 0x00, 0xb4, 0x03, 0x02, 0x03, 0x03, 0x00, 0xb5, 0x03, 0x04, 0x00, 0xb6, // ................ + 0x00, 0xb7, 0x03, 0x05, 0x03, 0x06, 0x03, 0x07, 0x03, 0x08, 0x03, 0x09, 0x03, 0x0a, 0x03, 0x0b, // ................ + 0x03, 0x0c, 0x00, 0xc1, 0x03, 0x0e, 0x03, 0x0f, 0x00, 0xc2, 0x03, 0x0d, 0x00, 0xc3, 0x00, 0xc4, // ................ + 0x00, 0xc5, 0x00, 0xc6, 0x00, 0xc7, 0x00, 0xc8, 0x00, 0xc9, 0x03, 0x10, 0x00, 0xca, 0x00, 0xcb, // ................ + 0x03, 0x4f, 0x03, 0x16, 0x00, 0xcf, 0x03, 0x17, 0x00, 0xd0, 0x03, 0x18, 0x03, 0x19, 0x03, 0x1a, // .O.............. + 0x03, 0x1b, 0x00, 0xd1, 0x00, 0xd2, 0x00, 0xd3, 0x03, 0x1d, 0x03, 0x50, 0x03, 0x1e, 0x00, 0xd4, // ...........P.... + 0x03, 0x1f, 0x00, 0xd5, 0x03, 0x20, 0x03, 0x21, 0x00, 0xd6, 0x03, 0x22, 0x00, 0xd7, 0x00, 0xd8, // ..... .!...".... + 0x00, 0xd9, 0x03, 0x23, 0x03, 0x1c, 0x00, 0xda, 0x03, 0x24, 0x03, 0x25, 0x03, 0x26, 0x03, 0x27, // ...#.....$.%.&.' + 0x03, 0x28, 0x03, 0x29, 0x03, 0x2a, 0x00, 0xdb, 0x03, 0x2b, 0x03, 0x2c, 0x03, 0x2d, 0x00, 0xe6, // .(.).*...+.,.-.. + 0x00, 0xe7, 0x00, 0xe8, 0x00, 0xe9, 0x03, 0x2e, 0x00, 0xea, 0x00, 0xeb, 0x00, 0xec, 0x03, 0x2f, // .............../ + 0x00, 0xed, 0x00, 0xee, 0x00, 0xef, 0x00, 0xf0, 0x03, 0x30, 0x00, 0xf1, 0x03, 0x31, 0x03, 0x32, // .........0...1.2 + 0x00, 0xf2, 0x03, 0x33, 0x00, 0xf3, 0x03, 0x34, 0x03, 0x51, 0x03, 0x35, 0x00, 0xfe, 0x03, 0x36, // ...3...4.Q.5...6 + 0x00, 0xff, 0x03, 0x37, 0x03, 0x38, 0x03, 0x39, 0x03, 0x3a, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, // ...7.8.9.:...... + 0x03, 0x3b, 0x03, 0x52, 0x03, 0x3c, 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x03, 0xfa, 0x03, 0x53, // .;.R.<.........S + 0x03, 0x54, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x16, 0x03, 0x55, 0x03, 0x56, 0x01, 0x26, // .T.........U.V.& + 0x01, 0x27, 0x03, 0xff, 0x04, 0x00, 0x03, 0xf9, 0x03, 0xf8, 0x01, 0x28, 0x01, 0x29, 0x01, 0x2a, // .'.........(.).* + 0x01, 0x2b, 0x03, 0xfb, 0x03, 0xfc, 0x01, 0x2c, 0x01, 0x2d, 0x03, 0xf3, 0x03, 0xf4, 0x03, 0x57, // .+.....,.-.....W + 0x03, 0x58, 0x03, 0xe5, 0x03, 0xe6, 0x01, 0x2e, 0x01, 0x2f, 0x03, 0xfd, 0x03, 0xfe, 0x01, 0x30, // .X......./.....0 + 0x01, 0x31, 0x03, 0xe7, 0x03, 0xe8, 0x01, 0x32, 0x01, 0x33, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, // .1.....2.3.4.5.6 + 0x01, 0x37, 0x03, 0x59, 0x03, 0x5a, 0x03, 0xe9, 0x03, 0xea, 0x03, 0x5b, 0x03, 0x5c, 0x04, 0x07, // .7.Y.Z.....[.... + 0x04, 0x08, 0x03, 0xeb, 0x03, 0xec, 0x01, 0x38, 0x01, 0x39, 0x03, 0xed, 0x03, 0xee, 0x01, 0x3a, // .......8.9.....: + 0x01, 0x3b, 0x01, 0x3c, 0x03, 0xf7, 0x01, 0x3d, 0x01, 0x3e, 0x03, 0xf5, 0x03, 0xf6, 0x03, 0x5d, // .;.<...=.>.....] + 0x03, 0x5e, 0x03, 0x5f, 0x01, 0x3f, 0x01, 0x40, 0x04, 0x05, 0x04, 0x06, 0x01, 0x41, 0x01, 0x42, // .^._.?.@.....A.B + 0x04, 0x01, 0x04, 0x02, 0x03, 0xef, 0x03, 0xf0, 0x04, 0x03, 0x04, 0x04, 0x01, 0x43, 0x03, 0x6a, // .............C.j + 0x03, 0x69, 0x03, 0x6b, 0x03, 0x6c, 0x03, 0x6d, 0x03, 0x6e, 0x03, 0x6f, 0x01, 0x44, 0x01, 0x45, // .i.k.l.m.n.o.D.E + 0x03, 0xf1, 0x03, 0xf2, 0x03, 0x84, 0x03, 0x85, 0x01, 0x46, 0x01, 0x47, 0x03, 0x86, 0x03, 0x87, // .........F.G.... + 0x04, 0x09, 0x04, 0x0a, 0x01, 0x48, 0x03, 0x88, 0x04, 0x0b, 0x03, 0x89, 0x03, 0x8a, 0x01, 0x64, // .....H.........d + 0x01, 0x65, 0x04, 0x0d, 0x04, 0x0c, 0x01, 0x79, 0x03, 0xe4, 0x01, 0x7b, 0x00, 0x06, 0x02, 0x0a, // .e.....y...{.... + 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, 0x02, 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, 0x03, 0x04, 0x10, 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, // ./.0.1.2.3.4.5.6 + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, // .7.8.9.:.;.<.=.> + 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, // .?.@.A.B.C.D.E.F + 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b, 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, // .G.H.I.J.K.L.M.N + 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, // .O.P.Q.R.S.T.U.V + 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, // .W.X.Y.Z.[...].^ + 0x00, 0x5f, 0x00, 0x60, 0x00, 0x00, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf1, 0x01, 0xf3, 0x01, 0xfa, // ._.`............ + 0x01, 0xff, 0x02, 0x03, 0x02, 0x06, 0x02, 0x05, 0x02, 0x07, 0x02, 0x09, 0x02, 0x08, 0x02, 0x0a, // ................ + 0x02, 0x0c, 0x02, 0x0e, 0x02, 0x0d, 0x02, 0x0f, 0x02, 0x10, 0x02, 0x12, 0x02, 0x11, 0x02, 0x13, // ................ + 0x02, 0x14, 0x02, 0x15, 0x02, 0x17, 0x02, 0x16, 0x02, 0x18, 0x02, 0x1a, 0x02, 0x19, 0x02, 0x1c, // ................ + 0x02, 0x1b, 0x02, 0x1d, 0x02, 0x1e, 0x01, 0x6e, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x63, 0x00, 0x67, // .......n.o.b.c.g + 0x01, 0x70, 0x00, 0x75, 0x00, 0x83, 0x00, 0x6d, 0x00, 0x69, 0x01, 0x7f, 0x00, 0x73, 0x00, 0x68, // .p.u...m.i...s.h + 0x01, 0x8d, 0x00, 0x7f, 0x00, 0x81, 0x01, 0x8a, 0x00, 0x70, 0x01, 0x8e, 0x01, 0x8f, 0x00, 0x65, // .........p.....e + 0x00, 0x74, 0x01, 0x85, 0x01, 0x87, 0x01, 0x86, 0x00, 0xc3, 0x01, 0x8b, 0x00, 0x6a, 0x00, 0x79, // .t...........j.y + 0x00, 0xb7, 0x00, 0x84, 0x00, 0x87, 0x00, 0x7e, 0x00, 0x61, 0x00, 0x6c, 0x01, 0x89, 0x00, 0x95, // .......~.a.l.... + 0x01, 0x8c, 0x00, 0xaf, 0x00, 0x6b, 0x00, 0x7a, 0x01, 0x72, 0x00, 0x03, 0x01, 0xea, 0x01, 0xed, // .....k.z.r...... + 0x01, 0xfe, 0x00, 0x92, 0x00, 0x93, 0x01, 0x64, 0x01, 0x65, 0x01, 0x6b, 0x01, 0x6c, 0x01, 0x67, // .......d.e.k.l.g + 0x01, 0x68, 0x00, 0x86, 0x01, 0x90, 0x02, 0x20, 0x02, 0x8e, 0x01, 0x76, 0x01, 0x7b, 0x01, 0x74, // .h..... ...v.{.t + 0x01, 0x75, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6f, 0x00, 0x76, 0x01, 0x69, 0x01, 0x6d, 0x01, 0x73, // .u.....o.v.i.m.s + 0x01, 0xec, 0x01, 0xf4, 0x01, 0xeb, 0x01, 0xf5, 0x01, 0xf2, 0x01, 0xf7, 0x01, 0xf8, 0x01, 0xf9, // ................ + 0x01, 0xf6, 0x01, 0xfc, 0x01, 0xfd, 0x00, 0x00, 0x01, 0xfb, 0x02, 0x01, 0x02, 0x02, 0x02, 0x00, // ................ + 0x00, 0x8a, 0x00, 0x9c, 0x00, 0xa2, 0x00, 0x6e, 0x00, 0x9e, 0x00, 0x9f, 0x00, 0xa0, 0x00, 0x77, // .......n.......w + 0x00, 0xa3, 0x00, 0xa1, 0x00, 0x9d, 0x00, 0x00, 0xb0, 0x00, 0x2c, 0x20, 0xb0, 0x00, 0x55, 0x58, // .........., ..UX + 0x45, 0x59, 0x20, 0x20, 0x4b, 0xb0, 0x0e, 0x51, 0x4b, 0xb0, 0x06, 0x53, 0x5a, 0x58, 0xb0, 0x34, // EY K..QK..SZX.4 + 0x1b, 0xb0, 0x28, 0x59, 0x60, 0x66, 0x20, 0x8a, 0x55, 0x58, 0xb0, 0x02, 0x25, 0x61, 0xb9, 0x08, // ..(Y`f .UX..%a.. + 0x00, 0x08, 0x00, 0x63, 0x63, 0x23, 0x62, 0x1b, 0x21, 0x21, 0xb0, 0x00, 0x59, 0xb0, 0x00, 0x43, // ...cc#b.!!..Y..C + 0x23, 0x44, 0xb2, 0x00, 0x01, 0x00, 0x43, 0x60, 0x42, 0x2d, 0xb0, 0x01, 0x2c, 0xb0, 0x20, 0x60, // #D....C`B-..,. ` + 0x66, 0x2d, 0xb0, 0x02, 0x2c, 0x20, 0x64, 0x20, 0xb0, 0xc0, 0x50, 0xb0, 0x04, 0x26, 0x5a, 0xb2, // f-.., d ..P..&Z. + 0x28, 0x01, 0x0a, 0x43, 0x45, 0x63, 0x45, 0x52, 0x5b, 0x58, 0x21, 0x23, 0x21, 0x1b, 0x8a, 0x58, // (..CEcER[X!#!..X + 0x20, 0xb0, 0x50, 0x50, 0x58, 0x21, 0xb0, 0x40, 0x59, 0x1b, 0x20, 0xb0, 0x38, 0x50, 0x58, 0x21, // .PPX!.@Y. .8PX! + 0xb0, 0x38, 0x59, 0x59, 0x20, 0xb1, 0x01, 0x0a, 0x43, 0x45, 0x63, 0x45, 0x61, 0x64, 0xb0, 0x28, // .8YY ...CEcEad.( + 0x50, 0x58, 0x21, 0xb1, 0x01, 0x0a, 0x43, 0x45, 0x63, 0x45, 0x20, 0xb0, 0x30, 0x50, 0x58, 0x21, // PX!...CEcE .0PX! + 0xb0, 0x30, 0x59, 0x1b, 0x20, 0xb0, 0xc0, 0x50, 0x58, 0x20, 0x66, 0x20, 0x8a, 0x8a, 0x61, 0x20, // .0Y. ..PX f ..a + 0xb0, 0x0a, 0x50, 0x58, 0x60, 0x1b, 0x20, 0xb0, 0x20, 0x50, 0x58, 0x21, 0xb0, 0x0a, 0x60, 0x1b, // ..PX`. . PX!..`. + 0x20, 0xb0, 0x36, 0x50, 0x58, 0x21, 0xb0, 0x36, 0x60, 0x1b, 0x60, 0x59, 0x59, 0x59, 0x1b, 0xb0, // .6PX!.6`.`YYY.. + 0x01, 0x2b, 0x59, 0x59, 0x23, 0xb0, 0x00, 0x50, 0x58, 0x65, 0x59, 0x59, 0x2d, 0xb0, 0x03, 0x2c, // .+YY#..PXeYY-.., + 0x20, 0x45, 0x20, 0xb0, 0x04, 0x25, 0x61, 0x64, 0x20, 0xb0, 0x05, 0x43, 0x50, 0x58, 0xb0, 0x05, // E ..%ad ..CPX.. + 0x23, 0x42, 0xb0, 0x06, 0x23, 0x42, 0x1b, 0x21, 0x21, 0x59, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x04, // #B..#B.!!Y..`-.. + 0x2c, 0x23, 0x21, 0x23, 0x21, 0x20, 0x64, 0xb1, 0x05, 0x62, 0x42, 0x20, 0xb0, 0x06, 0x23, 0x42, // ,#!#! d..bB ..#B + 0xb1, 0x01, 0x0a, 0x43, 0x45, 0x63, 0xb1, 0x01, 0x0a, 0x43, 0xb0, 0x04, 0x60, 0x45, 0x63, 0xb0, // ...CEc...C..`Ec. + 0x03, 0x2a, 0x21, 0x20, 0xb0, 0x06, 0x43, 0x20, 0x8a, 0x20, 0x8a, 0xb0, 0x01, 0x2b, 0xb1, 0x30, // .*! ..C . ...+.0 + 0x05, 0x25, 0xb0, 0x04, 0x26, 0x51, 0x58, 0x60, 0x50, 0x1b, 0x61, 0x52, 0x59, 0x58, 0x23, 0x59, // .%..&QX`P.aRYX#Y + 0x21, 0x20, 0xb0, 0x40, 0x53, 0x58, 0xb0, 0x01, 0x2b, 0x1b, 0x21, 0xb0, 0x40, 0x59, 0x23, 0xb0, // ! .@SX..+.!.@Y#. + 0x00, 0x50, 0x58, 0x65, 0x59, 0x2d, 0xb0, 0x05, 0x2c, 0xb0, 0x07, 0x43, 0x2b, 0xb2, 0x00, 0x02, // .PXeY-..,..C+... + 0x00, 0x43, 0x60, 0x42, 0x2d, 0xb0, 0x06, 0x2c, 0xb0, 0x07, 0x23, 0x42, 0x23, 0x20, 0xb0, 0x00, // .C`B-..,..#B# .. + 0x23, 0x42, 0x61, 0xb0, 0x02, 0x62, 0x66, 0xb0, 0x01, 0x63, 0xb0, 0x01, 0x60, 0xb0, 0x05, 0x2a, // #Ba..bf..c..`..* + 0x2d, 0xb0, 0x07, 0x2c, 0x20, 0x20, 0x45, 0x20, 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, 0x62, // -.., E ..Cc...b + 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0x44, 0xb0, // ..PX.@`Yf..c`D. + 0x01, 0x60, 0x2d, 0xb0, 0x08, 0x2c, 0xb2, 0x07, 0x0b, 0x00, 0x43, 0x45, 0x42, 0x2a, 0x21, 0xb2, // .`-..,....CEB*!. + 0x00, 0x01, 0x00, 0x43, 0x60, 0x42, 0x2d, 0xb0, 0x09, 0x2c, 0xb0, 0x00, 0x43, 0x23, 0x44, 0xb2, // ...C`B-..,..C#D. + 0x00, 0x01, 0x00, 0x43, 0x60, 0x42, 0x2d, 0xb0, 0x0a, 0x2c, 0x20, 0x20, 0x45, 0x20, 0xb0, 0x01, // ...C`B-.., E .. + 0x2b, 0x23, 0xb0, 0x00, 0x43, 0xb0, 0x04, 0x25, 0x60, 0x20, 0x45, 0x8a, 0x23, 0x61, 0x20, 0x64, // +#..C..%` E.#a d + 0x20, 0xb0, 0x20, 0x50, 0x58, 0x21, 0xb0, 0x00, 0x1b, 0xb0, 0x30, 0x50, 0x58, 0xb0, 0x20, 0x1b, // . PX!....0PX. . + 0xb0, 0x40, 0x59, 0x59, 0x23, 0xb0, 0x00, 0x50, 0x58, 0x65, 0x59, 0xb0, 0x03, 0x25, 0x23, 0x61, // .@YY#..PXeY..%#a + 0x44, 0x44, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x0b, 0x2c, 0x20, 0x20, 0x45, 0x20, 0xb0, 0x01, 0x2b, // DD..`-.., E ..+ + 0x23, 0xb0, 0x00, 0x43, 0xb0, 0x04, 0x25, 0x60, 0x20, 0x45, 0x8a, 0x23, 0x61, 0x20, 0x64, 0xb0, // #..C..%` E.#a d. + 0x24, 0x50, 0x58, 0xb0, 0x00, 0x1b, 0xb0, 0x40, 0x59, 0x23, 0xb0, 0x00, 0x50, 0x58, 0x65, 0x59, // $PX....@Y#..PXeY + 0xb0, 0x03, 0x25, 0x23, 0x61, 0x44, 0x44, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x0c, 0x2c, 0x20, 0xb0, // ..%#aDD..`-.., . + 0x00, 0x23, 0x42, 0xb2, 0x0b, 0x0a, 0x03, 0x45, 0x58, 0x21, 0x1b, 0x23, 0x21, 0x59, 0x2a, 0x21, // .#B....EX!.#!Y*! + 0x2d, 0xb0, 0x0d, 0x2c, 0xb1, 0x02, 0x02, 0x45, 0xb0, 0x64, 0x61, 0x44, 0x2d, 0xb0, 0x0e, 0x2c, // -..,...E.daD-.., + 0xb0, 0x01, 0x60, 0x20, 0x20, 0xb0, 0x0c, 0x43, 0x4a, 0xb0, 0x00, 0x50, 0x58, 0x20, 0xb0, 0x0c, // ..` ..CJ..PX .. + 0x23, 0x42, 0x59, 0xb0, 0x0d, 0x43, 0x4a, 0xb0, 0x00, 0x52, 0x58, 0x20, 0xb0, 0x0d, 0x23, 0x42, // #BY..CJ..RX ..#B + 0x59, 0x2d, 0xb0, 0x0f, 0x2c, 0x20, 0xb0, 0x10, 0x62, 0x66, 0xb0, 0x01, 0x63, 0x20, 0xb8, 0x04, // Y-.., ..bf..c .. + 0x00, 0x63, 0x8a, 0x23, 0x61, 0xb0, 0x0e, 0x43, 0x60, 0x20, 0x8a, 0x60, 0x20, 0xb0, 0x0e, 0x23, // .c.#a..C` .` ..# + 0x42, 0x23, 0x2d, 0xb0, 0x10, 0x2c, 0x4b, 0x54, 0x58, 0xb1, 0x04, 0x64, 0x44, 0x59, 0x24, 0xb0, // B#-..,KTX..dDY$. + 0x0d, 0x65, 0x23, 0x78, 0x2d, 0xb0, 0x11, 0x2c, 0x4b, 0x51, 0x58, 0x4b, 0x53, 0x58, 0xb1, 0x04, // .e#x-..,KQXKSX.. + 0x64, 0x44, 0x59, 0x1b, 0x21, 0x59, 0x24, 0xb0, 0x13, 0x65, 0x23, 0x78, 0x2d, 0xb0, 0x12, 0x2c, // dDY.!Y$..e#x-.., + 0xb1, 0x00, 0x0f, 0x43, 0x55, 0x58, 0xb1, 0x0f, 0x0f, 0x43, 0xb0, 0x01, 0x61, 0x42, 0xb0, 0x0f, // ...CUX...C..aB.. + 0x2b, 0x59, 0xb0, 0x00, 0x43, 0xb0, 0x02, 0x25, 0x42, 0xb1, 0x0c, 0x02, 0x25, 0x42, 0xb1, 0x0d, // +Y..C..%B...%B.. + 0x02, 0x25, 0x42, 0xb0, 0x01, 0x16, 0x23, 0x20, 0xb0, 0x03, 0x25, 0x50, 0x58, 0xb1, 0x01, 0x00, // .%B...# ..%PX... + 0x43, 0x60, 0xb0, 0x04, 0x25, 0x42, 0x8a, 0x8a, 0x20, 0x8a, 0x23, 0x61, 0xb0, 0x0e, 0x2a, 0x21, // C`..%B.. .#a..*! + 0x23, 0xb0, 0x01, 0x61, 0x20, 0x8a, 0x23, 0x61, 0xb0, 0x0e, 0x2a, 0x21, 0x1b, 0xb1, 0x01, 0x00, // #..a .#a..*!.... + 0x43, 0x60, 0xb0, 0x02, 0x25, 0x42, 0xb0, 0x02, 0x25, 0x61, 0xb0, 0x0e, 0x2a, 0x21, 0x59, 0xb0, // C`..%B..%a..*!Y. + 0x0c, 0x43, 0x47, 0xb0, 0x0d, 0x43, 0x47, 0x60, 0xb0, 0x02, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, // .CG..CG`..b ..PX + 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x20, 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, // .@`Yf..c ..Cc... + 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0xb1, // b ..PX.@`Yf..c`. + 0x00, 0x00, 0x13, 0x23, 0x44, 0xb0, 0x01, 0x43, 0xb0, 0x00, 0x3e, 0xb2, 0x01, 0x01, 0x01, 0x43, // ...#D..C..>....C + 0x60, 0x42, 0x2d, 0xb0, 0x13, 0x2c, 0x00, 0xb1, 0x00, 0x02, 0x45, 0x54, 0x58, 0xb0, 0x0f, 0x23, // `B-..,....ETX..# + 0x42, 0x20, 0x45, 0xb0, 0x0b, 0x23, 0x42, 0xb0, 0x0a, 0x23, 0xb0, 0x04, 0x60, 0x42, 0x20, 0x60, // B E..#B..#..`B ` + 0xb0, 0x01, 0x61, 0xb5, 0x10, 0x10, 0x01, 0x00, 0x0e, 0x00, 0x42, 0x42, 0x8a, 0x60, 0xb1, 0x12, // ..a.......BB.`.. + 0x06, 0x2b, 0xb0, 0x75, 0x2b, 0x1b, 0x22, 0x59, 0x2d, 0xb0, 0x14, 0x2c, 0xb1, 0x00, 0x13, 0x2b, // .+.u+."Y-..,...+ + 0x2d, 0xb0, 0x15, 0x2c, 0xb1, 0x01, 0x13, 0x2b, 0x2d, 0xb0, 0x16, 0x2c, 0xb1, 0x02, 0x13, 0x2b, // -..,...+-..,...+ + 0x2d, 0xb0, 0x17, 0x2c, 0xb1, 0x03, 0x13, 0x2b, 0x2d, 0xb0, 0x18, 0x2c, 0xb1, 0x04, 0x13, 0x2b, // -..,...+-..,...+ + 0x2d, 0xb0, 0x19, 0x2c, 0xb1, 0x05, 0x13, 0x2b, 0x2d, 0xb0, 0x1a, 0x2c, 0xb1, 0x06, 0x13, 0x2b, // -..,...+-..,...+ + 0x2d, 0xb0, 0x1b, 0x2c, 0xb1, 0x07, 0x13, 0x2b, 0x2d, 0xb0, 0x1c, 0x2c, 0xb1, 0x08, 0x13, 0x2b, // -..,...+-..,...+ + 0x2d, 0xb0, 0x1d, 0x2c, 0xb1, 0x09, 0x13, 0x2b, 0x2d, 0xb0, 0x29, 0x2c, 0x20, 0x2e, 0xb0, 0x01, // -..,...+-.), ... + 0x5d, 0x2d, 0xb0, 0x2a, 0x2c, 0x20, 0x2e, 0xb0, 0x01, 0x71, 0x2d, 0xb0, 0x2b, 0x2c, 0x20, 0x2e, // ]-.*, ...q-.+, . + 0xb0, 0x01, 0x72, 0x2d, 0xb0, 0x1e, 0x2c, 0x00, 0xb0, 0x0d, 0x2b, 0xb1, 0x00, 0x02, 0x45, 0x54, // ..r-..,...+...ET + 0x58, 0xb0, 0x0f, 0x23, 0x42, 0x20, 0x45, 0xb0, 0x0b, 0x23, 0x42, 0xb0, 0x0a, 0x23, 0xb0, 0x04, // X..#B E..#B..#.. + 0x60, 0x42, 0x20, 0x60, 0xb0, 0x01, 0x61, 0xb5, 0x10, 0x10, 0x01, 0x00, 0x0e, 0x00, 0x42, 0x42, // `B `..a.......BB + 0x8a, 0x60, 0xb1, 0x12, 0x06, 0x2b, 0xb0, 0x75, 0x2b, 0x1b, 0x22, 0x59, 0x2d, 0xb0, 0x1f, 0x2c, // .`...+.u+."Y-.., + 0xb1, 0x00, 0x1e, 0x2b, 0x2d, 0xb0, 0x20, 0x2c, 0xb1, 0x01, 0x1e, 0x2b, 0x2d, 0xb0, 0x21, 0x2c, // ...+-. ,...+-.!, + 0xb1, 0x02, 0x1e, 0x2b, 0x2d, 0xb0, 0x22, 0x2c, 0xb1, 0x03, 0x1e, 0x2b, 0x2d, 0xb0, 0x23, 0x2c, // ...+-.",...+-.#, + 0xb1, 0x04, 0x1e, 0x2b, 0x2d, 0xb0, 0x24, 0x2c, 0xb1, 0x05, 0x1e, 0x2b, 0x2d, 0xb0, 0x25, 0x2c, // ...+-.$,...+-.%, + 0xb1, 0x06, 0x1e, 0x2b, 0x2d, 0xb0, 0x26, 0x2c, 0xb1, 0x07, 0x1e, 0x2b, 0x2d, 0xb0, 0x27, 0x2c, // ...+-.&,...+-.', + 0xb1, 0x08, 0x1e, 0x2b, 0x2d, 0xb0, 0x28, 0x2c, 0xb1, 0x09, 0x1e, 0x2b, 0x2d, 0xb0, 0x2c, 0x2c, // ...+-.(,...+-.,, + 0x20, 0x3c, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x2d, 0x2c, 0x20, 0x60, 0xb0, 0x10, 0x60, 0x20, 0x43, // <..`-.-, `..` C + 0x23, 0xb0, 0x01, 0x60, 0x43, 0xb0, 0x02, 0x25, 0x61, 0xb0, 0x01, 0x60, 0xb0, 0x2c, 0x2a, 0x21, // #..`C..%a..`.,*! + 0x2d, 0xb0, 0x2e, 0x2c, 0xb0, 0x2d, 0x2b, 0xb0, 0x2d, 0x2a, 0x2d, 0xb0, 0x2f, 0x2c, 0x20, 0x20, // -..,.-+.-*-./, + 0x47, 0x20, 0x20, 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, // G ..Cc...b ..PX + 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0x23, 0x61, 0x38, 0x23, 0x20, 0x8a, 0x55, // .@`Yf..c`#a8# .U + 0x58, 0x20, 0x47, 0x20, 0x20, 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, 0x62, 0x20, 0xb0, 0x00, // X G ..Cc...b .. + 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0x23, 0x61, 0x38, 0x1b, 0x21, // PX.@`Yf..c`#a8.! + 0x59, 0x2d, 0xb0, 0x30, 0x2c, 0x00, 0xb1, 0x00, 0x02, 0x45, 0x54, 0x58, 0xb0, 0x01, 0x16, 0xb0, // Y-.0,....ETX.... + 0x2f, 0x2a, 0xb1, 0x05, 0x01, 0x15, 0x45, 0x58, 0x30, 0x59, 0x1b, 0x22, 0x59, 0x2d, 0xb0, 0x31, // /*....EX0Y."Y-.1 + 0x2c, 0x00, 0xb0, 0x0d, 0x2b, 0xb1, 0x00, 0x02, 0x45, 0x54, 0x58, 0xb0, 0x01, 0x16, 0xb0, 0x2f, // ,...+...ETX..../ + 0x2a, 0xb1, 0x05, 0x01, 0x15, 0x45, 0x58, 0x30, 0x59, 0x1b, 0x22, 0x59, 0x2d, 0xb0, 0x32, 0x2c, // *....EX0Y."Y-.2, + 0x20, 0x35, 0xb0, 0x01, 0x60, 0x2d, 0xb0, 0x33, 0x2c, 0x00, 0xb0, 0x01, 0x45, 0x63, 0xb8, 0x04, // 5..`-.3,...Ec.. + 0x00, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0xb0, // .b ..PX.@`Yf..c. + 0x01, 0x2b, 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, // .+..Cc...b ..PX. + 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0xb0, 0x01, 0x2b, 0xb0, 0x00, 0x16, 0xb4, 0x00, 0x00, // @`Yf..c..+...... + 0x00, 0x00, 0x00, 0x44, 0x3e, 0x23, 0x38, 0xb1, 0x32, 0x01, 0x15, 0x2a, 0x2d, 0xb0, 0x34, 0x2c, // ...D>#8.2..*-.4, + 0x20, 0x3c, 0x20, 0x47, 0x20, 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, 0x62, 0x20, 0xb0, 0x00, // < G ..Cc...b .. + 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0xb0, 0x00, 0x43, 0x61, 0x38, // PX.@`Yf..c`..Ca8 + 0x2d, 0xb0, 0x35, 0x2c, 0x2e, 0x17, 0x3c, 0x2d, 0xb0, 0x36, 0x2c, 0x20, 0x3c, 0x20, 0x47, 0x20, // -.5,..<-.6, < G + 0xb0, 0x0b, 0x43, 0x63, 0xb8, 0x04, 0x00, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, // ..Cc...b ..PX.@` + 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0xb0, 0x00, 0x43, 0x61, 0xb0, 0x01, 0x43, 0x63, 0x38, 0x2d, // Yf..c`..Ca..Cc8- + 0xb0, 0x37, 0x2c, 0xb1, 0x02, 0x00, 0x16, 0x25, 0x20, 0x2e, 0x20, 0x47, 0xb0, 0x00, 0x23, 0x42, // .7,....% . G..#B + 0xb0, 0x02, 0x25, 0x49, 0x8a, 0x8a, 0x47, 0x23, 0x47, 0x23, 0x61, 0x20, 0x58, 0x62, 0x1b, 0x21, // ..%I..G#G#a Xb.! + 0x59, 0xb0, 0x01, 0x23, 0x42, 0xb2, 0x36, 0x01, 0x01, 0x15, 0x14, 0x2a, 0x2d, 0xb0, 0x38, 0x2c, // Y..#B.6....*-.8, + 0xb0, 0x00, 0x16, 0xb0, 0x04, 0x25, 0xb0, 0x04, 0x25, 0x47, 0x23, 0x47, 0x23, 0x61, 0xb0, 0x09, // .....%..%G#G#a.. + 0x43, 0x2b, 0x65, 0x8a, 0x2e, 0x23, 0x20, 0x20, 0x3c, 0x8a, 0x38, 0x2d, 0xb0, 0x39, 0x2c, 0xb0, // C+e..# <.8-.9,. + 0x00, 0x16, 0xb0, 0x04, 0x25, 0xb0, 0x04, 0x25, 0x20, 0x2e, 0x47, 0x23, 0x47, 0x23, 0x61, 0x20, // ....%..% .G#G#a + 0xb0, 0x04, 0x23, 0x42, 0xb0, 0x09, 0x43, 0x2b, 0x20, 0xb0, 0x60, 0x50, 0x58, 0x20, 0xb0, 0x40, // ..#B..C+ .`PX .@ + 0x51, 0x58, 0xb3, 0x02, 0x20, 0x03, 0x20, 0x1b, 0xb3, 0x02, 0x26, 0x03, 0x1a, 0x59, 0x42, 0x42, // QX.. . ...&..YBB + 0x23, 0x20, 0xb0, 0x08, 0x43, 0x20, 0x8a, 0x23, 0x47, 0x23, 0x47, 0x23, 0x61, 0x23, 0x46, 0x60, // # ..C .#G#G#a#F` + 0xb0, 0x04, 0x43, 0xb0, 0x02, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, // ..C..b ..PX.@`Yf + 0xb0, 0x01, 0x63, 0x60, 0x20, 0xb0, 0x01, 0x2b, 0x20, 0x8a, 0x8a, 0x61, 0x20, 0xb0, 0x02, 0x43, // ..c` ..+ ..a ..C + 0x60, 0x64, 0x23, 0xb0, 0x03, 0x43, 0x61, 0x64, 0x50, 0x58, 0xb0, 0x02, 0x43, 0x61, 0x1b, 0xb0, // `d#..CadPX..Ca.. + 0x03, 0x43, 0x60, 0x59, 0xb0, 0x03, 0x25, 0xb0, 0x02, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, // .C`Y..%..b ..PX. + 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x61, 0x23, 0x20, 0x20, 0xb0, 0x04, 0x26, 0x23, 0x46, // @`Yf..ca# ..&#F + 0x61, 0x38, 0x1b, 0x23, 0xb0, 0x08, 0x43, 0x46, 0xb0, 0x02, 0x25, 0xb0, 0x08, 0x43, 0x47, 0x23, // a8.#..CF..%..CG# + 0x47, 0x23, 0x61, 0x60, 0x20, 0xb0, 0x04, 0x43, 0xb0, 0x02, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, // G#a` ..C..b ..PX + 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0x23, 0x20, 0xb0, 0x01, 0x2b, 0x23, 0xb0, // .@`Yf..c`# ..+#. + 0x04, 0x43, 0x60, 0xb0, 0x01, 0x2b, 0xb0, 0x05, 0x25, 0x61, 0xb0, 0x05, 0x25, 0xb0, 0x02, 0x62, // .C`..+..%a..%..b + 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0xb0, 0x04, 0x26, // ..PX.@`Yf..c..& + 0x61, 0x20, 0xb0, 0x04, 0x25, 0x60, 0x64, 0x23, 0xb0, 0x03, 0x25, 0x60, 0x64, 0x50, 0x58, 0x21, // a ..%`d#..%`dPX! + 0x1b, 0x23, 0x21, 0x59, 0x23, 0x20, 0x20, 0xb0, 0x04, 0x26, 0x23, 0x46, 0x61, 0x38, 0x59, 0x2d, // .#!Y# ..&#Fa8Y- + 0xb0, 0x3a, 0x2c, 0xb0, 0x00, 0x16, 0x20, 0x20, 0x20, 0xb0, 0x05, 0x26, 0x20, 0x2e, 0x47, 0x23, // .:,... ..& .G# + 0x47, 0x23, 0x61, 0x23, 0x3c, 0x38, 0x2d, 0xb0, 0x3b, 0x2c, 0xb0, 0x00, 0x16, 0x20, 0xb0, 0x08, // G#a#<8-.;,... .. + 0x23, 0x42, 0x20, 0x20, 0x20, 0x46, 0x23, 0x47, 0xb0, 0x01, 0x2b, 0x23, 0x61, 0x38, 0x2d, 0xb0, // #B F#G..+#a8-. + 0x3c, 0x2c, 0xb0, 0x00, 0x16, 0xb0, 0x03, 0x25, 0xb0, 0x02, 0x25, 0x47, 0x23, 0x47, 0x23, 0x61, // <,.....%..%G#G#a + 0xb0, 0x00, 0x54, 0x58, 0x2e, 0x20, 0x3c, 0x23, 0x21, 0x1b, 0xb0, 0x02, 0x25, 0xb0, 0x02, 0x25, // ..TX. <#!...%..% + 0x47, 0x23, 0x47, 0x23, 0x61, 0x20, 0xb0, 0x05, 0x25, 0xb0, 0x04, 0x25, 0x47, 0x23, 0x47, 0x23, // G#G#a ..%..%G#G# + 0x61, 0xb0, 0x06, 0x25, 0xb0, 0x05, 0x25, 0x49, 0xb0, 0x02, 0x25, 0x61, 0xb9, 0x08, 0x00, 0x08, // a..%..%I..%a.... + 0x00, 0x63, 0x63, 0x23, 0x20, 0x58, 0x62, 0x1b, 0x21, 0x59, 0x63, 0xb8, 0x04, 0x00, 0x62, 0x20, // .cc# Xb.!Yc...b + 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, 0x60, 0x23, 0x2e, 0x23, // ..PX.@`Yf..c`#.# + 0x20, 0x20, 0x3c, 0x8a, 0x38, 0x23, 0x21, 0x59, 0x2d, 0xb0, 0x3d, 0x2c, 0xb0, 0x00, 0x16, 0x20, // <.8#!Y-.=,... + 0xb0, 0x08, 0x43, 0x20, 0x2e, 0x47, 0x23, 0x47, 0x23, 0x61, 0x20, 0x60, 0xb0, 0x20, 0x60, 0x66, // ..C .G#G#a `. `f + 0xb0, 0x02, 0x62, 0x20, 0xb0, 0x00, 0x50, 0x58, 0xb0, 0x40, 0x60, 0x59, 0x66, 0xb0, 0x01, 0x63, // ..b ..PX.@`Yf..c + 0x23, 0x20, 0x20, 0x3c, 0x8a, 0x38, 0x2d, 0xb0, 0x3e, 0x2c, 0x23, 0x20, 0x2e, 0x46, 0xb0, 0x02, // # <.8-.>,# .F.. + 0x25, 0x46, 0x52, 0x58, 0x20, 0x3c, 0x59, 0x2e, 0xb1, 0x2e, 0x01, 0x14, 0x2b, 0x2d, 0xb0, 0x3f, // %FRX +-.g,.:+.?+-.h + 0x2c, 0xb0, 0x00, 0x16, 0xb0, 0x3a, 0x2b, 0xb0, 0x40, 0x2b, 0x2d, 0xb0, 0x69, 0x2c, 0xb0, 0x3b, // ,....:+.@+-.i,.; + 0x2b, 0x2e, 0xb1, 0x2e, 0x01, 0x14, 0x2b, 0x2d, 0xb0, 0x6a, 0x2c, 0xb0, 0x3b, 0x2b, 0xb0, 0x3e, // +.....+-.j,.;+.> + 0x2b, 0x2d, 0xb0, 0x6b, 0x2c, 0xb0, 0x3b, 0x2b, 0xb0, 0x3f, 0x2b, 0x2d, 0xb0, 0x6c, 0x2c, 0xb0, // +-.k,.;+.?+-.l,. + 0x3b, 0x2b, 0xb0, 0x40, 0x2b, 0x2d, 0xb0, 0x6d, 0x2c, 0xb0, 0x3c, 0x2b, 0x2e, 0xb1, 0x2e, 0x01, // ;+.@+-.m,.<+.... + 0x14, 0x2b, 0x2d, 0xb0, 0x6e, 0x2c, 0xb0, 0x3c, 0x2b, 0xb0, 0x3e, 0x2b, 0x2d, 0xb0, 0x6f, 0x2c, // .+-.n,.<+.>+-.o, + 0xb0, 0x3c, 0x2b, 0xb0, 0x3f, 0x2b, 0x2d, 0xb0, 0x70, 0x2c, 0xb0, 0x3c, 0x2b, 0xb0, 0x40, 0x2b, // .<+.?+-.p,.<+.@+ + 0x2d, 0xb0, 0x71, 0x2c, 0xb0, 0x3d, 0x2b, 0x2e, 0xb1, 0x2e, 0x01, 0x14, 0x2b, 0x2d, 0xb0, 0x72, // -.q,.=+.....+-.r + 0x2c, 0xb0, 0x3d, 0x2b, 0xb0, 0x3e, 0x2b, 0x2d, 0xb0, 0x73, 0x2c, 0xb0, 0x3d, 0x2b, 0xb0, 0x3f, // ,.=+.>+-.s,.=+.? + 0x2b, 0x2d, 0xb0, 0x74, 0x2c, 0xb0, 0x3d, 0x2b, 0xb0, 0x40, 0x2b, 0x2d, 0xb0, 0x75, 0x2c, 0xb3, // +-.t,.=+.@+-.u,. + 0x09, 0x04, 0x02, 0x03, 0x45, 0x58, 0x21, 0x1b, 0x23, 0x21, 0x59, 0x42, 0x2b, 0xb0, 0x08, 0x65, // ....EX!.#!YB+..e + 0xb0, 0x03, 0x24, 0x50, 0x78, 0xb1, 0x05, 0x01, 0x15, 0x45, 0x58, 0x30, 0x59, 0x2d, 0x00, 0x00, // ..$Px....EX0Y-.. + 0x00, 0x4b, 0xb0, 0xc8, 0x52, 0x58, 0xb1, 0x01, 0x01, 0x8e, 0x59, 0xba, 0x00, 0x01, 0x08, 0x00, // .K..RX....Y..... + 0x08, 0x00, 0x63, 0x70, 0xb1, 0x00, 0x06, 0x42, 0xb5, 0x00, 0x47, 0x33, 0x1f, 0x04, 0x00, 0x2a, // ..cp...B..G3...* + 0xb1, 0x00, 0x06, 0x42, 0x40, 0x0a, 0x4d, 0x01, 0x3a, 0x08, 0x26, 0x08, 0x14, 0x07, 0x04, 0x08, // ...B@.M.:.&..... + 0x2a, 0xb1, 0x00, 0x06, 0x42, 0x40, 0x0a, 0x4e, 0x00, 0x44, 0x06, 0x30, 0x06, 0x1d, 0x05, 0x04, // *...B@.N.D.0.... + 0x08, 0x2a, 0xb1, 0x00, 0x0a, 0x42, 0xbb, 0x13, 0x80, 0x0e, 0xc0, 0x09, 0xc0, 0x05, 0x40, 0xb1, // .*...B........@. + 0x04, 0x09, 0x2a, 0xb1, 0x00, 0x0e, 0x42, 0xb5, 0x00, 0x40, 0x40, 0x40, 0x04, 0x09, 0x2a, 0xb1, // ..*...B..@@@..*. + 0x03, 0x00, 0x44, 0xb1, 0x24, 0x01, 0x88, 0x51, 0x58, 0xb0, 0x40, 0x88, 0x58, 0xb1, 0x03, 0x64, // ..D.$..QX.@.X..d + 0x44, 0xb1, 0x26, 0x01, 0x88, 0x51, 0x58, 0xba, 0x08, 0x80, 0x00, 0x01, 0x04, 0x40, 0x88, 0x63, // D.&..QX......@.c + 0x54, 0x58, 0xb1, 0x03, 0x00, 0x44, 0x59, 0x59, 0x59, 0x59, 0x40, 0x0a, 0x4e, 0x00, 0x3c, 0x08, // TX...DYYYY@.N.<. + 0x28, 0x08, 0x16, 0x07, 0x04, 0x0c, 0x2a, 0xb8, 0x01, 0xff, 0x85, 0xb0, 0x04, 0x8d, 0xb1, 0x02, // (.....*......... + 0x00, 0x44, 0xb1, 0x05, 0x64, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .D..dD.......... + 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, 0xb9, 0x00, 0xb9, // ................ + 0x00, 0x97, 0x00, 0x97, 0x05, 0xb0, 0x00, 0x00, 0x04, 0x3a, 0x00, 0x00, 0xfe, 0x60, 0x08, 0x62, // .........:...`.b + 0xfd, 0xd5, 0x05, 0xc4, 0xff, 0xec, 0x04, 0x4e, 0xff, 0xec, 0xfe, 0x4b, 0x08, 0x62, 0xfd, 0xd5, // .......N...K.b.. + 0x00, 0xb9, 0x00, 0xb9, 0x00, 0x97, 0x00, 0x97, 0x05, 0xb0, 0x00, 0x00, 0x05, 0xb0, 0x04, 0x3a, // ...............: + 0xff, 0xec, 0xfe, 0x60, 0x08, 0x62, 0xfd, 0xd5, 0x05, 0xc4, 0xff, 0xec, 0x05, 0xc5, 0x04, 0x4e, // ...`.b.........N + 0xff, 0xec, 0xfe, 0x60, 0x08, 0x62, 0xfd, 0xd5, 0x00, 0xb9, 0x00, 0xb9, 0x00, 0x97, 0x00, 0x97, // ...`.b.......... + 0x05, 0xb0, 0x00, 0x00, 0x05, 0xe1, 0x04, 0x3a, 0x00, 0x00, 0xfe, 0x60, 0x08, 0x62, 0xfd, 0xd5, // .......:...`.b.. + 0x05, 0xc4, 0xff, 0xec, 0x05, 0xe1, 0x04, 0x4e, 0xff, 0xec, 0xfe, 0x4b, 0x08, 0x62, 0xfd, 0xd5, // .......N...K.b.. + 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, // .2.2...........5 + 0x00, 0xa7, 0x01, 0x1d, 0x01, 0xb9, 0x02, 0x63, 0x02, 0x8a, 0x02, 0xba, 0x02, 0xea, 0x03, 0x1a, // .......c........ + 0x03, 0x45, 0x03, 0x64, 0x03, 0x7e, 0x03, 0xa8, 0x03, 0xbf, 0x04, 0x11, 0x04, 0x2c, 0x04, 0x7a, // .E.d.~.......,.z + 0x04, 0xf0, 0x05, 0x24, 0x05, 0x81, 0x05, 0xf1, 0x06, 0x14, 0x06, 0x9a, 0x07, 0x0e, 0x07, 0x20, // ...$........... + 0x07, 0x33, 0x07, 0x4d, 0x07, 0x72, 0x07, 0x8b, 0x08, 0x36, 0x09, 0x0b, 0x09, 0x3a, 0x09, 0xa4, // .3.M.r...6...:.. + 0x0a, 0x05, 0x0a, 0x48, 0x0a, 0x76, 0x0a, 0x9e, 0x0b, 0x06, 0x0b, 0x2e, 0x0b, 0x58, 0x0b, 0x8f, // ...H.v.......X.. + 0x0b, 0xbb, 0x0b, 0xd7, 0x0c, 0x0f, 0x0c, 0x35, 0x0c, 0x95, 0x0c, 0xd9, 0x0d, 0x44, 0x0d, 0x8e, // .......5.....D.. + 0x0d, 0xfe, 0x0e, 0x1f, 0x0e, 0x5b, 0x0e, 0x7a, 0x0e, 0xa7, 0x0e, 0xd6, 0x0e, 0xfc, 0x0f, 0x27, // .....[.z.......' + 0x0f, 0x4b, 0x0f, 0x62, 0x0f, 0x86, 0x0f, 0xaa, 0x0f, 0xc3, 0x10, 0x3e, 0x10, 0xb5, 0x11, 0x46, // .K.b.......>...F + 0x11, 0xa0, 0x12, 0x23, 0x12, 0x83, 0x12, 0xc8, 0x13, 0x68, 0x13, 0xb2, 0x13, 0xef, 0x14, 0x41, // ...#.....h.....A + 0x14, 0x80, 0x14, 0xb5, 0x15, 0x25, 0x15, 0x73, 0x15, 0xc0, 0x16, 0x2d, 0x16, 0xa7, 0x16, 0xfe, // .....%.s...-.... + 0x17, 0x69, 0x17, 0xb7, 0x17, 0xff, 0x18, 0x24, 0x18, 0x5a, 0x18, 0x89, 0x18, 0xcc, 0x18, 0xf6, // .i.....$.Z...... + 0x19, 0x4d, 0x19, 0x64, 0x19, 0xba, 0x1a, 0x0a, 0x1a, 0x45, 0x1a, 0xae, 0x1b, 0x0d, 0x1b, 0x92, // .M.d.....E...... + 0x1b, 0xd6, 0x1b, 0xfc, 0x1c, 0x9d, 0x1c, 0xcf, 0x1d, 0x5f, 0x1e, 0x00, 0x1e, 0x17, 0x1e, 0x46, // ........._.....F + 0x1e, 0xc8, 0x1e, 0xdf, 0x1f, 0x29, 0x1f, 0x5e, 0x1f, 0xda, 0x20, 0x58, 0x20, 0xd3, 0x21, 0x28, // .....).^.. X .!( + 0x21, 0x52, 0x21, 0x75, 0x21, 0xac, 0x21, 0xc7, 0x22, 0x13, 0x22, 0x20, 0x22, 0x3b, 0x22, 0x56, // !R!u!.!."." ";"V + 0x22, 0x71, 0x22, 0xed, 0x23, 0x32, 0x23, 0x57, 0x23, 0xdb, 0x24, 0x25, 0x24, 0xa7, 0x25, 0x55, // "q".#2#W#.$%$.%U + 0x25, 0xc8, 0x26, 0x0c, 0x26, 0x7d, 0x26, 0xd6, 0x27, 0x1a, 0x27, 0x40, 0x27, 0x8f, 0x28, 0x0c, // %.&.&}&.'.'@'.(. + 0x28, 0x38, 0x28, 0x67, 0x28, 0xb1, 0x28, 0xfa, 0x29, 0x65, 0x2a, 0x15, 0x2a, 0xa5, 0x2a, 0xda, // (8(g(.(.)e*.*.*. + 0x2b, 0x37, 0x2b, 0xbc, 0x2c, 0x1c, 0x2c, 0x6d, 0x2c, 0xcc, 0x2d, 0x08, 0x2d, 0x6b, 0x2d, 0x8d, // +7+.,.,m,.-.-k-. + 0x2d, 0xae, 0x2d, 0xe0, 0x2e, 0x00, 0x2e, 0x43, 0x2e, 0x79, 0x2e, 0xd0, 0x2e, 0xf1, 0x2f, 0x41, // -.-....C.y..../A + 0x2f, 0x57, 0x2f, 0x6d, 0x2f, 0x76, 0x2f, 0xaf, 0x2f, 0xd0, 0x2f, 0xf2, 0x30, 0x0c, 0x30, 0x4a, // /W/m/v/././.0.0J + 0x30, 0x52, 0x30, 0x6f, 0x30, 0x94, 0x31, 0x00, 0x31, 0x1f, 0x31, 0x4e, 0x31, 0x6e, 0x31, 0xa3, // 0R0o0.1.1.1N1n1. + 0x31, 0xfb, 0x32, 0x3c, 0x32, 0x95, 0x33, 0x48, 0x33, 0xdb, 0x34, 0x04, 0x34, 0x82, 0x34, 0xfb, // 1.2<2.3H3.4.4.4. + 0x35, 0x4f, 0x35, 0x9f, 0x36, 0x04, 0x36, 0x3e, 0x37, 0x51, 0x37, 0xc6, 0x38, 0x28, 0x38, 0x82, // 5O5.6.6>7Q7.8(8. + 0x38, 0xde, 0x39, 0x30, 0x39, 0x70, 0x39, 0xb1, 0x3a, 0x13, 0x3a, 0x5e, 0x3a, 0xc1, 0x3b, 0x59, // 8.909p9.:.:^:.;Y + 0x3b, 0xd5, 0x3c, 0x3d, 0x3c, 0xd8, 0x3d, 0x3c, 0x3d, 0x9a, 0x3e, 0x00, 0x3e, 0x44, 0x3e, 0x6e, // ;.<=<.=<=.>.>D>n + 0x3e, 0xb7, 0x3e, 0xf9, 0x3f, 0x3a, 0x3f, 0xb1, 0x3f, 0xd7, 0x40, 0x0b, 0x40, 0x4d, 0x40, 0x77, // >.>.?:?.?.@.@M@w + 0x40, 0xb8, 0x40, 0xe3, 0x41, 0x19, 0x41, 0x60, 0x41, 0xaa, 0x41, 0xeb, 0x42, 0x4f, 0x42, 0xc4, // @.@.A.A`A.A.BOB. + 0x43, 0x0e, 0x43, 0x87, 0x43, 0xe1, 0x43, 0xfe, 0x44, 0x46, 0x44, 0x88, 0x45, 0x00, 0x45, 0x25, // C.C.C.C.DFD.E.E% + 0x45, 0x54, 0x45, 0x8b, 0x45, 0xb5, 0x45, 0xdd, 0x45, 0xfd, 0x46, 0x1e, 0x46, 0x7b, 0x46, 0xa5, // ETE.E.E.E.F.F{F. + 0x46, 0xdd, 0x47, 0x08, 0x47, 0x3e, 0x47, 0x85, 0x47, 0xcf, 0x48, 0x10, 0x48, 0x74, 0x48, 0xea, // F.G.G>G.G.H.HtH. + 0x49, 0x35, 0x49, 0x9e, 0x4a, 0x02, 0x4a, 0x60, 0x4a, 0xaf, 0x4a, 0xf9, 0x4b, 0x27, 0x4b, 0x77, // I5I.J.J`J.J.K'Kw + 0x4b, 0xc5, 0x4c, 0x19, 0x4c, 0xc9, 0x4d, 0x57, 0x4d, 0x8c, 0x4d, 0xc4, 0x4e, 0x08, 0x4e, 0x4c, // K.L.L.MWM.M.N.NL + 0x4e, 0xa7, 0x4f, 0x01, 0x4f, 0x5d, 0x4f, 0xb8, 0x50, 0x45, 0x50, 0xd0, 0x51, 0x43, 0x51, 0xa1, // N.O.O]O.PEP.QCQ. + 0x51, 0xe8, 0x52, 0x3d, 0x52, 0xc6, 0x53, 0x65, 0x54, 0x18, 0x54, 0xee, 0x55, 0x9d, 0x56, 0x6e, // Q.R=R.SeT.T.U.Vn + 0x56, 0xed, 0x57, 0x6d, 0x57, 0xcb, 0x58, 0x29, 0x58, 0x68, 0x58, 0xc1, 0x59, 0x0c, 0x59, 0x25, // V.WmW.X)XhX.Y.Y% + 0x59, 0x3d, 0x5a, 0xc5, 0x5b, 0x52, 0x5b, 0xa4, 0x5c, 0x1c, 0x5c, 0x3f, 0x5c, 0x62, 0x5c, 0xa4, // Y=Z.[R[....?.b.. + 0x5c, 0xe8, 0x5d, 0x2c, 0x5d, 0x6e, 0x5d, 0xa3, 0x5d, 0xd8, 0x5e, 0x07, 0x5e, 0x36, 0x5e, 0x7c, // ..],]n].].^.^6^| + 0x5e, 0xc6, 0x5f, 0x46, 0x5f, 0xc0, 0x5f, 0xf7, 0x60, 0x2a, 0x60, 0x93, 0x61, 0x09, 0x61, 0x49, // ^._F_._.`*`.a.aI + 0x61, 0xbe, 0x62, 0x32, 0x62, 0x75, 0x62, 0xb9, 0x63, 0x03, 0x63, 0x4d, 0x63, 0xb3, 0x64, 0x07, // a.b2bub.c.cMc.d. + 0x64, 0x72, 0x64, 0x86, 0x64, 0x9c, 0x64, 0xe2, 0x65, 0x58, 0x65, 0xd8, 0x66, 0x47, 0x66, 0xad, // drd.d.d.eXe.fGf. + 0x67, 0x1c, 0x67, 0x85, 0x67, 0xf8, 0x68, 0x71, 0x68, 0xde, 0x69, 0x47, 0x69, 0xa8, 0x6a, 0x05, // g.g.g.hqh.iGi.j. + 0x6a, 0x50, 0x6a, 0x9a, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, // jPj.k.k.k.k.k.k. + 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x16, 0x6b, 0x21, // k.k.k.k.k.k.k.k! + 0x6b, 0x2c, 0x6b, 0x3e, 0x6b, 0x5e, 0x6b, 0x7e, 0x6b, 0x9d, 0x6b, 0xa8, 0x6b, 0xb5, 0x6b, 0xc2, // k,k>k^k~k.k.k.k. + 0x6b, 0xf4, 0x6c, 0x1e, 0x6c, 0x5b, 0x6c, 0x8a, 0x6c, 0x97, 0x6c, 0xa8, 0x6d, 0x7b, 0x6d, 0x9e, // k.l.l[l.l.l.m{m. + 0x6d, 0xc7, 0x6d, 0xd9, 0x6e, 0x0d, 0x6e, 0x68, 0x6e, 0xd7, 0x6f, 0x74, 0x6f, 0xe1, 0x70, 0x64, // m.m.n.nhn.oto.pd + 0x70, 0xae, 0x71, 0x0a, 0x71, 0x35, 0x71, 0x76, 0x71, 0x8e, 0x71, 0xaa, 0x71, 0xc5, 0x71, 0xdd, // p.q.q5qvq.q.q.q. + 0x72, 0x36, 0x72, 0x4c, 0x72, 0x6d, 0x72, 0x87, 0x72, 0xa3, 0x73, 0x23, 0x73, 0x58, 0x73, 0xc0, // r6rLrmr.r.s#sXs. + 0x73, 0xe7, 0x73, 0xff, 0x74, 0x17, 0x74, 0x3e, 0x74, 0x58, 0x74, 0x58, 0x75, 0x3e, 0x75, 0x98, // s.s.t.t>tXtXu>u. + 0x75, 0xdc, 0x76, 0x22, 0x76, 0x60, 0x76, 0x91, 0x76, 0xae, 0x76, 0xcc, 0x76, 0xf9, 0x77, 0x14, // u.v"v`v.v.v.v.w. + 0x77, 0x43, 0x77, 0xad, 0x78, 0x02, 0x78, 0x44, 0x78, 0x71, 0x78, 0x98, 0x78, 0xf5, 0x79, 0x1d, // wCw.x.xDxqx.x.y. + 0x79, 0x46, 0x79, 0x7c, 0x79, 0xa8, 0x79, 0xc4, 0x79, 0xf2, 0x7a, 0x18, 0x7a, 0x67, 0x7a, 0xc3, // yFy|y.y.y.z.zgz. + 0x7b, 0x0b, 0x7b, 0x82, 0x7b, 0xa2, 0x7b, 0xde, 0x7c, 0x03, 0x7c, 0x30, 0x7c, 0x5f, 0x7c, 0x84, // {.{.{.{.|.|0|_|. + 0x7c, 0xae, 0x7c, 0xec, 0x7d, 0x00, 0x7d, 0x3c, 0x7d, 0x97, 0x7d, 0xba, 0x7d, 0xfb, 0x7e, 0x4b, // |.|.}.}<}.}.}.~K + 0x7e, 0x62, 0x7e, 0xd5, 0x7f, 0x24, 0x7f, 0x5c, 0x7f, 0x70, 0x7f, 0x9b, 0x7f, 0xe1, 0x80, 0x14, // ~b~..$...p...... + 0x80, 0x54, 0x80, 0x99, 0x80, 0xb0, 0x81, 0x55, 0x81, 0x9a, 0x81, 0xab, 0x81, 0xe7, 0x82, 0x09, // .T.....U........ + 0x82, 0x52, 0x82, 0x6b, 0x82, 0x97, 0x82, 0xc9, 0x83, 0x5c, 0x83, 0x82, 0x83, 0xa7, 0x83, 0xcf, // .R.k............ + 0x83, 0xd7, 0x83, 0xdf, 0x84, 0x22, 0x84, 0x6d, 0x84, 0xb4, 0x84, 0xe3, 0x85, 0x21, 0x85, 0x50, // .....".m.....!.P + 0x85, 0x6a, 0x85, 0xe1, 0x86, 0x3f, 0x86, 0x8a, 0x87, 0x00, 0x87, 0x08, 0x87, 0x10, 0x87, 0x18, // .j...?.......... + 0x87, 0x69, 0x87, 0xba, 0x88, 0x1a, 0x88, 0x4b, 0x88, 0xa8, 0x88, 0xba, 0x88, 0xcc, 0x88, 0xde, // .i.....K........ + 0x88, 0xf0, 0x89, 0x02, 0x89, 0x14, 0x89, 0x26, 0x89, 0x31, 0x89, 0x43, 0x89, 0x55, 0x89, 0x67, // .......&.1.C.U.g + 0x89, 0x79, 0x89, 0x8b, 0x89, 0x9d, 0x89, 0xaf, 0x89, 0xc1, 0x89, 0xd3, 0x89, 0xe5, 0x89, 0xf7, // .y.............. + 0x8a, 0x09, 0x8a, 0x1b, 0x8a, 0x2d, 0x8a, 0x3f, 0x8a, 0x51, 0x8a, 0x63, 0x8a, 0x75, 0x8a, 0x87, // .....-.?.Q.c.u.. + 0x8a, 0x96, 0x8a, 0xa6, 0x8a, 0xb6, 0x8a, 0xc6, 0x8a, 0xd5, 0x8a, 0xe4, 0x8a, 0xf3, 0x8a, 0xfe, // ................ + 0x8b, 0x0d, 0x8b, 0x1c, 0x8b, 0x2b, 0x8b, 0x3a, 0x8b, 0x49, 0x8b, 0x55, 0x8b, 0x65, 0x8b, 0x74, // .....+.:.I.U.e.t + 0x8b, 0x83, 0x8b, 0x92, 0x8b, 0xa1, 0x8b, 0xb0, 0x8b, 0xc0, 0x8b, 0xcf, 0x8b, 0xde, 0x8b, 0xed, // ................ + 0x8b, 0xfc, 0x8c, 0x0b, 0x8c, 0x1b, 0x8c, 0x2a, 0x8c, 0x3c, 0x8c, 0x4b, 0x8c, 0x5d, 0x8c, 0x6c, // .......*.<.K.].l + 0x8c, 0xc4, 0x8d, 0x60, 0x8d, 0x72, 0x8d, 0x82, 0x8d, 0x94, 0x8d, 0xa4, 0x8d, 0xb6, 0x8d, 0xc5, // ...`.r.......... + 0x8d, 0xd7, 0x8d, 0xe6, 0x8d, 0xf8, 0x8e, 0x0a, 0x8e, 0x1c, 0x8e, 0x2b, 0x8e, 0x3d, 0x8e, 0x4c, // ...........+.=.L + 0x8e, 0x5e, 0x8e, 0x6d, 0x8e, 0xc3, 0x8f, 0x43, 0x8f, 0x55, 0x8f, 0x64, 0x8f, 0x76, 0x8f, 0x85, // .^.m...C.U.d.v.. + 0x8f, 0x97, 0x8f, 0xa6, 0x8f, 0xb8, 0x8f, 0xc7, 0x8f, 0xd9, 0x8f, 0xe8, 0x8f, 0xfa, 0x90, 0x0c, // ................ + 0x90, 0x1e, 0x90, 0x2e, 0x90, 0x40, 0x90, 0x51, 0x90, 0x63, 0x90, 0x72, 0x90, 0xc5, 0x91, 0x2b, // .....@.Q.c.r...+ + 0x91, 0x3d, 0x91, 0x4f, 0x91, 0x61, 0x91, 0x73, 0x91, 0x85, 0x91, 0x97, 0x91, 0xa9, 0x91, 0xbb, // .=.O.a.s........ + 0x91, 0xcd, 0x91, 0xdf, 0x91, 0xf1, 0x92, 0x03, 0x92, 0x15, 0x92, 0x27, 0x92, 0x36, 0x92, 0x48, // ...........'.6.H + 0x92, 0x5a, 0x92, 0x6c, 0x92, 0x7b, 0x92, 0x87, 0x92, 0x99, 0x92, 0xa8, 0x92, 0xba, 0x92, 0xc9, // .Z.l.{.......... + 0x92, 0xdb, 0x92, 0xeb, 0x92, 0xfd, 0x93, 0x0c, 0x93, 0x1e, 0x93, 0x30, 0x93, 0x42, 0x93, 0x51, // ...........0.B.Q + 0x93, 0x63, 0x93, 0x73, 0x93, 0x85, 0x93, 0x95, 0x93, 0xa6, 0x93, 0xb7, 0x93, 0xc9, 0x93, 0xdb, // .c.s............ + 0x93, 0xed, 0x93, 0xfc, 0x94, 0x0e, 0x94, 0x20, 0x94, 0x2b, 0x94, 0x3a, 0x94, 0x46, 0x94, 0x58, // ....... .+.:.F.X + 0x94, 0x68, 0x94, 0x7a, 0x94, 0x8a, 0x94, 0x9c, 0x94, 0xad, 0x94, 0xbf, 0x94, 0xce, 0x94, 0xe0, // .h.z............ + 0x94, 0xef, 0x95, 0x01, 0x95, 0x11, 0x95, 0x87, 0x95, 0xe6, 0x95, 0xf8, 0x96, 0x07, 0x96, 0x19, // ................ + 0x96, 0x29, 0x96, 0x3b, 0x96, 0x4d, 0x96, 0x5d, 0x96, 0x6f, 0x96, 0x7e, 0x96, 0x90, 0x96, 0x9f, // .).;.M.].o.~.... + 0x96, 0xb1, 0x96, 0xc1, 0x96, 0xd3, 0x96, 0xe2, 0x96, 0xf4, 0x97, 0x06, 0x97, 0x17, 0x97, 0x26, // ...............& + 0x97, 0x35, 0x97, 0x44, 0x97, 0x54, 0x97, 0x63, 0x97, 0x73, 0x97, 0x83, 0x97, 0x94, 0x97, 0xa4, // .5.D.T.c.s...... + 0x97, 0xb3, 0x97, 0xc2, 0x97, 0xd1, 0x97, 0xe0, 0x97, 0xf0, 0x98, 0x00, 0x98, 0x0f, 0x98, 0x1f, // ................ + 0x98, 0x2e, 0x98, 0x3e, 0x98, 0x4e, 0x98, 0x5e, 0x98, 0x6d, 0x98, 0x7c, 0x98, 0x8c, 0x98, 0x9c, // ...>.N.^.m.|.... + 0x98, 0xab, 0x98, 0xba, 0x98, 0xc9, 0x98, 0xd8, 0x99, 0x32, 0x99, 0x41, 0x99, 0x50, 0x99, 0x5f, // .........2.A.P._ + 0x99, 0x6e, 0x99, 0x7d, 0x99, 0x8c, 0x99, 0x9b, 0x99, 0xaa, 0x99, 0xff, 0x9a, 0x0e, 0x9a, 0x1d, // .n.}............ + 0x9a, 0x2c, 0x9a, 0x3b, 0x9a, 0x4d, 0x9a, 0x5d, 0x9a, 0x6d, 0x9a, 0x7c, 0x9a, 0x8b, 0x9a, 0xdd, // .,.;.M.].m.|.... + 0x9a, 0xec, 0x9a, 0xfc, 0x9b, 0x0e, 0x9b, 0x1e, 0x9b, 0x30, 0x9b, 0x42, 0x9b, 0x54, 0x9b, 0x64, // .........0.B.T.d + 0x9b, 0x76, 0x9b, 0x85, 0x9b, 0x94, 0x9b, 0xa3, 0x9b, 0xb3, 0x9b, 0xc2, 0x9b, 0xd4, 0x9b, 0xe3, // .v.............. + 0x9b, 0xf2, 0x9c, 0x01, 0x9c, 0x0c, 0x9c, 0x1b, 0x9c, 0x2d, 0x9c, 0x3c, 0x9c, 0x4c, 0x9c, 0x5b, // .........-.<.L.[ + 0x9c, 0x6a, 0x9c, 0x7a, 0x9c, 0x8a, 0x9d, 0x01, 0x9d, 0x11, 0x9d, 0x20, 0x9d, 0x2f, 0x9d, 0x3f, // .j.z....... ./.? + 0x9d, 0x4e, 0x9d, 0x5d, 0x9d, 0x69, 0x9d, 0x75, 0x9d, 0x85, 0x9d, 0x95, 0x9d, 0xa1, 0x9d, 0xad, // .N.].i.u........ + 0x9d, 0xb9, 0x9d, 0xca, 0x9d, 0xd2, 0x9d, 0xda, 0x9d, 0xe2, 0x9d, 0xea, 0x9d, 0xf2, 0x9d, 0xfa, // ................ + 0x9e, 0x02, 0x9e, 0x0a, 0x9e, 0x12, 0x9e, 0x1a, 0x9e, 0x22, 0x9e, 0x2a, 0x9e, 0x32, 0x9e, 0x3a, // .........".*.2.: + 0x9e, 0x4c, 0x9e, 0x5e, 0x9e, 0x6d, 0x9e, 0x7c, 0x9e, 0x8b, 0x9e, 0x9c, 0x9e, 0xad, 0x9e, 0xb5, // .L.^.m.|........ + 0x9e, 0xbd, 0x9e, 0xc5, 0x9e, 0xcd, 0x9e, 0xd5, 0x9e, 0xe4, 0x9e, 0xf3, 0x9f, 0x02, 0x9f, 0x13, // ................ + 0x9f, 0x24, 0x9f, 0x36, 0x9f, 0x48, 0x9f, 0xb8, 0x9f, 0xc0, 0x9f, 0xd2, 0x9f, 0xda, 0x9f, 0xe2, // .$.6.H.......... + 0x9f, 0xf4, 0xa0, 0x06, 0xa0, 0x0e, 0xa0, 0x16, 0xa0, 0x1e, 0xa0, 0x26, 0xa0, 0x38, 0xa0, 0x40, // ...........&.8.@ + 0xa0, 0x48, 0xa0, 0x50, 0xa0, 0x58, 0xa0, 0x60, 0xa0, 0x68, 0xa0, 0x70, 0xa0, 0x78, 0xa0, 0x80, // .H.P.X.`.h.p.x.. + 0xa0, 0x88, 0xa0, 0x90, 0xa0, 0x9f, 0xa0, 0xa7, 0xa0, 0xaf, 0xa1, 0x09, 0xa1, 0x11, 0xa1, 0x19, // ................ + 0xa1, 0x28, 0xa1, 0x33, 0xa1, 0x3b, 0xa1, 0x43, 0xa1, 0x52, 0xa1, 0x5a, 0xa1, 0x65, 0xa1, 0x74, // .(.3.;.C.R.Z.e.t + 0xa1, 0x86, 0xa1, 0x95, 0xa1, 0xa7, 0xa1, 0xb6, 0xa1, 0xc8, 0xa1, 0xd7, 0xa1, 0xe9, 0xa1, 0xf8, // ................ + 0xa2, 0x00, 0xa2, 0x08, 0xa2, 0x14, 0xa2, 0x25, 0xa2, 0x2d, 0xa2, 0x3f, 0xa2, 0x4f, 0xa2, 0x5a, // .......%.-.?.O.Z + 0xa2, 0x65, 0xa2, 0x75, 0xa2, 0x87, 0xa2, 0x99, 0xa2, 0xa8, 0xa2, 0xb8, 0xa2, 0xc0, 0xa2, 0xc8, // .e.u............ + 0xa2, 0xda, 0xa2, 0xea, 0xa2, 0xfb, 0xa3, 0x0c, 0xa3, 0x1d, 0xa3, 0x2e, 0xa3, 0x36, 0xa3, 0x3e, // .............6.> + 0xa3, 0x46, 0xa3, 0x58, 0xa3, 0x67, 0xa3, 0x6f, 0xa3, 0x81, 0xa3, 0x90, 0xa3, 0xa2, 0xa3, 0xb1, // .F.X.g.o........ + 0xa3, 0xb9, 0xa3, 0xc1, 0xa3, 0xd3, 0xa3, 0xe2, 0xa3, 0xf4, 0xa3, 0xfc, 0xa4, 0x0b, 0xa4, 0x1d, // ................ + 0xa4, 0x2c, 0xa4, 0x3e, 0xa4, 0x4d, 0xa4, 0x5f, 0xa4, 0x70, 0xa4, 0x82, 0xa4, 0x91, 0xa4, 0xa3, // .,.>.M._.p...... + 0xa4, 0xb2, 0xa4, 0xba, 0xa4, 0xc2, 0xa4, 0xd4, 0xa4, 0xe3, 0xa4, 0xf5, 0xa5, 0x04, 0xa5, 0x16, // ................ + 0xa5, 0x27, 0xa5, 0x39, 0xa5, 0x48, 0xa5, 0x5a, 0xa5, 0x6a, 0xa5, 0x7c, 0xa5, 0x8b, 0xa5, 0x9d, // .'.9.H.Z.j.|.... + 0xa5, 0xac, 0xa5, 0xb8, 0xa5, 0xc4, 0xa5, 0xcc, 0xa5, 0xd8, 0xa5, 0xe4, 0xa5, 0xf0, 0xa5, 0xfc, // ................ + 0xa6, 0x0e, 0xa6, 0x1e, 0xa6, 0x30, 0xa6, 0x3f, 0xa6, 0x51, 0xa6, 0x60, 0xa6, 0x72, 0xa6, 0x83, // .....0.?.Q.`.r.. + 0xa6, 0x95, 0xa6, 0xa6, 0xa6, 0xbc, 0xa6, 0xd0, 0xa6, 0xe2, 0xa6, 0xf1, 0xa7, 0x03, 0xa7, 0x12, // ................ + 0xa7, 0x24, 0xa7, 0x33, 0xa7, 0x45, 0xa7, 0x54, 0xa7, 0x6a, 0xa7, 0x7d, 0xa7, 0x8d, 0xa7, 0x99, // .$.3.E.T.j.}.... + 0xa7, 0xab, 0xa7, 0xbb, 0xa7, 0xcd, 0xa7, 0xdd, 0xa7, 0xef, 0xa7, 0xfe, 0xa8, 0x10, 0xa8, 0x1f, // ................ + 0xa8, 0x31, 0xa8, 0x42, 0xa8, 0x54, 0xa8, 0x65, 0xa8, 0x7e, 0xa8, 0x91, 0xa8, 0xa3, 0xa8, 0xb5, // .1.B.T.e.~...... + 0xa8, 0xc5, 0xa8, 0xd5, 0xa8, 0xe7, 0xa8, 0xf9, 0xa9, 0x0b, 0xa9, 0x1b, 0xa9, 0x2d, 0xa9, 0x3c, // .............-.< + 0xa9, 0x4e, 0xa9, 0x5d, 0xa9, 0x6f, 0xa9, 0x80, 0xa9, 0x92, 0xa9, 0xa3, 0xa9, 0xbd, 0xa9, 0xd5, // .N.].o.......... + 0xa9, 0xe7, 0xa9, 0xf6, 0xaa, 0x08, 0xaa, 0x17, 0xaa, 0x29, 0xaa, 0x39, 0xaa, 0x4b, 0xaa, 0x5b, // .........).9.K.[ + 0xaa, 0x67, 0xaa, 0x79, 0xaa, 0x85, 0xaa, 0x91, 0xaa, 0xa3, 0xaa, 0xb5, 0xaa, 0xc7, 0xaa, 0xd2, // .g.y............ + 0xaa, 0xe4, 0xaa, 0xf3, 0xab, 0x05, 0xab, 0x17, 0xab, 0x29, 0xab, 0x39, 0xab, 0x4b, 0xab, 0x57, // .........).9.K.W + 0xab, 0x67, 0xab, 0x79, 0xab, 0x8b, 0xab, 0x9d, 0xab, 0xaf, 0xab, 0xbf, 0xac, 0x5d, 0xac, 0x76, // .g.y.........].v + 0xac, 0x86, 0xac, 0x92, 0xac, 0x9e, 0xac, 0xaa, 0xac, 0xb6, 0xac, 0xc2, 0xac, 0xce, 0xac, 0xda, // ................ + 0xac, 0xe6, 0xac, 0xf2, 0xac, 0xfe, 0xad, 0x0a, 0xad, 0x16, 0xad, 0x22, 0xad, 0x2e, 0xad, 0x3a, // ..........."...: + 0xad, 0x4c, 0xad, 0x5e, 0xad, 0x66, 0xad, 0xb8, 0xae, 0x09, 0xae, 0x5a, 0xae, 0x88, 0xae, 0xb6, // .L.^.f.....Z.... + 0xae, 0xf6, 0xaf, 0x36, 0xaf, 0x50, 0xaf, 0x68, 0xaf, 0x7a, 0xaf, 0x8c, 0xaf, 0x9e, 0xaf, 0xb0, // ...6.P.h.z...... + 0xaf, 0xc2, 0xaf, 0xd4, 0xb0, 0x08, 0xb0, 0x3f, 0xb0, 0x7d, 0xb0, 0xbb, 0xb0, 0xc3, 0xb0, 0xd5, // .......?.}...... + 0xb0, 0xe0, 0xb0, 0xe0, 0xb0, 0xe0, 0xb1, 0x3a, 0x00, 0x02, 0x01, 0x62, 0x04, 0x21, 0x03, 0x5f, // .......:...b.!._ + 0x06, 0x00, 0x00, 0x05, 0x00, 0x0b, 0x00, 0x34, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, 0x0d, 0x02, // .......4K.!PX@.. + 0x01, 0x00, 0x00, 0x01, 0x59, 0x03, 0x01, 0x01, 0x01, 0x3e, 0x00, 0x4c, 0x1b, 0x40, 0x13, 0x03, // ....Y....>.L.@.. + 0x01, 0x01, 0x00, 0x00, 0x01, 0x55, 0x03, 0x01, 0x01, 0x01, 0x00, 0x59, 0x02, 0x01, 0x00, 0x01, // .....U.....Y.... + 0x00, 0x4d, 0x59, 0xb6, 0x12, 0x12, 0x12, 0x11, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x03, 0x23, 0x13, // .MY........+..#. + 0x35, 0x33, 0x05, 0x03, 0x23, 0x13, 0x35, 0x33, 0x01, 0xf9, 0x15, 0x82, 0x01, 0x96, 0x01, 0x65, // 53..#.53.......e + 0x15, 0x81, 0x01, 0x96, 0x05, 0x93, 0xfe, 0x8e, 0x01, 0x62, 0x7d, 0x6d, 0xfe, 0x8e, 0x01, 0x62, // .........b}m...b + 0x7d, 0x00, 0x00, 0x02, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x99, 0x05, 0xb0, 0x00, 0x1b, 0x00, 0x1f, // }....=.......... + 0x00, 0x74, 0x4b, 0xb0, 0x17, 0x50, 0x58, 0x40, 0x27, 0x0e, 0x0b, 0x02, 0x03, 0x0c, 0x02, 0x02, // .tK..PX@'....... + 0x00, 0x01, 0x03, 0x00, 0x61, 0x08, 0x01, 0x06, 0x06, 0x3c, 0x4b, 0x0f, 0x0a, 0x02, 0x04, 0x04, // ....a..... + 0x37, 0x35, 0x33, 0x15, 0x16, 0x16, 0x17, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x14, // 753....#4..#"... + 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x15, 0x23, 0x35, 0x2e, 0x03, 0x35, // ...........#5..5 + 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x03, 0x8b, 0x01, 0x87, 0x93, 0x5d, 0x96, 0x6b, // 3...32>......].k + 0x3a, 0x33, 0x5d, 0x85, 0x51, 0x95, 0xa8, 0xba, 0x01, 0xb8, 0x21, 0x3f, 0x5c, 0x3b, 0x79, 0x7c, // :3].Q.....!?.;y| + 0x01, 0x20, 0x45, 0x6d, 0x4d, 0x5e, 0x96, 0x68, 0x37, 0x37, 0x64, 0x8f, 0x57, 0x95, 0x4e, 0x8f, // . EmM^.h77d.W.N. + 0x6e, 0x42, 0xb9, 0x32, 0x4f, 0x64, 0x33, 0x41, 0x68, 0x48, 0x27, 0x01, 0x77, 0x5b, 0x82, 0x30, // nB.2Od3AhH'.w[.0 + 0x1d, 0x4c, 0x69, 0x88, 0x59, 0x54, 0x88, 0x65, 0x3e, 0x0a, 0xdc, 0xdc, 0x17, 0xed, 0xcc, 0x43, // .Li.YT.e>......C + 0x71, 0x51, 0x2e, 0x7e, 0x6b, 0x32, 0x4e, 0x40, 0x37, 0x1a, 0x1f, 0x4c, 0x66, 0x86, 0x59, 0x57, // qQ.~k2N@7..Lf.YW + 0x8a, 0x63, 0x3c, 0x09, 0xc0, 0xbf, 0x08, 0x38, 0x6b, 0xa2, 0x71, 0x54, 0x6f, 0x42, 0x1c, 0x20, // .c<....8k.qToB. + 0x3d, 0x57, 0x00, 0x05, 0x00, 0x2c, 0xff, 0xeb, 0x04, 0x9e, 0x05, 0xc5, 0x00, 0x15, 0x00, 0x2b, // =W...,.........+ + 0x00, 0x41, 0x00, 0x57, 0x00, 0x5b, 0x00, 0x3e, 0x40, 0x3b, 0x5b, 0x5a, 0x02, 0x02, 0x03, 0x59, // .A.W.[.>@;[Z...Y + 0x01, 0x06, 0x07, 0x02, 0x4a, 0x00, 0x02, 0x00, 0x01, 0x04, 0x02, 0x01, 0x63, 0x00, 0x04, 0x00, // ....J.......c... + 0x07, 0x06, 0x04, 0x07, 0x63, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x44, 0x4b, 0x00, // ....c....[...DK. + 0x06, 0x06, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x45, 0x05, 0x4c, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, // ...[...E.L)))))) + 0x29, 0x24, 0x08, 0x08, 0x1c, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, // )$...+.4>.32.... + 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, // ...#"..53...32>. + 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, // 554..#"....4>.32 + 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, // .......#"..53... + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x05, 0x27, // 32>.554..#"....' + 0x01, 0x17, 0x2c, 0x23, 0x43, 0x64, 0x41, 0x42, 0x65, 0x43, 0x23, 0x23, 0x43, 0x64, 0x41, 0x41, // ..,#CdABeC##CdAA + 0x65, 0x44, 0x23, 0x8a, 0x0e, 0x20, 0x31, 0x24, 0x23, 0x31, 0x1e, 0x0f, 0x0f, 0x1f, 0x31, 0x24, // eD#.. 1$#1....1$ + 0x23, 0x31, 0x1f, 0x0e, 0x01, 0xcf, 0x23, 0x44, 0x64, 0x41, 0x42, 0x64, 0x44, 0x23, 0x23, 0x44, // #1....#DdABdD##D + 0x63, 0x41, 0x42, 0x65, 0x44, 0x23, 0x8a, 0x0f, 0x1f, 0x32, 0x24, 0x23, 0x31, 0x1e, 0x0e, 0x0e, // cABeD#...2$#1... + 0x1f, 0x32, 0x23, 0x24, 0x31, 0x1f, 0x0e, 0xfe, 0x7f, 0x6f, 0x02, 0x37, 0x6f, 0x04, 0xaa, 0x39, // .2#$1....o.7o..9 + 0x67, 0x4e, 0x2d, 0x2d, 0x4e, 0x67, 0x39, 0x4d, 0x39, 0x66, 0x4d, 0x2d, 0x2d, 0x4d, 0x66, 0x39, // gN--Ng9M9fM--Mf9 + 0x1f, 0x39, 0x2d, 0x1b, 0x1b, 0x2d, 0x39, 0x1f, 0x4d, 0x1f, 0x3b, 0x2d, 0x1b, 0x1b, 0x2d, 0x3b, // .9-..-9.M.;-..-; + 0x1f, 0xfc, 0xa8, 0x39, 0x66, 0x4e, 0x2d, 0x2d, 0x4e, 0x66, 0x39, 0x4e, 0x39, 0x66, 0x4d, 0x2d, // ...9fN--Nf9N9fM- + 0x2d, 0x4d, 0x66, 0x39, 0x1f, 0x3a, 0x2d, 0x1b, 0x1b, 0x2d, 0x3a, 0x1f, 0x4e, 0x1f, 0x3a, 0x2d, // -Mf9.:-..-:.N.:- + 0x1b, 0x1b, 0x2d, 0x3a, 0x1f, 0x96, 0x3e, 0x04, 0x0d, 0x3e, 0x00, 0x03, 0x00, 0x6b, 0xff, 0xec, // ..-:..>..>...k.. + 0x04, 0xa9, 0x05, 0xc5, 0x00, 0x2a, 0x00, 0x39, 0x00, 0x4c, 0x00, 0x74, 0x40, 0x13, 0x3d, 0x18, // .....*.9.L.t@.=. + 0x05, 0x03, 0x01, 0x05, 0x2f, 0x2e, 0x20, 0x19, 0x04, 0x04, 0x01, 0x23, 0x01, 0x02, 0x04, 0x03, // ..../. ....#.... + 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x22, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, // JK..PX@"....[... + 0x44, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x3d, 0x4b, 0x06, 0x01, 0x04, // DK....[....=K... + 0x04, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x1b, 0x40, 0x20, 0x00, 0x05, 0x05, // ..[....=.L.@ ... + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x44, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3d, // .[...DK....Y...= + 0x4b, 0x06, 0x01, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x03, 0x4c, 0x59, 0x40, 0x0f, // K.....[...E.LY@. + 0x2c, 0x2b, 0x49, 0x47, 0x2b, 0x39, 0x2c, 0x39, 0x23, 0x14, 0x1e, 0x2c, 0x07, 0x08, 0x18, 0x2b, // ,+IG+9,9#..,...+ + 0x13, 0x34, 0x3e, 0x02, 0x37, 0x26, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // .4>.7&&54>.32... + 0x14, 0x0e, 0x02, 0x07, 0x07, 0x01, 0x36, 0x36, 0x37, 0x33, 0x14, 0x06, 0x07, 0x17, 0x23, 0x27, // ......6673....#' + 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x05, 0x32, 0x36, 0x37, 0x01, 0x07, 0x0e, 0x03, 0x15, 0x14, // ..#"...267...... + 0x1e, 0x02, 0x03, 0x14, 0x16, 0x17, 0x37, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, // ......7>.54..#". + 0x02, 0x6b, 0x28, 0x48, 0x64, 0x3d, 0x43, 0x4f, 0x33, 0x5e, 0x84, 0x52, 0x47, 0x74, 0x51, 0x2c, // .k(Hd=CO3^.RGtQ, + 0x1f, 0x37, 0x4c, 0x2c, 0x5e, 0x01, 0x33, 0x23, 0x28, 0x01, 0xa7, 0x49, 0x46, 0xb5, 0xdd, 0x53, // .7L,^.3#(..IF..S + 0x4a, 0xb2, 0x62, 0x63, 0xa0, 0x70, 0x3d, 0x01, 0xb0, 0x47, 0x84, 0x39, 0xfe, 0xbd, 0x1c, 0x32, // J.bc.p=..G.9...2 + 0x3e, 0x21, 0x0b, 0x20, 0x3e, 0x5c, 0x3a, 0x32, 0x2d, 0x75, 0x1f, 0x28, 0x16, 0x09, 0x13, 0x25, // >!. >.:2-u.(...% + 0x34, 0x21, 0x2b, 0x41, 0x2b, 0x16, 0x01, 0x75, 0x43, 0x72, 0x63, 0x59, 0x2b, 0x5b, 0xa2, 0x58, // 4!+A+..uCrcY+[.X + 0x55, 0x83, 0x59, 0x2e, 0x32, 0x55, 0x70, 0x3e, 0x35, 0x57, 0x4c, 0x44, 0x21, 0x50, 0xfe, 0x6d, // U.Y.2Up>5WLD!P.m + 0x40, 0x98, 0x58, 0x80, 0xdb, 0x58, 0xed, 0x6e, 0x3f, 0x43, 0x3a, 0x68, 0x91, 0x9d, 0x34, 0x30, // @.X..X.n?C:h..40 + 0x01, 0xaf, 0x18, 0x29, 0x4e, 0x45, 0x39, 0x13, 0x33, 0x58, 0x42, 0x26, 0x03, 0xe6, 0x38, 0x75, // ...)NE9.3XB&..8u + 0x41, 0x5d, 0x15, 0x2e, 0x2f, 0x30, 0x17, 0x1e, 0x39, 0x2b, 0x1b, 0x20, 0x36, 0x47, 0x00, 0x01, // A]../0..9+. 6G.. + 0x01, 0xee, 0x04, 0x21, 0x02, 0x8d, 0x06, 0x00, 0x00, 0x05, 0x00, 0x2d, 0x4b, 0xb0, 0x21, 0x50, // ...!.......-K.!P + 0x58, 0x40, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x3e, 0x00, 0x4c, 0x1b, 0x40, // X@.....Y...>.L.@ + 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, 0x55, 0x00, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x01, 0x00, // ......U....Y.... + 0x4d, 0x59, 0xb4, 0x12, 0x11, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x03, 0x23, 0x13, 0x35, 0x33, 0x02, // MY......+..#.53. + 0x8d, 0x15, 0x8a, 0x01, 0x9e, 0x05, 0x91, 0xfe, 0x90, 0x01, 0x60, 0x7f, 0x00, 0x01, 0x01, 0x65, // ..........`....e + 0xfe, 0x2a, 0x03, 0x75, 0x06, 0x6b, 0x00, 0x1b, 0x00, 0x06, 0xb3, 0x14, 0x07, 0x01, 0x30, 0x2b, // .*.u.k........0+ + 0x01, 0x34, 0x3e, 0x04, 0x37, 0x17, 0x0e, 0x02, 0x02, 0x15, 0x15, 0x14, 0x12, 0x16, 0x16, 0x17, // .4>.7........... + 0x07, 0x2e, 0x05, 0x35, 0x01, 0x65, 0x2d, 0x4c, 0x63, 0x6d, 0x6e, 0x32, 0x27, 0x3e, 0x7b, 0x61, // ...5.e-Lcmn2'>{a + 0x3d, 0x3d, 0x61, 0x7b, 0x3e, 0x27, 0x32, 0x6f, 0x6d, 0x63, 0x4b, 0x2d, 0x02, 0x4f, 0x8f, 0xfc, // ==a{>'2omcK-.O.. + 0xd7, 0xb2, 0x8a, 0x62, 0x1c, 0x7a, 0x2f, 0xa2, 0xe7, 0xfe, 0xd3, 0xbb, 0x0e, 0xbb, 0xfe, 0xd2, // ...b.z/......... + 0xe8, 0xa5, 0x32, 0x71, 0x1c, 0x61, 0x8b, 0xb1, 0xd7, 0xfc, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x40, // ..2q.a.........@ + 0xfe, 0x2a, 0x03, 0x51, 0x06, 0x6b, 0x00, 0x1b, 0x00, 0x06, 0xb3, 0x14, 0x07, 0x01, 0x30, 0x2b, // .*.Q.k........0+ + 0x01, 0x14, 0x0e, 0x04, 0x07, 0x27, 0x3e, 0x02, 0x12, 0x35, 0x35, 0x34, 0x02, 0x26, 0x26, 0x27, // .....'>..554.&&' + 0x37, 0x1e, 0x05, 0x15, 0x03, 0x51, 0x2d, 0x4c, 0x63, 0x6d, 0x6f, 0x32, 0x27, 0x3e, 0x7b, 0x61, // 7....Q-Lcmo2'>{a + 0x3d, 0x40, 0x65, 0x79, 0x39, 0x27, 0x32, 0x6f, 0x6d, 0x63, 0x4c, 0x2d, 0x02, 0x45, 0x8f, 0xfc, // =@ey9'2omcL-.E.. + 0xd7, 0xb1, 0x8b, 0x61, 0x1c, 0x71, 0x2e, 0xa5, 0xea, 0x01, 0x30, 0xbb, 0x0e, 0xbb, 0x01, 0x31, // ...a.q....0....1 + 0xeb, 0xa4, 0x2e, 0x71, 0x1c, 0x62, 0x8a, 0xb2, 0xd7, 0xfc, 0x8f, 0x00, 0x00, 0x01, 0x00, 0xa0, // ...q.b.......... + 0x00, 0xf1, 0x04, 0x60, 0x04, 0xc8, 0x00, 0x0e, 0x00, 0x1a, 0x40, 0x17, 0x0e, 0x0d, 0x0c, 0x0b, // ...`......@..... + 0x0a, 0x09, 0x08, 0x07, 0x06, 0x03, 0x02, 0x01, 0x0c, 0x00, 0x47, 0x00, 0x00, 0x00, 0x69, 0x14, // ..........G...i. + 0x01, 0x08, 0x15, 0x2b, 0x01, 0x25, 0x37, 0x05, 0x03, 0x33, 0x03, 0x25, 0x17, 0x05, 0x01, 0x07, // ...+.%7..3.%.... + 0x03, 0x03, 0x27, 0x02, 0x19, 0xfe, 0x87, 0x36, 0x01, 0x6d, 0x19, 0xb2, 0x1d, 0x01, 0x6b, 0x36, // ..'....6.m....k6 + 0xfe, 0x82, 0x01, 0x00, 0x92, 0xd6, 0xd4, 0x92, 0x02, 0xab, 0x60, 0xaf, 0x97, 0x01, 0xa5, 0xfe, // ..........`..... + 0x55, 0x96, 0xb2, 0x5e, 0xfe, 0xbc, 0x6e, 0x01, 0x6b, 0xfe, 0x9e, 0x6a, 0x00, 0x01, 0x00, 0x77, // U..^..n.k..j...w + 0x00, 0x92, 0x04, 0x5d, 0x04, 0xb6, 0x00, 0x0b, 0x00, 0x26, 0x40, 0x23, 0x00, 0x05, 0x00, 0x02, // ...].....&@#.... + 0x05, 0x55, 0x04, 0x01, 0x00, 0x03, 0x01, 0x01, 0x02, 0x00, 0x01, 0x61, 0x00, 0x05, 0x05, 0x02, // .U.........a.... + 0x59, 0x00, 0x02, 0x05, 0x02, 0x4d, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x08, 0x1a, 0x2b, // Y....M.........+ + 0x01, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x02, 0xc6, 0x01, 0x97, // .!.!.#.!5!.3.... + 0xfe, 0x69, 0xb9, 0xfe, 0x6a, 0x01, 0x96, 0xb9, 0x03, 0x0d, 0xb8, 0xfe, 0x3d, 0x01, 0xc3, 0xb8, // .i..j.......=... + 0x01, 0xa9, 0x00, 0x01, 0x01, 0x62, 0xfe, 0xb0, 0x02, 0x83, 0x00, 0xdb, 0x00, 0x0b, 0x00, 0x10, // .....b.......... + 0x40, 0x0d, 0x06, 0x05, 0x02, 0x00, 0x47, 0x00, 0x00, 0x00, 0x69, 0x1a, 0x01, 0x08, 0x15, 0x2b, // @.....G...i....+ + 0x25, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, 0x35, 0x33, 0x02, 0x83, 0x17, 0x2d, 0x40, // %....'66553...-@ + 0x2a, 0x73, 0x30, 0x28, 0xc9, 0x2b, 0x2f, 0x67, 0x65, 0x5c, 0x24, 0x3f, 0x46, 0x9e, 0x55, 0xb3, // *s0(.+/ge.$?F.U. + 0x00, 0x01, 0x00, 0xda, 0x02, 0x31, 0x03, 0xd7, 0x02, 0xc9, 0x00, 0x03, 0x00, 0x18, 0x40, 0x15, // .....1........@. + 0x00, 0x01, 0x00, 0x00, 0x01, 0x55, 0x00, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x01, 0x00, 0x4d, // .....U....Y....M + 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x03, 0xd7, 0xfd, 0x03, 0x02, 0xfd, // .....+.!5!...... + 0x02, 0x31, 0x98, 0x00, 0x00, 0x01, 0x01, 0xf0, 0xff, 0xed, 0x03, 0x14, 0x01, 0x07, 0x00, 0x13, // .1.............. + 0x00, 0x13, 0x40, 0x10, 0x00, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x45, 0x01, 0x4c, 0x28, // ..@.....[...E.L( + 0x24, 0x02, 0x08, 0x16, 0x2b, 0x25, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, // $...+%4>.32..... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x01, 0xf0, 0x13, 0x24, 0x36, 0x24, 0x24, 0x37, 0x25, 0x13, 0x13, // .#".....$6$$7%.. + 0x25, 0x37, 0x24, 0x24, 0x36, 0x24, 0x13, 0x78, 0x1e, 0x34, 0x27, 0x16, 0x16, 0x27, 0x34, 0x1e, // %7$$6$.x.4'..'4. + 0x1d, 0x33, 0x26, 0x15, 0x15, 0x26, 0x33, 0x00, 0x00, 0x01, 0x00, 0xfc, 0xff, 0x83, 0x04, 0x01, // .3&..&3......... + 0x05, 0xb0, 0x00, 0x03, 0x00, 0x13, 0x40, 0x10, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x01, 0x01, // ......@.....s... + 0x3c, 0x01, 0x4c, 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, 0x05, 0x23, 0x01, 0x33, 0x01, 0xa2, 0xa6, // <.L.....+.#.3... + 0x02, 0x60, 0xa5, 0x7d, 0x06, 0x2d, 0x00, 0x03, 0x00, 0x91, 0xff, 0xec, 0x04, 0x40, 0x05, 0xc5, // .`.}.-.......@.. + 0x00, 0x15, 0x00, 0x1d, 0x00, 0x25, 0x00, 0x28, 0x40, 0x25, 0x1f, 0x1e, 0x17, 0x16, 0x04, 0x03, // .....%.(@%...... + 0x02, 0x01, 0x4a, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x44, 0x4b, 0x00, 0x03, 0x03, // ..J....[...DK... + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x26, 0x28, 0x29, 0x24, 0x04, 0x08, 0x18, 0x2b, // .[...E.L&()$...+ + 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, // ....#"..5.4>.32. + 0x02, 0x15, 0x01, 0x01, 0x26, 0x26, 0x23, 0x22, 0x06, 0x15, 0x05, 0x01, 0x16, 0x16, 0x33, 0x32, // ....&&#"......32 + 0x36, 0x35, 0x04, 0x40, 0x40, 0x78, 0xae, 0x70, 0x6f, 0xaf, 0x7a, 0x41, 0x40, 0x79, 0xaf, 0x6f, // 65.@@x.po.zA@y.o + 0x70, 0xaf, 0x79, 0x40, 0xfd, 0x0b, 0x02, 0x37, 0x10, 0x89, 0x81, 0x92, 0x8b, 0x02, 0x3b, 0xfd, // p.y@...7......;. + 0xca, 0x11, 0x8c, 0x7d, 0x93, 0x89, 0x02, 0x2d, 0x8b, 0xd7, 0x93, 0x4c, 0x4c, 0x93, 0xd7, 0x8b, // ...}...-...LL... + 0x01, 0x55, 0x8b, 0xd7, 0x94, 0x4d, 0x4d, 0x94, 0xd7, 0x8b, 0xfe, 0xd0, 0x01, 0xb3, 0x91, 0x97, // .U...MM......... + 0xc5, 0xbd, 0x57, 0xfe, 0x4f, 0x8d, 0x94, 0xc8, 0xbc, 0x00, 0x00, 0x01, 0x00, 0xd0, 0x00, 0x00, // ..W.O........... + 0x03, 0x06, 0x05, 0xb0, 0x00, 0x06, 0x00, 0x14, 0x40, 0x11, 0x05, 0x04, 0x03, 0x02, 0x04, 0x00, // ........@....... + 0x48, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x10, 0x01, 0x08, 0x15, 0x2b, 0x21, 0x23, 0x11, 0x05, // H...=.L....+!#.. + 0x35, 0x25, 0x33, 0x03, 0x06, 0xb9, 0xfe, 0x83, 0x02, 0x27, 0x0f, 0x04, 0xc4, 0x91, 0xa9, 0xd4, // 5%3......'...... + 0x00, 0x01, 0x00, 0x55, 0x00, 0x00, 0x04, 0x2b, 0x05, 0xc4, 0x00, 0x24, 0x00, 0x2e, 0x40, 0x2b, // ...U...+...$..@+ + 0x02, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x00, 0x02, 0x01, 0x04, 0x01, 0x02, 0x04, 0x70, 0x00, 0x01, // .....J.......p.. + 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00, // ..[...DK....Y... + 0x3d, 0x00, 0x4c, 0x1a, 0x24, 0x14, 0x2b, 0x10, 0x05, 0x08, 0x19, 0x2b, 0x21, 0x21, 0x35, 0x01, // =.L.$.+....+!!5. + 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x23, 0x34, 0x3e, 0x02, 0x33, // >.54..#"...#4>.3 + 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x01, 0x21, 0x04, 0x2b, 0xfc, 0x46, 0x01, 0xdd, // 2........!.+.F.. + 0x40, 0x56, 0x34, 0x16, 0x23, 0x43, 0x5f, 0x3c, 0x49, 0x6b, 0x47, 0x23, 0xba, 0x40, 0x79, 0xaf, // @V4.#C_.E@B.... + 0x01, 0x4a, 0x00, 0x02, 0x01, 0x00, 0x01, 0x02, 0x00, 0x70, 0x00, 0x05, 0x07, 0x06, 0x07, 0x05, // .J.......p...... + 0x06, 0x70, 0x00, 0x00, 0x00, 0x07, 0x05, 0x00, 0x07, 0x63, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, // .p.......c....[. + 0x03, 0x03, 0x44, 0x4b, 0x00, 0x06, 0x06, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x45, 0x04, 0x4c, 0x3e, // ..DK....[...E.L> + 0x3c, 0x34, 0x32, 0x2e, 0x2d, 0x29, 0x27, 0x24, 0x14, 0x26, 0x20, 0x08, 0x08, 0x18, 0x2b, 0x01, // <42.-)'$.& ...+. + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x23, 0x34, 0x3e, 0x02, // 32>.54&#"...#4>. + 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, // 32.............# + 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, // "..53...32>.54.. + 0x23, 0x23, 0x01, 0x86, 0x84, 0x46, 0x6b, 0x49, 0x26, 0x82, 0x7d, 0x3b, 0x61, 0x45, 0x26, 0xba, // ##...FkI&.};aE&. + 0x41, 0x76, 0xa5, 0x65, 0x62, 0xa2, 0x74, 0x40, 0x1a, 0x36, 0x55, 0x3b, 0x47, 0x5f, 0x39, 0x17, // Av.eb.t@.6U;G_9. + 0x46, 0x7c, 0xa9, 0x62, 0x60, 0xa9, 0x7c, 0x49, 0xb9, 0x27, 0x48, 0x67, 0x3f, 0x3f, 0x66, 0x48, // F|.b`.|I.'Hg??fH + 0x27, 0x2d, 0x51, 0x73, 0x45, 0x84, 0x03, 0x31, 0x26, 0x42, 0x5c, 0x37, 0x7f, 0x81, 0x23, 0x42, // '-QsE..1&B.7..#B + 0x5c, 0x39, 0x53, 0x93, 0x6d, 0x3f, 0x35, 0x68, 0x9a, 0x65, 0x2a, 0x5a, 0x55, 0x4b, 0x19, 0x17, // .9S.m?5h.e*ZUK.. + 0x4a, 0x5c, 0x66, 0x32, 0x66, 0x9e, 0x6d, 0x39, 0x36, 0x68, 0x96, 0x60, 0x39, 0x5e, 0x42, 0x24, // J.f2f.m96h.`9^B$ + 0x21, 0x44, 0x65, 0x45, 0x44, 0x63, 0x42, 0x20, 0x00, 0x02, 0x00, 0x4b, 0x00, 0x00, 0x04, 0x67, // !DeEDcB ...K...g + 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x2b, 0x40, 0x28, 0x0d, 0x01, 0x00, 0x04, 0x08, 0x01, // .......+@(...... + 0x01, 0x00, 0x02, 0x4a, 0x05, 0x01, 0x00, 0x03, 0x01, 0x01, 0x02, 0x00, 0x01, 0x62, 0x00, 0x04, // ...J.........b.. + 0x04, 0x3c, 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x11, 0x12, 0x11, 0x11, 0x11, 0x10, 0x06, // ..54..#".... + 0x49, 0x02, 0xeb, 0xfd, 0xb1, 0x29, 0x2b, 0x78, 0x4f, 0x65, 0xa0, 0x70, 0x3c, 0x38, 0x71, 0xac, // I....)+xOe.p<8q. + 0x74, 0x59, 0x9e, 0x7b, 0x4f, 0x0a, 0xb0, 0x11, 0x95, 0x75, 0x42, 0x66, 0x45, 0x23, 0x27, 0x4a, // tY.{O....uBfE#'J + 0x6c, 0x46, 0x2e, 0x43, 0x36, 0x2f, 0x19, 0x02, 0xda, 0x02, 0xd6, 0xb4, 0xfe, 0x7c, 0x19, 0x26, // lF.C6/.......|.& + 0x46, 0x7f, 0xb4, 0x6e, 0x68, 0xb2, 0x81, 0x49, 0x32, 0x64, 0x98, 0x65, 0x7c, 0x80, 0x2f, 0x57, // F..nh..I2d.e|./W + 0x7a, 0x4b, 0x44, 0x76, 0x57, 0x32, 0x0d, 0x18, 0x22, 0x16, 0x00, 0x02, 0x00, 0x8d, 0xff, 0xec, // zKDvW2.."....... + 0x04, 0x25, 0x05, 0xb1, 0x00, 0x27, 0x00, 0x3c, 0x00, 0x3a, 0x40, 0x37, 0x09, 0x01, 0x04, 0x01, // .%...'.<.:@7.... + 0x2d, 0x01, 0x05, 0x04, 0x02, 0x4a, 0x00, 0x01, 0x06, 0x01, 0x04, 0x05, 0x01, 0x04, 0x63, 0x00, // -....J........c. + 0x00, 0x00, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x3c, 0x4b, 0x00, 0x05, 0x05, 0x02, 0x5b, 0x00, 0x02, // ...[....32. + 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x04, 0x35, 0x35, 0x34, 0x3e, 0x04, 0x33, 0x03, // .....#"..554>.3. + 0x22, 0x0e, 0x02, 0x07, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, // ".......32>.54.. + 0x03, 0x58, 0x10, 0x5c, 0x91, 0x6e, 0x4f, 0x34, 0x1c, 0x04, 0x1a, 0x44, 0x4f, 0x5b, 0x32, 0x6d, // .X...nO4...DO[2m + 0x9e, 0x66, 0x30, 0x39, 0x72, 0xa9, 0x6f, 0x4f, 0x83, 0x68, 0x4e, 0x33, 0x1a, 0x19, 0x3c, 0x66, // .f09r.oO.hN3..`.f + 0x35, 0x32, 0x58, 0x7b, 0x48, 0x40, 0x79, 0x5e, 0x38, 0x00, 0x00, 0x01, 0x00, 0x70, 0x00, 0x00, // 52X{H@y^8....p.. + 0x04, 0x48, 0x05, 0xb0, 0x00, 0x06, 0x00, 0x1f, 0x40, 0x1c, 0x00, 0x01, 0x01, 0x02, 0x01, 0x4a, // .H......@......J + 0x00, 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3c, 0x4b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x4c, // ....Y...64,* + 0x22, 0x20, 0x2c, 0x06, 0x08, 0x15, 0x2b, 0x01, 0x06, 0x06, 0x07, 0x1e, 0x03, 0x15, 0x14, 0x0e, // " ,...+......... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, // .#"..54>.7..54>. + 0x33, 0x32, 0x1e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, // 32...4..#"...... + 0x33, 0x32, 0x3e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, // 32>..4..#"...... + 0x33, 0x32, 0x3e, 0x02, 0x04, 0x2e, 0x01, 0x74, 0x61, 0x38, 0x5b, 0x41, 0x23, 0x49, 0x7d, 0xa8, // 32>....ta8[A#I}. + 0x60, 0x62, 0xa9, 0x7d, 0x48, 0x22, 0x40, 0x5a, 0x38, 0x30, 0x4e, 0x36, 0x1e, 0x40, 0x71, 0x9d, // `b.}H"@Z80N6.@q. + 0x5d, 0x5c, 0x9e, 0x74, 0x42, 0x98, 0x29, 0x4a, 0x67, 0x3d, 0x3f, 0x66, 0x48, 0x27, 0x27, 0x48, // ]..tB.)Jg=?fH''H + 0x67, 0x40, 0x3d, 0x66, 0x49, 0x29, 0x22, 0x25, 0x41, 0x5a, 0x36, 0x36, 0x58, 0x40, 0x23, 0x23, // g@=fI)"%AZ66X@## + 0x41, 0x59, 0x36, 0x35, 0x5a, 0x41, 0x24, 0x04, 0x34, 0x6d, 0xaa, 0x30, 0x18, 0x47, 0x5c, 0x6c, // AY65ZA$.4m.0.G.l + 0x3d, 0x63, 0x9a, 0x69, 0x37, 0x36, 0x69, 0x9a, 0x64, 0x3d, 0x6d, 0x5b, 0x48, 0x18, 0x18, 0x43, // =c.i76i.d=m[H..C + 0x53, 0x62, 0x36, 0x5f, 0x95, 0x66, 0x36, 0x36, 0x66, 0x95, 0xfc, 0xfa, 0x3d, 0x66, 0x49, 0x28, // Sb6_.f66f...=fI( + 0x28, 0x49, 0x66, 0x3d, 0x3f, 0x63, 0x44, 0x24, 0x24, 0x44, 0x63, 0x02, 0xe3, 0x37, 0x5c, 0x43, // (If=?cD$$Dc..7.C + 0x25, 0x23, 0x42, 0x5d, 0x39, 0x39, 0x5b, 0x41, 0x23, 0x23, 0x41, 0x5c, 0x00, 0x02, 0x00, 0x95, // %#B]99[A##A..... + 0xff, 0xff, 0x04, 0x29, 0x05, 0xc4, 0x00, 0x27, 0x00, 0x3c, 0x00, 0x43, 0x40, 0x40, 0x2d, 0x01, // ...)...'.<.C@@-. + 0x04, 0x05, 0x07, 0x01, 0x01, 0x04, 0x02, 0x4a, 0x07, 0x01, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, // .......J........ + 0x63, 0x00, 0x05, 0x05, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x44, 0x4b, 0x06, 0x01, 0x00, 0x00, 0x03, // c....[...DK..... + 0x5b, 0x00, 0x03, 0x03, 0x3d, 0x03, 0x4c, 0x29, 0x28, 0x01, 0x00, 0x34, 0x32, 0x28, 0x3c, 0x29, // [...=.L)(..42(<) + 0x3c, 0x25, 0x24, 0x17, 0x15, 0x0d, 0x0b, 0x00, 0x27, 0x01, 0x27, 0x08, 0x08, 0x14, 0x2b, 0x25, // <%$.....'.'...+% + 0x32, 0x3e, 0x04, 0x37, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, // 2>.7..#"..54>.32 + 0x1e, 0x04, 0x15, 0x15, 0x14, 0x0e, 0x04, 0x23, 0x23, 0x35, 0x13, 0x32, 0x3e, 0x02, 0x37, 0x35, // .......##5.2>.75 + 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x01, 0x75, 0x63, 0x96, 0x6f, // 4..#".......uc.o + 0x4a, 0x2f, 0x16, 0x03, 0x18, 0x3e, 0x4e, 0x5f, 0x38, 0x6c, 0x9d, 0x66, 0x30, 0x39, 0x71, 0xa9, // J/...>N_8l.f09q. + 0x70, 0x54, 0x87, 0x67, 0x4a, 0x2f, 0x16, 0x12, 0x35, 0x60, 0x9a, 0xdc, 0x97, 0x13, 0xf0, 0x2f, // pT.gJ/..5`...../ + 0x59, 0x4b, 0x3b, 0x11, 0x2d, 0x4d, 0x65, 0x39, 0x41, 0x64, 0x45, 0x24, 0x20, 0x41, 0x63, 0xa4, // YK;.-Me9AdE$ Ac. + 0x23, 0x40, 0x57, 0x69, 0x75, 0x3d, 0x1e, 0x35, 0x28, 0x17, 0x55, 0x8a, 0xae, 0x58, 0x67, 0xb7, // #@Wiu=.5(.U..Xg. + 0x89, 0x51, 0x2f, 0x53, 0x71, 0x83, 0x8f, 0x48, 0x43, 0x5d, 0xc3, 0xb6, 0xa1, 0x78, 0x46, 0xa5, // .Q/Sq..HC]...xF. + 0x01, 0xdc, 0x1f, 0x39, 0x4d, 0x2f, 0x3c, 0x61, 0x98, 0x69, 0x38, 0x34, 0x5b, 0x7d, 0x48, 0x40, // ...9M/.7>.54&#"... + 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x15, 0x03, // #>.32........... + 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0xff, 0x01, 0x0a, 0x20, // 4632....#"&.... + 0x3c, 0x32, 0x22, 0x47, 0x3b, 0x26, 0x7e, 0x75, 0x2f, 0x59, 0x45, 0x2a, 0xb9, 0x01, 0x44, 0x73, // <2"G;&~u/YE*..Ds + 0x9d, 0x5b, 0x65, 0x9f, 0x6e, 0x3a, 0x32, 0x4e, 0x61, 0x2f, 0x1e, 0x21, 0x10, 0x04, 0xce, 0x39, // .[e.n:2Na/.!...9 + 0x39, 0x39, 0x3b, 0x3b, 0x39, 0x39, 0x39, 0x01, 0x9a, 0x48, 0x5d, 0x49, 0x43, 0x2e, 0x23, 0x4a, // 99;;999..H]IC.#J + 0x51, 0x5a, 0x32, 0x6d, 0x73, 0x17, 0x31, 0x4b, 0x34, 0x54, 0x86, 0x5d, 0x31, 0x33, 0x62, 0x8c, // QZ2ms.1K4T.]13b. + 0x5a, 0x48, 0x7f, 0x71, 0x62, 0x2a, 0x1d, 0x34, 0x36, 0x3d, 0x27, 0xfe, 0xc7, 0x30, 0x40, 0x40, // ZH.qb*.46='..0@@ + 0x30, 0x2e, 0x3e, 0x3e, 0x00, 0x02, 0x00, 0x40, 0xff, 0xf8, 0x04, 0x8b, 0x05, 0xb2, 0x00, 0x4d, // 0.>>...@.......M + 0x00, 0x5b, 0x00, 0xa5, 0x4b, 0xb0, 0x14, 0x50, 0x58, 0x40, 0x14, 0x18, 0x01, 0x09, 0x02, 0x55, // .[..K..PX@.....U + 0x4e, 0x08, 0x03, 0x03, 0x09, 0x37, 0x01, 0x05, 0x00, 0x38, 0x01, 0x06, 0x05, 0x04, 0x4a, 0x1b, // N....7...8....J. + 0x40, 0x17, 0x18, 0x01, 0x09, 0x02, 0x55, 0x4e, 0x02, 0x08, 0x09, 0x08, 0x01, 0x03, 0x08, 0x37, // @.....UN.......7 + 0x01, 0x05, 0x00, 0x38, 0x01, 0x06, 0x05, 0x05, 0x4a, 0x59, 0x4b, 0xb0, 0x14, 0x50, 0x58, 0x40, // ...8....JYK..PX@ + 0x27, 0x00, 0x02, 0x00, 0x09, 0x03, 0x02, 0x09, 0x63, 0x08, 0x01, 0x03, 0x01, 0x01, 0x00, 0x05, // '.......c....... + 0x03, 0x00, 0x63, 0x00, 0x04, 0x04, 0x07, 0x5b, 0x00, 0x07, 0x07, 0x3c, 0x4b, 0x00, 0x05, 0x05, // ..c....[....32..... + 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x36, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x06, 0x1e, // .32>.76..#"..... + 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x26, 0x02, 0x37, 0x3e, // .32>.7...#"&&.7> + 0x05, 0x33, 0x32, 0x1e, 0x02, 0x01, 0x06, 0x16, 0x33, 0x32, 0x36, 0x37, 0x13, 0x26, 0x23, 0x22, // .32.....3267.&#" + 0x0e, 0x02, 0x04, 0x87, 0x03, 0x20, 0x41, 0x66, 0x4a, 0x3d, 0x51, 0x11, 0x23, 0x67, 0x3e, 0x31, // ..... AfJ=Q.#g>1 + 0x48, 0x2d, 0x11, 0x06, 0x09, 0x38, 0x59, 0x76, 0x47, 0x43, 0x58, 0x1a, 0x2c, 0x03, 0x0a, 0x13, // H-...8YvGCX.,... + 0x1c, 0x10, 0x25, 0x39, 0x26, 0x14, 0x01, 0x04, 0x32, 0x67, 0x96, 0x60, 0x65, 0xa7, 0x7a, 0x46, // ..%9&...2g.`e.zF + 0x04, 0x05, 0x30, 0x6a, 0xa5, 0x70, 0x1e, 0x3e, 0x3c, 0x36, 0x16, 0x20, 0x19, 0x40, 0x46, 0x48, // ..0j.p.><6. .@FH + 0x20, 0x93, 0xd3, 0x85, 0x3b, 0x05, 0x04, 0x2a, 0x49, 0x67, 0x80, 0x99, 0x56, 0x7a, 0xbe, 0x81, // ...;..*Ig..Vz.. + 0x40, 0xfd, 0x4b, 0x05, 0x2c, 0x30, 0x31, 0x50, 0x1e, 0x27, 0x1c, 0x1e, 0x35, 0x4f, 0x36, 0x21, // @.K.,01P.'..5O6! + 0x03, 0x15, 0x50, 0xa7, 0x88, 0x56, 0x40, 0x39, 0x38, 0x41, 0x34, 0x5e, 0x82, 0x4e, 0x6f, 0xb3, // ..P..V@98A4^.No. + 0x7d, 0x43, 0x35, 0x24, 0xfe, 0x08, 0x29, 0x33, 0x1d, 0x0a, 0x39, 0x61, 0x82, 0x49, 0x7f, 0xca, // }C5$..)3..9a.I.. + 0x8c, 0x4a, 0x5f, 0xaa, 0xec, 0x8c, 0x88, 0xd4, 0x93, 0x4d, 0x09, 0x11, 0x18, 0x0f, 0x75, 0x13, // .J_......M....u. + 0x1c, 0x13, 0x09, 0x67, 0xba, 0x01, 0x01, 0x99, 0x67, 0xc3, 0xaa, 0x8d, 0x66, 0x38, 0x5f, 0xb0, // ...g....g...f8_. + 0xf7, 0xfe, 0xf6, 0x66, 0x72, 0x36, 0x3f, 0x01, 0xbd, 0x0d, 0x33, 0x5d, 0x85, 0x00, 0x00, 0x02, // ...fr6?...3].... + 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x05, 0xb0, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x25, 0x40, 0x22, // .Q...........%@" + 0x0a, 0x01, 0x04, 0x02, 0x01, 0x4a, 0x00, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x62, 0x00, 0x02, // .....J.......b.. + 0x02, 0x3c, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x10, 0x05, // .@; + 0x0c, 0x01, 0x03, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x07, 0x01, 0x03, 0x02, 0x04, 0x03, 0x63, 0x00, // .....J........c. + 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3c, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x06, 0x01, // ...[... + 0x03, 0x35, 0x36, 0x2e, 0x02, 0x27, 0x25, 0x21, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x23, // .56..'%!>.54..'# + 0xac, 0x01, 0xb1, 0x5a, 0xac, 0x86, 0x50, 0x01, 0x01, 0x23, 0x3d, 0x52, 0x2e, 0x3a, 0x61, 0x46, // ...Z..P..#=R.:aF + 0x27, 0x01, 0x50, 0x86, 0xaf, 0x5d, 0xfe, 0xe8, 0x01, 0x1d, 0x3a, 0x68, 0x50, 0x2f, 0x01, 0x2b, // '.P..]....:hP/.+ + 0x4c, 0x66, 0x3b, 0xfe, 0xd9, 0x01, 0x02, 0x34, 0x64, 0x4e, 0x30, 0x2f, 0x4f, 0x67, 0x36, 0xfd, // Lf;....4dN0/Og6. + 0x05, 0xb0, 0x01, 0x2d, 0x5e, 0x92, 0x66, 0x39, 0x5e, 0x4b, 0x38, 0x14, 0x11, 0x3f, 0x59, 0x70, // ...-^.f9^K8..?Yp + 0x41, 0x66, 0x9c, 0x69, 0x38, 0x01, 0x02, 0xa9, 0xfd, 0xf4, 0x01, 0x25, 0x42, 0x60, 0x3d, 0x3e, // Af.i8......%B`=> + 0x60, 0x43, 0x24, 0x02, 0x9a, 0x01, 0x1f, 0x3b, 0x56, 0x39, 0x3d, 0x56, 0x37, 0x1a, 0x01, 0x00, // `C$....;V9=V7... + 0x00, 0x01, 0x00, 0x6b, 0xff, 0xec, 0x04, 0x5d, 0x05, 0xc4, 0x00, 0x33, 0x00, 0x36, 0x40, 0x33, // ...k...]...3.6@3 + 0x00, 0x02, 0x03, 0x05, 0x03, 0x02, 0x05, 0x70, 0x06, 0x01, 0x05, 0x04, 0x03, 0x05, 0x04, 0x6e, // .......p.......n + 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x44, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x00, // ....[...DK....[. + 0x00, 0x00, 0x45, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x33, 0x00, 0x33, 0x2d, 0x24, 0x14, 0x2d, 0x24, // ..E.L...3.3-$.-$ + 0x07, 0x08, 0x19, 0x2b, 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x04, 0x27, 0x35, 0x3e, 0x05, 0x33, // ...+...#"..'5>.3 + 0x32, 0x1e, 0x02, 0x17, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x04, 0x15, 0x15, 0x14, 0x1e, 0x04, // 2...#..#"....... + 0x33, 0x32, 0x3e, 0x02, 0x37, 0x04, 0x5d, 0x0d, 0x4e, 0x7d, 0xab, 0x69, 0x5a, 0x93, 0x73, 0x53, // 32>.7.].N}.iZ.sS + 0x37, 0x1b, 0x01, 0x01, 0x1b, 0x37, 0x53, 0x73, 0x92, 0x5b, 0x6d, 0xac, 0x7c, 0x4b, 0x0c, 0xb9, // 7....7Ss.[m.|K.. + 0x09, 0x2c, 0x4a, 0x6b, 0x49, 0x42, 0x65, 0x49, 0x31, 0x1e, 0x0d, 0x0d, 0x1e, 0x30, 0x4a, 0x64, // .,JkIBeI1....0Jd + 0x43, 0x49, 0x6b, 0x4a, 0x2c, 0x09, 0x01, 0xb6, 0x65, 0xa9, 0x79, 0x43, 0x33, 0x5a, 0x7a, 0x90, // CIkJ,...e.yC3Zz. + 0x9e, 0x51, 0xcb, 0x51, 0x9e, 0x90, 0x7b, 0x5a, 0x33, 0x43, 0x7b, 0xac, 0x68, 0x42, 0x72, 0x56, // .Q.Q..{Z3C{.hBrV + 0x31, 0x2b, 0x4a, 0x62, 0x6e, 0x73, 0x36, 0xcd, 0x36, 0x73, 0x6f, 0x62, 0x4b, 0x2b, 0x2e, 0x53, // 1+Jbns6.6sobK+.S + 0x71, 0x42, 0x00, 0x02, 0x00, 0x9b, 0x00, 0x00, 0x04, 0x70, 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x1b, // qB.......p...... + 0x00, 0x2c, 0x40, 0x29, 0x05, 0x01, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3c, 0x4b, 0x00, // .,@).....[....75. + 0x03, 0x27, 0x9b, 0x01, 0x51, 0x98, 0xef, 0xa5, 0x57, 0x01, 0x01, 0x57, 0xa5, 0xef, 0x98, 0x95, // .'..Q...W..W.... + 0x95, 0x76, 0xac, 0x71, 0x37, 0x01, 0x01, 0x38, 0x70, 0xac, 0x76, 0x05, 0xb0, 0x02, 0x63, 0xb1, // .v.q7..8p.v...c. + 0xf7, 0x96, 0x6b, 0x96, 0xf7, 0xb1, 0x63, 0x01, 0x05, 0x18, 0xfb, 0x7f, 0x01, 0x51, 0x8c, 0xbe, // ..k...c......Q.. + 0x6f, 0x6d, 0x6f, 0xbd, 0x8b, 0x50, 0x02, 0x00, 0x00, 0x01, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, // omo..P.........4 + 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x29, 0x40, 0x26, 0x00, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x61, // .....)@&.......a + 0x00, 0x04, 0x04, 0x03, 0x59, 0x00, 0x03, 0x03, 0x3c, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x59, 0x00, // ....Y....32...#..#". + 0x04, 0x15, 0x15, 0x1e, 0x05, 0x17, 0x16, 0x3e, 0x02, 0x37, 0x13, 0x21, 0x35, 0x21, 0x04, 0x5c, // .......>.7.!5!.. + 0x5c, 0xee, 0x8e, 0x5a, 0x97, 0x78, 0x5a, 0x3d, 0x1f, 0x01, 0x01, 0x1b, 0x38, 0x54, 0x75, 0x94, // ...Z.xZ=....8Tu. + 0x5c, 0x66, 0xac, 0x80, 0x4e, 0x09, 0xb7, 0x0b, 0x2e, 0x4b, 0x68, 0x45, 0x42, 0x66, 0x4c, 0x32, // .f..N....KhEBfL2 + 0x20, 0x0e, 0x01, 0x11, 0x24, 0x38, 0x4f, 0x68, 0x42, 0x26, 0x53, 0x4e, 0x44, 0x17, 0x02, 0xfe, // ...$8OhB&SND... + 0xd8, 0x01, 0xd8, 0xbf, 0x6c, 0x68, 0x01, 0x01, 0x35, 0x5d, 0x7e, 0x93, 0xa1, 0x52, 0xa9, 0x51, // ....lh..5]~..R.Q + 0xa1, 0x94, 0x7f, 0x5d, 0x36, 0x3f, 0x75, 0xa5, 0x66, 0x3f, 0x6b, 0x4c, 0x2b, 0x2d, 0x4c, 0x65, // ...]6?u.f?kL+-Le + 0x70, 0x74, 0x36, 0xab, 0x37, 0x75, 0x70, 0x64, 0x4c, 0x2d, 0x01, 0x01, 0x08, 0x18, 0x29, 0x21, // pt6.7updL-....)! + 0x01, 0x47, 0x9c, 0x00, 0x00, 0x01, 0x00, 0x8d, 0x00, 0x00, 0x04, 0x3f, 0x05, 0xb0, 0x00, 0x0b, // .G.........?.... + 0x00, 0x21, 0x40, 0x1e, 0x00, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0x61, 0x05, 0x01, 0x03, 0x03, // .!@........a.... + 0x3c, 0x4b, 0x02, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, // .7.Y..I~ + 0xab, 0x65, 0x66, 0xa7, 0x7b, 0x4a, 0x09, 0xbc, 0x03, 0x2b, 0x4a, 0x67, 0x40, 0x42, 0x68, 0x49, // .ef.{J...+Jg@BhI + 0x27, 0x02, 0x05, 0xb0, 0xfc, 0x0b, 0x65, 0xaa, 0x7b, 0x45, 0x3e, 0x73, 0xa3, 0x65, 0x3d, 0x68, // '.....e.{E>s.e=h + 0x4d, 0x2a, 0x31, 0x54, 0x6f, 0x3e, 0x00, 0x01, 0x00, 0xac, 0x00, 0x00, 0x04, 0xa4, 0x05, 0xb0, // M*1To>.......... + 0x00, 0x0c, 0x00, 0x1f, 0x40, 0x1c, 0x0a, 0x06, 0x01, 0x03, 0x00, 0x01, 0x01, 0x4a, 0x02, 0x01, // ....@........J.. + 0x01, 0x01, 0x3c, 0x4b, 0x03, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x12, 0x13, 0x11, 0x12, 0x04, // .... + 0x00, 0x09, 0x00, 0x1e, 0x40, 0x1b, 0x07, 0x02, 0x02, 0x00, 0x02, 0x01, 0x4a, 0x03, 0x01, 0x02, // ....@.......J... + 0x02, 0x3c, 0x4b, 0x01, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x12, 0x11, 0x12, 0x10, 0x04, 0x08, // ... + 0xcb, 0x03, 0xbb, 0xbc, 0x02, 0x35, 0x03, 0xbb, 0x04, 0x40, 0xfb, 0xc0, 0x05, 0xb0, 0xfb, 0xc2, // .....5...@...... + 0x04, 0x3e, 0x00, 0x02, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x05, 0xc4, 0x00, 0x1d, 0x00, 0x3b, // .>...j...a.....; + 0x00, 0x1f, 0x40, 0x1c, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x44, 0x4b, 0x00, 0x03, // ..@.....[...DK.. + 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x2d, 0x2d, 0x2d, 0x26, 0x04, 0x08, 0x18, // ..[...E.L---&... + 0x2b, 0x01, 0x0e, 0x05, 0x23, 0x22, 0x2e, 0x04, 0x27, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x1e, 0x04, // +...#"..'5>.32.. + 0x17, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x04, 0x07, 0x15, 0x1e, 0x05, 0x33, 0x32, 0x3e, 0x04, // .'..#"......32>. + 0x37, 0x04, 0x61, 0x01, 0x19, 0x34, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x91, 0x70, 0x52, 0x35, 0x1a, // 7.a..4Qp.ZZ.pR5. + 0x01, 0x01, 0x19, 0x35, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x92, 0x70, 0x51, 0x35, 0x19, 0x01, 0xb7, // ...5Qp.ZZ.pQ5... + 0x01, 0x0c, 0x1d, 0x30, 0x48, 0x62, 0x41, 0x40, 0x62, 0x48, 0x30, 0x1d, 0x0d, 0x01, 0x01, 0x0d, // ...0HbA@bH0..... + 0x1e, 0x30, 0x48, 0x62, 0x41, 0x41, 0x63, 0x47, 0x2f, 0x1d, 0x0b, 0x01, 0x02, 0x84, 0x4e, 0x9f, // .0HbAAcG/.....N. + 0x94, 0x80, 0x60, 0x37, 0x37, 0x60, 0x81, 0x94, 0x9e, 0x4e, 0xa6, 0x4e, 0x9f, 0x94, 0x81, 0x61, // ..`77`...N.N...a + 0x37, 0x37, 0x60, 0x81, 0x94, 0xa0, 0x4e, 0x02, 0x34, 0x71, 0x6f, 0x65, 0x4d, 0x2d, 0x2e, 0x4d, // 77`...N.4qoeM-.M + 0x65, 0x6f, 0x71, 0x33, 0xa8, 0x33, 0x72, 0x6f, 0x66, 0x4d, 0x2e, 0x2e, 0x4d, 0x65, 0x6f, 0x72, // eoq3.3rofM..Meor + 0x34, 0x00, 0x00, 0x02, 0x00, 0xbf, 0x00, 0x00, 0x04, 0x79, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x1b, // 4........y...... + 0x00, 0x2b, 0x40, 0x28, 0x00, 0x03, 0x05, 0x01, 0x02, 0x00, 0x03, 0x02, 0x63, 0x00, 0x04, 0x04, // .+@(........c... + 0x01, 0x5b, 0x00, 0x01, 0x01, 0x3c, 0x4b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x00, 0x00, 0x1b, // .[....54. + 0x02, 0x27, 0x21, 0x01, 0x78, 0xb9, 0x01, 0xd8, 0x62, 0xaf, 0x84, 0x4d, 0x4d, 0x84, 0xaf, 0x62, // .'!.x...b..MM..b + 0xfe, 0xe1, 0x01, 0x1f, 0x40, 0x6c, 0x50, 0x2d, 0x2d, 0x4f, 0x6d, 0x40, 0xfe, 0xe1, 0x02, 0x48, // ....@lP--Om@...H + 0xfd, 0xb8, 0x05, 0xb0, 0x02, 0x3a, 0x6e, 0xa2, 0x69, 0x69, 0xa1, 0x6e, 0x3a, 0x01, 0x98, 0x01, // .....:n.ii.n:... + 0x27, 0x48, 0x67, 0x42, 0x42, 0x6a, 0x4a, 0x28, 0x01, 0x00, 0x00, 0x02, 0x00, 0x5e, 0xff, 0x0a, // 'HgBBjJ(.....^.. + 0x04, 0x8c, 0x05, 0xc4, 0x00, 0x20, 0x00, 0x3e, 0x00, 0x2b, 0x40, 0x28, 0x08, 0x05, 0x02, 0x00, // ..... .>.+@(.... + 0x03, 0x01, 0x4a, 0x07, 0x06, 0x02, 0x00, 0x47, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, // ..J....G....[... + 0x44, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x2d, 0x2d, 0x2d, // DK....[...E.L--- + 0x29, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x0e, 0x03, 0x07, 0x17, 0x07, 0x25, 0x06, 0x23, 0x22, 0x2e, // )...+......%.#". + 0x04, 0x27, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x1e, 0x04, 0x17, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x0e, // .'5>.32...'..#". + 0x04, 0x15, 0x15, 0x14, 0x1e, 0x04, 0x33, 0x32, 0x3e, 0x04, 0x37, 0x04, 0x6e, 0x01, 0x1a, 0x35, // ......32>.7.n..5 + 0x53, 0x3a, 0xfb, 0x7f, 0xfe, 0xe0, 0x3e, 0x48, 0x5d, 0x94, 0x73, 0x54, 0x36, 0x1a, 0x01, 0x01, // S:....>H].sT6... + 0x1a, 0x36, 0x52, 0x73, 0x95, 0x5d, 0x5d, 0x95, 0x73, 0x53, 0x35, 0x1a, 0x01, 0xb8, 0x01, 0x0b, // .6Rs.]].sS5..... + 0x1d, 0x31, 0x4a, 0x67, 0x45, 0x44, 0x66, 0x4a, 0x31, 0x1e, 0x0d, 0x0d, 0x1e, 0x31, 0x4a, 0x67, // .1JgEDfJ1....1Jg + 0x44, 0x45, 0x67, 0x4a, 0x30, 0x1d, 0x0b, 0x01, 0x02, 0x97, 0x51, 0xa4, 0x98, 0x85, 0x31, 0xd1, // DEgJ0.....Q...1. + 0x79, 0xf4, 0x12, 0x39, 0x62, 0x85, 0x98, 0xa3, 0x50, 0x80, 0x50, 0xa4, 0x98, 0x85, 0x63, 0x39, // y..9b...P.P...c9 + 0x39, 0x62, 0x85, 0x98, 0xa5, 0x50, 0x02, 0x37, 0x77, 0x73, 0x68, 0x4f, 0x2e, 0x2f, 0x4f, 0x68, // 9b...P.7wshO./Oh + 0x73, 0x77, 0x36, 0x82, 0x36, 0x77, 0x74, 0x68, 0x50, 0x2f, 0x2f, 0x4f, 0x68, 0x74, 0x77, 0x37, // sw6.6wthP//Ohtw7 + 0x00, 0x02, 0x00, 0xb5, 0x00, 0x00, 0x04, 0x72, 0x05, 0xb0, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x2b, // .......r.......+ + 0x40, 0x28, 0x0f, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x61, // @(.....J.......a + 0x00, 0x05, 0x05, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x3c, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, // ....[....5 + 0x34, 0x2e, 0x02, 0x27, 0x23, 0x02, 0x90, 0xfe, 0xdd, 0xb8, 0x01, 0xab, 0x66, 0xb4, 0x87, 0x4d, // 4..'#.......f..M + 0x29, 0x48, 0x64, 0x3c, 0x01, 0x35, 0x01, 0xc3, 0xfd, 0xbf, 0xf8, 0x3e, 0x6e, 0x53, 0x30, 0x2e, // )Hd<.5.....>nS0. + 0x52, 0x71, 0x43, 0xf3, 0x02, 0x52, 0xfd, 0xae, 0x05, 0xb0, 0x02, 0x36, 0x6c, 0xa3, 0x6e, 0x47, // RqC..R.....6l.nG + 0x76, 0x60, 0x4a, 0x1a, 0xfd, 0x92, 0x0c, 0x02, 0xea, 0x01, 0x25, 0x46, 0x65, 0x42, 0x46, 0x69, // v`J.......%FeBFi + 0x47, 0x24, 0x01, 0x00, 0x00, 0x01, 0x00, 0x76, 0xff, 0xec, 0x04, 0x69, 0x05, 0xc4, 0x00, 0x3f, // G$.....v...i...? + 0x00, 0x33, 0x40, 0x30, 0x00, 0x01, 0x02, 0x04, 0x02, 0x01, 0x04, 0x70, 0x00, 0x04, 0x05, 0x02, // .3@0.......p.... + 0x04, 0x05, 0x6e, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x44, 0x4b, 0x00, 0x05, 0x05, // ..n....[...DK... + 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x03, 0x4c, 0x3c, 0x3a, 0x36, 0x35, 0x31, 0x2f, 0x24, 0x14, // .[...E.L<:651/$. + 0x2e, 0x06, 0x08, 0x17, 0x2b, 0x01, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, // ....+.4..'..54>. + 0x33, 0x32, 0x1e, 0x02, 0x17, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x1e, 0x03, 0x17, // 32...#..#"...... + 0x1e, 0x05, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, 0x1e, 0x03, 0x33, 0x32, // ......#"..'3..32 + 0x3e, 0x02, 0x03, 0xa8, 0x3d, 0x60, 0x73, 0x35, 0x4d, 0x9f, 0x83, 0x53, 0x53, 0x86, 0xaa, 0x56, // >...=`s5M..SS..V + 0x5f, 0xb0, 0x88, 0x52, 0x02, 0xbe, 0x08, 0x2e, 0x4c, 0x69, 0x42, 0x35, 0x65, 0x4f, 0x2f, 0x01, // _..R....LiB5eO/. + 0x3e, 0x5f, 0x6f, 0x31, 0x36, 0x6e, 0x66, 0x58, 0x42, 0x25, 0x57, 0x8a, 0xae, 0x57, 0x61, 0xba, // >_o16nfXB%W..Wa. + 0x93, 0x5c, 0x03, 0xbd, 0x09, 0x38, 0x58, 0x73, 0x44, 0x36, 0x69, 0x52, 0x34, 0x01, 0x70, 0x43, // .....8XsD6iR4.pC + 0x5c, 0x3f, 0x2a, 0x11, 0x19, 0x46, 0x66, 0x8b, 0x5e, 0x5e, 0x94, 0x66, 0x35, 0x3f, 0x72, 0xa2, // .?*..Ff.^^.f5?r. + 0x64, 0x3f, 0x67, 0x4a, 0x29, 0x1e, 0x3c, 0x58, 0x3a, 0x3f, 0x57, 0x3c, 0x28, 0x0f, 0x11, 0x2b, // d?gJ)...>.8.. + 0xfa, 0xee, 0x05, 0x12, 0x9e, 0x00, 0x00, 0x01, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, 0x05, 0xb0, // .............B.. + 0x00, 0x19, 0x00, 0x21, 0x40, 0x1e, 0x04, 0x03, 0x02, 0x01, 0x01, 0x3c, 0x4b, 0x00, 0x02, 0x02, // ...!@.......7..@..F~. + 0x68, 0x6a, 0xae, 0x7c, 0x46, 0x01, 0x02, 0xb0, 0x04, 0x01, 0x27, 0x49, 0x6d, 0x47, 0x47, 0x6c, // hj.|F.....'ImGGl + 0x49, 0x26, 0x02, 0x03, 0x05, 0xb0, 0xfc, 0x26, 0x66, 0xb2, 0x85, 0x4d, 0x4c, 0x85, 0xb3, 0x66, // I&.....&f..ML..f + 0x03, 0xda, 0xfc, 0x26, 0x41, 0x78, 0x5c, 0x38, 0x37, 0x5d, 0x78, 0x41, 0x03, 0xda, 0x00, 0x01, // ...&Ax.87]xA.... + 0x00, 0x47, 0x00, 0x00, 0x04, 0x7f, 0x05, 0xb0, 0x00, 0x06, 0x00, 0x15, 0x40, 0x12, 0x02, 0x01, // .G..........@... + 0x00, 0x00, 0x3c, 0x4b, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x03, 0x08, 0x17, // ... + 0x4c, 0x1b, 0x4b, 0xb0, 0x0e, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x01, // L.K..PX@.....s.. + 0x01, 0x3c, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x10, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x00, // .<.L.K..PX@..... + 0x73, 0x00, 0x01, 0x01, 0x3e, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x12, 0x50, 0x58, 0x40, 0x0b, 0x00, // s...>.L.K..PX@.. + 0x00, 0x01, 0x00, 0x73, 0x00, 0x01, 0x01, 0x3c, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x16, 0x50, 0x58, // ...s...<.L.K..PX + 0x40, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x01, 0x01, 0x3e, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, // @.....s...>.L.K. + 0x17, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x01, 0x01, 0x3c, 0x01, 0x4c, // .PX@.....s...<.L + 0x1b, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x01, 0x01, // .K..PX@.....s... + 0x3e, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x73, // >.L.K..PX@.....s + 0x00, 0x01, 0x01, 0x3c, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x2a, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x00, // ...<.L.K.*PX@... + 0x01, 0x00, 0x73, 0x00, 0x01, 0x01, 0x3e, 0x01, 0x4c, 0x1b, 0x40, 0x09, 0x00, 0x01, 0x00, 0x01, // ..s...>.L.@..... + 0x72, 0x00, 0x00, 0x00, 0x69, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0xb4, // r...iYYYYYYYYYY. + 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x23, 0x03, 0x33, 0x03, 0x2d, 0x96, 0xf8, 0xdf, 0x04, // .....+.#.3.-.... + 0xbf, 0x01, 0x0a, 0x00, 0x00, 0x02, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x04, 0x4e, 0x00, 0x2e, // ...........6.N.. + 0x00, 0x3d, 0x00, 0x44, 0x40, 0x41, 0x34, 0x01, 0x05, 0x06, 0x2d, 0x03, 0x02, 0x00, 0x05, 0x02, // .=.D@A4...-..... + 0x4a, 0x00, 0x03, 0x02, 0x01, 0x02, 0x03, 0x01, 0x70, 0x00, 0x01, 0x00, 0x06, 0x05, 0x01, 0x06, // J.......p....... + 0x63, 0x00, 0x02, 0x02, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x47, 0x4b, 0x07, 0x01, 0x05, 0x05, 0x00, // c....[...GK..... + 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x30, 0x2f, 0x37, 0x35, 0x2f, 0x3d, 0x30, 0x3d, 0x24, // [...E.L0/75/=0=$ + 0x14, 0x25, 0x28, 0x27, 0x08, 0x08, 0x19, 0x2b, 0x21, 0x26, 0x26, 0x27, 0x0e, 0x03, 0x23, 0x22, // .%('...+!&&'..#" + 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x33, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, // ..54>.3354..#".. + 0x15, 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x16, 0x17, 0x15, 0x25, 0x32, // .#>.32........%2 + 0x3e, 0x02, 0x37, 0x35, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x03, 0x75, 0x0b, 0x0d, 0x03, // >.75#"......u... + 0x1c, 0x45, 0x53, 0x5e, 0x35, 0x56, 0x8b, 0x61, 0x35, 0x47, 0x82, 0xb7, 0x71, 0xca, 0x24, 0x42, // .ES^5V.a5G..q.$B + 0x5f, 0x3b, 0x37, 0x57, 0x3c, 0x21, 0xba, 0x01, 0x3b, 0x6f, 0x9f, 0x65, 0x5c, 0x9e, 0x73, 0x42, // _;7WK....[...G + 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, // K....[....E.L.K. + 0x21, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x02, 0x02, 0x3e, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, // !PX@....>K....[. + 0x03, 0x03, 0x47, 0x4b, 0x00, 0x01, 0x01, 0x3d, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, // ..GK...=K....[.. + 0x00, 0x45, 0x00, 0x4c, 0x1b, 0x40, 0x1f, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, // .E.L.@.....[...G + 0x4b, 0x00, 0x02, 0x02, 0x01, 0x59, 0x00, 0x01, 0x01, 0x3d, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, // K....Y...=K....[ + 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x59, 0x59, 0x40, 0x09, 0x29, 0x29, 0x23, 0x11, 0x13, 0x24, // ...E.LYY@.))#..$ + 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x07, 0x23, 0x11, 0x33, // ...+....#"&'.#.3 + 0x11, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, // .6632...#4..#".. + 0x07, 0x11, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x04, 0x43, 0x38, 0x6c, 0x9f, 0x67, 0x68, // ....32>.5.C8l.gh + 0x99, 0x36, 0x09, 0xaa, 0xb9, 0x35, 0x96, 0x64, 0x68, 0xa0, 0x6c, 0x38, 0xb9, 0x1f, 0x44, 0x6e, // .6...5.dh.l8..Dn + 0x50, 0x30, 0x50, 0x3f, 0x31, 0x11, 0x12, 0x31, 0x40, 0x50, 0x30, 0x4c, 0x6d, 0x45, 0x21, 0x02, // P0P?1..1@P0LmE!. + 0x11, 0x74, 0xc9, 0x94, 0x54, 0x4a, 0x45, 0x7b, 0x06, 0x00, 0xfd, 0xc6, 0x42, 0x46, 0x52, 0x92, // .t..TJE{....BFR. + 0xcb, 0x79, 0x4f, 0x8f, 0x6d, 0x40, 0x19, 0x2d, 0x3d, 0x24, 0xfe, 0x27, 0x24, 0x3d, 0x2e, 0x19, // .yO.m@.-=$.'$=.. + 0x3f, 0x6c, 0x8e, 0x4f, 0x00, 0x01, 0x00, 0x8f, 0xff, 0xec, 0x04, 0x33, 0x04, 0x4e, 0x00, 0x2b, // ?l.O.......3.N.+ + 0x00, 0x3b, 0x40, 0x38, 0x00, 0x04, 0x05, 0x01, 0x05, 0x04, 0x01, 0x70, 0x00, 0x01, 0x00, 0x05, // .;@8.......p.... + 0x01, 0x00, 0x6e, 0x00, 0x05, 0x05, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, 0x4b, 0x06, 0x01, 0x00, // ..n....[...GK... + 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, 0x02, 0x4c, 0x01, 0x00, 0x22, 0x20, 0x1c, 0x1b, 0x17, // ..[...E.L.." ... + 0x15, 0x0c, 0x0a, 0x06, 0x05, 0x00, 0x2b, 0x01, 0x2b, 0x07, 0x08, 0x14, 0x2b, 0x25, 0x32, 0x3e, // ......+.+...+%2> + 0x02, 0x37, 0x33, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, // .73..#"..554>.32 + 0x1e, 0x02, 0x15, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x02, // ...#..#"........ + 0x7b, 0x32, 0x5f, 0x4a, 0x2d, 0x01, 0xaf, 0x01, 0x49, 0x7a, 0x9e, 0x56, 0x7b, 0xb8, 0x7b, 0x3e, // {2_J-...Iz.V{.{> + 0x3e, 0x7b, 0xb8, 0x7b, 0x60, 0xa1, 0x75, 0x42, 0xaf, 0x01, 0x29, 0x46, 0x61, 0x38, 0x56, 0x75, // >{.{`.uB..)Fa8Vu + 0x48, 0x1f, 0x1f, 0x47, 0x75, 0x82, 0x20, 0x39, 0x4d, 0x2d, 0x48, 0x83, 0x63, 0x3b, 0x58, 0x95, // H..Gu. 9M-H.c;X. + 0xc3, 0x6c, 0x2a, 0x6b, 0xc4, 0x95, 0x58, 0x3d, 0x69, 0x90, 0x52, 0x31, 0x57, 0x42, 0x26, 0x45, // .l*k..X=i.R1WB&E + 0x6f, 0x8a, 0x46, 0x2a, 0x47, 0x8b, 0x6f, 0x45, 0x00, 0x02, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x1c, // o.F*G.oE........ + 0x06, 0x00, 0x00, 0x15, 0x00, 0x29, 0x00, 0x8a, 0x40, 0x0f, 0x08, 0x01, 0x05, 0x00, 0x21, 0x20, // .....)..@.....! + 0x02, 0x04, 0x05, 0x0d, 0x01, 0x02, 0x04, 0x03, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x1b, // ........JK..PX@. + 0x00, 0x01, 0x01, 0x3e, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, // ...>K....[...GK. + 0x04, 0x04, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x1b, 0x4b, 0xb0, 0x21, 0x50, // ...[....=.L.K.!P + 0x58, 0x40, 0x1f, 0x00, 0x01, 0x01, 0x3e, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, // X@....>K....[... + 0x47, 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, // GK...=K....[...E + 0x03, 0x4c, 0x1b, 0x40, 0x1f, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, // .L.@.....[...GK. + 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3d, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, // ...Y...=K....[.. + 0x03, 0x45, 0x03, 0x4c, 0x59, 0x59, 0x40, 0x09, 0x27, 0x29, 0x23, 0x11, 0x13, 0x24, 0x06, 0x08, // .E.LYY@.')#..$.. + 0x1a, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x11, 0x33, 0x11, 0x23, 0x27, 0x06, // .+.4>.32...3.#'. + 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x11, // .#"..53...32>.7. + 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x8b, 0x3d, 0x71, 0xa0, 0x63, 0x61, 0x91, 0x35, 0xb9, // &&#"....=q.ca.5. + 0xaa, 0x08, 0x36, 0x96, 0x64, 0x62, 0x9f, 0x70, 0x3e, 0xb9, 0x22, 0x47, 0x6e, 0x4d, 0x2f, 0x4c, // ..6.db.p>."GnM/L + 0x3e, 0x30, 0x12, 0x24, 0x7a, 0x5b, 0x4e, 0x6f, 0x47, 0x22, 0x02, 0x26, 0x79, 0xcb, 0x92, 0x52, // >0.$z[NoG".&y..R + 0x41, 0x3e, 0x02, 0x31, 0xfa, 0x00, 0x72, 0x42, 0x44, 0x54, 0x94, 0xc9, 0x74, 0x4f, 0x8e, 0x6c, // A>.1..rBDT..tO.l + 0x3f, 0x16, 0x29, 0x39, 0x23, 0x01, 0xf6, 0x42, 0x55, 0x40, 0x6d, 0x8f, 0x4f, 0x00, 0x00, 0x02, // ?.)9#..BU@m.O... + 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x04, 0x4e, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x40, 0x40, 0x3d, // .....E.N...+.@@= + 0x1b, 0x1a, 0x02, 0x03, 0x02, 0x01, 0x4a, 0x00, 0x05, 0x00, 0x02, 0x03, 0x05, 0x02, 0x61, 0x07, // ......J.......a. + 0x01, 0x04, 0x04, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x47, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x06, // ....[...GK....[. + 0x01, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x21, 0x20, 0x01, 0x00, 0x26, 0x25, 0x20, 0x2b, 0x21, 0x2b, // ...E.L! ..&% +!+ + 0x18, 0x16, 0x12, 0x11, 0x0c, 0x0a, 0x00, 0x1f, 0x01, 0x1f, 0x08, 0x08, 0x14, 0x2b, 0x05, 0x22, // .............+." + 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x21, 0x1e, 0x03, // ..554>.32....!.. + 0x33, 0x32, 0x36, 0x37, 0x17, 0x0e, 0x03, 0x03, 0x22, 0x0e, 0x02, 0x07, 0x21, 0x35, 0x2e, 0x03, // 3267...."...!5.. + 0x02, 0x8c, 0x72, 0xbf, 0x88, 0x4c, 0x54, 0x8b, 0xb1, 0x5d, 0x75, 0xaf, 0x74, 0x39, 0xfc, 0xfb, // ..r..LT..]u.t9.. + 0x03, 0x33, 0x59, 0x7c, 0x4b, 0x63, 0x9a, 0x33, 0x71, 0x1b, 0x51, 0x6a, 0x86, 0x67, 0x38, 0x64, // .3Y|Kc.3q.Qj.g8d + 0x50, 0x37, 0x0b, 0x02, 0x46, 0x03, 0x23, 0x44, 0x67, 0x14, 0x4e, 0x8c, 0xc0, 0x71, 0x2a, 0x83, // P7..F.#Dg.N..q*. + 0xcf, 0x8f, 0x4c, 0x51, 0x8f, 0xc2, 0x71, 0x53, 0x4a, 0x82, 0x61, 0x38, 0x50, 0x42, 0x58, 0x29, // ..LQ..qSJ.a8PBX) + 0x4b, 0x3a, 0x23, 0x03, 0xca, 0x29, 0x4f, 0x73, 0x4b, 0x0e, 0x36, 0x6a, 0x54, 0x34, 0x00, 0x01, // K:#..)OsK.6jT4.. + 0x00, 0x98, 0x00, 0x00, 0x04, 0x6b, 0x06, 0x2b, 0x00, 0x19, 0x00, 0x37, 0x40, 0x34, 0x0d, 0x01, // .....k.+...7@4.. + 0x03, 0x02, 0x0e, 0x01, 0x01, 0x03, 0x02, 0x4a, 0x00, 0x02, 0x00, 0x03, 0x01, 0x02, 0x03, 0x63, // .......J.......c + 0x05, 0x01, 0x00, 0x00, 0x01, 0x59, 0x04, 0x01, 0x01, 0x01, 0x3f, 0x4b, 0x07, 0x01, 0x06, 0x06, // .....Y....?K.... + 0x3d, 0x06, 0x4c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x19, 0x11, 0x13, 0x25, 0x25, 0x11, 0x11, 0x08, // =.L........%%... + 0x08, 0x1a, 0x2b, 0x21, 0x11, 0x21, 0x35, 0x21, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, // ..+!.!5!54>.32.. + 0x07, 0x26, 0x26, 0x23, 0x06, 0x06, 0x15, 0x15, 0x21, 0x15, 0x21, 0x11, 0x01, 0xc2, 0xfe, 0xd6, // .&&#....!.!..... + 0x01, 0x2a, 0x3d, 0x6f, 0x9c, 0x60, 0x42, 0x7d, 0x42, 0x16, 0x29, 0x6d, 0x3e, 0x82, 0x83, 0x01, // .*=o.`B}B.)m>... + 0xa1, 0xfe, 0x5f, 0x03, 0xab, 0x8f, 0x4c, 0x68, 0x9d, 0x6a, 0x36, 0x16, 0x11, 0x99, 0x0e, 0x15, // .._...Lh.j6..... + 0x01, 0x82, 0x85, 0x4c, 0x8f, 0xfc, 0x55, 0x00, 0x00, 0x02, 0x00, 0x8c, 0xfe, 0x56, 0x04, 0x1d, // ...L..U......V.. + 0x04, 0x4e, 0x00, 0x29, 0x00, 0x3f, 0x00, 0x8f, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x14, 0x08, // .N.).?..K..PX@.. + 0x01, 0x06, 0x00, 0x35, 0x34, 0x02, 0x05, 0x06, 0x21, 0x01, 0x04, 0x05, 0x16, 0x15, 0x02, 0x03, // ...54...!....... + 0x04, 0x04, 0x4a, 0x1b, 0x40, 0x14, 0x08, 0x01, 0x06, 0x01, 0x35, 0x34, 0x02, 0x05, 0x06, 0x21, // ..J.@.....54...! + 0x01, 0x04, 0x05, 0x16, 0x15, 0x02, 0x03, 0x04, 0x04, 0x4a, 0x59, 0x4b, 0xb0, 0x19, 0x50, 0x58, // .........JYK..PX + 0x40, 0x20, 0x00, 0x06, 0x06, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x05, 0x05, // @ ....[....GK... + 0x04, 0x5b, 0x00, 0x04, 0x04, 0x45, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x41, // .[...EK....[...A + 0x02, 0x4c, 0x1b, 0x40, 0x24, 0x00, 0x01, 0x01, 0x3f, 0x4b, 0x00, 0x06, 0x06, 0x00, 0x5b, 0x00, // .L.@$...?K....[. + 0x00, 0x00, 0x47, 0x4b, 0x00, 0x05, 0x05, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x45, 0x4b, 0x00, 0x03, // ..GK....[...EK.. + 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x41, 0x02, 0x4c, 0x59, 0x40, 0x0a, 0x29, 0x29, 0x27, 0x29, // ..[...A.LY@.))') + 0x25, 0x13, 0x24, 0x07, 0x08, 0x1b, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x37, // %.$...+.4>.32..7 + 0x33, 0x11, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x3e, // 3....#"..'7..32> + 0x02, 0x35, 0x35, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, // .55..#"..53...32 + 0x3e, 0x02, 0x37, 0x11, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x8c, 0x3b, 0x70, 0xa0, 0x65, // >.7...#"....;p.e + 0x64, 0x97, 0x35, 0x09, 0xa8, 0x43, 0x79, 0xa8, 0x66, 0x2a, 0x6c, 0x6f, 0x67, 0x25, 0x60, 0x22, // d.5..Cy.f*log%`" + 0x48, 0x4a, 0x4a, 0x25, 0x42, 0x6a, 0x4b, 0x28, 0x36, 0x93, 0x61, 0x63, 0xa0, 0x6f, 0x3c, 0xb9, // HJJ%BjK(6.ac.o<. + 0x21, 0x47, 0x6e, 0x4d, 0x30, 0x4d, 0x3d, 0x30, 0x12, 0x12, 0x30, 0x3e, 0x4c, 0x2e, 0x4e, 0x6f, // !GnM0M=0..0>L.No + 0x47, 0x21, 0x02, 0x26, 0x79, 0xcb, 0x92, 0x52, 0x47, 0x43, 0x76, 0xfb, 0xdd, 0x6b, 0xa6, 0x74, // G!.&y..RGCv..k.t + 0x3c, 0x13, 0x2b, 0x48, 0x35, 0x6f, 0x29, 0x39, 0x22, 0x0f, 0x26, 0x49, 0x6c, 0x46, 0x5d, 0x3e, // <.+H5o)9".&IlF]> + 0x41, 0x54, 0x94, 0xc9, 0x74, 0x4f, 0x8e, 0x6c, 0x3f, 0x17, 0x2a, 0x3a, 0x23, 0x01, 0xf0, 0x22, // AT..tO.l?.*:#.." + 0x38, 0x29, 0x17, 0x40, 0x6d, 0x8f, 0x4f, 0x00, 0x00, 0x01, 0x00, 0xae, 0x00, 0x00, 0x04, 0x2c, // 8).@m.O........, + 0x06, 0x00, 0x00, 0x15, 0x00, 0x49, 0xb6, 0x11, 0x00, 0x02, 0x01, 0x02, 0x01, 0x4a, 0x4b, 0xb0, // .....I.......JK. + 0x21, 0x50, 0x58, 0x40, 0x16, 0x00, 0x04, 0x04, 0x3e, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, // !PX@....>K....[. + 0x00, 0x00, 0x47, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x1b, 0x40, 0x16, 0x00, 0x02, // ..GK....=.L.@... + 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x04, 0x04, 0x01, 0x59, 0x03, 0x01, 0x01, // ..[...GK....Y... + 0x01, 0x3d, 0x01, 0x4c, 0x59, 0xb7, 0x11, 0x13, 0x23, 0x15, 0x22, 0x05, 0x08, 0x19, 0x2b, 0x01, // .=.LY...#."...+. + 0x36, 0x36, 0x37, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x07, 0x22, 0x06, 0x07, // 6672....#.4&.".. + 0x11, 0x23, 0x11, 0x33, 0x01, 0x67, 0x3a, 0xaa, 0x6a, 0x55, 0x8b, 0x62, 0x35, 0xb9, 0x7f, 0x76, // .#.3.g:.jU.b5..v + 0x59, 0x91, 0x2d, 0xb9, 0xb9, 0x03, 0x99, 0x55, 0x5f, 0x01, 0x31, 0x68, 0x9f, 0x6d, 0xfd, 0x57, // Y.-....U_.1h.m.W + 0x02, 0xab, 0x85, 0x82, 0x01, 0x57, 0x48, 0xfc, 0xee, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0xcb, // .....WH......... + 0x00, 0x00, 0x04, 0x55, 0x05, 0xc3, 0x00, 0x09, 0x00, 0x15, 0x00, 0x2d, 0x40, 0x2a, 0x00, 0x06, // ...U.......-@*.. + 0x06, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x44, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00, // ..[...DK....Y... + 0x3f, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x24, 0x23, // ?K.....Y...=.L$# + 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x08, 0x1b, 0x2b, 0x13, 0x21, 0x11, 0x21, 0x15, 0x21, 0x35, // ........+.!.!.!5 + 0x21, 0x11, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0xcb, // !.!.4632....#"&. + 0x02, 0x29, 0x01, 0x61, 0xfc, 0x76, 0x01, 0x70, 0xfe, 0x90, 0x01, 0x58, 0x37, 0x38, 0x37, 0x38, // .).a.v.p...X7878 + 0x38, 0x37, 0x38, 0x37, 0x04, 0x3a, 0xfc, 0x66, 0xa0, 0xa0, 0x02, 0xf9, 0x01, 0xbd, 0x2e, 0x3f, // 8787.:.f.......? + 0x3f, 0x2e, 0x2d, 0x3c, 0x3c, 0x00, 0x00, 0x02, 0x00, 0xd3, 0xfe, 0x4b, 0x03, 0x58, 0x05, 0xc3, // ?.-<<......K.X.. + 0x00, 0x17, 0x00, 0x23, 0x00, 0x35, 0x40, 0x32, 0x0b, 0x01, 0x02, 0x03, 0x0a, 0x01, 0x01, 0x02, // ...#.5@2........ + 0x02, 0x4a, 0x00, 0x05, 0x05, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x44, 0x4b, 0x00, 0x03, 0x03, 0x00, // .J....[...DK.... + 0x59, 0x00, 0x00, 0x00, 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x49, 0x01, // Y...?K....[...I. + 0x4c, 0x24, 0x23, 0x15, 0x44, 0x35, 0x10, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x21, 0x11, 0x14, 0x0e, // L$#.D5....+.!... + 0x02, 0x23, 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x11, 0x21, 0x01, // .#"&'7..32>.5.!. + 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0x2b, 0x02, 0x22, 0x39, // 4632....#"&.+."9 + 0x6d, 0x9d, 0x64, 0x39, 0x63, 0x37, 0x0d, 0x11, 0x34, 0x35, 0x31, 0x0e, 0x34, 0x5c, 0x44, 0x27, // m.d9c7..451.4.D' + 0xfe, 0x97, 0x01, 0x4f, 0x36, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x36, 0x04, 0x3a, 0xfb, 0xbf, // ...O68888886.:.. + 0x68, 0xa0, 0x6d, 0x39, 0x07, 0x0a, 0x98, 0x03, 0x05, 0x03, 0x01, 0x1b, 0x40, 0x69, 0x4d, 0x03, // h.m9........@iM. + 0xa0, 0x01, 0xbe, 0x2d, 0x3f, 0x3f, 0x2d, 0x2d, 0x3d, 0x3d, 0x00, 0x01, 0x00, 0xb0, 0x00, 0x00, // ...-??--==...... + 0x04, 0x6a, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x45, 0xb7, 0x0a, 0x06, 0x01, 0x03, 0x00, 0x02, 0x01, // .j.....E........ + 0x4a, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, 0x11, 0x00, 0x01, 0x01, 0x3e, 0x4b, 0x00, 0x02, 0x02, // JK.!PX@....>K... + 0x3f, 0x4b, 0x03, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x1b, 0x40, 0x17, 0x00, 0x01, 0x01, 0x00, // ?K....=.L.@..... + 0x59, 0x03, 0x01, 0x00, 0x00, 0x3d, 0x4b, 0x00, 0x02, 0x02, 0x3f, 0x4b, 0x03, 0x01, 0x00, 0x00, // Y....=K...?K.... + 0x3d, 0x00, 0x4c, 0x59, 0xb6, 0x12, 0x13, 0x11, 0x12, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x07, 0x11, // =.LY........+... + 0x23, 0x11, 0x33, 0x11, 0x37, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, 0xf2, 0x88, 0xba, 0xba, 0x79, // #.3.7.3..#.....y + 0x01, 0x63, 0xe1, 0xfe, 0x4a, 0x01, 0xf9, 0xeb, 0x01, 0xf9, 0x83, 0xfe, 0x8a, 0x06, 0x00, 0xfc, // .c..J........... + 0x54, 0x82, 0x01, 0x64, 0xfe, 0x3d, 0xfd, 0x89, 0x00, 0x01, 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, // T..d.=.........U + 0x06, 0x00, 0x00, 0x09, 0x00, 0x3f, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, 0x16, 0x00, 0x04, 0x04, // .....?K.!PX@.... + 0x00, 0x59, 0x00, 0x00, 0x00, 0x3e, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, // .Y...>K.....Y... + 0x3d, 0x02, 0x4c, 0x1b, 0x40, 0x14, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x04, 0x61, 0x03, 0x01, // =.L.@........a.. + 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x59, 0xb7, 0x11, 0x11, 0x11, 0x11, // ...Y...=.LY..... + 0x10, 0x05, 0x08, 0x19, 0x2b, 0x13, 0x21, 0x11, 0x21, 0x15, 0x21, 0x35, 0x21, 0x11, 0x21, 0xcb, // ....+.!.!.!5!.!. + 0x02, 0x29, 0x01, 0x61, 0xfc, 0x76, 0x01, 0x70, 0xfe, 0x90, 0x06, 0x00, 0xfa, 0xa0, 0xa0, 0xa0, // .).a.v.p........ + 0x04, 0xbf, 0x00, 0x01, 0x00, 0x5d, 0x00, 0x00, 0x04, 0x72, 0x04, 0x4e, 0x00, 0x22, 0x00, 0x71, // .....]...r.N.".q + 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x0c, 0x06, 0x01, 0x02, 0x03, 0x00, 0x1f, 0x16, 0x02, 0x02, // K..PX@.......... + 0x03, 0x02, 0x4a, 0x1b, 0x40, 0x0c, 0x06, 0x01, 0x02, 0x03, 0x07, 0x1f, 0x16, 0x02, 0x02, 0x03, // ..J.@........... + 0x02, 0x4a, 0x59, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x16, 0x05, 0x01, 0x03, 0x03, 0x00, 0x5b, // .JYK..PX@......[ + 0x08, 0x07, 0x01, 0x03, 0x00, 0x00, 0x47, 0x4b, 0x06, 0x04, 0x02, 0x02, 0x02, 0x3d, 0x02, 0x4c, // ......GK.....=.L + 0x1b, 0x40, 0x1a, 0x08, 0x01, 0x07, 0x07, 0x3f, 0x4b, 0x05, 0x01, 0x03, 0x03, 0x00, 0x5b, 0x01, // .@.....?K.....[. + 0x01, 0x00, 0x00, 0x47, 0x4b, 0x06, 0x04, 0x02, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x59, 0x40, 0x10, // ...GK.....=.LY@. + 0x00, 0x00, 0x00, 0x22, 0x00, 0x22, 0x13, 0x23, 0x15, 0x22, 0x13, 0x23, 0x23, 0x09, 0x08, 0x1b, // ...".".#.".##... + 0x2b, 0x01, 0x17, 0x36, 0x36, 0x37, 0x32, 0x17, 0x36, 0x36, 0x37, 0x32, 0x16, 0x15, 0x11, 0x23, // +..6672.6672...# + 0x11, 0x34, 0x07, 0x22, 0x0e, 0x02, 0x07, 0x11, 0x23, 0x11, 0x34, 0x26, 0x07, 0x22, 0x06, 0x07, // .4."....#.4&.".. + 0x11, 0x23, 0x11, 0x01, 0x03, 0x05, 0x21, 0x6b, 0x4c, 0x95, 0x32, 0x20, 0x69, 0x4b, 0x77, 0x80, // .#....!kL.2 iKw. + 0xb0, 0x7d, 0x21, 0x30, 0x20, 0x12, 0x03, 0xb0, 0x3a, 0x3f, 0x3a, 0x40, 0x0f, 0xb0, 0x04, 0x3a, // .}!0 ...:?:@...: + 0x66, 0x39, 0x40, 0x01, 0x74, 0x34, 0x3f, 0x01, 0x92, 0x94, 0xfc, 0xd8, 0x03, 0x2a, 0x88, 0x01, // f9@.t4?......*.. + 0x12, 0x1f, 0x29, 0x16, 0xfc, 0xbf, 0x03, 0x2b, 0x41, 0x46, 0x01, 0x2e, 0x26, 0xfc, 0xa3, 0x04, // ..)....+AF..&... + 0x3a, 0x00, 0x00, 0x01, 0x00, 0xae, 0x00, 0x00, 0x04, 0x29, 0x04, 0x4e, 0x00, 0x17, 0x00, 0x4d, // :........).N...M + 0xb6, 0x14, 0x01, 0x02, 0x01, 0x02, 0x01, 0x4a, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x13, 0x00, // .......JK..PX@.. + 0x02, 0x02, 0x00, 0x5b, 0x05, 0x04, 0x02, 0x00, 0x00, 0x47, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x3d, // ...[.....GK....= + 0x01, 0x4c, 0x1b, 0x40, 0x17, 0x05, 0x01, 0x04, 0x04, 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, // .L.@.....?K....[ + 0x00, 0x00, 0x00, 0x47, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x59, 0x40, 0x0d, 0x00, // ...GK....=.LY@.. + 0x00, 0x00, 0x17, 0x00, 0x17, 0x13, 0x25, 0x15, 0x23, 0x06, 0x08, 0x18, 0x2b, 0x01, 0x17, 0x36, // ......%.#...+..6 + 0x36, 0x37, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x23, 0x11, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, // 672....#.4..#".. + 0x11, 0x23, 0x11, 0x01, 0x54, 0x0d, 0x3b, 0xac, 0x6a, 0x55, 0x8b, 0x62, 0x35, 0xb9, 0x20, 0x3f, // .#..T.;.jU.b5. ? + 0x5b, 0x3b, 0x5d, 0x8d, 0x2a, 0xb9, 0x04, 0x3a, 0xa0, 0x54, 0x5f, 0x01, 0x30, 0x66, 0x9d, 0x6c, // [;].*..:.T_.0f.l + 0xfd, 0x51, 0x02, 0xab, 0x48, 0x64, 0x3e, 0x1c, 0x5d, 0x4c, 0xfc, 0xf8, 0x04, 0x3a, 0x00, 0x02, // .Q..Hd>.]L...:.. + 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x04, 0x4e, 0x00, 0x15, 0x00, 0x2b, 0x00, 0x1f, 0x40, 0x1c, // .z...R.N...+..@. + 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, // ....[...GK....[. + 0x01, 0x01, 0x45, 0x01, 0x4c, 0x29, 0x29, 0x29, 0x24, 0x04, 0x08, 0x18, 0x2b, 0x13, 0x34, 0x3e, // ..E.L)))$...+.4> + 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, // .32.......#"..53 + 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, // ...32>.554..#".. + 0x15, 0x7a, 0x44, 0x7f, 0xb6, 0x72, 0x73, 0xb7, 0x7f, 0x44, 0x44, 0x7f, 0xb6, 0x72, 0x73, 0xb7, // .zD..rs..DD..rs. + 0x7f, 0x44, 0xb9, 0x26, 0x4d, 0x74, 0x4d, 0x4c, 0x73, 0x4d, 0x26, 0x27, 0x4d, 0x73, 0x4d, 0x4d, // .D.&MtMLsM&'MsMM + 0x72, 0x4d, 0x26, 0x02, 0x27, 0x75, 0xc9, 0x94, 0x55, 0x55, 0x94, 0xc9, 0x75, 0x16, 0x75, 0xc8, // rM&.'u..UU..u.u. + 0x94, 0x54, 0x54, 0x94, 0xc8, 0x75, 0x50, 0x91, 0x6e, 0x40, 0x40, 0x6e, 0x91, 0x50, 0x16, 0x4f, // .TT..uP.n@@n.P.O + 0x91, 0x6e, 0x41, 0x41, 0x6e, 0x91, 0x4f, 0x00, 0x00, 0x02, 0x00, 0xad, 0xfe, 0x60, 0x04, 0x3f, // .nAAn.O......`.? + 0x04, 0x4e, 0x00, 0x15, 0x00, 0x27, 0x00, 0x62, 0x40, 0x0f, 0x0d, 0x01, 0x04, 0x02, 0x1f, 0x1e, // .N...'.b@....... + 0x02, 0x05, 0x04, 0x08, 0x01, 0x00, 0x05, 0x03, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x1b, // ........JK..PX@. + 0x00, 0x04, 0x04, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x3f, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, // ....[....?K....[ + 0x00, 0x00, 0x00, 0x45, 0x4b, 0x00, 0x01, 0x01, 0x41, 0x01, 0x4c, 0x1b, 0x40, 0x1f, 0x00, 0x02, // ...EK...A.L.@... + 0x02, 0x3f, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, 0x4b, 0x00, 0x05, 0x05, // .?K....[...GK... + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x4b, 0x00, 0x01, 0x01, 0x41, 0x01, 0x4c, 0x59, 0x40, 0x09, // .[...EK...A.LY@. + 0x25, 0x29, 0x23, 0x11, 0x13, 0x24, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, // %)#..$...+....#" + 0x26, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, // &'.#.3.6632...#4 + 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x04, 0x3f, // ..#".....32>.5.? + 0x38, 0x6c, 0x9f, 0x66, 0x63, 0x97, 0x36, 0xb9, 0xa9, 0x09, 0x36, 0x99, 0x65, 0x68, 0xa0, 0x6c, // 8l.fc.6...6.eh.l + 0x38, 0xb9, 0x23, 0x49, 0x70, 0x4e, 0x59, 0x79, 0x24, 0x24, 0x78, 0x5c, 0x4d, 0x70, 0x48, 0x23, // 8.#IpNYy$$x.MpH# + 0x02, 0x11, 0x74, 0xc9, 0x94, 0x54, 0x40, 0x3c, 0xfd, 0xf8, 0x05, 0xda, 0x76, 0x43, 0x47, 0x52, // ..t..T@<....vCGR + 0x92, 0xcb, 0x79, 0x4f, 0x8f, 0x6d, 0x40, 0x53, 0x41, 0xfd, 0xf7, 0x40, 0x51, 0x41, 0x6e, 0x90, // ..yO.m@SA..@QAn. + 0x4f, 0x00, 0x00, 0x02, 0x00, 0x8c, 0xfe, 0x60, 0x04, 0x1c, 0x04, 0x4e, 0x00, 0x15, 0x00, 0x29, // O......`...N...) + 0x00, 0x7a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x0f, 0x08, 0x01, 0x05, 0x00, 0x1f, 0x1e, 0x02, // .zK..PX@........ + 0x04, 0x05, 0x0d, 0x01, 0x03, 0x04, 0x03, 0x4a, 0x1b, 0x40, 0x0f, 0x08, 0x01, 0x05, 0x01, 0x1f, // .......J.@...... + 0x1e, 0x02, 0x04, 0x05, 0x0d, 0x01, 0x03, 0x04, 0x03, 0x4a, 0x59, 0x4b, 0xb0, 0x19, 0x50, 0x58, // .........JYK..PX + 0x40, 0x1b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x04, 0x04, // @.....[....GK... + 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x4b, 0x00, 0x02, 0x02, 0x41, 0x02, 0x4c, 0x1b, 0x40, 0x1f, // .[...EK...A.L.@. + 0x00, 0x01, 0x01, 0x3f, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, // ...?K....[...GK. + 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x4b, 0x00, 0x02, 0x02, 0x41, 0x02, 0x4c, 0x59, // ...[...EK...A.LY + 0x40, 0x09, 0x27, 0x29, 0x23, 0x11, 0x13, 0x24, 0x06, 0x08, 0x1a, 0x2b, 0x13, 0x34, 0x3e, 0x02, // @.')#..$...+.4>. + 0x33, 0x32, 0x16, 0x17, 0x37, 0x33, 0x11, 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // 32..73.#...#"..5 + 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x11, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, // 3...3267...#"... + 0x8c, 0x3a, 0x70, 0xa3, 0x68, 0x60, 0x93, 0x36, 0x08, 0xaa, 0xb9, 0x36, 0x90, 0x5e, 0x67, 0xa1, // .:p.h`.6...6.^g. + 0x70, 0x3b, 0xb9, 0x23, 0x48, 0x6f, 0x4d, 0x59, 0x78, 0x26, 0x13, 0x31, 0x3d, 0x49, 0x2b, 0x4d, // p;.#HoMYx&.1=I+M + 0x70, 0x49, 0x23, 0x02, 0x26, 0x79, 0xcb, 0x92, 0x52, 0x41, 0x3e, 0x6b, 0xfa, 0x26, 0x02, 0x02, // pI#.&y..RA>k.&.. + 0x39, 0x3d, 0x54, 0x94, 0xc9, 0x74, 0x4f, 0x90, 0x6e, 0x41, 0x50, 0x40, 0x02, 0x16, 0x1f, 0x33, // 9=T..tO.nAP@...3 + 0x26, 0x15, 0x42, 0x6f, 0x90, 0x4f, 0x00, 0x01, 0x01, 0x49, 0x00, 0x00, 0x04, 0x31, 0x04, 0x4e, // &.Bo.O...I...1.N + 0x00, 0x13, 0x00, 0x68, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x0c, 0x05, 0x01, 0x01, 0x00, 0x11, // ...hK..PX@...... + 0x0c, 0x06, 0x03, 0x02, 0x01, 0x02, 0x4a, 0x1b, 0x40, 0x0c, 0x05, 0x01, 0x01, 0x03, 0x11, 0x0c, // ......J.@....... + 0x06, 0x03, 0x02, 0x01, 0x02, 0x4a, 0x59, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x12, 0x00, 0x01, // .....JYK..PX@... + 0x01, 0x00, 0x5b, 0x03, 0x04, 0x02, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, // ..[.....GK...=.L + 0x1b, 0x40, 0x16, 0x00, 0x03, 0x03, 0x3f, 0x4b, 0x00, 0x01, 0x01, 0x00, 0x5b, 0x04, 0x01, 0x00, // .@....?K....[... + 0x00, 0x47, 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x59, 0x40, 0x0f, 0x02, 0x00, 0x10, 0x0f, // .GK...=.LY@..... + 0x0e, 0x0d, 0x0a, 0x08, 0x00, 0x13, 0x02, 0x13, 0x05, 0x08, 0x14, 0x2b, 0x01, 0x32, 0x1e, 0x02, // ...........+.2.. + 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x36, 0x03, // ..&&#"...#.3.66. + 0x73, 0x1a, 0x38, 0x33, 0x2b, 0x0e, 0x19, 0x36, 0x61, 0x35, 0x82, 0xa1, 0x26, 0xba, 0xb0, 0x09, // s.83+..6a5..&... + 0x42, 0xb9, 0x04, 0x4e, 0x03, 0x07, 0x0a, 0x06, 0xb5, 0x0c, 0x0b, 0x76, 0x6a, 0xfd, 0x4a, 0x04, // B..N.......vj.J. + 0x3a, 0xac, 0x59, 0x67, 0x00, 0x01, 0x00, 0xaf, 0xff, 0xec, 0x04, 0x36, 0x04, 0x4e, 0x00, 0x3b, // :.Yg.......6.N.; + 0x00, 0x33, 0x40, 0x30, 0x00, 0x01, 0x02, 0x04, 0x02, 0x01, 0x04, 0x70, 0x00, 0x04, 0x05, 0x02, // .3@0.......p.... + 0x04, 0x05, 0x6e, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x05, 0x05, // ..n....[...GK... + 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x03, 0x4c, 0x3a, 0x38, 0x34, 0x33, 0x2f, 0x2d, 0x24, 0x14, // .[...E.L:843/-$. + 0x2e, 0x06, 0x08, 0x17, 0x2b, 0x01, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, // ....+.4..'..54>. + 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, // 32...#4..#"..... + 0x02, 0x17, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x1e, 0x03, // ........#"..53.. + 0x33, 0x32, 0x36, 0x03, 0x7d, 0x1a, 0x3e, 0x66, 0x4c, 0x5d, 0x99, 0x6d, 0x3c, 0x3e, 0x70, 0x9b, // 326.}.>fL].m<>p. + 0x5d, 0x64, 0xa0, 0x70, 0x3d, 0xb9, 0x24, 0x40, 0x5b, 0x39, 0x3b, 0x59, 0x3b, 0x1e, 0x18, 0x3b, // ]d.p=.$@[9;Y;..; + 0x63, 0x4c, 0x64, 0x9e, 0x6c, 0x39, 0x41, 0x74, 0xa2, 0x60, 0x6e, 0xac, 0x77, 0x3f, 0xb9, 0x04, // cLd.l9At.`n.w?.. + 0x35, 0x4f, 0x60, 0x2f, 0x75, 0x88, 0x01, 0x1f, 0x21, 0x35, 0x2c, 0x25, 0x0f, 0x13, 0x36, 0x4b, // 5O`/u...!5,%..6K + 0x65, 0x43, 0x42, 0x73, 0x56, 0x32, 0x34, 0x5c, 0x7b, 0x47, 0x23, 0x43, 0x34, 0x20, 0x1a, 0x2c, // eCBsV24.{G#C4 ., + 0x3a, 0x1f, 0x20, 0x32, 0x28, 0x20, 0x0f, 0x15, 0x37, 0x4d, 0x66, 0x43, 0x48, 0x76, 0x54, 0x2e, // :. 2( ..7MfCHvT. + 0x3b, 0x61, 0x80, 0x45, 0x39, 0x4e, 0x30, 0x14, 0x56, 0x00, 0x00, 0x01, 0x00, 0x8e, 0xff, 0xec, // ;a.E9N0.V....... + 0x04, 0x29, 0x05, 0x40, 0x00, 0x1f, 0x00, 0x39, 0x40, 0x36, 0x0f, 0x01, 0x02, 0x01, 0x10, 0x01, // .).@...9@6...... + 0x03, 0x02, 0x02, 0x4a, 0x07, 0x01, 0x06, 0x00, 0x06, 0x72, 0x04, 0x01, 0x01, 0x01, 0x00, 0x59, // ...J.....r.....Y + 0x05, 0x01, 0x00, 0x00, 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x03, // ....?K....[...E. + 0x4c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, 0x11, 0x15, 0x29, 0x25, 0x11, 0x11, 0x08, 0x08, 0x1a, // L........)%..... + 0x2b, 0x01, 0x11, 0x21, 0x15, 0x21, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x17, // +..!.!....32>.7. + 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x21, 0x35, 0x21, 0x11, 0x02, 0x64, 0x01, 0x9c, // ..#"..5.!5!..d.. + 0xfe, 0x64, 0x20, 0x38, 0x49, 0x29, 0x1e, 0x40, 0x3d, 0x35, 0x11, 0x1a, 0x17, 0x42, 0x4e, 0x57, // .d 8I).@=5...BNW + 0x2b, 0x48, 0x7d, 0x5c, 0x35, 0xfe, 0xe4, 0x01, 0x1c, 0x05, 0x40, 0xfe, 0xfa, 0x8f, 0xfd, 0xb4, // +H}.5.....@..... + 0x3f, 0x52, 0x31, 0x14, 0x07, 0x0a, 0x0b, 0x04, 0x83, 0x0e, 0x15, 0x0f, 0x08, 0x29, 0x59, 0x8d, // ?R1..........)Y. + 0x64, 0x02, 0x4c, 0x8f, 0x01, 0x06, 0x00, 0x01, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x04, 0x3a, // d.L............: + 0x00, 0x17, 0x00, 0x44, 0xb5, 0x13, 0x01, 0x02, 0x01, 0x01, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, // ...D......JK..PX + 0x40, 0x12, 0x03, 0x01, 0x01, 0x01, 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x04, 0x01, 0x00, // @.....?K....[... + 0x00, 0x45, 0x00, 0x4c, 0x1b, 0x40, 0x16, 0x03, 0x01, 0x01, 0x01, 0x3f, 0x4b, 0x00, 0x04, 0x04, // .E.L.@.....?K... + 0x3d, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x59, 0xb7, 0x11, // =K....[...E.LY.. + 0x13, 0x25, 0x15, 0x22, 0x05, 0x08, 0x19, 0x2b, 0x25, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // .%."...+%..#"..5 + 0x11, 0x33, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x23, 0x03, 0x6c, // .3....3267.3.#.l + 0x36, 0xa2, 0x6a, 0x55, 0x8a, 0x62, 0x35, 0xb9, 0x1c, 0x38, 0x51, 0x35, 0x71, 0x8b, 0x22, 0xba, // 6.jU.b5..8Q5q.". + 0xa8, 0x95, 0x50, 0x59, 0x35, 0x70, 0xad, 0x79, 0x02, 0x83, 0xfd, 0x7b, 0x58, 0x74, 0x45, 0x1c, // ..PY5p.y...{XtE. + 0x5c, 0x4e, 0x03, 0x08, 0xfb, 0xc6, 0x00, 0x01, 0x00, 0x62, 0x00, 0x00, 0x04, 0x65, 0x04, 0x3a, // .N.......b...e.: + 0x00, 0x08, 0x00, 0x1b, 0x40, 0x18, 0x01, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x02, 0x01, 0x00, 0x00, // ....@......J.... + 0x3f, 0x4b, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x13, 0x03, 0x08, 0x17, 0x2b, 0x01, // ?K...=.L......+. + 0x17, 0x37, 0x01, 0x33, 0x01, 0x23, 0x01, 0x33, 0x02, 0x56, 0x11, 0x12, 0x01, 0x2f, 0xbd, 0xfe, // .7.3.#.3.V.../.. + 0x47, 0x8d, 0xfe, 0x43, 0xbe, 0x01, 0x0a, 0x43, 0x43, 0x03, 0x30, 0xfb, 0xc6, 0x04, 0x3a, 0x00, // G..C...CC.0...:. + 0x00, 0x01, 0x00, 0x30, 0x00, 0x00, 0x04, 0xa7, 0x04, 0x3a, 0x00, 0x12, 0x00, 0x21, 0x40, 0x1e, // ...0.....:...!@. + 0x0d, 0x06, 0x01, 0x03, 0x02, 0x00, 0x01, 0x4a, 0x04, 0x01, 0x02, 0x00, 0x00, 0x3f, 0x4b, 0x03, // .......J.....?K. + 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x11, 0x14, 0x11, 0x14, 0x13, 0x05, 0x08, 0x19, 0x2b, 0x01, // ...=.L........+. + 0x17, 0x37, 0x13, 0x33, 0x13, 0x17, 0x37, 0x13, 0x33, 0x03, 0x23, 0x03, 0x27, 0x07, 0x03, 0x23, // .7.3..7.3.#.'..# + 0x03, 0x33, 0x01, 0x52, 0x16, 0x1b, 0xad, 0x77, 0xac, 0x1d, 0x1b, 0x78, 0xa4, 0xe6, 0x92, 0xa9, // .3.R...w...x.... + 0x1c, 0x1b, 0xa7, 0x92, 0xe6, 0xa4, 0x01, 0x88, 0x9b, 0x9b, 0x02, 0xb2, 0xfd, 0x4e, 0xaa, 0xaa, // .............N.. + 0x02, 0xb2, 0xfb, 0xc6, 0x02, 0x97, 0xa8, 0xa8, 0xfd, 0x69, 0x04, 0x3a, 0x00, 0x01, 0x00, 0x6e, // .........i.:...n + 0x00, 0x00, 0x04, 0x72, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x1f, 0x40, 0x1c, 0x09, 0x06, 0x03, 0x03, // ...r.:....@..... + 0x01, 0x00, 0x01, 0x4a, 0x03, 0x01, 0x00, 0x00, 0x3f, 0x4b, 0x02, 0x01, 0x01, 0x01, 0x3d, 0x01, // ...J....?K....=. + 0x4c, 0x12, 0x12, 0x12, 0x11, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, // L.......+..3..#. + 0x01, 0x23, 0x01, 0x01, 0x33, 0x02, 0x6d, 0x01, 0x21, 0xd9, 0xfe, 0x6d, 0x01, 0x9e, 0xd6, 0xfe, // .#..3.m.!..m.... + 0xd5, 0xfe, 0xd5, 0xd8, 0x01, 0x9e, 0xfe, 0x6d, 0xd6, 0x02, 0xa9, 0x01, 0x91, 0xfd, 0xe9, 0xfd, // .......m........ + 0xdd, 0x01, 0x9c, 0xfe, 0x64, 0x02, 0x23, 0x02, 0x17, 0x00, 0x00, 0x01, 0x00, 0x44, 0xfe, 0x4b, // ....d.#......D.K + 0x04, 0x85, 0x04, 0x3a, 0x00, 0x1c, 0x00, 0x24, 0x40, 0x21, 0x1a, 0x01, 0x02, 0x02, 0x00, 0x01, // ...:...$@!...... + 0x4a, 0x04, 0x01, 0x00, 0x00, 0x3f, 0x4b, 0x03, 0x01, 0x02, 0x02, 0x01, 0x5c, 0x00, 0x01, 0x01, // J....?K......... + 0x49, 0x01, 0x4c, 0x16, 0x31, 0x24, 0x35, 0x12, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x17, 0x01, 0x33, // I.L.1$5....+...3 + 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x37, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, // ...#"..'72..32>. + 0x37, 0x37, 0x01, 0x33, 0x02, 0x3c, 0x30, 0x01, 0x4a, 0xcf, 0xfd, 0xdb, 0x13, 0x3b, 0x54, 0x70, // 77.3.<0.J....;Tp + 0x49, 0x0d, 0x20, 0x20, 0x1c, 0x09, 0x1e, 0x07, 0x18, 0x1a, 0x18, 0x07, 0x26, 0x3f, 0x31, 0x23, // I. ........&?1# + 0x0a, 0x4a, 0xfe, 0x2e, 0xcf, 0x01, 0x80, 0x83, 0x03, 0x3d, 0xfb, 0x1f, 0x2a, 0x5e, 0x50, 0x36, // .J.......=..*^P6 + 0x03, 0x05, 0x06, 0x02, 0x97, 0x02, 0x02, 0x01, 0x2a, 0x3a, 0x3e, 0x14, 0x90, 0x04, 0x07, 0x00, // ........*:>..... + 0x00, 0x01, 0x00, 0xa0, 0x00, 0x00, 0x04, 0x3d, 0x04, 0x3a, 0x00, 0x09, 0x00, 0x29, 0x40, 0x26, // .......=.:...)@& + 0x09, 0x01, 0x02, 0x03, 0x04, 0x01, 0x01, 0x00, 0x02, 0x4a, 0x00, 0x02, 0x02, 0x03, 0x59, 0x00, // .........J....Y. + 0x03, 0x03, 0x3f, 0x4b, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, // ..?K....Y...=.L. + 0x12, 0x11, 0x10, 0x04, 0x08, 0x18, 0x2b, 0x25, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, 0x21, // ......+%!.!5.!5! + 0x15, 0x01, 0x8c, 0x02, 0xb1, 0xfc, 0x63, 0x02, 0x86, 0xfd, 0x83, 0x03, 0x70, 0x97, 0x97, 0x88, // ......c.....p... + 0x03, 0x19, 0x99, 0x83, 0x00, 0x01, 0x01, 0x43, 0xfe, 0x92, 0x03, 0xe7, 0x06, 0x3d, 0x00, 0x2a, // .......C.....=.* + 0x00, 0x33, 0x40, 0x30, 0x21, 0x01, 0x01, 0x02, 0x01, 0x4a, 0x00, 0x03, 0x00, 0x04, 0x02, 0x03, // .3@0!....J...... + 0x04, 0x63, 0x00, 0x02, 0x00, 0x01, 0x05, 0x02, 0x01, 0x63, 0x00, 0x05, 0x00, 0x00, 0x05, 0x57, // .c.......c.....W + 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x05, 0x00, 0x4f, 0x2a, 0x29, 0x11, 0x19, 0x11, 0x19, // ....[....O*).... + 0x10, 0x06, 0x08, 0x19, 0x2b, 0x01, 0x2e, 0x05, 0x35, 0x35, 0x34, 0x26, 0x27, 0x35, 0x32, 0x36, // ....+...554&'526 + 0x35, 0x35, 0x34, 0x3e, 0x04, 0x37, 0x17, 0x0e, 0x03, 0x15, 0x15, 0x06, 0x06, 0x07, 0x16, 0x16, // 554>.7.......... + 0x17, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x03, 0xd2, 0x41, 0x6a, 0x54, 0x3d, 0x29, 0x14, 0x89, 0x8d, // ........AjT=)... + 0x8d, 0x89, 0x12, 0x26, 0x3b, 0x54, 0x6d, 0x45, 0x15, 0x48, 0x55, 0x2b, 0x0c, 0x01, 0x6e, 0x74, // ...&;TmE.HU+..nt + 0x74, 0x6e, 0x01, 0x14, 0x31, 0x51, 0x3e, 0xfe, 0x92, 0x02, 0x28, 0x44, 0x5a, 0x67, 0x6d, 0x35, // tn..1Q>...(DZgm5 + 0xa9, 0x90, 0x82, 0x01, 0x91, 0x81, 0x91, 0xaa, 0x35, 0x6d, 0x67, 0x5a, 0x44, 0x28, 0x02, 0x73, // ........5mgZD(.s + 0x02, 0x40, 0x63, 0x7c, 0x3d, 0xaa, 0x78, 0xb5, 0x2f, 0x2e, 0xb5, 0x77, 0xa9, 0x3e, 0x7b, 0x63, // .@c|=.x./..w.>{c + 0x40, 0x02, 0x00, 0x01, 0x02, 0x1c, 0xfe, 0x72, 0x02, 0xb1, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x13, // @......r........ + 0x40, 0x10, 0x00, 0x01, 0x01, 0x3c, 0x4b, 0x00, 0x00, 0x00, 0x41, 0x00, 0x4c, 0x11, 0x10, 0x02, // @..... + 0x00, 0x01, 0x01, 0x43, 0xfe, 0x92, 0x03, 0xe7, 0x06, 0x3d, 0x00, 0x28, 0x00, 0x37, 0x40, 0x34, // ...C.....=.(.7@4 + 0x09, 0x01, 0x04, 0x03, 0x01, 0x4a, 0x00, 0x02, 0x00, 0x01, 0x03, 0x02, 0x01, 0x63, 0x00, 0x03, // .....J.......c.. + 0x00, 0x04, 0x00, 0x03, 0x04, 0x63, 0x00, 0x00, 0x05, 0x05, 0x00, 0x57, 0x00, 0x00, 0x00, 0x05, // .....c.....W.... + 0x5b, 0x00, 0x05, 0x00, 0x05, 0x4f, 0x28, 0x27, 0x20, 0x1f, 0x1e, 0x1d, 0x14, 0x13, 0x12, 0x11, // [....O(' ....... + 0x10, 0x06, 0x08, 0x15, 0x2b, 0x05, 0x3e, 0x03, 0x35, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, // ....+.>.55467&&5 + 0x35, 0x34, 0x2e, 0x02, 0x27, 0x37, 0x1e, 0x05, 0x15, 0x15, 0x14, 0x16, 0x33, 0x15, 0x06, 0x06, // 54..'7......3... + 0x15, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x01, 0x43, 0x3d, 0x52, 0x31, 0x15, 0x6e, 0x74, 0x74, 0x6e, // .......C=R1.nttn + 0x0d, 0x2b, 0x54, 0x48, 0x14, 0x45, 0x6d, 0x54, 0x3b, 0x26, 0x12, 0x8a, 0x8c, 0x8c, 0x8a, 0x2c, // .+TH.EmT;&....., + 0x5d, 0x8e, 0x62, 0xfb, 0x02, 0x40, 0x63, 0x7b, 0x3e, 0xa9, 0x77, 0xb5, 0x2e, 0x2f, 0xb5, 0x78, // ].b..@c{>.w../.x + 0xaa, 0x3d, 0x7c, 0x63, 0x40, 0x02, 0x73, 0x02, 0x28, 0x44, 0x5a, 0x67, 0x6d, 0x35, 0xaa, 0x91, // .=|c@.s.(DZgm5.. + 0x81, 0x91, 0x01, 0x82, 0x90, 0xa9, 0x50, 0xa3, 0x86, 0x56, 0x02, 0x00, 0x00, 0x01, 0x00, 0x30, // ......P..V.....0 + 0x01, 0x92, 0x04, 0x9c, 0x03, 0x22, 0x00, 0x25, 0x00, 0x2e, 0x40, 0x2b, 0x25, 0x00, 0x02, 0x01, // .....".%..@+%... + 0x02, 0x13, 0x12, 0x02, 0x00, 0x03, 0x02, 0x4a, 0x00, 0x02, 0x00, 0x01, 0x03, 0x02, 0x01, 0x63, // .......J.......c + 0x00, 0x03, 0x00, 0x00, 0x03, 0x57, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x03, 0x00, 0x4f, // .....W....[....O + 0x26, 0x29, 0x26, 0x24, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, // &)&$...+....#".. + 0x27, 0x26, 0x26, 0x07, 0x22, 0x0e, 0x02, 0x15, 0x27, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, // '&&."...'4>.32.. + 0x17, 0x16, 0x16, 0x37, 0x32, 0x3e, 0x02, 0x35, 0x04, 0x9c, 0x2c, 0x50, 0x6e, 0x43, 0x2f, 0x51, // ...72>.5..,PnC/Q + 0x4d, 0x4b, 0x28, 0x37, 0x64, 0x38, 0x23, 0x3d, 0x2c, 0x1a, 0x86, 0x2c, 0x4f, 0x6e, 0x43, 0x2e, // MK(7d8#=,..,OnC. + 0x53, 0x4e, 0x4b, 0x27, 0x39, 0x61, 0x38, 0x23, 0x3d, 0x2d, 0x1a, 0x02, 0xe4, 0x42, 0x7a, 0x5e, // SNK'9a8#=-...Bz^ + 0x38, 0x12, 0x24, 0x34, 0x22, 0x2d, 0x35, 0x01, 0x1d, 0x31, 0x43, 0x26, 0x11, 0x42, 0x78, 0x5a, // 8.$4"-5..1C&.BxZ + 0x35, 0x13, 0x24, 0x34, 0x20, 0x30, 0x33, 0x01, 0x20, 0x35, 0x46, 0x26, 0x00, 0x02, 0x01, 0xf2, // 5.$4 03. 5F&.... + 0xfe, 0x8c, 0x02, 0xd8, 0x04, 0x4f, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x3b, 0x4b, 0xb0, 0x17, 0x50, // .....O.....;K..P + 0x58, 0x40, 0x15, 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, 0x4b, 0x00, 0x00, 0x00, // X@.....[...GK... + 0x01, 0x59, 0x00, 0x01, 0x01, 0x41, 0x01, 0x4c, 0x1b, 0x40, 0x12, 0x00, 0x00, 0x00, 0x01, 0x00, // .Y...A.L.@...... + 0x01, 0x5d, 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, 0x02, 0x4c, 0x59, 0xb6, 0x24, // .]....[...G.LY.$ + 0x23, 0x11, 0x10, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x33, 0x11, 0x23, 0x13, 0x14, 0x06, 0x23, 0x22, // #.....+.3.#...#" + 0x26, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x02, 0x0a, 0xb9, 0xb9, 0xce, 0x3b, 0x38, 0x39, 0x3a, // &54632......;89: + 0x3a, 0x39, 0x38, 0x3b, 0x02, 0x63, 0xfc, 0x29, 0x05, 0x52, 0x2e, 0x3f, 0x3f, 0x2e, 0x30, 0x41, // :98;.c.).R.??.0A + 0x41, 0x00, 0x00, 0x01, 0x00, 0x93, 0xff, 0x0b, 0x04, 0x37, 0x05, 0x26, 0x00, 0x31, 0x00, 0x4b, // A........7.&.1.K + 0x40, 0x48, 0x1c, 0x19, 0x02, 0x05, 0x03, 0x0e, 0x0b, 0x02, 0x02, 0x00, 0x02, 0x4a, 0x00, 0x04, // @H...........J.. + 0x05, 0x01, 0x05, 0x04, 0x01, 0x70, 0x00, 0x01, 0x00, 0x05, 0x01, 0x00, 0x6e, 0x00, 0x03, 0x00, // .....p......n... + 0x05, 0x04, 0x03, 0x05, 0x63, 0x06, 0x01, 0x00, 0x02, 0x02, 0x00, 0x57, 0x06, 0x01, 0x00, 0x00, // ....c......W.... + 0x02, 0x59, 0x00, 0x02, 0x00, 0x02, 0x4d, 0x01, 0x00, 0x28, 0x26, 0x22, 0x21, 0x1b, 0x1a, 0x0d, // .Y....M..(&"!... + 0x0c, 0x06, 0x05, 0x00, 0x31, 0x01, 0x31, 0x07, 0x08, 0x14, 0x2b, 0x25, 0x32, 0x3e, 0x02, 0x37, // ....1.1...+%2>.7 + 0x33, 0x0e, 0x03, 0x07, 0x15, 0x23, 0x35, 0x2e, 0x03, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x35, // 3....#5..554>.75 + 0x33, 0x15, 0x1e, 0x03, 0x15, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, // 3....#..#"...... + 0x02, 0x02, 0x7f, 0x32, 0x5f, 0x4a, 0x2d, 0x01, 0xaf, 0x01, 0x3a, 0x62, 0x83, 0x49, 0xb9, 0x60, // ...2_J-...:b.I.` + 0x91, 0x60, 0x31, 0x31, 0x60, 0x91, 0x60, 0xb9, 0x50, 0x84, 0x60, 0x35, 0xaf, 0x01, 0x29, 0x46, // .`11`.`.P.`5..)F + 0x61, 0x38, 0x56, 0x75, 0x48, 0x1f, 0x1f, 0x47, 0x75, 0x82, 0x20, 0x39, 0x4d, 0x2d, 0x40, 0x75, // a8VuH..Gu. 9M-@u + 0x5f, 0x42, 0x0c, 0xe8, 0xeb, 0x12, 0x63, 0x8e, 0xb0, 0x5f, 0x2a, 0x5f, 0xaf, 0x8f, 0x63, 0x12, // _B....c.._*_..c. + 0xe2, 0xde, 0x0c, 0x45, 0x66, 0x82, 0x49, 0x31, 0x57, 0x42, 0x26, 0x45, 0x6f, 0x8a, 0x46, 0x2a, // ...Ef.I1WB&Eo.F* + 0x47, 0x8b, 0x6f, 0x45, 0x00, 0x01, 0x00, 0x71, 0x00, 0x00, 0x04, 0x7c, 0x05, 0xc4, 0x00, 0x2b, // G.oE...q...|...+ + 0x00, 0x3e, 0x40, 0x3b, 0x00, 0x06, 0x07, 0x04, 0x07, 0x06, 0x04, 0x70, 0x08, 0x01, 0x04, 0x0a, // .>@;.......p.... + 0x09, 0x02, 0x03, 0x00, 0x04, 0x03, 0x61, 0x00, 0x07, 0x07, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x44, // ......a....[...D + 0x4b, 0x02, 0x01, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x00, 0x00, 0x00, // K.....Y...=.L... + 0x2b, 0x00, 0x2b, 0x15, 0x24, 0x14, 0x25, 0x11, 0x16, 0x11, 0x11, 0x14, 0x0b, 0x08, 0x1d, 0x2b, // +.+.$.%........+ + 0x01, 0x17, 0x14, 0x06, 0x07, 0x21, 0x07, 0x21, 0x35, 0x33, 0x3e, 0x03, 0x35, 0x27, 0x23, 0x35, // .....!.!53>.5'#5 + 0x33, 0x03, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, // 3.4>.32...#4..#" + 0x0e, 0x02, 0x15, 0x13, 0x21, 0x15, 0x01, 0xcf, 0x08, 0x1d, 0x20, 0x02, 0xe2, 0x01, 0xfb, 0xfa, // ....!..... ..... + 0x4b, 0x1b, 0x25, 0x16, 0x08, 0x08, 0xa5, 0xa0, 0x09, 0x43, 0x76, 0xa4, 0x60, 0x60, 0x98, 0x69, // K.%......Cv.``.i + 0x38, 0xba, 0x27, 0x43, 0x57, 0x30, 0x33, 0x59, 0x40, 0x25, 0x08, 0x01, 0x40, 0x02, 0x72, 0xe2, // 8.'CW03Y@%..@.r. + 0x45, 0x84, 0x30, 0x97, 0x97, 0x07, 0x38, 0x49, 0x51, 0x20, 0xe2, 0x98, 0x01, 0x05, 0x66, 0xa2, // E.0...8IQ ....f. + 0x71, 0x3c, 0x38, 0x66, 0x8e, 0x57, 0x3f, 0x59, 0x39, 0x1b, 0x27, 0x49, 0x6b, 0x43, 0xfe, 0xfb, // q<8f.W?Y9.'IkC.. + 0x98, 0x00, 0x00, 0x02, 0x00, 0x67, 0xff, 0xe5, 0x04, 0x92, 0x04, 0x38, 0x00, 0x23, 0x00, 0x37, // .....g.....8.#.7 + 0x00, 0x62, 0x40, 0x20, 0x1a, 0x18, 0x12, 0x10, 0x04, 0x03, 0x01, 0x21, 0x1b, 0x0f, 0x09, 0x04, // .b@ .......!.... + 0x02, 0x03, 0x22, 0x08, 0x06, 0x03, 0x00, 0x02, 0x03, 0x4a, 0x19, 0x11, 0x02, 0x01, 0x48, 0x23, // .."......J....H# + 0x07, 0x02, 0x00, 0x47, 0x4b, 0xb0, 0x1f, 0x50, 0x58, 0x40, 0x15, 0x00, 0x03, 0x03, 0x01, 0x5b, // ...GK..PX@.....[ + 0x00, 0x01, 0x01, 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, // ...?K....[...E.L + 0x1b, 0x40, 0x13, 0x00, 0x01, 0x00, 0x03, 0x02, 0x01, 0x03, 0x63, 0x00, 0x02, 0x02, 0x00, 0x5b, // .@........c....[ + 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x59, 0x40, 0x0a, 0x34, 0x32, 0x2a, 0x28, 0x16, 0x14, 0x22, // ...E.LY@.42*(.." + 0x04, 0x08, 0x15, 0x2b, 0x25, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x07, 0x27, 0x37, 0x26, 0x26, // ...+%..#"&'.'7&& + 0x35, 0x34, 0x36, 0x37, 0x27, 0x37, 0x17, 0x36, 0x36, 0x33, 0x32, 0x16, 0x17, 0x37, 0x17, 0x07, // 5467'7.6632..7.. + 0x16, 0x16, 0x15, 0x14, 0x06, 0x07, 0x17, 0x07, 0x01, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, // ............32>. + 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x03, 0xa3, 0x3e, 0x96, 0x55, 0x55, 0x95, 0x3e, // 54..#"....>.UU.> + 0x68, 0x83, 0x70, 0x26, 0x28, 0x2c, 0x2a, 0x78, 0x83, 0x75, 0x3c, 0x8f, 0x50, 0x50, 0x90, 0x3c, // h.p&(,*x.u<.PP.< + 0x78, 0x84, 0x7c, 0x28, 0x2c, 0x28, 0x24, 0x74, 0x84, 0xfd, 0x27, 0x32, 0x57, 0x77, 0x45, 0x45, // x.|(,($t..'2WwEE + 0x76, 0x57, 0x31, 0x31, 0x57, 0x76, 0x45, 0x45, 0x77, 0x57, 0x32, 0x54, 0x32, 0x36, 0x36, 0x30, // vW11WvEEwW2T2660 + 0x6c, 0x87, 0x73, 0x3f, 0x93, 0x51, 0x56, 0x9a, 0x41, 0x7c, 0x87, 0x7a, 0x2c, 0x30, 0x31, 0x2d, // l.s?.QV.A|.z,01- + 0x7d, 0x88, 0x80, 0x40, 0x98, 0x55, 0x50, 0x91, 0x3e, 0x77, 0x88, 0x02, 0x1e, 0x4a, 0x84, 0x63, // }..@.UP.>w...J.c + 0x3b, 0x3b, 0x63, 0x84, 0x4a, 0x4a, 0x84, 0x63, 0x3a, 0x3a, 0x63, 0x84, 0x00, 0x01, 0x00, 0x21, // ;;c.JJ.c::c....! + 0x00, 0x00, 0x04, 0xab, 0x05, 0xb0, 0x00, 0x17, 0x00, 0x33, 0x40, 0x30, 0x09, 0x01, 0x01, 0x08, // .........3@0.... + 0x01, 0x02, 0x03, 0x01, 0x02, 0x62, 0x07, 0x01, 0x03, 0x06, 0x01, 0x04, 0x05, 0x03, 0x04, 0x61, // .....b.........a + 0x0a, 0x01, 0x00, 0x00, 0x3c, 0x4b, 0x00, 0x05, 0x05, 0x3d, 0x05, 0x4c, 0x17, 0x16, 0x15, 0x14, // .....| + 0x01, 0x01, 0x85, 0xfe, 0x7b, 0xb9, 0xfe, 0x84, 0x01, 0x7c, 0xfe, 0x84, 0x01, 0x3c, 0xfe, 0x5b, // ....{....|...<.[ + 0xd4, 0x03, 0x0b, 0x02, 0xa5, 0xfd, 0x30, 0x79, 0x02, 0xa7, 0x78, 0xfe, 0xba, 0x01, 0x46, 0x78, // ......0y..x...Fx + 0xa9, 0x79, 0x02, 0xd0, 0x00, 0x02, 0x01, 0xff, 0xfe, 0xf2, 0x02, 0xb8, 0x05, 0xb0, 0x00, 0x03, // .y.............. + 0x00, 0x07, 0x00, 0x24, 0x40, 0x21, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x01, 0x5d, 0x00, 0x02, // ...$@!.......].. + 0x02, 0x03, 0x59, 0x00, 0x03, 0x03, 0x3c, 0x02, 0x4c, 0x00, 0x00, 0x07, 0x06, 0x05, 0x04, 0x00, // ..Y...<.L....... + 0x03, 0x00, 0x03, 0x11, 0x05, 0x08, 0x15, 0x2b, 0x01, 0x11, 0x33, 0x11, 0x11, 0x23, 0x11, 0x33, // .......+..3..#.3 + 0x01, 0xff, 0xb9, 0xb9, 0xb9, 0xfe, 0xf2, 0x03, 0x17, 0xfc, 0xe9, 0x03, 0xc8, 0x02, 0xf6, 0x00, // ................ + 0x00, 0x02, 0x00, 0x57, 0xfe, 0x11, 0x04, 0x74, 0x05, 0xc4, 0x00, 0x49, 0x00, 0x5f, 0x00, 0x39, // ...W...t...I._.9 + 0x40, 0x36, 0x58, 0x4d, 0x28, 0x03, 0x04, 0x01, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x05, 0x01, 0x05, // @6XM(.....J..... + 0x04, 0x01, 0x70, 0x00, 0x01, 0x02, 0x05, 0x01, 0x02, 0x6e, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, // ..p......n...... + 0x5f, 0x00, 0x05, 0x05, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x05, 0x4c, 0x3c, 0x3a, 0x36, 0x35, // _....[...D.L<:65 + 0x31, 0x2f, 0x24, 0x14, 0x2a, 0x06, 0x08, 0x17, 0x2b, 0x01, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, // 1/$.*...+....... + 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x37, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, // ...#"..57...32>. + 0x35, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x3e, // 54..'..5467&&54> + 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, // .32...#4..#".... + 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x25, 0x26, 0x26, 0x27, 0x06, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x17, // .....%&&'....... + 0x16, 0x16, 0x17, 0x36, 0x36, 0x37, 0x34, 0x2e, 0x02, 0x04, 0x74, 0x62, 0x58, 0x45, 0x49, 0x47, // ...6674...tbXEIG + 0x81, 0xb3, 0x6d, 0x62, 0xbb, 0x92, 0x5a, 0xb9, 0x3c, 0x60, 0x78, 0x3c, 0x46, 0x70, 0x4f, 0x2a, // ..mb..Z.<`x>-,==...Z.....N + 0x00, 0x23, 0x00, 0x37, 0x00, 0x4d, 0x00, 0x4e, 0x40, 0x4b, 0x00, 0x02, 0x03, 0x05, 0x03, 0x02, // .#.7.M.N@K...... + 0x05, 0x70, 0x0a, 0x01, 0x05, 0x04, 0x03, 0x05, 0x04, 0x6e, 0x00, 0x01, 0x00, 0x03, 0x02, 0x01, // .p.......n...... + 0x03, 0x63, 0x00, 0x04, 0x00, 0x00, 0x06, 0x04, 0x00, 0x63, 0x00, 0x07, 0x07, 0x08, 0x5b, 0x00, // .c.......c....[. + 0x08, 0x08, 0x47, 0x4b, 0x00, 0x06, 0x06, 0x09, 0x5b, 0x00, 0x09, 0x09, 0x45, 0x09, 0x4c, 0x00, // ..GK....[...E.L. + 0x00, 0x4a, 0x48, 0x40, 0x3e, 0x34, 0x32, 0x2a, 0x28, 0x00, 0x23, 0x00, 0x23, 0x29, 0x22, 0x12, // .JH@>42*(.#.#)". + 0x29, 0x22, 0x0b, 0x08, 0x19, 0x2b, 0x01, 0x14, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, // )"...+...#"..554 + 0x3e, 0x02, 0x33, 0x32, 0x16, 0x15, 0x23, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, // >.32..#&&#"..... + 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x25, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, // ..3267%...32>.54 + 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x34, 0x3e, 0x04, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, // ..#"...4>.32.... + 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x03, 0x5e, 0x83, 0x76, 0x3e, 0x60, 0x42, 0x24, 0x24, 0x42, // ..#"...^.v>`B$$B + 0x60, 0x3e, 0x76, 0x84, 0x6e, 0x01, 0x43, 0x48, 0x26, 0x39, 0x26, 0x12, 0x12, 0x26, 0x39, 0x26, // `>v.n.CH&9&..&9& + 0x48, 0x42, 0x01, 0xfd, 0xc1, 0x44, 0x78, 0xa3, 0x5f, 0x5e, 0xa3, 0x78, 0x44, 0x44, 0x78, 0xa3, // HB...Dx._^.xDDx. + 0x5e, 0x5f, 0xa3, 0x78, 0x44, 0x57, 0x25, 0x44, 0x61, 0x76, 0x8a, 0x4b, 0x71, 0xc2, 0x8f, 0x52, // ^_.xDW%Dav.Kq..R + 0x52, 0x8f, 0xc2, 0x71, 0x71, 0xc3, 0x8f, 0x52, 0x01, 0xbb, 0x74, 0x77, 0x2c, 0x4d, 0x6a, 0x3f, // R..qq..R..tw,Mj? + 0x57, 0x3e, 0x6b, 0x4e, 0x2c, 0x78, 0x73, 0x47, 0x42, 0x1e, 0x33, 0x47, 0x28, 0x58, 0x29, 0x46, // W>kN,xsGB.3G(X)F + 0x34, 0x1e, 0x42, 0x48, 0x63, 0x62, 0xad, 0x81, 0x4a, 0x4b, 0x81, 0xac, 0x62, 0x61, 0xab, 0x80, // 4.BHcb..JK..ba.. + 0x49, 0x49, 0x80, 0xab, 0x61, 0x4e, 0x8f, 0x7d, 0x66, 0x48, 0x28, 0x58, 0x97, 0xcc, 0x75, 0x75, // II..aN.}fH(X..uu + 0xcd, 0x99, 0x58, 0x58, 0x99, 0xcd, 0x00, 0x02, 0x01, 0x1c, 0x02, 0xb3, 0x03, 0xb1, 0x05, 0xc4, // ..XX............ + 0x00, 0x22, 0x00, 0x2f, 0x00, 0xb5, 0x4b, 0xb0, 0x23, 0x50, 0x58, 0x40, 0x0f, 0x14, 0x13, 0x02, // ."./..K.#PX@.... + 0x01, 0x02, 0x28, 0x01, 0x05, 0x06, 0x02, 0x01, 0x00, 0x05, 0x03, 0x4a, 0x1b, 0x40, 0x0f, 0x14, // ..(........J.@.. + 0x13, 0x02, 0x01, 0x02, 0x28, 0x01, 0x05, 0x06, 0x02, 0x01, 0x04, 0x05, 0x03, 0x4a, 0x59, 0x4b, // ....(........JYK + 0xb0, 0x16, 0x50, 0x58, 0x40, 0x1f, 0x08, 0x01, 0x05, 0x07, 0x04, 0x02, 0x00, 0x05, 0x00, 0x5f, // ..PX@.........._ + 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x4b, 0x00, 0x06, 0x06, 0x01, 0x5b, 0x00, // ....[...DK....[. + 0x01, 0x01, 0x47, 0x06, 0x4c, 0x1b, 0x4b, 0xb0, 0x23, 0x50, 0x58, 0x40, 0x1d, 0x00, 0x01, 0x00, // ..G.L.K.#PX@.... + 0x06, 0x05, 0x01, 0x06, 0x63, 0x08, 0x01, 0x05, 0x07, 0x04, 0x02, 0x00, 0x05, 0x00, 0x5f, 0x00, // ....c........._. + 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x02, 0x4c, 0x1b, 0x40, 0x24, 0x07, 0x01, 0x04, // ...[...D.L.@$... + 0x05, 0x00, 0x05, 0x04, 0x00, 0x70, 0x00, 0x01, 0x00, 0x06, 0x05, 0x01, 0x06, 0x63, 0x08, 0x01, // .....p.......c.. + 0x05, 0x00, 0x00, 0x05, 0x00, 0x5f, 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x02, // ....._....[...D. + 0x4c, 0x59, 0x59, 0x40, 0x15, 0x24, 0x23, 0x00, 0x00, 0x2b, 0x29, 0x23, 0x2f, 0x24, 0x2f, 0x00, // LYY@.$#..+)#/$/. + 0x22, 0x00, 0x22, 0x27, 0x23, 0x24, 0x24, 0x09, 0x08, 0x18, 0x2b, 0x01, 0x26, 0x27, 0x06, 0x06, // "."'#$$...+.&'.. + 0x07, 0x22, 0x26, 0x35, 0x34, 0x36, 0x33, 0x33, 0x35, 0x26, 0x26, 0x23, 0x22, 0x06, 0x07, 0x27, // ."&546335&&#"..' + 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x16, 0x17, 0x25, 0x32, 0x3e, 0x02, 0x37, // >.32.......%2>.7 + 0x35, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x03, 0x0c, 0x0f, 0x06, 0x1e, 0x70, 0x54, 0x76, 0x83, // 5#".........pTv. + 0xad, 0x9e, 0x8d, 0x01, 0x3e, 0x3f, 0x43, 0x51, 0x01, 0xa1, 0x01, 0x2d, 0x51, 0x72, 0x45, 0x41, // ....>?CQ...-QrEA + 0x6b, 0x4b, 0x2a, 0x0c, 0x0e, 0xfe, 0x8b, 0x1b, 0x3b, 0x33, 0x27, 0x08, 0x8c, 0x4f, 0x5b, 0x40, // kK*.....;3'..O[@ + 0x02, 0xc1, 0x2c, 0x35, 0x2b, 0x43, 0x01, 0x7a, 0x69, 0x70, 0x77, 0x34, 0x41, 0x46, 0x35, 0x34, // ..,5+C.zipw4AF54 + 0x0c, 0x33, 0x56, 0x3e, 0x22, 0x23, 0x45, 0x68, 0x44, 0xfe, 0xc6, 0x30, 0x58, 0x2d, 0x7b, 0x11, // .3V>"#EhD..0X-{. + 0x1d, 0x24, 0x12, 0x6d, 0x42, 0x31, 0x2d, 0x31, 0xff, 0xff, 0x00, 0xd4, 0x00, 0x76, 0x03, 0xd7, // .$.mB1-1.....v.. + 0x03, 0x92, 0x02, 0x27, 0x01, 0x74, 0xff, 0x48, 0xff, 0xdd, 0x01, 0x07, 0x01, 0x74, 0x00, 0x97, // ...'.t.H.....t.. + 0xff, 0xdd, 0x00, 0x12, 0xb1, 0x00, 0x01, 0xb8, 0xff, 0xdd, 0xb0, 0x33, 0x2b, 0xb1, 0x01, 0x01, // ...........3+... + 0xb8, 0xff, 0xdd, 0xb0, 0x33, 0x2b, 0x00, 0x01, 0x00, 0xbd, 0x01, 0x77, 0x03, 0xfb, 0x03, 0x20, // ....3+.....w... + 0x00, 0x05, 0x00, 0x3e, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x16, 0x00, 0x00, 0x01, 0x01, 0x00, // ...>K..PX@...... + 0x67, 0x00, 0x02, 0x01, 0x01, 0x02, 0x55, 0x00, 0x02, 0x02, 0x01, 0x59, 0x00, 0x01, 0x02, 0x01, // g.....U....Y.... + 0x4d, 0x1b, 0x40, 0x15, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x02, 0x01, 0x01, 0x02, 0x55, 0x00, // M.@.....s.....U. + 0x02, 0x02, 0x01, 0x59, 0x00, 0x01, 0x02, 0x01, 0x4d, 0x59, 0xb5, 0x11, 0x11, 0x10, 0x03, 0x08, // ...Y....MY...... + 0x17, 0x2b, 0x01, 0x23, 0x11, 0x21, 0x35, 0x21, 0x03, 0xfb, 0xb9, 0xfd, 0x7b, 0x03, 0x3e, 0x01, // .+.#.!5!....{.>. + 0x77, 0x01, 0x08, 0xa1, 0x00, 0x04, 0x00, 0x57, 0xff, 0xeb, 0x04, 0x80, 0x04, 0x4d, 0x00, 0x13, // w......W.....M.. + 0x00, 0x27, 0x00, 0x37, 0x00, 0x40, 0x00, 0x4c, 0x40, 0x49, 0x34, 0x01, 0x07, 0x08, 0x01, 0x4a, // .'.7.@.L@I4....J + 0x06, 0x01, 0x04, 0x07, 0x02, 0x07, 0x04, 0x02, 0x70, 0x00, 0x05, 0x00, 0x09, 0x08, 0x05, 0x09, // ........p....... + 0x63, 0x00, 0x08, 0x0a, 0x01, 0x07, 0x04, 0x08, 0x07, 0x61, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, // c........a....[. + 0x00, 0x00, 0x47, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x45, 0x01, 0x4c, 0x28, // ..GK....[...E.L( + 0x28, 0x40, 0x3e, 0x3a, 0x38, 0x28, 0x37, 0x28, 0x37, 0x18, 0x21, 0x15, 0x28, 0x28, 0x28, 0x24, // (@>:8(7(7.!.((($ + 0x0b, 0x08, 0x1b, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, // ...+.4>.32...... + 0x23, 0x22, 0x2e, 0x02, 0x37, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, // #"..7...32>.54.. + 0x23, 0x22, 0x0e, 0x02, 0x05, 0x15, 0x23, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, // #"....#.32...... + 0x13, 0x23, 0x27, 0x27, 0x33, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x57, 0x52, 0x8f, 0xc3, // .#''36654&##WR.. + 0x71, 0x71, 0xc2, 0x8f, 0x52, 0x52, 0x8f, 0xc2, 0x71, 0x71, 0xc3, 0x8f, 0x52, 0x57, 0x44, 0x78, // qq..RR..qq..RWDx + 0xa3, 0x5f, 0x5e, 0xa3, 0x78, 0x44, 0x44, 0x78, 0xa3, 0x5e, 0x5f, 0xa3, 0x78, 0x44, 0x01, 0x4e, // ._^.xDDx.^_.xD.N + 0x6b, 0xd3, 0x37, 0x58, 0x3f, 0x22, 0x46, 0x42, 0x93, 0x6e, 0x78, 0x7d, 0x77, 0x30, 0x46, 0x3c, // k.7X?"FB.nx}w0F< + 0x49, 0x68, 0x02, 0x1c, 0x75, 0xcd, 0x98, 0x57, 0x57, 0x98, 0xcd, 0x75, 0x75, 0xcd, 0x97, 0x58, // Ih..u..WW..uu..X + 0x58, 0x97, 0xcd, 0x75, 0x62, 0xab, 0x80, 0x4a, 0x4a, 0x80, 0xab, 0x62, 0x62, 0xac, 0x7f, 0x49, // X..ub..JJ..bb..I + 0x49, 0x7f, 0xac, 0x99, 0xfd, 0x02, 0x7b, 0x18, 0x30, 0x48, 0x30, 0x38, 0x4e, 0x16, 0xfe, 0xe1, // I.....{.0H08N... + 0xfd, 0x61, 0x01, 0x2e, 0x2a, 0x37, 0x2c, 0x00, 0x00, 0x01, 0x01, 0x01, 0x05, 0x21, 0x03, 0xcb, // .a..*7,......!.. + 0x05, 0xb0, 0x00, 0x03, 0x00, 0x13, 0x40, 0x10, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, // ......@.....Y... + 0x3c, 0x00, 0x4c, 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x03, 0xcb, 0xfd, // <.L.....+.!5!... + 0x36, 0x02, 0xca, 0x05, 0x21, 0x8f, 0x00, 0x02, 0x01, 0x69, 0x03, 0xc0, 0x03, 0x62, 0x05, 0xc4, // 6...!....i...b.. + 0x00, 0x13, 0x00, 0x27, 0x00, 0x1f, 0x40, 0x1c, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, // ...'..@.....[... + 0x44, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x3f, 0x01, 0x4c, 0x28, 0x28, 0x28, // DK....[...?.L((( + 0x24, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, // $...+.4>.32..... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x37, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, // .#"..7...32>.54. + 0x02, 0x23, 0x22, 0x0e, 0x02, 0x01, 0x69, 0x29, 0x45, 0x5d, 0x34, 0x33, 0x5b, 0x44, 0x28, 0x28, // .#"...i)E]43[D(( + 0x44, 0x5b, 0x33, 0x34, 0x5d, 0x45, 0x29, 0x7c, 0x15, 0x23, 0x30, 0x1b, 0x1b, 0x2e, 0x23, 0x13, // D[34]E)|.#0...#. + 0x13, 0x23, 0x2e, 0x1b, 0x1b, 0x30, 0x23, 0x15, 0x04, 0xc0, 0x35, 0x5f, 0x47, 0x29, 0x29, 0x47, // .#...0#...5_G))G + 0x5f, 0x35, 0x35, 0x5e, 0x45, 0x28, 0x28, 0x45, 0x5d, 0x36, 0x1b, 0x2f, 0x23, 0x13, 0x13, 0x23, // _55^E((E]6./#..# + 0x2f, 0x1b, 0x1c, 0x31, 0x24, 0x14, 0x14, 0x24, 0x31, 0x00, 0x00, 0x02, 0x00, 0x9c, 0x00, 0x01, // /..1$..$1....... + 0x04, 0x30, 0x04, 0xf3, 0x00, 0x0b, 0x00, 0x0f, 0x00, 0x2b, 0x40, 0x28, 0x04, 0x01, 0x00, 0x03, // .0.......+@(.... + 0x01, 0x01, 0x02, 0x00, 0x01, 0x61, 0x00, 0x05, 0x00, 0x02, 0x07, 0x05, 0x02, 0x61, 0x00, 0x07, // .....a.......a.. + 0x07, 0x06, 0x59, 0x00, 0x06, 0x06, 0x3d, 0x06, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, // ..Y...=.L....... + 0x10, 0x08, 0x08, 0x1c, 0x2b, 0x01, 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, // ....+.!.!.#.!5!. + 0x33, 0x01, 0x21, 0x35, 0x21, 0x02, 0xc5, 0x01, 0x6b, 0xfe, 0x95, 0xa8, 0xfe, 0x7f, 0x01, 0x81, // 3.!5!...k....... + 0xa8, 0x01, 0x41, 0xfc, 0xbd, 0x03, 0x43, 0x03, 0x57, 0x98, 0xfe, 0x62, 0x01, 0x9e, 0x98, 0x01, // ..A...C.W..b.... + 0x9c, 0xfb, 0x0e, 0x97, 0x00, 0x01, 0x01, 0x3c, 0x02, 0x9b, 0x03, 0xa6, 0x05, 0xbb, 0x00, 0x1e, // .......<........ + 0x00, 0x96, 0xb5, 0x02, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x1a, // ........JK..PX@. + 0x00, 0x02, 0x01, 0x04, 0x01, 0x02, 0x04, 0x70, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x5d, 0x00, // .......p......]. + 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x3c, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x0c, 0x50, 0x58, // ...[...<.L.K..PX + 0x40, 0x1a, 0x00, 0x02, 0x01, 0x04, 0x01, 0x02, 0x04, 0x70, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, // @........p...... + 0x5d, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x0e, // ]....[...D.L.K.. + 0x50, 0x58, 0x40, 0x1a, 0x00, 0x02, 0x01, 0x04, 0x01, 0x02, 0x04, 0x70, 0x00, 0x04, 0x00, 0x00, // PX@........p.... + 0x04, 0x00, 0x5d, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x3c, 0x01, 0x4c, 0x1b, 0x40, // ..]....[...<.L.@ + 0x1a, 0x00, 0x02, 0x01, 0x04, 0x01, 0x02, 0x04, 0x70, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x5d, // ........p......] + 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x44, 0x01, 0x4c, 0x59, 0x59, 0x59, 0xb7, 0x1a, // ....[...D.LYYY.. + 0x24, 0x12, 0x27, 0x10, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x21, 0x35, 0x01, 0x36, 0x36, 0x35, 0x34, // $.'....+.!5.6654 + 0x26, 0x23, 0x22, 0x06, 0x07, 0x23, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, // &#"..#4>.32..... + 0x02, 0x07, 0x07, 0x21, 0x03, 0xa6, 0xfd, 0xa9, 0x01, 0x20, 0x41, 0x38, 0x42, 0x3a, 0x4a, 0x47, // ...!..... A8B:JG + 0x01, 0x9e, 0x2a, 0x4e, 0x6f, 0x45, 0x42, 0x6a, 0x4a, 0x28, 0x1b, 0x33, 0x47, 0x2b, 0xaf, 0x01, // ..*NoEBjJ(.3G+.. + 0x8f, 0x02, 0x9b, 0x6c, 0x01, 0x0f, 0x3c, 0x57, 0x23, 0x31, 0x3d, 0x4b, 0x3a, 0x36, 0x60, 0x47, // ...l..W7(GEG'.....C + 0x02, 0x8f, 0x03, 0x9f, 0x05, 0xba, 0x00, 0x2f, 0x00, 0x76, 0xb5, 0x18, 0x01, 0x07, 0x00, 0x01, // ......./.v...... + 0x4a, 0x4b, 0xb0, 0x2c, 0x50, 0x58, 0x40, 0x2c, 0x00, 0x02, 0x01, 0x00, 0x01, 0x02, 0x00, 0x70, // JK.,PX@,.......p + 0x00, 0x05, 0x07, 0x06, 0x07, 0x05, 0x06, 0x70, 0x00, 0x06, 0x00, 0x04, 0x06, 0x04, 0x5f, 0x00, // .......p......_. + 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x3c, 0x4b, 0x00, 0x07, 0x07, 0x00, 0x5b, 0x00, 0x00, // ...[....3 + 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, // 2...........#".. + 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x27, 0x34, 0x26, 0x23, 0x23, 0x02, 0x0e, 0x54, 0x46, // 53..326'4&##..TF + 0x4c, 0x42, 0x43, 0x39, 0x4a, 0x01, 0x9d, 0x2d, 0x4d, 0x68, 0x3c, 0x40, 0x6c, 0x4e, 0x2b, 0x47, // LBC9J..-Mh<@lN+G + 0x41, 0x96, 0x2f, 0x53, 0x70, 0x40, 0x39, 0x6b, 0x53, 0x33, 0x9e, 0x01, 0x4f, 0x41, 0x44, 0x4c, // A./Sp@9kS3..OADL + 0x01, 0x57, 0x48, 0x54, 0x04, 0x65, 0x3a, 0x33, 0x2d, 0x3a, 0x30, 0x2c, 0x33, 0x52, 0x39, 0x1f, // .WHT.e:3-:0,3R9. + 0x1d, 0x39, 0x54, 0x37, 0x38, 0x5a, 0x19, 0x2a, 0x8e, 0x38, 0x56, 0x3a, 0x1f, 0x1b, 0x39, 0x58, // .9T78Z.*.8V:..9X + 0x3d, 0x2e, 0x3b, 0x3c, 0x33, 0x3f, 0x34, 0x00, 0x00, 0x01, 0x01, 0x9a, 0x04, 0xbf, 0x03, 0x32, // =.;<3?4........2 + 0x05, 0xc9, 0x00, 0x03, 0x00, 0xda, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, // ......K..PX@.... + 0x01, 0x73, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0c, 0x50, 0x58, 0x40, 0x0b, // .s...<.L.K..PX@. + 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0e, 0x50, // ....s...>.L.K..P + 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x1b, 0x4b, // X@.....s...<.L.K + 0xb0, 0x10, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, 0x3e, 0x00, // ..PX@.....s...>. + 0x4c, 0x1b, 0x4b, 0xb0, 0x12, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, // L.K..PX@.....s.. + 0x00, 0x3c, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x16, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, // .<.L.K..PX@..... + 0x73, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x17, 0x50, 0x58, 0x40, 0x0b, 0x00, // s...>.L.K..PX@.. + 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x19, 0x50, 0x58, // ...s...<.L.K..PX + 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, // @.....s...>.L.K. + 0x1b, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x4c, // .PX@.....s...<.L + 0x1b, 0x4b, 0xb0, 0x2a, 0x50, 0x58, 0x40, 0x0b, 0x00, 0x01, 0x00, 0x01, 0x73, 0x00, 0x00, 0x00, // .K.*PX@.....s... + 0x3e, 0x00, 0x4c, 0x1b, 0x40, 0x09, 0x00, 0x00, 0x01, 0x00, 0x72, 0x00, 0x01, 0x01, 0x69, 0x59, // >.L.@.....r...iY + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0xb4, 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, // YYYYYYYYY......+ + 0x01, 0x33, 0x01, 0x23, 0x02, 0x52, 0xe0, 0xfe, 0xf4, 0x8c, 0x05, 0xc9, 0xfe, 0xf6, 0x00, 0x01, // .3.#.R.......... + 0x00, 0xbc, 0xfe, 0x60, 0x04, 0x10, 0x04, 0x3a, 0x00, 0x16, 0x00, 0x5d, 0x40, 0x0b, 0x09, 0x01, // ...`...:...]@... + 0x00, 0x01, 0x13, 0x0e, 0x02, 0x02, 0x00, 0x02, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x18, // ........JK..PX@. + 0x06, 0x05, 0x02, 0x01, 0x01, 0x3f, 0x4b, 0x00, 0x00, 0x00, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, // .....?K....[.... + 0x3d, 0x4b, 0x00, 0x04, 0x04, 0x41, 0x04, 0x4c, 0x1b, 0x40, 0x1c, 0x06, 0x05, 0x02, 0x01, 0x01, // =K...A.L.@...... + 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x4b, 0x00, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, // ?K...=K....[...E + 0x4b, 0x00, 0x04, 0x04, 0x41, 0x04, 0x4c, 0x59, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x16, // K...A.LY@....... + 0x12, 0x23, 0x11, 0x13, 0x25, 0x07, 0x08, 0x19, 0x2b, 0x01, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, // .#..%...+.....32 + 0x36, 0x37, 0x11, 0x33, 0x11, 0x23, 0x27, 0x06, 0x06, 0x23, 0x22, 0x27, 0x11, 0x23, 0x11, 0x01, // 67.3.#'..#"'.#.. + 0x75, 0x20, 0x3b, 0x51, 0x30, 0x6b, 0x7d, 0x1d, 0xba, 0xa7, 0x09, 0x2c, 0x81, 0x5a, 0x92, 0x52, // u ;Q0k}....,.Z.R + 0xb9, 0x04, 0x3a, 0xfd, 0x92, 0x64, 0x80, 0x4a, 0x1c, 0x52, 0x47, 0x03, 0x1f, 0xfb, 0xc6, 0x74, // ..:..d.J.RG....t + 0x41, 0x47, 0x49, 0xfe, 0x2b, 0x05, 0xda, 0x00, 0x00, 0x01, 0x00, 0xd3, 0x00, 0x00, 0x03, 0xd0, // AGI.+........... + 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x1f, 0x40, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x01, 0x01, // ......@.....[... + 0x3c, 0x4b, 0x03, 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0e, 0x28, // .3 + 0x21, 0x11, 0x03, 0x16, 0x57, 0x76, 0xb7, 0x7e, 0x41, 0x41, 0x7e, 0xb7, 0x76, 0x01, 0x11, 0x02, // !...Wv.~AA~.v... + 0x08, 0x46, 0x7c, 0xac, 0x66, 0x65, 0xab, 0x7d, 0x47, 0xfa, 0x50, 0x00, 0x00, 0x01, 0x01, 0xf8, // .F|.fe.}G.P..... + 0x02, 0x6b, 0x02, 0xde, 0x03, 0x49, 0x00, 0x0b, 0x00, 0x18, 0x40, 0x15, 0x00, 0x00, 0x01, 0x01, // .k...I....@..... + 0x00, 0x57, 0x00, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x01, 0x00, 0x01, 0x4f, 0x24, 0x22, 0x02, 0x08, // .W....[....O$".. + 0x16, 0x2b, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0xf8, // .+.4632....#"&.. + 0x3a, 0x39, 0x38, 0x3b, 0x3b, 0x38, 0x39, 0x3a, 0x02, 0xd9, 0x30, 0x40, 0x40, 0x30, 0x2f, 0x3f, // :98;;89:..0@@0/? + 0x3f, 0x00, 0x00, 0x01, 0x01, 0xcd, 0xfe, 0x4d, 0x03, 0x03, 0x00, 0x00, 0x00, 0x15, 0x00, 0x26, // ?......M.......& + 0x40, 0x23, 0x14, 0x01, 0x02, 0x01, 0x02, 0x01, 0x4a, 0x03, 0x01, 0x02, 0x01, 0x02, 0x72, 0x00, // @#......J.....r. + 0x01, 0x01, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x49, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x15, // .......I.L...... + 0x11, 0x18, 0x04, 0x08, 0x16, 0x2b, 0x21, 0x07, 0x1e, 0x03, 0x15, 0x14, 0x06, 0x07, 0x27, 0x32, // .....+!.......'2 + 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x37, 0x02, 0x76, 0x0c, 0x1d, 0x37, 0x2b, 0x1a, 0x9e, // >.54..'7.v..7+.. + 0x91, 0x07, 0x22, 0x3c, 0x2d, 0x1b, 0x14, 0x29, 0x3c, 0x28, 0x1f, 0x34, 0x05, 0x18, 0x28, 0x3d, // .."<-..)<(.4..(= + 0x2b, 0x61, 0x70, 0x01, 0x6b, 0x0b, 0x18, 0x25, 0x1b, 0x19, 0x22, 0x15, 0x0c, 0x03, 0x86, 0x00, // +ap.k..%.."..... + 0x00, 0x01, 0x01, 0x82, 0x02, 0x99, 0x02, 0xf6, 0x05, 0xae, 0x00, 0x06, 0x00, 0x12, 0x40, 0x0f, // ..............@. + 0x05, 0x04, 0x03, 0x02, 0x04, 0x00, 0x48, 0x00, 0x00, 0x00, 0x69, 0x10, 0x01, 0x08, 0x15, 0x2b, // ......H...i....+ + 0x01, 0x23, 0x11, 0x07, 0x35, 0x25, 0x33, 0x02, 0xf6, 0x9d, 0xd7, 0x01, 0x62, 0x12, 0x02, 0x99, // .#..5%3.....b... + 0x02, 0x59, 0x39, 0x80, 0x75, 0x00, 0x00, 0x02, 0x01, 0x10, 0x02, 0xb2, 0x03, 0xbc, 0x05, 0xc4, // .Y9.u........... + 0x00, 0x15, 0x00, 0x2b, 0x00, 0x1c, 0x40, 0x19, 0x00, 0x02, 0x00, 0x01, 0x02, 0x01, 0x5f, 0x00, // ...+..@......._. + 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x44, 0x03, 0x4c, 0x29, 0x29, 0x29, 0x24, 0x04, 0x08, // ...[...D.L)))$.. + 0x18, 0x2b, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, // .+.4>.32.......# + 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, // "..53...32>.554. + 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x10, 0x30, 0x59, 0x7e, 0x4f, 0x4f, 0x7f, 0x59, 0x2f, // .#".....0Y~OO.Y/ + 0x2f, 0x58, 0x7e, 0x4f, 0x50, 0x7f, 0x59, 0x30, 0xa3, 0x16, 0x2d, 0x44, 0x2e, 0x2c, 0x43, 0x2c, // /X~OP.Y0..-D.,C, + 0x17, 0x17, 0x2d, 0x43, 0x2d, 0x2d, 0x43, 0x2d, 0x16, 0x04, 0x75, 0x49, 0x7b, 0x59, 0x32, 0x32, // ..-C--C-..uI{Y22 + 0x59, 0x7b, 0x49, 0x75, 0x48, 0x7b, 0x59, 0x32, 0x32, 0x59, 0x7b, 0x48, 0x2a, 0x47, 0x34, 0x1e, // Y{IuH{Y22Y{H*G4. + 0x1e, 0x34, 0x47, 0x2a, 0x75, 0x29, 0x47, 0x35, 0x1e, 0x1e, 0x35, 0x47, 0x29, 0x00, 0xff, 0xff, // .4G*u)G5..5G)... + 0x00, 0xf1, 0x00, 0x98, 0x03, 0xfe, 0x03, 0xb5, 0x02, 0x27, 0x01, 0x75, 0xff, 0x65, 0x00, 0x00, // .........'.u.e.. + 0x00, 0x07, 0x01, 0x75, 0x00, 0xbe, 0x00, 0x00, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x04, 0x8d, // ...u.......0.... + 0x05, 0xb6, 0x00, 0x2f, 0x01, 0xc1, 0xfe, 0xf8, 0x02, 0xef, 0x39, 0x9a, 0x00, 0x26, 0x01, 0x76, // .../......9..&.v + 0xf6, 0x08, 0x01, 0x0f, 0x01, 0xc4, 0x01, 0x42, 0x00, 0x00, 0x39, 0x9a, 0x00, 0x0f, 0xb1, 0x00, // .......B..9..... + 0x01, 0xb8, 0x02, 0xef, 0xb0, 0x33, 0x2b, 0xb3, 0x01, 0x01, 0x08, 0x33, 0x2b, 0x00, 0xff, 0xff, // .....3+....3+... + 0x00, 0x24, 0x00, 0x00, 0x04, 0x96, 0x05, 0xb2, 0x02, 0x26, 0x01, 0x76, 0xba, 0x08, 0x00, 0x2f, // .$.......&.v.../ + 0x01, 0xc1, 0xfe, 0xec, 0x02, 0xeb, 0x39, 0x9a, 0x01, 0x0f, 0x01, 0x96, 0x01, 0x4f, 0x00, 0x00, // ......9......O.. + 0x39, 0x9a, 0x00, 0x0f, 0xb3, 0x00, 0x01, 0x08, 0x33, 0x2b, 0xb1, 0x01, 0x01, 0xb8, 0x02, 0xeb, // 9.......3+...... + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x25, 0x00, 0x00, 0x04, 0xae, 0x05, 0xb8, 0x02, 0x26, // .3+....%.......& + 0x01, 0x76, 0x39, 0x07, 0x00, 0x2f, 0x01, 0xc4, 0x01, 0x63, 0x00, 0x00, 0x39, 0x9a, 0x01, 0x0f, // .v9../...c..9... + 0x01, 0xc3, 0xff, 0x0d, 0x02, 0xe8, 0x39, 0x9a, 0x00, 0x0f, 0xb3, 0x00, 0x01, 0x07, 0x33, 0x2b, // ......9.......3+ + 0xb1, 0x03, 0x01, 0xb8, 0x02, 0xe8, 0xb0, 0x33, 0x2b, 0x00, 0x00, 0x02, 0x00, 0xcc, 0xfe, 0x78, // .......3+......x + 0x04, 0x00, 0x04, 0x4d, 0x00, 0x27, 0x00, 0x33, 0x00, 0x65, 0x4b, 0xb0, 0x2a, 0x50, 0x58, 0x40, // ...M.'.3.eK.*PX@ + 0x25, 0x06, 0x01, 0x03, 0x05, 0x01, 0x05, 0x03, 0x01, 0x70, 0x00, 0x01, 0x00, 0x05, 0x01, 0x00, // %........p...... + 0x6e, 0x00, 0x05, 0x05, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x47, 0x4b, 0x00, 0x00, 0x00, 0x02, 0x5c, // n....[...GK..... + 0x00, 0x02, 0x02, 0x41, 0x02, 0x4c, 0x1b, 0x40, 0x22, 0x06, 0x01, 0x03, 0x05, 0x01, 0x05, 0x03, // ...A.L.@"....... + 0x01, 0x70, 0x00, 0x01, 0x00, 0x05, 0x01, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x60, // .p......n......` + 0x00, 0x05, 0x05, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x47, 0x05, 0x4c, 0x59, 0x40, 0x10, 0x00, 0x00, // ....[...G.LY@... + 0x32, 0x30, 0x2c, 0x2a, 0x00, 0x27, 0x00, 0x27, 0x24, 0x14, 0x2c, 0x07, 0x08, 0x17, 0x2b, 0x01, // 20,*.'.'$.,...+. + 0x0e, 0x03, 0x07, 0x0e, 0x03, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x33, 0x0e, 0x03, // ........32>.53.. + 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x3e, 0x03, 0x35, 0x03, 0x34, 0x36, 0x33, // #"..54>.7>.5.463 + 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x02, 0xd4, 0x01, 0x09, 0x1e, 0x3b, 0x31, 0x1f, // 2....#"&.....;1. + 0x42, 0x37, 0x23, 0x74, 0x6d, 0x2b, 0x51, 0x3f, 0x26, 0xb9, 0x01, 0x3f, 0x6e, 0x95, 0x57, 0x61, // B7#tm+Q?&..?n.Wa + 0x99, 0x69, 0x37, 0x2f, 0x49, 0x5b, 0x2d, 0x1d, 0x20, 0x0f, 0x03, 0x1e, 0x3a, 0x39, 0x39, 0x3a, // .i7/I[-. ...:99: + 0x3a, 0x39, 0x39, 0x3a, 0x02, 0xa1, 0x47, 0x5c, 0x48, 0x43, 0x2d, 0x23, 0x4b, 0x52, 0x5a, 0x33, // :99:..G.HC-#KRZ3 + 0x6d, 0x73, 0x17, 0x31, 0x4b, 0x34, 0x54, 0x86, 0x5d, 0x31, 0x33, 0x62, 0x8c, 0x5a, 0x48, 0x80, // ms.1K4T.]13b.ZH. + 0x71, 0x63, 0x2b, 0x1d, 0x32, 0x35, 0x3c, 0x27, 0x01, 0x3b, 0x30, 0x41, 0x41, 0x30, 0x2e, 0x3f, // qc+.25<'.;0AA0.? + 0x3f, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x04, 0xab, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x12, // ?.... .......... + 0x00, 0x3b, 0x40, 0x38, 0x12, 0x01, 0x05, 0x04, 0x01, 0x4a, 0x00, 0x05, 0x00, 0x06, 0x08, 0x05, // .;@8.....J...... + 0x06, 0x61, 0x00, 0x08, 0x00, 0x01, 0x07, 0x08, 0x01, 0x61, 0x00, 0x04, 0x04, 0x03, 0x59, 0x00, // .a.......a....Y. + 0x03, 0x03, 0x3c, 0x4b, 0x00, 0x07, 0x07, 0x00, 0x59, 0x02, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, // ..@;....98 + 0x2a, 0x29, 0x20, 0x0d, 0x06, 0x05, 0x04, 0x0a, 0x01, 0x00, 0x05, 0x03, 0x4a, 0x00, 0x01, 0x00, // *) .........J... + 0x01, 0x73, 0x00, 0x03, 0x03, 0x3e, 0x4b, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x44, // .s...>K....[...D + 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x2d, 0x2d, 0x13, 0x2d, // K....[...E.L--.- + 0x13, 0x26, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x0e, 0x05, 0x23, 0x22, 0x26, 0x27, 0x07, 0x23, 0x13, // .&...+...#"&'.#. + 0x2e, 0x03, 0x35, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x16, 0x17, 0x37, 0x33, 0x03, 0x1e, 0x03, 0x17, // ..55>.32..73.... + 0x05, 0x16, 0x16, 0x17, 0x01, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x04, 0x07, 0x21, 0x26, 0x26, 0x27, // .....&&#"...!&&' + 0x01, 0x16, 0x16, 0x33, 0x32, 0x3e, 0x04, 0x37, 0x04, 0x59, 0x01, 0x19, 0x34, 0x51, 0x70, 0x91, // ...32>.7.Y..4Qp. + 0x5a, 0x5b, 0x8e, 0x39, 0x68, 0x8e, 0xa0, 0x22, 0x32, 0x21, 0x10, 0x01, 0x19, 0x35, 0x51, 0x70, // Z[.9h.."2!...5Qp + 0x91, 0x5a, 0x66, 0x9d, 0x3b, 0x63, 0x8e, 0xa1, 0x1c, 0x29, 0x1b, 0x0d, 0x01, 0xfc, 0xbf, 0x01, // .Zf.;c...)...... + 0x17, 0x1d, 0x01, 0xf2, 0x25, 0x6f, 0x4e, 0x40, 0x62, 0x48, 0x30, 0x1d, 0x0d, 0x01, 0x02, 0x8a, // ....%oN@bH0..... + 0x01, 0x0f, 0x13, 0xfe, 0x15, 0x25, 0x64, 0x42, 0x41, 0x63, 0x47, 0x2f, 0x1d, 0x0b, 0x01, 0x02, // .....%dBAcG/.... + 0x84, 0x4e, 0x9f, 0x94, 0x80, 0x60, 0x37, 0x37, 0x30, 0xb0, 0x01, 0x0e, 0x31, 0x70, 0x78, 0x7d, // .N...`770...1px} + 0x3d, 0xa6, 0x4e, 0x9f, 0x94, 0x81, 0x61, 0x37, 0x45, 0x3b, 0xa8, 0xfe, 0xf0, 0x2f, 0x69, 0x6f, // =.N...a7E;.../io + 0x73, 0x38, 0xa6, 0x45, 0x9b, 0x46, 0x03, 0x4b, 0x35, 0x41, 0x2e, 0x4d, 0x65, 0x6f, 0x71, 0x33, // s8.E.F.K5A.Meoq3 + 0x3a, 0x81, 0x3e, 0xfc, 0xc2, 0x29, 0x2f, 0x2e, 0x4d, 0x65, 0x6f, 0x72, 0x34, 0x00, 0x00, 0x02, // :.>..)/.Meor4... + 0x00, 0xa8, 0x00, 0x00, 0x04, 0x5e, 0x05, 0xb0, 0x00, 0x10, 0x00, 0x1d, 0x00, 0x34, 0x40, 0x31, // .....^.......4@1 + 0x00, 0x00, 0x07, 0x01, 0x05, 0x04, 0x00, 0x05, 0x63, 0x00, 0x04, 0x00, 0x01, 0x02, 0x04, 0x01, // ........c....... + 0x63, 0x06, 0x01, 0x03, 0x03, 0x3c, 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x11, 0x11, 0x00, // c.....54..#.a.. + 0x75, 0xb5, 0x7d, 0x41, 0x41, 0x7d, 0xb5, 0x75, 0xfe, 0xeb, 0xb9, 0xb9, 0x01, 0x15, 0x4e, 0x72, // u.}AA}.u......Nr + 0x4b, 0x24, 0x24, 0x4a, 0x73, 0x4e, 0x05, 0xb0, 0xfe, 0xdb, 0x3f, 0x71, 0x9c, 0x5d, 0x5d, 0x9c, // K$$JsN....?q.]]. + 0x71, 0x3f, 0xfe, 0xc7, 0x05, 0xb0, 0xfe, 0x43, 0xfd, 0xde, 0x2d, 0x4b, 0x62, 0x35, 0x36, 0x63, // q?.....C..-Kb56c + 0x4d, 0x2d, 0x00, 0x01, 0x00, 0xa9, 0xff, 0xeb, 0x04, 0x4c, 0x06, 0x16, 0x00, 0x43, 0x00, 0x51, // M-.......L...C.Q + 0x40, 0x0a, 0x23, 0x01, 0x03, 0x04, 0x22, 0x01, 0x00, 0x03, 0x02, 0x4a, 0x4b, 0xb0, 0x17, 0x50, // @.#..."....JK..P + 0x58, 0x40, 0x14, 0x00, 0x01, 0x00, 0x04, 0x03, 0x01, 0x04, 0x63, 0x00, 0x03, 0x03, 0x00, 0x5b, // X@........c....[ + 0x02, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x1b, 0x40, 0x18, 0x00, 0x01, 0x00, 0x04, 0x03, 0x01, // ....=.L.@....... + 0x04, 0x63, 0x00, 0x00, 0x00, 0x3d, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, // .c...=K....[...E + 0x02, 0x4c, 0x59, 0x40, 0x0b, 0x41, 0x3f, 0x29, 0x27, 0x1e, 0x1c, 0x25, 0x10, 0x05, 0x08, 0x16, // .LY@.A?)'..%.... + 0x2b, 0x21, 0x23, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x15, // +!#.4>.32....... + 0x14, 0x1e, 0x04, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x37, 0x1e, 0x03, 0x33, // .......#"..'7..3 + 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x04, 0x35, 0x34, 0x3e, 0x04, 0x35, 0x34, 0x2e, 0x02, 0x23, // 2>.54..54>.54..# + 0x22, 0x06, 0x07, 0x01, 0x61, 0xb8, 0x3b, 0x69, 0x90, 0x55, 0x4b, 0x82, 0x62, 0x38, 0x28, 0x30, // "...a.;i.UK.b8(0 + 0x27, 0x2d, 0x44, 0x50, 0x44, 0x2d, 0x33, 0x5c, 0x7f, 0x4c, 0x29, 0x58, 0x51, 0x44, 0x14, 0x2a, // '-DPD-3..L)XQD.* + 0x12, 0x35, 0x3f, 0x45, 0x22, 0x2f, 0x44, 0x2c, 0x15, 0x2d, 0x44, 0x50, 0x44, 0x2e, 0x14, 0x1f, // .5?E"/D,.-DPD... + 0x24, 0x1f, 0x14, 0x1e, 0x31, 0x3f, 0x20, 0x63, 0x77, 0x01, 0x04, 0x3f, 0x70, 0xb0, 0x78, 0x3f, // $...1? cw..?p.x? + 0x29, 0x54, 0x7f, 0x56, 0x4f, 0x6b, 0x54, 0x4d, 0x32, 0x2e, 0x4a, 0x46, 0x46, 0x52, 0x64, 0x41, // )T.VOkTM2.JFFRdA + 0x55, 0x7e, 0x54, 0x2a, 0x0b, 0x13, 0x1a, 0x10, 0x9b, 0x0b, 0x1b, 0x17, 0x0f, 0x1b, 0x30, 0x40, // U~T*..........0@ + 0x26, 0x2f, 0x4d, 0x45, 0x47, 0x53, 0x67, 0x44, 0x27, 0x42, 0x3b, 0x37, 0x3b, 0x3f, 0x26, 0x32, // &/MEGSgD'B;7;?&2 + 0x4b, 0x33, 0x1a, 0xa4, 0x9b, 0x00, 0x00, 0x03, 0x00, 0x2b, 0xff, 0xec, 0x04, 0xa9, 0x04, 0x4e, // K3.......+.....N + 0x00, 0x3b, 0x00, 0x48, 0x00, 0x57, 0x00, 0x6a, 0x40, 0x67, 0x21, 0x01, 0x03, 0x05, 0x4c, 0x36, // .;.H.W.j@g!...L6 + 0x02, 0x08, 0x07, 0x37, 0x03, 0x02, 0x00, 0x08, 0x03, 0x4a, 0x00, 0x04, 0x03, 0x02, 0x03, 0x04, // ...7.....J...... + 0x02, 0x70, 0x0a, 0x01, 0x02, 0x0c, 0x01, 0x07, 0x08, 0x02, 0x07, 0x63, 0x0e, 0x09, 0x02, 0x03, // .p.........c.... + 0x03, 0x05, 0x5b, 0x06, 0x01, 0x05, 0x05, 0x47, 0x4b, 0x0f, 0x0b, 0x02, 0x08, 0x08, 0x00, 0x5b, // ..[....GK......[ + 0x01, 0x0d, 0x02, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x4a, 0x49, 0x3d, 0x3c, 0x01, 0x00, 0x4f, 0x4d, // .....E.LJI=<..OM + 0x49, 0x57, 0x4a, 0x57, 0x43, 0x42, 0x3c, 0x48, 0x3d, 0x48, 0x32, 0x30, 0x2b, 0x2a, 0x25, 0x23, // IWJWCB.32.. + 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x21, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, // 6632....!....32> + 0x02, 0x37, 0x17, 0x0e, 0x03, 0x03, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x21, 0x35, 0x34, 0x2e, 0x02, // .7...."....!54.. + 0x01, 0x32, 0x36, 0x37, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x03, 0x80, 0x67, // .267.#"........g + 0x94, 0x2e, 0x13, 0x33, 0x42, 0x50, 0x30, 0x47, 0x6c, 0x4a, 0x27, 0xd0, 0xc5, 0x3f, 0x3e, 0x44, // ...3BP0GlJ'..?>D + 0x3f, 0x4e, 0xb3, 0x2d, 0x53, 0x76, 0x48, 0x53, 0x7d, 0x27, 0x2b, 0x77, 0x4a, 0x51, 0x7b, 0x54, // ?N.-SvHS}'+wJQ{T + 0x2b, 0xfe, 0x07, 0x1b, 0x3b, 0x5c, 0x42, 0x26, 0x3b, 0x2f, 0x26, 0x10, 0x2e, 0x0d, 0x2e, 0x45, // +...;.B&;/&....E + 0x5d, 0x5d, 0x2d, 0x41, 0x2a, 0x15, 0x01, 0x01, 0x49, 0x14, 0x28, 0x3a, 0xfd, 0xf0, 0x25, 0x4c, // ]]-A*...I.(:..%L + 0x1c, 0x01, 0x3d, 0x35, 0x54, 0x3a, 0x1f, 0x13, 0x25, 0x37, 0x14, 0x4b, 0x47, 0x1d, 0x35, 0x28, // ..=5T:..%7.KG.5( + 0x18, 0x2c, 0x4f, 0x71, 0x45, 0xa6, 0xb8, 0x94, 0x4c, 0x5b, 0x53, 0x4b, 0x08, 0x45, 0x6f, 0x4f, // .,OqE...L[SK.EoO + 0x2b, 0x36, 0x35, 0x33, 0x38, 0x35, 0x61, 0x89, 0x54, 0xea, 0x56, 0x42, 0x68, 0x48, 0x27, 0x0e, // +65385a.T.VBhH'. + 0x15, 0x18, 0x0b, 0x88, 0x0a, 0x1d, 0x1a, 0x13, 0x03, 0xca, 0x27, 0x42, 0x58, 0x30, 0x45, 0x80, // ..........'BX0E. + 0x23, 0x41, 0x33, 0x1f, 0xfc, 0xcc, 0x2b, 0x1d, 0x01, 0x25, 0x23, 0x3b, 0x4d, 0x2b, 0x1f, 0x37, // #A3...+..%#;M+.7 + 0x29, 0x18, 0x00, 0x02, 0x00, 0x49, 0xff, 0xec, 0x04, 0x2a, 0x05, 0xf1, 0x00, 0x25, 0x00, 0x3d, // )....I...*...%.= + 0x00, 0x31, 0x40, 0x2e, 0x16, 0x01, 0x02, 0x01, 0x01, 0x4a, 0x25, 0x24, 0x23, 0x20, 0x1f, 0x1c, // .1@......J%$# .. + 0x1b, 0x1a, 0x19, 0x09, 0x01, 0x48, 0x00, 0x01, 0x00, 0x02, 0x03, 0x01, 0x02, 0x63, 0x00, 0x03, // .....H.......c.. + 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x39, 0x37, 0x2f, 0x2d, 0x28, 0x28, 0x04, // ..[...E.L97/-((. + 0x08, 0x16, 0x2b, 0x01, 0x16, 0x12, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, // ..+........#"..5 + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x26, 0x26, 0x27, 0x05, 0x27, 0x37, 0x26, 0x26, 0x27, // 4>.32..&&'.'7&&' + 0x37, 0x16, 0x16, 0x17, 0x37, 0x17, 0x03, 0x34, 0x26, 0x35, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, // 7...7..4&5..#".. + 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x03, 0x4d, 0x68, 0x75, 0x4b, 0x86, 0xb7, // ....32>.5.MhuK.. + 0x6d, 0x6c, 0xb5, 0x83, 0x48, 0x49, 0x83, 0xb3, 0x69, 0x58, 0x99, 0x39, 0x17, 0x5a, 0x3e, 0xfe, // ml..HI..iX.9.Z>. + 0xf6, 0x49, 0xef, 0x29, 0x57, 0x2e, 0x39, 0x50, 0x8f, 0x3f, 0xe6, 0x49, 0xaf, 0x01, 0x11, 0x39, // .I.)W.9P.?.I...9 + 0x50, 0x67, 0x3e, 0x45, 0x70, 0x4f, 0x2a, 0x2a, 0x4f, 0x73, 0x4a, 0x48, 0x73, 0x51, 0x2c, 0x05, // Pg>EpO**OsJHsQ,. + 0x06, 0x76, 0xfe, 0xb7, 0xce, 0x3e, 0x8a, 0xdb, 0x99, 0x51, 0x4b, 0x84, 0xb2, 0x66, 0x73, 0xbc, // .v...>...QK..fs. + 0x86, 0x49, 0x44, 0x38, 0x6e, 0xa8, 0x3f, 0x98, 0x63, 0x89, 0x1b, 0x29, 0x10, 0x9f, 0x16, 0x49, // .ID8n.?.c..)...I + 0x33, 0x84, 0x64, 0xfc, 0xfc, 0x0d, 0x18, 0x0d, 0x1b, 0x33, 0x27, 0x17, 0x39, 0x62, 0x82, 0x49, // 3.d......3'.9b.I + 0x3e, 0x79, 0x5f, 0x3b, 0x40, 0x73, 0xa3, 0x63, 0x00, 0x03, 0x00, 0x73, 0x00, 0xb1, 0x04, 0x59, // >y_;@s.c...s...Y + 0x04, 0xb4, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x1b, 0x00, 0x2c, 0x40, 0x29, 0x00, 0x02, 0x00, 0x03, // .........,@).... + 0x01, 0x02, 0x03, 0x63, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x61, 0x00, 0x04, 0x05, 0x05, // ...c.......a.... + 0x04, 0x57, 0x00, 0x04, 0x04, 0x05, 0x5b, 0x00, 0x05, 0x04, 0x05, 0x4f, 0x24, 0x24, 0x24, 0x23, // .W....[....O$$$# + 0x11, 0x10, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, // .....+.!5!.4632. + 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x03, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, // ...#"&.4632....# + 0x22, 0x26, 0x04, 0x59, 0xfc, 0x1a, 0x03, 0xe6, 0xfd, 0xa2, 0x37, 0x36, 0x36, 0x38, 0x38, 0x36, // "&.Y......766886 + 0x36, 0x37, 0x02, 0x37, 0x36, 0x36, 0x38, 0x38, 0x36, 0x36, 0x37, 0x02, 0x58, 0xb8, 0x01, 0x39, // 67.76688667.X..9 + 0x2d, 0x3e, 0x3e, 0x2d, 0x2d, 0x3c, 0x3c, 0xfc, 0xfe, 0x2d, 0x3e, 0x3e, 0x2d, 0x2c, 0x3d, 0x3d, // ->>--<<..->>-,== + 0x00, 0x03, 0x00, 0x7a, 0xff, 0x79, 0x04, 0x52, 0x04, 0xb9, 0x00, 0x1d, 0x00, 0x2a, 0x00, 0x36, // ...z.y.R.....*.6 + 0x00, 0x3e, 0x40, 0x3b, 0x0b, 0x08, 0x02, 0x04, 0x00, 0x2f, 0x2e, 0x22, 0x21, 0x04, 0x05, 0x04, // .>@;...../."!... + 0x1a, 0x17, 0x02, 0x02, 0x05, 0x03, 0x4a, 0x00, 0x01, 0x00, 0x01, 0x72, 0x00, 0x03, 0x02, 0x03, // ......J....r.... + 0x73, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x05, 0x05, 0x02, 0x5b, // s....[...GK....[ + 0x00, 0x02, 0x02, 0x45, 0x02, 0x4c, 0x2a, 0x2b, 0x13, 0x29, 0x13, 0x24, 0x06, 0x08, 0x1a, 0x2b, // ...E.L*+.).$...+ + 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x37, 0x33, 0x07, 0x16, 0x16, 0x15, 0x15, 0x14, // .4>.32..73...... + 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x07, 0x23, 0x37, 0x26, 0x26, 0x35, 0x33, 0x14, 0x16, 0x17, // ..#"&'.#7&&53... + 0x01, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x21, 0x34, 0x26, 0x27, 0x01, 0x16, 0x33, 0x32, // .&&#"...!4&'..32 + 0x3e, 0x02, 0x35, 0x7a, 0x44, 0x7f, 0xb6, 0x72, 0x39, 0x65, 0x2d, 0x49, 0x7b, 0x65, 0x5e, 0x65, // >.5zD..r9e-I{e^e + 0x44, 0x7f, 0xb6, 0x72, 0x36, 0x5f, 0x2b, 0x4a, 0x7b, 0x65, 0x63, 0x6a, 0xb9, 0x30, 0x30, 0x01, // D..r6_+J{ecj.00. + 0x56, 0x1d, 0x41, 0x26, 0x4d, 0x72, 0x4d, 0x26, 0x02, 0x66, 0x2c, 0x2d, 0xfe, 0xac, 0x37, 0x44, // V.A&MrM&.f,-..7D + 0x4c, 0x73, 0x4d, 0x26, 0x02, 0x27, 0x75, 0xc9, 0x94, 0x55, 0x15, 0x14, 0x94, 0xcd, 0x4b, 0xea, // LsM&.'u..U....K. + 0x90, 0x16, 0x75, 0xc8, 0x94, 0x54, 0x13, 0x11, 0x97, 0xcd, 0x49, 0xee, 0x94, 0x5b, 0x9d, 0x39, // ..u..T....I..[.9 + 0x02, 0xb6, 0x0f, 0x11, 0x41, 0x6e, 0x91, 0x4f, 0x55, 0x98, 0x39, 0xfd, 0x4f, 0x1a, 0x40, 0x6e, // ....An.OU.9.O.@n + 0x91, 0x50, 0x00, 0x02, 0x00, 0xad, 0xfe, 0x60, 0x04, 0x3f, 0x06, 0x16, 0x00, 0x15, 0x00, 0x27, // .P.....`.?.....' + 0x00, 0x3a, 0x40, 0x37, 0x0d, 0x01, 0x04, 0x03, 0x1f, 0x1e, 0x02, 0x05, 0x04, 0x08, 0x01, 0x00, // .:@7............ + 0x05, 0x03, 0x4a, 0x00, 0x02, 0x03, 0x02, 0x72, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, // ..J....r....[... + 0x47, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x4b, 0x00, 0x01, 0x01, 0x41, // GK....[...EK...A + 0x01, 0x4c, 0x25, 0x29, 0x23, 0x11, 0x13, 0x24, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x14, 0x0e, 0x02, // .L%)#..$...+.... + 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x33, 0x11, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, // #"&'.#.3.6632... + 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x35, // #4..#".....32>.5 + 0x04, 0x3f, 0x36, 0x6b, 0x9c, 0x66, 0x64, 0x9a, 0x38, 0xb9, 0xb9, 0x37, 0x98, 0x64, 0x68, 0x9e, // .?6k.fd.8..7.dh. + 0x6a, 0x36, 0xb9, 0x22, 0x47, 0x6e, 0x4d, 0x5b, 0x7c, 0x25, 0x26, 0x7a, 0x5e, 0x4c, 0x6e, 0x46, // j6."GnM[|%&z^LnF + 0x22, 0x02, 0x11, 0x74, 0xc9, 0x94, 0x54, 0x41, 0x3e, 0xfd, 0xf5, 0x07, 0xb6, 0xfd, 0xb4, 0x40, // "..t..TA>......@ + 0x44, 0x52, 0x92, 0xcb, 0x79, 0x4f, 0x8f, 0x6d, 0x40, 0x53, 0x42, 0xfd, 0xfa, 0x41, 0x52, 0x41, // DR..yO.m@SB..ARA + 0x6e, 0x90, 0x4f, 0x00, 0x00, 0x02, 0x00, 0x18, 0x00, 0x00, 0x04, 0xbc, 0x05, 0xb0, 0x00, 0x13, // n.O............. + 0x00, 0x17, 0x00, 0x36, 0x40, 0x33, 0x08, 0x06, 0x02, 0x00, 0x0b, 0x05, 0x02, 0x01, 0x0a, 0x00, // ...6@3.......... + 0x01, 0x61, 0x00, 0x0a, 0x00, 0x03, 0x02, 0x0a, 0x03, 0x61, 0x09, 0x01, 0x07, 0x07, 0x3c, 0x4b, // .a.......a.....5.9 + 0xb9, 0xb9, 0x02, 0x5a, 0xb9, 0x29, 0x55, 0x81, 0x57, 0x49, 0x7b, 0x58, 0x32, 0xba, 0x50, 0x44, // ...Z.)U.WI{X2.PD + 0x2e, 0x3c, 0x24, 0x0f, 0x05, 0xb0, 0xfb, 0x93, 0x51, 0x7f, 0x58, 0x2e, 0x29, 0x54, 0x80, 0x57, // .<$.....Q.X.)T.W + 0x63, 0x5a, 0x1b, 0x31, 0x47, 0x2c, 0x00, 0x04, 0x00, 0x50, 0xfe, 0x4e, 0x04, 0x4f, 0x05, 0xbf, // cZ.1G,...P.N.O.. + 0x00, 0x17, 0x00, 0x21, 0x00, 0x2d, 0x00, 0x39, 0x00, 0x4f, 0x40, 0x4c, 0x0b, 0x01, 0x02, 0x06, // ...!.-.9.O@L.... + 0x0a, 0x01, 0x01, 0x02, 0x02, 0x4a, 0x0c, 0x01, 0x0a, 0x0a, 0x09, 0x5b, 0x0b, 0x01, 0x09, 0x09, // .....J.....[.... + 0x44, 0x4b, 0x08, 0x01, 0x03, 0x03, 0x00, 0x59, 0x04, 0x01, 0x00, 0x00, 0x3f, 0x4b, 0x07, 0x01, // DK.....Y....?K.. + 0x05, 0x05, 0x06, 0x59, 0x00, 0x06, 0x06, 0x3d, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, // ...Y...=K....[.. + 0x01, 0x49, 0x01, 0x4c, 0x38, 0x36, 0x32, 0x30, 0x2c, 0x2a, 0x26, 0x24, 0x11, 0x11, 0x11, 0x11, // .I.L8620,*&$.... + 0x11, 0x15, 0x44, 0x35, 0x10, 0x0d, 0x08, 0x1d, 0x2b, 0x01, 0x21, 0x11, 0x14, 0x0e, 0x02, 0x23, // ..D5....+.!....# + 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x11, 0x23, 0x25, 0x21, 0x11, // "&'7..32>.5.#%!. + 0x33, 0x15, 0x21, 0x35, 0x33, 0x11, 0x23, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, // 3.!53.#.4632.... + 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x02, // #"&%4632....#"&. + 0xae, 0x01, 0x97, 0x39, 0x6d, 0x9d, 0x64, 0x39, 0x63, 0x37, 0x0d, 0x11, 0x34, 0x36, 0x30, 0x0e, // ...9m.d9c7..460. + 0x34, 0x5c, 0x44, 0x27, 0xde, 0xfd, 0xa7, 0x01, 0xa4, 0xdf, 0xfd, 0x78, 0xef, 0xea, 0x03, 0x1c, // 4.D'.......x.... + 0x36, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x36, 0xfd, 0xbe, 0x37, 0x38, 0x37, 0x38, 0x38, 0x37, // 68888886..787887 + 0x38, 0x37, 0x04, 0x3a, 0xfb, 0xc1, 0x68, 0x9f, 0x6e, 0x38, 0x07, 0x0a, 0x9e, 0x03, 0x05, 0x03, // 87.:..h.n8...... + 0x01, 0x19, 0x3d, 0x67, 0x4d, 0x03, 0x9e, 0xa1, 0xfc, 0x66, 0xa0, 0xa0, 0x02, 0xf9, 0x01, 0xba, // ..=gM....f...... + 0x2d, 0x3f, 0x3f, 0x2d, 0x2d, 0x3d, 0x3d, 0x2c, 0x2d, 0x3f, 0x3f, 0x2d, 0x2d, 0x3d, 0x3d, 0x00, // -??--==,-??--==. + 0x00, 0x01, 0x00, 0xba, 0x00, 0x00, 0x04, 0x72, 0x04, 0x3a, 0x00, 0x0c, 0x00, 0x1f, 0x40, 0x1c, // .......r.:....@. + 0x0a, 0x06, 0x01, 0x03, 0x00, 0x01, 0x01, 0x4a, 0x02, 0x01, 0x01, 0x01, 0x3f, 0x4b, 0x03, 0x01, // .......J....?K.. + 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x12, 0x13, 0x11, 0x12, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x07, 0x11, // ..=.L.......+... + 0x23, 0x11, 0x33, 0x11, 0x37, 0x01, 0x33, 0x01, 0x01, 0x23, 0x02, 0x09, 0x96, 0xb9, 0xb9, 0x6e, // #.3.7.3..#.....n + 0x01, 0x8e, 0xdf, 0xfe, 0x38, 0x01, 0xec, 0xea, 0x01, 0xdd, 0x85, 0xfe, 0xa8, 0x04, 0x3a, 0xfd, // ....8.........:. + 0xed, 0x78, 0x01, 0x9b, 0xfe, 0x21, 0xfd, 0xa5, 0x00, 0x01, 0x00, 0x3a, 0x00, 0x00, 0x04, 0x4b, // .x...!.....:...K + 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x26, 0x40, 0x23, 0x0b, 0x0a, 0x09, 0x08, 0x03, 0x02, 0x01, 0x00, // .....&@#........ + 0x08, 0x00, 0x02, 0x01, 0x4a, 0x00, 0x02, 0x02, 0x3c, 0x4b, 0x00, 0x00, 0x00, 0x01, 0x5a, 0x00, // ....J...K.....Y...=.L + 0x1b, 0x40, 0x14, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x03, 0x61, 0x02, 0x01, 0x00, 0x00, 0x01, // .@........a..... + 0x59, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x59, 0xb7, 0x11, 0x15, 0x11, 0x11, 0x14, 0x05, 0x08, // Y...=.LY........ + 0x19, 0x2b, 0x01, 0x25, 0x07, 0x05, 0x11, 0x21, 0x15, 0x21, 0x35, 0x21, 0x11, 0x05, 0x35, 0x25, // .+.%...!.!5!..5% + 0x11, 0x21, 0x35, 0x21, 0x02, 0xf4, 0x01, 0x22, 0x01, 0xfe, 0xdf, 0x01, 0x61, 0xfc, 0x76, 0x01, // .!5!..."....a.v. + 0x70, 0xfe, 0xad, 0x01, 0x53, 0xfe, 0x90, 0x02, 0x29, 0x03, 0xcd, 0x84, 0xa2, 0x84, 0xfd, 0x75, // p...S...)......u + 0xa0, 0xa0, 0x02, 0x36, 0x9a, 0xa2, 0x9a, 0x01, 0xe7, 0xa1, 0x00, 0x01, 0x00, 0xaf, 0xfe, 0x4b, // ...6...........K + 0x04, 0x1d, 0x05, 0xb0, 0x00, 0x1a, 0x00, 0x37, 0x40, 0x34, 0x19, 0x14, 0x13, 0x03, 0x02, 0x03, // .......7@4...... + 0x0a, 0x01, 0x01, 0x02, 0x09, 0x01, 0x00, 0x01, 0x03, 0x4a, 0x05, 0x04, 0x02, 0x03, 0x03, 0x3c, // .........J.....< + 0x4b, 0x00, 0x02, 0x02, 0x3d, 0x4b, 0x00, 0x01, 0x01, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x49, 0x00, // K...=K....[...I. + 0x4c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x1a, 0x11, 0x15, 0x27, 0x25, 0x06, 0x08, 0x18, 0x2b, 0x01, // L........'%...+. + 0x13, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x35, // ....#"&'7..32655 + 0x01, 0x11, 0x23, 0x11, 0x33, 0x01, 0x11, 0x04, 0x1c, 0x01, 0x2b, 0x51, 0x76, 0x4c, 0x1e, 0x33, // ..#.3.....+QvL.3 + 0x1d, 0x0e, 0x08, 0x1b, 0x1d, 0x1a, 0x06, 0x41, 0x43, 0xfe, 0x05, 0xb9, 0xb9, 0x01, 0xfb, 0x05, // .......AC....... + 0xb0, 0xf9, 0xf7, 0x52, 0x81, 0x5a, 0x2f, 0x08, 0x0a, 0x93, 0x03, 0x05, 0x03, 0x02, 0x6d, 0x57, // ...R.Z/.......mW + 0x5b, 0x04, 0x2b, 0xfb, 0xd3, 0x05, 0xb0, 0xfb, 0xd5, 0x04, 0x2b, 0x00, 0x00, 0x01, 0x00, 0xb8, // [.+.......+..... + 0xfe, 0x4b, 0x04, 0x17, 0x04, 0x4e, 0x00, 0x23, 0x00, 0x69, 0x40, 0x0f, 0x20, 0x01, 0x02, 0x04, // .K...N.#.i@. ... + 0x03, 0x11, 0x01, 0x02, 0x04, 0x10, 0x01, 0x01, 0x02, 0x03, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, // ..........JK..PX + 0x40, 0x1c, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x06, 0x05, 0x02, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x04, // @.....[.....GK.. + 0x04, 0x3d, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x49, 0x01, 0x4c, 0x1b, 0x40, // .=K....[...I.L.@ + 0x20, 0x06, 0x01, 0x05, 0x05, 0x3f, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, // ....?K....[...G + 0x4b, 0x00, 0x04, 0x04, 0x3d, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x49, 0x01, // K...=K....[...I. + 0x4c, 0x59, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x23, 0x00, 0x23, 0x13, 0x25, 0x27, 0x27, 0x23, 0x07, // LY@....#.#.%''#. + 0x08, 0x19, 0x2b, 0x01, 0x17, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x06, 0x07, // ..+..6632....... + 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, // "&'7..3265.4&#". + 0x07, 0x11, 0x23, 0x11, 0x01, 0x5e, 0x0c, 0x36, 0x9f, 0x6a, 0x56, 0x88, 0x5e, 0x32, 0xa9, 0x9a, // ..#..^.6.jV.^2.. + 0x1e, 0x36, 0x1e, 0x0e, 0x09, 0x1c, 0x1e, 0x1a, 0x07, 0x43, 0x47, 0x76, 0x76, 0x5e, 0x7e, 0x25, // .6.......CGvv^~% + 0xb9, 0x04, 0x3a, 0x9a, 0x51, 0x5d, 0x32, 0x67, 0x9f, 0x6c, 0xfc, 0xfd, 0xa7, 0xb4, 0x01, 0x08, // ..:.Q]2g.l...... + 0x0a, 0x9d, 0x03, 0x05, 0x03, 0x02, 0x60, 0x5a, 0x02, 0xff, 0x8f, 0x7c, 0x49, 0x3e, 0xfc, 0xd6, // ......`Z...|I>.. + 0x04, 0x3a, 0x00, 0x02, 0x00, 0x4f, 0xff, 0xec, 0x04, 0xa6, 0x05, 0xc4, 0x00, 0x1b, 0x00, 0x2c, // .:...O........., + 0x00, 0xd8, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0xb5, 0x1f, 0x01, 0x04, 0x02, 0x01, 0x4a, 0x1b, 0x4b, // ..K..PX......J.K + 0xb0, 0x1b, 0x50, 0x58, 0xb5, 0x1f, 0x01, 0x04, 0x03, 0x01, 0x4a, 0x1b, 0xb5, 0x1f, 0x01, 0x04, // ..PX......J..... + 0x09, 0x01, 0x4a, 0x59, 0x59, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x22, 0x00, 0x05, 0x00, 0x06, // ..JYYK..PX@".... + 0x07, 0x05, 0x06, 0x61, 0x09, 0x01, 0x04, 0x04, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x44, 0x4b, // ...a.....[....DK + 0x0a, 0x08, 0x02, 0x07, 0x07, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x1b, 0x4b, // ......[....=.L.K + 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x37, 0x00, 0x05, 0x00, 0x06, 0x07, 0x05, 0x06, 0x61, 0x09, 0x01, // ..PX@7.......a.. + 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x44, 0x4b, 0x09, 0x01, 0x04, 0x04, 0x03, 0x59, 0x00, // ...[...DK.....Y. + 0x03, 0x03, 0x3c, 0x4b, 0x0a, 0x08, 0x02, 0x07, 0x07, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3d, 0x4b, // ...32..!.!.! + 0x15, 0x21, 0x11, 0x21, 0x05, 0x32, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, // .!.!.27.&&#".... + 0x14, 0x1e, 0x02, 0x04, 0xa6, 0xfe, 0x54, 0x3e, 0x84, 0x45, 0x61, 0x9b, 0x6d, 0x3b, 0x3a, 0x6c, // ......T>.Ea.m;:l + 0x9b, 0x61, 0x45, 0x86, 0x3e, 0x01, 0xa2, 0xfe, 0x73, 0x01, 0x58, 0xfe, 0xa8, 0x01, 0x97, 0xfd, // .aE.>...s.X..... + 0x4d, 0x31, 0x32, 0x19, 0x32, 0x1a, 0x39, 0x58, 0x3a, 0x1e, 0x1e, 0x3c, 0x58, 0x07, 0x0d, 0x43, // M12.2.9X:...3 + 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x21, 0x15, 0x14, 0x1e, 0x02, // 2..6632....!.... + 0x33, 0x32, 0x36, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, // 3267...#"&'..#". + 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, // .53...32>.554..# + 0x22, 0x0e, 0x02, 0x15, 0x25, 0x21, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x2e, // "...%!54..#".... + 0x2d, 0x57, 0x80, 0x52, 0x54, 0x80, 0x2c, 0x2d, 0x78, 0x46, 0x53, 0x79, 0x4f, 0x26, 0xfe, 0x36, // -W.RT.,-xFSyO&.6 + 0x14, 0x28, 0x3e, 0x2b, 0x44, 0x5b, 0x20, 0x37, 0x11, 0x2d, 0x3c, 0x4c, 0x30, 0x57, 0x83, 0x2d, // .(>+D[ 7.-?B@r + 0x9c, 0x5b, 0xb5, 0x40, 0x44, 0x6f, 0x50, 0x2b, 0x2a, 0x1c, 0x7e, 0x12, 0x22, 0x1a, 0x10, 0x41, // .[.@DoP+*.~."..A + 0x3e, 0x3d, 0x42, 0x42, 0x78, 0xaa, 0x69, 0x44, 0x73, 0x52, 0x2e, 0x2e, 0x52, 0x73, 0x44, 0xc6, // >=BBx.iDsR..RsD. + 0x44, 0x72, 0x53, 0x2e, 0x2f, 0x52, 0x73, 0x43, 0x08, 0x55, 0x2a, 0x4e, 0x3d, 0x25, 0x2b, 0x4e, // DrS./RsC.U*N=%+N + 0x6f, 0x43, 0x00, 0x01, 0x01, 0xc8, 0x00, 0x00, 0x04, 0x0b, 0x06, 0x2b, 0x00, 0x13, 0x00, 0x27, // oC.........+...' + 0x40, 0x24, 0x09, 0x01, 0x01, 0x00, 0x0a, 0x01, 0x02, 0x01, 0x02, 0x4a, 0x00, 0x00, 0x00, 0x01, // @$.........J.... + 0x02, 0x00, 0x01, 0x63, 0x03, 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x13, 0x00, // ...c....=.L..... + 0x13, 0x25, 0x25, 0x04, 0x08, 0x16, 0x2b, 0x21, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, // .%%...+!.4>.32.. + 0x07, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, 0x01, 0xc8, 0x3d, 0x71, 0xa0, 0x64, 0x25, // .&&#"......=q.d% + 0x47, 0x25, 0x17, 0x12, 0x2e, 0x1d, 0x44, 0x67, 0x46, 0x24, 0x04, 0x66, 0x6d, 0xa9, 0x73, 0x3c, // G%....DgF$.fm.s< + 0x0c, 0x09, 0x8e, 0x05, 0x06, 0x2a, 0x4e, 0x70, 0x45, 0xfb, 0x9a, 0x00, 0x00, 0x01, 0x00, 0xa0, // .....*NpE....... + 0xfe, 0x4b, 0x04, 0x4a, 0x06, 0x2b, 0x00, 0x29, 0x00, 0x3f, 0x40, 0x3c, 0x20, 0x01, 0x06, 0x05, // .K.J.+.).?@< ... + 0x21, 0x01, 0x04, 0x06, 0x0b, 0x01, 0x02, 0x00, 0x0a, 0x01, 0x01, 0x02, 0x04, 0x4a, 0x00, 0x05, // !............J.. + 0x00, 0x06, 0x04, 0x05, 0x06, 0x63, 0x03, 0x01, 0x00, 0x00, 0x04, 0x59, 0x07, 0x01, 0x04, 0x04, // .....c.....Y.... + 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x49, 0x01, 0x4c, 0x13, 0x25, 0x25, // ?K....[...I.L.%% + 0x11, 0x13, 0x27, 0x25, 0x10, 0x08, 0x08, 0x1c, 0x2b, 0x01, 0x23, 0x11, 0x14, 0x0e, 0x02, 0x23, // ..'%....+.#....# + 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x37, 0x11, 0x23, 0x35, 0x33, 0x35, 0x34, // "&'7..3267.#5354 + 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x06, 0x06, 0x07, 0x15, 0x33, 0x03, // >.32...&&#....3. + 0x7f, 0xd4, 0x32, 0x5d, 0x87, 0x55, 0x29, 0x50, 0x27, 0x0e, 0x0b, 0x29, 0x2c, 0x27, 0x0b, 0x55, // ..2].U)P'..),'.U + 0x5c, 0x01, 0xb1, 0xb1, 0x3a, 0x6d, 0x9a, 0x60, 0x2f, 0x59, 0x2f, 0x17, 0x1a, 0x47, 0x28, 0x82, // ....:m.`/Y/..G(. + 0x7c, 0x01, 0xd4, 0x03, 0xab, 0xfc, 0x21, 0x5d, 0x90, 0x61, 0x33, 0x10, 0x14, 0x94, 0x08, 0x0b, // |.....!].a3..... + 0x09, 0x04, 0x7c, 0x6d, 0x03, 0xdf, 0x8f, 0x63, 0x60, 0x95, 0x65, 0x34, 0x16, 0x11, 0x93, 0x0d, // ..|m...c`.e4.... + 0x10, 0x01, 0x7b, 0x75, 0x63, 0x00, 0x00, 0x02, 0x00, 0x63, 0xff, 0xec, 0x04, 0xc6, 0x05, 0xfa, // ..{uc....c...... + 0x00, 0x23, 0x00, 0x41, 0x00, 0x55, 0x40, 0x0a, 0x19, 0x01, 0x03, 0x01, 0x20, 0x01, 0x04, 0x03, // .#.A.U@..... ... + 0x02, 0x4a, 0x4b, 0xb0, 0x28, 0x50, 0x58, 0x40, 0x1a, 0x00, 0x02, 0x02, 0x3e, 0x4b, 0x00, 0x03, // .JK.(PX@....>K.. + 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x44, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, // ..[...DK....[... + 0x45, 0x00, 0x4c, 0x1b, 0x40, 0x1a, 0x00, 0x02, 0x01, 0x02, 0x72, 0x00, 0x03, 0x03, 0x01, 0x5b, // E.L.@.....r....[ + 0x00, 0x01, 0x01, 0x44, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, // ...DK....[...E.L + 0x59, 0xb7, 0x2d, 0x2d, 0x15, 0x2d, 0x26, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x0e, 0x05, 0x23, 0x22, // Y.--.-&...+...#" + 0x2e, 0x04, 0x27, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x37, 0x33, 0x16, 0x06, // ..'5>.32..6673.. + 0x07, 0x16, 0x16, 0x17, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x04, 0x07, 0x15, 0x1e, 0x05, 0x33, // ....'..#"......3 + 0x32, 0x3e, 0x04, 0x37, 0x04, 0x5a, 0x01, 0x19, 0x34, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x91, 0x70, // 2>.7.Z..4Qp.ZZ.p + 0x52, 0x35, 0x1a, 0x01, 0x01, 0x19, 0x35, 0x51, 0x70, 0x91, 0x5a, 0x71, 0xa9, 0x3d, 0x36, 0x32, // R5....5Qp.Zq.=62 + 0x01, 0xa7, 0x01, 0x64, 0x5e, 0x2c, 0x28, 0x02, 0xb7, 0x01, 0x0c, 0x1d, 0x30, 0x48, 0x62, 0x41, // ...d^,(.....0HbA + 0x40, 0x62, 0x48, 0x30, 0x1d, 0x0d, 0x01, 0x01, 0x0d, 0x1e, 0x30, 0x48, 0x62, 0x41, 0x41, 0x63, // @bH0......0HbAAc + 0x47, 0x2f, 0x1d, 0x0b, 0x01, 0x02, 0x84, 0x4e, 0x9f, 0x94, 0x80, 0x60, 0x37, 0x37, 0x60, 0x81, // G/.....N...`77`. + 0x94, 0x9e, 0x4e, 0xa6, 0x4e, 0x9f, 0x94, 0x81, 0x61, 0x37, 0x54, 0x47, 0x12, 0x6c, 0x53, 0x7f, // ..N.N...a7TG.lS. + 0xa8, 0x23, 0x58, 0xca, 0x64, 0x02, 0x34, 0x71, 0x6f, 0x65, 0x4d, 0x2d, 0x2e, 0x4d, 0x65, 0x6f, // .#X.d.4qoeM-.Meo + 0x71, 0x33, 0xa8, 0x33, 0x72, 0x6f, 0x66, 0x4d, 0x2e, 0x2e, 0x4d, 0x65, 0x6f, 0x72, 0x34, 0x00, // q3.3rofM..Meor4. + 0x00, 0x02, 0x00, 0x77, 0xff, 0xec, 0x04, 0xae, 0x04, 0xaa, 0x00, 0x1d, 0x00, 0x33, 0x00, 0x2f, // ...w.........3./ + 0x40, 0x2c, 0x08, 0x01, 0x04, 0x00, 0x0f, 0x01, 0x03, 0x04, 0x02, 0x4a, 0x00, 0x01, 0x00, 0x01, // @,.........J.... + 0x72, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x47, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, // r....[...GK....[ + 0x00, 0x02, 0x02, 0x45, 0x02, 0x4c, 0x29, 0x29, 0x2b, 0x15, 0x24, 0x05, 0x08, 0x19, 0x2b, 0x13, // ...E.L))+.$...+. + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x35, 0x33, 0x06, 0x06, 0x07, 0x16, 0x16, // 4>.32..6653..... + 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, // .....#"..53...32 + 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x77, 0x44, 0x7f, 0xb6, // >.554..#"...wD.. + 0x72, 0x60, 0x9e, 0x3d, 0x36, 0x33, 0xa8, 0x01, 0x5b, 0x56, 0x29, 0x2a, 0x44, 0x7f, 0xb6, 0x72, // r`.=63..[V)*D..r + 0x73, 0xb7, 0x7f, 0x44, 0xb9, 0x26, 0x4d, 0x74, 0x4d, 0x4c, 0x73, 0x4d, 0x26, 0x27, 0x4d, 0x73, // s..D.&MtMLsM&'Ms + 0x4d, 0x4d, 0x72, 0x4d, 0x26, 0x02, 0x27, 0x75, 0xc9, 0x94, 0x55, 0x3b, 0x35, 0x11, 0x68, 0x53, // MMrM&.'u..U;5.hS + 0x79, 0xa2, 0x24, 0x44, 0xa4, 0x5c, 0x16, 0x75, 0xc8, 0x94, 0x54, 0x54, 0x94, 0xc8, 0x75, 0x50, // y.$D...u..TT..uP + 0x91, 0x6e, 0x40, 0x40, 0x6e, 0x91, 0x50, 0x16, 0x4f, 0x91, 0x6e, 0x41, 0x41, 0x6e, 0x91, 0x4f, // .n@@n.P.O.nAAn.O + 0x00, 0x01, 0x00, 0x8b, 0xff, 0xec, 0x05, 0x83, 0x05, 0xe8, 0x00, 0x23, 0x00, 0x33, 0x40, 0x30, // ...........#.3@0 + 0x01, 0x01, 0x01, 0x03, 0x01, 0x4a, 0x06, 0x05, 0x02, 0x03, 0x03, 0x3c, 0x4b, 0x00, 0x01, 0x01, // .....J.....K....[...E + 0x02, 0x4c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x23, 0x25, 0x15, 0x25, 0x12, 0x16, 0x07, 0x08, 0x19, // .L...#.#%.%..... + 0x2b, 0x01, 0x15, 0x3e, 0x03, 0x35, 0x33, 0x14, 0x06, 0x07, 0x13, 0x0e, 0x03, 0x23, 0x22, 0x2e, // +..>.53......#". + 0x02, 0x27, 0x13, 0x33, 0x13, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x13, 0x04, 0x40, 0x2d, // .'.3...32>.7..@- + 0x3c, 0x24, 0x0f, 0xa7, 0x9c, 0xa6, 0x01, 0x02, 0x46, 0x7e, 0xae, 0x68, 0x6a, 0xae, 0x7c, 0x46, // <$......F~.hj.|F + 0x01, 0x02, 0xb0, 0x04, 0x01, 0x27, 0x49, 0x6d, 0x47, 0x47, 0x6c, 0x49, 0x26, 0x02, 0x03, 0x05, // .....'ImGGlI&... + 0xb0, 0xb8, 0x06, 0x22, 0x3b, 0x55, 0x38, 0xb4, 0xb9, 0x0b, 0xfd, 0x66, 0x66, 0xb2, 0x85, 0x4d, // ...";U8....ff..M + 0x4c, 0x85, 0xb3, 0x66, 0x03, 0xda, 0xfc, 0x26, 0x41, 0x78, 0x5c, 0x38, 0x37, 0x5d, 0x78, 0x41, // L..f...&Ax.87]xA + 0x03, 0xda, 0x00, 0x01, 0x00, 0xb4, 0xff, 0xec, 0x05, 0x3f, 0x04, 0x93, 0x00, 0x1f, 0x00, 0x5b, // .........?.....[ + 0x40, 0x09, 0x1c, 0x19, 0x06, 0x03, 0x04, 0x03, 0x02, 0x01, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, // @.........JK..PX + 0x40, 0x18, 0x06, 0x01, 0x05, 0x02, 0x05, 0x72, 0x04, 0x01, 0x02, 0x02, 0x3f, 0x4b, 0x00, 0x03, // @......r....?K.. + 0x03, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x1b, 0x40, 0x1c, 0x06, 0x01, 0x05, // ..[....=.L.@.... + 0x02, 0x05, 0x72, 0x04, 0x01, 0x02, 0x02, 0x3f, 0x4b, 0x00, 0x00, 0x00, 0x3d, 0x4b, 0x00, 0x03, // ..r....?K...=K.. + 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x45, 0x01, 0x4c, 0x59, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x1f, // ..[...E.LY@..... + 0x00, 0x1f, 0x13, 0x25, 0x15, 0x23, 0x14, 0x07, 0x08, 0x19, 0x2b, 0x01, 0x06, 0x06, 0x07, 0x11, // ...%.#....+..... + 0x23, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x33, 0x11, 0x14, 0x1e, 0x02, 0x33, // #'..#"..5.3....3 + 0x32, 0x36, 0x37, 0x11, 0x33, 0x15, 0x36, 0x36, 0x35, 0x05, 0x3f, 0x01, 0x8c, 0x93, 0xa8, 0x0b, // 267.3.665.?..... + 0x36, 0xa2, 0x6a, 0x55, 0x8a, 0x62, 0x35, 0xb9, 0x1c, 0x38, 0x51, 0x35, 0x71, 0x8b, 0x22, 0xba, // 6.jU.b5..8Q5q.". + 0x44, 0x34, 0x04, 0x93, 0xaa, 0xb4, 0x13, 0xfc, 0xde, 0x95, 0x50, 0x59, 0x35, 0x70, 0xad, 0x79, // D4........PY5p.y + 0x02, 0x83, 0xfd, 0x7b, 0x58, 0x74, 0x45, 0x1c, 0x5c, 0x4e, 0x03, 0x08, 0x8d, 0x12, 0x6f, 0x65, // ...{XtE..N....oe + 0x00, 0x01, 0x00, 0xb0, 0xfe, 0x4b, 0x03, 0x2a, 0x04, 0x3a, 0x00, 0x17, 0x00, 0x29, 0x40, 0x26, // .....K.*.:...)@& + 0x0b, 0x01, 0x02, 0x03, 0x0a, 0x01, 0x01, 0x02, 0x02, 0x4a, 0x00, 0x03, 0x03, 0x00, 0x59, 0x00, // .........J....Y. + 0x00, 0x00, 0x3f, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x49, 0x01, 0x4c, 0x15, // ..?K....[...I.L. + 0x44, 0x35, 0x10, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x21, 0x11, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, // D5....+.!....#"& + 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x11, 0x21, 0x01, 0x04, 0x02, 0x26, 0x39, // '7..32>.5.!...&9 + 0x6d, 0x9d, 0x64, 0x39, 0x63, 0x37, 0x0d, 0x11, 0x33, 0x36, 0x31, 0x0e, 0x34, 0x5b, 0x44, 0x27, // m.d9c7..361.4[D' + 0xfe, 0x94, 0x04, 0x3a, 0xfb, 0xbf, 0x68, 0xa0, 0x6d, 0x39, 0x07, 0x0a, 0x98, 0x03, 0x05, 0x03, // ...:..h.m9...... + 0x01, 0x1b, 0x40, 0x69, 0x4d, 0x03, 0xa0, 0x00, 0x00, 0x02, 0x00, 0xb1, 0xff, 0xec, 0x04, 0x5f, // ..@iM.........._ + 0x04, 0x4f, 0x00, 0x1f, 0x00, 0x2b, 0x00, 0x43, 0x40, 0x40, 0x1b, 0x01, 0x03, 0x00, 0x1a, 0x01, // .O...+.C@@...... + 0x02, 0x03, 0x02, 0x4a, 0x00, 0x02, 0x00, 0x05, 0x04, 0x02, 0x05, 0x61, 0x00, 0x03, 0x03, 0x00, // ...J.......a.... + 0x5b, 0x06, 0x01, 0x00, 0x00, 0x47, 0x4b, 0x07, 0x01, 0x04, 0x04, 0x01, 0x5b, 0x00, 0x01, 0x01, // [....GK.....[... + 0x45, 0x01, 0x4c, 0x21, 0x20, 0x01, 0x00, 0x26, 0x25, 0x20, 0x2b, 0x21, 0x2b, 0x18, 0x16, 0x12, // E.L! ..&% +!+... + 0x11, 0x0c, 0x0a, 0x00, 0x1f, 0x01, 0x1f, 0x08, 0x08, 0x14, 0x2b, 0x01, 0x32, 0x1e, 0x02, 0x15, // ..........+.2... + 0x15, 0x14, 0x0e, 0x02, 0x27, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x21, 0x2e, 0x03, 0x23, 0x22, 0x06, // ....'"..55!..#". + 0x07, 0x27, 0x3e, 0x03, 0x13, 0x32, 0x3e, 0x02, 0x37, 0x21, 0x15, 0x14, 0x1e, 0x02, 0x02, 0x61, // .'>..2>.7!.....a + 0x76, 0xbd, 0x84, 0x47, 0x4e, 0x85, 0xaf, 0x60, 0x75, 0xad, 0x72, 0x38, 0x02, 0xf4, 0x03, 0x2c, // v..GN..`u.r8..., + 0x51, 0x76, 0x4e, 0x71, 0xa1, 0x36, 0x49, 0x1b, 0x4b, 0x63, 0x7d, 0x67, 0x39, 0x61, 0x4b, 0x32, // QvNq.6I.Kc}g9aK2 + 0x0b, 0xfd, 0xcb, 0x21, 0x43, 0x68, 0x04, 0x4f, 0x51, 0x91, 0xc6, 0x75, 0x2c, 0x75, 0xc6, 0x8f, // ...!Ch.OQ..u,u.. + 0x50, 0x01, 0x48, 0x80, 0xb1, 0x69, 0x79, 0x4c, 0x86, 0x64, 0x3a, 0x3e, 0x2e, 0x7d, 0x19, 0x30, // P.H..iyL.d:>.}.0 + 0x26, 0x17, 0xfc, 0x35, 0x2e, 0x51, 0x6e, 0x40, 0x1a, 0x36, 0x64, 0x4c, 0x2d, 0x00, 0x00, 0x01, // &..5.Qn@.6dL-... + 0x00, 0xc1, 0x04, 0xe4, 0x03, 0x1e, 0x05, 0xed, 0x00, 0x08, 0x00, 0x1d, 0x40, 0x1a, 0x06, 0x03, // ............@... + 0x00, 0x03, 0x00, 0x02, 0x01, 0x4a, 0x01, 0x01, 0x00, 0x02, 0x00, 0x73, 0x00, 0x02, 0x02, 0x3e, // .....J.....s...> + 0x02, 0x4c, 0x12, 0x12, 0x11, 0x03, 0x08, 0x17, 0x2b, 0x01, 0x15, 0x23, 0x27, 0x07, 0x23, 0x35, // .L......+..#'.#5 + 0x37, 0x33, 0x03, 0x1e, 0x9a, 0x96, 0x95, 0x98, 0xf5, 0x70, 0x04, 0xfd, 0x19, 0x97, 0x97, 0x1a, // 73.......p...... + 0xef, 0x00, 0x00, 0x01, 0x01, 0x30, 0x04, 0xe3, 0x03, 0x9b, 0x05, 0xed, 0x00, 0x08, 0x00, 0x1b, // .....0.......... + 0x40, 0x18, 0x06, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x00, 0x01, 0x00, 0x01, 0x73, 0x02, 0x01, 0x00, // @......J....s... + 0x00, 0x3e, 0x00, 0x4c, 0x12, 0x12, 0x11, 0x03, 0x08, 0x17, 0x2b, 0x01, 0x37, 0x33, 0x15, 0x07, // .>.L......+.73.. + 0x23, 0x27, 0x35, 0x33, 0x02, 0x64, 0x97, 0xa0, 0xfe, 0x72, 0xfb, 0x9d, 0x05, 0x55, 0x98, 0x12, // #'53.d...r...U.. + 0xf8, 0xf5, 0x15, 0x00, 0x00, 0x01, 0x01, 0x3b, 0x04, 0xa7, 0x03, 0x91, 0x05, 0xb2, 0x00, 0x15, // .......;........ + 0x00, 0x1e, 0x40, 0x1b, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x5f, 0x04, 0x03, 0x02, 0x01, 0x01, // ..@......._..... + 0x3c, 0x01, 0x4c, 0x00, 0x00, 0x00, 0x15, 0x00, 0x15, 0x24, 0x14, 0x24, 0x05, 0x08, 0x17, 0x2b, // <.L......$.$...+ + 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, // ....#"..53...32> + 0x02, 0x35, 0x03, 0x91, 0x2a, 0x4e, 0x6e, 0x44, 0x45, 0x6e, 0x4e, 0x2b, 0x96, 0x12, 0x24, 0x38, // .5..*NnDEnN+..$8 + 0x28, 0x27, 0x37, 0x24, 0x12, 0x05, 0xb2, 0x3b, 0x63, 0x46, 0x27, 0x27, 0x46, 0x63, 0x3b, 0x1e, // ('7$...;cF''Fc;. + 0x37, 0x28, 0x18, 0x18, 0x28, 0x37, 0x1e, 0x00, 0x00, 0x01, 0x01, 0xf2, 0x04, 0xe1, 0x02, 0xd8, // 7(..(7.......... + 0x05, 0xbe, 0x00, 0x0b, 0x00, 0x13, 0x40, 0x10, 0x00, 0x01, 0x01, 0x00, 0x5b, 0x00, 0x00, 0x00, // ......@.....[... + 0x44, 0x01, 0x4c, 0x24, 0x22, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, // D.L$"...+.4632.. + 0x14, 0x06, 0x23, 0x22, 0x26, 0x01, 0xf2, 0x3a, 0x39, 0x39, 0x3a, 0x3a, 0x39, 0x39, 0x3a, 0x05, // ..#"&..:99::99:. + 0x4e, 0x30, 0x40, 0x40, 0x30, 0x2e, 0x3f, 0x3f, 0x00, 0x02, 0x01, 0x9a, 0x04, 0x5e, 0x03, 0x31, // N0@@0.??.....^.1 + 0x05, 0xe7, 0x00, 0x13, 0x00, 0x23, 0x00, 0x1c, 0x40, 0x19, 0x00, 0x02, 0x00, 0x01, 0x02, 0x01, // .....#..@....... + 0x5f, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3e, 0x03, 0x4c, 0x26, 0x28, 0x28, 0x24, // _....[...>.L&(($ + 0x04, 0x08, 0x18, 0x2b, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, // ...+.4>.32...... + 0x23, 0x22, 0x2e, 0x02, 0x37, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, // #"..7...32>.54&# + 0x22, 0x06, 0x01, 0x9a, 0x21, 0x37, 0x4b, 0x2a, 0x2a, 0x49, 0x37, 0x20, 0x20, 0x37, 0x49, 0x2a, // "...!7K**I7 7I* + 0x2a, 0x4b, 0x37, 0x21, 0x63, 0x11, 0x1d, 0x26, 0x16, 0x16, 0x25, 0x1c, 0x10, 0x3b, 0x2c, 0x2c, // *K7!c..&..%..;,, + 0x3e, 0x05, 0x20, 0x2b, 0x49, 0x35, 0x1e, 0x1e, 0x35, 0x49, 0x2b, 0x2b, 0x48, 0x33, 0x1c, 0x1c, // >. +I5..5I++H3.. + 0x33, 0x48, 0x2b, 0x16, 0x26, 0x1d, 0x10, 0x10, 0x1c, 0x26, 0x17, 0x30, 0x3d, 0x3d, 0x00, 0x01, // 3H+.&....&.0==.. + 0x01, 0x8e, 0xfe, 0x4f, 0x03, 0x01, 0x00, 0x38, 0x00, 0x17, 0x00, 0x1e, 0x40, 0x1b, 0x0a, 0x01, // ...O...8....@... + 0x01, 0x00, 0x01, 0x4a, 0x17, 0x09, 0x02, 0x00, 0x48, 0x00, 0x00, 0x00, 0x01, 0x5b, 0x00, 0x01, // ...J....H....[.. + 0x01, 0x49, 0x01, 0x4c, 0x25, 0x25, 0x02, 0x08, 0x16, 0x2b, 0x21, 0x06, 0x06, 0x15, 0x14, 0x16, // .I.L%%...+!..... + 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x37, // 3.67...#"..54>.7 + 0x02, 0xdb, 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, // ..N^$* 5...UA)F4 + 0x1e, 0x23, 0x40, 0x5b, 0x38, 0x2a, 0x6f, 0x42, 0x22, 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, // .#@[8*oB")...y.. + 0x18, 0x30, 0x47, 0x2f, 0x29, 0x53, 0x4e, 0x46, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x8a, 0x04, 0xe3, // .0G/)SNF........ + 0x03, 0x3a, 0x05, 0xf1, 0x00, 0x1f, 0x00, 0x4f, 0x40, 0x12, 0x00, 0x01, 0x03, 0x02, 0x10, 0x01, // .:.....O@....... + 0x00, 0x01, 0x02, 0x4a, 0x1f, 0x01, 0x02, 0x48, 0x0f, 0x01, 0x00, 0x47, 0x4b, 0xb0, 0x16, 0x50, // ...J...H...GK..P + 0x58, 0x40, 0x15, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x3e, 0x4b, 0x00, 0x00, 0x00, // X@.....[...>K... + 0x03, 0x5b, 0x00, 0x03, 0x03, 0x3c, 0x00, 0x4c, 0x1b, 0x40, 0x12, 0x00, 0x03, 0x00, 0x00, 0x03, // .[...<.L.@...... + 0x00, 0x5f, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x3e, 0x01, 0x4c, 0x59, 0xb6, 0x23, // ._....[...>.LY.# + 0x27, 0x25, 0x24, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x04, 0x23, // '%$...+....#"..# + 0x22, 0x06, 0x07, 0x27, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, // "..'4>.32..32>.5 + 0x03, 0x3a, 0x1f, 0x36, 0x4c, 0x2d, 0x21, 0x34, 0x2b, 0x26, 0x27, 0x2c, 0x1b, 0x2c, 0x39, 0x01, // .:.6L-!4+&',.,9. + 0x68, 0x1f, 0x36, 0x4b, 0x2e, 0x2a, 0x43, 0x3f, 0x41, 0x27, 0x15, 0x26, 0x1b, 0x11, 0x05, 0xd3, // h.6K.*C?A'.&.... + 0x2d, 0x52, 0x3d, 0x24, 0x0e, 0x15, 0x19, 0x15, 0x0e, 0x41, 0x2e, 0x18, 0x2d, 0x53, 0x3f, 0x26, // -R=$.....A..-S?& + 0x1e, 0x23, 0x1e, 0x12, 0x1e, 0x29, 0x17, 0x00, 0x00, 0x02, 0x00, 0xf6, 0x04, 0xe2, 0x03, 0xd6, // .#...).......... + 0x05, 0xef, 0x00, 0x03, 0x00, 0x07, 0x00, 0x17, 0x40, 0x14, 0x03, 0x01, 0x01, 0x01, 0x00, 0x59, // ........@......Y + 0x02, 0x01, 0x00, 0x00, 0x3e, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, 0x08, 0x18, 0x2b, 0x01, // ....>.L.......+. + 0x33, 0x01, 0x23, 0x03, 0x33, 0x03, 0x23, 0x02, 0xf5, 0xe1, 0xfe, 0xcf, 0xa9, 0x4a, 0xcf, 0xf5, // 3.#.3.#......J.. + 0x96, 0x05, 0xef, 0xfe, 0xf3, 0x01, 0x0d, 0xfe, 0xf3, 0x00, 0x00, 0x02, 0x01, 0xad, 0xfe, 0x86, // ................ + 0x02, 0xdd, 0xff, 0xab, 0x00, 0x13, 0x00, 0x1f, 0x00, 0x3f, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, // .........?K..PX@ + 0x13, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x63, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, // ........c....[.. + 0x01, 0x41, 0x01, 0x4c, 0x1b, 0x40, 0x18, 0x00, 0x00, 0x00, 0x03, 0x02, 0x00, 0x03, 0x63, 0x00, // .A.L.@........c. + 0x02, 0x01, 0x01, 0x02, 0x57, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x02, 0x01, 0x4f, 0x59, // ....W....[....OY + 0xb6, 0x24, 0x26, 0x28, 0x24, 0x04, 0x08, 0x18, 0x2b, 0x05, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, // .$&($...+.4>.32. + 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x37, 0x16, 0x16, 0x33, 0x32, 0x36, 0x35, // .....#"..7..3265 + 0x34, 0x26, 0x23, 0x22, 0x06, 0x01, 0xad, 0x18, 0x2a, 0x38, 0x20, 0x1f, 0x36, 0x29, 0x18, 0x18, // 4&#"....*8 .6).. + 0x29, 0x36, 0x1f, 0x20, 0x38, 0x2a, 0x18, 0x56, 0x01, 0x27, 0x1c, 0x1a, 0x26, 0x26, 0x1a, 0x1c, // )6. 8*.V.'..&&.. + 0x27, 0xe9, 0x20, 0x37, 0x27, 0x16, 0x16, 0x27, 0x37, 0x20, 0x20, 0x36, 0x26, 0x15, 0x15, 0x26, // '. 7'..'7 6&..& + 0x36, 0x20, 0x1b, 0x26, 0x25, 0x1c, 0x1d, 0x27, 0x27, 0x00, 0x00, 0x01, 0xfc, 0xca, 0x04, 0xbc, // 6 .&%..''....... + 0xfd, 0xfb, 0x06, 0x16, 0x00, 0x03, 0x00, 0x11, 0x40, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x72, 0x00, // ........@.....r. + 0x00, 0x00, 0x69, 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x23, 0x03, 0x33, 0xfd, 0xfb, 0x7e, // ..i.....+.#.3..~ + 0xb3, 0xb2, 0x04, 0xbc, 0x01, 0x5a, 0x00, 0x01, 0xfd, 0x68, 0x04, 0xbc, 0xfe, 0x96, 0x06, 0x17, // .....Z...h...... + 0x00, 0x03, 0x00, 0x11, 0x40, 0x0e, 0x00, 0x00, 0x01, 0x00, 0x72, 0x00, 0x01, 0x01, 0x69, 0x11, // ....@.....r...i. + 0x10, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x33, 0x03, 0x23, 0xfd, 0xea, 0xac, 0xba, 0x74, 0x06, 0x17, // ....+.3.#....t.. + 0xfe, 0xa5, 0xff, 0xff, 0xfc, 0x88, 0x04, 0xe3, 0xff, 0x38, 0x05, 0xf1, 0x00, 0x07, 0x00, 0xa2, // .........8...... + 0xfb, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xfd, 0x59, 0x04, 0xd9, 0xfe, 0x8f, 0x06, 0x74, 0x00, 0x13, // .......Y.....t.. + 0x00, 0x2e, 0x40, 0x2b, 0x12, 0x01, 0x03, 0x00, 0x01, 0x4a, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, // ..@+.....J...... + 0x01, 0x63, 0x00, 0x00, 0x03, 0x03, 0x00, 0x57, 0x00, 0x00, 0x00, 0x03, 0x59, 0x04, 0x01, 0x03, // .c.....W....Y... + 0x00, 0x03, 0x4d, 0x00, 0x00, 0x00, 0x13, 0x00, 0x13, 0x11, 0x16, 0x11, 0x05, 0x08, 0x17, 0x2b, // ..M............+ + 0x01, 0x27, 0x36, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x37, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, // .'6654..#72..... + 0x07, 0x07, 0xfd, 0x6f, 0x01, 0x47, 0x4a, 0x1b, 0x2e, 0x3c, 0x21, 0x07, 0x90, 0x9f, 0x1b, 0x2c, // ...o.GJ...L.......+.#. + 0x33, 0x01, 0x23, 0x03, 0x33, 0xfd, 0xe0, 0xa9, 0xfe, 0xce, 0xe1, 0x01, 0xff, 0x96, 0xf6, 0xcf, // 3.#.3........... + 0x04, 0xe4, 0x01, 0x0a, 0xfe, 0xf6, 0x01, 0x0a, 0x00, 0x01, 0xfd, 0x27, 0xfe, 0xa8, 0xfe, 0x0d, // ...........'.... + 0xff, 0x85, 0x00, 0x0b, 0x00, 0x18, 0x40, 0x15, 0x00, 0x00, 0x01, 0x01, 0x00, 0x57, 0x00, 0x00, // ......@......W.. + 0x00, 0x01, 0x5b, 0x00, 0x01, 0x00, 0x01, 0x4f, 0x24, 0x22, 0x02, 0x08, 0x16, 0x2b, 0x05, 0x34, // ..[....O$"...+.4 + 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0xfd, 0x27, 0x3a, 0x39, 0x39, 0x3a, // 632....#"&.':99: + 0x3a, 0x39, 0x39, 0x3a, 0xeb, 0x30, 0x40, 0x40, 0x30, 0x2e, 0x3f, 0x3f, 0x00, 0x01, 0x02, 0x29, // :99:.0@@0.??...) + 0x04, 0xf7, 0x03, 0x2d, 0x06, 0x7a, 0x00, 0x03, 0x00, 0x18, 0x40, 0x15, 0x00, 0x00, 0x01, 0x01, // ...-.z....@..... + 0x00, 0x55, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x00, 0x01, 0x4d, 0x11, 0x10, 0x02, 0x07, // .U....Y....M.... + 0x16, 0x2b, 0x01, 0x33, 0x03, 0x23, 0x02, 0x6a, 0xc3, 0xaa, 0x5a, 0x06, 0x7a, 0xfe, 0x7d, 0x00, // .+.3.#.j..Z.z.}. + 0x00, 0x03, 0x01, 0x13, 0x04, 0xe2, 0x03, 0xf3, 0x06, 0xbf, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x1b, // ................ + 0x00, 0x21, 0x40, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x01, 0x61, 0x05, 0x01, 0x03, 0x03, // .!@........a.... + 0x02, 0x5b, 0x04, 0x01, 0x02, 0x02, 0x30, 0x03, 0x4c, 0x24, 0x24, 0x24, 0x23, 0x11, 0x10, 0x06, // .[....0.L$$$#... + 0x07, 0x1a, 0x2b, 0x01, 0x33, 0x03, 0x23, 0x05, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, // ..+.3.#.4632.... + 0x23, 0x22, 0x26, 0x25, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x02, // #"&%4632....#"&. + 0x74, 0xcd, 0x76, 0x87, 0xfe, 0xcf, 0x39, 0x39, 0x39, 0x3a, 0x3a, 0x39, 0x39, 0x39, 0x01, 0xfb, // t.v...999::999.. + 0x39, 0x39, 0x39, 0x3a, 0x3a, 0x39, 0x39, 0x39, 0x06, 0xbf, 0xfe, 0xf8, 0x67, 0x30, 0x40, 0x40, // 999::999....g0@@ + 0x30, 0x2e, 0x40, 0x40, 0x2e, 0x30, 0x40, 0x40, 0x30, 0x2e, 0x40, 0x40, 0xff, 0xff, 0x02, 0x30, // 0.@@.0@@0.@@...0 + 0x02, 0x6b, 0x03, 0x16, 0x03, 0x49, 0x02, 0x06, 0x00, 0x76, 0x38, 0x00, 0x00, 0x01, 0x00, 0xb5, // .k...I...v8..... + 0x00, 0x00, 0x04, 0x30, 0x05, 0xb0, 0x00, 0x05, 0x00, 0x19, 0x40, 0x16, 0x00, 0x00, 0x00, 0x02, // ...0......@..... + 0x59, 0x00, 0x02, 0x02, 0x28, 0x4b, 0x00, 0x01, 0x01, 0x29, 0x01, 0x4c, 0x11, 0x11, 0x10, 0x03, // Y...(K...).L.... + 0x07, 0x17, 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x04, 0x30, 0xfd, 0x3f, 0xba, 0x03, 0x7b, // ..+.!.#.!.0.?..{ + 0x05, 0x18, 0xfa, 0xe8, 0x05, 0xb0, 0x00, 0x02, 0x00, 0x2e, 0x00, 0x00, 0x04, 0xb4, 0x05, 0xb0, // ................ + 0x00, 0x03, 0x00, 0x06, 0x00, 0x1f, 0x40, 0x1c, 0x06, 0x01, 0x02, 0x00, 0x01, 0x4a, 0x00, 0x00, // ......@......J.. + 0x00, 0x28, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5a, 0x00, 0x01, 0x01, 0x29, 0x01, 0x4c, 0x11, 0x11, // .(K....Z...).L.. + 0x10, 0x03, 0x07, 0x17, 0x2b, 0x01, 0x33, 0x01, 0x21, 0x37, 0x21, 0x01, 0x02, 0x34, 0xa0, 0x01, // ....+.3.!7!..4.. + 0xe0, 0xfb, 0x7a, 0xf0, 0x02, 0xa9, 0xfe, 0xba, 0x05, 0xb0, 0xfa, 0x50, 0x97, 0x04, 0x1c, 0x00, // ..z........P.... + 0x00, 0x03, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x05, 0xc4, 0x00, 0x03, 0x00, 0x21, 0x00, 0x3f, // ...j...a.....!.? + 0x00, 0x29, 0x40, 0x26, 0x00, 0x01, 0x00, 0x00, 0x05, 0x01, 0x00, 0x61, 0x00, 0x04, 0x04, 0x03, // .)@&.......a.... + 0x5b, 0x00, 0x03, 0x03, 0x30, 0x4b, 0x00, 0x05, 0x05, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x31, 0x02, // [...0K....[...1. + 0x4c, 0x2d, 0x2d, 0x2d, 0x27, 0x11, 0x10, 0x06, 0x07, 0x1a, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x05, // L---'.....+.!5!. + 0x0e, 0x05, 0x23, 0x22, 0x2e, 0x04, 0x27, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x1e, 0x04, 0x17, 0x27, // ..#"..'5>.32...' + 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x04, 0x07, 0x15, 0x1e, 0x05, 0x33, 0x32, 0x3e, 0x04, 0x37, 0x03, // ..#"......32>.7. + 0x4d, 0xfe, 0x30, 0x01, 0xd0, 0x01, 0x14, 0x01, 0x19, 0x34, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x91, // M.0......4Qp.ZZ. + 0x70, 0x52, 0x35, 0x1a, 0x01, 0x01, 0x19, 0x35, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x92, 0x70, 0x51, // pR5....5Qp.ZZ.pQ + 0x35, 0x19, 0x01, 0xb7, 0x01, 0x0c, 0x1d, 0x30, 0x48, 0x62, 0x41, 0x40, 0x62, 0x48, 0x30, 0x1d, // 5......0HbA@bH0. + 0x0d, 0x01, 0x01, 0x0d, 0x1e, 0x30, 0x48, 0x62, 0x41, 0x41, 0x63, 0x47, 0x2f, 0x1d, 0x0b, 0x01, // .....0HbAAcG/... + 0x02, 0x94, 0x97, 0xa7, 0x4e, 0x9f, 0x94, 0x80, 0x60, 0x37, 0x37, 0x60, 0x81, 0x94, 0x9e, 0x4e, // ....N...`77`...N + 0xa6, 0x4e, 0x9f, 0x94, 0x81, 0x61, 0x37, 0x37, 0x60, 0x81, 0x94, 0xa0, 0x4e, 0x02, 0x34, 0x71, // .N...a77`...N.4q + 0x6f, 0x65, 0x4d, 0x2d, 0x2e, 0x4d, 0x65, 0x6f, 0x71, 0x33, 0xa8, 0x33, 0x72, 0x6f, 0x66, 0x4d, // oeM-.Meoq3.3rofM + 0x2e, 0x2e, 0x4d, 0x65, 0x6f, 0x72, 0x34, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x04, 0xa0, // ..Meor4....6.... + 0x05, 0xb0, 0x00, 0x06, 0x00, 0x15, 0x40, 0x12, 0x00, 0x01, 0x01, 0x28, 0x4b, 0x02, 0x01, 0x00, // ......@....(K... + 0x00, 0x29, 0x00, 0x4c, 0x11, 0x11, 0x11, 0x03, 0x07, 0x17, 0x2b, 0x01, 0x01, 0x23, 0x01, 0x33, // .).L......+..#.3 + 0x01, 0x23, 0x02, 0x6a, 0xfe, 0x89, 0xbd, 0x01, 0xe4, 0xa1, 0x01, 0xe5, 0xbd, 0x04, 0x9c, 0xfb, // .#.j............ + 0x64, 0x05, 0xb0, 0xfa, 0x50, 0x00, 0x00, 0x03, 0x00, 0x91, 0x00, 0x00, 0x04, 0x37, 0x05, 0xb0, // d...P........7.. + 0x00, 0x03, 0x00, 0x07, 0x00, 0x0b, 0x00, 0x29, 0x40, 0x26, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, // .......)@&...... + 0x03, 0x61, 0x00, 0x05, 0x05, 0x04, 0x59, 0x00, 0x04, 0x04, 0x28, 0x4b, 0x00, 0x00, 0x00, 0x01, // .a....Y...(K.... + 0x59, 0x00, 0x01, 0x01, 0x29, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x07, 0x1a, // Y...).L......... + 0x2b, 0x37, 0x21, 0x15, 0x21, 0x13, 0x21, 0x15, 0x21, 0x03, 0x21, 0x15, 0x21, 0x91, 0x03, 0xa6, // +7!.!.!.!.!.!... + 0xfc, 0x5a, 0x55, 0x02, 0xf2, 0xfd, 0x0e, 0x53, 0x03, 0x96, 0xfc, 0x6a, 0x97, 0x97, 0x03, 0x3e, // .ZU....S...j...> + 0x98, 0x03, 0x0a, 0x98, 0x00, 0x01, 0x00, 0xa2, 0x00, 0x00, 0x04, 0x2a, 0x05, 0xb0, 0x00, 0x07, // ...........*.... + 0x00, 0x1b, 0x40, 0x18, 0x00, 0x01, 0x01, 0x03, 0x59, 0x00, 0x03, 0x03, 0x28, 0x4b, 0x02, 0x01, // ..@.....Y...(K.. + 0x00, 0x00, 0x29, 0x00, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, 0x07, 0x18, 0x2b, 0x21, 0x23, 0x11, // ..).L.......+!#. + 0x21, 0x11, 0x23, 0x11, 0x21, 0x04, 0x2a, 0xb9, 0xfd, 0xea, 0xb9, 0x03, 0x88, 0x05, 0x18, 0xfa, // !.#.!.*......... + 0xe8, 0x05, 0xb0, 0x00, 0x00, 0x01, 0x00, 0x70, 0x00, 0x00, 0x04, 0x6f, 0x05, 0xb0, 0x00, 0x0c, // .......p...o.... + 0x00, 0x2f, 0x40, 0x2c, 0x07, 0x01, 0x03, 0x02, 0x0c, 0x06, 0x00, 0x03, 0x00, 0x03, 0x05, 0x01, // ./@,............ + 0x01, 0x00, 0x03, 0x4a, 0x00, 0x03, 0x03, 0x02, 0x59, 0x00, 0x02, 0x02, 0x28, 0x4b, 0x00, 0x00, // ...J....Y...(K.. + 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x29, 0x01, 0x4c, 0x11, 0x14, 0x11, 0x11, 0x04, 0x07, 0x18, // ..Y...).L....... + 0x2b, 0x01, 0x01, 0x21, 0x15, 0x21, 0x35, 0x01, 0x01, 0x35, 0x21, 0x15, 0x21, 0x01, 0x03, 0x19, // +..!.!5..5!.!... + 0xfe, 0x3c, 0x03, 0x1a, 0xfc, 0x01, 0x01, 0xe5, 0xfe, 0x1b, 0x03, 0xcd, 0xfd, 0x19, 0x01, 0xc3, // .<.............. + 0x02, 0xcd, 0xfd, 0xcb, 0x98, 0x90, 0x02, 0x49, 0x02, 0x47, 0x90, 0x98, 0xfd, 0xce, 0x00, 0x03, // .......I.G...... + 0x00, 0x45, 0x00, 0x00, 0x04, 0x87, 0x05, 0xb0, 0x00, 0x19, 0x00, 0x24, 0x00, 0x2f, 0x00, 0x20, // .E.........$./. + 0x40, 0x1d, 0x2b, 0x2a, 0x20, 0x1f, 0x17, 0x0d, 0x0a, 0x00, 0x08, 0x00, 0x01, 0x01, 0x4a, 0x00, // @.+* .........J. + 0x01, 0x01, 0x28, 0x4b, 0x00, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1c, 0x1b, 0x02, 0x07, 0x16, 0x2b, // ..(K...).L.....+ + 0x01, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x15, 0x23, 0x35, 0x2e, 0x03, 0x35, 0x34, 0x3e, // .........#5..54> + 0x02, 0x37, 0x35, 0x33, 0x01, 0x14, 0x1e, 0x02, 0x17, 0x11, 0x0e, 0x03, 0x05, 0x34, 0x2e, 0x02, // .753.........4.. + 0x27, 0x11, 0x3e, 0x03, 0x02, 0xc3, 0x61, 0xa5, 0x79, 0x45, 0x45, 0x79, 0xa5, 0x61, 0xb9, 0x62, // '.>...a.yEEy.a.b + 0xa5, 0x7a, 0x44, 0x44, 0x7a, 0xa5, 0x62, 0xb9, 0xfe, 0x39, 0x24, 0x45, 0x64, 0x41, 0x41, 0x64, // .zDDz.b..9$EdAAd + 0x45, 0x24, 0x02, 0xd3, 0x24, 0x45, 0x63, 0x40, 0x40, 0x63, 0x45, 0x24, 0x04, 0xe2, 0x08, 0x52, // E$..$Ec@@cE$...R + 0x8a, 0xba, 0x6f, 0x70, 0xbb, 0x8b, 0x54, 0x07, 0xc4, 0xc4, 0x07, 0x52, 0x8a, 0xbc, 0x70, 0x6f, // ..op..T....R..po + 0xbc, 0x8a, 0x53, 0x07, 0xce, 0xfd, 0x23, 0x50, 0x85, 0x61, 0x3b, 0x06, 0x02, 0xee, 0x07, 0x3b, // ..S...#P.a;....; + 0x62, 0x84, 0x4d, 0x4f, 0x83, 0x61, 0x3b, 0x07, 0xfd, 0x12, 0x07, 0x3b, 0x62, 0x85, 0x00, 0x01, // b.MO.a;....;b... + 0x00, 0x65, 0x00, 0x00, 0x04, 0x72, 0x05, 0xb0, 0x00, 0x1f, 0x00, 0x20, 0x40, 0x1d, 0x1d, 0x10, // .e...r..... @... + 0x0d, 0x00, 0x04, 0x01, 0x00, 0x01, 0x4a, 0x03, 0x02, 0x02, 0x00, 0x00, 0x28, 0x4b, 0x00, 0x01, // ......J.....(K.. + 0x01, 0x29, 0x01, 0x4c, 0x17, 0x17, 0x17, 0x16, 0x04, 0x07, 0x18, 0x2b, 0x01, 0x3e, 0x03, 0x35, // .).L.......+.>.5 + 0x11, 0x33, 0x11, 0x14, 0x0e, 0x02, 0x07, 0x11, 0x23, 0x11, 0x2e, 0x03, 0x35, 0x11, 0x33, 0x11, // .3......#...5.3. + 0x14, 0x1e, 0x02, 0x17, 0x11, 0x33, 0x02, 0xc7, 0x37, 0x59, 0x3f, 0x23, 0xb9, 0x3f, 0x70, 0x9e, // .....3..7Y?#.?p. + 0x5e, 0xb9, 0x5f, 0x9c, 0x70, 0x3e, 0xb9, 0x22, 0x3f, 0x59, 0x36, 0xb9, 0x01, 0xdf, 0x0c, 0x38, // ^._.p>."?Y6....8 + 0x5a, 0x7d, 0x50, 0x02, 0x66, 0xfd, 0x9a, 0x76, 0xb7, 0x82, 0x4c, 0x0b, 0xfe, 0xbc, 0x01, 0x44, // Z}P.f..v..L....D + 0x0b, 0x4c, 0x82, 0xb7, 0x76, 0x02, 0x66, 0xfd, 0x9a, 0x50, 0x7c, 0x5a, 0x38, 0x0c, 0x03, 0xd0, // .L..v.f..P|Z8... + 0x00, 0x01, 0x00, 0x61, 0x00, 0x00, 0x04, 0x6c, 0x05, 0xc4, 0x00, 0x2f, 0x00, 0x2a, 0x40, 0x27, // ...a...l.../.*@' + 0x12, 0x00, 0x02, 0x02, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x30, // ......J....[...0 + 0x4b, 0x04, 0x01, 0x02, 0x02, 0x01, 0x59, 0x05, 0x01, 0x01, 0x01, 0x29, 0x01, 0x4c, 0x11, 0x1a, // K.....Y....).L.. + 0x2a, 0x11, 0x19, 0x28, 0x06, 0x07, 0x1a, 0x2b, 0x25, 0x36, 0x12, 0x35, 0x35, 0x34, 0x2e, 0x02, // *..(...+%6.554.. + 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x16, 0x12, 0x17, 0x15, 0x21, 0x35, 0x21, 0x2e, 0x03, 0x35, // #"........!5!..5 + 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x21, 0x15, // 54>.32........!. + 0x21, 0x02, 0xa8, 0x80, 0x88, 0x2d, 0x55, 0x7c, 0x4e, 0x4d, 0x7a, 0x55, 0x2e, 0x01, 0x8d, 0x81, // !....-U|NMzU.... + 0xfe, 0x3c, 0x01, 0x06, 0x3e, 0x63, 0x45, 0x24, 0x49, 0x87, 0xbe, 0x75, 0x75, 0xbf, 0x87, 0x4a, // .<..>cE$I..uu..J + 0x24, 0x43, 0x62, 0x3e, 0x01, 0x0a, 0xfe, 0x3c, 0xc1, 0x1d, 0x01, 0x20, 0xf9, 0x51, 0x75, 0xb5, // $Cb>...<... .Qu. + 0x7b, 0x40, 0x40, 0x7b, 0xb5, 0x75, 0x51, 0xfb, 0xfe, 0xe2, 0x1d, 0xc1, 0x97, 0x2f, 0x87, 0xa1, // {@@{.uQ....../.. + 0xb0, 0x59, 0x4f, 0x8b, 0xeb, 0xa9, 0x5f, 0x5f, 0xa9, 0xeb, 0x8b, 0x4f, 0x59, 0xb1, 0xa0, 0x87, // .YO...__...OY... + 0x2f, 0x97, 0x00, 0x02, 0x00, 0x81, 0xff, 0xeb, 0x04, 0x8a, 0x04, 0x4e, 0x00, 0x22, 0x00, 0x36, // /..........N.".6 + 0x00, 0xc6, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x10, 0x21, 0x01, 0x06, 0x03, 0x2c, 0x2b, 0x02, // ..K..PX@.!...,+. + 0x00, 0x06, 0x10, 0x0a, 0x02, 0x01, 0x00, 0x03, 0x4a, 0x1b, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, // ........J.K.!PX@ + 0x10, 0x21, 0x01, 0x06, 0x04, 0x2c, 0x2b, 0x02, 0x00, 0x06, 0x10, 0x0a, 0x02, 0x01, 0x00, 0x03, // .!...,+......... + 0x4a, 0x1b, 0x40, 0x10, 0x21, 0x01, 0x06, 0x04, 0x2c, 0x2b, 0x02, 0x00, 0x06, 0x10, 0x0a, 0x02, // J.@.!...,+...... + 0x01, 0x05, 0x03, 0x4a, 0x59, 0x59, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x19, 0x00, 0x06, 0x06, // ...JYYK..PX@.... + 0x03, 0x5b, 0x07, 0x04, 0x02, 0x03, 0x03, 0x33, 0x4b, 0x05, 0x01, 0x00, 0x00, 0x01, 0x5b, 0x02, // .[.....3K.....[. + 0x01, 0x01, 0x01, 0x31, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, 0x1d, 0x07, 0x01, // ...1.L.K.!PX@... + 0x04, 0x04, 0x2b, 0x4b, 0x00, 0x06, 0x06, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x33, 0x4b, 0x05, 0x01, // ..+K....[...3K.. + 0x00, 0x00, 0x01, 0x5b, 0x02, 0x01, 0x01, 0x01, 0x31, 0x01, 0x4c, 0x1b, 0x40, 0x24, 0x00, 0x00, // ...[....1.L.@$.. + 0x06, 0x05, 0x06, 0x00, 0x05, 0x70, 0x07, 0x01, 0x04, 0x04, 0x2b, 0x4b, 0x00, 0x06, 0x06, 0x03, // .....p....+K.... + 0x5b, 0x00, 0x03, 0x03, 0x33, 0x4b, 0x00, 0x05, 0x05, 0x01, 0x5b, 0x02, 0x01, 0x01, 0x01, 0x31, // [...3K....[....1 + 0x01, 0x4c, 0x59, 0x59, 0x40, 0x11, 0x00, 0x00, 0x32, 0x30, 0x29, 0x27, 0x00, 0x22, 0x00, 0x22, // .LYY@...20)'."." + 0x29, 0x24, 0x25, 0x25, 0x08, 0x07, 0x18, 0x2b, 0x01, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, // )$%%...+.....326 + 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, // 7...#"&'..#"..55 + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x37, 0x01, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, // 4>.32..7....3267 + 0x11, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x03, 0xef, 0x0c, 0x15, 0x1d, 0x12, 0x0f, 0x1b, // ...#"........... + 0x0a, 0x17, 0x1f, 0x3b, 0x20, 0x4b, 0x63, 0x18, 0x36, 0x9a, 0x67, 0x62, 0x96, 0x66, 0x34, 0x34, // ...; Kc.6.gb.f44 + 0x66, 0x97, 0x63, 0x68, 0x9b, 0x36, 0x31, 0xfd, 0xbb, 0x1c, 0x3f, 0x64, 0x47, 0x59, 0x77, 0x26, // f.ch.61...?dGYw& + 0x13, 0x30, 0x3d, 0x49, 0x2b, 0x48, 0x65, 0x3f, 0x1c, 0x04, 0x3a, 0xfc, 0xdb, 0x26, 0x33, 0x1e, // .0=I+He?..:..&3. + 0x0d, 0x04, 0x02, 0x8a, 0x15, 0x0d, 0x43, 0x4a, 0x45, 0x48, 0x4f, 0x8b, 0xbf, 0x70, 0x15, 0x7d, // ......CJEHO..p.} + 0xd5, 0x9b, 0x58, 0x4c, 0x47, 0x7f, 0xfd, 0xba, 0x4b, 0x86, 0x65, 0x3c, 0x52, 0x41, 0x02, 0x13, // ..XLG...K.e.. + 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, 0x16, 0x16, 0x33, // 2>.54..#"......3 + 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x35, 0x02, 0x6b, 0x61, 0x9e, 0x70, 0x3d, // 2>.54..##5.ka.p= + 0x62, 0x58, 0x79, 0x85, 0x44, 0x7a, 0xa6, 0x62, 0x51, 0x9e, 0x3e, 0xba, 0x47, 0x79, 0xa1, 0x58, // bXy.Dz.bQ.>.Gy.X + 0x40, 0x5e, 0x3c, 0x1d, 0x20, 0x3e, 0x5b, 0x3a, 0x37, 0x5f, 0x45, 0x28, 0x2d, 0x90, 0x5d, 0x43, // @^<. >[:7_E(-.]C + 0x6b, 0x4a, 0x28, 0x22, 0x42, 0x5f, 0x3d, 0x8f, 0x05, 0xc4, 0x39, 0x69, 0x90, 0x57, 0x5c, 0x97, // kJ("B_=...9i.W.. + 0x2f, 0x2c, 0xc2, 0x83, 0x6b, 0xa5, 0x72, 0x3b, 0x2e, 0x32, 0xfe, 0x35, 0x05, 0xb1, 0x52, 0x93, // /,..k.r;.2.5..R. + 0x6e, 0x40, 0xfd, 0x96, 0x22, 0x3c, 0x54, 0x33, 0x2e, 0x56, 0x42, 0x28, 0x27, 0x44, 0x5c, 0x35, // n@..".32.....# + 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x16, 0x12, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, // "..............# + 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x37, 0x2e, 0x03, 0x13, 0x14, 0x1e, 0x02, // "..554>.77...... + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x26, 0x0e, 0x02, 0x15, 0x01, 0x07, // 32>.554..'&..... + 0x36, 0x63, 0x8c, 0x56, 0x50, 0x9f, 0x4b, 0x29, 0x17, 0x3f, 0x48, 0x4e, 0x28, 0x2a, 0x45, 0x32, // 6c.VP.K).?HN(*E2 + 0x1c, 0x17, 0x36, 0x59, 0x43, 0xdc, 0xdf, 0x44, 0x81, 0xba, 0x76, 0x78, 0xbb, 0x82, 0x44, 0x36, // ..6YC..D..vx..D6 + 0x5d, 0x7f, 0x48, 0x04, 0x2f, 0x4c, 0x36, 0x1e, 0x2b, 0x26, 0x4f, 0x78, 0x52, 0x51, 0x76, 0x4e, // ].H./L6.+&OxRQvN + 0x26, 0x2d, 0x52, 0x73, 0x47, 0x51, 0x78, 0x50, 0x28, 0x04, 0xf5, 0x45, 0x6e, 0x4c, 0x28, 0x2f, // &-RsGQxP(..EnL(/ + 0x26, 0x82, 0x09, 0x16, 0x13, 0x0d, 0x14, 0x24, 0x33, 0x1f, 0x16, 0x2f, 0x30, 0x30, 0x17, 0x49, // &......$3../00.I + 0xfe, 0xec, 0xcf, 0x15, 0x71, 0xc1, 0x8e, 0x51, 0x51, 0x8e, 0xc1, 0x71, 0x15, 0x57, 0x98, 0x78, // ....q..QQ..q.W.x + 0x52, 0x11, 0x0b, 0x13, 0x36, 0x45, 0x51, 0xfd, 0x37, 0x4d, 0x8a, 0x67, 0x3d, 0x3d, 0x67, 0x8a, // R...6EQ.7M.g==g. + 0x4d, 0x15, 0x3f, 0x7d, 0x69, 0x4b, 0x0c, 0x01, 0x3d, 0x69, 0x8b, 0x4c, 0x00, 0x01, 0x00, 0x8b, // M.?}iK..=i.L.... + 0xff, 0xec, 0x04, 0x60, 0x04, 0x4d, 0x00, 0x3c, 0x00, 0x4e, 0x40, 0x4b, 0x1d, 0x01, 0x00, 0x07, // ...`.M.<.N@K.... + 0x01, 0x4a, 0x00, 0x05, 0x06, 0x07, 0x06, 0x05, 0x07, 0x70, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, // .J.......p...... + 0x01, 0x70, 0x00, 0x07, 0x08, 0x01, 0x00, 0x02, 0x07, 0x00, 0x63, 0x00, 0x06, 0x06, 0x04, 0x5b, // .p........c....[ + 0x00, 0x04, 0x04, 0x33, 0x4b, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x31, 0x03, 0x4c, // ...3K....[...1.L + 0x01, 0x00, 0x3b, 0x39, 0x31, 0x2f, 0x2b, 0x2a, 0x26, 0x24, 0x16, 0x14, 0x0e, 0x0d, 0x09, 0x07, // ..;91/+*&$...... + 0x00, 0x3c, 0x01, 0x3c, 0x09, 0x07, 0x14, 0x2b, 0x01, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x33, // .<.<...+.".....3 + 0x32, 0x3e, 0x02, 0x35, 0x33, 0x0e, 0x05, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x37, 0x26, // 2>.53..#"..5467& + 0x26, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, // &54>.32...#4..#" + 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x33, 0x15, 0x02, 0x6a, 0x91, 0x94, 0x28, 0x4d, 0x72, // ......33..j..(Mr + 0x4a, 0x42, 0x70, 0x51, 0x2e, 0xb9, 0x01, 0x27, 0x45, 0x5e, 0x6c, 0x77, 0x3c, 0x6c, 0xb4, 0x83, // JBpQ...'E^lw.7 + 0x01, 0x21, 0x35, 0x04, 0x2f, 0xfe, 0x67, 0x45, 0x6e, 0x4d, 0x29, 0x5c, 0x5a, 0xdd, 0x36, 0x60, // .!5./.gEnM).Z.6` + 0x46, 0x29, 0x01, 0x23, 0x34, 0x3f, 0x1c, 0x62, 0x31, 0x32, 0x4b, 0x50, 0xb5, 0x59, 0x7f, 0x51, // F).#4?.b12KP.Y.Q + 0x26, 0x2a, 0x57, 0x86, 0x5c, 0x01, 0x32, 0xfd, 0x2c, 0x05, 0xb0, 0x78, 0xfe, 0x55, 0x42, 0x75, // &*W...2.,..x.UBu + 0x78, 0x82, 0x4e, 0x63, 0x62, 0x12, 0x32, 0x0c, 0x1a, 0x2e, 0x4b, 0x3e, 0x27, 0x56, 0x4f, 0x45, // x.Ncb.2...K>'VOE + 0x16, 0x54, 0x36, 0x55, 0x2c, 0x23, 0x38, 0x10, 0x23, 0x10, 0x3b, 0x59, 0x7a, 0x51, 0x39, 0x87, // .T6U,#8.#.;YzQ9. + 0x98, 0xa4, 0x57, 0x01, 0x3c, 0x98, 0x00, 0x01, 0x00, 0xa4, 0xfe, 0x61, 0x04, 0x2b, 0x04, 0x4e, // ..W.<......a.+.N + 0x00, 0x15, 0x00, 0x55, 0xb6, 0x12, 0x01, 0x02, 0x03, 0x02, 0x01, 0x4a, 0x4b, 0xb0, 0x1b, 0x50, // ...U.......JK..P + 0x58, 0x40, 0x17, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x05, 0x04, 0x02, 0x00, 0x00, 0x33, 0x4b, 0x00, // X@.....[.....3K. + 0x03, 0x03, 0x29, 0x4b, 0x00, 0x01, 0x01, 0x2d, 0x01, 0x4c, 0x1b, 0x40, 0x1b, 0x05, 0x01, 0x04, // ..)K...-.L.@.... + 0x04, 0x2b, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x33, 0x4b, 0x00, 0x03, 0x03, // .+K....[...3K... + 0x29, 0x4b, 0x00, 0x01, 0x01, 0x2d, 0x01, 0x4c, 0x59, 0x40, 0x0d, 0x00, 0x00, 0x00, 0x15, 0x00, // )K...-.LY@...... + 0x15, 0x13, 0x23, 0x15, 0x23, 0x06, 0x07, 0x18, 0x2b, 0x01, 0x17, 0x36, 0x36, 0x37, 0x32, 0x1e, // ..#.#...+..6672. + 0x02, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x01, 0x4b, // ...#.4&#"...#..K + 0x0d, 0x37, 0xaa, 0x70, 0x5a, 0x8e, 0x64, 0x36, 0xba, 0x80, 0x7f, 0x65, 0x88, 0x27, 0xba, 0x04, // .7.pZ.d6...e.'.. + 0x3a, 0xa0, 0x54, 0x5f, 0x01, 0x2c, 0x63, 0x9f, 0x73, 0xfb, 0xb4, 0x04, 0x48, 0x90, 0x7d, 0x4d, // :.T_.,c.s...H.}M + 0x41, 0xfc, 0xd8, 0x04, 0x3a, 0x00, 0x00, 0x03, 0x00, 0xb9, 0xff, 0xec, 0x04, 0x18, 0x05, 0xc5, // A...:........... + 0x00, 0x15, 0x00, 0x1e, 0x00, 0x27, 0x00, 0x51, 0x4b, 0xb0, 0x10, 0x50, 0x58, 0x40, 0x1d, 0x00, // .....'.QK..PX@.. + 0x04, 0x00, 0x02, 0x03, 0x04, 0x02, 0x61, 0x00, 0x05, 0x05, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x30, // ......a....[...0 + 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4c, 0x1b, 0x40, 0x1d, 0x00, // K....[...1.L.@.. + 0x04, 0x00, 0x02, 0x03, 0x04, 0x02, 0x61, 0x00, 0x05, 0x05, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x32, // ......a....[...2 + 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4c, 0x59, 0x40, 0x09, 0x23, // K....[...1.LY@.# + 0x13, 0x23, 0x15, 0x29, 0x24, 0x06, 0x07, 0x1a, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, // .#.)$...+....#". + 0x02, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x07, 0x21, 0x15, 0x14, 0x16, // .5.4>.32....!... + 0x33, 0x32, 0x36, 0x35, 0x01, 0x21, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x04, 0x18, 0x39, // 3265.!54&#"....9 + 0x6e, 0xa0, 0x67, 0x66, 0xa1, 0x6f, 0x3b, 0x3a, 0x6e, 0xa1, 0x66, 0x67, 0xa1, 0x6e, 0x3a, 0xb9, // n.gf.o;:n.fg.n:. + 0xfe, 0x13, 0x79, 0x7f, 0x7f, 0x76, 0xfe, 0x13, 0x01, 0xed, 0x77, 0x80, 0x7f, 0x77, 0x02, 0x2d, // ..y..v....w..w.- + 0x8a, 0xd7, 0x93, 0x4d, 0x4d, 0x93, 0xd7, 0x8a, 0x01, 0x55, 0x8a, 0xd7, 0x95, 0x4d, 0x4d, 0x95, // ...MM....U...MM. + 0xd7, 0x8a, 0xef, 0x8d, 0xba, 0xca, 0xca, 0xba, 0x01, 0x24, 0x81, 0xba, 0xc8, 0xc8, 0xba, 0x00, // .........$...... + 0x00, 0x01, 0x00, 0xb8, 0xff, 0xec, 0x04, 0x3a, 0x04, 0x3a, 0x00, 0x15, 0x00, 0x29, 0x40, 0x26, // .......:.:...)@& + 0x0a, 0x01, 0x01, 0x03, 0x0b, 0x01, 0x02, 0x01, 0x02, 0x4a, 0x00, 0x03, 0x03, 0x00, 0x59, 0x00, // .........J....Y. + 0x00, 0x00, 0x2b, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x31, 0x02, 0x4c, 0x15, // ..+K....[...1.L. + 0x25, 0x25, 0x10, 0x04, 0x07, 0x18, 0x2b, 0x13, 0x21, 0x13, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, // %%....+.!....326 + 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x21, 0xb8, 0x02, 0x19, 0x01, 0x1b, // 7...#"..5.!..... + 0x2f, 0x3c, 0x21, 0x2d, 0x4e, 0x1d, 0x29, 0x3e, 0x74, 0x3e, 0x48, 0x71, 0x4f, 0x2a, 0xfe, 0xa0, // /t>HqO*.. + 0x04, 0x3a, 0xfd, 0x08, 0x41, 0x4b, 0x25, 0x0a, 0x1c, 0x11, 0x82, 0x2c, 0x1a, 0x22, 0x52, 0x87, // .:..AK%....,."R. + 0x65, 0x02, 0x4d, 0x00, 0x00, 0x01, 0x00, 0x39, 0xff, 0xef, 0x04, 0x5c, 0x05, 0xee, 0x00, 0x2a, // e.M....9.......* + 0x01, 0xa2, 0x4b, 0xb0, 0x1d, 0x50, 0x58, 0x40, 0x10, 0x0c, 0x01, 0x01, 0x02, 0x29, 0x1f, 0x02, // ..K..PX@.....).. + 0x03, 0x03, 0x01, 0x02, 0x4a, 0x20, 0x01, 0x00, 0x47, 0x1b, 0x40, 0x10, 0x0c, 0x01, 0x01, 0x02, // ....J ..G.@..... + 0x29, 0x1f, 0x02, 0x03, 0x03, 0x01, 0x20, 0x01, 0x04, 0x00, 0x03, 0x4a, 0x59, 0x4b, 0xb0, 0x0a, // )..... ....JYK.. + 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x30, 0x4b, 0x00, 0x03, // PX@.....[...0K.. + 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0c, 0x50, 0x58, // ..[....).L.K..PX + 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x32, 0x4b, 0x00, 0x03, 0x03, 0x00, // @.....[...2K.... + 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0e, 0x50, 0x58, 0x40, 0x16, // [....).L.K..PX@. + 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x30, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, // ....[...0K....[. + 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0f, 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, // ...).L.K..PX@... + 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x32, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, // ..[...2K....[... + 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x10, 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, // .).L.K..PX@..... + 0x5b, 0x00, 0x02, 0x02, 0x30, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, // [...0K....[....) + 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x12, 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, // .L.K..PX@.....[. + 0x02, 0x02, 0x32, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, // ..2K....[....).L + 0x1b, 0x4b, 0xb0, 0x14, 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, // .K..PX@.....[... + 0x30, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, // 0K....[....).L.K + 0xb0, 0x16, 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x32, 0x4b, // ..PX@.....[...2K + 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x17, // ....[....).L.K.. + 0x50, 0x58, 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x30, 0x4b, 0x00, 0x03, // PX@.....[...0K.. + 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x19, 0x50, 0x58, // ..[....).L.K..PX + 0x40, 0x16, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x32, 0x4b, 0x00, 0x03, 0x03, 0x00, // @.....[...2K.... + 0x5b, 0x04, 0x01, 0x00, 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x1d, 0x50, 0x58, 0x40, 0x14, // [....).L.K..PX@. + 0x00, 0x02, 0x00, 0x01, 0x03, 0x02, 0x01, 0x63, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x04, 0x01, 0x00, // .......c....[... + 0x00, 0x29, 0x00, 0x4c, 0x1b, 0x40, 0x18, 0x00, 0x02, 0x00, 0x01, 0x03, 0x02, 0x01, 0x63, 0x00, // .).L.@........c. + 0x00, 0x00, 0x29, 0x4b, 0x00, 0x03, 0x03, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x31, 0x04, 0x4c, 0x59, // ..)K....[...1.LY + 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0xb7, 0x28, 0x19, 0x26, 0x16, 0x10, // YYYYYYYYYY.(.&.. + 0x05, 0x07, 0x19, 0x2b, 0x21, 0x23, 0x01, 0x27, 0x2e, 0x03, 0x23, 0x22, 0x06, 0x07, 0x27, 0x36, // ...+!#.'..#"..'6 + 0x36, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x01, 0x1e, 0x03, 0x33, 0x32, 0x32, 0x36, 0x36, 0x37, 0x07, // 632......322667. + 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x03, 0x07, 0x01, 0x07, 0xce, 0x01, 0x8b, 0x37, 0x0e, // ..#"..'.......7. + 0x22, 0x2c, 0x37, 0x22, 0x0d, 0x28, 0x0d, 0x01, 0x12, 0x3c, 0x19, 0x48, 0x6a, 0x4b, 0x31, 0x0f, // ",7".(...<.HjK1. + 0x01, 0x6a, 0x0a, 0x1d, 0x22, 0x2a, 0x18, 0x08, 0x0a, 0x09, 0x0a, 0x09, 0x02, 0x0b, 0x24, 0x0c, // .j.."*........$. + 0x3b, 0x5c, 0x49, 0x39, 0x18, 0xd4, 0x1d, 0x04, 0x08, 0x8f, 0x23, 0x45, 0x36, 0x21, 0x04, 0x01, // ;.I9......#E6!.. + 0x8e, 0x05, 0x0a, 0x36, 0x51, 0x5f, 0x28, 0xfc, 0x4a, 0x21, 0x38, 0x29, 0x18, 0x02, 0x01, 0x02, // ...6Q_(.J!8).... + 0x97, 0x06, 0x09, 0x22, 0x43, 0x64, 0x42, 0x02, 0x2b, 0x77, 0x00, 0x01, 0x00, 0xaf, 0xfe, 0x77, // ..."CdB.+w.....w + 0x04, 0x2e, 0x05, 0xc4, 0x00, 0x44, 0x00, 0x2c, 0x40, 0x29, 0x44, 0x01, 0x00, 0x03, 0x37, 0x01, // .....D.,@)D...7. + 0x02, 0x01, 0x02, 0x4a, 0x24, 0x23, 0x02, 0x02, 0x47, 0x00, 0x01, 0x00, 0x02, 0x01, 0x02, 0x5f, // ...J$#..G......_ + 0x00, 0x00, 0x00, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x30, 0x00, 0x4c, 0x42, 0x40, 0x21, 0x28, 0x22, // ....[...0.LB@!(" + 0x04, 0x07, 0x17, 0x2b, 0x01, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, // ...+.&&#"......3 + 0x33, 0x15, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x17, 0x1e, 0x03, 0x15, 0x0e, 0x03, // 3.#"............ + 0x07, 0x27, 0x3e, 0x03, 0x35, 0x26, 0x26, 0x27, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x37, // .'>.5&&''..54>.7 + 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x03, 0xf7, 0x39, 0x71, 0x3d, 0x5f, // ..54>.32....9q=_ + 0x87, 0x57, 0x29, 0x2a, 0x5d, 0x91, 0x66, 0x8e, 0x8e, 0xdd, 0xe3, 0x37, 0x5d, 0x7b, 0x43, 0x6f, // .W)*].f....7]{Co + 0x36, 0x5f, 0x47, 0x29, 0x01, 0x23, 0x35, 0x3e, 0x1b, 0x61, 0x18, 0x24, 0x19, 0x0d, 0x01, 0x4e, // 6_G).#5>.a.$...N + 0x4d, 0x3a, 0x72, 0xba, 0x84, 0x48, 0x2f, 0x59, 0x7e, 0x4f, 0x41, 0x66, 0x47, 0x26, 0x4b, 0x8d, // M:r..H/Y~OAfG&K. + 0xc8, 0x7e, 0x47, 0x8c, 0x30, 0x05, 0x08, 0x0f, 0x15, 0x1e, 0x33, 0x44, 0x27, 0x33, 0x51, 0x39, // .~G.0.....3D'3Q9 + 0x1e, 0x98, 0x9c, 0xa5, 0x44, 0x66, 0x4a, 0x2e, 0x0c, 0x19, 0x0d, 0x19, 0x2d, 0x4a, 0x3d, 0x27, // ....DfJ.....-J=' + 0x54, 0x4f, 0x44, 0x16, 0x54, 0x1b, 0x2a, 0x29, 0x2d, 0x1d, 0x2c, 0x2b, 0x11, 0x0d, 0x16, 0x41, // TOD.T.*)-.,+...A + 0x67, 0x9a, 0x70, 0x4c, 0x7e, 0x62, 0x48, 0x16, 0x15, 0x3b, 0x4a, 0x57, 0x31, 0x53, 0x80, 0x58, // g.pL~bH..;JW1S.X + 0x2d, 0x16, 0x11, 0x00, 0x00, 0x01, 0x00, 0x59, 0xff, 0xed, 0x04, 0xa9, 0x04, 0x3a, 0x00, 0x1b, // -......Y.....:.. + 0x00, 0x6b, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x0a, 0x0a, 0x01, 0x01, 0x00, 0x0b, 0x01, 0x02, // .kK..PX@........ + 0x01, 0x02, 0x4a, 0x1b, 0x40, 0x0a, 0x0a, 0x01, 0x01, 0x00, 0x0b, 0x01, 0x04, 0x01, 0x02, 0x4a, // ..J.@..........J + 0x59, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x18, 0x05, 0x03, 0x02, 0x00, 0x00, 0x06, 0x59, 0x00, // YK..PX@.......Y. + 0x06, 0x06, 0x2b, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x04, 0x01, 0x02, 0x02, 0x31, 0x02, 0x4c, // ..+K....[....1.L + 0x1b, 0x40, 0x1c, 0x05, 0x03, 0x02, 0x00, 0x00, 0x06, 0x59, 0x00, 0x06, 0x06, 0x2b, 0x4b, 0x00, // .@.......Y...+K. + 0x04, 0x04, 0x29, 0x4b, 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x31, 0x02, 0x4c, 0x59, // ..)K....[...1.LY + 0x40, 0x0a, 0x11, 0x11, 0x11, 0x15, 0x25, 0x25, 0x10, 0x07, 0x07, 0x1b, 0x2b, 0x01, 0x23, 0x11, // @.....%%....+.#. + 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, // ...3267...#"..5. + 0x21, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0x04, 0x4c, 0x8f, 0x10, 0x1c, 0x25, 0x16, 0x1a, 0x31, // !.#.#5!.L...%..1 + 0x11, 0x29, 0x2f, 0x57, 0x2f, 0x39, 0x5a, 0x3d, 0x20, 0xfe, 0x92, 0xb9, 0x84, 0x03, 0xf3, 0x03, // .)/W/9Z= ....... + 0xa1, 0xfd, 0x6b, 0x2c, 0x33, 0x1c, 0x08, 0x10, 0x09, 0x82, 0x20, 0x13, 0x1e, 0x45, 0x72, 0x54, // ..k,3..... ..ErT + 0x02, 0x8b, 0xfc, 0x5f, 0x03, 0xa1, 0x99, 0x00, 0x00, 0x02, 0x00, 0xa5, 0xfe, 0x60, 0x04, 0x46, // ..._.........`.F + 0x04, 0x4e, 0x00, 0x16, 0x00, 0x2e, 0x00, 0x2f, 0x40, 0x2c, 0x24, 0x01, 0x04, 0x03, 0x08, 0x01, // .N...../@,$..... + 0x00, 0x04, 0x02, 0x4a, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x33, 0x4b, 0x00, 0x04, // ...J....[...3K.. + 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x31, 0x4b, 0x00, 0x01, 0x01, 0x2d, 0x01, 0x4c, 0x2b, 0x29, // ..[...1K...-.L+) + 0x26, 0x13, 0x24, 0x05, 0x07, 0x19, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x11, // &.$...+....#"&'. + 0x23, 0x11, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, // #.54>.32...#4..# + 0x22, 0x0e, 0x04, 0x15, 0x11, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x04, 0x46, 0x36, 0x69, // "......32>.5.F6i + 0x9b, 0x66, 0x6a, 0xa3, 0x3b, 0xb9, 0x49, 0x7f, 0xa9, 0x60, 0x75, 0xaf, 0x73, 0x39, 0xb9, 0x1e, // .fj.;.I..`u.s9.. + 0x42, 0x6a, 0x4d, 0x31, 0x50, 0x3e, 0x2d, 0x1d, 0x0f, 0x13, 0x34, 0x43, 0x54, 0x33, 0x4c, 0x6d, // BjM1P>-...4CT3Lm + 0x45, 0x20, 0x01, 0xf4, 0x70, 0xbf, 0x8b, 0x4e, 0x44, 0x40, 0xfd, 0xf0, 0x03, 0xe1, 0x01, 0x7f, // E ..p..ND@...... + 0xc4, 0x85, 0x44, 0x58, 0x9b, 0xd4, 0x7e, 0x55, 0x9c, 0x76, 0x46, 0x20, 0x38, 0x4a, 0x53, 0x57, // ..DX..~U.vF 8JSW + 0x29, 0xfe, 0xdb, 0x21, 0x39, 0x29, 0x17, 0x3b, 0x66, 0x86, 0x4b, 0x00, 0x00, 0x01, 0x00, 0x78, // )..!9).;f.K....x + 0xfe, 0x59, 0x04, 0x30, 0x04, 0x4e, 0x00, 0x33, 0x00, 0x26, 0x40, 0x23, 0x21, 0x20, 0x02, 0x01, // .Y.0.N.3.&@#! .. + 0x47, 0x00, 0x01, 0x02, 0x01, 0x73, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x03, 0x01, 0x00, 0x00, 0x33, // G....s....[....3 + 0x02, 0x4c, 0x01, 0x00, 0x0c, 0x0a, 0x06, 0x05, 0x00, 0x33, 0x01, 0x33, 0x04, 0x07, 0x14, 0x2b, // .L.......3.3...+ + 0x01, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, // .2...#4..#"..... + 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x15, 0x0e, 0x03, 0x07, 0x27, 0x3e, 0x03, 0x35, 0x36, 0x26, 0x27, // .........'>.56&' + 0x2e, 0x03, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x02, 0x66, 0x64, 0xa8, 0x79, 0x45, 0xaf, 0x24, 0x46, // ..554>..fd.yE.$F + 0x6a, 0x47, 0x51, 0x75, 0x4b, 0x23, 0x2b, 0x59, 0x88, 0x5c, 0x56, 0x8a, 0x62, 0x34, 0x01, 0x2e, // jGQuK#+Y..V.b4.. + 0x49, 0x5a, 0x2d, 0x4d, 0x16, 0x36, 0x2f, 0x20, 0x01, 0x70, 0x6c, 0x82, 0xc4, 0x83, 0x43, 0x42, // IZ-M.6/ .pl...CB + 0x7e, 0xb7, 0x04, 0x4e, 0x35, 0x65, 0x92, 0x5d, 0x32, 0x58, 0x41, 0x26, 0x45, 0x6f, 0x8a, 0x46, // ~..N5e.]2XA&Eo.F + 0x2a, 0x44, 0x7b, 0x62, 0x45, 0x0d, 0x0c, 0x21, 0x38, 0x57, 0x42, 0x3b, 0x63, 0x50, 0x3c, 0x14, // *D{bE..!8WB;cP<. + 0x7b, 0x0a, 0x1f, 0x2d, 0x3c, 0x28, 0x33, 0x31, 0x0e, 0x13, 0x58, 0x85, 0xaf, 0x69, 0x2a, 0x6c, // {..-<(31..X..i*l + 0xc3, 0x95, 0x58, 0x00, 0x00, 0x02, 0x00, 0x6d, 0xff, 0xec, 0x04, 0x86, 0x04, 0x3a, 0x00, 0x16, // ..X....m.....:.. + 0x00, 0x2c, 0x00, 0x21, 0x40, 0x1e, 0x04, 0x01, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x2b, // .,.!@......[...+ + 0x4b, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x31, 0x01, 0x4c, 0x29, 0x25, 0x29, 0x28, // K....[...1.L)%)( + 0x10, 0x05, 0x07, 0x19, 0x2b, 0x01, 0x21, 0x16, 0x16, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, // ....+.!.......#" + 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x21, 0x01, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, // ..554>.3!....32> + 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x04, 0x86, 0xfe, 0xe5, 0x61, // .554..#".......a + 0x67, 0x41, 0x7b, 0xb4, 0x72, 0x73, 0xb4, 0x7c, 0x41, 0x41, 0x7c, 0xb3, 0x72, 0x02, 0x37, 0xfc, // gA{.rs.|AA|.r.7. + 0xa0, 0x24, 0x49, 0x71, 0x4d, 0x4c, 0x70, 0x4a, 0x23, 0x24, 0x49, 0x71, 0x4d, 0x4c, 0x70, 0x49, // .$IqMLpJ#$IqMLpI + 0x24, 0x03, 0xa1, 0x48, 0xd3, 0x84, 0x17, 0x63, 0xb8, 0x8e, 0x56, 0x54, 0x94, 0xc8, 0x75, 0x16, // $..H...c..VT..u. + 0x70, 0xc3, 0x8e, 0x52, 0xfd, 0xd7, 0x50, 0x91, 0x6e, 0x40, 0x40, 0x6e, 0x91, 0x50, 0x16, 0x4c, // p..R..P.n@@n.P.L + 0x89, 0x68, 0x3d, 0x3d, 0x68, 0x89, 0x4c, 0x00, 0x00, 0x01, 0x00, 0xad, 0xff, 0xeb, 0x04, 0x32, // .h==h.L........2 + 0x04, 0x3a, 0x00, 0x19, 0x00, 0x2b, 0x40, 0x28, 0x0a, 0x01, 0x01, 0x00, 0x0b, 0x01, 0x02, 0x01, // .:...+@(........ + 0x02, 0x4a, 0x03, 0x01, 0x00, 0x00, 0x04, 0x59, 0x00, 0x04, 0x04, 0x2b, 0x4b, 0x00, 0x01, 0x01, // .J.....Y...+K... + 0x02, 0x5b, 0x00, 0x02, 0x02, 0x31, 0x02, 0x4c, 0x11, 0x15, 0x27, 0x25, 0x10, 0x05, 0x07, 0x19, // .[...1.L..'%.... + 0x2b, 0x01, 0x21, 0x03, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, // +.!....3267...#" + 0x2e, 0x02, 0x35, 0x11, 0x21, 0x35, 0x21, 0x04, 0x32, 0xfe, 0x9d, 0x01, 0x1b, 0x2c, 0x3a, 0x21, // ..5.!5!.2....,:! + 0x2c, 0x4d, 0x1b, 0x29, 0x1e, 0x3b, 0x3a, 0x3b, 0x1e, 0x48, 0x6f, 0x4d, 0x28, 0xfe, 0x98, 0x03, // ,M.).;:;.HoM(... + 0x85, 0x03, 0x9c, 0xfd, 0xa8, 0x40, 0x4b, 0x26, 0x0b, 0x1b, 0x11, 0x83, 0x16, 0x1b, 0x0f, 0x06, // .....@K&........ + 0x24, 0x53, 0x87, 0x65, 0x02, 0x4e, 0x9e, 0x00, 0x00, 0x01, 0x00, 0x9e, 0xff, 0xec, 0x04, 0x3f, // $S.e.N.........? + 0x04, 0x3a, 0x00, 0x1f, 0x00, 0x21, 0x40, 0x1e, 0x04, 0x03, 0x02, 0x01, 0x01, 0x2b, 0x4b, 0x00, // .:...!@......+K. + 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x31, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x1f, // ...[...1.L...... + 0x29, 0x17, 0x25, 0x05, 0x07, 0x17, 0x2b, 0x01, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, // ).%...+.....32>. + 0x35, 0x26, 0x02, 0x27, 0x33, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, // 5&.'3......#"..5 + 0x11, 0x01, 0x57, 0x26, 0x46, 0x63, 0x3c, 0x4d, 0x6e, 0x47, 0x22, 0x03, 0x45, 0x34, 0xc3, 0x17, // ..W&Fc.:..Y + 0x7e, 0x51, 0x25, 0x4d, 0x7b, 0x9a, 0x4e, 0x86, 0x01, 0x05, 0x7d, 0x30, 0x71, 0x82, 0x93, 0x52, // ~Q%M{.N...}0q..R + 0x72, 0xd3, 0xa1, 0x60, 0x3a, 0x77, 0xb7, 0x7d, 0x02, 0x69, 0x00, 0x02, 0x00, 0x6e, 0xfe, 0x22, // r..`:w.}.i...n." + 0x04, 0x77, 0x04, 0x3a, 0x00, 0x25, 0x00, 0x33, 0x00, 0x2d, 0x40, 0x2a, 0x09, 0x01, 0x02, 0x00, // .w.:.%.3.-@*.... + 0x26, 0x23, 0x13, 0x00, 0x04, 0x01, 0x02, 0x02, 0x4a, 0x08, 0x01, 0x00, 0x48, 0x00, 0x01, 0x02, // &#......J...H... + 0x01, 0x73, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x2b, 0x02, 0x4c, 0x31, 0x2f, 0x25, // .s....[...+.L1/% + 0x24, 0x1a, 0x18, 0x03, 0x07, 0x14, 0x2b, 0x05, 0x2e, 0x03, 0x35, 0x34, 0x12, 0x37, 0x17, 0x0e, // $.....+...54.7.. + 0x03, 0x07, 0x14, 0x1e, 0x02, 0x17, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, // .......4>.32.... + 0x0e, 0x02, 0x07, 0x11, 0x23, 0x13, 0x3e, 0x03, 0x35, 0x2e, 0x03, 0x23, 0x22, 0x06, 0x07, 0x02, // ....#.>.5..#"... + 0x0d, 0x71, 0x9d, 0x64, 0x2d, 0x7b, 0x80, 0x65, 0x2d, 0x3e, 0x27, 0x13, 0x02, 0x19, 0x36, 0x58, // .q.d-{.e->'...6X + 0x3f, 0x1e, 0x3d, 0x5e, 0x40, 0x4e, 0x86, 0x64, 0x39, 0x30, 0x68, 0xa4, 0x75, 0xb9, 0xb9, 0x43, // ?.=^@N.d90h.u..C + 0x5e, 0x3c, 0x1b, 0x02, 0x17, 0x2d, 0x44, 0x2e, 0x21, 0x1e, 0x01, 0x0e, 0x0f, 0x67, 0x97, 0xbd, // ^<...-D.!....g.. + 0x66, 0xaa, 0x01, 0x13, 0x5b, 0x85, 0x29, 0x62, 0x69, 0x6c, 0x34, 0x40, 0x80, 0x6d, 0x53, 0x12, // f...[.)bil4@.mS. + 0x02, 0xb4, 0x30, 0x59, 0x45, 0x29, 0x54, 0x91, 0xc5, 0x70, 0x65, 0xbc, 0x98, 0x67, 0x0f, 0xfe, // ..0YE)T..pe..g.. + 0x31, 0x02, 0x6b, 0x12, 0x52, 0x6f, 0x81, 0x3f, 0x46, 0x8a, 0x6d, 0x44, 0x30, 0x27, 0x00, 0x01, // 1.k.Ro.?F.mD0'.. + 0x00, 0x61, 0xfe, 0x28, 0x04, 0x80, 0x04, 0x3a, 0x00, 0x23, 0x00, 0x26, 0x40, 0x23, 0x22, 0x15, // .a.(...:.#.&@#". + 0x12, 0x01, 0x04, 0x01, 0x00, 0x01, 0x4a, 0x00, 0x01, 0x01, 0x00, 0x59, 0x04, 0x03, 0x02, 0x03, // ......J....Y.... + 0x00, 0x00, 0x2b, 0x01, 0x4c, 0x00, 0x00, 0x00, 0x23, 0x00, 0x23, 0x17, 0x19, 0x19, 0x05, 0x07, // ..+.L...#.#..... + 0x17, 0x2b, 0x01, 0x11, 0x3e, 0x03, 0x35, 0x26, 0x02, 0x27, 0x33, 0x16, 0x12, 0x15, 0x14, 0x0e, // .+..>.5&.'3..... + 0x02, 0x07, 0x11, 0x23, 0x11, 0x2e, 0x03, 0x35, 0x11, 0x33, 0x11, 0x14, 0x1e, 0x02, 0x17, 0x11, // ...#...5.3...... + 0x02, 0xbc, 0x49, 0x66, 0x3f, 0x1d, 0x02, 0x31, 0x26, 0xc3, 0x20, 0x2f, 0x30, 0x6b, 0xac, 0x7d, // ..If?..1&. /0k.} + 0xb9, 0x63, 0x9b, 0x6c, 0x38, 0xb9, 0x21, 0x3d, 0x56, 0x35, 0x04, 0x3a, 0xfc, 0x52, 0x12, 0x56, // .c.l8.!=V5.:.R.V + 0x75, 0x8a, 0x44, 0x86, 0x01, 0x00, 0x7d, 0x5f, 0xff, 0x00, 0xa4, 0x6b, 0xc6, 0x9e, 0x69, 0x0e, // u.D...}_...k..i. + 0xfe, 0x37, 0x01, 0xcb, 0x0e, 0x58, 0x98, 0xd7, 0x8c, 0x01, 0xe6, 0xfe, 0x18, 0x67, 0x9c, 0x6f, // .7...X.......g.o + 0x43, 0x0f, 0x03, 0xac, 0x00, 0x01, 0x00, 0x4f, 0xff, 0xec, 0x04, 0x89, 0x04, 0x3a, 0x00, 0x30, // C......O.....:.0 + 0x00, 0x34, 0x40, 0x31, 0x25, 0x01, 0x00, 0x01, 0x01, 0x4a, 0x00, 0x01, 0x03, 0x00, 0x03, 0x01, // .4@1%....J...... + 0x00, 0x70, 0x07, 0x06, 0x02, 0x03, 0x03, 0x2b, 0x4b, 0x02, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x05, // .p.....+K....... + 0x01, 0x04, 0x04, 0x31, 0x04, 0x4c, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x24, 0x27, 0x17, 0x23, // ...1.L...0.0$'.# + 0x13, 0x27, 0x08, 0x07, 0x1a, 0x2b, 0x01, 0x06, 0x02, 0x07, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, // .'...+.......326 + 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x26, 0x02, 0x27, 0x33, 0x16, // 5.3...32>.5&.'3. + 0x12, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // .....#"&'..#"..5 + 0x34, 0x12, 0x37, 0x01, 0x71, 0x2d, 0x3a, 0x02, 0x0c, 0x1d, 0x2e, 0x22, 0x43, 0x4b, 0xba, 0x4b, // 4.7.q-:...."CK.K + 0x42, 0x22, 0x2f, 0x1d, 0x0c, 0x02, 0x3a, 0x2d, 0xc2, 0x28, 0x38, 0x1e, 0x46, 0x72, 0x53, 0x5a, // B"/...:-.(8.FrSZ + 0x7a, 0x20, 0x21, 0x79, 0x5a, 0x53, 0x72, 0x46, 0x1e, 0x38, 0x28, 0x04, 0x3a, 0x7e, 0xfe, 0xfb, // z !yZSrF.8(.:~.. + 0x87, 0x54, 0x9b, 0x78, 0x47, 0xa6, 0xaf, 0x01, 0x2b, 0xfe, 0xd5, 0xaf, 0xa6, 0x47, 0x76, 0x9c, // .T.xG...+....Gv. + 0x55, 0x87, 0x01, 0x05, 0x7e, 0x61, 0xfe, 0xfc, 0xa5, 0x6f, 0xd1, 0xa2, 0x62, 0x6d, 0x66, 0x66, // U...~a...o..bmff + 0x6d, 0x62, 0xa2, 0xd1, 0x6f, 0xa5, 0x01, 0x04, 0x61, 0x00, 0x00, 0x02, 0x00, 0x98, 0xff, 0xec, // mb..o...a....... + 0x04, 0x99, 0x05, 0xc6, 0x00, 0x2d, 0x00, 0x3a, 0x00, 0x87, 0x40, 0x0e, 0x2d, 0x01, 0x01, 0x04, // .....-.:..@.-... + 0x33, 0x2a, 0x19, 0x02, 0x00, 0x05, 0x02, 0x01, 0x02, 0x4a, 0x4b, 0xb0, 0x10, 0x50, 0x58, 0x40, // 3*.......JK..PX@ + 0x1d, 0x00, 0x01, 0x04, 0x02, 0x04, 0x01, 0x02, 0x70, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, // ........p....[.. + 0x03, 0x32, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x31, 0x00, 0x4c, 0x1b, 0x4b, // .2K....[...1.L.K + 0xb0, 0x17, 0x50, 0x58, 0x40, 0x1d, 0x00, 0x01, 0x04, 0x02, 0x04, 0x01, 0x02, 0x70, 0x00, 0x04, // ..PX@........p.. + 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x30, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, // ..[...0K....[... + 0x31, 0x00, 0x4c, 0x1b, 0x40, 0x1d, 0x00, 0x01, 0x04, 0x02, 0x04, 0x01, 0x02, 0x70, 0x00, 0x04, // 1.L.@........p.. + 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x32, 0x4b, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, // ..[...2K....[... + 0x31, 0x00, 0x4c, 0x59, 0x59, 0x40, 0x09, 0x38, 0x36, 0x2d, 0x25, 0x15, 0x27, 0x05, 0x07, 0x18, // 1.LYY@.86-%.'... + 0x2b, 0x01, 0x06, 0x07, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x37, 0x11, // +.......#"..5.7. + 0x14, 0x1e, 0x02, 0x33, 0x16, 0x36, 0x35, 0x35, 0x2e, 0x03, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, // ...3.655..554>.3 + 0x32, 0x1e, 0x02, 0x15, 0x11, 0x36, 0x36, 0x37, 0x01, 0x14, 0x1e, 0x02, 0x17, 0x11, 0x34, 0x26, // 2....667......4& + 0x23, 0x22, 0x06, 0x15, 0x04, 0x99, 0x43, 0x4d, 0x3e, 0x70, 0x9f, 0x62, 0x66, 0xa6, 0x75, 0x41, // #"....CM>p.bf.uA + 0xba, 0x24, 0x44, 0x62, 0x3e, 0x76, 0x80, 0x6e, 0xb3, 0x7f, 0x46, 0x32, 0x58, 0x7a, 0x4a, 0x4f, // .$Db>v.n..F2XzJO + 0x7e, 0x56, 0x2e, 0x23, 0x44, 0x20, 0xfd, 0x94, 0x28, 0x4d, 0x70, 0x47, 0x4a, 0x4e, 0x43, 0x51, // ~V.#D ..(MpGJNCQ + 0x02, 0x73, 0x18, 0x08, 0xa0, 0x6d, 0xaa, 0x74, 0x3c, 0x41, 0x77, 0xa8, 0x67, 0x01, 0x4e, 0x02, // .s...m.t.32... + 0x26, 0x23, 0x22, 0x06, 0x07, 0x01, 0x11, 0x23, 0x11, 0x01, 0x26, 0x26, 0x23, 0x22, 0x07, 0x27, // &#"....#..&&#".' + 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x13, 0x17, 0x37, 0x03, 0x39, 0x1a, 0x38, 0x3f, 0x46, // 6632.....7.9.8?F + 0x28, 0x1c, 0x35, 0x1b, 0x16, 0x0e, 0x1e, 0x23, 0x3b, 0x12, 0xfe, 0xd8, 0xb8, 0xfe, 0xd6, 0x12, // (.5....#;....... + 0x3b, 0x23, 0x1d, 0x0e, 0x17, 0x1b, 0x35, 0x1d, 0x27, 0x46, 0x3f, 0x39, 0x1a, 0xb3, 0x18, 0x18, // ;#....5.'F?9.... + 0x04, 0xd7, 0x3f, 0x58, 0x36, 0x17, 0x07, 0x11, 0x95, 0x09, 0x26, 0x28, 0xfd, 0x7b, 0xfd, 0xbc, // ..?X6.....&(.{.. + 0x02, 0x40, 0x02, 0x89, 0x27, 0x27, 0x09, 0x95, 0x11, 0x07, 0x17, 0x36, 0x58, 0x3f, 0xfe, 0x69, // .@..''.....6X?.i + 0x58, 0x58, 0x00, 0x02, 0x00, 0x2e, 0xff, 0xec, 0x04, 0x96, 0x04, 0x3a, 0x00, 0x1a, 0x00, 0x34, // XX.........:...4 + 0x00, 0x36, 0x40, 0x33, 0x0c, 0x01, 0x06, 0x07, 0x01, 0x4a, 0x00, 0x07, 0x00, 0x06, 0x00, 0x07, // .6@3.....J...... + 0x06, 0x70, 0x05, 0x03, 0x02, 0x00, 0x00, 0x04, 0x59, 0x00, 0x04, 0x04, 0x2b, 0x4b, 0x08, 0x01, // .p......Y...+K.. + 0x06, 0x06, 0x01, 0x5b, 0x02, 0x01, 0x01, 0x01, 0x31, 0x01, 0x4c, 0x23, 0x13, 0x27, 0x14, 0x11, // ...[....1.L#.'.. + 0x17, 0x24, 0x27, 0x10, 0x09, 0x07, 0x1d, 0x2b, 0x01, 0x23, 0x16, 0x16, 0x15, 0x14, 0x0e, 0x02, // .$'....+.#...... + 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x37, 0x23, 0x35, // #"&'..#"..5467#5 + 0x21, 0x03, 0x26, 0x26, 0x27, 0x21, 0x06, 0x06, 0x07, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x35, // !.&&'!......3265 + 0x35, 0x33, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, 0x02, 0x04, 0x96, 0x7e, 0x20, 0x2a, 0x1d, 0x41, // 53...32>...~ *.A + 0x6b, 0x4e, 0x5a, 0x7a, 0x20, 0x20, 0x79, 0x5a, 0x4e, 0x6b, 0x41, 0x1d, 0x29, 0x21, 0x69, 0x04, // kNZz yZNkA.)!i. + 0x68, 0xee, 0x02, 0x2f, 0x26, 0xfe, 0x0d, 0x26, 0x2f, 0x02, 0x0a, 0x18, 0x27, 0x1e, 0x43, 0x4a, // h../&..&/...'.CJ + 0xba, 0x4a, 0x43, 0x1d, 0x27, 0x18, 0x0a, 0x03, 0xa1, 0x6a, 0xfb, 0x8c, 0x59, 0xa3, 0x7d, 0x4b, // .JC.'....j..Y.}K + 0x6d, 0x67, 0x66, 0x6e, 0x4b, 0x7d, 0xa3, 0x59, 0x8c, 0xfb, 0x6a, 0x99, 0xfd, 0x75, 0x7c, 0xfd, // mgfnK}.Y..j..u|. + 0x79, 0x79, 0xfd, 0x7c, 0x3b, 0x6d, 0x53, 0x32, 0xa6, 0xaf, 0xfb, 0xfb, 0xaf, 0xa6, 0x31, 0x52, // yy.|;mS2......1R + 0x6e, 0x00, 0x00, 0x01, 0x00, 0x2a, 0xff, 0xf5, 0x04, 0x7c, 0x05, 0xb0, 0x00, 0x1f, 0x00, 0xd3, // n....*...|...... + 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x01, 0x00, 0x04, 0x03, 0x01, 0x04, 0x63, 0x06, // K..PX@........c. + 0x01, 0x00, 0x00, 0x07, 0x59, 0x00, 0x07, 0x07, 0x16, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x05, // ....Y....K....[. + 0x01, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x1b, 0x4b, 0xb0, 0x0c, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x01, // .....L.K..PX@... + 0x00, 0x04, 0x03, 0x01, 0x04, 0x63, 0x06, 0x01, 0x00, 0x00, 0x07, 0x59, 0x00, 0x07, 0x07, 0x16, // .....c.....Y.... + 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x05, 0x01, 0x02, 0x02, 0x1e, 0x02, 0x4c, 0x1b, 0x4b, 0xb0, // K....[......L.K. + 0x0e, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x01, 0x00, 0x04, 0x03, 0x01, 0x04, 0x63, 0x06, 0x01, 0x00, // .PX@........c... + 0x00, 0x07, 0x59, 0x00, 0x07, 0x07, 0x16, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x05, 0x01, 0x02, // ..Y....K....[... + 0x02, 0x17, 0x02, 0x4c, 0x1b, 0x4b, 0xb0, 0x2c, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x01, 0x00, 0x04, // ...L.K.,PX@..... + 0x03, 0x01, 0x04, 0x63, 0x06, 0x01, 0x00, 0x00, 0x07, 0x59, 0x00, 0x07, 0x07, 0x16, 0x4b, 0x00, // ...c.....Y....K. + 0x03, 0x03, 0x02, 0x5b, 0x05, 0x01, 0x02, 0x02, 0x1e, 0x02, 0x4c, 0x1b, 0x40, 0x23, 0x00, 0x01, // ...[......L.@#.. + 0x00, 0x04, 0x03, 0x01, 0x04, 0x63, 0x06, 0x01, 0x00, 0x00, 0x07, 0x59, 0x00, 0x07, 0x07, 0x16, // .....c.....Y.... + 0x4b, 0x00, 0x05, 0x05, 0x17, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1e, 0x02, // K....K....[..... + 0x4c, 0x59, 0x59, 0x59, 0x59, 0x40, 0x0b, 0x11, 0x11, 0x11, 0x46, 0x11, 0x16, 0x41, 0x10, 0x08, // LYYYY@....F..A.. + 0x06, 0x1c, 0x2b, 0x01, 0x21, 0x11, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x23, // ..+.!.6632.....# + 0x27, 0x32, 0x3e, 0x02, 0x35, 0x26, 0x26, 0x23, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x21, 0x35, // '2>.5&&#"...#.!5 + 0x21, 0x04, 0x3d, 0xfe, 0x00, 0x1e, 0x3d, 0x1f, 0x6c, 0xa9, 0x74, 0x3c, 0xca, 0xc0, 0x02, 0x3a, // !.=...=.l.t<...: + 0x51, 0x31, 0x16, 0x01, 0x81, 0x89, 0x20, 0x3c, 0x1e, 0xb8, 0xfe, 0xa5, 0x04, 0x13, 0x05, 0x18, // Q1.... <........ + 0xfe, 0x39, 0x02, 0x04, 0x40, 0x76, 0xab, 0x6a, 0xc6, 0xd1, 0x91, 0x25, 0x44, 0x61, 0x3c, 0x8b, // .9..@v.j...%Da<. + 0x9e, 0x04, 0x02, 0xfd, 0x51, 0x05, 0x18, 0x98, 0x00, 0x01, 0x00, 0x81, 0xff, 0xec, 0x04, 0x6b, // ....Q..........k + 0x05, 0xc5, 0x00, 0x2f, 0x00, 0x41, 0x40, 0x3e, 0x00, 0x02, 0x03, 0x04, 0x03, 0x02, 0x04, 0x70, // .../.A@>.......p + 0x08, 0x01, 0x07, 0x05, 0x06, 0x05, 0x07, 0x06, 0x70, 0x00, 0x04, 0x00, 0x05, 0x07, 0x04, 0x05, // ........p....... + 0x61, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1d, 0x4b, 0x00, 0x06, 0x06, 0x00, 0x5b, // a....[....K....[ + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x2f, 0x25, 0x11, 0x15, 0x24, // .....L..././%..$ + 0x14, 0x29, 0x24, 0x09, 0x06, 0x1b, 0x2b, 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, // .)$...+...#"..5. + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, // 4>.32...#..#"... + 0x15, 0x21, 0x15, 0x21, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x04, 0x6b, 0x0a, // .!.!....32>.7.k. + 0x48, 0x7d, 0xb0, 0x72, 0x75, 0xbb, 0x83, 0x46, 0x46, 0x83, 0xbb, 0x75, 0x72, 0xb0, 0x7d, 0x48, // H}.ru..FF..ur.}H + 0x0a, 0xb9, 0x0a, 0x2c, 0x4a, 0x6d, 0x4b, 0x4f, 0x77, 0x51, 0x29, 0x02, 0x3b, 0xfd, 0xc5, 0x29, // ...,JmKOwQ).;..) + 0x51, 0x77, 0x4f, 0x4b, 0x6d, 0x4b, 0x2b, 0x0a, 0x01, 0xb7, 0x65, 0xa9, 0x7a, 0x43, 0x57, 0x9d, // QwOKmK+...e.zCW. + 0xd9, 0x83, 0x01, 0x39, 0x83, 0xda, 0x9c, 0x57, 0x3f, 0x78, 0xad, 0x6e, 0x4b, 0x76, 0x50, 0x2a, // ...9...W?x.nKvP* + 0x43, 0x75, 0xa1, 0x5e, 0x4b, 0x98, 0x58, 0x5f, 0xa1, 0x76, 0x43, 0x27, 0x4d, 0x73, 0x4d, 0x00, // Cu.^K.X_.vC'MsM. + 0x00, 0x02, 0x00, 0x1e, 0x00, 0x00, 0x04, 0x9d, 0x05, 0xb0, 0x00, 0x1c, 0x00, 0x29, 0x00, 0x3a, // .............).: + 0x40, 0x37, 0x00, 0x00, 0x09, 0x01, 0x07, 0x04, 0x00, 0x07, 0x63, 0x00, 0x02, 0x02, 0x05, 0x59, // @7........c....Y + 0x08, 0x01, 0x05, 0x05, 0x16, 0x4b, 0x06, 0x01, 0x04, 0x04, 0x01, 0x5b, 0x03, 0x01, 0x01, 0x01, // .....K.....[.... + 0x17, 0x01, 0x4c, 0x1d, 0x1d, 0x00, 0x00, 0x1d, 0x29, 0x1d, 0x28, 0x20, 0x1e, 0x00, 0x1c, 0x00, // ..L.....).( .... + 0x1c, 0x21, 0x25, 0x11, 0x28, 0x21, 0x0a, 0x06, 0x19, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x02, // .!%.(!...+..32.. + 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x23, 0x03, 0x14, 0x02, 0x06, 0x06, 0x23, 0x23, 0x35, // ....#!.#.....##5 + 0x33, 0x32, 0x12, 0x13, 0x13, 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, // 32.....32>.54..# + 0x02, 0xeb, 0x5b, 0x54, 0x81, 0x56, 0x2c, 0x2c, 0x56, 0x81, 0x54, 0xfe, 0xec, 0xc5, 0x01, 0x1f, // ..[T.V,,V.T..... + 0x46, 0x74, 0x55, 0x20, 0x16, 0x48, 0x37, 0x01, 0x03, 0x02, 0x34, 0x5b, 0x2c, 0x3d, 0x25, 0x11, // FtU .H7...4[,=%. + 0x11, 0x26, 0x3d, 0x2b, 0x05, 0xb0, 0xfd, 0xc7, 0x45, 0x77, 0xa2, 0x5e, 0x5e, 0xa2, 0x77, 0x44, // .&=+....Ew.^^.wD + 0x05, 0x18, 0xfd, 0xec, 0xb8, 0xfe, 0xe1, 0xc6, 0x67, 0x97, 0x01, 0x3b, 0x01, 0x32, 0x02, 0xac, // ........g..;.2.. + 0xfd, 0x2f, 0xfd, 0xb8, 0x33, 0x53, 0x69, 0x37, 0x36, 0x68, 0x52, 0x32, 0x00, 0x02, 0x00, 0x83, // ./..3Si76hR2.... + 0x00, 0x00, 0x04, 0x8b, 0x05, 0xb0, 0x00, 0x16, 0x00, 0x23, 0x00, 0x5f, 0x4b, 0xb0, 0x23, 0x50, // .........#._K.#P + 0x58, 0x40, 0x1d, 0x02, 0x01, 0x00, 0x09, 0x08, 0x02, 0x04, 0x07, 0x00, 0x04, 0x63, 0x06, 0x01, // X@...........c.. + 0x01, 0x01, 0x16, 0x4b, 0x00, 0x07, 0x07, 0x03, 0x5c, 0x05, 0x01, 0x03, 0x03, 0x17, 0x03, 0x4c, // ...K...........L + 0x1b, 0x40, 0x23, 0x00, 0x02, 0x09, 0x01, 0x08, 0x04, 0x02, 0x08, 0x63, 0x00, 0x00, 0x00, 0x04, // .@#........c.... + 0x07, 0x00, 0x04, 0x61, 0x06, 0x01, 0x01, 0x01, 0x16, 0x4b, 0x00, 0x07, 0x07, 0x03, 0x5c, 0x05, // ...a.....K...... + 0x01, 0x03, 0x03, 0x17, 0x03, 0x4c, 0x59, 0x40, 0x11, 0x17, 0x17, 0x17, 0x23, 0x17, 0x22, 0x22, // .....LY@....#."" + 0x11, 0x11, 0x11, 0x28, 0x21, 0x11, 0x10, 0x0a, 0x06, 0x1c, 0x2b, 0x01, 0x33, 0x11, 0x33, 0x11, // ...(!.....+.3.3. + 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x23, 0x11, 0x23, 0x11, 0x23, 0x11, 0x33, // 32......##.#.#.3 + 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x3b, 0xfa, 0xb8, 0x31, // ..32>.54..#.;..1 + 0x5b, 0x89, 0x5b, 0x2e, 0x2e, 0x5b, 0x89, 0x5b, 0xe9, 0xfa, 0xb8, 0xb8, 0x01, 0xb2, 0x31, 0x33, // [.[..[.[......13 + 0x45, 0x2b, 0x12, 0x13, 0x2a, 0x45, 0x33, 0x03, 0x39, 0x02, 0x77, 0xfd, 0x97, 0x3e, 0x6f, 0x98, // E+..*E3.9.w..>o. + 0x5a, 0x5a, 0x9b, 0x72, 0x41, 0x02, 0xa1, 0xfd, 0x5f, 0x05, 0xb0, 0xfc, 0xff, 0xfd, 0xf2, 0x2d, // ZZ.rA..._......- + 0x4a, 0x5f, 0x33, 0x33, 0x5e, 0x48, 0x2c, 0x00, 0x00, 0x01, 0x00, 0x43, 0x00, 0x00, 0x04, 0x68, // J_33^H,....C...h + 0x05, 0xb0, 0x00, 0x1a, 0x00, 0x31, 0x40, 0x2e, 0x02, 0x01, 0x03, 0x01, 0x14, 0x01, 0x02, 0x03, // .....1@......... + 0x02, 0x4a, 0x00, 0x01, 0x00, 0x03, 0x02, 0x01, 0x03, 0x63, 0x05, 0x01, 0x00, 0x00, 0x06, 0x59, // .J.......c.....Y + 0x00, 0x06, 0x06, 0x16, 0x4b, 0x04, 0x01, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x11, 0x11, 0x12, 0x25, // ....K......L...% + 0x15, 0x23, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x21, 0x11, 0x36, 0x36, 0x17, 0x32, 0x1e, 0x02, // .#....+.!.66.2.. + 0x15, 0x11, 0x23, 0x11, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x07, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, // ..#.4..#"..#.!5! + 0x04, 0x40, 0xfe, 0x16, 0x1c, 0x36, 0x1a, 0x63, 0x9d, 0x6c, 0x3a, 0xb9, 0x1c, 0x3b, 0x59, 0x3d, // .@...6.c.l:..;Y= + 0x38, 0x34, 0xb9, 0xfe, 0xa6, 0x03, 0xfd, 0x05, 0x18, 0xfe, 0x3c, 0x04, 0x04, 0x01, 0x2e, 0x62, // 84........<....b + 0x98, 0x6a, 0xfe, 0x37, 0x01, 0xc9, 0x44, 0x5f, 0x3c, 0x1b, 0x06, 0xfd, 0x43, 0x05, 0x18, 0x98, // .j.7..D_<...C... + 0x00, 0x01, 0x00, 0xa2, 0xfe, 0x99, 0x04, 0x2a, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x23, 0x40, 0x20, // .......*.....#@ + 0x00, 0x04, 0x03, 0x04, 0x73, 0x02, 0x01, 0x00, 0x00, 0x16, 0x4b, 0x00, 0x01, 0x01, 0x03, 0x5a, // ....s.....K....Z + 0x05, 0x01, 0x03, 0x03, 0x17, 0x03, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x06, 0x1a, // ......L......... + 0x2b, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0xa2, 0xb9, 0x02, // +.3.!.3.!.#.!... + 0x16, 0xb9, 0xfe, 0x9d, 0xb9, 0xfe, 0x94, 0x05, 0xb0, 0xfa, 0xe7, 0x05, 0x19, 0xfa, 0x50, 0xfe, // ..............P. + 0x99, 0x01, 0x67, 0x00, 0x00, 0x02, 0x00, 0xa2, 0x00, 0x00, 0x04, 0x4c, 0x05, 0xb0, 0x00, 0x10, // ..g........L.... + 0x00, 0x1d, 0x00, 0x2f, 0x40, 0x2c, 0x00, 0x01, 0x06, 0x01, 0x05, 0x04, 0x01, 0x05, 0x63, 0x00, // .../@,........c. + 0x00, 0x00, 0x03, 0x59, 0x00, 0x03, 0x03, 0x16, 0x4b, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, // ...Y....K....[.. + 0x02, 0x17, 0x02, 0x4c, 0x11, 0x11, 0x11, 0x1d, 0x11, 0x1c, 0x22, 0x11, 0x28, 0x21, 0x10, 0x07, // ...L......".(!.. + 0x06, 0x19, 0x2b, 0x01, 0x21, 0x11, 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, // ..+.!.!2......#! + 0x11, 0x21, 0x01, 0x11, 0x21, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x04, 0x1d, 0xfd, // .!..!2>.54..#... + 0x3f, 0x01, 0x0a, 0x74, 0xb5, 0x7c, 0x41, 0x41, 0x7c, 0xb5, 0x74, 0xfe, 0x3c, 0x03, 0x7b, 0xfd, // ?..t.|AA|.t.<.{. + 0x3f, 0x01, 0x0a, 0x4e, 0x71, 0x4a, 0x23, 0x23, 0x4a, 0x71, 0x4e, 0x05, 0x18, 0xfe, 0x41, 0x3c, // ?..NqJ##JqN...A< + 0x6f, 0x9c, 0x61, 0x60, 0xa0, 0x72, 0x3f, 0x05, 0xb0, 0xfd, 0x12, 0xfd, 0xd5, 0x2e, 0x4e, 0x67, // o.a`.r?.......Ng + 0x39, 0x38, 0x63, 0x49, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x46, 0xfe, 0x99, 0x04, 0x78, 0x05, 0xb0, // 98cI+....F...x.. + 0x00, 0x10, 0x00, 0x17, 0x00, 0x2b, 0x40, 0x28, 0x02, 0x01, 0x00, 0x03, 0x00, 0x51, 0x00, 0x07, // .....+@(.....Q.. + 0x07, 0x04, 0x59, 0x00, 0x04, 0x04, 0x16, 0x4b, 0x06, 0x05, 0x02, 0x03, 0x03, 0x01, 0x59, 0x00, // ..Y....K......Y. + 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x14, 0x11, 0x16, 0x11, 0x11, 0x11, 0x10, 0x08, 0x06, 0x1c, // ....L........... + 0x2b, 0x01, 0x23, 0x11, 0x21, 0x11, 0x23, 0x03, 0x33, 0x3e, 0x03, 0x37, 0x13, 0x21, 0x11, 0x33, // +.#.!.#.3>.7.!.3 + 0x01, 0x06, 0x02, 0x07, 0x21, 0x11, 0x21, 0x04, 0x66, 0xa7, 0xfd, 0x3f, 0x9d, 0x1b, 0x41, 0x2e, // ....!.!.f..?..A. + 0x46, 0x32, 0x1e, 0x05, 0x20, 0x02, 0x89, 0x7f, 0xfd, 0x93, 0x09, 0x42, 0x40, 0x01, 0xc0, 0xfe, // F2.. ......B@... + 0xe1, 0xfe, 0x9b, 0x01, 0x65, 0xfe, 0x99, 0x01, 0xfe, 0x1e, 0x71, 0xaf, 0xf2, 0xa0, 0x02, 0x49, // ....e.....q....I + 0xfa, 0xe7, 0x02, 0xd0, 0xf2, 0xfe, 0x93, 0x71, 0x04, 0x81, 0x00, 0x01, 0x00, 0x1d, 0x00, 0x00, // .......q........ + 0x04, 0xae, 0x05, 0xb0, 0x00, 0x15, 0x00, 0x31, 0x40, 0x2e, 0x13, 0x08, 0x02, 0x00, 0x05, 0x01, // .......1@....... + 0x4a, 0x07, 0x01, 0x05, 0x02, 0x01, 0x00, 0x01, 0x05, 0x00, 0x61, 0x08, 0x06, 0x02, 0x04, 0x04, // J.........a..... + 0x16, 0x4b, 0x09, 0x03, 0x02, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x15, 0x14, 0x11, 0x11, 0x11, 0x11, // .K.......L...... + 0x12, 0x11, 0x11, 0x11, 0x10, 0x0a, 0x06, 0x1d, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, // ........+.#.#.#. + 0x23, 0x01, 0x03, 0x33, 0x13, 0x33, 0x11, 0x33, 0x11, 0x33, 0x13, 0x33, 0x03, 0x01, 0x23, 0x02, // #..3.3.3.3.3..#. + 0xfb, 0x36, 0xb7, 0x3e, 0xcd, 0xe6, 0x01, 0x0d, 0xe6, 0xd7, 0xae, 0x45, 0xb7, 0x3e, 0xad, 0xd8, // .6.>.......E.>.. + 0xe8, 0x01, 0x0e, 0xe5, 0x02, 0x8b, 0xfd, 0x75, 0x02, 0x8b, 0xfd, 0x75, 0x02, 0xd7, 0x02, 0xd9, // .......u...u.... + 0xfd, 0x73, 0x02, 0x8d, 0xfd, 0x73, 0x02, 0x8d, 0xfd, 0x29, 0xfd, 0x27, 0x00, 0x01, 0x00, 0x59, // .s...s...).'...Y + 0xff, 0xeb, 0x04, 0x70, 0x05, 0xc4, 0x00, 0x3a, 0x00, 0x4e, 0x40, 0x4b, 0x1b, 0x01, 0x07, 0x00, // ...p...:.N@K.... + 0x01, 0x4a, 0x00, 0x02, 0x01, 0x00, 0x01, 0x02, 0x00, 0x70, 0x00, 0x05, 0x07, 0x06, 0x07, 0x05, // .J.......p...... + 0x06, 0x70, 0x08, 0x01, 0x00, 0x00, 0x07, 0x05, 0x00, 0x07, 0x63, 0x00, 0x01, 0x01, 0x03, 0x5b, // .p........c....[ + 0x00, 0x03, 0x03, 0x1d, 0x4b, 0x00, 0x06, 0x06, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x1e, 0x04, 0x4c, // ....K....[.....L + 0x01, 0x00, 0x39, 0x37, 0x2f, 0x2d, 0x29, 0x28, 0x24, 0x22, 0x14, 0x12, 0x0e, 0x0d, 0x09, 0x07, // ..97/-)($"...... + 0x00, 0x3a, 0x01, 0x3a, 0x09, 0x06, 0x14, 0x2b, 0x01, 0x36, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, // .:.:...+.6654..# + 0x22, 0x0e, 0x02, 0x15, 0x23, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x06, 0x06, 0x07, // "...#4>.32...... + 0x16, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, // ......#"..53...3 + 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x35, 0x02, 0x67, 0x9f, 0x9a, 0x29, 0x52, // 2>.54..##5.g..)R + 0x7a, 0x52, 0x3f, 0x70, 0x52, 0x31, 0xb9, 0x4f, 0x87, 0xb2, 0x63, 0x73, 0xbd, 0x87, 0x4a, 0x01, // zR?pR1.O..cs..J. + 0x7f, 0x6e, 0x7d, 0x87, 0x51, 0x8f, 0xc4, 0x73, 0x5f, 0xb7, 0x90, 0x5a, 0xba, 0x30, 0x56, 0x78, // .n}.Q..s_..Z.0Vx + 0x48, 0x51, 0x81, 0x5b, 0x30, 0x2d, 0x56, 0x7d, 0x4f, 0xb7, 0x03, 0x32, 0x01, 0x87, 0x70, 0x37, // HQ.[0-V}O..2..p7 + 0x5e, 0x46, 0x28, 0x25, 0x43, 0x5c, 0x36, 0x5d, 0x95, 0x67, 0x38, 0x34, 0x68, 0x9c, 0x66, 0x67, // ^F(%C.6].g84h.fg + 0xa4, 0x30, 0x2a, 0xaa, 0x81, 0x67, 0x9f, 0x6d, 0x38, 0x31, 0x68, 0xa1, 0x6f, 0x39, 0x64, 0x4a, // .0*..g.m81h.o9dJ + 0x2b, 0x28, 0x48, 0x64, 0x3c, 0x45, 0x63, 0x41, 0x1f, 0x98, 0x00, 0x01, 0x00, 0xa2, 0x00, 0x00, // +(Hd.77.3./G.h.. + 0xe9, 0x17, 0x3b, 0x54, 0x77, 0x53, 0x44, 0x69, 0x1a, 0x18, 0x0d, 0x25, 0x2b, 0x2b, 0x13, 0x2e, // ..;TwSDi...%++.. + 0x46, 0x34, 0x24, 0x0d, 0x2a, 0xfe, 0x0e, 0xd0, 0x02, 0xf7, 0xbf, 0x03, 0x78, 0xfb, 0x40, 0x34, // F4$.*.......x.@4 + 0x5f, 0x48, 0x2a, 0x18, 0x0b, 0x8d, 0x03, 0x09, 0x08, 0x05, 0x1b, 0x2c, 0x38, 0x1c, 0x55, 0x04, // _H*........,8.U. + 0x3e, 0x00, 0x00, 0x01, 0x00, 0xa6, 0xfe, 0xa1, 0x04, 0xb4, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x23, // >..............# + 0x40, 0x20, 0x00, 0x04, 0x01, 0x04, 0x52, 0x02, 0x01, 0x00, 0x00, 0x16, 0x4b, 0x03, 0x01, 0x01, // @ ....R.....K... + 0x01, 0x05, 0x5a, 0x00, 0x05, 0x05, 0x17, 0x05, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, // ..Z.....L....... + 0x06, 0x1a, 0x2b, 0x13, 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x03, 0x23, 0x11, 0x21, 0xa6, // ..+.3.!.3.3.#.!. + 0xb9, 0x02, 0x09, 0xb9, 0x93, 0x12, 0xa6, 0xfc, 0xaa, 0x05, 0xb0, 0xfa, 0xe7, 0x05, 0x19, 0xfa, // ................ + 0xec, 0xfe, 0x05, 0x01, 0x5f, 0x00, 0x00, 0x01, 0x00, 0xab, 0x00, 0x00, 0x04, 0x27, 0x05, 0xb0, // ...._........'.. + 0x00, 0x19, 0x00, 0x2f, 0x40, 0x2c, 0x18, 0x01, 0x03, 0x02, 0x03, 0x01, 0x01, 0x03, 0x02, 0x4a, // .../@,.........J + 0x00, 0x03, 0x00, 0x01, 0x00, 0x03, 0x01, 0x63, 0x05, 0x04, 0x02, 0x02, 0x02, 0x16, 0x4b, 0x00, // .......c......K. + 0x00, 0x00, 0x17, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x19, 0x25, 0x15, 0x25, 0x11, 0x06, // ....L......%.%.. + 0x06, 0x18, 0x2b, 0x01, 0x11, 0x23, 0x11, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x33, // ..+..#...#"..5.3 + 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x11, 0x04, 0x27, 0xb9, 0x21, 0x42, 0x47, 0x51, // ....3267..'.!BGQ + 0x30, 0x61, 0x98, 0x68, 0x37, 0xb9, 0x1b, 0x37, 0x54, 0x39, 0x53, 0x90, 0x48, 0x05, 0xb0, 0xfa, // 0a.h7..7T9S.H... + 0x50, 0x02, 0x5b, 0x0c, 0x12, 0x0e, 0x07, 0x31, 0x6c, 0xaa, 0x79, 0x01, 0xc8, 0xfe, 0x38, 0x55, // P.[....1l.y...8U + 0x71, 0x45, 0x1d, 0x1d, 0x18, 0x02, 0xbb, 0x00, 0x00, 0x01, 0x00, 0x7d, 0x00, 0x00, 0x04, 0x50, // qE.........}...P + 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x25, 0x40, 0x22, 0x06, 0x05, 0x03, 0x03, 0x01, 0x01, 0x16, 0x4b, // .....%@".......K + 0x02, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x00, 0x04, 0x04, 0x17, 0x04, 0x4c, 0x00, 0x00, 0x00, 0x0b, // .....Z.....L.... + 0x00, 0x0b, 0x11, 0x11, 0x11, 0x11, 0x11, 0x07, 0x06, 0x19, 0x2b, 0x01, 0x11, 0x33, 0x11, 0x33, // ..........+..3.3 + 0x11, 0x33, 0x11, 0x33, 0x11, 0x21, 0x11, 0x01, 0x36, 0xd5, 0xb8, 0xd5, 0xb8, 0xfc, 0x2d, 0x05, // .3.3.!..6.....-. + 0xb0, 0xfa, 0xe7, 0x05, 0x19, 0xfa, 0xe7, 0x05, 0x19, 0xfa, 0x50, 0x05, 0xb0, 0x00, 0x00, 0x01, // ..........P..... + 0x00, 0x7d, 0xfe, 0xa1, 0x04, 0xaa, 0x05, 0xb0, 0x00, 0x11, 0x00, 0x2d, 0x40, 0x2a, 0x00, 0x05, // .}.........-@*.. + 0x00, 0x05, 0x52, 0x08, 0x07, 0x03, 0x03, 0x01, 0x01, 0x16, 0x4b, 0x04, 0x02, 0x02, 0x00, 0x00, // ..R.......K..... + 0x06, 0x5a, 0x00, 0x06, 0x06, 0x17, 0x06, 0x4c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x11, 0x11, 0x11, // .Z.....L........ + 0x11, 0x11, 0x31, 0x11, 0x11, 0x09, 0x06, 0x1b, 0x2b, 0x01, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, // ..1.....+..3.3.3 + 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, 0x03, 0x23, 0x11, 0x21, 0x11, 0x01, 0x36, 0xd5, 0xb8, 0x95, // 53.3.3.#.!..6... + 0x40, 0xb8, 0x5a, 0x12, 0xa5, 0xfc, 0x8a, 0x05, 0xb0, 0xfa, 0xe7, 0x05, 0x19, 0xfa, 0xe7, 0x01, // @.Z............. + 0x05, 0x18, 0xfa, 0xe8, 0xfe, 0x09, 0x01, 0x5f, 0x05, 0xb0, 0x00, 0x02, 0x00, 0x32, 0x00, 0x00, // ......._.....2.. + 0x04, 0x79, 0x05, 0xb0, 0x00, 0x10, 0x00, 0x1d, 0x00, 0x2f, 0x40, 0x2c, 0x00, 0x01, 0x06, 0x01, // .y......./@,.... + 0x05, 0x04, 0x01, 0x05, 0x63, 0x00, 0x03, 0x03, 0x00, 0x59, 0x00, 0x00, 0x00, 0x16, 0x4b, 0x00, // ....c....Y....K. + 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x11, 0x11, 0x11, 0x1d, 0x11, 0x1c, // ...[.....L...... + 0x22, 0x11, 0x28, 0x21, 0x10, 0x07, 0x06, 0x19, 0x2b, 0x13, 0x21, 0x11, 0x33, 0x32, 0x1e, 0x02, // ".(!....+.!.32.. + 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x21, 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, // ....#!.!..32>.54 + 0x2e, 0x02, 0x23, 0x32, 0x01, 0xea, 0x90, 0x6f, 0xac, 0x75, 0x3d, 0x3d, 0x75, 0xac, 0x6f, 0xfe, // ..#2...o.u==u.o. + 0xb7, 0xfe, 0xcf, 0x01, 0xea, 0x90, 0x49, 0x68, 0x43, 0x1f, 0x1f, 0x43, 0x68, 0x49, 0x05, 0xb0, // ......IhC..ChI.. + 0xfd, 0xa9, 0x3d, 0x6f, 0x9c, 0x60, 0x5f, 0x9f, 0x73, 0x40, 0x05, 0x18, 0xfd, 0xaa, 0xfd, 0xd5, // ..=o.`_.s@...... + 0x2f, 0x4e, 0x67, 0x38, 0x37, 0x63, 0x4a, 0x2b, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x04, 0x4b, // /Ng87cJ+.......K + 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x2d, 0x40, 0x2a, 0x00, 0x00, 0x07, 0x01, // .........-@*.... + 0x06, 0x05, 0x00, 0x06, 0x63, 0x04, 0x01, 0x02, 0x02, 0x16, 0x4b, 0x00, 0x05, 0x05, 0x01, 0x5c, // ....c.....K..... + 0x03, 0x01, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x13, 0x13, 0x13, 0x1f, 0x13, 0x1e, 0x22, 0x11, 0x11, // ......L......".. + 0x11, 0x28, 0x20, 0x08, 0x06, 0x1a, 0x2b, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, // .( ...+.32...... + 0x23, 0x21, 0x11, 0x33, 0x01, 0x23, 0x11, 0x33, 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, // #!.3.#.3..32>.54 + 0x2e, 0x02, 0x23, 0x01, 0x49, 0x5c, 0x5f, 0x91, 0x63, 0x32, 0x32, 0x63, 0x91, 0x5f, 0xfe, 0xeb, // ..#.I._.c22c._.. + 0xb9, 0x03, 0x02, 0xb9, 0xb9, 0xfc, 0xfe, 0x5c, 0x37, 0x4e, 0x30, 0x16, 0x16, 0x31, 0x4d, 0x37, // ........7N0..1M7 + 0x03, 0x59, 0x3d, 0x6f, 0x9d, 0x5f, 0x5f, 0x9f, 0x73, 0x40, 0x05, 0xb0, 0xfa, 0x50, 0x05, 0xb0, // .Y=o.__.s@...P.. + 0xfd, 0x12, 0xfd, 0xd5, 0x2f, 0x4f, 0x66, 0x38, 0x37, 0x62, 0x4a, 0x2c, 0x00, 0x02, 0x00, 0xa8, // ..../Of87bJ,.... + 0x00, 0x00, 0x04, 0x51, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x1b, 0x00, 0x29, 0x40, 0x26, 0x00, 0x00, // ...Q.......)@&.. + 0x05, 0x01, 0x04, 0x03, 0x00, 0x04, 0x63, 0x00, 0x02, 0x02, 0x16, 0x4b, 0x00, 0x03, 0x03, 0x01, // ......c....K.... + 0x5c, 0x00, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x0f, 0x0f, 0x0f, 0x1b, 0x0f, 0x1a, 0x22, 0x11, 0x28, // ......L......".( + 0x20, 0x06, 0x06, 0x18, 0x2b, 0x01, 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, // ...+.!2......#! + 0x11, 0x33, 0x11, 0x11, 0x21, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x61, 0x01, // .3..!2>.54..#.a. + 0x0a, 0x74, 0xb5, 0x7c, 0x41, 0x41, 0x7c, 0xb5, 0x74, 0xfe, 0x3d, 0xb9, 0x01, 0x0a, 0x4e, 0x71, // .t.|AA|.t.=...Nq + 0x4a, 0x23, 0x23, 0x4a, 0x71, 0x4e, 0x03, 0x59, 0x3c, 0x6f, 0x9c, 0x61, 0x60, 0xa0, 0x72, 0x3f, // J##JqN.Y.. + 0x03, 0x02, 0x03, 0x04, 0x02, 0x70, 0x08, 0x01, 0x07, 0x01, 0x00, 0x01, 0x07, 0x00, 0x70, 0x00, // .....p........p. + 0x02, 0x00, 0x01, 0x07, 0x02, 0x01, 0x61, 0x00, 0x03, 0x03, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x1d, // ......a....[.... + 0x4b, 0x00, 0x00, 0x00, 0x06, 0x5b, 0x00, 0x06, 0x06, 0x1e, 0x06, 0x4c, 0x00, 0x00, 0x00, 0x2f, // K....[.....L.../ + 0x00, 0x2f, 0x29, 0x24, 0x14, 0x25, 0x11, 0x15, 0x24, 0x09, 0x06, 0x1b, 0x2b, 0x01, 0x1e, 0x03, // ./)$.%..$...+... + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x21, 0x35, 0x21, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, // 32>.55!5!54..#". + 0x02, 0x07, 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x0e, 0x02, 0x23, 0x22, // ..#>.32.......#" + 0x2e, 0x02, 0x27, 0x01, 0x2b, 0x01, 0x27, 0x4a, 0x6d, 0x47, 0x4e, 0x7a, 0x54, 0x2d, 0xfe, 0x1c, // ..'.+.'JmGNzT-.. + 0x01, 0xe4, 0x2c, 0x54, 0x7a, 0x4f, 0x47, 0x6d, 0x4a, 0x27, 0x01, 0xb9, 0x01, 0x43, 0x7d, 0xb0, // ..,TzOGmJ'...C}. + 0x6e, 0x75, 0xbe, 0x86, 0x49, 0x49, 0x86, 0xbe, 0x75, 0x6e, 0xb0, 0x7d, 0x43, 0x01, 0x01, 0xd1, // nu..II..un.}C... + 0x4c, 0x7b, 0x57, 0x30, 0x40, 0x72, 0x9e, 0x5e, 0x5a, 0x97, 0x5d, 0x5e, 0x9f, 0x72, 0x40, 0x30, // L{W0@r.^Z.]^.r@0 + 0x57, 0x7d, 0x4c, 0x65, 0xb2, 0x84, 0x4c, 0x54, 0x99, 0xd7, 0x83, 0xfe, 0xb4, 0x83, 0xd6, 0x99, // W}Le..LT........ + 0x54, 0x45, 0x7f, 0xb3, 0x6e, 0x00, 0x00, 0x02, 0x00, 0x77, 0xff, 0xec, 0x04, 0x6a, 0x05, 0xc4, // TE..n....w...j.. + 0x00, 0x1d, 0x00, 0x31, 0x00, 0x5f, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x04, 0x00, // ...1._K..PX@.... + 0x01, 0x07, 0x04, 0x01, 0x61, 0x00, 0x06, 0x06, 0x03, 0x5b, 0x05, 0x01, 0x03, 0x03, 0x16, 0x4b, // ....a....[.....K + 0x00, 0x07, 0x07, 0x00, 0x5b, 0x02, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x4c, 0x1b, 0x40, 0x27, 0x00, // ....[......L.@'. + 0x04, 0x00, 0x01, 0x07, 0x04, 0x01, 0x61, 0x00, 0x03, 0x03, 0x16, 0x4b, 0x00, 0x06, 0x06, 0x05, // ......a....K.... + 0x5b, 0x00, 0x05, 0x05, 0x1d, 0x4b, 0x00, 0x02, 0x02, 0x17, 0x4b, 0x00, 0x07, 0x07, 0x00, 0x5b, // [....K....K....[ + 0x00, 0x00, 0x00, 0x1e, 0x00, 0x4c, 0x59, 0x40, 0x0b, 0x29, 0x27, 0x25, 0x11, 0x11, 0x11, 0x15, // .....LY@.)'%.... + 0x24, 0x08, 0x06, 0x1c, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x23, // $...+....#"..55# + 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x27, // .#.3.354>.32...' + 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, // 4&#".......32>.5 + 0x04, 0x6a, 0x2e, 0x5c, 0x89, 0x5a, 0x56, 0x82, 0x57, 0x2c, 0x72, 0xb9, 0xb9, 0x72, 0x2b, 0x57, // .j...ZV.W,r..r+W + 0x82, 0x56, 0x5b, 0x89, 0x5c, 0x2e, 0xb9, 0x51, 0x64, 0x2d, 0x3e, 0x26, 0x10, 0x10, 0x26, 0x3e, // .V[....Qd->&..&> + 0x2e, 0x32, 0x45, 0x2a, 0x13, 0x02, 0x03, 0x7f, 0xc7, 0x89, 0x48, 0x48, 0x89, 0xc7, 0x7f, 0x7a, // .2E*......HH...z + 0xfd, 0x83, 0x05, 0xb0, 0xfd, 0x64, 0x98, 0x7f, 0xc7, 0x8a, 0x48, 0x48, 0x8a, 0xc7, 0x7f, 0x02, // .....d....HH.... + 0xbc, 0xbc, 0x2f, 0x5e, 0x8d, 0x5e, 0xfe, 0x55, 0x5f, 0x8e, 0x5e, 0x2f, 0x2f, 0x5e, 0x8e, 0x5f, // ../^.^.U_.^//^._ + 0x00, 0x02, 0x00, 0x41, 0x00, 0x00, 0x04, 0x26, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x1c, 0x00, 0x33, // ...A...&.......3 + 0x40, 0x30, 0x05, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x61, // @0.....J.......a + 0x00, 0x05, 0x05, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x16, 0x4b, 0x06, 0x03, 0x02, 0x01, 0x01, 0x17, // ....[....K...... + 0x01, 0x4c, 0x00, 0x00, 0x19, 0x17, 0x16, 0x14, 0x00, 0x0f, 0x00, 0x0f, 0x28, 0x11, 0x11, 0x07, // .L..........(... + 0x06, 0x17, 0x2b, 0x21, 0x11, 0x21, 0x01, 0x23, 0x01, 0x26, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x33, // ..+!.!.#.&&54>.3 + 0x21, 0x11, 0x01, 0x14, 0x1e, 0x02, 0x33, 0x33, 0x11, 0x23, 0x22, 0x0e, 0x02, 0x03, 0x6d, 0xfe, // !.....33.#"...m. + 0xca, 0xfe, 0xcf, 0xc5, 0x01, 0x55, 0x8c, 0x94, 0x47, 0x85, 0xbd, 0x75, 0x01, 0xb2, 0xfd, 0x09, // .....U..G..u.... + 0x29, 0x50, 0x78, 0x4e, 0xff, 0xf9, 0x50, 0x79, 0x52, 0x2a, 0x02, 0x5f, 0xfd, 0xa1, 0x02, 0x92, // )PxN..PyR*._.... + 0x33, 0xbc, 0x8b, 0x64, 0x9d, 0x6b, 0x38, 0xfa, 0x50, 0x04, 0x0e, 0x3b, 0x66, 0x4b, 0x2a, 0x02, // 3..d.k8.P..;fK*. + 0x20, 0x25, 0x45, 0x63, 0x00, 0x02, 0x00, 0x81, 0xff, 0xec, 0x04, 0x47, 0x06, 0x11, 0x00, 0x2e, // %Ec.......G.... + 0x00, 0x44, 0x00, 0x38, 0x40, 0x35, 0x2a, 0x01, 0x04, 0x03, 0x01, 0x4a, 0x00, 0x02, 0x00, 0x02, // .D.8@5*....J.... + 0x72, 0x05, 0x01, 0x00, 0x06, 0x01, 0x03, 0x04, 0x00, 0x03, 0x63, 0x00, 0x04, 0x04, 0x01, 0x5b, // r.........c....[ + 0x00, 0x01, 0x01, 0x1e, 0x01, 0x4c, 0x30, 0x2f, 0x01, 0x00, 0x3b, 0x39, 0x2f, 0x44, 0x30, 0x44, // .....L0/..;9/D0D + 0x1e, 0x1d, 0x0c, 0x0a, 0x00, 0x2e, 0x01, 0x2e, 0x07, 0x06, 0x14, 0x2b, 0x01, 0x32, 0x1e, 0x02, // ...........+.2.. + 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x3d, 0x03, 0x34, 0x12, 0x36, 0x36, 0x37, // .....#"..=.4.667 + 0x3e, 0x03, 0x35, 0x33, 0x14, 0x0e, 0x04, 0x07, 0x0e, 0x03, 0x07, 0x3e, 0x03, 0x17, 0x22, 0x0e, // >.53.......>..". + 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x02, // ......32>.554... + 0x86, 0x6a, 0xa6, 0x74, 0x3d, 0x41, 0x7c, 0xb3, 0x72, 0x72, 0xb4, 0x7c, 0x42, 0x45, 0x7f, 0xb5, // .j.t=A|.rr.|BE.. + 0x6f, 0x35, 0x5b, 0x43, 0x26, 0x98, 0x1d, 0x33, 0x45, 0x50, 0x58, 0x2c, 0x46, 0x7a, 0x60, 0x42, // o5[C&..3EPX,Fz`B + 0x0f, 0x20, 0x4e, 0x5a, 0x66, 0x15, 0x4c, 0x70, 0x49, 0x24, 0x24, 0x49, 0x71, 0x4d, 0x4c, 0x6f, // . NZf.LpI$$IqMLo + 0x4a, 0x24, 0x24, 0x4a, 0x71, 0x03, 0xfc, 0x4b, 0x83, 0xb3, 0x69, 0x17, 0x71, 0xc0, 0x8e, 0x50, // J$$Jq..K..i.q..P + 0x50, 0x8e, 0xc0, 0x71, 0x17, 0x07, 0x45, 0xb5, 0x01, 0x13, 0xc1, 0x73, 0x15, 0x0a, 0x17, 0x23, // P..q..E....s...# + 0x35, 0x29, 0x42, 0x5e, 0x41, 0x29, 0x1c, 0x12, 0x0a, 0x0f, 0x35, 0x5a, 0x83, 0x5c, 0x25, 0x3f, // 5)B^A)....5Z..%? + 0x2d, 0x19, 0x98, 0x37, 0x5d, 0x7a, 0x44, 0x17, 0x4c, 0x89, 0x67, 0x3d, 0x3d, 0x67, 0x89, 0x4c, // -..7]zD.L.g==g.L + 0x17, 0x44, 0x7a, 0x5d, 0x37, 0x00, 0x00, 0x03, 0x00, 0xa4, 0x00, 0x00, 0x04, 0x30, 0x04, 0x3a, // .Dz]7........0.: + 0x00, 0x14, 0x00, 0x1d, 0x00, 0x26, 0x00, 0x3e, 0x40, 0x3b, 0x0a, 0x01, 0x03, 0x04, 0x01, 0x4a, // .....&.>@;.....J + 0x00, 0x04, 0x07, 0x01, 0x03, 0x02, 0x04, 0x03, 0x63, 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, // ........c....[.. + 0x00, 0x18, 0x4b, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x06, 0x01, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x15, // ..K....[......L. + 0x15, 0x00, 0x00, 0x26, 0x24, 0x20, 0x1e, 0x15, 0x1d, 0x15, 0x1c, 0x18, 0x16, 0x00, 0x14, 0x00, // ...&$ .......... + 0x13, 0x21, 0x08, 0x06, 0x15, 0x2b, 0x33, 0x11, 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, // .!...+3.!2...... + 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x01, 0x11, 0x21, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, // ......#..!2654&# + 0x25, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0xa4, 0x01, 0xa9, 0x64, 0xa4, 0x75, 0x3f, // %32654&##...d.u? + 0x5a, 0x56, 0x34, 0x50, 0x37, 0x1c, 0x3a, 0x6c, 0x99, 0x5f, 0xfe, 0xcc, 0x01, 0x34, 0x70, 0x74, // ZV4P7.:l._...4pt + 0x75, 0x6f, 0xfe, 0xcc, 0xf1, 0x7c, 0x85, 0x87, 0x7c, 0xef, 0x04, 0x3a, 0x24, 0x48, 0x70, 0x4d, // uo...|..|..:$HpM + 0x4d, 0x76, 0x20, 0x0c, 0x31, 0x42, 0x50, 0x2c, 0x4d, 0x73, 0x4d, 0x26, 0x01, 0xdb, 0xfe, 0xba, // Mv .1BP,MsM&.... + 0x54, 0x50, 0x4e, 0x54, 0x94, 0x4a, 0x4e, 0x51, 0x4c, 0x00, 0x00, 0x01, 0x00, 0xb7, 0x00, 0x00, // TPNT.JNQL....... + 0x04, 0x2a, 0x04, 0x3a, 0x00, 0x05, 0x00, 0x19, 0x40, 0x16, 0x00, 0x00, 0x00, 0x02, 0x59, 0x00, // .*.:....@.....Y. + 0x02, 0x02, 0x18, 0x4b, 0x00, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x11, 0x10, 0x03, 0x06, 0x17, // ...K.....L...... + 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x04, 0x2a, 0xfd, 0x47, 0xba, 0x03, 0x73, 0x03, 0xa1, // +.!.#.!.*.G..s.. + 0xfc, 0x5f, 0x04, 0x3a, 0x00, 0x02, 0x00, 0x36, 0xfe, 0xc2, 0x04, 0x9a, 0x04, 0x3a, 0x00, 0x10, // ._.:...6.....:.. + 0x00, 0x19, 0x00, 0x33, 0x40, 0x30, 0x04, 0x01, 0x02, 0x01, 0x02, 0x51, 0x00, 0x07, 0x07, 0x00, // ...3@0.....Q.... + 0x59, 0x00, 0x00, 0x00, 0x18, 0x4b, 0x06, 0x08, 0x05, 0x03, 0x01, 0x01, 0x03, 0x59, 0x00, 0x03, // Y....K.......Y.. + 0x03, 0x17, 0x03, 0x4c, 0x00, 0x00, 0x19, 0x18, 0x17, 0x16, 0x00, 0x10, 0x00, 0x10, 0x11, 0x11, // ...L............ + 0x11, 0x11, 0x16, 0x09, 0x06, 0x19, 0x2b, 0x37, 0x3e, 0x03, 0x37, 0x13, 0x21, 0x11, 0x33, 0x03, // ......+7>.7.!.3. + 0x23, 0x11, 0x21, 0x11, 0x23, 0x03, 0x01, 0x0e, 0x03, 0x07, 0x21, 0x11, 0x21, 0x9c, 0x2b, 0x3b, // #.!.#.....!.!.+; + 0x26, 0x17, 0x07, 0x10, 0x02, 0xb9, 0x8b, 0x12, 0xa7, 0xfd, 0x0d, 0xa6, 0x12, 0x01, 0xc9, 0x05, // &............... + 0x0f, 0x16, 0x21, 0x18, 0x01, 0xba, 0xfe, 0xb2, 0x97, 0x06, 0x4f, 0x88, 0xbc, 0x74, 0x01, 0x96, // ..!.......O..t.. + 0xfc, 0x5d, 0xfe, 0x2b, 0x01, 0x3e, 0xfe, 0xc2, 0x01, 0xd5, 0x02, 0x0d, 0x54, 0x98, 0x85, 0x70, // .].+.>......T..p + 0x2c, 0x02, 0xf8, 0x00, 0x00, 0x01, 0x00, 0x11, 0x00, 0x00, 0x04, 0xac, 0x04, 0x3a, 0x00, 0x15, // ,............:.. + 0x00, 0x31, 0x40, 0x2e, 0x13, 0x08, 0x02, 0x00, 0x05, 0x01, 0x4a, 0x07, 0x01, 0x05, 0x02, 0x01, // .1@.......J..... + 0x00, 0x01, 0x05, 0x00, 0x61, 0x08, 0x06, 0x02, 0x04, 0x04, 0x18, 0x4b, 0x09, 0x03, 0x02, 0x01, // ....a......K.... + 0x01, 0x17, 0x01, 0x4c, 0x15, 0x14, 0x11, 0x11, 0x11, 0x11, 0x12, 0x11, 0x11, 0x11, 0x10, 0x0a, // ...L............ + 0x06, 0x1d, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x01, 0x01, 0x33, 0x13, 0x33, // ..+.#.#.#.#..3.3 + 0x11, 0x33, 0x11, 0x33, 0x13, 0x33, 0x01, 0x01, 0x23, 0x02, 0xf5, 0x3a, 0xb9, 0x3b, 0xd7, 0xdf, // .3.3.3..#..:.;.. + 0x01, 0x29, 0xfe, 0xfa, 0xd6, 0xbd, 0x3b, 0xb9, 0x3b, 0xbe, 0xd6, 0xfe, 0xf8, 0x01, 0x2a, 0xe0, // .)....;.;.....*. + 0x01, 0xd6, 0xfe, 0x2a, 0x01, 0xd6, 0xfe, 0x2a, 0x02, 0x33, 0x02, 0x07, 0xfe, 0x40, 0x01, 0xc0, // ...*...*.3...@.. + 0xfe, 0x40, 0x01, 0xc0, 0xfd, 0xf9, 0xfd, 0xcd, 0x00, 0x01, 0x00, 0x87, 0xff, 0xed, 0x04, 0x4a, // .@.............J + 0x04, 0x4d, 0x00, 0x3c, 0x00, 0x4e, 0x40, 0x4b, 0x1b, 0x01, 0x07, 0x00, 0x01, 0x4a, 0x00, 0x02, // .M.<.N@K.....J.. + 0x01, 0x00, 0x01, 0x02, 0x00, 0x70, 0x00, 0x05, 0x07, 0x06, 0x07, 0x05, 0x06, 0x70, 0x08, 0x01, // .....p.......p.. + 0x00, 0x00, 0x07, 0x05, 0x00, 0x07, 0x63, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1f, // ......c....[.... + 0x4b, 0x00, 0x06, 0x06, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x1e, 0x04, 0x4c, 0x01, 0x00, 0x3b, 0x39, // K....[.....L..;9 + 0x31, 0x2f, 0x2b, 0x2a, 0x24, 0x22, 0x14, 0x12, 0x0e, 0x0d, 0x09, 0x07, 0x00, 0x3c, 0x01, 0x3c, // 1/+*$".......<.< + 0x09, 0x06, 0x14, 0x2b, 0x01, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, // ...+.2654..#"... + 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x0e, // #>.32........... + 0x02, 0x23, 0x22, 0x2e, 0x04, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, // .#"..53...32>.54 + 0x2e, 0x02, 0x23, 0x23, 0x35, 0x02, 0x7c, 0x80, 0x80, 0x23, 0x43, 0x64, 0x41, 0x3a, 0x68, 0x4f, // ..##5.|..#CdA:hO + 0x2f, 0xb9, 0x01, 0x4d, 0x81, 0xab, 0x5f, 0x64, 0xa6, 0x78, 0x42, 0x6a, 0x5b, 0x67, 0x73, 0x49, // /..M.._d.xBj[gsI + 0x80, 0xac, 0x64, 0x3c, 0x77, 0x6c, 0x5e, 0x45, 0x28, 0xb9, 0x2e, 0x52, 0x70, 0x41, 0x40, 0x6a, // ..d.5..&..r.$T. + 0x6a, 0x36, 0x03, 0x29, 0x39, 0x4b, 0x2b, 0x11, 0x02, 0x04, 0x3a, 0xfb, 0xc6, 0x03, 0xa1, 0xfe, // j6.)9K+...:..... + 0xca, 0x94, 0xe6, 0x9e, 0x53, 0xa5, 0x01, 0x39, 0x71, 0xaa, 0x71, 0x01, 0xcf, 0x00, 0x00, 0x01, // ....S..9q.q..... + 0x00, 0x89, 0x00, 0x00, 0x04, 0x29, 0x04, 0x3a, 0x00, 0x0c, 0x00, 0x20, 0x40, 0x1d, 0x08, 0x05, // .....).:... @... + 0x02, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x01, 0x00, 0x00, 0x18, 0x4b, 0x03, 0x02, 0x02, 0x01, 0x01, // ....J.....K..... + 0x17, 0x01, 0x4c, 0x11, 0x12, 0x12, 0x11, 0x11, 0x05, 0x06, 0x19, 0x2b, 0x25, 0x13, 0x33, 0x11, // ..L........+%.3. + 0x23, 0x11, 0x03, 0x23, 0x03, 0x11, 0x23, 0x11, 0x33, 0x02, 0x5c, 0xe6, 0xe7, 0xb9, 0xd4, 0x80, // #..#..#.3....... + 0xda, 0xb9, 0xef, 0xf5, 0x03, 0x45, 0xfb, 0xc6, 0x02, 0x9b, 0xfd, 0x65, 0x02, 0xb3, 0xfd, 0x4d, // .....E.....e...M + 0x04, 0x3a, 0x00, 0x01, 0x00, 0xa5, 0x00, 0x00, 0x04, 0x27, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x21, // .:.......'.:...! + 0x40, 0x1e, 0x00, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0x61, 0x05, 0x01, 0x03, 0x03, 0x18, 0x4b, // @........a.....K + 0x02, 0x01, 0x00, 0x00, 0x17, 0x00, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x06, 0x1a, // ......L......... + 0x2b, 0x21, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x04, 0x27, 0xb9, // +!#.!.#.3.!.3.'. + 0xfd, 0xf0, 0xb9, 0xb9, 0x02, 0x10, 0xb9, 0x01, 0xce, 0xfe, 0x32, 0x04, 0x3a, 0xfe, 0x2b, 0x01, // ..........2.:.+. + 0xd5, 0x00, 0x00, 0x01, 0x00, 0xa5, 0x00, 0x00, 0x04, 0x27, 0x04, 0x3a, 0x00, 0x07, 0x00, 0x1b, // .........'.:.... + 0x40, 0x18, 0x00, 0x01, 0x01, 0x03, 0x59, 0x00, 0x03, 0x03, 0x18, 0x4b, 0x02, 0x01, 0x00, 0x00, // @.....Y....K.... + 0x17, 0x00, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, 0x06, 0x18, 0x2b, 0x21, 0x23, 0x11, 0x21, 0x11, // ..L.......+!#.!. + 0x23, 0x11, 0x21, 0x04, 0x27, 0xb9, 0xfd, 0xf0, 0xb9, 0x03, 0x82, 0x03, 0xa1, 0xfc, 0x5f, 0x04, // #.!.'........._. + 0x3a, 0x00, 0x00, 0x01, 0x00, 0x68, 0x00, 0x00, 0x04, 0x7b, 0x04, 0x3a, 0x00, 0x07, 0x00, 0x1b, // :....h...{.:.... + 0x40, 0x18, 0x02, 0x01, 0x00, 0x00, 0x03, 0x59, 0x00, 0x03, 0x03, 0x18, 0x4b, 0x00, 0x01, 0x01, // @......Y....K... + 0x17, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, 0x06, 0x18, 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, // ..L.......+.!.#. + 0x21, 0x35, 0x21, 0x04, 0x7b, 0xfe, 0x50, 0xba, 0xfe, 0x57, 0x04, 0x13, 0x03, 0xa4, 0xfc, 0x5c, // !5!.{.P..W...... + 0x03, 0xa4, 0x96, 0x00, 0x00, 0x03, 0x00, 0x7a, 0xfe, 0x60, 0x04, 0x52, 0x06, 0x00, 0x00, 0x1b, // .......z.`.R.... + 0x00, 0x27, 0x00, 0x33, 0x00, 0x20, 0x40, 0x1d, 0x2e, 0x2d, 0x22, 0x21, 0x16, 0x13, 0x08, 0x05, // .'.3. @..-"!.... + 0x08, 0x01, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x01, 0x00, 0x72, 0x00, 0x01, 0x01, 0x1a, 0x01, 0x4c, // ....J....r.....L + 0x1d, 0x16, 0x02, 0x06, 0x16, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x37, 0x11, 0x33, 0x11, 0x1e, 0x03, // .....+.4>.7.3... + 0x15, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x11, 0x23, 0x11, 0x2e, 0x03, 0x35, 0x25, 0x34, 0x2e, 0x02, // .......#...5%4.. + 0x27, 0x11, 0x3e, 0x03, 0x35, 0x21, 0x14, 0x1e, 0x02, 0x17, 0x11, 0x0e, 0x03, 0x15, 0x7a, 0x36, // '.>.5!........z6 + 0x67, 0x94, 0x5d, 0xb9, 0x5e, 0x95, 0x68, 0x36, 0x37, 0x67, 0x95, 0x5e, 0xb9, 0x5d, 0x94, 0x67, // g.].^.h67g.^.].g + 0x36, 0x03, 0x1f, 0x1b, 0x36, 0x51, 0x36, 0x36, 0x51, 0x36, 0x1b, 0xfd, 0x9a, 0x1a, 0x35, 0x50, // 6...6Q66Q6....5P + 0x36, 0x35, 0x50, 0x35, 0x1b, 0x02, 0x27, 0x68, 0xb8, 0x8f, 0x5f, 0x11, 0x01, 0xba, 0xfe, 0x46, // 65P5..'h.._....F + 0x10, 0x60, 0x8f, 0xb8, 0x68, 0x16, 0x69, 0xb7, 0x8f, 0x5f, 0x0f, 0xfe, 0x6c, 0x01, 0x95, 0x10, // .`..h.i.._..l... + 0x5f, 0x8e, 0xb7, 0x68, 0x16, 0x42, 0x7c, 0x66, 0x4a, 0x12, 0xfc, 0xe8, 0x12, 0x4a, 0x66, 0x7c, // _..h.B|fJ....Jf| + 0x44, 0x43, 0x7b, 0x66, 0x4a, 0x12, 0x03, 0x16, 0x12, 0x4b, 0x66, 0x7b, 0x42, 0x00, 0x00, 0x01, // DC{fJ....Kf{B... + 0x00, 0xaa, 0xfe, 0xbf, 0x04, 0x90, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x23, 0x40, 0x20, 0x00, 0x04, // .......:...#@ .. + 0x01, 0x04, 0x52, 0x02, 0x01, 0x00, 0x00, 0x18, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x05, 0x5a, 0x00, // ..R.....K.....Z. + 0x05, 0x05, 0x17, 0x05, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x06, 0x1a, 0x2b, 0x13, // ....L.........+. + 0x33, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x03, 0x23, 0x11, 0x21, 0xaa, 0xb9, 0x01, 0xf2, 0xba, // 3.!.3.3.#.!..... + 0x81, 0x12, 0xa6, 0xfc, 0xd2, 0x04, 0x3a, 0xfc, 0x5d, 0x03, 0xa3, 0xfc, 0x5d, 0xfe, 0x28, 0x01, // ......:.]...].(. + 0x41, 0x00, 0x00, 0x01, 0x00, 0x8d, 0x00, 0x00, 0x04, 0x27, 0x04, 0x3a, 0x00, 0x15, 0x00, 0x29, // A........'.:...) + 0x40, 0x26, 0x13, 0x01, 0x03, 0x02, 0x02, 0x01, 0x01, 0x03, 0x02, 0x4a, 0x00, 0x03, 0x00, 0x01, // @&.........J.... + 0x00, 0x03, 0x01, 0x63, 0x04, 0x01, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x00, 0x00, 0x17, 0x00, 0x4c, // ...c.....K.....L + 0x13, 0x23, 0x15, 0x23, 0x10, 0x05, 0x06, 0x19, 0x2b, 0x21, 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, // .#.#....+!#...#" + 0x2e, 0x02, 0x35, 0x11, 0x33, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x04, 0x27, // ..5.3...3267.3.' + 0xb9, 0x44, 0x91, 0x55, 0x64, 0xa2, 0x73, 0x3e, 0xb9, 0x01, 0x83, 0x7a, 0x51, 0x94, 0x45, 0xb9, // .D.Ud.s>...zQ.E. + 0x01, 0x8b, 0x11, 0x12, 0x32, 0x65, 0x99, 0x67, 0x01, 0x3b, 0xfe, 0xc5, 0x85, 0x7a, 0x12, 0x11, // ....2e.g.;...z.. + 0x02, 0x17, 0x00, 0x01, 0x00, 0x81, 0x00, 0x00, 0x04, 0x4c, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x25, // .........L.:...% + 0x40, 0x22, 0x06, 0x05, 0x03, 0x03, 0x01, 0x01, 0x18, 0x4b, 0x02, 0x01, 0x00, 0x00, 0x04, 0x5a, // @".......K.....Z + 0x00, 0x04, 0x04, 0x17, 0x04, 0x4c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0b, 0x11, 0x11, 0x11, 0x11, // .....L.......... + 0x11, 0x07, 0x06, 0x19, 0x2b, 0x01, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x11, 0x21, // ....+..3.3.3.3.! + 0x11, 0x01, 0x3a, 0xd0, 0xb9, 0xd0, 0xb9, 0xfc, 0x35, 0x04, 0x3a, 0xfc, 0x5d, 0x03, 0xa3, 0xfc, // ..:.....5.:.]... + 0x5d, 0x03, 0xa3, 0xfb, 0xc6, 0x04, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x76, 0xfe, 0xbf, 0x04, 0x98, // ].....:....v.... + 0x04, 0x3a, 0x00, 0x11, 0x00, 0x2d, 0x40, 0x2a, 0x00, 0x05, 0x00, 0x05, 0x52, 0x08, 0x07, 0x03, // .:...-@*....R... + 0x03, 0x01, 0x01, 0x18, 0x4b, 0x04, 0x02, 0x02, 0x00, 0x00, 0x06, 0x5a, 0x00, 0x06, 0x06, 0x17, // ....K......Z.... + 0x06, 0x4c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x31, 0x11, 0x11, 0x09, // .L..........1... + 0x06, 0x1b, 0x2b, 0x01, 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, 0x11, 0x33, 0x11, 0x33, // ..+..3.3.353.3.3 + 0x03, 0x23, 0x11, 0x21, 0x11, 0x01, 0x2f, 0xd0, 0xb9, 0x9a, 0x36, 0xb9, 0x57, 0x12, 0xa5, 0xfc, // .#.!../...6.W... + 0x95, 0x04, 0x3a, 0xfc, 0x5d, 0x03, 0xa3, 0xfc, 0x5d, 0x01, 0x03, 0xa2, 0xfc, 0x5e, 0xfe, 0x27, // ..:.]...]....^.' + 0x01, 0x41, 0x04, 0x3a, 0x00, 0x02, 0x00, 0x39, 0x00, 0x00, 0x04, 0x77, 0x04, 0x3a, 0x00, 0x10, // .A.:...9...w.:.. + 0x00, 0x1d, 0x00, 0x2f, 0x40, 0x2c, 0x00, 0x01, 0x06, 0x01, 0x05, 0x04, 0x01, 0x05, 0x63, 0x00, // .../@,........c. + 0x03, 0x03, 0x00, 0x59, 0x00, 0x00, 0x00, 0x18, 0x4b, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, // ...Y....K....[.. + 0x02, 0x17, 0x02, 0x4c, 0x11, 0x11, 0x11, 0x1d, 0x11, 0x1c, 0x22, 0x11, 0x28, 0x21, 0x10, 0x07, // ...L......".(!.. + 0x06, 0x19, 0x2b, 0x13, 0x21, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, // ..+.!.32......#! + 0x11, 0x21, 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x39, 0x01, 0xe5, // .!..32>.54..#9.. + 0xc8, 0x60, 0x96, 0x66, 0x35, 0x35, 0x66, 0x96, 0x60, 0xfe, 0x7f, 0xfe, 0xd4, 0x01, 0xe5, 0xc8, // .`.f55f.`....... + 0x3a, 0x51, 0x34, 0x18, 0x18, 0x34, 0x52, 0x39, 0x04, 0x3a, 0xfe, 0x66, 0x32, 0x58, 0x7a, 0x48, // :Q4..4R9.:.f2XzH + 0x48, 0x7c, 0x5b, 0x35, 0x03, 0xa2, 0xfe, 0x67, 0xfe, 0x8e, 0x1e, 0x33, 0x42, 0x23, 0x22, 0x43, // H|[5...g...3B#"C + 0x35, 0x22, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x04, 0x3f, 0x04, 0x3a, 0x00, 0x0e, 0x00, 0x12, // 5".......?.:.... + 0x00, 0x1f, 0x00, 0x2d, 0x40, 0x2a, 0x00, 0x00, 0x07, 0x01, 0x06, 0x05, 0x00, 0x06, 0x63, 0x04, // ...-@*........c. + 0x01, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x05, 0x05, 0x01, 0x5c, 0x03, 0x01, 0x01, 0x01, 0x17, 0x01, // ....K........... + 0x4c, 0x13, 0x13, 0x13, 0x1f, 0x13, 0x1e, 0x22, 0x11, 0x11, 0x11, 0x28, 0x20, 0x08, 0x06, 0x1a, // L......"...( ... + 0x2b, 0x01, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x33, 0x01, 0x23, // +.32......#!.3.# + 0x11, 0x33, 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x49, 0x63, // .3..32>.54..#.Ic + 0x57, 0x87, 0x5b, 0x2f, 0x2f, 0x5b, 0x86, 0x58, 0xfe, 0xe4, 0xb9, 0x02, 0xf6, 0xb9, 0xb9, 0xfd, // W.[//[.X........ + 0x0a, 0x63, 0x2f, 0x42, 0x29, 0x13, 0x13, 0x29, 0x42, 0x2f, 0x02, 0xa0, 0x32, 0x59, 0x7a, 0x47, // .c/B)..)B/..2YzG + 0x47, 0x7c, 0x5c, 0x35, 0x04, 0x3a, 0xfb, 0xc6, 0x04, 0x3a, 0xfd, 0xcf, 0xfe, 0x8e, 0x1f, 0x33, // G|.5.:...:.....3 + 0x41, 0x23, 0x21, 0x43, 0x36, 0x22, 0x00, 0x02, 0x00, 0xa5, 0x00, 0x00, 0x04, 0x40, 0x04, 0x3a, // A#!C6".......@.: + 0x00, 0x0e, 0x00, 0x1b, 0x00, 0x29, 0x40, 0x26, 0x00, 0x00, 0x05, 0x01, 0x04, 0x03, 0x00, 0x04, // .....)@&........ + 0x63, 0x00, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x03, 0x03, 0x01, 0x5c, 0x00, 0x01, 0x01, 0x17, 0x01, // c....K.......... + 0x4c, 0x0f, 0x0f, 0x0f, 0x1b, 0x0f, 0x1a, 0x22, 0x11, 0x28, 0x20, 0x06, 0x06, 0x18, 0x2b, 0x01, // L......".( ...+. + 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x33, 0x11, 0x11, 0x21, 0x32, // !2......#!.3..!2 + 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x5e, 0x01, 0x4b, 0x61, 0x97, 0x68, 0x37, 0x36, // >.54..#.^.Ka.h76 + 0x68, 0x98, 0x61, 0xfd, 0xfc, 0xb9, 0x01, 0x4b, 0x3a, 0x54, 0x36, 0x19, 0x1a, 0x36, 0x53, 0x3a, // h.a....K:T6..6S: + 0x02, 0xa0, 0x31, 0x58, 0x7a, 0x49, 0x48, 0x7d, 0x5b, 0x34, 0x04, 0x3a, 0xfd, 0xcf, 0xfe, 0x8e, // ..1XzIH}[4.:.... + 0x1e, 0x32, 0x42, 0x24, 0x23, 0x43, 0x35, 0x21, 0x00, 0x01, 0x00, 0x81, 0xff, 0xec, 0x04, 0x3a, // .2B$#C5!.......: + 0x04, 0x4e, 0x00, 0x2d, 0x00, 0x48, 0x40, 0x45, 0x00, 0x01, 0x00, 0x07, 0x00, 0x01, 0x07, 0x70, // .N.-.H@E.......p + 0x00, 0x04, 0x06, 0x05, 0x06, 0x04, 0x05, 0x70, 0x00, 0x07, 0x00, 0x06, 0x04, 0x07, 0x06, 0x61, // .......p.......a + 0x08, 0x01, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1f, 0x4b, 0x00, 0x05, 0x05, 0x03, 0x5b, // .....[....K....[ + 0x00, 0x03, 0x03, 0x1e, 0x03, 0x4c, 0x01, 0x00, 0x29, 0x28, 0x27, 0x26, 0x22, 0x20, 0x1c, 0x1b, // .....L..)('&" .. + 0x17, 0x15, 0x0c, 0x0a, 0x06, 0x05, 0x00, 0x2d, 0x01, 0x2d, 0x09, 0x06, 0x14, 0x2b, 0x01, 0x22, // .......-.-...+." + 0x0e, 0x02, 0x15, 0x23, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, // ...#4>.32....... + 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x21, 0x35, // #"..53...32>.7!5 + 0x21, 0x2e, 0x03, 0x02, 0x3c, 0x32, 0x60, 0x4b, 0x2e, 0xb0, 0x4a, 0x7b, 0xa0, 0x56, 0x7f, 0xc0, // !...<2`K..J{.V.. + 0x7f, 0x40, 0x40, 0x80, 0xbf, 0x7f, 0x60, 0xa2, 0x76, 0x43, 0xb0, 0x2a, 0x48, 0x61, 0x38, 0x54, // .@@...`.vC.*Ha8T + 0x76, 0x4d, 0x27, 0x05, 0xfe, 0x53, 0x01, 0xab, 0x06, 0x2a, 0x4c, 0x74, 0x03, 0xb6, 0x20, 0x39, // vM'..S...*Lt.. 9 + 0x4d, 0x2e, 0x49, 0x84, 0x64, 0x3b, 0x58, 0x94, 0xc4, 0x6c, 0x2a, 0x6c, 0xc4, 0x95, 0x57, 0x3c, // M.I.d;X..l*l..W< + 0x69, 0x8f, 0x53, 0x32, 0x58, 0x41, 0x26, 0x3b, 0x61, 0x7c, 0x41, 0x98, 0x3f, 0x74, 0x5a, 0x36, // i.S2XA&;a|A.?tZ6 + 0x00, 0x02, 0x00, 0x71, 0xff, 0xec, 0x04, 0x81, 0x04, 0x4e, 0x00, 0x1b, 0x00, 0x31, 0x00, 0x5f, // ...q.....N...1._ + 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x1f, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x03, 0x61, 0x00, // K..PX@........a. + 0x07, 0x07, 0x01, 0x5b, 0x05, 0x01, 0x01, 0x01, 0x1f, 0x4b, 0x00, 0x06, 0x06, 0x02, 0x5b, 0x04, // ...[.....K....[. + 0x01, 0x02, 0x02, 0x1e, 0x02, 0x4c, 0x1b, 0x40, 0x27, 0x00, 0x00, 0x00, 0x03, 0x06, 0x00, 0x03, // .....L.@'....... + 0x61, 0x00, 0x05, 0x05, 0x18, 0x4b, 0x00, 0x07, 0x07, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1f, 0x4b, // a....K....[....K + 0x00, 0x04, 0x04, 0x17, 0x4b, 0x00, 0x06, 0x06, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1e, 0x02, 0x4c, // ....K....[.....L + 0x59, 0x40, 0x0b, 0x29, 0x25, 0x11, 0x11, 0x14, 0x29, 0x24, 0x10, 0x08, 0x06, 0x1c, 0x2b, 0x01, // Y@.)%...)$....+. + 0x33, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, // 3>.32.......#".. + 0x27, 0x23, 0x11, 0x23, 0x11, 0x33, 0x01, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, // '#.#.3....32>.55 + 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x2a, 0x82, 0x07, 0x32, 0x5a, 0x80, 0x55, // 4..#"....*..2Z.U + 0x5d, 0x8a, 0x5a, 0x2c, 0x2c, 0x59, 0x89, 0x5d, 0x57, 0x83, 0x5a, 0x31, 0x06, 0x81, 0xb9, 0xb9, // ].Z,,Y.]W.Z1.... + 0x01, 0x3a, 0x10, 0x29, 0x44, 0x35, 0x34, 0x45, 0x28, 0x11, 0x11, 0x29, 0x45, 0x35, 0x34, 0x44, // .:.)D54E(..)E54D + 0x28, 0x10, 0x02, 0x6f, 0x66, 0xaf, 0x81, 0x49, 0x56, 0x96, 0xc9, 0x72, 0x16, 0x72, 0xc9, 0x94, // (..of..IV..r.r.. + 0x56, 0x4b, 0x84, 0xb4, 0x68, 0xfe, 0x29, 0x04, 0x3a, 0xfd, 0xd7, 0x4e, 0x91, 0x6e, 0x42, 0x42, // VK..h.).:..N.nBB + 0x6e, 0x91, 0x4e, 0x16, 0x4e, 0x90, 0x6f, 0x42, 0x42, 0x6f, 0x90, 0x4e, 0x00, 0x02, 0x00, 0x4f, // n.N.N.oBBo.N...O + 0x00, 0x00, 0x04, 0x21, 0x04, 0x3a, 0x00, 0x0f, 0x00, 0x1c, 0x00, 0x33, 0x40, 0x30, 0x07, 0x01, // ...!.:.....3@0.. + 0x01, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0x61, 0x00, 0x05, 0x05, 0x03, // ...J.......a.... + 0x5b, 0x06, 0x01, 0x03, 0x03, 0x18, 0x4b, 0x02, 0x01, 0x00, 0x00, 0x17, 0x00, 0x4c, 0x00, 0x00, // [.....K......L.. + 0x19, 0x17, 0x16, 0x14, 0x00, 0x0f, 0x00, 0x0e, 0x11, 0x11, 0x11, 0x07, 0x06, 0x17, 0x2b, 0x01, // ..............+. + 0x11, 0x23, 0x11, 0x21, 0x01, 0x23, 0x01, 0x26, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x03, 0x14, // .#.!.#.&&54>.3.. + 0x1e, 0x02, 0x33, 0x21, 0x11, 0x21, 0x22, 0x0e, 0x02, 0x04, 0x21, 0xb9, 0xfe, 0xb0, 0xfe, 0xff, // ..3!.!"...!..... + 0xc8, 0x01, 0x11, 0x68, 0x70, 0x39, 0x6a, 0x9a, 0x60, 0xe3, 0x18, 0x33, 0x4c, 0x35, 0x01, 0x5a, // ...hp9j.`..3L5.Z + 0xfe, 0xbd, 0x39, 0x56, 0x38, 0x1c, 0x04, 0x3a, 0xfb, 0xc6, 0x01, 0xa5, 0xfe, 0x5b, 0x01, 0xc1, // ..9V8..:.....[.. + 0x26, 0x9f, 0x6a, 0x48, 0x79, 0x57, 0x32, 0xfe, 0xb4, 0x22, 0x40, 0x31, 0x1e, 0x01, 0x67, 0x1f, // &.jHyW2.."@1..g. + 0x33, 0x41, 0x00, 0x01, 0xff, 0xe9, 0xfe, 0x4b, 0x04, 0x25, 0x06, 0x00, 0x00, 0x2f, 0x00, 0x49, // 3A.....K.%.../.I + 0x40, 0x46, 0x25, 0x02, 0x02, 0x05, 0x04, 0x14, 0x01, 0x03, 0x05, 0x13, 0x01, 0x02, 0x03, 0x03, // @F%............. + 0x4a, 0x09, 0x01, 0x07, 0x06, 0x01, 0x00, 0x01, 0x07, 0x00, 0x61, 0x00, 0x04, 0x04, 0x01, 0x5b, // J.........a....[ + 0x00, 0x01, 0x01, 0x1f, 0x4b, 0x00, 0x08, 0x08, 0x05, 0x59, 0x00, 0x05, 0x05, 0x17, 0x4b, 0x00, // ....K....Y....K. + 0x03, 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x21, 0x02, 0x4c, 0x2f, 0x2e, 0x11, 0x11, 0x11, 0x13, // ...[...!.L/..... + 0x27, 0x27, 0x29, 0x23, 0x10, 0x0a, 0x06, 0x1d, 0x2b, 0x01, 0x21, 0x11, 0x36, 0x36, 0x37, 0x32, // '')#....+.!.6672 + 0x1e, 0x02, 0x15, 0x15, 0x33, 0x11, 0x14, 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, // ....3...#"&'7..3 + 0x32, 0x36, 0x35, 0x35, 0x23, 0x11, 0x34, 0x26, 0x07, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, 0x23, // 2655#.4&."...#.# + 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x02, 0x66, 0xfe, 0xf9, 0x3a, 0xaa, 0x6a, 0x55, 0x8b, 0x62, // 5353.!.f..:.jU.b + 0x35, 0x01, 0xa9, 0x9a, 0x20, 0x36, 0x1e, 0x0f, 0x08, 0x1c, 0x1e, 0x1b, 0x08, 0x42, 0x48, 0x01, // 5... 6.......BH. + 0x7f, 0x76, 0x59, 0x91, 0x2d, 0xb9, 0xbd, 0xbd, 0xb9, 0x01, 0x07, 0x04, 0xb9, 0xfe, 0xe0, 0x55, // .vY.-..........U + 0x5f, 0x01, 0x31, 0x68, 0x9f, 0x6d, 0xe3, 0xfd, 0xe1, 0xa8, 0xb4, 0x07, 0x0a, 0x94, 0x03, 0x05, // _.1h.m.......... + 0x03, 0x02, 0x69, 0x5b, 0x59, 0x02, 0xab, 0x85, 0x82, 0x01, 0x57, 0x48, 0xfc, 0xee, 0x04, 0xb9, // ..i[Y.....WH.... + 0x97, 0xb0, 0xb0, 0x00, 0x00, 0x01, 0x00, 0x8f, 0xff, 0xec, 0x04, 0x33, 0x04, 0x4e, 0x00, 0x2d, // ...........3.N.- + 0x00, 0x48, 0x40, 0x45, 0x00, 0x04, 0x05, 0x06, 0x05, 0x04, 0x06, 0x70, 0x00, 0x01, 0x07, 0x00, // .H@E.......p.... + 0x07, 0x01, 0x00, 0x70, 0x00, 0x06, 0x00, 0x07, 0x01, 0x06, 0x07, 0x61, 0x00, 0x05, 0x05, 0x03, // ...p.......a.... + 0x5b, 0x00, 0x03, 0x03, 0x1f, 0x4b, 0x08, 0x01, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1e, // [....K.....[.... + 0x02, 0x4c, 0x01, 0x00, 0x29, 0x28, 0x27, 0x26, 0x22, 0x20, 0x1c, 0x1b, 0x17, 0x15, 0x0c, 0x0a, // .L..)('&" ...... + 0x06, 0x05, 0x00, 0x2d, 0x01, 0x2d, 0x09, 0x06, 0x14, 0x2b, 0x25, 0x32, 0x3e, 0x02, 0x37, 0x33, // ...-.-...+%2>.73 + 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // ..#"..554>.32... + 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x21, 0x15, 0x21, 0x1e, 0x03, 0x02, 0x7b, 0x32, // #..#"...!.!...{2 + 0x5f, 0x4a, 0x2d, 0x01, 0xaf, 0x01, 0x49, 0x7a, 0x9e, 0x56, 0x7b, 0xb8, 0x7b, 0x3e, 0x3e, 0x7b, // _J-...Iz.V{.{>>{ + 0xb8, 0x7b, 0x60, 0xa1, 0x75, 0x42, 0xaf, 0x01, 0x29, 0x46, 0x61, 0x38, 0x4e, 0x6e, 0x49, 0x26, // .{`.uB..)Fa8NnI& + 0x05, 0x01, 0x9a, 0xfe, 0x66, 0x05, 0x26, 0x48, 0x6f, 0x82, 0x20, 0x39, 0x4d, 0x2d, 0x48, 0x83, // ....f.&Ho. 9M-H. + 0x63, 0x3b, 0x58, 0x95, 0xc3, 0x6c, 0x2a, 0x6b, 0xc4, 0x95, 0x58, 0x3d, 0x69, 0x90, 0x52, 0x31, // c;X..l*k..X=i.R1 + 0x57, 0x42, 0x26, 0x39, 0x5d, 0x79, 0x3f, 0x98, 0x40, 0x79, 0x5d, 0x38, 0x00, 0x02, 0x00, 0x26, // WB&9]y?.@y]8...& + 0x00, 0x00, 0x04, 0xb0, 0x04, 0x3a, 0x00, 0x1e, 0x00, 0x2b, 0x00, 0x3a, 0x40, 0x37, 0x00, 0x00, // .....:...+.:@7.. + 0x09, 0x01, 0x07, 0x04, 0x00, 0x07, 0x63, 0x00, 0x02, 0x02, 0x05, 0x59, 0x08, 0x01, 0x05, 0x05, // ......c....Y.... + 0x18, 0x4b, 0x06, 0x01, 0x04, 0x04, 0x01, 0x5b, 0x03, 0x01, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x1f, // .K.....[......L. + 0x1f, 0x00, 0x00, 0x1f, 0x2b, 0x1f, 0x2a, 0x22, 0x20, 0x00, 0x1e, 0x00, 0x1e, 0x21, 0x25, 0x11, // ....+.*" ....!%. + 0x28, 0x21, 0x0a, 0x06, 0x19, 0x2b, 0x01, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, // (!...+..32...... + 0x23, 0x23, 0x11, 0x23, 0x11, 0x14, 0x0e, 0x02, 0x23, 0x23, 0x37, 0x37, 0x32, 0x3e, 0x02, 0x35, // ##.#....##772>.5 + 0x11, 0x01, 0x11, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x03, 0x08, 0x42, 0x57, // ...32>.54..#..BW + 0x86, 0x5a, 0x2f, 0x2f, 0x5a, 0x86, 0x57, 0xfb, 0xc2, 0x1f, 0x49, 0x78, 0x5a, 0x2d, 0x04, 0x1e, // .Z//Z.W...IxZ-.. + 0x29, 0x36, 0x20, 0x0d, 0x02, 0x34, 0x42, 0x2f, 0x41, 0x29, 0x12, 0x12, 0x29, 0x41, 0x2f, 0x04, // )6 ..4B/A)..)A/. + 0x3a, 0xfe, 0x64, 0x32, 0x59, 0x79, 0x48, 0x47, 0x7b, 0x5b, 0x35, 0x03, 0xa1, 0xfe, 0xca, 0x92, // :.d2YyHG{[5..... + 0xe6, 0x9f, 0x54, 0x9b, 0x01, 0x3d, 0x76, 0xac, 0x70, 0x01, 0xcf, 0xfd, 0xcc, 0xfe, 0x8f, 0x23, // ..T..=v.p......# + 0x36, 0x44, 0x22, 0x21, 0x40, 0x32, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x82, 0x00, 0x00, 0x04, 0x92, // 6D"!@2.......... + 0x04, 0x3a, 0x00, 0x16, 0x00, 0x23, 0x00, 0x31, 0x40, 0x2e, 0x02, 0x01, 0x00, 0x09, 0x08, 0x02, // .:...#.1@....... + 0x04, 0x07, 0x00, 0x04, 0x63, 0x06, 0x01, 0x01, 0x01, 0x18, 0x4b, 0x00, 0x07, 0x07, 0x03, 0x5c, // ....c.....K..... + 0x05, 0x01, 0x03, 0x03, 0x17, 0x03, 0x4c, 0x17, 0x17, 0x17, 0x23, 0x17, 0x22, 0x22, 0x11, 0x11, // ......L...#."".. + 0x11, 0x28, 0x21, 0x11, 0x10, 0x0a, 0x06, 0x1c, 0x2b, 0x01, 0x33, 0x11, 0x33, 0x11, 0x33, 0x32, // .(!.....+.3.3.32 + 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x23, 0x11, 0x23, 0x11, 0x33, 0x01, 0x11, // ......#!.#.#.3.. + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x3b, 0xf9, 0xb9, 0x53, 0x52, 0x7f, // 32>.54..#.;..SR. + 0x55, 0x2c, 0x2c, 0x55, 0x7f, 0x52, 0xfe, 0xf4, 0xf9, 0xb9, 0xb9, 0x01, 0xb2, 0x53, 0x2a, 0x3a, // U,,U.R.......S*: + 0x24, 0x10, 0x10, 0x24, 0x3a, 0x2a, 0x02, 0xa1, 0x01, 0x99, 0xfe, 0x63, 0x32, 0x59, 0x79, 0x47, // $..$:*.....c2YyG + 0x47, 0x7b, 0x5b, 0x35, 0x02, 0x0a, 0xfd, 0xf6, 0x04, 0x3a, 0xfd, 0xcc, 0xfe, 0x8f, 0x23, 0x36, // G{[5.....:....#6 + 0x44, 0x22, 0x21, 0x40, 0x32, 0x1f, 0x00, 0x01, 0x00, 0x1c, 0x00, 0x00, 0x04, 0x2b, 0x06, 0x00, // D"!@2........+.. + 0x00, 0x1d, 0x00, 0x36, 0x40, 0x33, 0x13, 0x02, 0x02, 0x02, 0x03, 0x01, 0x4a, 0x08, 0x01, 0x06, // ...6@3......J... + 0x05, 0x01, 0x00, 0x01, 0x06, 0x00, 0x61, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1f, // ......a....[.... + 0x4b, 0x00, 0x07, 0x07, 0x02, 0x59, 0x04, 0x01, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x11, 0x11, 0x11, // K....Y......L... + 0x11, 0x13, 0x23, 0x15, 0x23, 0x10, 0x09, 0x06, 0x1d, 0x2b, 0x01, 0x21, 0x11, 0x36, 0x36, 0x37, // ..#.#....+.!.667 + 0x32, 0x1e, 0x02, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x07, 0x22, 0x06, 0x07, 0x11, 0x23, 0x11, // 2....#.4&."...#. + 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x02, 0x99, 0xfe, 0xcd, 0x3a, 0xaa, 0x6a, 0x55, 0x8b, // #5353.!....:.jU. + 0x62, 0x35, 0xb9, 0x7f, 0x76, 0x59, 0x91, 0x2d, 0xb9, 0x91, 0x91, 0xb9, 0x01, 0x33, 0x04, 0xbe, // b5..vY.-.....3.. + 0xfe, 0xdb, 0x55, 0x5f, 0x01, 0x31, 0x68, 0x9f, 0x6d, 0xfd, 0x57, 0x02, 0xab, 0x85, 0x82, 0x01, // ..U_.1h.m.W..... + 0x57, 0x48, 0xfc, 0xee, 0x04, 0xbe, 0x97, 0xab, 0xab, 0x00, 0x00, 0x01, 0x00, 0xa5, 0xfe, 0x9c, // WH.............. + 0x04, 0x27, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x29, 0x40, 0x26, 0x00, 0x03, 0x02, 0x03, 0x73, 0x06, // .'.:...)@&....s. + 0x05, 0x02, 0x01, 0x01, 0x18, 0x4b, 0x00, 0x00, 0x00, 0x02, 0x5a, 0x04, 0x01, 0x02, 0x02, 0x17, // .....K....Z..... + 0x02, 0x4c, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0b, 0x11, 0x11, 0x11, 0x11, 0x11, 0x07, 0x06, 0x19, // .L.............. + 0x2b, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x01, 0x5e, 0x02, // +..!.3.!.#.!..^. + 0x10, 0xb9, 0xfe, 0x9e, 0xb9, 0xfe, 0x99, 0x04, 0x3a, 0xfc, 0x5d, 0x03, 0xa3, 0xfb, 0xc6, 0xfe, // ........:.]..... + 0x9c, 0x01, 0x64, 0x04, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x6b, 0xff, 0xec, 0x04, 0x7f, 0x05, 0xb0, // ..d.:....k...... + 0x00, 0x24, 0x00, 0x2d, 0x40, 0x2a, 0x09, 0x01, 0x00, 0x03, 0x01, 0x4a, 0x07, 0x06, 0x04, 0x03, // .$.-@*.....J.... + 0x02, 0x02, 0x16, 0x4b, 0x05, 0x01, 0x03, 0x03, 0x00, 0x5b, 0x01, 0x01, 0x00, 0x00, 0x1e, 0x00, // ...K.....[...... + 0x4c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x24, 0x23, 0x13, 0x23, 0x15, 0x24, 0x25, 0x08, 0x06, 0x1a, // L...$.$#.#.$%... + 0x2b, 0x01, 0x13, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, // +.....#"&'..#".. + 0x35, 0x13, 0x33, 0x13, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x13, 0x33, 0x11, 0x14, 0x16, 0x33, // 5.3...3265.3...3 + 0x32, 0x36, 0x35, 0x13, 0x04, 0x7e, 0x01, 0x2b, 0x4e, 0x6d, 0x42, 0x4e, 0x74, 0x20, 0x20, 0x74, // 265..~.+NmBNt t + 0x4d, 0x43, 0x6d, 0x4e, 0x2b, 0x01, 0xb8, 0x01, 0x3b, 0x34, 0x3c, 0x45, 0x01, 0xbf, 0x45, 0x3d, // MCmN+...;4.54..#......a + 0x96, 0x67, 0x36, 0x36, 0x67, 0x96, 0x61, 0xfe, 0x34, 0xc0, 0xc0, 0xb9, 0x01, 0x42, 0xfe, 0xbe, // .g66g.a.4....B.. + 0x01, 0x13, 0x3a, 0x52, 0x35, 0x19, 0x19, 0x35, 0x52, 0x3a, 0x04, 0x34, 0xfe, 0x6c, 0x31, 0x59, // ..:R5..5R:.4.l1Y + 0x7a, 0x48, 0x48, 0x7c, 0x5c, 0x34, 0x04, 0x34, 0x98, 0x01, 0x4c, 0xfe, 0xb4, 0xfd, 0x3d, 0xfe, // zHH|.4.4..L...=. + 0x8e, 0x1e, 0x33, 0x41, 0x24, 0x22, 0x44, 0x35, 0x21, 0x00, 0x00, 0x01, 0x00, 0x7d, 0xff, 0xed, // ..3A$"D5!....}.. + 0x04, 0x94, 0x05, 0xc5, 0x00, 0x37, 0x00, 0xc8, 0x4b, 0xb0, 0x17, 0x50, 0x58, 0x40, 0x31, 0x00, // .....7..K..PX@1. + 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 0x70, 0x00, 0x07, 0x05, 0x06, 0x05, 0x07, 0x06, 0x70, 0x04, // ......p.......p. + 0x01, 0x00, 0x09, 0x01, 0x05, 0x07, 0x00, 0x05, 0x61, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x0b, 0x01, // ........a....[.. + 0x01, 0x01, 0x1d, 0x4b, 0x00, 0x06, 0x06, 0x08, 0x5b, 0x0a, 0x01, 0x08, 0x08, 0x1e, 0x08, 0x4c, // ...K....[......L + 0x1b, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x35, 0x00, 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 0x70, // .K..PX@5.......p + 0x00, 0x07, 0x05, 0x06, 0x05, 0x07, 0x06, 0x70, 0x04, 0x01, 0x00, 0x09, 0x01, 0x05, 0x07, 0x00, // .......p........ + 0x05, 0x61, 0x00, 0x0b, 0x0b, 0x16, 0x4b, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1d, // .a....K....[.... + 0x4b, 0x00, 0x06, 0x06, 0x08, 0x5b, 0x0a, 0x01, 0x08, 0x08, 0x1e, 0x08, 0x4c, 0x1b, 0x40, 0x39, // K....[......L.@9 + 0x00, 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 0x70, 0x00, 0x07, 0x05, 0x06, 0x05, 0x07, 0x06, 0x70, // .......p.......p + 0x04, 0x01, 0x00, 0x09, 0x01, 0x05, 0x07, 0x00, 0x05, 0x61, 0x00, 0x0b, 0x0b, 0x16, 0x4b, 0x00, // .........a....K. + 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1d, 0x4b, 0x00, 0x0a, 0x0a, 0x17, 0x4b, 0x00, 0x06, // ...[....K....K.. + 0x06, 0x08, 0x5b, 0x00, 0x08, 0x08, 0x1e, 0x08, 0x4c, 0x59, 0x59, 0x40, 0x12, 0x37, 0x36, 0x35, // ..[.....LYY@.765 + 0x34, 0x33, 0x32, 0x24, 0x14, 0x25, 0x11, 0x15, 0x24, 0x14, 0x25, 0x10, 0x0c, 0x06, 0x1d, 0x2b, // 432$.%..$.%....+ + 0x01, 0x33, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x23, 0x2e, 0x03, 0x23, 0x22, // .354>.32...#..#" + 0x0e, 0x02, 0x15, 0x15, 0x21, 0x15, 0x21, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, // ....!.!....32>.7 + 0x33, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x01, 0x35, // 3..#"..55#.#.3.5 + 0x96, 0x32, 0x5f, 0x89, 0x57, 0x51, 0x7a, 0x55, 0x31, 0x07, 0xa7, 0x05, 0x18, 0x2a, 0x3e, 0x2c, // .2_.WQzU1....*>, + 0x2f, 0x45, 0x2d, 0x17, 0x01, 0x1a, 0xfe, 0xe6, 0x17, 0x2d, 0x45, 0x2f, 0x2c, 0x3e, 0x2a, 0x17, // /E-......-E/,>*. + 0x06, 0xa7, 0x07, 0x31, 0x55, 0x7a, 0x51, 0x57, 0x89, 0x5f, 0x32, 0x96, 0xb8, 0xb8, 0x03, 0x40, // ...1UzQW._2....@ + 0x63, 0x81, 0xcb, 0x8c, 0x4a, 0x3b, 0x6d, 0x9c, 0x60, 0x3d, 0x63, 0x47, 0x26, 0x36, 0x65, 0x92, // c...J;m.`=cG&6e. + 0x5c, 0x65, 0x97, 0x9b, 0x5d, 0x93, 0x65, 0x36, 0x24, 0x43, 0x61, 0x3e, 0x58, 0x97, 0x6f, 0x3e, // .e..].e6$Ca>X.o> + 0x4a, 0x8b, 0xcb, 0x81, 0x9b, 0xfd, 0x57, 0x05, 0xb0, 0x00, 0x00, 0x01, 0x00, 0x9b, 0xff, 0xec, // J.....W......... + 0x04, 0x89, 0x04, 0x4e, 0x00, 0x33, 0x00, 0x8a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x31, 0x00, // ...N.3..K..PX@1. + 0x09, 0x0a, 0x07, 0x0a, 0x09, 0x07, 0x70, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x01, 0x70, 0x0b, // ......p.......p. + 0x01, 0x07, 0x04, 0x01, 0x00, 0x02, 0x07, 0x00, 0x61, 0x00, 0x0a, 0x0a, 0x06, 0x5b, 0x08, 0x01, // ........a....[.. + 0x06, 0x06, 0x18, 0x4b, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x05, 0x01, 0x03, 0x03, 0x1e, 0x03, 0x4c, // ...K....[......L + 0x1b, 0x40, 0x39, 0x00, 0x09, 0x0a, 0x07, 0x0a, 0x09, 0x07, 0x70, 0x00, 0x02, 0x00, 0x01, 0x00, // .@9.......p..... + 0x02, 0x01, 0x70, 0x0b, 0x01, 0x07, 0x04, 0x01, 0x00, 0x02, 0x07, 0x00, 0x61, 0x00, 0x06, 0x06, // ..p.........a... + 0x18, 0x4b, 0x00, 0x0a, 0x0a, 0x08, 0x5b, 0x00, 0x08, 0x08, 0x1f, 0x4b, 0x00, 0x05, 0x05, 0x17, // .K....[....K.... + 0x4b, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1e, 0x03, 0x4c, 0x59, 0x40, 0x12, 0x33, // K....[.....LY@.3 + 0x32, 0x2e, 0x2c, 0x28, 0x27, 0x24, 0x11, 0x11, 0x11, 0x14, 0x24, 0x14, 0x24, 0x10, 0x0c, 0x06, // 2.,('$....$.$... + 0x1d, 0x2b, 0x01, 0x21, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x33, 0x14, 0x0e, 0x02, 0x23, // .+.!..32>.73...# + 0x22, 0x2e, 0x02, 0x27, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x3e, 0x03, 0x33, 0x32, 0x1e, // "..'#.#.3.3>.32. + 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x21, 0x03, 0xc7, 0xfe, 0xd5, // ..#4..#"...!.... + 0x02, 0x15, 0x2a, 0x43, 0x2f, 0x1e, 0x32, 0x25, 0x15, 0x01, 0xaf, 0x32, 0x55, 0x73, 0x40, 0x59, // ..*C/.2%...2Us@Y + 0x85, 0x5b, 0x30, 0x03, 0x8f, 0xb9, 0xb9, 0x8f, 0x02, 0x30, 0x5b, 0x86, 0x59, 0x47, 0x74, 0x52, // .[0......0[.YGtR + 0x2d, 0xaf, 0x13, 0x24, 0x33, 0x21, 0x2f, 0x43, 0x2b, 0x15, 0x01, 0x01, 0x2b, 0x01, 0xd0, 0x42, // -..$3!/C+...+..B + 0x78, 0x5d, 0x37, 0x1b, 0x30, 0x3f, 0x24, 0x40, 0x75, 0x5a, 0x35, 0x4b, 0x83, 0xb0, 0x66, 0xfe, // x]7.0?$@uZ5K..f. + 0x30, 0x04, 0x3a, 0xfe, 0x2d, 0x66, 0xb1, 0x84, 0x4c, 0x38, 0x60, 0x81, 0x4a, 0x28, 0x4a, 0x38, // 0.:.-f..L8`.J(J8 + 0x21, 0x38, 0x5e, 0x79, 0x40, 0x00, 0x00, 0x02, 0x00, 0x27, 0x00, 0x00, 0x04, 0xb2, 0x05, 0xb0, // !8^y@....'...... + 0x00, 0x0b, 0x00, 0x0e, 0x00, 0x29, 0x40, 0x26, 0x0e, 0x01, 0x06, 0x04, 0x01, 0x4a, 0x00, 0x06, // .....)@&.....J.. + 0x02, 0x01, 0x00, 0x01, 0x06, 0x00, 0x61, 0x00, 0x04, 0x04, 0x16, 0x4b, 0x05, 0x03, 0x02, 0x01, // ......a....K.... + 0x01, 0x17, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, // ...L..........+. + 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x01, 0x33, 0x01, 0x23, 0x01, 0x21, 0x03, 0x03, 0x65, // #.#.#.#.3.#.!..e + 0xa1, 0xb9, 0x94, 0x93, 0xbd, 0x01, 0xfa, 0xa0, 0x01, 0xf1, 0xbd, 0xfd, 0xb7, 0x01, 0x84, 0xc0, // ................ + 0x01, 0xb8, 0xfe, 0x48, 0x01, 0xb8, 0xfe, 0x48, 0x05, 0xb0, 0xfa, 0x50, 0x02, 0x59, 0x02, 0x4b, // ...H...H...P.Y.K + 0x00, 0x02, 0x00, 0x57, 0x00, 0x00, 0x04, 0x81, 0x04, 0x3a, 0x00, 0x0b, 0x00, 0x10, 0x00, 0x29, // ...W.....:.....) + 0x40, 0x26, 0x0f, 0x01, 0x06, 0x04, 0x01, 0x4a, 0x00, 0x06, 0x02, 0x01, 0x00, 0x01, 0x06, 0x00, // @&.....J........ + 0x61, 0x00, 0x04, 0x04, 0x18, 0x4b, 0x05, 0x03, 0x02, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x11, // a....K.......L.. + 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, // ........+.#.#.#. + 0x23, 0x01, 0x33, 0x01, 0x23, 0x01, 0x21, 0x03, 0x27, 0x07, 0x03, 0x4a, 0x80, 0xb9, 0x87, 0x76, // #.3.#.!.'..J...v + 0xbd, 0x01, 0xc4, 0x9f, 0x01, 0xc7, 0xbe, 0xfe, 0x04, 0x01, 0x45, 0x8b, 0x18, 0x19, 0x01, 0x29, // ..........E....) + 0xfe, 0xd7, 0x01, 0x29, 0xfe, 0xd7, 0x04, 0x3a, 0xfb, 0xc6, 0x01, 0xc1, 0x01, 0x57, 0x52, 0x52, // ...)...:.....WRR + 0x00, 0x02, 0x00, 0x71, 0x00, 0x00, 0x04, 0xbc, 0x05, 0xb0, 0x00, 0x13, 0x00, 0x16, 0x00, 0x33, // ...q...........3 + 0x40, 0x30, 0x16, 0x01, 0x07, 0x06, 0x01, 0x4a, 0x0a, 0x01, 0x07, 0x04, 0x02, 0x02, 0x00, 0x01, // @0.....J........ + 0x07, 0x00, 0x62, 0x08, 0x01, 0x06, 0x06, 0x16, 0x4b, 0x09, 0x05, 0x03, 0x03, 0x01, 0x01, 0x17, // ..b.....K....... + 0x01, 0x4c, 0x15, 0x14, 0x13, 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x0b, // .L.............. + 0x06, 0x1d, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x03, 0x23, 0x13, 0x23, 0x11, 0x23, 0x11, // ..+.#.#.#.#.#.#. + 0x33, 0x11, 0x33, 0x13, 0x33, 0x01, 0x23, 0x01, 0x33, 0x03, 0x03, 0xa1, 0x46, 0x94, 0x45, 0x68, // 3.3.3.#.3...F.Eh + 0xbd, 0x75, 0xa8, 0xb9, 0xb9, 0xd1, 0xd0, 0x9f, 0x01, 0x52, 0xbc, 0xfe, 0xa5, 0xdb, 0x68, 0x01, // .u.......R....h. + 0xd4, 0xfe, 0x2c, 0x01, 0xd4, 0xfe, 0x2c, 0x01, 0xd4, 0xfe, 0x2c, 0x05, 0xb0, 0xfc, 0xc5, 0x03, // ..,...,...,..... + 0x3b, 0xfa, 0x50, 0x02, 0x75, 0x02, 0x04, 0x00, 0x00, 0x02, 0x00, 0x70, 0x00, 0x00, 0x04, 0xbd, // ;.P.u......p.... + 0x04, 0x3a, 0x00, 0x13, 0x00, 0x16, 0x00, 0x33, 0x40, 0x30, 0x16, 0x01, 0x07, 0x06, 0x01, 0x4a, // .:.....3@0.....J + 0x0a, 0x01, 0x07, 0x04, 0x02, 0x02, 0x00, 0x01, 0x07, 0x00, 0x61, 0x08, 0x01, 0x06, 0x06, 0x18, // ..........a..... + 0x4b, 0x09, 0x05, 0x03, 0x03, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x15, 0x14, 0x13, 0x12, 0x11, 0x11, // K........L...... + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x0b, 0x06, 0x1d, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, // ..........+.#.#. + 0x23, 0x03, 0x23, 0x13, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x13, 0x33, 0x01, 0x23, 0x01, // #.#.#.#.3.3.3.#. + 0x33, 0x03, 0x03, 0xab, 0x48, 0x9d, 0x4f, 0x5d, 0xbd, 0x63, 0x97, 0xb9, 0xb9, 0xcd, 0xd5, 0x9f, // 3...H.O].c...... + 0x01, 0x53, 0xbd, 0xfe, 0xaa, 0xd3, 0x65, 0x01, 0x25, 0xfe, 0xdb, 0x01, 0x25, 0xfe, 0xdb, 0x01, // .S....e.%...%... + 0x25, 0xfe, 0xdb, 0x04, 0x3a, 0xfd, 0x8c, 0x02, 0x74, 0xfb, 0xc6, 0x01, 0xc6, 0x01, 0x5c, 0x00, // %...:...t....... + 0x00, 0x02, 0x00, 0x55, 0x00, 0x00, 0x04, 0x85, 0x05, 0xb0, 0x00, 0x24, 0x00, 0x27, 0x00, 0x38, // ...U.......$.'.8 + 0x40, 0x35, 0x19, 0x01, 0x03, 0x04, 0x01, 0x4a, 0x02, 0x01, 0x00, 0x06, 0x01, 0x04, 0x03, 0x00, // @5.....J........ + 0x04, 0x63, 0x00, 0x08, 0x08, 0x01, 0x59, 0x00, 0x01, 0x01, 0x16, 0x4b, 0x09, 0x07, 0x05, 0x03, // .c....Y....K.... + 0x03, 0x03, 0x17, 0x03, 0x4c, 0x00, 0x00, 0x27, 0x26, 0x00, 0x24, 0x00, 0x24, 0x31, 0x12, 0x25, // ....L..'&.$.$1.% + 0x15, 0x11, 0x12, 0x15, 0x0a, 0x06, 0x1b, 0x2b, 0x33, 0x03, 0x34, 0x3e, 0x02, 0x33, 0x33, 0x01, // .......+3.4>.33. + 0x21, 0x01, 0x1e, 0x03, 0x15, 0x11, 0x23, 0x11, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x07, 0x11, 0x23, // !.....#.4..##..# + 0x11, 0x27, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, 0x01, 0x13, 0x21, 0x56, 0x01, 0x31, 0x5d, 0x87, // .'#"......!V.1]. + 0x56, 0x03, 0xfe, 0xaf, 0x03, 0xdf, 0xfe, 0xcb, 0x56, 0x86, 0x5d, 0x30, 0xb9, 0x16, 0x2c, 0x43, // V.......V.]0..,C + 0x2e, 0x44, 0x09, 0xb9, 0x03, 0x50, 0x2e, 0x43, 0x2b, 0x15, 0x01, 0x61, 0xcc, 0xfe, 0x52, 0x01, // .D...P.C+..a..R. + 0xab, 0x62, 0x8b, 0x59, 0x29, 0x02, 0x96, 0xfd, 0x6a, 0x01, 0x29, 0x59, 0x8a, 0x62, 0xfe, 0x55, // .b.Y)...j.)Y.b.U + 0x01, 0xab, 0x3d, 0x52, 0x32, 0x16, 0x14, 0xfd, 0x92, 0x02, 0x7d, 0x05, 0x16, 0x32, 0x52, 0x3d, // ..=R2.....}..2R= + 0xfe, 0x55, 0x03, 0x3e, 0x01, 0xda, 0x00, 0x02, 0x00, 0x69, 0x00, 0x00, 0x04, 0x59, 0x04, 0x3a, // .U.>.....i...Y.: + 0x00, 0x23, 0x00, 0x27, 0x00, 0x39, 0x40, 0x36, 0x1b, 0x18, 0x02, 0x03, 0x04, 0x01, 0x4a, 0x02, // .#.'.9@6......J. + 0x01, 0x00, 0x06, 0x01, 0x04, 0x03, 0x00, 0x04, 0x63, 0x00, 0x08, 0x08, 0x01, 0x59, 0x00, 0x01, // ........c....Y.. + 0x01, 0x18, 0x4b, 0x09, 0x07, 0x05, 0x03, 0x03, 0x03, 0x17, 0x03, 0x4c, 0x00, 0x00, 0x27, 0x26, // ..K........L..'& + 0x00, 0x23, 0x00, 0x23, 0x13, 0x12, 0x25, 0x15, 0x11, 0x11, 0x15, 0x0a, 0x06, 0x1b, 0x2b, 0x33, // .#.#..%.......+3 + 0x35, 0x34, 0x3e, 0x02, 0x37, 0x01, 0x21, 0x01, 0x1e, 0x03, 0x15, 0x15, 0x23, 0x27, 0x34, 0x2e, // 54>.7.!.....#'4. + 0x02, 0x23, 0x23, 0x07, 0x11, 0x23, 0x11, 0x27, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x01, 0x33, // .##..#.'#".....3 + 0x13, 0x21, 0x69, 0x2b, 0x53, 0x77, 0x4b, 0xfe, 0xe6, 0x03, 0xb0, 0xfe, 0xe5, 0x49, 0x72, 0x50, // .!i+SwK......IrP + 0x2a, 0xb9, 0x01, 0x14, 0x28, 0x3d, 0x2a, 0x31, 0x0a, 0xba, 0x05, 0x3d, 0x2a, 0x3d, 0x28, 0x14, // *...(=*1...=*=(. + 0x01, 0x42, 0x05, 0xb2, 0xfe, 0x96, 0xdb, 0x63, 0x8f, 0x5c, 0x2f, 0x03, 0x01, 0xdf, 0xfe, 0x20, // .B.....c../.... + 0x05, 0x30, 0x5d, 0x8c, 0x61, 0xdb, 0xdb, 0x43, 0x59, 0x36, 0x17, 0x11, 0xfe, 0x4d, 0x01, 0xbb, // .0].a..CY6...M.. + 0x09, 0x17, 0x36, 0x59, 0x43, 0xdb, 0x02, 0x5c, 0x01, 0x46, 0x00, 0x02, 0x00, 0x50, 0x00, 0x00, // ..6YC....F...P.. + 0x04, 0x87, 0x05, 0xb0, 0x00, 0x23, 0x00, 0x26, 0x00, 0x3b, 0x40, 0x38, 0x0e, 0x0b, 0x02, 0x01, // .....#.&.;@8.... + 0x02, 0x01, 0x4a, 0x09, 0x01, 0x00, 0x06, 0x04, 0x02, 0x02, 0x01, 0x00, 0x02, 0x63, 0x00, 0x0b, // ..J..........c.. + 0x0b, 0x08, 0x59, 0x0a, 0x01, 0x08, 0x08, 0x16, 0x4b, 0x07, 0x05, 0x03, 0x03, 0x01, 0x01, 0x17, // ..Y.....K....... + 0x01, 0x4c, 0x26, 0x25, 0x23, 0x22, 0x21, 0x20, 0x11, 0x11, 0x13, 0x13, 0x42, 0x12, 0x23, 0x13, // .L&%#"! ....B.#. + 0x10, 0x0c, 0x06, 0x1d, 0x2b, 0x01, 0x16, 0x16, 0x15, 0x11, 0x23, 0x03, 0x34, 0x26, 0x23, 0x23, // ....+.....#.4&## + 0x07, 0x11, 0x23, 0x11, 0x27, 0x2b, 0x02, 0x06, 0x06, 0x15, 0x11, 0x23, 0x03, 0x34, 0x37, 0x23, // ..#.'+.....#.47# + 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x03, 0x21, 0x01, 0x13, 0x21, 0x03, 0x8f, 0x78, 0x80, 0x99, // .#.3.!.!..!..x.. + 0x01, 0x33, 0x3d, 0x23, 0x07, 0x99, 0x08, 0x26, 0x02, 0x04, 0x39, 0x31, 0x99, 0x01, 0x14, 0x9b, // .3=#...&..91.... + 0xab, 0xab, 0x01, 0x81, 0xeb, 0x02, 0xe9, 0xfe, 0x8c, 0x81, 0xfe, 0xfe, 0x03, 0x18, 0x05, 0x8d, // ................ + 0x92, 0xfe, 0x0c, 0x01, 0xf4, 0x4b, 0x41, 0x14, 0xfd, 0x94, 0x02, 0x69, 0x17, 0x02, 0x41, 0x49, // .....KA....i..AI + 0xfe, 0x0c, 0x01, 0xf4, 0x50, 0x3c, 0xfd, 0x80, 0x05, 0xb0, 0xfd, 0x68, 0x02, 0x98, 0xfd, 0xcd, // ....P<.....h.... + 0x01, 0x9b, 0x00, 0x02, 0x00, 0x51, 0x00, 0x00, 0x04, 0x86, 0x04, 0x3a, 0x00, 0x24, 0x00, 0x27, // .....Q.....:.$.' + 0x00, 0x38, 0x40, 0x35, 0x0f, 0x0b, 0x02, 0x00, 0x01, 0x01, 0x4a, 0x00, 0x08, 0x05, 0x03, 0x02, // .8@5......J..... + 0x01, 0x00, 0x08, 0x01, 0x63, 0x00, 0x0a, 0x0a, 0x07, 0x59, 0x09, 0x01, 0x07, 0x07, 0x18, 0x4b, // ....c....Y.....K + 0x06, 0x04, 0x02, 0x03, 0x00, 0x00, 0x17, 0x00, 0x4c, 0x27, 0x26, 0x24, 0x23, 0x11, 0x11, 0x11, // ........L'&$#... + 0x13, 0x13, 0x42, 0x14, 0x13, 0x14, 0x0b, 0x06, 0x1d, 0x2b, 0x01, 0x16, 0x16, 0x15, 0x11, 0x23, // ..B......+.....# + 0x03, 0x34, 0x26, 0x23, 0x23, 0x07, 0x23, 0x11, 0x23, 0x11, 0x27, 0x2b, 0x02, 0x06, 0x06, 0x15, // .4&##.#.#.'+.... + 0x11, 0x23, 0x03, 0x34, 0x37, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x03, 0x21, 0x01, 0x13, // .#.47#.#.3.!.!.. + 0x23, 0x03, 0xa7, 0x6d, 0x72, 0x99, 0x01, 0x35, 0x3f, 0x12, 0x0c, 0x06, 0x9a, 0x0a, 0x20, 0x04, // #..mr..5?..... . + 0x02, 0x39, 0x34, 0x99, 0x01, 0x15, 0x9c, 0xab, 0xab, 0x01, 0x72, 0xd2, 0x02, 0xde, 0xfe, 0x91, // .94.......r..... + 0x7c, 0xf8, 0x02, 0x50, 0x0b, 0x8a, 0x8c, 0xfe, 0xd1, 0x01, 0x2f, 0x4c, 0x40, 0x1d, 0xfe, 0x62, // |..P....../L@..b + 0x01, 0xa5, 0x16, 0x02, 0x40, 0x4a, 0xfe, 0xd1, 0x01, 0x2f, 0x51, 0x3b, 0xfe, 0x45, 0x04, 0x3a, // ....@J.../Q;.E.: + 0xfe, 0x19, 0x01, 0xe7, 0xfe, 0x32, 0x01, 0x3f, 0x00, 0x02, 0x00, 0xca, 0xfe, 0x46, 0x04, 0x24, // .....2.?.....F.$ + 0x07, 0x74, 0x00, 0x3e, 0x00, 0x47, 0x00, 0x54, 0x40, 0x51, 0x45, 0x01, 0x07, 0x06, 0x15, 0x01, // .t.>.G.T@QE..... + 0x05, 0x00, 0x02, 0x4a, 0x27, 0x26, 0x02, 0x03, 0x47, 0x08, 0x01, 0x06, 0x07, 0x06, 0x72, 0x00, // ...J'&..G.....r. + 0x07, 0x02, 0x07, 0x72, 0x09, 0x01, 0x00, 0x00, 0x05, 0x04, 0x00, 0x05, 0x63, 0x00, 0x01, 0x01, // ...r........c... + 0x02, 0x5b, 0x00, 0x02, 0x02, 0x16, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1e, // .[....K....[.... + 0x03, 0x4c, 0x01, 0x00, 0x47, 0x46, 0x44, 0x43, 0x41, 0x40, 0x3d, 0x3b, 0x33, 0x30, 0x1f, 0x1c, // .L..GFDCA@=;30.. + 0x0c, 0x0a, 0x09, 0x07, 0x00, 0x3e, 0x01, 0x3e, 0x0a, 0x06, 0x14, 0x2b, 0x01, 0x36, 0x36, 0x35, // .....>.>...+.665 + 0x34, 0x2e, 0x02, 0x23, 0x21, 0x35, 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x16, // 4..#!5!2........ + 0x16, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x17, 0x07, 0x2e, // .....##"........ + 0x03, 0x27, 0x34, 0x3e, 0x02, 0x33, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x23, // .'4>.332>.54..## + 0x35, 0x13, 0x37, 0x33, 0x15, 0x07, 0x23, 0x27, 0x35, 0x33, 0x02, 0x1c, 0x9f, 0x99, 0x25, 0x4a, // 5.73..#'53....%J + 0x6d, 0x48, 0xfe, 0xce, 0x01, 0x32, 0x66, 0xaf, 0x80, 0x49, 0x23, 0x40, 0x5c, 0x39, 0x80, 0x8e, // mH...2f..I#@.9.. + 0x4a, 0x81, 0xb0, 0x65, 0x35, 0x4e, 0x47, 0x21, 0x32, 0x37, 0x17, 0x4a, 0x2f, 0x5d, 0x4b, 0x2f, // J..e5NG!27.J/]K/ + 0x01, 0x30, 0x57, 0x7a, 0x4b, 0x2e, 0x42, 0x6d, 0x4d, 0x2a, 0x2d, 0x56, 0x7c, 0x4f, 0x8d, 0xad, // .0WzK.BmM*-V|O.. + 0x97, 0xa0, 0xfe, 0x72, 0xfb, 0x9d, 0x03, 0x37, 0x01, 0x82, 0x71, 0x32, 0x57, 0x40, 0x24, 0x98, // ...r...7..q2W@$. + 0x35, 0x65, 0x92, 0x5d, 0x35, 0x5e, 0x50, 0x40, 0x16, 0x28, 0xac, 0x84, 0x66, 0x9f, 0x6c, 0x38, // 5e.]5^P@.(..f.l8 + 0x3e, 0x33, 0x28, 0x3d, 0x2c, 0x1f, 0x0a, 0x7c, 0x14, 0x3b, 0x50, 0x64, 0x3c, 0x43, 0x60, 0x3e, // >3(=,..|.;Pd + 0x1e, 0x28, 0x47, 0x63, 0x3c, 0x45, 0x66, 0x42, 0x21, 0x97, 0x03, 0xa5, 0x98, 0x12, 0xf8, 0xf5, // .(Gc;91........< + 0x01, 0x3c, 0x0a, 0x06, 0x14, 0x2b, 0x01, 0x32, 0x36, 0x27, 0x34, 0x2e, 0x02, 0x23, 0x21, 0x35, // .<...+.26'4..#!5 + 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x23, // !2............## + 0x22, 0x06, 0x17, 0x14, 0x1e, 0x02, 0x17, 0x07, 0x2e, 0x03, 0x27, 0x34, 0x3e, 0x02, 0x33, 0x33, // ".........'4>.33 + 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x35, 0x13, 0x37, 0x33, 0x15, 0x07, 0x23, // 2>.54..##5.73..# + 0x27, 0x35, 0x33, 0x02, 0x2c, 0x89, 0x85, 0x01, 0x21, 0x40, 0x5c, 0x3c, 0xfe, 0xd4, 0x01, 0x2c, // '53.,...!@.<..., + 0x5b, 0x9f, 0x75, 0x44, 0x68, 0x5b, 0x67, 0x72, 0x44, 0x76, 0xa0, 0x5b, 0x30, 0x4e, 0x48, 0x01, // [.uDh[grDv.[0NH. + 0x21, 0x32, 0x37, 0x17, 0x4b, 0x2e, 0x5d, 0x4b, 0x30, 0x01, 0x30, 0x57, 0x7b, 0x4b, 0x29, 0x37, // !27.K.]K0.0W{K)7 + 0x5d, 0x42, 0x26, 0x29, 0x4c, 0x6c, 0x43, 0x8d, 0xa5, 0x97, 0xa0, 0xfe, 0x72, 0xfb, 0x9d, 0x02, // ]B&)LlC.....r... + 0x69, 0x55, 0x4b, 0x21, 0x38, 0x28, 0x17, 0x99, 0x29, 0x50, 0x73, 0x49, 0x4b, 0x76, 0x23, 0x1f, // iUK!8(..)PsIKv#. + 0x79, 0x59, 0x4e, 0x78, 0x52, 0x2b, 0x3e, 0x33, 0x28, 0x3d, 0x2c, 0x1f, 0x0a, 0x7c, 0x14, 0x3b, // yYNxR+>3(=,..|.; + 0x50, 0x64, 0x3c, 0x43, 0x60, 0x3e, 0x1e, 0x18, 0x2c, 0x3e, 0x26, 0x2b, 0x3f, 0x28, 0x14, 0x97, // Pd..,>&+?(.. + 0x03, 0x1d, 0x98, 0x12, 0xf8, 0xf5, 0x15, 0x00, 0x00, 0x03, 0x00, 0x63, 0xff, 0xec, 0x04, 0x5a, // ...........c...Z + 0x05, 0xc4, 0x00, 0x1d, 0x00, 0x2e, 0x00, 0x3f, 0x00, 0x37, 0x40, 0x34, 0x06, 0x01, 0x02, 0x07, // .......?.7@4.... + 0x01, 0x04, 0x05, 0x02, 0x04, 0x61, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1d, 0x4b, // .....a....[....K + 0x00, 0x05, 0x05, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x4c, 0x30, 0x2f, 0x1f, 0x1e, 0x39, // ....[.....L0/..9 + 0x37, 0x2f, 0x3f, 0x30, 0x3f, 0x28, 0x26, 0x1e, 0x2e, 0x1f, 0x2e, 0x2d, 0x26, 0x08, 0x06, 0x16, // 7/?0?(&....-&... + 0x2b, 0x01, 0x0e, 0x05, 0x23, 0x22, 0x2e, 0x04, 0x27, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x1e, 0x04, // +...#"..'5>.32.. + 0x17, 0x05, 0x21, 0x35, 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x04, 0x07, 0x05, 0x21, 0x15, 0x1e, 0x05, // ..!5..#"....!... + 0x33, 0x32, 0x3e, 0x04, 0x37, 0x04, 0x5a, 0x01, 0x19, 0x34, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x91, // 32>.7.Z..4Qp.ZZ. + 0x70, 0x52, 0x35, 0x1a, 0x01, 0x01, 0x19, 0x35, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x92, 0x70, 0x51, // pR5....5Qp.ZZ.pQ + 0x35, 0x19, 0x01, 0xfc, 0xbf, 0x02, 0x8a, 0x01, 0x0c, 0x1d, 0x30, 0x48, 0x62, 0x41, 0x40, 0x62, // 5.........0HbA@b + 0x48, 0x30, 0x1d, 0x0d, 0x01, 0x02, 0x8a, 0xfd, 0x76, 0x01, 0x0d, 0x1e, 0x30, 0x48, 0x62, 0x41, // H0......v...0HbA + 0x41, 0x63, 0x47, 0x2f, 0x1d, 0x0b, 0x01, 0x02, 0x84, 0x4e, 0x9f, 0x94, 0x80, 0x60, 0x37, 0x37, // AcG/.....N...`77 + 0x60, 0x81, 0x94, 0x9e, 0x4e, 0xa6, 0x4e, 0x9f, 0x94, 0x81, 0x61, 0x37, 0x37, 0x60, 0x81, 0x94, // `...N.N...a77`.. + 0xa0, 0x4e, 0x09, 0x0b, 0x34, 0x71, 0x6f, 0x65, 0x4d, 0x2d, 0x2e, 0x4d, 0x65, 0x6f, 0x71, 0x33, // .N..4qoeM-.Meoq3 + 0xa3, 0x05, 0x33, 0x72, 0x6f, 0x66, 0x4d, 0x2e, 0x2e, 0x4d, 0x65, 0x6f, 0x72, 0x34, 0x00, 0x03, // ..3rofM..Meor4.. + 0x00, 0x5d, 0xff, 0xec, 0x04, 0x35, 0x04, 0x4e, 0x00, 0x15, 0x00, 0x20, 0x00, 0x2b, 0x00, 0x37, // .]...5.N... .+.7 + 0x40, 0x34, 0x00, 0x05, 0x00, 0x03, 0x02, 0x05, 0x03, 0x61, 0x07, 0x01, 0x04, 0x04, 0x00, 0x5b, // @4.......a.....[ + 0x00, 0x00, 0x00, 0x1f, 0x4b, 0x06, 0x01, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1e, 0x01, // ....K.....[..... + 0x4c, 0x22, 0x21, 0x17, 0x16, 0x27, 0x26, 0x21, 0x2b, 0x22, 0x2b, 0x1c, 0x1b, 0x16, 0x20, 0x17, // L"!..'&!+"+... . + 0x20, 0x29, 0x24, 0x08, 0x06, 0x16, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // )$...+.4>.32... + 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x01, 0x32, 0x3e, 0x02, 0x37, 0x21, 0x1e, // ....#"..5.2>.7!. + 0x03, 0x13, 0x22, 0x0e, 0x02, 0x07, 0x21, 0x2e, 0x03, 0x5d, 0x44, 0x7f, 0xb6, 0x72, 0x73, 0xb7, // .."...!..]D..rs. + 0x7f, 0x44, 0x44, 0x7f, 0xb6, 0x72, 0x73, 0xb7, 0x7f, 0x44, 0x01, 0xed, 0x45, 0x6b, 0x4c, 0x2c, // .DD..rs..D..EkL, + 0x07, 0xfd, 0xa0, 0x07, 0x2c, 0x4d, 0x6b, 0x44, 0x44, 0x6a, 0x4c, 0x2e, 0x07, 0x02, 0x5f, 0x08, // ....,MkDDjL..._. + 0x2d, 0x4c, 0x6b, 0x02, 0x27, 0x75, 0xc9, 0x94, 0x55, 0x55, 0x94, 0xc9, 0x75, 0x16, 0x75, 0xc8, // -Lk.'u..UU..u.u. + 0x94, 0x54, 0x54, 0x94, 0xc8, 0x75, 0xfe, 0x71, 0x35, 0x5c, 0x7b, 0x46, 0x46, 0x7b, 0x5c, 0x35, // .TT..u.q5.{FF{.5 + 0x03, 0x34, 0x34, 0x5a, 0x79, 0x44, 0x44, 0x79, 0x5a, 0x34, 0x00, 0x01, 0x00, 0x1a, 0x00, 0x00, // .44ZyDDyZ4...... + 0x04, 0xe1, 0x05, 0xc3, 0x00, 0x14, 0x00, 0x41, 0xb5, 0x01, 0x01, 0x02, 0x01, 0x01, 0x4a, 0x4b, // .......A......JK + 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x11, 0x00, 0x01, 0x01, 0x00, 0x5b, 0x03, 0x01, 0x00, 0x00, 0x1d, // ..PX@.....[..... + 0x4b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x1b, 0x40, 0x15, 0x00, 0x03, 0x03, 0x16, 0x4b, 0x00, // K.....L.@.....K. + 0x01, 0x01, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1d, 0x4b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x59, // ...[....K.....LY + 0xb6, 0x11, 0x15, 0x21, 0x27, 0x04, 0x06, 0x18, 0x2b, 0x01, 0x17, 0x37, 0x01, 0x3e, 0x03, 0x33, // ...!'...+..7.>.3 + 0x17, 0x07, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x01, 0x23, 0x01, 0x33, 0x02, 0x47, 0x22, 0x22, 0x01, // ..#"....#.3.G"". + 0x02, 0x18, 0x38, 0x46, 0x58, 0x38, 0x2e, 0x01, 0x0d, 0x1b, 0x2a, 0x23, 0x1c, 0x0e, 0xfe, 0x7d, // ..8FX8....*#...} + 0xaa, 0xfe, 0x06, 0xd1, 0x01, 0x76, 0x82, 0x81, 0x03, 0x29, 0x4d, 0x6e, 0x48, 0x22, 0x01, 0xab, // .....v...)MnH".. + 0x10, 0x23, 0x37, 0x26, 0xfb, 0x79, 0x05, 0xb0, 0x00, 0x01, 0x00, 0x51, 0x00, 0x00, 0x04, 0x60, // .#7&.y.....Q...` + 0x04, 0x4e, 0x00, 0x14, 0x00, 0x5b, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x0b, 0x09, 0x01, 0x01, // .N...[K..PX@.... + 0x00, 0x0a, 0x01, 0x02, 0x02, 0x01, 0x02, 0x4a, 0x1b, 0x40, 0x0b, 0x09, 0x01, 0x01, 0x03, 0x0a, // .......J.@...... + 0x01, 0x02, 0x02, 0x01, 0x02, 0x4a, 0x59, 0x4b, 0xb0, 0x1b, 0x50, 0x58, 0x40, 0x11, 0x00, 0x01, // .....JYK..PX@... + 0x01, 0x00, 0x5b, 0x03, 0x01, 0x00, 0x00, 0x1f, 0x4b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x1b, // ..[.....K.....L. + 0x40, 0x15, 0x00, 0x03, 0x03, 0x18, 0x4b, 0x00, 0x01, 0x01, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1f, // @.....K....[.... + 0x4b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x59, 0xb6, 0x11, 0x13, 0x25, 0x25, 0x04, 0x06, 0x18, // K.....LY...%%... + 0x2b, 0x01, 0x17, 0x37, 0x13, 0x36, 0x36, 0x17, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, // +..7.66.2...&&#" + 0x06, 0x07, 0x01, 0x23, 0x01, 0x33, 0x02, 0x1b, 0x18, 0x19, 0xb0, 0x2a, 0x83, 0x4d, 0x1c, 0x34, // ...#.3.....*.M.4 + 0x1a, 0x15, 0x06, 0x17, 0x0e, 0x21, 0x3c, 0x0e, 0xfe, 0xc3, 0x8d, 0xfe, 0x66, 0xbe, 0x01, 0x3c, // .....!<.....f..< + 0x65, 0x65, 0x02, 0x1f, 0x81, 0x72, 0x01, 0x07, 0x11, 0x94, 0x03, 0x05, 0x34, 0x29, 0xfc, 0xb4, // ee...r......4).. + 0x04, 0x3a, 0x00, 0x03, 0x00, 0x45, 0xfe, 0x51, 0x04, 0xba, 0x05, 0xc4, 0x00, 0x15, 0x00, 0x32, // .:...E.Q.......2 + 0x00, 0x48, 0x00, 0x41, 0x40, 0x3e, 0x17, 0x01, 0x07, 0x02, 0x30, 0x01, 0x00, 0x07, 0x25, 0x01, // .H.A@>....0...%. + 0x04, 0x00, 0x03, 0x4a, 0x00, 0x06, 0x06, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1d, 0x4b, 0x05, 0x01, // ...J....[....K.. + 0x02, 0x02, 0x18, 0x4b, 0x00, 0x07, 0x07, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1e, 0x4b, 0x00, 0x04, // ...K....[....K.. + 0x04, 0x03, 0x5c, 0x00, 0x03, 0x03, 0x21, 0x03, 0x4c, 0x29, 0x25, 0x16, 0x39, 0x15, 0x17, 0x29, // ......!.L)%.9..) + 0x24, 0x08, 0x06, 0x1c, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x34, // $...+....#"..5.4 + 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x01, 0x17, 0x13, 0x33, 0x03, 0x0e, 0x03, 0x23, 0x22, // >.32......3...#" + 0x2e, 0x02, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x37, 0x03, 0x33, 0x05, 0x34, // ..'7..32>.77.3.4 + 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, // ..#".......32>.5 + 0x02, 0x8a, 0x27, 0x4c, 0x71, 0x49, 0x45, 0x69, 0x47, 0x23, 0x23, 0x47, 0x69, 0x45, 0x49, 0x70, // ..'LqIEiG##GiEIp + 0x4d, 0x27, 0x01, 0x14, 0x0f, 0x69, 0xa4, 0xf1, 0x09, 0x22, 0x37, 0x50, 0x39, 0x0a, 0x19, 0x1a, // M'...i..."7P9... + 0x18, 0x07, 0x04, 0x06, 0x13, 0x14, 0x13, 0x06, 0x1d, 0x29, 0x1b, 0x11, 0x05, 0x18, 0x9f, 0xa4, // .........)...... + 0xfe, 0x71, 0x0c, 0x1b, 0x2d, 0x20, 0x20, 0x2b, 0x1a, 0x0c, 0x0c, 0x1a, 0x2b, 0x20, 0x21, 0x2c, // .q..- +....+ !, + 0x1b, 0x0c, 0x01, 0xe7, 0x73, 0xbb, 0x85, 0x48, 0x48, 0x85, 0xbb, 0x73, 0x01, 0xe1, 0x73, 0xbc, // ....s..HH..s..s. + 0x85, 0x48, 0x48, 0x85, 0xbc, 0x73, 0xfe, 0xab, 0xa3, 0x02, 0x6a, 0xfb, 0x1e, 0x27, 0x5c, 0x4f, // .HH..s....j..'.O + 0x35, 0x03, 0x05, 0x06, 0x02, 0x90, 0x01, 0x02, 0x02, 0x01, 0x29, 0x3a, 0x3e, 0x15, 0x5e, 0x04, // 5.........):>.^. + 0x3b, 0x4b, 0x48, 0x73, 0x51, 0x2b, 0x2b, 0x51, 0x73, 0x48, 0xfd, 0xd3, 0x48, 0x74, 0x51, 0x2c, // ;KHsQ++QsH..HtQ, + 0x2c, 0x51, 0x74, 0x48, 0x00, 0x03, 0x00, 0x37, 0xfe, 0x51, 0x04, 0xbb, 0x04, 0x4e, 0x00, 0x15, // ,QtH...7.Q...N.. + 0x00, 0x32, 0x00, 0x48, 0x00, 0x6f, 0x40, 0x0e, 0x17, 0x01, 0x06, 0x07, 0x30, 0x01, 0x01, 0x06, // .2.H.o@.....0... + 0x25, 0x01, 0x04, 0x01, 0x03, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x21, 0x00, 0x07, 0x07, // %....JK..PX@!... + 0x00, 0x59, 0x05, 0x02, 0x02, 0x00, 0x00, 0x18, 0x4b, 0x00, 0x06, 0x06, 0x01, 0x5b, 0x00, 0x01, // .Y......K....[.. + 0x01, 0x1e, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5c, 0x00, 0x03, 0x03, 0x21, 0x03, 0x4c, 0x1b, 0x40, // ..K........!.L.@ + 0x25, 0x05, 0x01, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x07, 0x07, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1f, // %.....K....[.... + 0x4b, 0x00, 0x06, 0x06, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1e, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5c, // K....[....K..... + 0x00, 0x03, 0x03, 0x21, 0x03, 0x4c, 0x59, 0x40, 0x0b, 0x29, 0x25, 0x16, 0x39, 0x15, 0x17, 0x29, // ...!.LY@.)%.9..) + 0x24, 0x08, 0x06, 0x1c, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, // $...+.4>.32..... + 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x25, 0x17, 0x13, 0x33, 0x03, 0x0e, 0x03, 0x23, 0x22, // ..#"..5%..3...#" + 0x2e, 0x02, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x37, 0x03, 0x33, 0x01, 0x14, // ..'7..32>.77.3.. + 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, // ..32>.554..#"... + 0x37, 0x23, 0x4d, 0x78, 0x55, 0x56, 0x7a, 0x4d, 0x24, 0x24, 0x4d, 0x79, 0x55, 0x56, 0x79, 0x4c, // 7#MxUVzM$$MyUVyL + 0x24, 0x03, 0x67, 0x0d, 0x6c, 0xa4, 0xf1, 0x09, 0x22, 0x37, 0x50, 0x39, 0x0a, 0x19, 0x1a, 0x18, // $.g.l..."7P9.... + 0x07, 0x04, 0x06, 0x13, 0x14, 0x13, 0x06, 0x1d, 0x29, 0x1b, 0x10, 0x06, 0x18, 0x9f, 0xa4, 0xfd, // ........)....... + 0x8f, 0x08, 0x1c, 0x35, 0x2d, 0x2d, 0x35, 0x1b, 0x08, 0x08, 0x1c, 0x36, 0x2d, 0x2c, 0x35, 0x1b, // ...5--5....6-,5. + 0x08, 0x02, 0x28, 0x75, 0xc9, 0x94, 0x54, 0x54, 0x94, 0xc9, 0x75, 0x17, 0x75, 0xc9, 0x93, 0x54, // ..(u..TT..u.u..T + 0x54, 0x93, 0xc9, 0x75, 0x62, 0xb3, 0x02, 0x7a, 0xfb, 0x1e, 0x27, 0x5c, 0x4f, 0x35, 0x03, 0x05, // T..ub..z..'.O5.. + 0x06, 0x02, 0x90, 0x01, 0x02, 0x02, 0x01, 0x29, 0x3a, 0x3e, 0x15, 0x5e, 0x04, 0x3b, 0xfd, 0xd7, // .......):>.^.;.. + 0x50, 0x90, 0x6e, 0x41, 0x41, 0x6e, 0x90, 0x50, 0x17, 0x4e, 0x90, 0x6e, 0x42, 0x42, 0x6e, 0x90, // P.nAAn.P.N.nBBn. + 0x4e, 0x00, 0x00, 0x04, 0x00, 0x6a, 0xff, 0x73, 0x04, 0x61, 0x06, 0x35, 0x00, 0x03, 0x00, 0x07, // N....j.s.a.5.... + 0x00, 0x25, 0x00, 0x43, 0x00, 0xab, 0x4b, 0xb0, 0x16, 0x50, 0x58, 0x40, 0x2e, 0x00, 0x01, 0x05, // .%.C..K..PX@.... + 0x05, 0x01, 0x66, 0x00, 0x00, 0x06, 0x03, 0x06, 0x00, 0x68, 0x00, 0x03, 0x07, 0x07, 0x03, 0x66, // ..f......h.....f + 0x00, 0x02, 0x04, 0x04, 0x02, 0x67, 0x00, 0x06, 0x06, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x1d, 0x4b, // .....g....[....K + 0x00, 0x07, 0x07, 0x04, 0x5c, 0x00, 0x04, 0x04, 0x1e, 0x04, 0x4c, 0x1b, 0x4b, 0xb0, 0x17, 0x50, // ..........L.K..P + 0x58, 0x40, 0x2d, 0x00, 0x01, 0x05, 0x05, 0x01, 0x66, 0x00, 0x00, 0x06, 0x03, 0x06, 0x00, 0x68, // X@-.....f......h + 0x00, 0x03, 0x07, 0x07, 0x03, 0x66, 0x00, 0x02, 0x04, 0x02, 0x73, 0x00, 0x06, 0x06, 0x05, 0x5b, // .....f....s....[ + 0x00, 0x05, 0x05, 0x1d, 0x4b, 0x00, 0x07, 0x07, 0x04, 0x5c, 0x00, 0x04, 0x04, 0x1e, 0x04, 0x4c, // ....K..........L + 0x1b, 0x40, 0x2e, 0x00, 0x01, 0x05, 0x01, 0x72, 0x00, 0x00, 0x06, 0x03, 0x06, 0x00, 0x03, 0x70, // .@.....r.......p + 0x00, 0x03, 0x07, 0x06, 0x03, 0x07, 0x6e, 0x00, 0x02, 0x04, 0x02, 0x73, 0x00, 0x06, 0x06, 0x05, // ......n....s.... + 0x5b, 0x00, 0x05, 0x05, 0x1d, 0x4b, 0x00, 0x07, 0x07, 0x04, 0x5c, 0x00, 0x04, 0x04, 0x1e, 0x04, // [....K.......... + 0x4c, 0x59, 0x59, 0x40, 0x0b, 0x2d, 0x2d, 0x2d, 0x27, 0x11, 0x11, 0x11, 0x10, 0x08, 0x06, 0x1c, // LYY@.---'....... + 0x2b, 0x01, 0x23, 0x11, 0x33, 0x11, 0x23, 0x11, 0x33, 0x01, 0x0e, 0x05, 0x23, 0x22, 0x2e, 0x04, // +.#.3.#.3...#".. + 0x27, 0x35, 0x3e, 0x05, 0x33, 0x32, 0x1e, 0x04, 0x17, 0x27, 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x04, // '5>.32...'..#".. + 0x07, 0x15, 0x1e, 0x05, 0x33, 0x32, 0x3e, 0x04, 0x37, 0x02, 0xc2, 0xb9, 0xb9, 0xb9, 0xb9, 0x01, // ....32>.7....... + 0x9f, 0x01, 0x19, 0x34, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x91, 0x70, 0x52, 0x35, 0x1a, 0x01, 0x01, // ...4Qp.ZZ.pR5... + 0x19, 0x35, 0x51, 0x70, 0x91, 0x5a, 0x5a, 0x92, 0x70, 0x51, 0x35, 0x19, 0x01, 0xb7, 0x01, 0x0c, // .5Qp.ZZ.pQ5..... + 0x1d, 0x30, 0x48, 0x62, 0x41, 0x40, 0x62, 0x48, 0x30, 0x1d, 0x0d, 0x01, 0x01, 0x0d, 0x1e, 0x30, // .0HbA@bH0......0 + 0x48, 0x62, 0x41, 0x41, 0x63, 0x47, 0x2f, 0x1d, 0x0b, 0x01, 0x04, 0xb3, 0x01, 0x82, 0xf9, 0x3e, // HbAAcG/........> + 0x01, 0x8b, 0x01, 0x86, 0x4e, 0x9f, 0x94, 0x80, 0x60, 0x37, 0x37, 0x60, 0x81, 0x94, 0x9e, 0x4e, // ....N...`77`...N + 0xa6, 0x4e, 0x9f, 0x94, 0x81, 0x61, 0x37, 0x37, 0x60, 0x81, 0x94, 0xa0, 0x4e, 0x02, 0x34, 0x71, // .N...a77`...N.4q + 0x6f, 0x65, 0x4d, 0x2d, 0x2e, 0x4d, 0x65, 0x6f, 0x71, 0x33, 0xa8, 0x33, 0x72, 0x6f, 0x66, 0x4d, // oeM-.Meoq3.3rofM + 0x2e, 0x2e, 0x4d, 0x65, 0x6f, 0x72, 0x34, 0x00, 0x00, 0x04, 0x00, 0x7a, 0xff, 0x61, 0x04, 0x52, // ..Meor4....z.a.R + 0x04, 0xcb, 0x00, 0x03, 0x00, 0x07, 0x00, 0x1d, 0x00, 0x33, 0x01, 0x16, 0x4b, 0xb0, 0x12, 0x50, // .........3..K..P + 0x58, 0x40, 0x2e, 0x00, 0x01, 0x04, 0x04, 0x01, 0x66, 0x00, 0x00, 0x07, 0x03, 0x07, 0x00, 0x68, // X@......f......h + 0x00, 0x03, 0x06, 0x06, 0x03, 0x66, 0x00, 0x02, 0x05, 0x05, 0x02, 0x67, 0x00, 0x07, 0x07, 0x04, // .....f.....g.... + 0x5b, 0x00, 0x04, 0x04, 0x1f, 0x4b, 0x00, 0x06, 0x06, 0x05, 0x5c, 0x00, 0x05, 0x05, 0x1e, 0x05, // [....K.......... + 0x4c, 0x1b, 0x4b, 0xb0, 0x14, 0x50, 0x58, 0x40, 0x2d, 0x00, 0x01, 0x04, 0x04, 0x01, 0x66, 0x00, // L.K..PX@-.....f. + 0x00, 0x07, 0x03, 0x07, 0x00, 0x68, 0x00, 0x03, 0x06, 0x06, 0x03, 0x66, 0x00, 0x02, 0x05, 0x02, // .....h.....f.... + 0x73, 0x00, 0x07, 0x07, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x1f, 0x4b, 0x00, 0x06, 0x06, 0x05, 0x5c, // s....[....K..... + 0x00, 0x05, 0x05, 0x1e, 0x05, 0x4c, 0x1b, 0x4b, 0xb0, 0x16, 0x50, 0x58, 0x40, 0x2c, 0x00, 0x01, // .....L.K..PX@,.. + 0x04, 0x01, 0x72, 0x00, 0x00, 0x07, 0x03, 0x07, 0x00, 0x68, 0x00, 0x03, 0x06, 0x06, 0x03, 0x66, // ..r......h.....f + 0x00, 0x02, 0x05, 0x02, 0x73, 0x00, 0x07, 0x07, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x1f, 0x4b, 0x00, // ....s....[....K. + 0x06, 0x06, 0x05, 0x5c, 0x00, 0x05, 0x05, 0x1e, 0x05, 0x4c, 0x1b, 0x4b, 0xb0, 0x17, 0x50, 0x58, // .........L.K..PX + 0x40, 0x2d, 0x00, 0x01, 0x04, 0x01, 0x72, 0x00, 0x00, 0x07, 0x03, 0x07, 0x00, 0x68, 0x00, 0x03, // @-....r......h.. + 0x06, 0x07, 0x03, 0x06, 0x6e, 0x00, 0x02, 0x05, 0x02, 0x73, 0x00, 0x07, 0x07, 0x04, 0x5b, 0x00, // ....n....s....[. + 0x04, 0x04, 0x1f, 0x4b, 0x00, 0x06, 0x06, 0x05, 0x5c, 0x00, 0x05, 0x05, 0x1e, 0x05, 0x4c, 0x1b, // ...K..........L. + 0x40, 0x2e, 0x00, 0x01, 0x04, 0x01, 0x72, 0x00, 0x00, 0x07, 0x03, 0x07, 0x00, 0x03, 0x70, 0x00, // @.....r.......p. + 0x03, 0x06, 0x07, 0x03, 0x06, 0x6e, 0x00, 0x02, 0x05, 0x02, 0x73, 0x00, 0x07, 0x07, 0x04, 0x5b, // .....n....s....[ + 0x00, 0x04, 0x04, 0x1f, 0x4b, 0x00, 0x06, 0x06, 0x05, 0x5c, 0x00, 0x05, 0x05, 0x1e, 0x05, 0x4c, // ....K..........L + 0x59, 0x59, 0x59, 0x59, 0x40, 0x0b, 0x29, 0x29, 0x29, 0x25, 0x11, 0x11, 0x11, 0x10, 0x08, 0x06, // YYYY@.)))%...... + 0x1c, 0x2b, 0x01, 0x23, 0x11, 0x33, 0x11, 0x23, 0x11, 0x33, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, // .+.#.3.#.3.4>.32 + 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, // .......#"..53... + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x02, 0xc4, // 32>.554..#"..... + 0xba, 0xba, 0xba, 0xba, 0xfd, 0xb6, 0x44, 0x7f, 0xb6, 0x72, 0x73, 0xb7, 0x7f, 0x44, 0x44, 0x7f, // ......D..rs..DD. + 0xb6, 0x72, 0x73, 0xb7, 0x7f, 0x44, 0xb9, 0x26, 0x4d, 0x74, 0x4d, 0x4c, 0x73, 0x4d, 0x26, 0x27, // .rs..D.&MtMLsM&' + 0x4d, 0x73, 0x4d, 0x4d, 0x72, 0x4d, 0x26, 0x03, 0x46, 0x01, 0x85, 0xfa, 0x96, 0x01, 0x97, 0x01, // MsMMrM&.F....... + 0x2f, 0x75, 0xc9, 0x94, 0x55, 0x55, 0x94, 0xc9, 0x75, 0x16, 0x75, 0xc8, 0x94, 0x54, 0x54, 0x94, // /u..UU..u.u..TT. + 0xc8, 0x75, 0x50, 0x91, 0x6e, 0x40, 0x40, 0x6e, 0x91, 0x50, 0x16, 0x4f, 0x91, 0x6e, 0x41, 0x41, // .uP.n@@n.P.O.nAA + 0x6e, 0x91, 0x4f, 0x00, 0x00, 0x03, 0x00, 0x4d, 0xff, 0xeb, 0x04, 0x83, 0x07, 0x51, 0x00, 0x34, // n.O....M.....Q.4 + 0x00, 0x4c, 0x00, 0x58, 0x00, 0x69, 0x40, 0x66, 0x3f, 0x01, 0x0d, 0x0a, 0x41, 0x01, 0x00, 0x09, // .L.X.i@f?...A... + 0x58, 0x01, 0x04, 0x00, 0x0e, 0x01, 0x01, 0x05, 0x04, 0x4a, 0x00, 0x0d, 0x0a, 0x09, 0x0a, 0x0d, // X........J...... + 0x09, 0x70, 0x00, 0x06, 0x04, 0x05, 0x04, 0x06, 0x05, 0x70, 0x00, 0x0b, 0x00, 0x0a, 0x0d, 0x0b, // .p.......p...... + 0x0a, 0x63, 0x0e, 0x01, 0x0c, 0x00, 0x09, 0x00, 0x0c, 0x09, 0x63, 0x08, 0x01, 0x04, 0x04, 0x00, // .c........c..... + 0x5b, 0x03, 0x01, 0x00, 0x00, 0x16, 0x4b, 0x07, 0x01, 0x05, 0x05, 0x01, 0x5b, 0x02, 0x01, 0x01, // [.....K.....[... + 0x01, 0x1e, 0x01, 0x4c, 0x35, 0x35, 0x52, 0x51, 0x35, 0x4c, 0x35, 0x4b, 0x46, 0x44, 0x3d, 0x3b, // ...L55RQ5L5KFD=; + 0x38, 0x36, 0x15, 0x23, 0x13, 0x25, 0x11, 0x19, 0x24, 0x29, 0x10, 0x0f, 0x06, 0x1d, 0x2b, 0x01, // 86.#.%..$)....+. + 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, // 2.......#"&'..#" + 0x2e, 0x02, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x15, 0x06, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, // ..5.4>.3.......3 + 0x32, 0x36, 0x35, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x26, 0x26, 0x27, // 265.3...3267.&&' + 0x13, 0x15, 0x23, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x07, 0x23, 0x35, 0x34, 0x36, 0x33, // ..#"..#"...#5463 + 0x32, 0x1e, 0x04, 0x33, 0x01, 0x36, 0x36, 0x35, 0x35, 0x33, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x03, // 2..3.66553...... + 0x22, 0x4e, 0x82, 0x5d, 0x34, 0x2e, 0x53, 0x75, 0x46, 0x4c, 0x73, 0x20, 0x21, 0x73, 0x4b, 0x47, // "N.]4.SuFLs !sKG + 0x74, 0x53, 0x2e, 0x33, 0x5d, 0x82, 0x4f, 0x4e, 0x59, 0x45, 0x3d, 0x3c, 0x46, 0xba, 0x46, 0x3c, // tS.3].ONYE=DM-.H!".. + 0x24, 0x2f, 0x19, 0x05, 0xaf, 0x33, 0x64, 0x93, 0x60, 0xfd, 0x2b, 0x57, 0x85, 0x5a, 0x2f, 0x48, // $/...3d.`.+W.Z/H + 0x46, 0x46, 0x48, 0x2f, 0x5a, 0x85, 0x57, 0x02, 0xd5, 0x60, 0x93, 0x64, 0x33, 0x97, 0x01, 0x7e, // FFH/Z.W..`.d3..~ + 0x74, 0xfd, 0x2b, 0x61, 0x6d, 0x64, 0x58, 0x01, 0xfc, 0xfe, 0x04, 0x58, 0x64, 0x6d, 0x61, 0x02, // t.+amdX....Xdma. + 0xd5, 0x74, 0x7e, 0x01, 0x01, 0xbb, 0x7f, 0x28, 0x2f, 0x27, 0x36, 0x37, 0x12, 0x24, 0x6e, 0x6c, // .t~....(/'67.$nl + 0x13, 0x1b, 0x21, 0x1c, 0x13, 0xfe, 0x90, 0x28, 0x47, 0x26, 0x60, 0x66, 0x1d, 0x3b, 0x35, 0x2d, // ..!....(G&`f.;5- + 0x0d, 0x00, 0x00, 0x03, 0x00, 0x67, 0xff, 0xeb, 0x04, 0x7c, 0x05, 0xde, 0x00, 0x34, 0x00, 0x4a, // .....g...|...4.J + 0x00, 0x56, 0x00, 0xb2, 0x40, 0x12, 0x3f, 0x01, 0x0d, 0x0a, 0x41, 0x01, 0x00, 0x09, 0x56, 0x01, // .V..@.?...A...V. + 0x04, 0x00, 0x0e, 0x01, 0x01, 0x05, 0x04, 0x4a, 0x4b, 0xb0, 0x26, 0x50, 0x58, 0x40, 0x3c, 0x00, // .......JK.&PX@<. + 0x0d, 0x0a, 0x09, 0x0a, 0x0d, 0x09, 0x70, 0x00, 0x06, 0x04, 0x05, 0x04, 0x06, 0x05, 0x70, 0x0e, // ......p.......p. + 0x01, 0x0c, 0x00, 0x09, 0x00, 0x0c, 0x09, 0x63, 0x00, 0x0a, 0x0a, 0x0b, 0x5b, 0x00, 0x0b, 0x0b, // .......c....[... + 0x1d, 0x4b, 0x08, 0x01, 0x04, 0x04, 0x00, 0x5b, 0x03, 0x01, 0x00, 0x00, 0x1f, 0x4b, 0x07, 0x01, // .K.....[.....K.. + 0x05, 0x05, 0x01, 0x5b, 0x02, 0x01, 0x01, 0x01, 0x1e, 0x01, 0x4c, 0x1b, 0x40, 0x3a, 0x00, 0x0d, // ...[......L.@:.. + 0x0a, 0x09, 0x0a, 0x0d, 0x09, 0x70, 0x00, 0x06, 0x04, 0x05, 0x04, 0x06, 0x05, 0x70, 0x00, 0x0b, // .....p.......p.. + 0x00, 0x0a, 0x0d, 0x0b, 0x0a, 0x63, 0x0e, 0x01, 0x0c, 0x00, 0x09, 0x00, 0x0c, 0x09, 0x63, 0x08, // .....c........c. + 0x01, 0x04, 0x04, 0x00, 0x5b, 0x03, 0x01, 0x00, 0x00, 0x1f, 0x4b, 0x07, 0x01, 0x05, 0x05, 0x01, // ....[.....K..... + 0x5b, 0x02, 0x01, 0x01, 0x01, 0x1e, 0x01, 0x4c, 0x59, 0x40, 0x1a, 0x35, 0x35, 0x50, 0x4f, 0x35, // [......LY@.55PO5 + 0x4a, 0x35, 0x49, 0x46, 0x44, 0x3d, 0x3b, 0x38, 0x36, 0x15, 0x23, 0x13, 0x25, 0x11, 0x19, 0x24, // J5IFD=;86.#.%..$ + 0x29, 0x10, 0x0f, 0x06, 0x1d, 0x2b, 0x01, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x0e, 0x02, 0x23, // )....+.2.......# + 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x15, // "&'..#"..5.4>.3. + 0x06, 0x06, 0x15, 0x11, 0x14, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x14, 0x16, 0x33, // ......3267.3...3 + 0x32, 0x36, 0x35, 0x11, 0x34, 0x26, 0x27, 0x13, 0x15, 0x23, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, // 265.4&'..#"..#". + 0x15, 0x07, 0x23, 0x35, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x01, 0x36, 0x36, 0x35, 0x35, // ..#54632..3.6655 + 0x33, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x03, 0x2d, 0x4a, 0x7b, 0x59, 0x31, 0x2b, 0x4f, 0x6e, 0x43, // 3......-J{Y1+OnC + 0x4c, 0x72, 0x21, 0x21, 0x73, 0x4c, 0x43, 0x6e, 0x4f, 0x2b, 0x31, 0x58, 0x7b, 0x4b, 0x45, 0x50, // Lr!!sLCnO+1X{KEP + 0x3b, 0x36, 0x3c, 0x46, 0x01, 0xba, 0x46, 0x3c, 0x35, 0x3d, 0x51, 0x45, 0xc2, 0x2b, 0x4a, 0x74, // ;6.32. + 0x02, 0x15, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x33, // ..#..#".......33 + 0x03, 0x2a, 0xb9, 0x6e, 0xaf, 0x7b, 0x42, 0x46, 0x82, 0xb8, 0x72, 0x6e, 0xb0, 0x7b, 0x43, 0xb9, // .*.n.{BF..rn.{C. + 0x01, 0x26, 0x49, 0x6c, 0x47, 0x4b, 0x75, 0x50, 0x29, 0x30, 0x5d, 0x88, 0x58, 0x6d, 0xfe, 0x82, // .&IlGKuP)0].Xm.. + 0x01, 0x6f, 0x0e, 0x6b, 0xa5, 0xd5, 0x79, 0xf7, 0x83, 0xe4, 0xa9, 0x61, 0x45, 0x80, 0xb3, 0x6e, // .o.k..y....aE..n + 0x4b, 0x7c, 0x57, 0x30, 0x4d, 0x81, 0xab, 0x5e, 0xf9, 0x5f, 0xac, 0x83, 0x4d, 0x00, 0x00, 0x01, // K|W0M..^._..M... + 0x00, 0xbf, 0xfe, 0x82, 0x04, 0x3b, 0x04, 0x4e, 0x00, 0x24, 0x00, 0x53, 0xb5, 0x02, 0x01, 0x00, // .....;.N.$.S.... + 0x04, 0x01, 0x4a, 0x4b, 0xb0, 0x1d, 0x50, 0x58, 0x40, 0x1d, 0x00, 0x02, 0x03, 0x04, 0x03, 0x02, // ..JK..PX@....... + 0x04, 0x70, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1f, 0x4b, 0x00, 0x04, 0x04, 0x00, // .p....[....K.... + 0x59, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x4c, 0x1b, 0x40, 0x1a, 0x00, 0x02, 0x03, 0x04, 0x03, 0x02, // Y.....L.@....... + 0x04, 0x70, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x5d, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, // .p......]....[.. + 0x01, 0x1f, 0x03, 0x4c, 0x59, 0xb7, 0x29, 0x24, 0x14, 0x2b, 0x10, 0x05, 0x06, 0x19, 0x2b, 0x01, // ...LY.)$.+....+. + 0x23, 0x11, 0x2e, 0x03, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, // #...554>.32...#4 + 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x33, 0x02, 0xfd, 0xb9, // ..#".......33... + 0x5f, 0x91, 0x62, 0x33, 0x3e, 0x78, 0xb0, 0x72, 0x5b, 0x9a, 0x70, 0x3f, 0xaf, 0x26, 0x41, 0x5a, // _.b3>x.r[.p?.&AZ + 0x34, 0x4c, 0x6c, 0x46, 0x21, 0x20, 0x46, 0x6c, 0x4d, 0x66, 0xfe, 0x82, 0x01, 0x70, 0x10, 0x61, // 4LlF! FlMf...p.a + 0x90, 0xb3, 0x62, 0x2a, 0x6b, 0xc4, 0x95, 0x58, 0x3d, 0x6a, 0x8f, 0x53, 0x31, 0x58, 0x42, 0x26, // ..b*k..X=j.S1XB& + 0x45, 0x6f, 0x8b, 0x45, 0x2a, 0x47, 0x8b, 0x6f, 0x45, 0x00, 0x00, 0x01, 0x00, 0x76, 0x00, 0x00, // Eo.E*G.oE....v.. + 0x04, 0x92, 0x05, 0x3e, 0x00, 0x13, 0x00, 0x27, 0x40, 0x24, 0x13, 0x12, 0x11, 0x10, 0x0d, 0x0c, // ...>...'@$...... + 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x03, 0x02, 0x01, 0x0f, 0x00, 0x01, 0x01, 0x4a, 0x00, 0x01, // .............J.. + 0x00, 0x01, 0x72, 0x00, 0x00, 0x00, 0x17, 0x00, 0x4c, 0x19, 0x14, 0x02, 0x06, 0x16, 0x2b, 0x01, // ..r.....L.....+. + 0x05, 0x07, 0x25, 0x03, 0x23, 0x13, 0x25, 0x37, 0x05, 0x13, 0x25, 0x37, 0x05, 0x13, 0x33, 0x03, // ..%.#.%7..%7..3. + 0x05, 0x07, 0x25, 0x02, 0x5a, 0x01, 0x21, 0x44, 0xfe, 0xdd, 0xb6, 0xa8, 0xe1, 0xfe, 0xdf, 0x44, // ..%.Z.!D.......D + 0x01, 0x25, 0xcd, 0xfe, 0xde, 0x46, 0x01, 0x23, 0xbc, 0xa5, 0xe7, 0x01, 0x25, 0x48, 0xfe, 0xe0, // .%...F.#....%H.. + 0x01, 0xbe, 0xac, 0x7b, 0xaa, 0xfe, 0xbf, 0x01, 0x8e, 0xab, 0x7b, 0xab, 0x01, 0x6d, 0xab, 0x7d, // ...{......{..m.} + 0xab, 0x01, 0x4b, 0xfe, 0x68, 0xab, 0x7a, 0xaa, 0x00, 0x01, 0x00, 0xd1, 0x04, 0xa6, 0x03, 0x91, // ..K.h.z......... + 0x05, 0xfc, 0x00, 0x07, 0x00, 0x8c, 0x4b, 0xb0, 0x14, 0x50, 0x58, 0x40, 0x18, 0x00, 0x02, 0x01, // ......K..PX@.... + 0x01, 0x02, 0x66, 0x00, 0x00, 0x03, 0x03, 0x00, 0x67, 0x04, 0x01, 0x03, 0x03, 0x01, 0x59, 0x00, // ..f.....g.....Y. + 0x01, 0x01, 0x16, 0x03, 0x4c, 0x1b, 0x4b, 0xb0, 0x17, 0x50, 0x58, 0x40, 0x17, 0x00, 0x02, 0x01, // ....L.K..PX@.... + 0x01, 0x02, 0x66, 0x00, 0x00, 0x03, 0x00, 0x73, 0x04, 0x01, 0x03, 0x03, 0x01, 0x59, 0x00, 0x01, // ..f....s.....Y.. + 0x01, 0x16, 0x03, 0x4c, 0x1b, 0x4b, 0xb0, 0x1f, 0x50, 0x58, 0x40, 0x16, 0x00, 0x02, 0x01, 0x02, // ...L.K..PX@..... + 0x72, 0x00, 0x00, 0x03, 0x00, 0x73, 0x04, 0x01, 0x03, 0x03, 0x01, 0x59, 0x00, 0x01, 0x01, 0x16, // r....s.....Y.... + 0x03, 0x4c, 0x1b, 0x40, 0x1b, 0x00, 0x02, 0x01, 0x02, 0x72, 0x00, 0x00, 0x03, 0x00, 0x73, 0x00, // .L.@.....r....s. + 0x01, 0x03, 0x03, 0x01, 0x55, 0x00, 0x01, 0x01, 0x03, 0x5a, 0x04, 0x01, 0x03, 0x01, 0x03, 0x4e, // ....U....Z.....N + 0x59, 0x59, 0x59, 0x40, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x11, 0x11, 0x11, 0x05, 0x06, // YYY@............ + 0x17, 0x2b, 0x01, 0x15, 0x27, 0x37, 0x21, 0x27, 0x17, 0x15, 0x01, 0x77, 0xa6, 0x01, 0x02, 0x1b, // .+..'7!'...w.... + 0x01, 0xa5, 0x05, 0x23, 0x7d, 0x01, 0xe9, 0x6c, 0x01, 0xd8, 0x00, 0x01, 0x00, 0xfc, 0x05, 0x17, // ...#}..l........ + 0x03, 0xf0, 0x06, 0x15, 0x00, 0x17, 0x00, 0x4f, 0x4b, 0xb0, 0x26, 0x50, 0x58, 0x40, 0x15, 0x00, // .......OK.&PX@.. + 0x01, 0x00, 0x03, 0x02, 0x01, 0x03, 0x63, 0x04, 0x01, 0x02, 0x02, 0x00, 0x5b, 0x05, 0x01, 0x00, // ......c.....[... + 0x00, 0x16, 0x02, 0x4c, 0x1b, 0x40, 0x1b, 0x05, 0x01, 0x00, 0x03, 0x02, 0x00, 0x57, 0x00, 0x01, // ...L.@.......W.. + 0x00, 0x03, 0x02, 0x01, 0x03, 0x63, 0x05, 0x01, 0x00, 0x00, 0x02, 0x5b, 0x04, 0x01, 0x02, 0x00, // .....c.....[.... + 0x02, 0x4f, 0x59, 0x40, 0x11, 0x01, 0x00, 0x16, 0x14, 0x11, 0x0f, 0x0c, 0x0b, 0x08, 0x06, 0x00, // .OY@............ + 0x17, 0x01, 0x17, 0x06, 0x06, 0x14, 0x2b, 0x01, 0x32, 0x3e, 0x04, 0x33, 0x32, 0x16, 0x15, 0x15, // ......+.2>.32... + 0x23, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x23, 0x23, 0x35, 0x01, 0x26, 0x34, 0x5a, 0x4f, // #54&#"..##5.&4ZO + 0x48, 0x47, 0x48, 0x28, 0x6e, 0x80, 0x80, 0x3f, 0x33, 0x2d, 0x5e, 0x6f, 0x87, 0x55, 0x2c, 0x05, // HGH(n..?3-^o.U,. + 0x96, 0x13, 0x1c, 0x21, 0x1c, 0x13, 0x6c, 0x6e, 0x24, 0x12, 0x38, 0x34, 0x27, 0x2f, 0x27, 0x7e, // ...!..ln$.84'/'~ + 0x00, 0x01, 0x01, 0xc3, 0x05, 0x16, 0x02, 0xb2, 0x06, 0x57, 0x00, 0x05, 0x00, 0x12, 0x40, 0x0f, // .........W....@. + 0x05, 0x04, 0x03, 0x00, 0x04, 0x00, 0x47, 0x00, 0x00, 0x00, 0x69, 0x11, 0x01, 0x06, 0x15, 0x2b, // ......G...i....+ + 0x01, 0x35, 0x33, 0x07, 0x17, 0x07, 0x01, 0xc3, 0xb4, 0x01, 0x3c, 0x4e, 0x05, 0xdc, 0x7b, 0x8c, // .53........3 + 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x34, 0x3e, // 2...#4..#"....4> + 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x13, // .32...#4..#".... + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, // 4>.32...#4..#".. + 0x15, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, // ..4>.32...#4..#" + 0x0e, 0x02, 0x15, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, // ....4>.32...#4.. + 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, // #"....4>.32...#4 + 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // ..#"....4>.32... + 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, // #4..#"....4>.32. + 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0xd4, 0x1d, 0x37, 0x4e, // ..#4..#"......7N + 0x30, 0x30, 0x4e, 0x37, 0x1e, 0x70, 0x0b, 0x18, 0x25, 0x1b, 0x1b, 0x25, 0x17, 0x0a, 0x01, 0xde, // 00N7.p..%..%.... + 0x1e, 0x36, 0x4e, 0x30, 0x30, 0x4e, 0x38, 0x1e, 0x71, 0x0b, 0x18, 0x25, 0x1b, 0x1a, 0x25, 0x17, // .6N00N8.q..%..%. + 0x0a, 0x49, 0x1e, 0x36, 0x4e, 0x30, 0x30, 0x4e, 0x37, 0x1e, 0x70, 0x0b, 0x18, 0x25, 0x1b, 0x1a, // .I.6N00N7.p..%.. + 0x25, 0x17, 0x0b, 0xfe, 0xca, 0x1e, 0x36, 0x4e, 0x30, 0x30, 0x4e, 0x37, 0x1e, 0x70, 0x0b, 0x18, // %.....6N00N7.p.. + 0x25, 0x1b, 0x1a, 0x25, 0x17, 0x0b, 0xfd, 0x4f, 0x1d, 0x37, 0x4e, 0x30, 0x30, 0x4e, 0x37, 0x1e, // %..%...O.7N00N7. + 0x70, 0x0b, 0x18, 0x25, 0x1b, 0x1a, 0x25, 0x17, 0x0b, 0xfd, 0x4d, 0x1e, 0x37, 0x4e, 0x30, 0x30, // p..%..%...M.7N00 + 0x4e, 0x37, 0x1e, 0x70, 0x0b, 0x18, 0x25, 0x1b, 0x1b, 0x25, 0x17, 0x0a, 0xfe, 0xde, 0x1e, 0x37, // N7.p..%..%.....7 + 0x4d, 0x30, 0x30, 0x4e, 0x37, 0x1e, 0x70, 0x0b, 0x18, 0x25, 0x1b, 0x1a, 0x24, 0x18, 0x0b, 0x35, // M00N7.p..%..$..5 + 0x1e, 0x37, 0x4d, 0x30, 0x30, 0x4e, 0x38, 0x1e, 0x71, 0x0b, 0x18, 0x25, 0x1b, 0x1a, 0x25, 0x16, // .7M00N8.q..%..%. + 0x0b, 0x04, 0xf3, 0x29, 0x45, 0x32, 0x1c, 0x1c, 0x32, 0x45, 0x29, 0x14, 0x24, 0x1c, 0x11, 0x11, // ...)E2..2E).$... + 0x1c, 0x24, 0x14, 0xfe, 0xeb, 0x29, 0x45, 0x32, 0x1c, 0x1c, 0x32, 0x45, 0x29, 0x14, 0x24, 0x1c, // .$...)E2..2E).$. + 0x11, 0x11, 0x1c, 0x24, 0x14, 0xfe, 0x09, 0x29, 0x45, 0x32, 0x1c, 0x1c, 0x32, 0x45, 0x29, 0x14, // ...$...)E2..2E). + 0x24, 0x1c, 0x11, 0x11, 0x1c, 0x24, 0x14, 0xfd, 0xf9, 0x29, 0x45, 0x32, 0x1c, 0x1c, 0x32, 0x45, // $....$...)E2..2E + 0x29, 0x14, 0x24, 0x1c, 0x11, 0x11, 0x1c, 0x24, 0x14, 0xfe, 0xe4, 0x2a, 0x45, 0x31, 0x1c, 0x1c, // ).$....$...*E1.. + 0x31, 0x45, 0x2a, 0x14, 0x25, 0x1c, 0x10, 0x10, 0x1c, 0x25, 0x14, 0x05, 0x1a, 0x29, 0x45, 0x32, // 1E*.%....%...)E2 + 0x1c, 0x1c, 0x32, 0x45, 0x29, 0x14, 0x24, 0x1c, 0x11, 0x11, 0x1c, 0x24, 0x14, 0xfe, 0x09, 0x29, // ..2E).$....$...) + 0x45, 0x32, 0x1c, 0x1c, 0x32, 0x45, 0x29, 0x14, 0x24, 0x1c, 0x11, 0x11, 0x1c, 0x24, 0x14, 0xfd, // E2..2E).$....$.. + 0xf9, 0x29, 0x45, 0x32, 0x1c, 0x1c, 0x32, 0x45, 0x29, 0x14, 0x24, 0x1c, 0x11, 0x11, 0x1c, 0x24, // .)E2..2E).$....$ + 0x14, 0x00, 0x00, 0x08, 0x00, 0x4e, 0xfe, 0x63, 0x07, 0x8e, 0x05, 0xc6, 0x00, 0x04, 0x00, 0x09, // .....N.c........ + 0x00, 0x0e, 0x00, 0x13, 0x00, 0x18, 0x00, 0x1d, 0x00, 0x22, 0x00, 0x27, 0x00, 0x6d, 0x40, 0x1f, // .........".'.m@. + 0x21, 0x20, 0x16, 0x03, 0x03, 0x02, 0x27, 0x22, 0x1d, 0x18, 0x17, 0x13, 0x12, 0x11, 0x0f, 0x0e, // ! ....'"........ + 0x0d, 0x0c, 0x0a, 0x0d, 0x01, 0x03, 0x26, 0x25, 0x1c, 0x1b, 0x04, 0x00, 0x01, 0x03, 0x4a, 0x4b, // ......&%......JK + 0xb0, 0x2e, 0x50, 0x58, 0x40, 0x17, 0x05, 0x01, 0x03, 0x03, 0x02, 0x59, 0x00, 0x02, 0x02, 0x16, // ..PX@......Y.... + 0x4b, 0x04, 0x01, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x4c, 0x1b, 0x40, 0x15, // K.....Y.....L.@. + 0x00, 0x02, 0x05, 0x01, 0x03, 0x01, 0x02, 0x03, 0x61, 0x04, 0x01, 0x01, 0x01, 0x00, 0x59, 0x00, // ........a.....Y. + 0x00, 0x00, 0x1a, 0x00, 0x4c, 0x59, 0x40, 0x12, 0x05, 0x05, 0x00, 0x00, 0x05, 0x09, 0x05, 0x09, // ....LY@......... + 0x08, 0x07, 0x00, 0x04, 0x00, 0x04, 0x12, 0x06, 0x06, 0x15, 0x2b, 0x05, 0x17, 0x03, 0x23, 0x13, // ..........+...#. + 0x03, 0x27, 0x13, 0x33, 0x03, 0x01, 0x37, 0x05, 0x15, 0x25, 0x05, 0x07, 0x25, 0x35, 0x05, 0x01, // .'.3..7..%..%5.. + 0x37, 0x25, 0x17, 0x05, 0x01, 0x07, 0x05, 0x27, 0x25, 0x03, 0x27, 0x03, 0x37, 0x13, 0x01, 0x17, // 7%.....'%.'.7... + 0x13, 0x07, 0x03, 0x04, 0x51, 0x0b, 0x7a, 0x60, 0x46, 0x3a, 0x0c, 0x7a, 0x60, 0x46, 0x02, 0x1e, // ....Q.z`F:.z`F.. + 0x0d, 0x01, 0x4d, 0xfe, 0xa6, 0xfb, 0x74, 0x0d, 0xfe, 0xb3, 0x01, 0x5a, 0x03, 0x9c, 0x02, 0x01, // ..M...t....Z.... + 0x41, 0x44, 0xfe, 0xda, 0xfc, 0xf3, 0x02, 0xfe, 0xc0, 0x45, 0x01, 0x26, 0x2b, 0x11, 0x94, 0x41, // AD.......E.&+..A + 0xc6, 0x03, 0x60, 0x11, 0x95, 0x42, 0xc5, 0x3c, 0x0e, 0xfe, 0xad, 0x01, 0x61, 0x04, 0xa2, 0x0e, // ..`..B.<....a... + 0x01, 0x52, 0xfe, 0xa0, 0xfe, 0x11, 0x0c, 0x7c, 0x62, 0x47, 0x3b, 0x0c, 0x7c, 0x62, 0x47, 0x01, // .R.....|bG;.|bG. + 0xae, 0x10, 0x99, 0x44, 0xc8, 0xfc, 0x8e, 0x11, 0x99, 0x45, 0xc8, 0x02, 0xe4, 0x02, 0x01, 0x46, // ...D.....E.....F + 0x45, 0xfe, 0xd5, 0xfc, 0xe3, 0x02, 0xfe, 0xbb, 0x47, 0x01, 0x2b, 0x00, 0x00, 0x03, 0x00, 0xbf, // E.......G.+..... + 0x00, 0x00, 0x04, 0x79, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x36, 0x40, 0x33, // ...y.........6@3 + 0x03, 0x02, 0x02, 0x03, 0x04, 0x01, 0x01, 0x00, 0x02, 0x02, 0x4a, 0x00, 0x03, 0x05, 0x01, 0x02, // ..........J..... + 0x00, 0x03, 0x02, 0x63, 0x00, 0x04, 0x04, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x16, 0x4b, 0x00, 0x00, // ...c....[....K.. + 0x00, 0x17, 0x00, 0x4c, 0x04, 0x04, 0x1f, 0x1d, 0x15, 0x13, 0x04, 0x12, 0x04, 0x11, 0x21, 0x15, // ...L..........!. + 0x06, 0x06, 0x16, 0x2b, 0x01, 0x07, 0x01, 0x37, 0x01, 0x11, 0x23, 0x11, 0x21, 0x1e, 0x03, 0x15, // ...+...7..#.!... + 0x14, 0x0e, 0x02, 0x07, 0x25, 0x21, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x21, 0x04, 0x31, // ....%!>.54..'!.1 + 0x84, 0xfe, 0x95, 0x83, 0xfe, 0xb3, 0xb9, 0x01, 0xd8, 0x62, 0xaf, 0x84, 0x4d, 0x4d, 0x84, 0xaf, // .........b..MM.. + 0x62, 0xfe, 0xe1, 0x01, 0x1f, 0x40, 0x6c, 0x50, 0x2d, 0x2d, 0x4f, 0x6d, 0x40, 0xfe, 0xe1, 0x01, // b....@lP--Om@... + 0xd3, 0x46, 0x01, 0xec, 0x46, 0xfe, 0x89, 0xfd, 0xb8, 0x05, 0xb0, 0x02, 0x3a, 0x6e, 0xa2, 0x69, // .F..F.......:n.i + 0x69, 0xa1, 0x6e, 0x3a, 0x01, 0x98, 0x01, 0x27, 0x48, 0x67, 0x42, 0x42, 0x6a, 0x4a, 0x28, 0x01, // i.n:...'HgBBjJ(. + 0x00, 0x03, 0x00, 0xad, 0xfe, 0x60, 0x04, 0x3f, 0x04, 0x4e, 0x00, 0x03, 0x00, 0x19, 0x00, 0x2b, // .....`.?.N.....+ + 0x00, 0x68, 0x40, 0x15, 0x11, 0x01, 0x04, 0x02, 0x23, 0x22, 0x03, 0x02, 0x04, 0x05, 0x04, 0x0c, // .h@.....#"...... + 0x01, 0x00, 0x05, 0x01, 0x01, 0x01, 0x00, 0x04, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x1b, // ........JK..PX@. + 0x00, 0x04, 0x04, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x05, 0x05, 0x00, 0x5b, // ....[.....K....[ + 0x00, 0x00, 0x00, 0x1e, 0x4b, 0x00, 0x01, 0x01, 0x1a, 0x01, 0x4c, 0x1b, 0x40, 0x1f, 0x00, 0x02, // ....K.....L.@... + 0x02, 0x18, 0x4b, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1f, 0x4b, 0x00, 0x05, 0x05, // ..K....[....K... + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1e, 0x4b, 0x00, 0x01, 0x01, 0x1a, 0x01, 0x4c, 0x59, 0x40, 0x09, // .[....K.....LY@. + 0x25, 0x29, 0x23, 0x11, 0x13, 0x28, 0x06, 0x06, 0x1a, 0x2b, 0x25, 0x07, 0x01, 0x37, 0x25, 0x14, // %)#..(...+%..7%. + 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x11, 0x23, 0x11, 0x33, 0x17, 0x36, 0x36, 0x33, 0x32, 0x1e, // ..#"&'.#.3.6632. + 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x11, 0x16, 0x16, 0x33, 0x32, 0x3e, // ..#4..#".....32> + 0x02, 0x35, 0x04, 0x36, 0x70, 0xfe, 0x95, 0x71, 0x01, 0x73, 0x38, 0x6c, 0x9f, 0x66, 0x63, 0x97, // .5.6p..q.s8l.fc. + 0x36, 0xb9, 0xa9, 0x09, 0x36, 0x99, 0x65, 0x68, 0xa0, 0x6c, 0x38, 0xb9, 0x23, 0x49, 0x70, 0x4e, // 6...6.eh.l8.#IpN + 0x59, 0x79, 0x24, 0x24, 0x78, 0x5c, 0x4d, 0x70, 0x48, 0x23, 0x02, 0x5d, 0x01, 0x75, 0x5e, 0x99, // Yy$$x.MpH#.].u^. + 0x74, 0xc9, 0x94, 0x54, 0x40, 0x3c, 0xfd, 0xf8, 0x05, 0xda, 0x76, 0x43, 0x47, 0x52, 0x92, 0xcb, // t..T@<....vCGR.. + 0x79, 0x4f, 0x8f, 0x6d, 0x40, 0x53, 0x41, 0xfd, 0xf7, 0x40, 0x51, 0x41, 0x6e, 0x90, 0x4f, 0x00, // yO.m@SA..@QAn.O. + 0x00, 0x01, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x47, 0x06, 0xff, 0x00, 0x07, 0x00, 0x1f, 0x40, 0x1c, // .......G......@. + 0x00, 0x03, 0x02, 0x03, 0x72, 0x00, 0x00, 0x00, 0x02, 0x59, 0x00, 0x02, 0x02, 0x16, 0x4b, 0x00, // ....r....Y....K. + 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, 0x06, 0x18, 0x2b, 0x01, 0x21, 0x11, // ....L.......+.!. + 0x23, 0x11, 0x21, 0x11, 0x33, 0x04, 0x47, 0xfd, 0x29, 0xba, 0x02, 0xd8, 0xb9, 0x05, 0x18, 0xfa, // #.!.3.G.)....... + 0xe8, 0x05, 0xb0, 0x01, 0x4f, 0x00, 0x00, 0x01, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x31, 0x05, 0x77, // ....O........1.w + 0x00, 0x07, 0x00, 0x1f, 0x40, 0x1c, 0x00, 0x03, 0x02, 0x03, 0x72, 0x00, 0x00, 0x00, 0x02, 0x59, // ....@.....r....Y + 0x00, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, // ....K.....L..... + 0x06, 0x18, 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x33, 0x04, 0x31, 0xfd, 0x3f, 0xba, // ..+.!.#.!.3.1.?. + 0x02, 0xc1, 0xba, 0x03, 0xa1, 0xfc, 0x5f, 0x04, 0x3a, 0x01, 0x3d, 0x00, 0x00, 0x01, 0x00, 0xb9, // ......_.:.=..... + 0xfe, 0xe0, 0x04, 0x7f, 0x05, 0xb0, 0x00, 0x1b, 0x00, 0x2c, 0x40, 0x29, 0x00, 0x01, 0x00, 0x04, // .........,@).... + 0x05, 0x01, 0x04, 0x63, 0x00, 0x03, 0x00, 0x02, 0x03, 0x02, 0x5f, 0x00, 0x00, 0x00, 0x06, 0x59, // ...c......_....Y + 0x00, 0x06, 0x06, 0x16, 0x4b, 0x00, 0x05, 0x05, 0x17, 0x05, 0x4c, 0x11, 0x11, 0x26, 0x11, 0x18, // ....K.....L..&.. + 0x21, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x21, 0x11, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, // !....+.!.32..... + 0x02, 0x23, 0x27, 0x32, 0x3e, 0x02, 0x35, 0x26, 0x26, 0x23, 0x23, 0x11, 0x23, 0x11, 0x21, 0x04, // .#'2>.5&&##.#.!. + 0x34, 0xfd, 0x3f, 0xb8, 0x8e, 0xdd, 0x99, 0x50, 0x3d, 0x78, 0xb1, 0x73, 0x02, 0x51, 0x6f, 0x44, // 4.?....P=x.s.QoD + 0x1e, 0x02, 0xcb, 0xce, 0xb8, 0xba, 0x03, 0x7b, 0x05, 0x18, 0xfe, 0x2a, 0x50, 0x95, 0xd6, 0x86, // .......{...*P... + 0x83, 0xcb, 0x8a, 0x49, 0x93, 0x39, 0x68, 0x93, 0x5a, 0xc7, 0xd8, 0xfd, 0x60, 0x05, 0xb0, 0x00, // ...I.9h.Z...`... + 0x00, 0x01, 0x00, 0xb8, 0xfe, 0xe4, 0x04, 0x52, 0x04, 0x3a, 0x00, 0x1d, 0x00, 0x2b, 0x40, 0x28, // .......R.:...+@( + 0x0e, 0x0d, 0x02, 0x03, 0x47, 0x00, 0x01, 0x00, 0x02, 0x03, 0x01, 0x02, 0x63, 0x00, 0x00, 0x00, // ....G.......c... + 0x04, 0x59, 0x00, 0x04, 0x04, 0x18, 0x4b, 0x00, 0x03, 0x03, 0x17, 0x03, 0x4c, 0x1d, 0x1c, 0x1b, // .Y....K.....L... + 0x1a, 0x19, 0x17, 0x21, 0x10, 0x05, 0x06, 0x16, 0x2b, 0x01, 0x21, 0x11, 0x33, 0x32, 0x1e, 0x02, // ...!....+.!.32.. + 0x15, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x11, 0x23, // .....'>.54..##.# + 0x11, 0x21, 0x04, 0x2b, 0xfd, 0x47, 0xda, 0x6f, 0xbd, 0x8b, 0x4f, 0x2c, 0x5e, 0x94, 0x67, 0x30, // .!.+.G.o..O,^.g0 + 0x44, 0x60, 0x3c, 0x1c, 0x33, 0x5a, 0x79, 0x47, 0xda, 0xba, 0x03, 0x73, 0x03, 0xa1, 0xfe, 0xe5, // D`<.3ZyG...s.... + 0x41, 0x79, 0xb1, 0x71, 0x3a, 0x8e, 0x84, 0x67, 0x13, 0x92, 0x12, 0x3b, 0x4f, 0x60, 0x38, 0x4c, // Ay.q:..g...;O`8L + 0x76, 0x4f, 0x29, 0xfe, 0x1c, 0x04, 0x3a, 0x00, 0x00, 0x01, 0x00, 0xae, 0x00, 0x00, 0x04, 0xc4, // vO)...:......... + 0x05, 0xb0, 0x00, 0x14, 0x00, 0x3d, 0x40, 0x3a, 0x01, 0x01, 0x01, 0x06, 0x01, 0x4a, 0x08, 0x01, // .....=@:.....J.. + 0x06, 0x03, 0x01, 0x01, 0x02, 0x06, 0x01, 0x61, 0x0a, 0x09, 0x02, 0x05, 0x05, 0x16, 0x4b, 0x00, // .......a......K. + 0x02, 0x02, 0x07, 0x59, 0x00, 0x07, 0x07, 0x18, 0x4b, 0x04, 0x01, 0x00, 0x00, 0x17, 0x00, 0x4c, // ...Y....K......L + 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x0b, // ................ + 0x06, 0x1d, 0x2b, 0x09, 0x02, 0x23, 0x01, 0x23, 0x15, 0x23, 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, // ..+..#.#.#5#.#.3 + 0x11, 0x33, 0x11, 0x33, 0x11, 0x33, 0x01, 0x04, 0x98, 0xfe, 0xb1, 0x01, 0x7b, 0xe7, 0xfe, 0xba, // .3.3.3......{... + 0x36, 0x95, 0x65, 0xb9, 0xb9, 0x65, 0x95, 0x36, 0x01, 0x29, 0x05, 0xb0, 0xfd, 0x51, 0xfc, 0xff, // 6.e..e.6.)...Q.. + 0x02, 0x94, 0xf5, 0xf5, 0xfd, 0x6c, 0x05, 0xb0, 0xfd, 0x7b, 0x01, 0x01, 0xfe, 0xff, 0x02, 0x85, // .....l...{...... + 0x00, 0x01, 0x00, 0xa3, 0x00, 0x00, 0x04, 0x7e, 0x04, 0x3a, 0x00, 0x14, 0x00, 0x3b, 0x40, 0x38, // .......~.:...;@8 + 0x01, 0x01, 0x01, 0x06, 0x01, 0x4a, 0x08, 0x01, 0x06, 0x03, 0x01, 0x01, 0x02, 0x06, 0x01, 0x61, // .....J.........a + 0x00, 0x07, 0x00, 0x02, 0x00, 0x07, 0x02, 0x61, 0x0a, 0x09, 0x02, 0x05, 0x05, 0x18, 0x4b, 0x04, // .......a......K. + 0x01, 0x00, 0x00, 0x17, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x11, 0x11, 0x11, 0x11, // .....L.......... + 0x11, 0x11, 0x11, 0x11, 0x12, 0x0b, 0x06, 0x1d, 0x2b, 0x09, 0x02, 0x23, 0x01, 0x23, 0x15, 0x23, // ........+..#.#.# + 0x35, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x35, 0x33, 0x15, 0x33, 0x01, 0x04, 0x59, 0xfe, // 5#.#.3.353.3..Y. + 0xae, 0x01, 0x77, 0xea, 0xfe, 0xea, 0x33, 0x94, 0x5a, 0xba, 0xba, 0x5a, 0x94, 0x2c, 0x01, 0x03, // ..w...3.Z..Z.,.. + 0x04, 0x3a, 0xfd, 0xfe, 0xfd, 0xc8, 0x01, 0xcd, 0xc2, 0xc2, 0xfe, 0x33, 0x04, 0x3a, 0xfe, 0x36, // .:.........3.:.6 + 0xd5, 0xd5, 0x01, 0xca, 0x00, 0x01, 0x00, 0x2d, 0x00, 0x00, 0x04, 0xa6, 0x05, 0xb0, 0x00, 0x0e, // .......-........ + 0x00, 0x2d, 0x40, 0x2a, 0x0c, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x00, 0x00, 0x01, 0x04, // .-@*.....J...... + 0x00, 0x61, 0x00, 0x02, 0x02, 0x03, 0x59, 0x05, 0x01, 0x03, 0x03, 0x16, 0x4b, 0x06, 0x01, 0x01, // .a....Y.....K... + 0x01, 0x17, 0x01, 0x4c, 0x12, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, // ...L..........+. + 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x11, 0x33, 0x01, 0x33, 0x01, 0x01, 0x23, 0x02, 0x95, // #.#.!5!.3.3..#.. + 0x6a, 0xb8, 0xfe, 0xba, 0x01, 0xfe, 0x62, 0x01, 0x1e, 0xd3, 0xfe, 0xbb, 0x01, 0x6d, 0xe2, 0x02, // j.....b......m.. + 0x93, 0xfd, 0x6d, 0x05, 0x18, 0x98, 0xfd, 0x7a, 0x02, 0x86, 0xfd, 0x3f, 0xfd, 0x11, 0x00, 0x01, // ..m....z...?.... + 0x00, 0x38, 0x00, 0x00, 0x04, 0xb1, 0x04, 0x3a, 0x00, 0x0e, 0x00, 0x2d, 0x40, 0x2a, 0x0c, 0x01, // .8.....:...-@*.. + 0x00, 0x04, 0x01, 0x4a, 0x00, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x61, 0x00, 0x02, 0x02, 0x03, // ...J.......a.... + 0x59, 0x05, 0x01, 0x03, 0x03, 0x18, 0x4b, 0x06, 0x01, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x12, 0x11, // Y.....K......L.. + 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, 0x21, 0x35, // ........+.#.#.!5 + 0x21, 0x11, 0x33, 0x13, 0x33, 0x01, 0x01, 0x23, 0x02, 0xbc, 0x86, 0xb9, 0xfe, 0xbb, 0x01, 0xfe, // !.3.3..#........ + 0x7f, 0xf9, 0xe0, 0xfe, 0xb7, 0x01, 0x6c, 0xea, 0x01, 0xcd, 0xfe, 0x33, 0x03, 0xa1, 0x99, 0xfe, // ......l....3.... + 0x36, 0x01, 0xca, 0xfd, 0xfe, 0xfd, 0xc8, 0x00, 0x00, 0x01, 0x00, 0x72, 0x00, 0x00, 0x04, 0x9a, // 6..........r.... + 0x05, 0xb0, 0x00, 0x0d, 0x00, 0x27, 0x40, 0x24, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x04, 0x61, // .....'@$.......a + 0x00, 0x02, 0x02, 0x01, 0x59, 0x06, 0x01, 0x01, 0x01, 0x16, 0x4b, 0x05, 0x01, 0x03, 0x03, 0x17, // ....Y.....K..... + 0x03, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x21, 0x11, // .L..........+.!. + 0x21, 0x15, 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x01, 0x2b, 0x01, 0x73, 0x01, // !.!.#.!.#.3.+.s. + 0xfc, 0xfe, 0xbc, 0xb8, 0xfe, 0x8d, 0xb9, 0xb9, 0x03, 0x1f, 0x02, 0x91, 0x98, 0xfa, 0xe8, 0x02, // ................ + 0x87, 0xfd, 0x79, 0x05, 0xb0, 0x00, 0x00, 0x01, 0x00, 0x6e, 0x00, 0x00, 0x04, 0x9c, 0x04, 0x3a, // ..y......n.....: + 0x00, 0x0d, 0x00, 0x27, 0x40, 0x24, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x04, 0x61, 0x00, 0x02, // ...'@$.......a.. + 0x02, 0x01, 0x59, 0x06, 0x01, 0x01, 0x01, 0x18, 0x4b, 0x05, 0x01, 0x03, 0x03, 0x17, 0x03, 0x4c, // ..Y.....K......L + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x21, 0x11, 0x21, 0x15, // ..........+.!.!. + 0x21, 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x01, 0x27, 0x01, 0x7c, 0x01, 0xf9, 0xfe, // !.#.!.#.3.'.|... + 0xc0, 0xb9, 0xfe, 0x84, 0xb9, 0xb9, 0x02, 0x65, 0x01, 0xd5, 0x99, 0xfc, 0x5f, 0x01, 0xce, 0xfe, // .......e...._... + 0x32, 0x04, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x6d, 0xfe, 0xdf, 0x04, 0x9a, 0x05, 0xb0, 0x00, 0x1d, // 2.:....m........ + 0x00, 0x2e, 0x40, 0x2b, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x03, 0x63, 0x00, 0x02, 0x00, 0x01, // ..@+.......c.... + 0x02, 0x01, 0x5f, 0x00, 0x05, 0x05, 0x07, 0x59, 0x00, 0x07, 0x07, 0x16, 0x4b, 0x06, 0x01, 0x04, // .._....Y....K... + 0x04, 0x17, 0x04, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x18, 0x11, 0x18, 0x10, 0x08, 0x06, 0x1c, 0x2b, // ...L...........+ + 0x01, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x27, 0x32, 0x3e, 0x02, 0x35, 0x2e, 0x03, 0x27, // .......#'2>.5..' + 0x11, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, 0x02, 0xe1, 0x6b, 0xa5, 0x70, 0x39, 0x30, 0x61, // .#.!.#.!..k.p90a + 0x90, 0x60, 0x02, 0x3a, 0x4e, 0x2f, 0x13, 0x01, 0x1e, 0x3e, 0x60, 0x43, 0xb9, 0xfe, 0xfd, 0xb8, // .`.:N/...>`C.... + 0x02, 0x74, 0x03, 0x41, 0x02, 0x53, 0x98, 0xd3, 0x81, 0x81, 0xca, 0x8c, 0x4a, 0x93, 0x3b, 0x69, // .t.A.S......J.;i + 0x93, 0x57, 0x5e, 0x98, 0x6b, 0x3b, 0x02, 0xfd, 0x62, 0x05, 0x18, 0xfa, 0xe8, 0x05, 0xb0, 0x00, // .W^.k;..b....... + 0x00, 0x01, 0x00, 0x74, 0xfe, 0xe5, 0x04, 0x7c, 0x04, 0x3a, 0x00, 0x21, 0x00, 0x2f, 0x40, 0x2c, // ...t...|.:.!./@, + 0x0e, 0x0d, 0x02, 0x02, 0x47, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x63, 0x00, 0x03, 0x03, // ....G.......c... + 0x05, 0x59, 0x00, 0x05, 0x05, 0x18, 0x4b, 0x04, 0x01, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x21, 0x20, // .Y....K......L! + 0x1f, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, 0x18, 0x17, 0x20, 0x06, 0x06, 0x15, 0x2b, 0x01, 0x33, 0x32, // ........ ...+.32 + 0x1e, 0x02, 0x15, 0x0e, 0x05, 0x07, 0x27, 0x3e, 0x03, 0x35, 0x2e, 0x03, 0x23, 0x23, 0x11, 0x23, // ......'>.5..##.# + 0x11, 0x23, 0x11, 0x23, 0x11, 0x21, 0x02, 0xcd, 0x08, 0x5d, 0x9c, 0x70, 0x3e, 0x01, 0x10, 0x22, // .#.#.!...].p>.." + 0x35, 0x4b, 0x62, 0x3d, 0x30, 0x39, 0x4d, 0x2f, 0x14, 0x01, 0x22, 0x3e, 0x57, 0x36, 0x08, 0xb9, // 5Kb=09M/..">W6.. + 0xe7, 0xb9, 0x02, 0x59, 0x02, 0x85, 0x42, 0x7c, 0xb0, 0x6d, 0x26, 0x59, 0x5c, 0x59, 0x4c, 0x38, // ...Y..B|.m&Y.YL8 + 0x0d, 0x92, 0x12, 0x3c, 0x4f, 0x60, 0x36, 0x49, 0x75, 0x50, 0x2b, 0xfe, 0x1d, 0x03, 0xa1, 0xfc, // ....3."....... + 0x33, 0x32, 0x36, 0x37, 0x26, 0x26, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // 3267&&5.4>.32... + 0x11, 0x06, 0x06, 0x07, 0x16, 0x16, 0x33, 0x01, 0x14, 0x16, 0x17, 0x36, 0x36, 0x35, 0x11, 0x34, // ......3....665.4 + 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x04, 0x50, 0x52, 0x92, 0x3f, 0x30, 0x6d, 0x3c, 0x71, // ..#"....PR.?0m.3."....... + 0x33, 0x32, 0x37, 0x26, 0x26, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, // 327&&554>.32.... + 0x14, 0x06, 0x07, 0x16, 0x33, 0x01, 0x14, 0x16, 0x17, 0x36, 0x36, 0x37, 0x35, 0x34, 0x2e, 0x02, // ....3....66754.. + 0x23, 0x22, 0x0e, 0x02, 0x15, 0x04, 0x8b, 0x5a, 0x9e, 0x45, 0x39, 0x83, 0x4a, 0x6f, 0xb5, 0x81, // #".....Z.E9.Jo.. + 0x47, 0x32, 0x5c, 0x82, 0x50, 0x28, 0x3e, 0x2a, 0x16, 0x2a, 0x4e, 0x72, 0x48, 0x2f, 0x2c, 0x5e, // G2..P(>*.*NrH/,^ + 0x65, 0x2b, 0x51, 0x76, 0x4b, 0x4b, 0x77, 0x51, 0x2b, 0x42, 0x3e, 0x4f, 0x61, 0xfe, 0x0f, 0x51, // e+QvKKwQ+B>Oa..Q + 0x4d, 0x33, 0x36, 0x01, 0x10, 0x21, 0x32, 0x22, 0x22, 0x31, 0x20, 0x10, 0x0c, 0x01, 0x1d, 0x1c, // M36..!2""1 ..... + 0x20, 0x23, 0x5b, 0x9f, 0xd8, 0x7c, 0x3a, 0x63, 0xad, 0x81, 0x4a, 0x9e, 0x31, 0x55, 0x73, 0x42, // #[..|:c..J.1UsB + 0x3c, 0x5b, 0x9e, 0x75, 0x43, 0x0c, 0x4f, 0xd9, 0x80, 0x68, 0x5b, 0x9c, 0x73, 0x41, 0x47, 0x7a, // <[.uC.O..h[.sAGz + 0xa3, 0x5c, 0x69, 0x71, 0xc4, 0x4b, 0x15, 0x01, 0xa9, 0x69, 0xa7, 0x39, 0x39, 0x9e, 0x5e, 0x6c, // ..iq.K...i.99.^l + 0x3a, 0x68, 0x4f, 0x2f, 0x29, 0x48, 0x62, 0x39, 0x00, 0x01, 0x00, 0x39, 0xfe, 0xa1, 0x04, 0xb6, // :hO/)Hb9...9.... + 0x05, 0xb0, 0x00, 0x13, 0x00, 0x2b, 0x40, 0x28, 0x00, 0x06, 0x03, 0x06, 0x52, 0x02, 0x01, 0x00, // .....+@(....R... + 0x00, 0x01, 0x59, 0x04, 0x01, 0x01, 0x01, 0x16, 0x4b, 0x05, 0x01, 0x03, 0x03, 0x07, 0x5a, 0x00, // ..Y.....K.....Z. + 0x07, 0x07, 0x17, 0x07, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x51, 0x10, 0x08, 0x06, 0x1c, // ....L......Q.... + 0x2b, 0x01, 0x21, 0x35, 0x21, 0x35, 0x33, 0x15, 0x33, 0x15, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, // +.!5!53.3.#.!.3. + 0x33, 0x03, 0x23, 0x11, 0x21, 0x01, 0x46, 0xfe, 0xf3, 0x01, 0x0d, 0xb9, 0xee, 0xee, 0x01, 0x6d, // 3.#.!.F........m + 0xb9, 0x91, 0x12, 0xa5, 0xfd, 0x47, 0x05, 0x18, 0x97, 0x01, 0x01, 0x97, 0xfb, 0x7f, 0x05, 0x19, // .....G.......... + 0xfa, 0xec, 0xfe, 0x05, 0x01, 0x5f, 0x00, 0x01, 0x00, 0x34, 0xfe, 0xbf, 0x04, 0x8b, 0x04, 0x3a, // ....._...4.....: + 0x00, 0x0f, 0x00, 0x2b, 0x40, 0x28, 0x00, 0x06, 0x03, 0x06, 0x52, 0x02, 0x01, 0x00, 0x00, 0x01, // ...+@(....R..... + 0x59, 0x04, 0x01, 0x01, 0x01, 0x18, 0x4b, 0x05, 0x01, 0x03, 0x03, 0x07, 0x5a, 0x00, 0x07, 0x07, // Y.....K.....Z... + 0x17, 0x07, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x08, 0x06, 0x1c, 0x2b, 0x01, // ..L...........+. + 0x23, 0x35, 0x21, 0x15, 0x23, 0x11, 0x21, 0x11, 0x33, 0x11, 0x33, 0x03, 0x23, 0x11, 0x21, 0x01, // #5!.#.!.3.3.#.!. + 0x1c, 0xe8, 0x02, 0x85, 0xe4, 0x01, 0x7d, 0xb9, 0x80, 0x12, 0xa6, 0xfd, 0x49, 0x03, 0xa3, 0x97, // ......}.....I... + 0x97, 0xfc, 0xf4, 0x03, 0xa3, 0xfc, 0x5d, 0xfe, 0x28, 0x01, 0x41, 0x00, 0x00, 0x02, 0x00, 0xab, // ......].(.A..... + 0x00, 0x00, 0x04, 0x27, 0x05, 0xb0, 0x00, 0x03, 0x00, 0x1d, 0x00, 0x72, 0x40, 0x0a, 0x1c, 0x01, // ...'.......r@... + 0x05, 0x01, 0x07, 0x01, 0x03, 0x05, 0x02, 0x4a, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x24, 0x00, // .......JK..PX@$. + 0x01, 0x04, 0x05, 0x04, 0x01, 0x05, 0x70, 0x00, 0x00, 0x03, 0x02, 0x03, 0x00, 0x68, 0x00, 0x05, // ......p......h.. + 0x00, 0x03, 0x00, 0x05, 0x03, 0x64, 0x07, 0x06, 0x02, 0x04, 0x04, 0x16, 0x4b, 0x00, 0x02, 0x02, // .....d......K... + 0x17, 0x02, 0x4c, 0x1b, 0x40, 0x25, 0x00, 0x01, 0x04, 0x05, 0x04, 0x01, 0x05, 0x70, 0x00, 0x00, // ..L.@%.......p.. + 0x03, 0x02, 0x03, 0x00, 0x02, 0x70, 0x00, 0x05, 0x00, 0x03, 0x00, 0x05, 0x03, 0x64, 0x07, 0x06, // .....p.......d.. + 0x02, 0x04, 0x04, 0x16, 0x4b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x59, 0x40, 0x0f, 0x04, 0x04, // ....K.....LY@... + 0x04, 0x1d, 0x04, 0x1d, 0x25, 0x15, 0x25, 0x12, 0x11, 0x10, 0x08, 0x06, 0x1a, 0x2b, 0x01, 0x23, // ....%.%......+.# + 0x11, 0x33, 0x01, 0x11, 0x23, 0x11, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x33, 0x11, // .3..#...#"..5.3. + 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x37, 0x11, 0x02, 0xa6, 0x95, 0x95, 0x01, 0x81, 0xb9, 0x21, // ...3267........! + 0x42, 0x47, 0x51, 0x30, 0x61, 0x98, 0x68, 0x37, 0xb9, 0x1b, 0x37, 0x54, 0x39, 0x53, 0x90, 0x48, // BGQ0a.h7..7T9S.H + 0x01, 0x35, 0x02, 0xbc, 0x01, 0xbf, 0xfa, 0x50, 0x02, 0x5b, 0x0c, 0x12, 0x0e, 0x07, 0x31, 0x6c, // .5.....P.[....1l + 0xaa, 0x79, 0x01, 0xc8, 0xfe, 0x38, 0x55, 0x71, 0x45, 0x1d, 0x1d, 0x18, 0x02, 0xbb, 0x00, 0x02, // .y...8UqE....... + 0x00, 0x92, 0x00, 0x00, 0x04, 0x2c, 0x04, 0x3a, 0x00, 0x03, 0x00, 0x19, 0x00, 0x96, 0x40, 0x0a, // .....,.:......@. + 0x17, 0x01, 0x05, 0x01, 0x06, 0x01, 0x03, 0x05, 0x02, 0x4a, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, // .........JK..PX@ + 0x22, 0x00, 0x01, 0x04, 0x05, 0x05, 0x01, 0x68, 0x00, 0x00, 0x03, 0x02, 0x03, 0x00, 0x68, 0x00, // "......h......h. + 0x05, 0x00, 0x03, 0x00, 0x05, 0x03, 0x64, 0x06, 0x01, 0x04, 0x04, 0x18, 0x4b, 0x00, 0x02, 0x02, // ......d.....K... + 0x17, 0x02, 0x4c, 0x1b, 0x4b, 0xb0, 0x12, 0x50, 0x58, 0x40, 0x23, 0x00, 0x01, 0x04, 0x05, 0x04, // ..L.K..PX@#..... + 0x01, 0x05, 0x70, 0x00, 0x00, 0x03, 0x02, 0x03, 0x00, 0x68, 0x00, 0x05, 0x00, 0x03, 0x00, 0x05, // ..p......h...... + 0x03, 0x64, 0x06, 0x01, 0x04, 0x04, 0x18, 0x4b, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x1b, 0x40, // .d.....K.....L.@ + 0x24, 0x00, 0x01, 0x04, 0x05, 0x04, 0x01, 0x05, 0x70, 0x00, 0x00, 0x03, 0x02, 0x03, 0x00, 0x02, // $.......p....... + 0x70, 0x00, 0x05, 0x00, 0x03, 0x00, 0x05, 0x03, 0x64, 0x06, 0x01, 0x04, 0x04, 0x18, 0x4b, 0x00, // p.......d.....K. + 0x02, 0x02, 0x17, 0x02, 0x4c, 0x59, 0x59, 0x40, 0x0a, 0x13, 0x23, 0x15, 0x23, 0x11, 0x11, 0x10, // ....LYY@..#.#... + 0x07, 0x06, 0x1b, 0x2b, 0x25, 0x23, 0x11, 0x33, 0x01, 0x23, 0x11, 0x06, 0x06, 0x23, 0x22, 0x2e, // ...+%#.3.#...#". + 0x02, 0x35, 0x11, 0x33, 0x11, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x02, 0xaf, 0x96, // .5.3...3267.3... + 0x96, 0x01, 0x7d, 0xb9, 0x44, 0x91, 0x55, 0x64, 0xa2, 0x73, 0x3e, 0xb9, 0x01, 0x83, 0x7a, 0x51, // ..}.D.Ud.s>...zQ + 0x94, 0x45, 0xb9, 0xd3, 0x02, 0x36, 0xfc, 0xf7, 0x01, 0x8b, 0x11, 0x12, 0x32, 0x65, 0x99, 0x67, // .E...6......2e.g + 0x01, 0x3b, 0xfe, 0xc5, 0x85, 0x7a, 0x12, 0x11, 0x02, 0x17, 0x00, 0x01, 0x00, 0xe3, 0x00, 0x00, // .;...z.......... + 0x04, 0x5f, 0x05, 0xb0, 0x00, 0x19, 0x00, 0x2f, 0x40, 0x2c, 0x03, 0x01, 0x03, 0x01, 0x18, 0x01, // ._...../@,...... + 0x02, 0x03, 0x02, 0x4a, 0x00, 0x01, 0x00, 0x03, 0x02, 0x01, 0x03, 0x63, 0x00, 0x00, 0x00, 0x16, // ...J.......c.... + 0x4b, 0x05, 0x04, 0x02, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x19, 0x25, // K.......L......% + 0x15, 0x25, 0x11, 0x06, 0x06, 0x18, 0x2b, 0x33, 0x11, 0x33, 0x11, 0x3e, 0x03, 0x33, 0x32, 0x1e, // .%....+3.3.>.32. + 0x02, 0x15, 0x03, 0x23, 0x11, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x11, 0xe3, 0xb9, 0x21, // ...#.4..#".....! + 0x41, 0x47, 0x51, 0x30, 0x61, 0x98, 0x69, 0x37, 0x01, 0xb9, 0x1b, 0x37, 0x54, 0x39, 0x53, 0x90, // AGQ0a.i7...7T9S. + 0x47, 0x05, 0xb0, 0xfd, 0xa3, 0x0c, 0x13, 0x0e, 0x07, 0x31, 0x6c, 0xaa, 0x79, 0xfe, 0x39, 0x01, // G........1l.y.9. + 0xc7, 0x55, 0x71, 0x45, 0x1d, 0x1d, 0x18, 0xfd, 0x46, 0x00, 0x00, 0x02, 0x00, 0x26, 0xff, 0xea, // .UqE....F....&.. + 0x04, 0x89, 0x05, 0xc3, 0x00, 0x29, 0x00, 0x34, 0x00, 0x52, 0x40, 0x4f, 0x0f, 0x01, 0x05, 0x01, // .....).4.R@O.... + 0x06, 0x01, 0x03, 0x05, 0x24, 0x01, 0x04, 0x03, 0x25, 0x01, 0x00, 0x04, 0x04, 0x4a, 0x08, 0x01, // ....$...%....J.. + 0x05, 0x00, 0x03, 0x04, 0x05, 0x03, 0x61, 0x00, 0x06, 0x06, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1d, // ......a....[.... + 0x4b, 0x00, 0x01, 0x01, 0x18, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x07, 0x01, 0x00, 0x00, 0x1e, // K....K....[..... + 0x00, 0x4c, 0x2b, 0x2a, 0x01, 0x00, 0x32, 0x30, 0x2a, 0x34, 0x2b, 0x34, 0x20, 0x1e, 0x19, 0x18, // .L+*..20*4+4 ... + 0x15, 0x13, 0x0c, 0x0b, 0x00, 0x29, 0x01, 0x29, 0x09, 0x06, 0x14, 0x2b, 0x05, 0x22, 0x2e, 0x02, // .....).)...+.".. + 0x35, 0x35, 0x2e, 0x03, 0x35, 0x33, 0x16, 0x16, 0x17, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x12, 0x11, // 55..53...4>.32.. + 0x15, 0x21, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x17, 0x0e, 0x03, 0x01, 0x21, // .!....32>.7....! + 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x03, 0x2a, 0x7c, 0xbf, 0x82, 0x43, 0x41, 0x61, // 54..#"...*|..CAa + 0x41, 0x21, 0x95, 0x01, 0x34, 0x3a, 0x46, 0x7a, 0xa5, 0x5f, 0xd5, 0xc6, 0xfd, 0x5a, 0x24, 0x4f, // A!..4:Fz._...Z$O + 0x7c, 0x58, 0x2f, 0x4d, 0x41, 0x35, 0x16, 0x2f, 0x0f, 0x35, 0x4c, 0x66, 0xfe, 0x78, 0x01, 0xed, // |X/MA5./.5Lf.x.. + 0x15, 0x33, 0x57, 0x43, 0x7f, 0x8c, 0x16, 0x58, 0x9d, 0xd7, 0x80, 0x90, 0x0c, 0x3f, 0x5f, 0x7e, // .3WC...X.....?_~ + 0x4b, 0x54, 0x78, 0x19, 0x90, 0xe6, 0xa2, 0x57, 0xfe, 0xd5, 0xfe, 0xe2, 0xbc, 0x88, 0x5a, 0x9f, // KTx....W......Z. + 0x77, 0x46, 0x10, 0x1a, 0x1e, 0x0e, 0x88, 0x0c, 0x23, 0x1f, 0x16, 0x03, 0x58, 0x70, 0x4e, 0x89, // wF......#...XpN. + 0x66, 0x3c, 0xf3, 0xe6, 0x00, 0x02, 0x00, 0x26, 0xff, 0xec, 0x04, 0x85, 0x04, 0x4e, 0x00, 0x26, // f<.....&.....N.& + 0x00, 0x32, 0x00, 0x55, 0x40, 0x52, 0x0d, 0x01, 0x06, 0x01, 0x05, 0x01, 0x03, 0x06, 0x21, 0x01, // .2.U@R........!. + 0x04, 0x03, 0x22, 0x01, 0x00, 0x04, 0x04, 0x4a, 0x00, 0x01, 0x05, 0x06, 0x05, 0x01, 0x06, 0x70, // .."....J.......p + 0x00, 0x06, 0x00, 0x03, 0x04, 0x06, 0x03, 0x61, 0x08, 0x01, 0x05, 0x05, 0x02, 0x5b, 0x00, 0x02, // .......a.....[.. + 0x02, 0x1f, 0x4b, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x07, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x4c, 0x28, // ..K....[......L( + 0x27, 0x01, 0x00, 0x2d, 0x2c, 0x27, 0x32, 0x28, 0x32, 0x1f, 0x1d, 0x19, 0x18, 0x13, 0x11, 0x0a, // '..-,'2(2....... + 0x09, 0x00, 0x26, 0x01, 0x26, 0x09, 0x06, 0x14, 0x2b, 0x05, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x26, // ..&.&...+."..55& + 0x26, 0x35, 0x33, 0x16, 0x16, 0x17, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x21, 0x1e, // &53...>.32....!. + 0x03, 0x33, 0x32, 0x36, 0x37, 0x17, 0x0e, 0x03, 0x03, 0x22, 0x0e, 0x02, 0x07, 0x21, 0x35, 0x34, // .3267...."...!54 + 0x2e, 0x02, 0x02, 0xfe, 0x6e, 0xaf, 0x7a, 0x42, 0x80, 0x7f, 0x94, 0x01, 0x36, 0x3b, 0x0f, 0x50, // ....n.zB....6;.P + 0x74, 0x91, 0x50, 0x6b, 0x9f, 0x68, 0x33, 0xfd, 0x5a, 0x03, 0x26, 0x48, 0x69, 0x45, 0x64, 0x8b, // t.Pk.h3.Z.&HiEd. + 0x30, 0x4a, 0x18, 0x43, 0x59, 0x70, 0x63, 0x32, 0x54, 0x40, 0x2c, 0x09, 0x01, 0xe7, 0x1c, 0x3a, // 0J.CYpc2T@,....: + 0x59, 0x14, 0x51, 0x91, 0xc6, 0x75, 0x01, 0x17, 0xb3, 0x8e, 0x4d, 0x6b, 0x15, 0x61, 0xa3, 0x75, // Y.Q..u....Mk.a.u + 0x40, 0x49, 0x81, 0xb2, 0x69, 0x78, 0x4c, 0x85, 0x64, 0x3a, 0x3f, 0x2e, 0x7c, 0x19, 0x30, 0x26, // @I..ixL.d:?.|.0& + 0x18, 0x03, 0xca, 0x2e, 0x51, 0x6e, 0x40, 0x18, 0x36, 0x64, 0x4d, 0x2e, 0x00, 0x01, 0x00, 0xc8, // ....Qn@.6dM..... + 0xfe, 0xda, 0x04, 0x8c, 0x05, 0xb0, 0x00, 0x1e, 0x00, 0x28, 0x40, 0x25, 0x00, 0x05, 0x00, 0x02, // .........(@%.... + 0x03, 0x05, 0x02, 0x63, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x5f, 0x06, 0x01, 0x04, 0x04, 0x16, // ...c......_..... + 0x4b, 0x00, 0x03, 0x03, 0x17, 0x03, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x28, 0x11, 0x19, 0x07, 0x06, // K.....L....(.... + 0x1b, 0x2b, 0x01, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x27, 0x32, 0x3e, 0x02, 0x35, 0x2e, // .+.......#'2>.5. + 0x03, 0x23, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, 0x01, 0x33, 0x02, 0xca, 0x6c, 0xa8, 0x72, // .##.#.3.3.3..l.r + 0x3c, 0x3d, 0x76, 0xaf, 0x73, 0x02, 0x50, 0x6d, 0x44, 0x1d, 0x01, 0x2e, 0x5b, 0x8b, 0x5d, 0xe0, // <=v.s.PmD...[.]. + 0xb9, 0xb9, 0x8e, 0x01, 0x9b, 0xd7, 0x03, 0x35, 0x0f, 0x5d, 0x92, 0xc5, 0x77, 0x83, 0xca, 0x8b, // .......5.]..w... + 0x49, 0x92, 0x3a, 0x69, 0x92, 0x5a, 0x63, 0x9a, 0x6a, 0x38, 0xfd, 0x66, 0x05, 0xb0, 0xfd, 0x8c, // I.:i.Zc.j8.f.... + 0x02, 0x74, 0x00, 0x01, 0x00, 0xb4, 0xfe, 0xfe, 0x04, 0x3c, 0x04, 0x3a, 0x00, 0x1e, 0x00, 0x29, // .t.......<.:...) + 0x40, 0x26, 0x0b, 0x0a, 0x02, 0x01, 0x47, 0x00, 0x03, 0x00, 0x00, 0x01, 0x03, 0x00, 0x63, 0x04, // @&....G.......c. + 0x01, 0x02, 0x02, 0x18, 0x4b, 0x00, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x1e, 0x1d, 0x1c, 0x1b, 0x1a, // ....K.....L..... + 0x19, 0x18, 0x17, 0x16, 0x14, 0x05, 0x06, 0x14, 0x2b, 0x01, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, // ........+....... + 0x07, 0x27, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x11, 0x23, 0x11, 0x33, 0x11, 0x33, // .'>.54..##.#.3.3 + 0x01, 0x33, 0x02, 0xaf, 0x56, 0x8f, 0x66, 0x39, 0x2a, 0x58, 0x8b, 0x61, 0x31, 0x3f, 0x57, 0x38, // .3..V.f9*X.a1?W8 + 0x19, 0x32, 0x57, 0x77, 0x47, 0xc7, 0xb9, 0xb9, 0x77, 0x01, 0x78, 0xe0, 0x02, 0x64, 0x0e, 0x44, // .2WwG...w.x..d.D + 0x6d, 0x96, 0x60, 0x38, 0x88, 0x7d, 0x62, 0x12, 0x92, 0x10, 0x38, 0x49, 0x5b, 0x33, 0x4c, 0x6d, // m.`8.}b...8I[3Lm + 0x45, 0x20, 0xfe, 0x33, 0x04, 0x3a, 0xfe, 0x36, 0x01, 0xca, 0x00, 0x01, 0x00, 0xb6, 0xfe, 0x4b, // E .3.:.6.......K + 0x04, 0x19, 0x05, 0xb0, 0x00, 0x1b, 0x00, 0x3b, 0x40, 0x38, 0x0e, 0x01, 0x03, 0x05, 0x0d, 0x01, // .......;@8...... + 0x02, 0x03, 0x02, 0x4a, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x04, 0x61, 0x07, 0x06, 0x02, 0x01, // ...J.......a.... + 0x01, 0x16, 0x4b, 0x00, 0x05, 0x05, 0x17, 0x4b, 0x00, 0x03, 0x03, 0x02, 0x5b, 0x00, 0x02, 0x02, // ..K....K....[... + 0x21, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x1b, 0x11, 0x13, 0x27, 0x25, 0x11, 0x11, 0x08, // !.L........'%... + 0x06, 0x1a, 0x2b, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, // ..+..!.3....#"&' + 0x37, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x23, 0x11, 0x01, 0x6f, 0x01, 0xf1, // 7..3265.!.#..o.. + 0xb9, 0x2a, 0x51, 0x76, 0x4c, 0x1d, 0x34, 0x1d, 0x0e, 0x08, 0x1b, 0x1d, 0x1a, 0x06, 0x41, 0x43, // .*QvL.4.......AC + 0xfe, 0x0f, 0xb9, 0x05, 0xb0, 0xfd, 0x6c, 0x02, 0x94, 0xf9, 0xf7, 0x52, 0x81, 0x5a, 0x2f, 0x08, // ......l....R.Z/. + 0x0a, 0x93, 0x03, 0x05, 0x03, 0x02, 0x6d, 0x57, 0x02, 0xde, 0xfd, 0x7b, 0x05, 0xb0, 0x00, 0x01, // ......mW...{.... + 0x00, 0xb3, 0xfe, 0x4b, 0x04, 0x16, 0x04, 0x3a, 0x00, 0x1b, 0x00, 0x3b, 0x40, 0x38, 0x0e, 0x01, // ...K...:...;@8.. + 0x03, 0x05, 0x0d, 0x01, 0x02, 0x03, 0x02, 0x4a, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x04, 0x61, // .......J.......a + 0x07, 0x06, 0x02, 0x01, 0x01, 0x18, 0x4b, 0x00, 0x05, 0x05, 0x17, 0x4b, 0x00, 0x03, 0x03, 0x02, // ......K....K.... + 0x5b, 0x00, 0x02, 0x02, 0x21, 0x02, 0x4c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x1b, 0x11, 0x13, 0x27, // [...!.L........' + 0x25, 0x11, 0x11, 0x08, 0x06, 0x1a, 0x2b, 0x01, 0x11, 0x21, 0x11, 0x33, 0x11, 0x14, 0x0e, 0x02, // %.....+..!.3.... + 0x23, 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x11, 0x21, 0x11, 0x23, 0x11, // #"&'7..3265.!.#. + 0x01, 0x6c, 0x01, 0xf1, 0xb9, 0x2c, 0x52, 0x78, 0x4c, 0x1e, 0x35, 0x1d, 0x0e, 0x08, 0x1c, 0x1d, // .l...,RxL.5..... + 0x1a, 0x07, 0x42, 0x47, 0xfe, 0x0f, 0xb9, 0x04, 0x3a, 0xfe, 0x2b, 0x01, 0xd5, 0xfb, 0x6d, 0x53, // ..BG....:.+...mS + 0x81, 0x59, 0x2f, 0x08, 0x0a, 0x93, 0x03, 0x05, 0x03, 0x02, 0x6a, 0x5a, 0x02, 0x27, 0xfe, 0x32, // .Y/.......jZ.'.2 + 0x04, 0x3a, 0x00, 0x02, 0x00, 0x5a, 0xff, 0xeb, 0x04, 0x57, 0x05, 0xc4, 0x00, 0x22, 0x00, 0x2e, // .:...Z...W...".. + 0x00, 0x43, 0x40, 0x40, 0x1e, 0x01, 0x03, 0x00, 0x1d, 0x01, 0x02, 0x03, 0x02, 0x4a, 0x00, 0x02, // .C@@.........J.. + 0x00, 0x05, 0x04, 0x02, 0x05, 0x61, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x06, 0x01, 0x00, 0x00, 0x1d, // .....a....[..... + 0x4b, 0x07, 0x01, 0x04, 0x04, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x1e, 0x01, 0x4c, 0x24, 0x23, 0x01, // K.....[.....L$#. + 0x00, 0x29, 0x28, 0x23, 0x2e, 0x24, 0x2e, 0x19, 0x17, 0x12, 0x11, 0x0c, 0x0a, 0x00, 0x22, 0x01, // .)(#.$........". + 0x22, 0x08, 0x06, 0x14, 0x2b, 0x01, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x27, 0x22, // "...+.2.......'" + 0x2e, 0x02, 0x35, 0x35, 0x21, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x27, 0x3e, // ..55!54..#"...'> + 0x03, 0x13, 0x32, 0x3e, 0x02, 0x37, 0x21, 0x15, 0x14, 0x1e, 0x02, 0x02, 0x3e, 0x82, 0xc8, 0x89, // ..2>.7!.....>... + 0x46, 0x4f, 0x8b, 0xbd, 0x6f, 0x7e, 0xbc, 0x7e, 0x3f, 0x03, 0x44, 0x27, 0x55, 0x86, 0x5e, 0x35, // FO..o~.~?.D'U.^5 + 0x59, 0x4a, 0x3d, 0x19, 0x2f, 0x11, 0x3b, 0x57, 0x72, 0x5b, 0x51, 0x7b, 0x54, 0x2c, 0x01, 0xfd, // YJ=./.;Wr[Q{T,.. + 0x75, 0x21, 0x4b, 0x79, 0x05, 0xc4, 0x5f, 0xa8, 0xe7, 0x88, 0xda, 0x8c, 0xee, 0xae, 0x61, 0x01, // u!Ky.._.......a. + 0x56, 0x9f, 0xe0, 0x8a, 0xa6, 0x5d, 0x62, 0xae, 0x83, 0x4c, 0x10, 0x19, 0x1f, 0x0e, 0x88, 0x0c, // V....]b..L...... + 0x23, 0x20, 0x16, 0xfa, 0xbe, 0x4f, 0x86, 0xb3, 0x63, 0x5a, 0x53, 0x92, 0x6d, 0x3f, 0x00, 0x01, // # ...O..cZS.m?.. + 0x00, 0x94, 0xff, 0xeb, 0x04, 0x52, 0x05, 0xb0, 0x00, 0x24, 0x00, 0x3c, 0x40, 0x39, 0x04, 0x01, // .....R...$.<@9.. + 0x00, 0x01, 0x24, 0x01, 0x02, 0x00, 0x02, 0x4a, 0x00, 0x04, 0x06, 0x05, 0x06, 0x04, 0x05, 0x70, // ..$....J.......p + 0x00, 0x02, 0x00, 0x06, 0x04, 0x02, 0x06, 0x63, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, // .......c....Y... + 0x16, 0x4b, 0x00, 0x05, 0x05, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1e, 0x03, 0x4c, 0x26, 0x24, 0x14, // .K....[.....L&$. + 0x28, 0x12, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x17, 0x01, 0x1e, 0x03, // (......+.!5!.... + 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, // ....#"..53...32> + 0x02, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x03, 0x4a, 0xfd, 0x74, 0x03, 0x65, 0x01, 0xfe, 0x65, // .54&##5.J.t.e..e + 0x6c, 0xaa, 0x75, 0x3e, 0x49, 0x83, 0xb3, 0x6a, 0x57, 0xa9, 0x84, 0x51, 0xb9, 0x2a, 0x4a, 0x69, // l.u>I..jW..Q.*Ji + 0x3f, 0x47, 0x71, 0x4e, 0x2a, 0xa7, 0x9f, 0x8f, 0x05, 0x18, 0x98, 0x76, 0xfe, 0x14, 0x06, 0x40, // ?GqN*......v...@ + 0x6f, 0x9f, 0x64, 0x66, 0x9e, 0x6e, 0x39, 0x32, 0x68, 0xa0, 0x6f, 0x39, 0x63, 0x4b, 0x2b, 0x29, // o.df.n92h.o9cK+) + 0x48, 0x64, 0x3b, 0x9c, 0x8e, 0x97, 0x00, 0x01, 0x00, 0x89, 0xfe, 0x75, 0x04, 0x48, 0x04, 0x3a, // Hd;........u.H.: + 0x00, 0x24, 0x00, 0x69, 0x40, 0x0b, 0x04, 0x01, 0x00, 0x01, 0x24, 0x05, 0x02, 0x05, 0x00, 0x02, // .$.i@.....$..... + 0x4a, 0x4b, 0xb0, 0x30, 0x50, 0x58, 0x40, 0x24, 0x00, 0x05, 0x00, 0x03, 0x00, 0x05, 0x03, 0x70, // JK.0PX@$.......p + 0x00, 0x03, 0x04, 0x00, 0x03, 0x04, 0x6e, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x18, // ......n....Y.... + 0x4b, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1a, 0x02, 0x4c, 0x1b, 0x40, 0x21, 0x00, // K....[.....L.@!. + 0x05, 0x00, 0x03, 0x00, 0x05, 0x03, 0x70, 0x00, 0x03, 0x04, 0x00, 0x03, 0x04, 0x6e, 0x00, 0x04, // ......p......n.. + 0x00, 0x02, 0x04, 0x02, 0x5f, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x18, 0x00, 0x4c, // ...._....Y.....L + 0x59, 0x40, 0x09, 0x26, 0x24, 0x14, 0x2b, 0x11, 0x10, 0x06, 0x06, 0x1a, 0x2b, 0x01, 0x21, 0x35, // Y@.&$.+.....+.!5 + 0x21, 0x17, 0x01, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, // !........#"..53. + 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x03, 0x2c, 0xfd, 0x88, // ..32>.54&##5.,.. + 0x03, 0x65, 0x01, 0xfe, 0x72, 0x69, 0xa5, 0x72, 0x3c, 0x49, 0x83, 0xb4, 0x6a, 0x57, 0xa8, 0x84, // .e..ri.r.3..! + 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x03, 0x77, 0xb9, 0xfe, 0x18, 0x75, 0xb5, 0x7c, // "......3.w...u.| + 0x41, 0x41, 0x7c, 0xb5, 0x75, 0x01, 0x2f, 0xfe, 0xd1, 0x4e, 0x72, 0x4a, 0x23, 0x23, 0x4a, 0x72, // AA|.u./..NrJ##Jr + 0x4e, 0x03, 0x6d, 0x02, 0x43, 0xfa, 0x50, 0x42, 0x76, 0xa3, 0x60, 0x61, 0xa0, 0x72, 0x3f, 0xfd, // N.m.C.PBv.`a.r?. + 0x2a, 0x02, 0x3f, 0x2e, 0x4d, 0x66, 0x38, 0x39, 0x6a, 0x52, 0x31, 0x00, 0x00, 0x02, 0x00, 0x4d, // *.?.Mf89jR1....M + 0x00, 0x00, 0x04, 0x8d, 0x05, 0xb0, 0x00, 0x20, 0x00, 0x2d, 0x00, 0x66, 0x4b, 0xb0, 0x17, 0x50, // ....... .-.fK..P + 0x58, 0x40, 0x1c, 0x04, 0x01, 0x01, 0x00, 0x05, 0x03, 0x01, 0x05, 0x63, 0x00, 0x02, 0x02, 0x16, // X@.........c.... + 0x4b, 0x08, 0x06, 0x02, 0x03, 0x03, 0x00, 0x5c, 0x07, 0x01, 0x00, 0x00, 0x17, 0x00, 0x4c, 0x1b, // K.............L. + 0x40, 0x23, 0x00, 0x04, 0x01, 0x05, 0x01, 0x04, 0x05, 0x70, 0x00, 0x01, 0x00, 0x05, 0x03, 0x01, // @#.......p...... + 0x05, 0x63, 0x00, 0x02, 0x02, 0x16, 0x4b, 0x08, 0x06, 0x02, 0x03, 0x03, 0x00, 0x5c, 0x07, 0x01, // .c....K......... + 0x00, 0x00, 0x17, 0x00, 0x4c, 0x59, 0x40, 0x19, 0x21, 0x21, 0x01, 0x00, 0x21, 0x2d, 0x21, 0x2c, // ....LY@.!!..!-!, + 0x24, 0x22, 0x18, 0x17, 0x10, 0x0e, 0x0d, 0x0c, 0x0b, 0x09, 0x00, 0x20, 0x01, 0x1f, 0x09, 0x06, // $"......... .... + 0x14, 0x2b, 0x21, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x33, 0x11, 0x33, 0x11, 0x37, // .+!"..54>.33.3.7 + 0x3e, 0x03, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x0e, 0x03, 0x23, 0x27, 0x11, 0x23, // >.76&'3.....#'.# + 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x01, 0xcf, 0x5e, 0x90, 0x62, 0x32, 0x32, 0x62, // "......3..^.b22b + 0x90, 0x5e, 0x72, 0xb9, 0x31, 0x29, 0x3d, 0x2a, 0x16, 0x01, 0x02, 0x20, 0x1d, 0xb3, 0x1b, 0x28, // .^r.1)=*... ...( + 0x02, 0x02, 0x39, 0x5f, 0x7f, 0x47, 0xea, 0x72, 0x36, 0x4d, 0x30, 0x16, 0x16, 0x30, 0x4d, 0x36, // ..9_.G.r6M0..0M6 + 0x43, 0x77, 0xa2, 0x5f, 0x5f, 0xa0, 0x73, 0x40, 0x02, 0x43, 0xfa, 0xe6, 0x01, 0x01, 0x2f, 0x56, // Cw.__.s@.C..../V + 0x77, 0x48, 0x5b, 0xc5, 0x5b, 0x5b, 0xc0, 0x60, 0x76, 0xb2, 0x78, 0x3c, 0x97, 0x02, 0x3f, 0x2e, // wH[.[[.`v.x<..?. + 0x4e, 0x66, 0x37, 0x38, 0x6a, 0x52, 0x32, 0x00, 0x00, 0x02, 0x00, 0x65, 0xff, 0xe8, 0x04, 0x94, // Nf78jR2....e.... + 0x06, 0x18, 0x00, 0x2b, 0x00, 0x40, 0x00, 0x41, 0x40, 0x3e, 0x08, 0x01, 0x06, 0x00, 0x3d, 0x2c, // ...+.@.A@>....=, + 0x02, 0x02, 0x03, 0x23, 0x01, 0x04, 0x02, 0x03, 0x4a, 0x00, 0x01, 0x00, 0x01, 0x72, 0x00, 0x03, // ...#....J....r.. + 0x06, 0x02, 0x06, 0x03, 0x02, 0x70, 0x00, 0x06, 0x06, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1f, 0x4b, // .....p....[....K + 0x07, 0x01, 0x02, 0x02, 0x04, 0x5c, 0x05, 0x01, 0x04, 0x04, 0x1e, 0x04, 0x4c, 0x29, 0x27, 0x23, // ............L)'# + 0x27, 0x17, 0x25, 0x13, 0x24, 0x08, 0x06, 0x1c, 0x2b, 0x13, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, // '.%.$...+.4>.32. + 0x17, 0x11, 0x33, 0x11, 0x06, 0x1e, 0x02, 0x33, 0x3e, 0x03, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, // ..3....3>.76&'7. + 0x16, 0x07, 0x0e, 0x03, 0x23, 0x06, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x01, 0x26, // ....#.'..#"..5.& + 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x16, 0x36, 0x37, 0x26, 0x26, // &#".......3.67&& + 0x27, 0x65, 0x26, 0x4b, 0x72, 0x4b, 0x34, 0x54, 0x21, 0xb9, 0x01, 0x0b, 0x18, 0x23, 0x17, 0x22, // 'e&KrK4T!....#." + 0x32, 0x21, 0x11, 0x01, 0x02, 0x1f, 0x1d, 0xb2, 0x1c, 0x28, 0x02, 0x02, 0x32, 0x56, 0x74, 0x43, // 2!.......(..2VtC + 0xa8, 0x43, 0x25, 0x69, 0x47, 0x4a, 0x70, 0x4c, 0x26, 0x01, 0xd7, 0x16, 0x3c, 0x29, 0x2e, 0x3f, // .C%iGJpL&...<).? + 0x26, 0x10, 0x10, 0x26, 0x3e, 0x2d, 0x2e, 0x40, 0x17, 0x03, 0x04, 0x01, 0x02, 0x40, 0x6f, 0xc0, // &..&>-.@.....@o. + 0x8e, 0x51, 0x26, 0x23, 0x02, 0x13, 0xfb, 0x1c, 0x24, 0x41, 0x30, 0x1d, 0x01, 0x3c, 0x6a, 0x91, // .Q&#....$A0..oV + 0x32, 0x01, 0x30, 0x28, 0x14, 0x2a, 0x17, 0x00, 0x00, 0x01, 0x00, 0x37, 0xff, 0xe9, 0x04, 0x8a, // 2.0(.*.....7.... + 0x05, 0xb0, 0x00, 0x3a, 0x00, 0x3b, 0x40, 0x38, 0x1b, 0x01, 0x00, 0x01, 0x01, 0x4a, 0x00, 0x05, // ...:.;@8.....J.. + 0x02, 0x01, 0x02, 0x05, 0x01, 0x70, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x63, 0x00, 0x02, // .....p.......c.. + 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x16, 0x4b, 0x00, 0x04, 0x04, 0x06, 0x5b, 0x00, 0x06, 0x06, // ..[....K....[... + 0x1e, 0x06, 0x4c, 0x38, 0x36, 0x2f, 0x2e, 0x27, 0x25, 0x21, 0x26, 0x21, 0x24, 0x07, 0x06, 0x18, // ..L86/.'%!&!$... + 0x2b, 0x01, 0x34, 0x2e, 0x02, 0x23, 0x23, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, // +.4..##532654..# + 0x23, 0x35, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x1e, 0x03, 0x15, 0x15, 0x14, 0x1e, // #532............ + 0x02, 0x33, 0x3e, 0x03, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x0e, 0x03, 0x23, 0x06, // .3>.76&'3.....#. + 0x26, 0x27, 0x01, 0xf7, 0x1b, 0x31, 0x45, 0x2a, 0x85, 0x52, 0x81, 0x77, 0x1d, 0x3a, 0x57, 0x3b, // &'...1E*.R.w.:W; + 0xe1, 0xe1, 0x62, 0x9b, 0x6c, 0x39, 0x64, 0x5b, 0x31, 0x45, 0x2c, 0x13, 0x0e, 0x1c, 0x29, 0x1b, // ..b.l9d[1E,...). + 0x2b, 0x41, 0x2c, 0x17, 0x02, 0x01, 0x20, 0x1d, 0xb3, 0x1a, 0x2a, 0x02, 0x02, 0x3a, 0x61, 0x83, // +A,... ...*..:a. + 0x4a, 0x89, 0x98, 0x06, 0x01, 0x72, 0x3a, 0x62, 0x46, 0x27, 0x98, 0x85, 0x7f, 0x3b, 0x5f, 0x43, // J....r:bF'...;_C + 0x24, 0x98, 0x36, 0x67, 0x9a, 0x64, 0x72, 0xaa, 0x30, 0x15, 0x43, 0x58, 0x6a, 0x3b, 0x69, 0x1c, // $.6g.dr.0.CXj;i. + 0x32, 0x25, 0x16, 0x01, 0x3b, 0x6a, 0x92, 0x57, 0x64, 0xca, 0x65, 0x62, 0xca, 0x67, 0x87, 0xcd, // 2%..;j.Wd.eb.g.. + 0x8b, 0x47, 0x02, 0x8b, 0x97, 0x00, 0x00, 0x01, 0x00, 0x50, 0xff, 0xe3, 0x04, 0x7d, 0x04, 0x3a, // .G.......P...}.: + 0x00, 0x33, 0x00, 0x38, 0x40, 0x35, 0x2f, 0x01, 0x03, 0x04, 0x01, 0x4a, 0x00, 0x01, 0x05, 0x04, // .3.8@5/....J.... + 0x05, 0x01, 0x04, 0x70, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x03, 0x63, 0x00, 0x05, 0x05, 0x06, // ...p.......c.... + 0x5b, 0x00, 0x06, 0x06, 0x18, 0x4b, 0x00, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1e, 0x02, // [....K....[..... + 0x4c, 0x21, 0x24, 0x21, 0x25, 0x27, 0x17, 0x22, 0x07, 0x06, 0x1b, 0x2b, 0x25, 0x14, 0x16, 0x33, // L!$!%'."...+%..3 + 0x32, 0x3e, 0x02, 0x37, 0x36, 0x26, 0x27, 0x33, 0x16, 0x16, 0x07, 0x0e, 0x03, 0x23, 0x06, 0x26, // 2>.76&'3.....#.& + 0x27, 0x35, 0x26, 0x26, 0x27, 0x23, 0x27, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x27, // '5&&'#'32654&##' + 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x16, 0x16, 0x15, 0x15, 0x02, 0xdb, 0x26, 0x35, // 32............&5 + 0x22, 0x33, 0x23, 0x12, 0x01, 0x02, 0x21, 0x1e, 0xb4, 0x1a, 0x2b, 0x02, 0x02, 0x35, 0x57, 0x75, // "3#...!...+..5Wu + 0x42, 0x86, 0x88, 0x06, 0x01, 0x6b, 0x63, 0xad, 0x02, 0x95, 0x7a, 0x70, 0x74, 0x7a, 0xdf, 0x06, // B....kc...zptz.. + 0xe5, 0x64, 0x9e, 0x6d, 0x39, 0x61, 0x5b, 0x66, 0x54, 0xd5, 0x27, 0x31, 0x2b, 0x4d, 0x6c, 0x42, // .d.m9a[fT.'1+MlB + 0x4e, 0xa3, 0x4e, 0x4e, 0xa0, 0x51, 0x6e, 0xa6, 0x70, 0x39, 0x03, 0x72, 0x81, 0x4b, 0x4a, 0x4e, // N.NN.Qn.p9.r.KJN + 0x01, 0x96, 0x57, 0x4b, 0x4f, 0x63, 0x96, 0x2c, 0x52, 0x78, 0x4c, 0x54, 0x6f, 0x24, 0x1c, 0x7e, // ..WKOc.,RxLTo$.~ + 0x55, 0x4d, 0x00, 0x02, 0x00, 0xb3, 0xfe, 0xa5, 0x04, 0x52, 0x05, 0xb0, 0x00, 0x2b, 0x00, 0x37, // UM.......R...+.7 + 0x00, 0x40, 0x40, 0x3d, 0x15, 0x01, 0x04, 0x00, 0x1e, 0x01, 0x03, 0x05, 0x02, 0x4a, 0x32, 0x31, // .@@=.........J21 + 0x02, 0x03, 0x47, 0x00, 0x00, 0x06, 0x01, 0x04, 0x05, 0x00, 0x04, 0x63, 0x00, 0x01, 0x01, 0x02, // ..G........c.... + 0x5b, 0x00, 0x02, 0x02, 0x16, 0x4b, 0x00, 0x05, 0x05, 0x03, 0x59, 0x00, 0x03, 0x03, 0x17, 0x03, // [....K....Y..... + 0x4c, 0x00, 0x00, 0x37, 0x36, 0x00, 0x2b, 0x00, 0x2a, 0x20, 0x1f, 0x21, 0x26, 0x21, 0x07, 0x06, // L..76.+.* .!&!.. + 0x17, 0x2b, 0x01, 0x35, 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x21, 0x35, 0x21, 0x32, // .+.532654..#!5!2 + 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x1e, 0x03, 0x15, 0x15, 0x14, 0x16, 0x17, 0x15, 0x23, 0x2e, // ..............#. + 0x03, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, // .554..#.....'665 + 0x35, 0x33, 0x01, 0x10, 0xa3, 0xa9, 0x9b, 0x24, 0x4b, 0x73, 0x4e, 0xfe, 0xec, 0x01, 0x14, 0x74, // 53.....$KsN....t + 0xb6, 0x7d, 0x42, 0x77, 0x70, 0x3e, 0x56, 0x36, 0x19, 0x1e, 0x27, 0xbf, 0x17, 0x19, 0x0c, 0x03, // .}Bwp>V6..'..... + 0x26, 0x45, 0x61, 0x3c, 0x02, 0x67, 0x17, 0x2d, 0x40, 0x2a, 0x73, 0x30, 0x28, 0xc9, 0x02, 0x79, // &Ea<.g.-@*s0(..y + 0x98, 0x81, 0x82, 0x3c, 0x61, 0x43, 0x24, 0x98, 0x35, 0x68, 0x9b, 0x66, 0x73, 0xa4, 0x31, 0x14, // ....5.!. + 0x14, 0x1e, 0x02, 0x33, 0x3e, 0x03, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x16, 0x07, 0x0e, 0x03, // ...3>.76&'7..... + 0x23, 0x06, 0x26, 0x27, 0x02, 0x63, 0xca, 0x01, 0x23, 0x53, 0x89, 0x65, 0x22, 0x17, 0x34, 0x46, // #.&'.c..#S.e".4F + 0x2a, 0x12, 0x01, 0x02, 0x39, 0x01, 0x08, 0x11, 0x1c, 0x13, 0x22, 0x31, 0x21, 0x10, 0x01, 0x01, // *...9....."1!... + 0x15, 0x14, 0xb3, 0x14, 0x1d, 0x02, 0x02, 0x32, 0x56, 0x73, 0x42, 0x7a, 0x83, 0x05, 0x05, 0x18, // .......2VsBz.... + 0xfd, 0xe8, 0xb8, 0xfe, 0xe2, 0xc4, 0x66, 0x97, 0x4e, 0x9b, 0xe7, 0x99, 0x02, 0xb0, 0xfb, 0x5f, // ......f.N......_ + 0x1b, 0x33, 0x27, 0x18, 0x01, 0x3c, 0x6a, 0x92, 0x56, 0x64, 0xca, 0x64, 0x01, 0x62, 0xca, 0x67, // .3'...76& + 0x27, 0x33, 0x16, 0x16, 0x07, 0x0e, 0x03, 0x23, 0x06, 0x26, 0x27, 0x11, 0x23, 0x11, 0x14, 0x0e, // '3.....#.&'.#... + 0x02, 0x23, 0x23, 0x37, 0x37, 0x32, 0x3e, 0x02, 0x35, 0x11, 0x02, 0xfa, 0x09, 0x12, 0x1b, 0x13, // .##772>.5....... + 0x21, 0x32, 0x22, 0x11, 0x01, 0x02, 0x20, 0x1d, 0xb3, 0x1b, 0x28, 0x02, 0x02, 0x32, 0x56, 0x73, // !2"... ...(..2Vs + 0x43, 0x79, 0x84, 0x05, 0xc5, 0x1d, 0x44, 0x72, 0x54, 0x26, 0x03, 0x17, 0x24, 0x30, 0x1b, 0x0b, // Cy....DrT&..$0.. + 0x04, 0x3a, 0xfc, 0xe7, 0x20, 0x39, 0x2c, 0x1a, 0x01, 0x34, 0x5e, 0x81, 0x4e, 0x5f, 0xc0, 0x5e, // .:.. 9,..4^.N_.^ + 0x5d, 0xbf, 0x61, 0x7c, 0xbc, 0x80, 0x41, 0x02, 0x98, 0xa0, 0x02, 0x80, 0xfe, 0xcd, 0x92, 0xe7, // ].a|..A......... + 0xa0, 0x55, 0xa5, 0x01, 0x3b, 0x73, 0xaa, 0x70, 0x01, 0xcc, 0x00, 0x01, 0x00, 0x6f, 0xff, 0xe9, // .U..;s.p.....o.. + 0x04, 0x95, 0x05, 0xb0, 0x00, 0x23, 0x00, 0x68, 0x4b, 0xb0, 0x17, 0x50, 0x58, 0x40, 0x23, 0x00, // .....#.hK..PX@#. + 0x01, 0x05, 0x06, 0x05, 0x01, 0x06, 0x70, 0x00, 0x06, 0x00, 0x03, 0x00, 0x06, 0x03, 0x61, 0x08, // ......p.......a. + 0x07, 0x02, 0x05, 0x05, 0x16, 0x4b, 0x00, 0x00, 0x00, 0x02, 0x5c, 0x04, 0x01, 0x02, 0x02, 0x1e, // .....K.......... + 0x02, 0x4c, 0x1b, 0x40, 0x27, 0x00, 0x01, 0x05, 0x06, 0x05, 0x01, 0x06, 0x70, 0x00, 0x06, 0x00, // .L.@'.......p... + 0x03, 0x00, 0x06, 0x03, 0x61, 0x08, 0x07, 0x02, 0x05, 0x05, 0x16, 0x4b, 0x00, 0x04, 0x04, 0x17, // ....a......K.... + 0x4b, 0x00, 0x00, 0x00, 0x02, 0x5c, 0x00, 0x02, 0x02, 0x1e, 0x02, 0x4c, 0x59, 0x40, 0x10, 0x00, // K..........LY@.. + 0x00, 0x00, 0x23, 0x00, 0x23, 0x11, 0x11, 0x11, 0x13, 0x27, 0x17, 0x25, 0x09, 0x06, 0x1b, 0x2b, // ..#.#....'.%...+ + 0x01, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x3e, 0x03, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x16, 0x07, // .....3>.76&'7... + 0x0e, 0x03, 0x23, 0x06, 0x26, 0x27, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x03, // ..#.&'.!.#.3.!.. + 0x0c, 0x08, 0x12, 0x1b, 0x13, 0x22, 0x31, 0x20, 0x11, 0x01, 0x02, 0x20, 0x1c, 0xb2, 0x1a, 0x2a, // ....."1 ... ...* + 0x02, 0x02, 0x32, 0x55, 0x73, 0x43, 0x79, 0x83, 0x05, 0xfe, 0xd5, 0xb9, 0xb9, 0x01, 0x2b, 0x05, // ..2UsCy.......+. + 0xb0, 0xfb, 0x84, 0x24, 0x40, 0x31, 0x1d, 0x01, 0x3c, 0x6b, 0x91, 0x56, 0x64, 0xca, 0x64, 0x01, // ...$@1...76&'3.....#. + 0x26, 0x27, 0x02, 0x3b, 0xfe, 0xf3, 0xb9, 0xb9, 0x01, 0x0d, 0xb9, 0x0a, 0x17, 0x22, 0x17, 0x1d, // &'.;.........".. + 0x2c, 0x1c, 0x0f, 0x01, 0x01, 0x16, 0x14, 0xb2, 0x14, 0x1e, 0x02, 0x02, 0x2f, 0x51, 0x6d, 0x3f, // ,.........../Qm? + 0x81, 0x8d, 0x05, 0x01, 0xcd, 0xfe, 0x33, 0x04, 0x3a, 0xfe, 0x2a, 0x01, 0xd6, 0xfc, 0xe7, 0x20, // ......3.:.*.... + 0x39, 0x2c, 0x1a, 0x01, 0x34, 0x5e, 0x81, 0x4e, 0x5f, 0xc0, 0x5e, 0x5d, 0xbf, 0x61, 0x7c, 0xbc, // 9,..4^.N_.^].a|. + 0x80, 0x41, 0x02, 0x98, 0xa0, 0x00, 0x00, 0x01, 0x00, 0x8e, 0xff, 0xeb, 0x04, 0x75, 0x05, 0xc5, // .A...........u.. + 0x00, 0x2d, 0x00, 0x3c, 0x40, 0x39, 0x0e, 0x01, 0x02, 0x01, 0x0f, 0x01, 0x04, 0x02, 0x02, 0x4a, // .-.<@9.........J + 0x00, 0x04, 0x02, 0x03, 0x02, 0x04, 0x03, 0x70, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x00, 0x01, 0x01, // .......p....[... + 0x1d, 0x4b, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x05, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x4c, 0x01, 0x00, // .K....[......L.. + 0x24, 0x23, 0x1e, 0x1c, 0x13, 0x11, 0x0c, 0x0a, 0x00, 0x2d, 0x01, 0x2d, 0x06, 0x06, 0x14, 0x2b, // $#.......-.-...+ + 0x05, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, // ."..5.4>.32...&& + 0x23, 0x22, 0x0e, 0x02, 0x15, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x36, 0x36, 0x37, 0x36, 0x26, 0x27, // #".......36676&' + 0x33, 0x1e, 0x03, 0x07, 0x0e, 0x03, 0x02, 0x94, 0x75, 0xbf, 0x88, 0x4a, 0x4a, 0x88, 0xbf, 0x75, // 3.......u..JJ..u + 0x70, 0xae, 0x43, 0x3b, 0x41, 0x8f, 0x56, 0x4f, 0x7c, 0x55, 0x2d, 0x2d, 0x55, 0x7c, 0x4f, 0x8d, // p.C;A.VO|U--U|O. + 0x97, 0x03, 0x02, 0x1d, 0x17, 0xb3, 0x0a, 0x14, 0x11, 0x0a, 0x01, 0x02, 0x4e, 0x83, 0xad, 0x15, // ............N... + 0x5f, 0xa6, 0xe2, 0x83, 0x01, 0x06, 0x83, 0xe1, 0xa7, 0x5f, 0x2c, 0x2c, 0x84, 0x21, 0x23, 0x4a, // _........_,,.!#J + 0x7f, 0xa9, 0x5e, 0xfe, 0xf8, 0x5f, 0xaa, 0x80, 0x4a, 0x02, 0x9d, 0x88, 0x5a, 0xb5, 0x5a, 0x2c, // ..^.._..J...Z.Z, + 0x5a, 0x5b, 0x5b, 0x2d, 0x70, 0xa8, 0x6f, 0x37, 0x00, 0x01, 0x00, 0xa0, 0xff, 0xeb, 0x04, 0x50, // Z[[-p.o7.......P + 0x04, 0x4e, 0x00, 0x2b, 0x00, 0x3c, 0x40, 0x39, 0x1d, 0x01, 0x04, 0x03, 0x1e, 0x01, 0x01, 0x04, // .N.+.<@9........ + 0x02, 0x4a, 0x00, 0x01, 0x04, 0x00, 0x04, 0x01, 0x00, 0x70, 0x00, 0x04, 0x04, 0x03, 0x5b, 0x00, // .J.......p....[. + 0x03, 0x03, 0x1f, 0x4b, 0x05, 0x01, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1e, 0x02, 0x4c, // ...K.....[.....L + 0x01, 0x00, 0x22, 0x20, 0x1b, 0x19, 0x10, 0x0e, 0x07, 0x06, 0x00, 0x2b, 0x01, 0x2b, 0x06, 0x06, // .." .......+.+.. + 0x14, 0x2b, 0x25, 0x36, 0x36, 0x37, 0x34, 0x26, 0x27, 0x33, 0x16, 0x16, 0x15, 0x0e, 0x03, 0x23, // .+%6674&'3.....# + 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, // "..554>.32...&&# + 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x02, 0xb4, 0x79, 0x68, 0x02, 0x06, 0x0e, 0xb2, // ".........yh.... + 0x0b, 0x10, 0x02, 0x40, 0x6e, 0x95, 0x57, 0x80, 0xc6, 0x87, 0x47, 0x44, 0x82, 0xbe, 0x7b, 0x6b, // ...@n.W...GD..{k + 0x9f, 0x35, 0x2c, 0x36, 0x8c, 0x51, 0x56, 0x7a, 0x50, 0x25, 0x28, 0x54, 0x83, 0x82, 0x01, 0x62, // .5,6.QVzP%(T...b + 0x5a, 0x35, 0x6f, 0x36, 0x36, 0x6e, 0x36, 0x57, 0x80, 0x54, 0x29, 0x59, 0x94, 0xc4, 0x6c, 0x2a, // Z5o66n6W.T)Y..l* + 0x6c, 0xc3, 0x94, 0x59, 0x22, 0x20, 0x90, 0x1c, 0x1e, 0x45, 0x6f, 0x8a, 0x46, 0x2a, 0x47, 0x8b, // l..Y" ...Eo.F*G. + 0x6f, 0x45, 0x00, 0x01, 0x00, 0x4c, 0xff, 0xea, 0x04, 0x95, 0x05, 0xb0, 0x00, 0x21, 0x00, 0x2a, // oE...L.......!.* + 0x40, 0x27, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x03, 0x70, 0x02, 0x01, 0x00, 0x00, 0x01, 0x59, // @'.......p.....Y + 0x00, 0x01, 0x01, 0x16, 0x4b, 0x00, 0x03, 0x03, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x1e, 0x05, 0x4c, // ....K....[.....L + 0x27, 0x17, 0x25, 0x11, 0x11, 0x10, 0x06, 0x06, 0x1a, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x15, 0x21, // '.%......+.!5!.! + 0x11, 0x14, 0x1e, 0x02, 0x33, 0x3e, 0x03, 0x37, 0x36, 0x26, 0x27, 0x37, 0x16, 0x16, 0x07, 0x0e, // ....3>.76&'7.... + 0x03, 0x23, 0x06, 0x2e, 0x02, 0x27, 0x01, 0xb5, 0xfe, 0x97, 0x03, 0xa8, 0xfe, 0x7a, 0x13, 0x26, // .#...'.......z.& + 0x38, 0x24, 0x35, 0x4f, 0x35, 0x1b, 0x02, 0x02, 0x21, 0x1d, 0xb3, 0x1b, 0x2a, 0x03, 0x02, 0x3f, // 8$5O5...!...*..? + 0x6c, 0x90, 0x52, 0x4d, 0x79, 0x55, 0x2f, 0x04, 0x05, 0x18, 0x98, 0x98, 0xfc, 0x41, 0x2d, 0x4f, // l.RMyU/......A-O + 0x3a, 0x21, 0x01, 0x3b, 0x69, 0x92, 0x58, 0x64, 0xca, 0x64, 0x01, 0x62, 0xca, 0x67, 0x87, 0xcd, // :!.;i.Xd.d.b.g.. + 0x8b, 0x47, 0x01, 0x2b, 0x5a, 0x8b, 0x5f, 0x00, 0x00, 0x01, 0x00, 0x49, 0xff, 0xe9, 0x04, 0x6a, // .G.+Z._....I...j + 0x04, 0x3a, 0x00, 0x21, 0x00, 0x2a, 0x40, 0x27, 0x00, 0x04, 0x00, 0x03, 0x00, 0x04, 0x03, 0x70, // .:.!.*@'.......p + 0x02, 0x01, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x18, 0x4b, 0x00, 0x03, 0x03, 0x05, 0x5b, // .....Y....K....[ + 0x00, 0x05, 0x05, 0x1e, 0x05, 0x4c, 0x29, 0x17, 0x25, 0x11, 0x11, 0x10, 0x06, 0x06, 0x1a, 0x2b, // .....L).%......+ + 0x01, 0x21, 0x35, 0x21, 0x15, 0x21, 0x11, 0x14, 0x1e, 0x02, 0x33, 0x3e, 0x03, 0x37, 0x36, 0x26, // .!5!.!....3>.76& + 0x27, 0x33, 0x1e, 0x03, 0x07, 0x0e, 0x03, 0x23, 0x06, 0x26, 0x27, 0x01, 0x9a, 0xfe, 0xaf, 0x03, // '3.....#.&'..... + 0x85, 0xfe, 0x86, 0x13, 0x27, 0x38, 0x25, 0x30, 0x48, 0x32, 0x19, 0x02, 0x02, 0x21, 0x1d, 0xb2, // ....'8%0H2...!.. + 0x0d, 0x19, 0x13, 0x0b, 0x01, 0x02, 0x3d, 0x68, 0x89, 0x4e, 0x9b, 0xae, 0x08, 0x03, 0xa4, 0x96, // ......=h.N...... + 0x96, 0xfd, 0xb5, 0x2e, 0x4e, 0x3a, 0x21, 0x01, 0x2b, 0x4e, 0x6c, 0x42, 0x4f, 0xa8, 0x4e, 0x27, // ....N:!.+NlBO.N' + 0x51, 0x52, 0x52, 0x29, 0x6e, 0xa7, 0x71, 0x39, 0x02, 0xb1, 0xbf, 0x00, 0x00, 0x01, 0x00, 0x6c, // QRR)n.q9.......l + 0xff, 0xec, 0x04, 0x6f, 0x05, 0xc5, 0x00, 0x3e, 0x00, 0x4e, 0x40, 0x4b, 0x1d, 0x01, 0x00, 0x07, // ...o...>.N@K.... + 0x01, 0x4a, 0x00, 0x05, 0x06, 0x07, 0x06, 0x05, 0x07, 0x70, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, // .J.......p...... + 0x01, 0x70, 0x00, 0x07, 0x08, 0x01, 0x00, 0x02, 0x07, 0x00, 0x63, 0x00, 0x06, 0x06, 0x04, 0x5b, // .p........c....[ + 0x00, 0x04, 0x04, 0x1d, 0x4b, 0x00, 0x01, 0x01, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1e, 0x03, 0x4c, // ....K....[.....L + 0x01, 0x00, 0x3d, 0x3b, 0x33, 0x31, 0x2d, 0x2c, 0x28, 0x26, 0x16, 0x14, 0x10, 0x0f, 0x0b, 0x09, // ..=;31-,(&...... + 0x00, 0x3e, 0x01, 0x3e, 0x09, 0x06, 0x14, 0x2b, 0x01, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, // .>.>...+."...... + 0x33, 0x32, 0x3e, 0x02, 0x37, 0x33, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x26, 0x36, // 32>.73...#"..5&6 + 0x37, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x2e, 0x03, 0x23, // 7..54>.32...#..# + 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x33, 0x15, 0x02, 0x75, 0x4f, 0x7d, 0x56, 0x2d, // "......33..uO}V- + 0x31, 0x5a, 0x81, 0x51, 0x44, 0x70, 0x51, 0x2d, 0x01, 0xb9, 0x56, 0x8b, 0xb0, 0x5b, 0x73, 0xc3, // 1Z.QDpQ-..V..[s. + 0x8f, 0x51, 0x01, 0x87, 0x7c, 0x37, 0x58, 0x3d, 0x21, 0x4a, 0x87, 0xbd, 0x73, 0x5f, 0xac, 0x81, // .Q..|7X=!J..s_.. + 0x4c, 0xb9, 0x01, 0x2d, 0x4d, 0x68, 0x3c, 0x52, 0x7b, 0x51, 0x29, 0x26, 0x4d, 0x76, 0x50, 0xb6, // L..-Mh.7.....#... + 0x2d, 0x40, 0x2a, 0x65, 0x2f, 0x2f, 0xb5, 0x04, 0xa1, 0x2f, 0x68, 0x65, 0x5c, 0x24, 0x48, 0x47, // -@*e//.../he.$HG + 0x94, 0x56, 0x95, 0x00, 0x00, 0x01, 0x01, 0xcd, 0x04, 0x07, 0x02, 0xe0, 0x06, 0x16, 0x00, 0x0b, // .V.............. + 0x00, 0x10, 0x40, 0x0d, 0x06, 0x05, 0x02, 0x00, 0x47, 0x00, 0x00, 0x00, 0x69, 0x1a, 0x01, 0x08, // ..@.....G...i... + 0x15, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, 0x35, 0x33, 0x02, 0xe0, 0x17, // .+.....'66553... + 0x2d, 0x40, 0x2a, 0x65, 0x2f, 0x2f, 0xb5, 0x05, 0x83, 0x2f, 0x68, 0x65, 0x5c, 0x24, 0x48, 0x47, // -@*e//.../he.$HG + 0x94, 0x56, 0x96, 0x00, 0x00, 0x01, 0x01, 0xbc, 0xfe, 0xd1, 0x02, 0xd3, 0x00, 0xe1, 0x00, 0x0b, // .V.............. + 0x00, 0x10, 0x40, 0x0d, 0x06, 0x05, 0x02, 0x00, 0x47, 0x00, 0x00, 0x00, 0x69, 0x1a, 0x01, 0x08, // ..@.....G...i... + 0x15, 0x2b, 0x25, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, 0x35, 0x33, 0x02, 0xd3, 0x17, // .+%....'66553... + 0x2d, 0x40, 0x2a, 0x69, 0x2f, 0x2f, 0xb9, 0x4c, 0x2f, 0x67, 0x64, 0x5d, 0x24, 0x49, 0x46, 0x94, // -@*i//.L/gd]$IF. + 0x56, 0x97, 0xff, 0xff, 0x01, 0xcf, 0x04, 0x07, 0x02, 0xe2, 0x06, 0x16, 0x00, 0x47, 0x01, 0x68, // V............G.h + 0x04, 0xaf, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0xff, 0xff, 0x01, 0x49, 0x04, 0x0f, 0x03, 0xa1, // ......@....I.... + 0x06, 0x1d, 0x02, 0x27, 0x01, 0x67, 0xff, 0x5d, 0x00, 0x00, 0x00, 0x07, 0x01, 0x67, 0x00, 0xa2, // ...'.g.].....g.. + 0x00, 0x00, 0xff, 0xff, 0x01, 0x2d, 0x04, 0x07, 0x03, 0x8c, 0x06, 0x16, 0x02, 0x27, 0x01, 0x68, // .....-.......'.h + 0xff, 0x60, 0x00, 0x00, 0x00, 0x07, 0x01, 0x68, 0x00, 0xac, 0x00, 0x00, 0x00, 0x02, 0x01, 0x2f, // .`.....h......./ + 0xfe, 0xcf, 0x03, 0x68, 0x00, 0xdf, 0x00, 0x0b, 0x00, 0x17, 0x00, 0x14, 0x40, 0x11, 0x12, 0x11, // ...h........@... + 0x06, 0x05, 0x04, 0x00, 0x47, 0x01, 0x01, 0x00, 0x00, 0x69, 0x1b, 0x1a, 0x02, 0x08, 0x16, 0x2b, // ....G....i.....+ + 0x25, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x36, 0x36, 0x35, 0x35, 0x33, 0x05, 0x14, 0x0e, 0x02, 0x07, // %....'66553..... + 0x27, 0x36, 0x36, 0x35, 0x35, 0x33, 0x02, 0x46, 0x17, 0x2d, 0x40, 0x2a, 0x69, 0x2f, 0x2f, 0xb9, // '66553.F.-@*i//. + 0x01, 0x22, 0x17, 0x2d, 0x40, 0x2a, 0x69, 0x2f, 0x2f, 0xb9, 0x4b, 0x2f, 0x68, 0x64, 0x5d, 0x24, // .".-@*i//.K/hd]$ + 0x49, 0x46, 0x94, 0x56, 0x97, 0x94, 0x2f, 0x68, 0x64, 0x5d, 0x24, 0x49, 0x46, 0x94, 0x56, 0x97, // IF.V../hd]$IF.V. + 0x00, 0x01, 0x00, 0x77, 0x00, 0x00, 0x04, 0x55, 0x05, 0xb0, 0x00, 0x0b, 0x00, 0x23, 0x40, 0x20, // ...w...U.....#@ + 0x00, 0x04, 0x04, 0x3c, 0x4b, 0x02, 0x01, 0x00, 0x00, 0x03, 0x59, 0x05, 0x01, 0x03, 0x03, 0x3f, // ....32...... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x01, 0x9a, 0x1d, 0x34, 0x4b, 0x2f, 0x2f, 0x4c, 0x35, 0x1c, // .#"..5...4K//L5. + 0x1c, 0x35, 0x4b, 0x2f, 0x2f, 0x4b, 0x35, 0x1d, 0x03, 0x16, 0x2b, 0x49, 0x34, 0x1e, 0x1e, 0x34, // .5K//K5...+I4..4 + 0x49, 0x2b, 0x3a, 0x2b, 0x48, 0x35, 0x1d, 0x1d, 0x35, 0x48, 0x2b, 0x00, 0xff, 0xff, 0x01, 0x5c, // I+:+H5..5H+..... + 0xff, 0xed, 0x04, 0x3a, 0x01, 0x07, 0x02, 0x27, 0x00, 0x10, 0xff, 0x6c, 0x00, 0x00, 0x00, 0x07, // ...:...'...l.... + 0x00, 0x10, 0x01, 0x26, 0x00, 0x00, 0xff, 0xff, 0x01, 0x09, 0xff, 0xed, 0x05, 0x26, 0x01, 0x07, // ...&.........&.. + 0x02, 0x27, 0x00, 0x10, 0xff, 0x19, 0x00, 0x00, 0x00, 0x27, 0x00, 0x10, 0x00, 0x9c, 0x00, 0x00, // .'.......'...... + 0x00, 0x07, 0x00, 0x10, 0x02, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x36, 0xff, 0xeb, 0x04, 0xa0, // ...........6.... + 0x05, 0xc5, 0x00, 0x21, 0x00, 0x37, 0x00, 0x3b, 0x00, 0x51, 0x00, 0x67, 0x00, 0x7d, 0x00, 0x4e, // ...!.7.;.Q.g.}.N + 0x40, 0x4b, 0x3b, 0x3a, 0x02, 0x0a, 0x0b, 0x39, 0x08, 0x02, 0x07, 0x00, 0x19, 0x01, 0x02, 0x06, // @K;:...9........ + 0x03, 0x4a, 0x00, 0x0a, 0x00, 0x05, 0x00, 0x0a, 0x05, 0x63, 0x01, 0x01, 0x00, 0x09, 0x01, 0x07, // .J.......c...... + 0x06, 0x00, 0x07, 0x63, 0x00, 0x0b, 0x0b, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x44, 0x4b, 0x08, 0x01, // ...c....[...DK.. + 0x06, 0x06, 0x02, 0x5b, 0x03, 0x01, 0x02, 0x02, 0x45, 0x02, 0x4c, 0x79, 0x77, 0x6e, 0x6c, 0x63, // ...[....E.Lywnlc + 0x61, 0x29, 0x29, 0x2d, 0x29, 0x29, 0x24, 0x29, 0x24, 0x24, 0x0c, 0x08, 0x1d, 0x2b, 0x01, 0x34, // a))-))$)$$...+.4 + 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, // >.32..6632...... + 0x02, 0x23, 0x22, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x01, 0x34, 0x3e, 0x02, // .#"&'..#"..5.4>. + 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x13, 0x27, // 32.......#"..5.' + 0x01, 0x17, 0x03, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, // ......32>.554..# + 0x22, 0x0e, 0x02, 0x15, 0x05, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, // ".......32>.554. + 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, // .#".......32>.55 + 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x01, 0x56, 0x1f, 0x3e, 0x5b, 0x3c, 0x3a, 0x58, // 4..#"....V.>[<:X + 0x1f, 0x1f, 0x57, 0x3a, 0x3d, 0x5b, 0x3e, 0x1f, 0x1f, 0x3d, 0x5b, 0x3c, 0x3a, 0x59, 0x1f, 0x1f, // ..W:=[>..=[<:Y.. + 0x57, 0x39, 0x3d, 0x5c, 0x3e, 0x1f, 0xfe, 0xe0, 0x1f, 0x3e, 0x5b, 0x3c, 0x3d, 0x5b, 0x3e, 0x1f, // W9=.>....>[<=[>. + 0x20, 0x3d, 0x5a, 0x3c, 0x3c, 0x5c, 0x3e, 0x20, 0x79, 0x44, 0x03, 0x10, 0x44, 0x7e, 0x0b, 0x1a, // =Z<<.> yD..D~.. + 0x29, 0x1e, 0x1d, 0x28, 0x18, 0x0b, 0x0b, 0x19, 0x29, 0x1d, 0x1e, 0x28, 0x19, 0x0b, 0xfe, 0xa0, // )..(....)..(.... + 0x0b, 0x19, 0x29, 0x1e, 0x1d, 0x28, 0x18, 0x0b, 0x0b, 0x19, 0x28, 0x1e, 0x1d, 0x28, 0x19, 0x0b, // ..)..(....(..(.. + 0xfe, 0xe0, 0x0b, 0x1a, 0x28, 0x1e, 0x1c, 0x28, 0x19, 0x0b, 0x0b, 0x19, 0x28, 0x1e, 0x1d, 0x28, // ....(..(....(..( + 0x19, 0x0b, 0x01, 0x2f, 0x38, 0x65, 0x4d, 0x2e, 0x2a, 0x23, 0x23, 0x2a, 0x2e, 0x4d, 0x65, 0x38, // .../8eM.*##*.Me8 + 0x2c, 0x38, 0x66, 0x4d, 0x2d, 0x29, 0x23, 0x23, 0x29, 0x2d, 0x4d, 0x66, 0x38, 0x03, 0xa9, 0x38, // ,8fM-)##)-Mf8..8 + 0x66, 0x4d, 0x2e, 0x2e, 0x4d, 0x66, 0x38, 0x2c, 0x38, 0x65, 0x4c, 0x2e, 0x2e, 0x4c, 0x65, 0x38, // fM..Mf8,8eL..Le8 + 0xfd, 0x3f, 0x54, 0x02, 0x81, 0x54, 0xfc, 0xc3, 0x1e, 0x3a, 0x2d, 0x1b, 0x1b, 0x2d, 0x3a, 0x1e, // .?T..T...:-..-:. + 0x2c, 0x1e, 0x39, 0x2d, 0x1c, 0x1c, 0x2d, 0x39, 0x1e, 0x2c, 0x1e, 0x3a, 0x2d, 0x1b, 0x1b, 0x2d, // ,.9-..-9.,.:-..- + 0x3a, 0x1e, 0x2c, 0x1e, 0x39, 0x2d, 0x1c, 0x1c, 0x2d, 0x39, 0x1e, 0x03, 0x51, 0x1e, 0x39, 0x2d, // :.,.9-..-9..Q.9- + 0x1b, 0x1b, 0x2d, 0x39, 0x1e, 0x2c, 0x1e, 0x39, 0x2d, 0x1c, 0x1c, 0x2d, 0x39, 0x1e, 0x00, 0x01, // ..-9.,.9-..-9... + 0x01, 0x8c, 0x00, 0x99, 0x03, 0x40, 0x03, 0xb5, 0x00, 0x06, 0x00, 0x1e, 0x40, 0x1b, 0x03, 0x01, // .....@......@... + 0x00, 0x01, 0x01, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x01, 0x55, 0x00, 0x01, 0x01, 0x00, 0x59, 0x00, // ...J.....U....Y. + 0x00, 0x01, 0x00, 0x4d, 0x13, 0x11, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x01, 0x23, 0x01, 0x35, 0x01, // ...M.....+..#.5. + 0x33, 0x02, 0x3e, 0x01, 0x02, 0x8d, 0xfe, 0xd9, 0x01, 0x27, 0x8d, 0x02, 0x26, 0xfe, 0x73, 0x01, // 3.>......'..&.s. + 0x84, 0x13, 0x01, 0x85, 0x00, 0x01, 0x01, 0x8c, 0x00, 0x98, 0x03, 0x40, 0x03, 0xb5, 0x00, 0x06, // ...........@.... + 0x00, 0x26, 0x40, 0x23, 0x05, 0x01, 0x02, 0x00, 0x01, 0x01, 0x4a, 0x02, 0x01, 0x01, 0x00, 0x00, // .&@#......J..... + 0x01, 0x55, 0x02, 0x01, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x01, 0x00, 0x4d, 0x00, 0x00, 0x00, // .U.....Y....M... + 0x06, 0x00, 0x06, 0x13, 0x03, 0x08, 0x15, 0x2b, 0x01, 0x01, 0x15, 0x01, 0x23, 0x01, 0x01, 0x02, // .......+....#... + 0x1a, 0x01, 0x26, 0xfe, 0xda, 0x8e, 0x01, 0x02, 0xfe, 0xfe, 0x03, 0xb5, 0xfe, 0x7b, 0x13, 0xfe, // ..&..........{.. + 0x7b, 0x01, 0x8e, 0x01, 0x8f, 0x00, 0x00, 0x01, 0x01, 0x2b, 0x00, 0xd5, 0x03, 0x9e, 0x04, 0xd1, // {........+...... + 0x00, 0x03, 0x00, 0x06, 0xb3, 0x02, 0x00, 0x01, 0x30, 0x2b, 0x25, 0x27, 0x01, 0x17, 0x01, 0x9c, // ........0+%'.... + 0x71, 0x02, 0x01, 0x72, 0xd5, 0x42, 0x03, 0xba, 0x42, 0x00, 0x00, 0x02, 0x01, 0x0f, 0x02, 0x38, // q..r.B..B......8 + 0x04, 0x18, 0x05, 0xc3, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x2b, 0x40, 0x28, 0x0d, 0x01, 0x00, 0x04, // .........+@(.... + 0x08, 0x01, 0x01, 0x00, 0x02, 0x4a, 0x05, 0x01, 0x00, 0x03, 0x01, 0x01, 0x02, 0x00, 0x01, 0x61, // .....J.........a + 0x00, 0x02, 0x02, 0x04, 0x59, 0x00, 0x04, 0x04, 0x3c, 0x02, 0x4c, 0x11, 0x12, 0x11, 0x11, 0x11, // ....Y...<.L..... + 0x10, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x33, 0x15, 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x01, 0x33, // ....+.3.#.#5!'.3 + 0x01, 0x21, 0x11, 0x07, 0x03, 0x81, 0x97, 0x97, 0xa3, 0xfe, 0x34, 0x03, 0x01, 0xc9, 0xa9, 0xfe, // .!........4..... + 0x43, 0x01, 0x1a, 0x16, 0x03, 0x6f, 0x7e, 0xb9, 0xb9, 0x5e, 0x02, 0x74, 0xfd, 0xac, 0x01, 0x88, // C....o~..^.t.... + 0x2c, 0x00, 0x00, 0x01, 0x01, 0x4b, 0x02, 0x8b, 0x03, 0xc9, 0x05, 0xba, 0x00, 0x15, 0x00, 0x6b, // ,....K.........k + 0x4b, 0xb0, 0x23, 0x50, 0x58, 0x40, 0x0a, 0x01, 0x01, 0x02, 0x00, 0x12, 0x01, 0x01, 0x02, 0x02, // K.#PX@.......... + 0x4a, 0x1b, 0x40, 0x0a, 0x01, 0x01, 0x02, 0x04, 0x12, 0x01, 0x01, 0x02, 0x02, 0x4a, 0x59, 0x4b, // J.@..........JYK + 0xb0, 0x23, 0x50, 0x58, 0x40, 0x1a, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x05, 0x04, 0x02, 0x00, 0x00, // .#PX@.....[..... + 0x3c, 0x4b, 0x03, 0x01, 0x01, 0x01, 0x00, 0x5b, 0x05, 0x04, 0x02, 0x00, 0x00, 0x3c, 0x01, 0x4c, // .5' + 0x23, 0x35, 0x33, 0x27, 0x23, 0x35, 0x33, 0x27, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // #53'#53'4>.32... + 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x17, 0x21, 0x15, 0x21, 0x17, 0x21, 0x03, // #4..#"....!.!.!. + 0x22, 0xfe, 0xab, 0x03, 0x1d, 0x1f, 0x02, 0xe2, 0x01, 0xfb, 0xfa, 0x4b, 0x1b, 0x24, 0x16, 0x09, // "..........K.$.. + 0x03, 0xac, 0xa8, 0x05, 0xa3, 0x9f, 0x06, 0x42, 0x77, 0xa3, 0x60, 0x60, 0x98, 0x69, 0x38, 0xb9, // .......Bw.``.i8. + 0x28, 0x43, 0x57, 0x30, 0x33, 0x59, 0x40, 0x25, 0x06, 0x01, 0x61, 0xfe, 0xa3, 0x04, 0x01, 0x59, // (CW03Y@%..a....Y + 0x01, 0xd7, 0x47, 0x45, 0x84, 0x30, 0x97, 0x97, 0x07, 0x38, 0x49, 0x51, 0x20, 0x47, 0x7a, 0x8a, // ..GE.0...8IQ Gz. + 0x7b, 0xb9, 0x66, 0xa2, 0x71, 0x3c, 0x38, 0x66, 0x8e, 0x57, 0x3f, 0x59, 0x39, 0x1b, 0x27, 0x49, // {.f.q<8f.W?Y9.'I + 0x6b, 0x43, 0xb9, 0x7b, 0x8a, 0x00, 0x00, 0x02, 0x00, 0x7f, 0xff, 0xec, 0x04, 0xb3, 0x05, 0xb0, // kC.{............ + 0x00, 0x29, 0x00, 0x36, 0x00, 0x9d, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0xb5, 0x0b, 0x01, 0x02, 0x01, // .).6..K..PX..... + 0x01, 0x4a, 0x1b, 0xb5, 0x0b, 0x01, 0x05, 0x01, 0x01, 0x4a, 0x59, 0x4b, 0xb0, 0x19, 0x50, 0x58, // .J.......JYK..PX + 0x40, 0x32, 0x00, 0x08, 0x06, 0x0b, 0x06, 0x08, 0x0b, 0x70, 0x00, 0x0a, 0x00, 0x04, 0x01, 0x0a, // @2.......p...... + 0x04, 0x63, 0x00, 0x0b, 0x0b, 0x06, 0x5b, 0x00, 0x06, 0x06, 0x3c, 0x4b, 0x03, 0x01, 0x00, 0x00, // .c....[....54. + 0x02, 0x23, 0x23, 0x04, 0x9e, 0xb0, 0x0f, 0x19, 0x24, 0x15, 0x14, 0x2b, 0x0c, 0x19, 0x17, 0x51, // .##.....$..+...Q + 0x2a, 0x34, 0x56, 0x3f, 0x23, 0x59, 0x08, 0x35, 0x59, 0x7b, 0x4e, 0x45, 0xb9, 0xfe, 0x4e, 0x7b, // *4V?#Y.5Y{NE..N{ + 0x58, 0x36, 0x08, 0x59, 0xb9, 0xb0, 0xfc, 0x9a, 0x45, 0x2d, 0x40, 0x29, 0x13, 0x13, 0x28, 0x41, // X6.Y....E-@)..(A + 0x2d, 0x45, 0x03, 0xab, 0xfd, 0x7c, 0x2c, 0x3c, 0x25, 0x11, 0x0a, 0x04, 0x84, 0x11, 0x16, 0x24, // -E...|,<%......$ + 0x4d, 0x78, 0x53, 0x02, 0x83, 0x52, 0x8a, 0x63, 0x37, 0xfd, 0xcb, 0x05, 0xb0, 0x38, 0x63, 0x89, // MxS..R.c7....8c. + 0x52, 0x01, 0x06, 0xfe, 0xfa, 0xfe, 0x92, 0x32, 0x52, 0x68, 0x38, 0x38, 0x6b, 0x53, 0x32, 0x00, // R......2Rh88kS2. + 0x00, 0x01, 0x00, 0x7f, 0xff, 0xeb, 0x04, 0x39, 0x05, 0xc4, 0x00, 0x2f, 0x00, 0x50, 0x40, 0x4d, // .......9.../.P@M + 0x21, 0x01, 0x08, 0x07, 0x22, 0x01, 0x06, 0x08, 0x09, 0x01, 0x01, 0x00, 0x0a, 0x01, 0x02, 0x01, // !..."........... + 0x04, 0x4a, 0x09, 0x01, 0x06, 0x0a, 0x01, 0x05, 0x04, 0x06, 0x05, 0x61, 0x0b, 0x01, 0x04, 0x03, // .J.........a.... + 0x01, 0x00, 0x01, 0x04, 0x00, 0x61, 0x00, 0x08, 0x08, 0x07, 0x5b, 0x00, 0x07, 0x07, 0x44, 0x4b, // .....a....[...DK + 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, 0x02, 0x4c, 0x2f, 0x2e, 0x2d, 0x2c, 0x2b, // ....[...E.L/.-,+ + 0x2a, 0x25, 0x24, 0x11, 0x11, 0x11, 0x14, 0x25, 0x24, 0x10, 0x0c, 0x08, 0x1d, 0x2b, 0x01, 0x21, // *%$....%$....+.! + 0x1e, 0x03, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x23, 0x35, // ..3267...#"..'#5 + 0x33, 0x35, 0x23, 0x35, 0x33, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x17, 0x07, 0x26, 0x26, 0x23, 0x22, // 35#53>.32...&&#" + 0x0e, 0x02, 0x07, 0x21, 0x15, 0x21, 0x15, 0x21, 0x03, 0x6e, 0xfe, 0x7e, 0x02, 0x33, 0x5a, 0x80, // ...!.!.!.n.~.3Z. + 0x4f, 0x3b, 0x6e, 0x34, 0x12, 0x38, 0x78, 0x3f, 0x75, 0xc3, 0x8d, 0x50, 0x03, 0xb3, 0xb3, 0xb3, // O;n4.8x?u..P.... + 0xb3, 0x05, 0x51, 0x8c, 0xc0, 0x74, 0x3f, 0x75, 0x3d, 0x12, 0x34, 0x6f, 0x3c, 0x4e, 0x7e, 0x5a, // ..Q..t?u=.4o.32...#4. + 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x13, // .#".......32>.5. + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, // 4>.32.......#".. + 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, // 53...32>.554..#" + 0x0e, 0x02, 0x15, 0x05, 0x27, 0x01, 0x17, 0x02, 0x4c, 0x23, 0x42, 0x5f, 0x3b, 0x3d, 0x61, 0x43, // ....'...L#B_;=aC + 0x23, 0x23, 0x42, 0x60, 0x3d, 0x3c, 0x5f, 0x42, 0x24, 0x8a, 0x0f, 0x1e, 0x2c, 0x1e, 0x1e, 0x2d, // ##B`=<_B$...,..- + 0x1d, 0x0f, 0x0f, 0x1e, 0x2d, 0x1f, 0x1e, 0x2b, 0x1d, 0x0f, 0xcc, 0x23, 0x43, 0x60, 0x3d, 0x3d, // ....-..+...#C`== + 0x60, 0x43, 0x23, 0x23, 0x42, 0x60, 0x3d, 0x3d, 0x61, 0x43, 0x23, 0x8b, 0x0e, 0x1e, 0x2e, 0x1f, // `C##B`==aC#..... + 0x1e, 0x2d, 0x1e, 0x0e, 0x0e, 0x1e, 0x2d, 0x1f, 0x1f, 0x2d, 0x1e, 0x0e, 0xfe, 0x9c, 0x71, 0x02, // .-....-..-....q. + 0x01, 0x72, 0x04, 0x1e, 0x34, 0x5d, 0x45, 0x28, 0x30, 0x52, 0x6d, 0x3c, 0x4d, 0x3d, 0x6d, 0x53, // .r..4]E(0Rm.32..... + 0x0e, 0x02, 0x07, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x03, 0x3e, 0x03, 0x35, 0x35, 0x34, 0x26, 0x23, // .......3.>.554&# + 0x22, 0x06, 0x15, 0x03, 0x54, 0x6c, 0x9e, 0x69, 0x33, 0x31, 0x68, 0x38, 0x3a, 0x68, 0x2f, 0x29, // "...Tl.i31h8:h/) + 0x50, 0x73, 0x4a, 0x3c, 0x64, 0x48, 0x27, 0x34, 0x65, 0x93, 0x60, 0x17, 0x38, 0x5a, 0x44, 0xed, // PsJ.32.......#".. + 0x35, 0x37, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, // 57...32>.554..#" + 0x0e, 0x02, 0x15, 0x13, 0x21, 0x35, 0x21, 0x02, 0xe3, 0xb0, 0xfe, 0xf5, 0x01, 0xb0, 0xaf, 0x01, // ....!5!......... + 0x0c, 0x01, 0xb0, 0x53, 0x15, 0x28, 0x3c, 0x26, 0x27, 0x3d, 0x28, 0x15, 0x15, 0x28, 0x3c, 0x27, // ...S.(<&'=(..(<' + 0x27, 0x3b, 0x29, 0x15, 0x65, 0x04, 0x0d, 0x17, 0x13, 0x13, 0x17, 0x0d, 0x04, 0x05, 0x0d, 0x17, // ';).e........... + 0x13, 0x12, 0x17, 0x0c, 0x05, 0xd9, 0xfe, 0xcd, 0x01, 0x33, 0x03, 0x93, 0xfc, 0x6d, 0x05, 0xb0, // .........3...m.. + 0xfc, 0x71, 0x03, 0x8f, 0xb5, 0x28, 0x48, 0x36, 0x1f, 0x1f, 0x36, 0x48, 0x28, 0xce, 0x28, 0x47, // .q...(H6..6H(.(G + 0x35, 0x1f, 0x1f, 0x35, 0x47, 0x28, 0x09, 0x17, 0x27, 0x1d, 0x11, 0x11, 0x1d, 0x27, 0x17, 0xbc, // 5..5G(..'....'.. + 0x16, 0x28, 0x1d, 0x11, 0x11, 0x1d, 0x28, 0x16, 0xfd, 0xd5, 0x5f, 0x00, 0x00, 0x02, 0x00, 0x67, // .(....(..._....g + 0x03, 0x97, 0x04, 0x37, 0x05, 0xb0, 0x00, 0x0c, 0x00, 0x14, 0x00, 0x08, 0xb5, 0x13, 0x0f, 0x06, // ...7............ + 0x01, 0x02, 0x30, 0x2b, 0x01, 0x03, 0x23, 0x03, 0x11, 0x23, 0x11, 0x33, 0x13, 0x13, 0x33, 0x11, // ..0+..#..#.3..3. + 0x23, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x21, 0x03, 0xdd, 0x8c, 0x34, 0x8b, 0x5a, 0x70, // #.#.#.#5!...4.Zp + 0x8f, 0x90, 0x70, 0x5a, 0xfe, 0x0c, 0x94, 0x5b, 0x93, 0x01, 0x82, 0x05, 0x21, 0xfe, 0x76, 0x01, // ..pZ...[....!.v. + 0x89, 0xfe, 0x77, 0x02, 0x19, 0xfe, 0x71, 0x01, 0x8f, 0xfd, 0xe7, 0x01, 0xc8, 0xfe, 0x38, 0x01, // ..w...q.......8. + 0xc8, 0x51, 0x00, 0x02, 0x00, 0x99, 0xff, 0xec, 0x04, 0x94, 0x04, 0x4e, 0x00, 0x1d, 0x00, 0x26, // .Q.........N...& + 0x00, 0x08, 0xb5, 0x22, 0x1e, 0x0e, 0x02, 0x02, 0x30, 0x2b, 0x25, 0x06, 0x06, 0x23, 0x22, 0x2e, // ..."....0+%..#". + 0x02, 0x35, 0x34, 0x3e, 0x04, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x21, 0x11, 0x16, 0x16, 0x33, // .54>.32....!...3 + 0x16, 0x36, 0x37, 0x01, 0x22, 0x06, 0x07, 0x11, 0x21, 0x11, 0x26, 0x26, 0x04, 0x17, 0x55, 0xba, // .67."...!.&&..U. + 0x63, 0x6e, 0xbf, 0x8d, 0x52, 0x29, 0x48, 0x63, 0x75, 0x81, 0x42, 0x67, 0xb5, 0x85, 0x4e, 0xfd, // cn..R)Hcu.Bg..N. + 0x00, 0x37, 0x8c, 0x4e, 0x5e, 0xb9, 0x59, 0xfe, 0x90, 0x4c, 0x8c, 0x39, 0x02, 0x1c, 0x36, 0x88, // .7.N^.Y..L.9..6. + 0x5e, 0x35, 0x3d, 0x59, 0x99, 0xcc, 0x73, 0x4c, 0x8f, 0x7c, 0x67, 0x4a, 0x29, 0x52, 0x92, 0xc6, // ^5=Y..sL.|gJ)R.. + 0x73, 0x2f, 0xfe, 0xb8, 0x33, 0x3b, 0x01, 0x3c, 0x3f, 0x03, 0x2a, 0x42, 0x38, 0xfe, 0xeb, 0x01, // s/..3;.....P......./ + 0x01, 0xc1, 0xff, 0x18, 0x02, 0xe8, 0x39, 0x9a, 0x00, 0x26, 0x01, 0x76, 0xf8, 0x00, 0x01, 0x0f, // ......9..&.v.... + 0x01, 0xc8, 0x01, 0x86, 0x00, 0x00, 0x39, 0x9a, 0x00, 0x09, 0xb1, 0x00, 0x01, 0xb8, 0x02, 0xe8, // ......9......... + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x32, 0xff, 0xf6, 0x04, 0xc1, 0x05, 0xba, 0x00, 0x2f, // .3+....2......./ + 0x01, 0xc3, 0xff, 0x1a, 0x02, 0xea, 0x39, 0x9a, 0x00, 0x26, 0x01, 0x76, 0x1f, 0xf7, 0x01, 0x0f, // ......9..&.v.... + 0x01, 0xc8, 0x01, 0x8e, 0x00, 0x00, 0x39, 0x9a, 0x00, 0x12, 0xb1, 0x00, 0x01, 0xb8, 0x02, 0xea, // ......9......... + 0xb0, 0x33, 0x2b, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf7, 0xb0, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x24, // .3+.......3+...$ + 0xff, 0xfa, 0x04, 0xad, 0x05, 0xb2, 0x00, 0x2f, 0x01, 0xc5, 0xff, 0x04, 0x02, 0xeb, 0x39, 0x9a, // ......./......9. + 0x00, 0x26, 0x01, 0x76, 0x08, 0x00, 0x01, 0x0f, 0x01, 0xc8, 0x01, 0x7a, 0x00, 0x04, 0x39, 0x9a, // .&.v.......z..9. + 0x00, 0x0f, 0xb1, 0x00, 0x01, 0xb8, 0x02, 0xeb, 0xb0, 0x33, 0x2b, 0xb3, 0x02, 0x03, 0x04, 0x33, // .........3+....3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x40, 0xff, 0xf6, 0x04, 0xa7, 0x05, 0xb2, 0x00, 0x2f, 0x01, 0xc7, // +....@......./.. + 0xff, 0x2f, 0x02, 0xeb, 0x39, 0x9a, 0x00, 0x26, 0x01, 0x76, 0xd3, 0x00, 0x01, 0x0f, 0x01, 0xc8, // ./..9..&.v...... + 0x01, 0x74, 0x00, 0x00, 0x39, 0x9a, 0x00, 0x09, 0xb1, 0x00, 0x01, 0xb8, 0x02, 0xeb, 0xb0, 0x33, // .t..9..........3 + 0x2b, 0x00, 0x00, 0x02, 0x00, 0x7e, 0xff, 0xeb, 0x04, 0x46, 0x05, 0xec, 0x00, 0x26, 0x00, 0x3c, // +....~...F...&.< + 0x00, 0x08, 0xb5, 0x31, 0x27, 0x1b, 0x10, 0x02, 0x30, 0x2b, 0x01, 0x32, 0x16, 0x17, 0x2e, 0x03, // ...1'...0+.2.... + 0x23, 0x22, 0x06, 0x07, 0x27, 0x3e, 0x03, 0x33, 0x32, 0x16, 0x16, 0x12, 0x15, 0x15, 0x14, 0x0e, // #"..'>.32....... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x17, 0x22, 0x0e, 0x02, 0x15, 0x15, // .#"..554>..".... + 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x2e, 0x03, 0x02, 0x50, 0x5b, 0xa6, 0x3c, // ...32>.55...P[.< + 0x0b, 0x42, 0x64, 0x82, 0x4a, 0x4e, 0x87, 0x47, 0x10, 0x1d, 0x3f, 0x4b, 0x5b, 0x3a, 0x8f, 0xcf, // .Bd.JN.G..?K[:.. + 0x87, 0x41, 0x41, 0x7c, 0xb5, 0x74, 0x72, 0xb3, 0x7c, 0x41, 0x3f, 0x78, 0xad, 0x80, 0x4d, 0x70, // .AA|.tr.|A?x..Mp + 0x4a, 0x24, 0x24, 0x49, 0x70, 0x4c, 0x4f, 0x71, 0x4a, 0x23, 0x06, 0x28, 0x48, 0x6b, 0x03, 0xfe, // J$$IpLOqJ#.(Hk.. + 0x4c, 0x45, 0x69, 0xb0, 0x7e, 0x47, 0x20, 0x1b, 0x97, 0x0d, 0x19, 0x14, 0x0b, 0x7c, 0xdc, 0xfe, // LEi.~G ......|.. + 0xd1, 0xb4, 0x3b, 0x88, 0xee, 0xb0, 0x65, 0x51, 0x8d, 0xc1, 0x71, 0x17, 0x69, 0xb4, 0x84, 0x4b, // ..;...eQ..q.i..K + 0x98, 0x37, 0x5e, 0x7b, 0x44, 0x17, 0x4c, 0x89, 0x67, 0x3d, 0x49, 0x7e, 0xa8, 0x60, 0x42, 0x1c, // .7^{D.L.g=I~.`B. + 0x49, 0x41, 0x2d, 0x00, 0x00, 0x01, 0x00, 0xa7, 0xff, 0x2b, 0x04, 0x25, 0x05, 0xb0, 0x00, 0x07, // IA-......+.%.... + 0x00, 0x06, 0xb3, 0x06, 0x00, 0x01, 0x30, 0x2b, 0x05, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x21, // ......0+.#.!.#.! + 0x04, 0x25, 0xb9, 0xfd, 0xf4, 0xb9, 0x03, 0x7e, 0xd5, 0x05, 0xed, 0xfa, 0x13, 0x06, 0x85, 0x00, // .%.....~........ + 0x00, 0x01, 0x00, 0x33, 0xfe, 0xf3, 0x04, 0x98, 0x05, 0xb0, 0x00, 0x0c, 0x00, 0x06, 0xb3, 0x08, // ...3............ + 0x03, 0x01, 0x30, 0x2b, 0x01, 0x01, 0x21, 0x15, 0x21, 0x35, 0x01, 0x01, 0x35, 0x21, 0x15, 0x21, // ..0+..!.!5..5!.! + 0x01, 0x03, 0x58, 0xfd, 0xbc, 0x03, 0x84, 0xfb, 0x9b, 0x02, 0x60, 0xfd, 0xa0, 0x04, 0x19, 0xfc, // ..X.......`..... + 0xc7, 0x02, 0x45, 0x02, 0x41, 0xfd, 0x4a, 0x98, 0x8f, 0x02, 0xcc, 0x02, 0xd2, 0x90, 0x98, 0xfd, // ..E.A.J......... + 0x42, 0x00, 0x00, 0x01, 0x00, 0xa9, 0x02, 0x8b, 0x03, 0xec, 0x03, 0x22, 0x00, 0x03, 0x00, 0x18, // B..........".... + 0x40, 0x15, 0x00, 0x01, 0x00, 0x00, 0x01, 0x55, 0x00, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x01, // @......U....Y... + 0x00, 0x4d, 0x11, 0x10, 0x02, 0x08, 0x16, 0x2b, 0x01, 0x21, 0x35, 0x21, 0x03, 0xec, 0xfc, 0xbd, // .M.....+.!5!.... + 0x03, 0x43, 0x02, 0x8b, 0x97, 0x00, 0x00, 0x01, 0x00, 0x39, 0x00, 0x00, 0x04, 0x92, 0x05, 0xb0, // .C.......9...... + 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x05, 0x03, 0x01, 0x30, 0x2b, 0x01, 0x17, 0x37, 0x01, 0x33, 0x01, // ........0+..7.3. + 0x23, 0x03, 0x23, 0x35, 0x21, 0x02, 0x18, 0x16, 0x19, 0x01, 0x8e, 0xbd, 0xfd, 0xe2, 0x8d, 0xf5, // #.#5!........... + 0xb9, 0x01, 0x3b, 0x01, 0x51, 0x69, 0x69, 0x04, 0x5f, 0xfa, 0x50, 0x02, 0x74, 0x9a, 0x00, 0x03, // ..;.Qii._.P.t... + 0x00, 0x35, 0x00, 0xe0, 0x04, 0x9a, 0x03, 0xdd, 0x00, 0x29, 0x00, 0x43, 0x00, 0x5d, 0x00, 0x0a, // .5.......).C.].. + 0xb7, 0x57, 0x48, 0x3d, 0x2e, 0x19, 0x04, 0x03, 0x30, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, // .WH=....0+....#" + 0x2e, 0x02, 0x27, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, // ..'..#"..554>.32 + 0x1e, 0x02, 0x17, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, 0x23, 0x22, // ...>.32...#4..#" + 0x0e, 0x04, 0x07, 0x15, 0x1e, 0x05, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x21, 0x14, 0x1e, 0x02, 0x33, // ......32>.5!...3 + 0x32, 0x3e, 0x04, 0x37, 0x35, 0x2e, 0x05, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x04, 0x9a, 0x24, 0x47, // 2>.75..#".....$G + 0x6b, 0x46, 0x34, 0x56, 0x45, 0x35, 0x13, 0x13, 0x34, 0x45, 0x56, 0x34, 0x47, 0x6a, 0x47, 0x24, // kF4VE5..4EV4GjG$ + 0x24, 0x46, 0x6a, 0x47, 0x34, 0x57, 0x45, 0x34, 0x13, 0x13, 0x35, 0x45, 0x56, 0x35, 0x46, 0x6a, // $FjG4WE4..5EV5Fj + 0x47, 0x24, 0x7c, 0x10, 0x25, 0x3d, 0x2d, 0x1e, 0x36, 0x2d, 0x25, 0x1c, 0x11, 0x03, 0x03, 0x11, // G$|.%=-.6-%..... + 0x1c, 0x24, 0x2e, 0x35, 0x1e, 0x2e, 0x3d, 0x25, 0x10, 0xfc, 0x93, 0x10, 0x25, 0x3d, 0x2e, 0x1e, // .$.5..=%....%=.. + 0x35, 0x2d, 0x25, 0x1b, 0x11, 0x03, 0x03, 0x11, 0x1b, 0x25, 0x2d, 0x36, 0x1e, 0x2d, 0x3d, 0x25, // 5-%......%-6.-=% + 0x10, 0x02, 0x4a, 0x47, 0x83, 0x64, 0x3c, 0x2c, 0x46, 0x56, 0x2a, 0x2a, 0x56, 0x46, 0x2c, 0x3c, // ..JG.d<,FV**VF,< + 0x64, 0x83, 0x47, 0x2a, 0x46, 0x83, 0x64, 0x3c, 0x2c, 0x46, 0x56, 0x2a, 0x2a, 0x56, 0x46, 0x2c, // d.G*F.d<,FV**VF, + 0x3c, 0x64, 0x83, 0x46, 0x30, 0x57, 0x43, 0x28, 0x1c, 0x2e, 0x38, 0x37, 0x31, 0x0f, 0x1d, 0x0f, // .32...&&#"... + 0x02, 0xaa, 0xa8, 0x9a, 0x1e, 0x35, 0x1d, 0x0e, 0x08, 0x1c, 0x1d, 0x1a, 0x07, 0x42, 0x47, 0x2e, // .....5.......BG. + 0x57, 0x7e, 0x4f, 0x25, 0x46, 0x25, 0x18, 0x11, 0x2d, 0x1d, 0x5a, 0x5c, 0x59, 0xa7, 0xb5, 0x08, // W~O%F%..-.Z.Y... + 0x0a, 0x93, 0x03, 0x05, 0x03, 0x02, 0x6a, 0x5a, 0x05, 0x1b, 0x56, 0x86, 0x5c, 0x31, 0x0c, 0x09, // ......jZ..V..1.. + 0x8e, 0x05, 0x06, 0x71, 0x60, 0xfa, 0xe5, 0x00, 0x00, 0x02, 0x00, 0x8d, 0x01, 0x14, 0x04, 0x3e, // ...q`..........> + 0x03, 0xff, 0x00, 0x21, 0x00, 0x43, 0x00, 0x08, 0xb5, 0x43, 0x32, 0x21, 0x10, 0x02, 0x30, 0x2b, // ...!.C...C2!..0+ + 0x13, 0x36, 0x36, 0x33, 0x36, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, // .6636.....3267.. + 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x2e, 0x03, 0x07, 0x06, 0x06, 0x07, 0x07, 0x36, 0x36, 0x37, // .#"..'.......667 + 0x36, 0x1e, 0x02, 0x17, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, // 6.....3267...#". + 0x02, 0x27, 0x2e, 0x03, 0x07, 0x22, 0x06, 0x07, 0x97, 0x30, 0x7a, 0x43, 0x27, 0x3b, 0x35, 0x33, // .'..."...0zC';53 + 0x20, 0x1d, 0x30, 0x31, 0x38, 0x24, 0x43, 0x7a, 0x2f, 0x0a, 0x30, 0x7a, 0x42, 0x25, 0x37, 0x31, // .018$Cz/.0zB%71 + 0x30, 0x1e, 0x1f, 0x34, 0x34, 0x3c, 0x27, 0x43, 0x7a, 0x2f, 0x14, 0x30, 0x7a, 0x43, 0x27, 0x3b, // 0..44<'Cz/.0zC'; + 0x35, 0x33, 0x20, 0x1d, 0x30, 0x31, 0x38, 0x24, 0x43, 0x7a, 0x2f, 0x0a, 0x30, 0x7a, 0x42, 0x25, // 53 .018$Cz/.0zB% + 0x37, 0x31, 0x30, 0x1e, 0x1f, 0x34, 0x34, 0x3c, 0x27, 0x43, 0x7a, 0x2f, 0x03, 0x69, 0x44, 0x4e, // 710..44<'Cz/.iDN + 0x01, 0x0b, 0x14, 0x1b, 0x10, 0x0f, 0x19, 0x12, 0x0b, 0x4e, 0x44, 0xab, 0x43, 0x4f, 0x0b, 0x12, // .........ND.CO.. + 0x19, 0x0f, 0x10, 0x1c, 0x14, 0x0b, 0x01, 0x01, 0x4e, 0x44, 0xff, 0x43, 0x4e, 0x01, 0x01, 0x0b, // ........ND.CN... + 0x14, 0x1c, 0x0f, 0x0f, 0x1a, 0x12, 0x0b, 0x4f, 0x44, 0xab, 0x44, 0x4e, 0x0a, 0x13, 0x19, 0x0f, // .......OD.DN.... + 0x10, 0x1b, 0x14, 0x0b, 0x01, 0x4e, 0x44, 0x00, 0x00, 0x01, 0x00, 0xa9, 0x00, 0xb5, 0x04, 0x26, // .....ND........& + 0x04, 0x41, 0x00, 0x13, 0x00, 0x06, 0xb3, 0x0c, 0x02, 0x01, 0x30, 0x2b, 0x01, 0x21, 0x07, 0x27, // .A........0+.!.' + 0x37, 0x21, 0x35, 0x21, 0x37, 0x21, 0x35, 0x21, 0x37, 0x17, 0x07, 0x33, 0x15, 0x21, 0x07, 0x21, // 7!5!7!5!7..3.!.! + 0x04, 0x26, 0xfd, 0xfc, 0x5c, 0x4e, 0x42, 0xfe, 0xef, 0x01, 0x62, 0x80, 0xfe, 0x1e, 0x02, 0x33, // .&...NB...b....3 + 0x4a, 0x4d, 0x31, 0xe4, 0xfe, 0xcc, 0x80, 0x01, 0xb4, 0x01, 0x6d, 0xb8, 0x33, 0x85, 0xa0, 0xff, // JM1.......m.3... + 0xa1, 0x94, 0x33, 0x61, 0xa1, 0xff, 0xff, 0xff, 0x00, 0xbb, 0x00, 0x09, 0x04, 0x0d, 0x04, 0x9a, // ..3a............ + 0x00, 0x67, 0x00, 0x1e, 0x00, 0x13, 0x00, 0xbc, 0x40, 0x00, 0x39, 0x9a, 0x01, 0x07, 0x01, 0x88, // .g......@.9..... + 0x00, 0x12, 0xfd, 0x7e, 0x00, 0x0f, 0xb3, 0x00, 0x01, 0xbc, 0x33, 0x2b, 0xb1, 0x01, 0x01, 0xb8, // ...~......3+.... + 0xfd, 0x7e, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xc2, 0x00, 0x07, 0x04, 0x35, 0x04, 0xad, // .~.3+........5.. + 0x00, 0x67, 0x00, 0x20, 0x00, 0x10, 0x00, 0xcf, 0x40, 0x00, 0x39, 0x9a, 0x01, 0x07, 0x01, 0x88, // .g. ....@.9..... + 0x00, 0x1a, 0xfd, 0x7c, 0x00, 0x0f, 0xb3, 0x00, 0x01, 0xcf, 0x33, 0x2b, 0xb1, 0x01, 0x01, 0xb8, // ...|......3+.... + 0xfd, 0x7c, 0xb0, 0x33, 0x2b, 0x00, 0x00, 0x02, 0x00, 0x8e, 0x00, 0x00, 0x04, 0x3f, 0x05, 0xb0, // .|.3+........?.. + 0x00, 0x05, 0x00, 0x0d, 0x00, 0x08, 0xb5, 0x0c, 0x08, 0x03, 0x00, 0x02, 0x30, 0x2b, 0x01, 0x33, // ............0+.3 + 0x01, 0x01, 0x23, 0x01, 0x21, 0x01, 0x27, 0x07, 0x01, 0x01, 0x17, 0x37, 0x02, 0x1e, 0x8d, 0x01, // ..#.!.'....7.... + 0x94, 0xfe, 0x6f, 0x8d, 0xfe, 0x6d, 0x02, 0xf2, 0xfe, 0xf4, 0x11, 0x11, 0xfe, 0xfa, 0x01, 0x0c, // ..o..m.......... + 0x10, 0x12, 0x05, 0xb0, 0xfd, 0x27, 0xfd, 0x29, 0x02, 0xd7, 0x02, 0x0a, 0x33, 0x33, 0xfd, 0xf6, // .....'.)....33.. + 0xfd, 0xf7, 0x33, 0x33, 0x00, 0x01, 0x01, 0x2e, 0xff, 0x56, 0x02, 0x28, 0x00, 0xef, 0x00, 0x0b, // ..33.....V.(.... + 0x00, 0x06, 0xb3, 0x0a, 0x05, 0x01, 0x30, 0x2b, 0x25, 0x14, 0x0e, 0x02, 0x07, 0x27, 0x36, 0x36, // ......0+%....'66 + 0x35, 0x35, 0x33, 0x02, 0x28, 0x11, 0x24, 0x37, 0x25, 0x69, 0x25, 0x25, 0xb0, 0xa9, 0x2a, 0x5c, // 553.(.$7%i%%..*. + 0x5a, 0x53, 0x20, 0x48, 0x3e, 0x7f, 0x4b, 0x49, 0x00, 0x16, 0x00, 0x5c, 0x00, 0x0a, 0x04, 0x87, // ZS H>.KI........ + 0x04, 0x06, 0x00, 0x0d, 0x00, 0x1c, 0x00, 0x2a, 0x00, 0x3a, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4c, // .......*.:.@.F.L + 0x00, 0x52, 0x00, 0x5b, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x67, 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x73, // .R.[._.c.g.k.o.s + 0x00, 0x7b, 0x00, 0x7f, 0x00, 0x83, 0x00, 0x87, 0x00, 0x8b, 0x00, 0x8f, 0x00, 0x93, 0x00, 0x31, // .{.............1 + 0x40, 0x2e, 0x92, 0x90, 0x8e, 0x8c, 0x8a, 0x88, 0x86, 0x84, 0x82, 0x80, 0x7e, 0x7c, 0x79, 0x74, // @...........~|yt + 0x71, 0x70, 0x6d, 0x6c, 0x69, 0x68, 0x65, 0x64, 0x61, 0x60, 0x5d, 0x5c, 0x58, 0x53, 0x50, 0x4e, // qpmliheda`].XSPN + 0x48, 0x47, 0x44, 0x41, 0x3c, 0x3b, 0x39, 0x34, 0x26, 0x1f, 0x19, 0x0e, 0x09, 0x02, 0x16, 0x30, // HGDA<;94&......0 + 0x2b, 0x01, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x17, // +.4&#".....3265. + 0x32, 0x36, 0x35, 0x34, 0x26, 0x27, 0x36, 0x36, 0x35, 0x34, 0x26, 0x23, 0x23, 0x11, 0x27, 0x14, // 2654&'6654&##.'. + 0x06, 0x23, 0x22, 0x26, 0x35, 0x35, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x05, 0x14, 0x06, 0x23, // .#"&554632.....# + 0x22, 0x26, 0x35, 0x23, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x35, 0x23, 0x01, 0x35, 0x33, 0x15, // "&5#..32655#.53. + 0x33, 0x15, 0x21, 0x35, 0x33, 0x35, 0x33, 0x15, 0x01, 0x35, 0x33, 0x15, 0x23, 0x15, 0x25, 0x35, // 3.!5353..53.#.%5 + 0x33, 0x15, 0x23, 0x35, 0x01, 0x32, 0x16, 0x15, 0x14, 0x06, 0x23, 0x23, 0x35, 0x03, 0x35, 0x33, // 3.#5.2....##5.53 + 0x15, 0x33, 0x35, 0x33, 0x15, 0x21, 0x35, 0x33, 0x15, 0x13, 0x35, 0x33, 0x15, 0x33, 0x35, 0x33, // .353.!53..53.353 + 0x15, 0x21, 0x35, 0x33, 0x15, 0x13, 0x33, 0x32, 0x16, 0x15, 0x14, 0x23, 0x23, 0x05, 0x23, 0x35, // .!53..32...##.#5 + 0x33, 0x11, 0x23, 0x35, 0x33, 0x11, 0x23, 0x35, 0x33, 0x01, 0x23, 0x35, 0x33, 0x11, 0x23, 0x35, // 3.#53.#53.#53.#5 + 0x33, 0x11, 0x23, 0x35, 0x33, 0x01, 0xf0, 0x46, 0x39, 0x39, 0x46, 0x47, 0x39, 0x39, 0x45, 0x9f, // 3.#53..F99FG99E. + 0x33, 0x39, 0x1c, 0x1c, 0x17, 0x17, 0x3e, 0x37, 0x67, 0x58, 0x28, 0x23, 0x24, 0x29, 0x29, 0x23, // 39....>7gX(#$))# + 0x23, 0x29, 0x02, 0x0e, 0x1e, 0x17, 0x1a, 0x1f, 0x33, 0x3c, 0x30, 0x2d, 0x3a, 0x32, 0xfc, 0x91, // #)......3<0-:2.. + 0x3e, 0x6c, 0x02, 0xd7, 0x6d, 0x3d, 0xfb, 0xd5, 0xaa, 0x6c, 0x03, 0x43, 0xaa, 0x3d, 0xfe, 0x45, // >l..m=...l.C.=.E + 0x1d, 0x1b, 0x1b, 0x1d, 0x46, 0x24, 0x99, 0x43, 0x99, 0xfd, 0xb0, 0x98, 0x43, 0x99, 0x43, 0x99, // ....F$.C....C.C. + 0xfd, 0xb0, 0x98, 0x67, 0x33, 0x21, 0x20, 0x41, 0x33, 0xfe, 0x51, 0x3e, 0x3e, 0x3e, 0x3e, 0x3e, // ...g3! A3.Q>>>>> + 0x3e, 0x03, 0xed, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x02, 0x25, 0x36, 0x42, 0x42, 0x36, 0x3e, // >..======.%6BB6> + 0x36, 0x42, 0x42, 0x36, 0x77, 0x2b, 0x2b, 0x17, 0x27, 0x08, 0x09, 0x22, 0x15, 0x2b, 0x28, 0xfe, // 6BB6w++.'..".+(. + 0xd1, 0x77, 0x26, 0x2b, 0x2b, 0x26, 0x3e, 0x26, 0x2b, 0x2b, 0x26, 0x55, 0x18, 0x1e, 0x18, 0x1a, // .w&++&>&++&U.... + 0x2e, 0x2d, 0x32, 0x2d, 0xd0, 0xfd, 0x6a, 0xae, 0x6f, 0x3f, 0x3f, 0x6f, 0xae, 0x03, 0x5f, 0x9d, // .-2-..j.o??o.._. + 0x40, 0x5d, 0x5d, 0x40, 0x9d, 0x5d, 0xfe, 0x31, 0x1a, 0x16, 0x15, 0x18, 0x5d, 0x01, 0xcf, 0x40, // @]]@.].1....]..@ + 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x44, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x02, 0x66, 0x10, // @@@@@.D??????.f. + 0x17, 0x2c, 0x52, 0x8a, 0xfe, 0xa7, 0x89, 0x01, 0x16, 0x89, 0xfe, 0xa7, 0x8a, 0xfe, 0xa7, 0x89, // .,R............. + 0x01, 0x16, 0x89, 0x00, 0x00, 0x05, 0x00, 0x0f, 0xfd, 0xd5, 0x04, 0xaf, 0x08, 0x73, 0x00, 0x03, // .............s.. + 0x00, 0x29, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x35, 0x00, 0x0f, 0x40, 0x0c, 0x34, 0x32, 0x30, 0x2e, // .).-.1.5..@.420. + 0x2c, 0x2a, 0x12, 0x04, 0x02, 0x00, 0x05, 0x30, 0x2b, 0x09, 0x03, 0x05, 0x34, 0x3e, 0x02, 0x37, // ,*.....0+...4>.7 + 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x33, 0x36, 0x36, 0x33, 0x32, // >.54..#"...36632 + 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x0e, 0x03, 0x15, 0x17, 0x23, 0x15, 0x33, 0x03, 0x33, 0x15, // ..........#.3.3. + 0x23, 0x03, 0x33, 0x15, 0x23, 0x02, 0x62, 0x02, 0x4d, 0xfd, 0xb3, 0xfd, 0xad, 0x02, 0xba, 0x06, // #.3.#.b.M....... + 0x0c, 0x11, 0x0b, 0x16, 0x2d, 0x24, 0x17, 0x25, 0x45, 0x66, 0x40, 0x38, 0x61, 0x49, 0x2b, 0x01, // ....-$.%Ef@8aI+. + 0xcb, 0x02, 0x29, 0x18, 0x25, 0x20, 0x11, 0x18, 0x1b, 0x0a, 0x1d, 0x23, 0x15, 0x08, 0xca, 0xca, // ..).% .....#.... + 0xca, 0x6c, 0x04, 0x04, 0x02, 0x04, 0x04, 0x06, 0x52, 0xfc, 0x31, 0xfc, 0x31, 0x03, 0xcf, 0xfb, // .l......R.1.1... + 0x19, 0x27, 0x1f, 0x1d, 0x10, 0x1f, 0x37, 0x39, 0x40, 0x29, 0x40, 0x67, 0x49, 0x27, 0x1e, 0x41, // .'....79@)@gI'.A + 0x65, 0x46, 0x37, 0x30, 0x40, 0x34, 0x1a, 0x33, 0x2f, 0x27, 0x0d, 0x24, 0x28, 0x26, 0x32, 0x30, // eF70@4.3/'.$(&20 + 0x5b, 0xaa, 0xfd, 0x56, 0x04, 0x0a, 0x9e, 0x04, 0x00, 0x02, 0x00, 0xb8, 0xff, 0xf0, 0x04, 0x00, // [..V............ + 0x04, 0x9d, 0x00, 0x15, 0x00, 0x2b, 0x00, 0x08, 0xb5, 0x25, 0x1a, 0x0f, 0x04, 0x02, 0x30, 0x2b, // .....+...%....0+ + 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x35, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, // ...#"..'5>.32... + 0x27, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, // '..#"......32>.7 + 0x04, 0x00, 0x01, 0x2f, 0x65, 0x9f, 0x6f, 0x6f, 0x9f, 0x66, 0x30, 0x01, 0x01, 0x30, 0x65, 0x9e, // .../e.oo.f0..0e. + 0x6f, 0x6f, 0x9e, 0x66, 0x31, 0x01, 0xbb, 0x01, 0x15, 0x35, 0x5a, 0x45, 0x45, 0x5a, 0x35, 0x15, // oo.f1....5ZEEZ5. + 0x01, 0x01, 0x16, 0x35, 0x5b, 0x45, 0x45, 0x5a, 0x34, 0x14, 0x01, 0x01, 0xf1, 0x64, 0xb9, 0x8f, // ...5[EEZ4....d.. + 0x55, 0x55, 0x8f, 0xb9, 0x64, 0xae, 0x64, 0xb9, 0x8d, 0x54, 0x54, 0x8d, 0xb9, 0x64, 0x1c, 0x39, // UU..d.d..TT..d.9 + 0x76, 0x5e, 0x3c, 0x3c, 0x5f, 0x75, 0x39, 0xe5, 0x39, 0x76, 0x62, 0x3e, 0x3e, 0x62, 0x76, 0x39, // v^<<_u9.9vb>>bv9 + 0x00, 0x01, 0x01, 0x3a, 0x00, 0x00, 0x03, 0xa4, 0x03, 0x20, 0x00, 0x1e, 0x00, 0x2c, 0x40, 0x29, // ...:..... ...,@) + 0x02, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x00, 0x02, 0x01, 0x04, 0x01, 0x02, 0x04, 0x70, 0x00, 0x03, // .....J.......p.. + 0x00, 0x01, 0x02, 0x03, 0x01, 0x63, 0x00, 0x04, 0x04, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3d, 0x00, // .....c....Y...=. + 0x4c, 0x1a, 0x24, 0x12, 0x27, 0x10, 0x05, 0x08, 0x19, 0x2b, 0x21, 0x21, 0x35, 0x01, 0x36, 0x36, // L.$.'....+!!5.66 + 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x23, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, // 54&#"..#4>.32... + 0x14, 0x0e, 0x02, 0x07, 0x07, 0x21, 0x03, 0xa4, 0xfd, 0xa9, 0x01, 0x20, 0x41, 0x38, 0x42, 0x3a, // .....!..... A8B: + 0x4a, 0x47, 0x01, 0x9e, 0x2a, 0x4e, 0x6f, 0x45, 0x42, 0x6a, 0x4a, 0x28, 0x1b, 0x33, 0x47, 0x2b, // JG..*NoEBjJ(.3G+ + 0xaf, 0x01, 0x8f, 0x6c, 0x01, 0x0f, 0x3c, 0x57, 0x23, 0x31, 0x3d, 0x4b, 0x3a, 0x36, 0x60, 0x47, // ...l..W7(GEG'...... + 0x04, 0xe4, 0x03, 0xef, 0x06, 0xf9, 0x00, 0x06, 0x00, 0x26, 0x00, 0x08, 0xb5, 0x26, 0x16, 0x05, // .........&...&.. + 0x00, 0x02, 0x30, 0x2b, 0x01, 0x23, 0x27, 0x07, 0x23, 0x01, 0x33, 0x37, 0x14, 0x0e, 0x02, 0x23, // ..0+.#'.#.37...# + 0x22, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x27, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, // "..#"...'4>.32.. + 0x33, 0x32, 0x3e, 0x02, 0x35, 0x03, 0xef, 0xab, 0xc5, 0xc4, 0xaa, 0x01, 0x24, 0x95, 0xba, 0x19, // 32>.5.......$... + 0x2b, 0x3a, 0x22, 0x25, 0x32, 0x2b, 0x2c, 0x1e, 0x10, 0x1d, 0x17, 0x0f, 0x4d, 0x19, 0x2b, 0x3a, // +:"%2+,.....M.+: + 0x22, 0x1f, 0x32, 0x2e, 0x30, 0x1d, 0x10, 0x1e, 0x17, 0x0e, 0x04, 0xe4, 0xb0, 0xb0, 0x01, 0x06, // ".2.0........... + 0xf8, 0x21, 0x3f, 0x31, 0x1e, 0x16, 0x1b, 0x17, 0x11, 0x1b, 0x21, 0x11, 0x13, 0x21, 0x41, 0x32, // .!?1......!..!A2 + 0x1f, 0x16, 0x1a, 0x16, 0x10, 0x1a, 0x21, 0x11, 0x00, 0x02, 0x00, 0xfc, 0x04, 0xe4, 0x04, 0xba, // ......!......... + 0x06, 0xcf, 0x00, 0x06, 0x00, 0x1a, 0x00, 0x08, 0xb5, 0x11, 0x07, 0x05, 0x00, 0x02, 0x30, 0x2b, // ..............0+ + 0x01, 0x23, 0x27, 0x07, 0x23, 0x01, 0x33, 0x17, 0x27, 0x36, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, // .#'.#.3.'6654..# + 0x37, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x07, 0x03, 0xdd, 0xab, 0xc6, 0xc6, 0xaa, 0x01, // 72.............. + 0x12, 0xbc, 0xf6, 0x01, 0x3d, 0x40, 0x18, 0x27, 0x34, 0x1c, 0x06, 0x7b, 0x8c, 0x17, 0x26, 0x31, // ....=@.'4..{..&1 + 0x19, 0x01, 0x04, 0xe4, 0xba, 0xba, 0x01, 0x06, 0x7c, 0x83, 0x05, 0x17, 0x23, 0x13, 0x19, 0x10, // ........|...#... + 0x07, 0x5c, 0x56, 0x4b, 0x21, 0x2f, 0x1f, 0x12, 0x03, 0x3c, 0x00, 0x02, 0x00, 0x10, 0x04, 0xe4, // ..VK!/...<...... + 0x03, 0xf9, 0x06, 0x95, 0x00, 0x06, 0x00, 0x0a, 0x00, 0x08, 0xb5, 0x09, 0x07, 0x05, 0x00, 0x02, // ................ + 0x30, 0x2b, 0x01, 0x23, 0x27, 0x07, 0x23, 0x01, 0x33, 0x05, 0x23, 0x03, 0x33, 0x03, 0xf9, 0xc5, // 0+.#'.#.3.#.3... + 0xaa, 0xaa, 0xc4, 0x01, 0x22, 0x98, 0xfe, 0x8f, 0x8c, 0xc9, 0xc8, 0x04, 0xe4, 0x9e, 0x9e, 0x01, // ...."........... + 0x06, 0x58, 0x01, 0x03, 0x00, 0x02, 0x01, 0x0b, 0x04, 0xe4, 0x04, 0xf4, 0x06, 0x95, 0x00, 0x06, // .X.............. + 0x00, 0x0a, 0x00, 0x08, 0xb5, 0x09, 0x07, 0x02, 0x00, 0x02, 0x30, 0x2b, 0x01, 0x33, 0x01, 0x23, // ..........0+.3.# + 0x27, 0x07, 0x23, 0x01, 0x33, 0x03, 0x23, 0x02, 0x2f, 0x97, 0x01, 0x23, 0xc5, 0xa9, 0xaa, 0xc6, // '.#.3.#./..#.... + 0x03, 0x22, 0xc7, 0xc8, 0x8d, 0x05, 0xea, 0xfe, 0xfa, 0x9e, 0x9e, 0x01, 0xb1, 0xfe, 0xfd, 0x00, // .".............. + 0x00, 0x02, 0x01, 0x30, 0x04, 0xa6, 0x03, 0xac, 0x06, 0xa7, 0x00, 0x15, 0x00, 0x19, 0x00, 0x08, // ...0............ + 0xb5, 0x18, 0x16, 0x04, 0x00, 0x02, 0x30, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, // ......0+....#".. + 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x27, 0x23, 0x27, 0x33, 0x03, 0xac, // 53...32>.5'#'3.. + 0x2e, 0x53, 0x75, 0x48, 0x49, 0x75, 0x53, 0x2d, 0x95, 0x14, 0x29, 0x40, 0x2c, 0x2b, 0x3f, 0x29, // .SuHIuS-..)@,+?) + 0x14, 0x53, 0x97, 0xd2, 0xd8, 0x05, 0xb0, 0x3b, 0x62, 0x46, 0x27, 0x27, 0x46, 0x62, 0x3b, 0x1e, // .S.....;bF''Fb;. + 0x36, 0x29, 0x17, 0x17, 0x29, 0x36, 0x1e, 0x29, 0xce, 0x00, 0x00, 0x01, 0x01, 0xf9, 0x04, 0x8e, // 6)..)6.)........ + 0x02, 0xf0, 0x06, 0x3b, 0x00, 0x0b, 0x00, 0x06, 0xb3, 0x0a, 0x05, 0x01, 0x30, 0x2b, 0x01, 0x34, // ...;........0+.4 + 0x3e, 0x02, 0x37, 0x17, 0x06, 0x06, 0x15, 0x15, 0x23, 0x01, 0xf9, 0x1a, 0x29, 0x31, 0x18, 0x6b, // >.7.....#...)1.k + 0x23, 0x1b, 0xb9, 0x05, 0x0f, 0x2c, 0x59, 0x50, 0x42, 0x15, 0x53, 0x3b, 0x6a, 0x3d, 0x78, 0x00, // #....,YPB.S;j=x. + 0x00, 0x02, 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x04, 0x8d, 0x00, 0x07, 0x00, 0x0a, 0x00, 0x25, // ...6...........% + 0x40, 0x22, 0x0a, 0x01, 0x04, 0x02, 0x01, 0x4a, 0x00, 0x02, 0x04, 0x02, 0x72, 0x00, 0x04, 0x00, // @".....J....r... + 0x00, 0x01, 0x04, 0x00, 0x62, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x11, // ....b....=.L.... + 0x10, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x21, 0x03, 0x23, 0x01, 0x33, 0x01, 0x23, 0x01, 0x21, 0x03, // ....+.!.#.3.#.!. + 0x03, 0x66, 0xfd, 0xfa, 0x6e, 0xbc, 0x01, 0xdd, 0xa5, 0x01, 0xd6, 0xbb, 0xfd, 0xc9, 0x01, 0x8f, // .f..n........... + 0xc7, 0x01, 0x17, 0xfe, 0xe9, 0x04, 0x8d, 0xfb, 0x73, 0x01, 0xae, 0x01, 0xfb, 0x00, 0x00, 0x03, // ........s....... + 0x00, 0xd0, 0x00, 0x00, 0x04, 0x46, 0x04, 0x8d, 0x00, 0x1a, 0x00, 0x27, 0x00, 0x34, 0x00, 0x3c, // .....F.....'.4.< + 0x40, 0x39, 0x0e, 0x01, 0x03, 0x04, 0x01, 0x4a, 0x00, 0x00, 0x00, 0x05, 0x04, 0x00, 0x05, 0x63, // @9.....J.......c + 0x00, 0x04, 0x07, 0x01, 0x03, 0x02, 0x04, 0x03, 0x63, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x06, 0x01, // ........c....[.. + 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x1b, 0x1b, 0x00, 0x00, 0x34, 0x32, 0x2a, 0x28, 0x1b, 0x27, 0x1b, // ..=.L....42*(.'. + 0x26, 0x1e, 0x1c, 0x00, 0x1a, 0x00, 0x19, 0x21, 0x08, 0x08, 0x15, 0x2b, 0x33, 0x11, 0x21, 0x32, // &......!...+3.!2 + 0x1e, 0x04, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x04, 0x23, 0x01, 0x11, // .............#.. + 0x21, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x25, 0x33, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, // !>.54..'%3>.54.. + 0x27, 0x23, 0xd0, 0x01, 0x9d, 0x33, 0x69, 0x62, 0x56, 0x3f, 0x24, 0x20, 0x35, 0x47, 0x28, 0x31, // '#...3ibV?$ 5G(1 + 0x54, 0x3d, 0x24, 0x22, 0x3c, 0x53, 0x60, 0x69, 0x35, 0xfe, 0xf4, 0x01, 0x0c, 0x2c, 0x58, 0x46, // T=$".3 + 0x32, 0x1e, 0x02, 0x17, 0x23, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x1e, 0x03, 0x33, // 2...#&&#"......3 + 0x16, 0x36, 0x37, 0x04, 0x36, 0x0c, 0x52, 0x7e, 0xa3, 0x5e, 0x75, 0xb6, 0x7d, 0x42, 0x01, 0x01, // .67.6.R~.^u.}B.. + 0x44, 0x81, 0xb9, 0x77, 0x5e, 0xa1, 0x79, 0x4e, 0x0c, 0xb9, 0x15, 0x87, 0x7d, 0x55, 0x78, 0x4c, // D..w^.yN....}UxL + 0x23, 0x01, 0x01, 0x20, 0x48, 0x75, 0x54, 0x80, 0x8d, 0x17, 0x01, 0x79, 0x60, 0x92, 0x64, 0x33, // #.. HuT....y`.d3 + 0x58, 0x96, 0xc6, 0x6f, 0x65, 0x71, 0xc7, 0x96, 0x57, 0x36, 0x66, 0x94, 0x5e, 0x76, 0x80, 0x43, // X..oeq..W6f.^v.C + 0x6f, 0x8f, 0x4b, 0x66, 0x49, 0x8e, 0x70, 0x45, 0x01, 0x79, 0x7a, 0x00, 0x00, 0x02, 0x00, 0xb7, // o.KfI.pE.yz..... + 0x00, 0x00, 0x04, 0x53, 0x04, 0x8d, 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x2a, 0x40, 0x27, 0x00, 0x00, // ...S.......*@'.. + 0x05, 0x01, 0x03, 0x02, 0x00, 0x03, 0x63, 0x00, 0x02, 0x02, 0x01, 0x5b, 0x04, 0x01, 0x01, 0x01, // ......c....[.... + 0x3d, 0x01, 0x4c, 0x0e, 0x0e, 0x00, 0x00, 0x0e, 0x1b, 0x0e, 0x1a, 0x11, 0x0f, 0x00, 0x0d, 0x00, // =.L............. + 0x0c, 0x21, 0x06, 0x08, 0x15, 0x2b, 0x33, 0x11, 0x21, 0x1e, 0x03, 0x17, 0x15, 0x0e, 0x03, 0x07, // .!...+3.!....... + 0x03, 0x11, 0x33, 0x3e, 0x03, 0x37, 0x35, 0x2e, 0x03, 0x27, 0xb7, 0x01, 0x6b, 0x79, 0xcd, 0x95, // ..3>.75..'..ky.. + 0x55, 0x01, 0x01, 0x58, 0x99, 0xd0, 0x7b, 0xa5, 0xa5, 0x5c, 0x8f, 0x63, 0x35, 0x01, 0x01, 0x31, // U..X..{....c5..1 + 0x5f, 0x8c, 0x5b, 0x04, 0x8d, 0x02, 0x50, 0x91, 0xca, 0x7b, 0x3f, 0x7e, 0xca, 0x8f, 0x4e, 0x01, // _.[...P..{?~..N. + 0x03, 0xf4, 0xfc, 0xa3, 0x01, 0x39, 0x68, 0x93, 0x5a, 0x41, 0x58, 0x91, 0x69, 0x3a, 0x01, 0x00, // .....9h.ZAX.i:.. + 0x00, 0x01, 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x04, 0x8d, 0x00, 0x0b, 0x00, 0x27, 0x40, 0x24, // .......#.....'@$ + 0x00, 0x03, 0x00, 0x04, 0x05, 0x03, 0x04, 0x61, 0x00, 0x05, 0x00, 0x00, 0x01, 0x05, 0x00, 0x61, // .......a.......a + 0x00, 0x01, 0x01, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, // ....Y...=.L..... + 0x10, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, // ....+.!.!.!.!.!. + 0x21, 0x03, 0xc5, 0xfd, 0xc0, 0x02, 0x9e, 0xfc, 0xa5, 0x03, 0x55, 0xfd, 0x68, 0x02, 0x40, 0x02, // !.........U.h.@. + 0x0e, 0xfe, 0x89, 0x97, 0x04, 0x8d, 0x99, 0xfe, 0xb2, 0x00, 0x00, 0x01, 0x00, 0xe7, 0x00, 0x00, // ................ + 0x04, 0x3d, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x21, 0x40, 0x1e, 0x00, 0x02, 0x00, 0x03, 0x04, 0x02, // .=.....!@....... + 0x03, 0x61, 0x00, 0x04, 0x00, 0x00, 0x01, 0x04, 0x00, 0x61, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, // .a.......a...=.L + 0x11, 0x11, 0x11, 0x11, 0x10, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x15, // ........+.!.#.!. + 0x21, 0x11, 0x21, 0x03, 0xe4, 0xfd, 0xc3, 0xc0, 0x03, 0x56, 0xfd, 0x6a, 0x02, 0x3d, 0x01, 0xf3, // !.!......V.j.=.. + 0xfe, 0x0d, 0x04, 0x8d, 0x99, 0xfe, 0x98, 0x00, 0x00, 0x01, 0x00, 0x7c, 0xff, 0xf0, 0x04, 0x41, // ...........|...A + 0x04, 0x9d, 0x00, 0x2d, 0x00, 0x37, 0x40, 0x34, 0x29, 0x00, 0x02, 0x04, 0x05, 0x01, 0x4a, 0x00, // ...-.7@4).....J. + 0x02, 0x03, 0x06, 0x03, 0x02, 0x06, 0x70, 0x00, 0x01, 0x00, 0x03, 0x02, 0x01, 0x03, 0x63, 0x00, // ......p.......c. + 0x06, 0x00, 0x05, 0x04, 0x06, 0x05, 0x61, 0x00, 0x04, 0x04, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, // ......a....[...E + 0x00, 0x4c, 0x11, 0x15, 0x29, 0x22, 0x14, 0x29, 0x24, 0x07, 0x08, 0x1b, 0x2b, 0x25, 0x0e, 0x03, // .L..)".)$...+%.. + 0x23, 0x22, 0x2e, 0x02, 0x27, 0x35, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x23, 0x26, 0x26, // #"..'5>.32...#&& + 0x23, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x37, 0x21, 0x35, // #"......32>.77!5 + 0x21, 0x04, 0x41, 0x29, 0x67, 0x74, 0x7c, 0x3c, 0x79, 0xc0, 0x86, 0x49, 0x01, 0x01, 0x42, 0x7e, // !.A)gt|....... + 0x31, 0x40, 0x26, 0x0f, 0x57, 0x97, 0xca, 0x74, 0x54, 0x74, 0xcb, 0x97, 0x57, 0x2f, 0x5c, 0x8b, // 1@&.W..tTt..W/.. + 0x5b, 0x6b, 0x6e, 0x44, 0x72, 0x91, 0x4c, 0x56, 0x4e, 0x92, 0x70, 0x45, 0x05, 0x10, 0x1d, 0x18, // [knDr.LVN.pE.... + 0xee, 0x90, 0x00, 0x01, 0x00, 0x9b, 0x00, 0x00, 0x03, 0xf9, 0x04, 0x8d, 0x00, 0x0b, 0x00, 0x21, // ...............! + 0x40, 0x1e, 0x00, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0x61, 0x05, 0x01, 0x03, 0x03, 0x00, 0x59, // @........a.....Y + 0x02, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x08, 0x1a, // ....=.L......... + 0x2b, 0x21, 0x23, 0x11, 0x21, 0x11, 0x23, 0x11, 0x33, 0x11, 0x21, 0x11, 0x33, 0x03, 0xf9, 0xb2, // +!#.!.#.3.!.3... + 0xfe, 0x06, 0xb2, 0xb2, 0x01, 0xfa, 0xb2, 0x01, 0xf2, 0xfe, 0x0e, 0x04, 0x8d, 0xfd, 0xfd, 0x02, // ................ + 0x03, 0x00, 0x00, 0x01, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, 0x04, 0x8c, 0x00, 0x0b, 0x00, 0x21, // ...............! + 0x40, 0x1e, 0x00, 0x00, 0x05, 0x01, 0x01, 0x02, 0x00, 0x01, 0x61, 0x04, 0x01, 0x02, 0x02, 0x03, // @.........a..... + 0x59, 0x00, 0x03, 0x03, 0x3d, 0x03, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x06, 0x08, 0x1a, // Y...=.L......... + 0x2b, 0x13, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x35, 0x21, 0x11, 0x21, 0xd9, 0x03, 0x37, // +.!.!.!.!5!.!..7 + 0xfe, 0xbd, 0x01, 0x43, 0xfc, 0xc9, 0x01, 0x3b, 0xfe, 0xc5, 0x04, 0x8c, 0xa1, 0xfc, 0xb5, 0xa0, // ...C...;........ + 0xa0, 0x03, 0x4b, 0x00, 0x00, 0x01, 0x00, 0x96, 0xff, 0xf0, 0x03, 0xe6, 0x04, 0x8d, 0x00, 0x17, // ..K............. + 0x00, 0x1f, 0x40, 0x1c, 0x00, 0x00, 0x02, 0x00, 0x72, 0x00, 0x02, 0x03, 0x02, 0x72, 0x00, 0x03, // ..@.....r....r.. + 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x45, 0x01, 0x4c, 0x24, 0x14, 0x25, 0x10, 0x04, 0x08, 0x18, // ..[...E.L$.%.... + 0x2b, 0x01, 0x33, 0x03, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, 0x14, 0x1e, 0x02, 0x33, // +.3...#"..'3...3 + 0x32, 0x3e, 0x02, 0x37, 0x03, 0x28, 0xbe, 0x02, 0x02, 0x44, 0x71, 0x94, 0x50, 0x57, 0x98, 0x73, // 2>.7.(...Dq.PW.s + 0x49, 0x08, 0xbe, 0x28, 0x44, 0x58, 0x31, 0x2f, 0x50, 0x3c, 0x23, 0x02, 0x04, 0x8d, 0xfc, 0xea, // I..(DX1/P<#..... + 0x5f, 0x92, 0x63, 0x33, 0x2c, 0x5d, 0x91, 0x65, 0x3e, 0x59, 0x38, 0x19, 0x21, 0x3d, 0x59, 0x39, // _.c3,].e>Y8.!=Y9 + 0x00, 0x01, 0x00, 0xb4, 0x00, 0x00, 0x04, 0x80, 0x04, 0x8d, 0x00, 0x0c, 0x00, 0x1f, 0x40, 0x1c, // ..............@. + 0x0a, 0x06, 0x01, 0x03, 0x00, 0x01, 0x01, 0x4a, 0x02, 0x01, 0x01, 0x01, 0x00, 0x59, 0x03, 0x01, // .......J.....Y.. + 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x12, 0x13, 0x11, 0x12, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x07, 0x11, // ..=.L.......+... + 0x23, 0x11, 0x33, 0x11, 0x37, 0x01, 0x33, 0x01, 0x01, 0x23, 0x02, 0x00, 0x93, 0xb9, 0xb9, 0x82, // #.3.7.3..#...... + 0x01, 0x8c, 0xe3, 0xfe, 0x22, 0x02, 0x00, 0xe1, 0x02, 0x07, 0x8e, 0xfe, 0x87, 0x04, 0x8d, 0xfd, // ...."........... + 0xd6, 0x8f, 0x01, 0x9b, 0xfd, 0xf9, 0xfd, 0x7a, 0x00, 0x01, 0x00, 0xd1, 0x00, 0x00, 0x04, 0x52, // .......z.......R + 0x04, 0x8d, 0x00, 0x05, 0x00, 0x19, 0x40, 0x16, 0x00, 0x02, 0x00, 0x02, 0x72, 0x00, 0x00, 0x00, // ......@.....r... + 0x01, 0x5a, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x10, 0x03, 0x08, 0x17, 0x2b, 0x25, // .Z...=.L......+% + 0x21, 0x15, 0x21, 0x11, 0x33, 0x01, 0x95, 0x02, 0xbd, 0xfc, 0x7f, 0xc4, 0x97, 0x97, 0x04, 0x8d, // !.!.3........... + 0x00, 0x01, 0x00, 0x9b, 0x00, 0x00, 0x04, 0x3a, 0x04, 0x8d, 0x00, 0x0c, 0x00, 0x27, 0x40, 0x24, // .......:.....'@$ + 0x08, 0x05, 0x02, 0x02, 0x00, 0x01, 0x4a, 0x00, 0x02, 0x00, 0x01, 0x00, 0x02, 0x01, 0x70, 0x04, // ......J.......p. + 0x01, 0x00, 0x00, 0x01, 0x59, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x12, 0x12, 0x11, // ....Y....=.L.... + 0x11, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x13, 0x33, 0x11, 0x23, 0x11, 0x03, 0x23, 0x03, 0x11, 0x23, // ....+..3.#..#..# + 0x11, 0x33, 0x02, 0x6d, 0xdc, 0xf1, 0xb0, 0xda, 0x83, 0xe2, 0xb0, 0xf8, 0x02, 0x58, 0x02, 0x35, // .3.m.........X.5 + 0xfb, 0x73, 0x03, 0xbf, 0xfd, 0x7f, 0x02, 0x73, 0xfc, 0x4f, 0x04, 0x8d, 0x00, 0x01, 0x00, 0xc2, // .s.....s.O...... + 0x00, 0x00, 0x04, 0x0f, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x1e, 0x40, 0x1b, 0x07, 0x02, 0x02, 0x00, // ..........@..... + 0x02, 0x01, 0x4a, 0x03, 0x01, 0x02, 0x02, 0x00, 0x59, 0x01, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x4c, // ..J.....Y....=.L + 0x12, 0x11, 0x12, 0x10, 0x04, 0x08, 0x18, 0x2b, 0x21, 0x23, 0x01, 0x13, 0x23, 0x11, 0x33, 0x01, // .......+!#..#.3. + 0x03, 0x33, 0x04, 0x0f, 0xac, 0xfe, 0x0b, 0x05, 0xb1, 0xae, 0x01, 0xf5, 0x06, 0xb0, 0x03, 0x6c, // .3.............l + 0xfc, 0x94, 0x04, 0x8d, 0xfc, 0x93, 0x03, 0x6d, 0x00, 0x02, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, // .......m.......J + 0x04, 0x9d, 0x00, 0x15, 0x00, 0x2b, 0x00, 0x1d, 0x40, 0x1a, 0x00, 0x01, 0x00, 0x02, 0x03, 0x01, // .....+..@....... + 0x02, 0x63, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x29, 0x29, 0x29, // .c....[...E.L))) + 0x24, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x35, 0x3e, 0x03, // $...+...#"..'5>. + 0x33, 0x32, 0x1e, 0x02, 0x17, 0x27, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x1e, 0x03, // 32...'..#"...... + 0x33, 0x32, 0x3e, 0x02, 0x37, 0x04, 0x4a, 0x01, 0x3d, 0x79, 0xb4, 0x78, 0x77, 0xb4, 0x7a, 0x3f, // 32>.7.J.=y.xw.z? + 0x01, 0x01, 0x3e, 0x7a, 0xb4, 0x77, 0x78, 0xb5, 0x79, 0x3d, 0x01, 0xb7, 0x01, 0x1f, 0x46, 0x73, // ..>z.wx.y=....Fs + 0x54, 0x54, 0x72, 0x47, 0x1f, 0x01, 0x01, 0x20, 0x47, 0x72, 0x54, 0x55, 0x73, 0x45, 0x1e, 0x01, // TTrG... GrTUsE.. + 0x02, 0x24, 0x6e, 0xcc, 0x9c, 0x5e, 0x5e, 0x9d, 0xcc, 0x6d, 0x43, 0x6d, 0xcc, 0x9e, 0x5f, 0x5e, // .$n..^^..mCm.._^ + 0x9d, 0xcd, 0x6e, 0x02, 0x47, 0x92, 0x75, 0x4a, 0x4b, 0x76, 0x91, 0x46, 0x45, 0x47, 0x91, 0x77, // ..n.G.uJKv.FEG.w + 0x4b, 0x4b, 0x76, 0x92, 0x47, 0x00, 0x00, 0x02, 0x00, 0x5e, 0xff, 0x36, 0x04, 0x67, 0x04, 0x9d, // KKv.G....^.6.g.. + 0x00, 0x1a, 0x00, 0x30, 0x00, 0x28, 0x40, 0x25, 0x05, 0x01, 0x00, 0x03, 0x01, 0x4a, 0x07, 0x06, // ...0.(@%.....J.. + 0x02, 0x00, 0x47, 0x00, 0x01, 0x00, 0x02, 0x03, 0x01, 0x02, 0x63, 0x00, 0x03, 0x03, 0x00, 0x5b, // ..G.......c....[ + 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x29, 0x29, 0x29, 0x29, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x0e, // ...E.L))))...+.. + 0x03, 0x07, 0x17, 0x07, 0x25, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x35, 0x3e, 0x03, 0x33, 0x32, // ....%.#"..'5>.32 + 0x1e, 0x02, 0x17, 0x27, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x15, 0x1e, 0x03, 0x33, 0x32, // ...'..#"......32 + 0x3e, 0x02, 0x37, 0x04, 0x65, 0x01, 0x1d, 0x38, 0x52, 0x35, 0xdf, 0x7d, 0xfe, 0xf6, 0x3d, 0x40, // >.7.e..8R5.}..=@ + 0x7a, 0xbf, 0x84, 0x47, 0x01, 0x01, 0x46, 0x84, 0xbe, 0x7a, 0x7a, 0xbf, 0x84, 0x46, 0x01, 0xb8, // z..G..F..zz..F.. + 0x01, 0x26, 0x50, 0x7d, 0x58, 0x57, 0x7c, 0x50, 0x27, 0x01, 0x01, 0x27, 0x51, 0x7d, 0x57, 0x58, // .&P}XW|P'..'Q}WX + 0x7c, 0x50, 0x25, 0x01, 0x02, 0x24, 0x4a, 0x8b, 0x7b, 0x66, 0x26, 0xa3, 0x6f, 0xc8, 0x0e, 0x5a, // |P%..$J.{f&.o..Z + 0x9a, 0xcd, 0x73, 0x43, 0x73, 0xcd, 0x9b, 0x5b, 0x5a, 0x9a, 0xce, 0x74, 0x02, 0x4e, 0x93, 0x72, // ..sCs..[Z..t.N.r + 0x45, 0x46, 0x73, 0x93, 0x4c, 0x45, 0x4d, 0x93, 0x74, 0x46, 0x46, 0x72, 0x94, 0x4e, 0x00, 0x02, // EFs.LEM.tFFr.N.. + 0x00, 0x90, 0x00, 0x00, 0x04, 0x2c, 0x04, 0x8d, 0x00, 0x12, 0x00, 0x1f, 0x00, 0x29, 0x40, 0x26, // .....,.......)@& + 0x0f, 0x01, 0x00, 0x04, 0x01, 0x4a, 0x00, 0x02, 0x00, 0x05, 0x04, 0x02, 0x05, 0x63, 0x00, 0x04, // .....J.......c.. + 0x00, 0x00, 0x01, 0x04, 0x00, 0x61, 0x03, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x28, 0x21, 0x2a, // .....a....=.L(!* + 0x21, 0x11, 0x10, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x1e, 0x03, 0x15, // !.....+.!.#.!... + 0x14, 0x0e, 0x02, 0x07, 0x01, 0x15, 0x23, 0x01, 0x33, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x27, // ......#.3>.54..' + 0x23, 0x02, 0x61, 0xfe, 0xe8, 0xb9, 0x01, 0xaa, 0x54, 0xa1, 0x7d, 0x4b, 0x24, 0x40, 0x57, 0x32, // #.a.....T.}K$@W2 + 0x01, 0x22, 0xc7, 0xfd, 0xe4, 0xf6, 0x2f, 0x5b, 0x47, 0x2d, 0x2b, 0x48, 0x5e, 0x32, 0xf1, 0x01, // ."..../[G-+H^2.. + 0xc1, 0xfe, 0x3f, 0x04, 0x8d, 0x01, 0x28, 0x56, 0x86, 0x5f, 0x3f, 0x60, 0x4b, 0x39, 0x16, 0xfe, // ..?...(V._?`K9.. + 0x1a, 0x0a, 0x02, 0x58, 0x01, 0x18, 0x31, 0x4b, 0x35, 0x38, 0x4f, 0x32, 0x18, 0x01, 0x00, 0x01, // ...X..1K58O2.... + 0x00, 0x8a, 0xff, 0xf0, 0x04, 0x39, 0x04, 0x9d, 0x00, 0x45, 0x00, 0x34, 0x40, 0x31, 0x00, 0x01, // .....9...E.4@1.. + 0x02, 0x04, 0x02, 0x01, 0x04, 0x70, 0x00, 0x04, 0x05, 0x02, 0x04, 0x05, 0x6e, 0x00, 0x00, 0x00, // .....p......n... + 0x02, 0x01, 0x00, 0x02, 0x63, 0x00, 0x05, 0x05, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x45, 0x03, 0x4c, // ....c....[...E.L + 0x42, 0x40, 0x3c, 0x3b, 0x37, 0x35, 0x1f, 0x1d, 0x19, 0x18, 0x14, 0x12, 0x06, 0x08, 0x14, 0x2b, // B@<;75.........+ + 0x01, 0x36, 0x2e, 0x04, 0x27, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x04, 0x33, 0x32, 0x1e, 0x02, 0x17, // .6..'..54>.32... + 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x04, 0x17, 0x1e, 0x03, 0x15, 0x14, // #..#"........... + 0x0e, 0x04, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x03, 0x7f, // ..#"..'3..32>... + 0x01, 0x1a, 0x2d, 0x3a, 0x3f, 0x3f, 0x1b, 0x45, 0x99, 0x81, 0x53, 0x27, 0x42, 0x58, 0x63, 0x67, // ..-:??.E..S'BXcg + 0x30, 0x54, 0x9f, 0x7e, 0x51, 0x06, 0xbb, 0x02, 0x2f, 0x4c, 0x60, 0x32, 0x28, 0x5a, 0x4c, 0x32, // 0T.~Q.../L`2(ZL2 + 0x1f, 0x34, 0x41, 0x43, 0x40, 0x19, 0x46, 0x92, 0x78, 0x4c, 0x28, 0x44, 0x5a, 0x64, 0x69, 0x31, // .4AC@.F.xL(DZdi1 + 0x56, 0xab, 0x8a, 0x5a, 0x06, 0xbc, 0x02, 0x37, 0x56, 0x6a, 0x36, 0x28, 0x5d, 0x4f, 0x35, 0x01, // V..Z...7Vj6(]O5. + 0x2a, 0x24, 0x36, 0x2a, 0x1d, 0x16, 0x10, 0x07, 0x11, 0x33, 0x52, 0x78, 0x56, 0x39, 0x5d, 0x47, // *$6*.....3RxV9]G + 0x33, 0x21, 0x10, 0x2b, 0x59, 0x86, 0x5a, 0x37, 0x4e, 0x32, 0x16, 0x10, 0x27, 0x41, 0x31, 0x22, // 3!.+Y.Z7N2..'A1" + 0x34, 0x28, 0x1d, 0x15, 0x0f, 0x06, 0x12, 0x37, 0x55, 0x79, 0x55, 0x3b, 0x5d, 0x46, 0x31, 0x1f, // 4(.....7UyU;]F1. + 0x0e, 0x2a, 0x59, 0x8a, 0x60, 0x3d, 0x53, 0x33, 0x15, 0x0e, 0x25, 0x40, 0x00, 0x01, 0x00, 0x5d, // .*Y.`=S3..%@...] + 0x00, 0x00, 0x04, 0x69, 0x04, 0x8d, 0x00, 0x07, 0x00, 0x19, 0x40, 0x16, 0x00, 0x03, 0x02, 0x01, // ...i......@..... + 0x00, 0x01, 0x03, 0x00, 0x61, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x10, 0x04, // ....a...=.L..... + 0x08, 0x18, 0x2b, 0x01, 0x21, 0x11, 0x23, 0x11, 0x21, 0x35, 0x21, 0x04, 0x69, 0xfe, 0x57, 0xbc, // ..+.!.#.!5!.i.W. + 0xfe, 0x59, 0x04, 0x0c, 0x03, 0xf4, 0xfc, 0x0c, 0x03, 0xf4, 0x99, 0x00, 0x00, 0x01, 0x00, 0xb5, // .Y.............. + 0xff, 0xf0, 0x04, 0x2b, 0x04, 0x8d, 0x00, 0x19, 0x00, 0x21, 0x40, 0x1e, 0x04, 0x03, 0x02, 0x01, // ...+.....!@..... + 0x02, 0x01, 0x72, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x00, 0x00, // ..r....[...E.L.. + 0x00, 0x19, 0x00, 0x19, 0x25, 0x15, 0x25, 0x05, 0x08, 0x17, 0x2b, 0x01, 0x13, 0x0e, 0x03, 0x23, // ....%.%...+....# + 0x22, 0x2e, 0x02, 0x27, 0x13, 0x33, 0x13, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x13, 0x04, // "..'.3...32>.7.. + 0x2a, 0x01, 0x02, 0x47, 0x78, 0xa0, 0x5b, 0x5c, 0xa0, 0x77, 0x46, 0x01, 0x01, 0xb5, 0x01, 0x01, // *..Gx.[..wF..... + 0x25, 0x43, 0x5f, 0x3b, 0x3b, 0x5f, 0x43, 0x25, 0x01, 0x01, 0x04, 0x8d, 0xfc, 0xf4, 0x5f, 0x94, // %C_;;_C%......_. + 0x68, 0x36, 0x36, 0x66, 0x95, 0x60, 0x03, 0x0c, 0xfc, 0xf4, 0x3b, 0x5d, 0x40, 0x22, 0x22, 0x40, // h66f.`....;]@""@ + 0x5d, 0x3b, 0x03, 0x0c, 0x00, 0x01, 0x00, 0x56, 0x00, 0x00, 0x04, 0x83, 0x04, 0x8d, 0x00, 0x08, // ];.....V........ + 0x00, 0x1b, 0x40, 0x18, 0x01, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x02, 0x01, 0x00, 0x01, 0x00, 0x72, // ..@......J.....r + 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x13, 0x03, 0x08, 0x17, 0x2b, 0x01, 0x17, 0x37, // ...=.L......+..7 + 0x01, 0x33, 0x01, 0x23, 0x01, 0x33, 0x02, 0x50, 0x1c, 0x1d, 0x01, 0x31, 0xc9, 0xfe, 0x40, 0xae, // .3.#.3.P...1..@. + 0xfe, 0x41, 0xc8, 0x01, 0x36, 0x6b, 0x6a, 0x03, 0x58, 0xfb, 0x73, 0x04, 0x8d, 0x00, 0x00, 0x01, // .A..6kj.X.s..... + 0x00, 0x2f, 0x00, 0x00, 0x04, 0xbb, 0x04, 0x8d, 0x00, 0x0c, 0x00, 0x20, 0x40, 0x1d, 0x0a, 0x05, // ./......... @... + 0x02, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x03, 0x02, 0x00, 0x01, 0x00, 0x72, 0x02, 0x01, 0x01, 0x01, // ....J......r.... + 0x3d, 0x01, 0x4c, 0x12, 0x11, 0x12, 0x11, 0x11, 0x05, 0x08, 0x19, 0x2b, 0x01, 0x13, 0x33, 0x03, // =.L........+..3. + 0x23, 0x03, 0x03, 0x23, 0x03, 0x33, 0x13, 0x13, 0x33, 0x03, 0x78, 0x97, 0xac, 0xe9, 0x9f, 0xbc, // #..#.3..3.x..... + 0xc1, 0x9f, 0xe8, 0xab, 0x98, 0xb8, 0x9a, 0x01, 0x53, 0x03, 0x3a, 0xfb, 0x73, 0x03, 0x3e, 0xfc, // ........S.:.s.>. + 0xc2, 0x04, 0x8d, 0xfc, 0xc6, 0x03, 0x3a, 0x00, 0x00, 0x01, 0x00, 0x60, 0x00, 0x00, 0x04, 0x66, // ......:....`...f + 0x04, 0x8d, 0x00, 0x0b, 0x00, 0x1f, 0x40, 0x1c, 0x09, 0x06, 0x03, 0x03, 0x01, 0x00, 0x01, 0x4a, // ......@........J + 0x03, 0x01, 0x00, 0x00, 0x01, 0x59, 0x02, 0x01, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x12, 0x12, 0x12, // .....Y....=.L... + 0x11, 0x04, 0x08, 0x18, 0x2b, 0x01, 0x01, 0x33, 0x01, 0x01, 0x23, 0x01, 0x01, 0x23, 0x01, 0x01, // ....+..3..#..#.. + 0x33, 0x02, 0x5f, 0x01, 0x1d, 0xdb, 0xfe, 0x78, 0x01, 0x97, 0xdc, 0xfe, 0xd8, 0xfe, 0xda, 0xdc, // 3._....x........ + 0x01, 0x94, 0xfe, 0x75, 0xdb, 0x02, 0xda, 0x01, 0xb3, 0xfd, 0xbe, 0xfd, 0xb5, 0x01, 0xbb, 0xfe, // ...u............ + 0x45, 0x02, 0x4b, 0x02, 0x42, 0x00, 0x00, 0x01, 0x00, 0x4d, 0x00, 0x00, 0x04, 0x81, 0x04, 0x8d, // E.K.B....M...... + 0x00, 0x08, 0x00, 0x1c, 0x40, 0x19, 0x06, 0x03, 0x02, 0x01, 0x00, 0x01, 0x4a, 0x02, 0x01, 0x00, // ....@.......J... + 0x01, 0x00, 0x72, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x12, 0x12, 0x11, 0x03, 0x08, 0x17, 0x2b, // ..r...=.L......+ + 0x01, 0x01, 0x33, 0x01, 0x11, 0x23, 0x11, 0x01, 0x33, 0x02, 0x66, 0x01, 0x47, 0xd4, 0xfe, 0x40, // ..3..#..3.f.G..@ + 0xbb, 0xfe, 0x47, 0xd4, 0x02, 0x44, 0x02, 0x49, 0xfd, 0x08, 0xfe, 0x6b, 0x01, 0xa1, 0x02, 0xec, // ..G..D.I...k.... + 0x00, 0x01, 0x00, 0xb9, 0x00, 0x00, 0x04, 0x42, 0x04, 0x8d, 0x00, 0x09, 0x00, 0x27, 0x40, 0x24, // .......B.....'@$ + 0x09, 0x01, 0x02, 0x03, 0x04, 0x01, 0x01, 0x00, 0x02, 0x4a, 0x00, 0x03, 0x00, 0x02, 0x00, 0x03, // .........J...... + 0x02, 0x61, 0x00, 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x12, 0x11, // .a....Y...=.L... + 0x10, 0x04, 0x08, 0x18, 0x2b, 0x25, 0x21, 0x15, 0x21, 0x35, 0x01, 0x21, 0x35, 0x21, 0x17, 0x01, // ....+%!.!5.!5!.. + 0x9f, 0x02, 0xa3, 0xfc, 0x77, 0x02, 0x8b, 0xfd, 0x7e, 0x03, 0x67, 0x01, 0x97, 0x97, 0x7c, 0x03, // ....w...~.g...|. + 0x78, 0x99, 0x79, 0x00, 0x00, 0x02, 0x01, 0x52, 0x04, 0xe0, 0x03, 0x9a, 0x07, 0x03, 0x00, 0x11, // x.y....R........ + 0x00, 0x25, 0x00, 0x08, 0xb5, 0x1c, 0x12, 0x04, 0x00, 0x02, 0x30, 0x2b, 0x01, 0x14, 0x0e, 0x02, // .%........0+.... + 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x37, 0x27, 0x27, 0x36, 0x36, // #"..53..3267''66 + 0x35, 0x34, 0x2e, 0x02, 0x23, 0x37, 0x32, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x17, 0x03, 0x9a, // 54..#72......... + 0x2a, 0x4b, 0x6c, 0x42, 0x42, 0x6c, 0x4d, 0x2a, 0x91, 0x01, 0x47, 0x4c, 0x4a, 0x46, 0x01, 0xd2, // *KlBBlM*..GLJF.. + 0x06, 0x45, 0x47, 0x1b, 0x2c, 0x3a, 0x20, 0x07, 0x8c, 0x99, 0x1a, 0x2a, 0x36, 0x1b, 0x03, 0x05, // .EG.,: ....*6... + 0xb0, 0x2f, 0x4c, 0x37, 0x1e, 0x1e, 0x37, 0x4c, 0x2f, 0x30, 0x43, 0x43, 0x30, 0x11, 0x7c, 0x04, // ./L7..7L/0CC0.|. + 0x16, 0x1f, 0x11, 0x17, 0x0d, 0x06, 0x52, 0x4c, 0x44, 0x1d, 0x29, 0x1b, 0x10, 0x03, 0x3e, 0x00, // ......RLD.)...>. + 0x00, 0x01, 0x01, 0x0e, 0x00, 0x00, 0x03, 0x52, 0x04, 0x90, 0x00, 0x06, 0x00, 0x06, 0xb3, 0x05, // .......R........ + 0x00, 0x01, 0x30, 0x2b, 0x21, 0x23, 0x11, 0x05, 0x35, 0x25, 0x33, 0x03, 0x52, 0xba, 0xfe, 0x76, // ..0+!#..5%3.R..v + 0x02, 0x2a, 0x1a, 0x03, 0xaf, 0x75, 0x9e, 0xb8, 0x00, 0x01, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x32, // .*...u.........2 + 0x04, 0x9d, 0x00, 0x24, 0x00, 0x06, 0xb3, 0x17, 0x00, 0x01, 0x30, 0x2b, 0x21, 0x21, 0x35, 0x01, // ...$......0+!!5. + 0x3e, 0x03, 0x27, 0x2e, 0x03, 0x23, 0x26, 0x0e, 0x02, 0x07, 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, // >.'..#&...#>.32. + 0x02, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x01, 0x21, 0x04, 0x32, 0xfc, 0x9f, 0x01, 0xab, 0x1e, 0x46, // .......!.2.....F + 0x3a, 0x27, 0x01, 0x01, 0x22, 0x3a, 0x4c, 0x2a, 0x36, 0x5b, 0x42, 0x27, 0x03, 0xba, 0x03, 0x4a, // :'..":L*6[B'...J + 0x79, 0x9c, 0x55, 0x4c, 0x8f, 0x6f, 0x43, 0x31, 0x4a, 0x59, 0x2a, 0xfe, 0xb8, 0x02, 0x7e, 0x83, // y.UL.oC1JY*...~. + 0x01, 0x9d, 0x1d, 0x41, 0x4a, 0x53, 0x2f, 0x2c, 0x45, 0x30, 0x1a, 0x01, 0x1b, 0x38, 0x52, 0x37, // ...AJS/,E0...8R7 + 0x5a, 0x8b, 0x5e, 0x30, 0x2b, 0x54, 0x7d, 0x53, 0x3d, 0x73, 0x6a, 0x5f, 0x27, 0xfe, 0xe9, 0x00, // Z.^0+T}S=sj_'... + 0x00, 0x01, 0x00, 0xc5, 0xff, 0xf0, 0x04, 0x16, 0x04, 0x9d, 0x00, 0x40, 0x00, 0x06, 0xb3, 0x29, // ...........@...) + 0x15, 0x01, 0x30, 0x2b, 0x01, 0x33, 0x3e, 0x03, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, // ..0+.3>.54..#".. + 0x07, 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x1e, 0x03, 0x15, // .#>.32.......... + 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, // ...#"..'3..32>.5 + 0x34, 0x2e, 0x02, 0x27, 0x23, 0x01, 0xd7, 0x7a, 0x2b, 0x59, 0x46, 0x2d, 0x25, 0x3d, 0x4f, 0x2b, // 4..'#..z+YF-%=O+ + 0x29, 0x4e, 0x3e, 0x28, 0x04, 0xba, 0x04, 0x49, 0x73, 0x90, 0x4a, 0x4c, 0x93, 0x72, 0x45, 0x21, // )N>(...Is.JL.rE! + 0x38, 0x49, 0x2a, 0x2f, 0x52, 0x3d, 0x23, 0x4b, 0x79, 0x98, 0x4e, 0x4e, 0x95, 0x76, 0x4a, 0x04, // 8I*/R=#Ky.NN.vJ. + 0xb9, 0x04, 0x2a, 0x42, 0x53, 0x2c, 0x2d, 0x55, 0x44, 0x29, 0x2f, 0x4d, 0x5f, 0x30, 0x7a, 0x02, // ..*BS,-UD)/M_0z. + 0x9b, 0x01, 0x13, 0x2b, 0x45, 0x33, 0x2e, 0x44, 0x2c, 0x15, 0x13, 0x29, 0x40, 0x2c, 0x51, 0x78, // ...+E3.D,..)@,Qx + 0x4f, 0x28, 0x27, 0x51, 0x7d, 0x56, 0x32, 0x50, 0x3e, 0x2e, 0x0f, 0x0e, 0x2d, 0x42, 0x59, 0x3b, // O('Q}V2P>...-BY; + 0x57, 0x80, 0x54, 0x29, 0x27, 0x51, 0x7c, 0x55, 0x2f, 0x43, 0x2c, 0x14, 0x16, 0x2e, 0x47, 0x32, // W.T)'Q|U/C,...G2 + 0x38, 0x4b, 0x2c, 0x13, 0x01, 0x00, 0x00, 0x02, 0x00, 0x89, 0x00, 0x00, 0x04, 0x3e, 0x04, 0x8d, // 8K,..........>.. + 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x08, 0xb5, 0x0d, 0x0b, 0x09, 0x04, 0x02, 0x30, 0x2b, 0x01, 0x33, // ............0+.3 + 0x15, 0x23, 0x11, 0x23, 0x11, 0x21, 0x27, 0x01, 0x33, 0x01, 0x21, 0x11, 0x07, 0x03, 0x8e, 0xb0, // .#.#.!'.3.!..... + 0xb0, 0xb0, 0xfd, 0xae, 0x03, 0x02, 0x43, 0xc2, 0xfd, 0xca, 0x01, 0x86, 0x26, 0x01, 0x9d, 0x97, // ......C.....&... + 0xfe, 0xfa, 0x01, 0x06, 0x73, 0x03, 0x14, 0xfd, 0x10, 0x02, 0x17, 0x41, 0x00, 0x01, 0x00, 0xd1, // ....s......A.... + 0xff, 0xf0, 0x04, 0x15, 0x04, 0x8d, 0x00, 0x28, 0x00, 0x06, 0xb3, 0x11, 0x01, 0x01, 0x30, 0x2b, // .......(......0+ + 0x13, 0x13, 0x21, 0x15, 0x21, 0x03, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, // ..!.!.6632...... + 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, 0x16, 0x16, 0x37, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, // #"..'3..72>.54.. + 0x23, 0x26, 0x06, 0x07, 0xf5, 0x44, 0x02, 0xa8, 0xfd, 0xf5, 0x26, 0x33, 0x6b, 0x39, 0x56, 0x92, // #&...D....&3k9V. + 0x6a, 0x3c, 0x40, 0x71, 0x99, 0x58, 0x4e, 0x8e, 0x70, 0x4c, 0x0a, 0xb2, 0x13, 0x82, 0x5b, 0x36, // j<@q.XN.pL....[6 + 0x57, 0x3c, 0x20, 0x29, 0x46, 0x5d, 0x34, 0x3e, 0x63, 0x32, 0x02, 0x43, 0x02, 0x4a, 0xa2, 0xfe, // W< )F]4>c2.C.J.. + 0xdf, 0x17, 0x19, 0x38, 0x66, 0x90, 0x58, 0x5b, 0x90, 0x64, 0x35, 0x2a, 0x53, 0x7a, 0x51, 0x5b, // ...8f.X[.d5*SzQ[ + 0x57, 0x01, 0x25, 0x41, 0x58, 0x35, 0x36, 0x56, 0x3c, 0x21, 0x01, 0x24, 0x22, 0x00, 0x00, 0x02, // W.%AX56V.7. + 0x22, 0x0e, 0x02, 0x07, 0x15, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x03, // "......32>.54... + 0x6f, 0x0f, 0x5d, 0x9e, 0x77, 0x49, 0x09, 0x35, 0x95, 0x4e, 0x55, 0x8a, 0x62, 0x35, 0x3f, 0x6f, // o.].wI.5.NU.b5?o + 0x97, 0x57, 0x62, 0x9e, 0x6f, 0x3d, 0x01, 0x01, 0x54, 0xa2, 0xec, 0x98, 0xcf, 0x27, 0x4a, 0x40, // .Wb.o=..T....'J@ + 0x33, 0x0f, 0x01, 0x1e, 0x3b, 0x5a, 0x3e, 0x34, 0x56, 0x3d, 0x21, 0x21, 0x3c, 0x55, 0x04, 0x93, // 3...;Z>4V=!!.7..54 + 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, // >.32...4..#".... + 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, // ..32>..4..#".... + 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x04, 0x00, 0x1e, 0x33, 0x45, 0x27, 0x2d, 0x50, 0x3c, 0x22, // ..32>....3E'-P<" + 0x4b, 0x79, 0x97, 0x4c, 0x4c, 0x97, 0x78, 0x4b, 0x22, 0x3a, 0x4f, 0x2d, 0x27, 0x44, 0x32, 0x1d, // Ky.LL.xK":O-'D2. + 0x43, 0x6d, 0x8d, 0x49, 0x49, 0x8f, 0x6f, 0x44, 0x9c, 0x2a, 0x43, 0x56, 0x2c, 0x2c, 0x55, 0x42, // Cm.II.oD.*CV,,UB + 0x28, 0x29, 0x43, 0x55, 0x2c, 0x2c, 0x55, 0x43, 0x29, 0x1d, 0x24, 0x3b, 0x4c, 0x27, 0x29, 0x49, // ()CU,,UC).$;L')I + 0x39, 0x21, 0x22, 0x39, 0x4b, 0x28, 0x28, 0x4b, 0x3a, 0x23, 0x03, 0x5a, 0x30, 0x50, 0x41, 0x31, // 9!"9K((K:#.Z0PA1 + 0x11, 0x12, 0x34, 0x46, 0x59, 0x36, 0x56, 0x7d, 0x52, 0x27, 0x27, 0x51, 0x7e, 0x56, 0x36, 0x59, // ..4FY6V}R''Q~V6Y + 0x46, 0x34, 0x12, 0x12, 0x31, 0x41, 0x4f, 0x30, 0x52, 0x79, 0x50, 0x28, 0x28, 0x50, 0x79, 0xfd, // F4..1AO0RyP((Py. + 0x9a, 0x30, 0x4a, 0x31, 0x19, 0x19, 0x31, 0x4a, 0x30, 0x31, 0x48, 0x2f, 0x17, 0x17, 0x2f, 0x48, // .0J1..1J01H/../H + 0x02, 0x3e, 0x2a, 0x43, 0x2d, 0x18, 0x18, 0x2d, 0x42, 0x2b, 0x2b, 0x42, 0x2d, 0x18, 0x18, 0x2d, // .>*C-..-B++B-..- + 0x42, 0x00, 0x00, 0x02, 0x00, 0xba, 0xff, 0xfa, 0x03, 0xff, 0x04, 0x9d, 0x00, 0x1f, 0x00, 0x34, // B..............4 + 0x00, 0x08, 0xb5, 0x2a, 0x20, 0x1d, 0x11, 0x02, 0x30, 0x2b, 0x25, 0x3e, 0x03, 0x37, 0x06, 0x06, // ...* ...0+%>.7.. + 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x15, 0x0e, 0x03, // #"..54>.32...... + 0x07, 0x23, 0x35, 0x13, 0x32, 0x3e, 0x02, 0x37, 0x35, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, // .#5.2>.75..#"... + 0x14, 0x1e, 0x02, 0x01, 0x88, 0x5b, 0x9c, 0x75, 0x48, 0x08, 0x33, 0x8f, 0x4e, 0x55, 0x8c, 0x63, // .....[.uH.3.NU.c + 0x36, 0x3f, 0x70, 0x97, 0x59, 0x67, 0x9d, 0x6a, 0x37, 0x01, 0x01, 0x53, 0xa0, 0xeb, 0x98, 0x12, // 6?p.Yg.j7..S.... + 0xdf, 0x27, 0x4a, 0x3f, 0x32, 0x0f, 0x01, 0x1d, 0x3a, 0x59, 0x3c, 0x35, 0x56, 0x3c, 0x21, 0x20, // .'J?2...:Y<5V.32...'4&#". + 0x15, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x35, 0x03, 0x8d, 0x2a, 0x4c, 0x6c, 0x43, 0x44, 0x6d, // ....3265..*LlCDm + 0x4d, 0x2b, 0x2a, 0x4d, 0x6d, 0x43, 0x43, 0x6d, 0x4d, 0x2a, 0x9e, 0x46, 0x43, 0x43, 0x46, 0x47, // M+*MmCCmM*.FCCFG + 0x44, 0x42, 0x45, 0x01, 0x45, 0x55, 0x7e, 0x54, 0x29, 0x29, 0x54, 0x7e, 0x55, 0x8a, 0x54, 0x7f, // DBE.EU~T))T~U.T. + 0x54, 0x2a, 0x2a, 0x54, 0x7f, 0x54, 0x0f, 0x61, 0x5f, 0x5f, 0x61, 0xa7, 0x63, 0x5f, 0x5f, 0x63, // T**T.T.a__a.c__c + 0x00, 0x01, 0x01, 0x5b, 0x00, 0x00, 0x02, 0xcf, 0x03, 0x15, 0x00, 0x06, 0x00, 0x06, 0xb3, 0x05, // ...[............ + 0x00, 0x01, 0x30, 0x2b, 0x21, 0x23, 0x11, 0x07, 0x35, 0x25, 0x33, 0x02, 0xcf, 0x9d, 0xd7, 0x01, // ..0+!#..5%3..... + 0x62, 0x12, 0x02, 0x59, 0x39, 0x80, 0x75, 0x00, 0x00, 0x02, 0x01, 0x42, 0x04, 0xdf, 0x03, 0xa0, // b..Y9.u....B.... + 0x06, 0x8a, 0x00, 0x13, 0x00, 0x17, 0x00, 0x08, 0xb5, 0x16, 0x14, 0x04, 0x00, 0x02, 0x30, 0x2b, // ..............0+ + 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x36, // ....#"..53...326 + 0x37, 0x27, 0x33, 0x07, 0x23, 0x03, 0xa0, 0x2c, 0x4f, 0x6f, 0x44, 0x45, 0x70, 0x4f, 0x2c, 0x98, // 7'3.#..,OoDEpO,. + 0x12, 0x25, 0x39, 0x28, 0x4d, 0x47, 0x01, 0x5f, 0x99, 0xa4, 0x66, 0x05, 0xb0, 0x2f, 0x4d, 0x37, // .%9(MG._..f../M7 + 0x1e, 0x1e, 0x37, 0x4d, 0x2f, 0x18, 0x2b, 0x1f, 0x12, 0x44, 0x30, 0xda, 0xc6, 0x00, 0x00, 0x01, // ..7M/.+..D0..... + 0x01, 0x38, 0xff, 0xf5, 0x03, 0x94, 0x03, 0x20, 0x00, 0x2f, 0x00, 0x06, 0xb3, 0x1e, 0x0f, 0x01, // .8..... ./...... + 0x30, 0x2b, 0x01, 0x33, 0x32, 0x36, 0x35, 0x34, 0x26, 0x23, 0x22, 0x06, 0x07, 0x23, 0x34, 0x3e, // 0+.32654&#"..#4> + 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x06, 0x07, 0x16, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, // .32...........#" + 0x2e, 0x02, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, 0x36, 0x27, 0x34, 0x26, 0x23, 0x23, 0x02, 0x03, // ..53..326'4&##.. + 0x54, 0x46, 0x4c, 0x42, 0x43, 0x39, 0x4a, 0x01, 0x9d, 0x2d, 0x4d, 0x68, 0x3c, 0x40, 0x6c, 0x4e, // TFLBC9J..-Mh<@lN + 0x2b, 0x47, 0x41, 0x96, 0x2f, 0x53, 0x70, 0x40, 0x39, 0x6b, 0x53, 0x33, 0x9e, 0x01, 0x4f, 0x41, // +GA./Sp@9kS3..OA + 0x44, 0x4c, 0x01, 0x57, 0x48, 0x54, 0x01, 0xcb, 0x3a, 0x33, 0x2d, 0x3a, 0x30, 0x2c, 0x33, 0x52, // DL.WHT..:3-:0,3R + 0x39, 0x1f, 0x1d, 0x39, 0x54, 0x37, 0x38, 0x5a, 0x19, 0x2a, 0x8e, 0x38, 0x56, 0x3a, 0x1f, 0x1b, // 9..9T78Z.*.8V:.. + 0x39, 0x58, 0x3d, 0x2e, 0x3b, 0x3c, 0x33, 0x3f, 0x34, 0x00, 0x00, 0x02, 0x01, 0x23, 0x00, 0x00, // 9X=.;<3?4....#.. + 0x03, 0xa8, 0x03, 0x15, 0x00, 0x0a, 0x00, 0x0e, 0x00, 0x2b, 0x40, 0x28, 0x0d, 0x01, 0x00, 0x04, // .........+@(.... + 0x08, 0x01, 0x01, 0x00, 0x02, 0x4a, 0x05, 0x01, 0x00, 0x03, 0x01, 0x01, 0x02, 0x00, 0x01, 0x61, // .....J.........a + 0x00, 0x04, 0x04, 0x02, 0x59, 0x00, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x11, 0x12, 0x11, 0x11, 0x11, // ....Y...=.L..... + 0x10, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x33, 0x15, 0x23, 0x15, 0x23, 0x35, 0x21, 0x27, 0x01, 0x33, // ....+.3.#.#5!'.3 + 0x01, 0x33, 0x11, 0x07, 0x03, 0x3d, 0x6b, 0x6b, 0x9d, 0xfe, 0x89, 0x06, 0x01, 0x79, 0xa1, 0xfe, // .3...=kk.....y.. + 0x84, 0xdf, 0x11, 0x01, 0x2b, 0x82, 0xa9, 0xa9, 0x66, 0x02, 0x06, 0xfe, 0x16, 0x01, 0x21, 0x1c, // ....+...f.....!. + 0x00, 0x01, 0x01, 0x40, 0xff, 0xf5, 0x03, 0x8c, 0x03, 0x15, 0x00, 0x28, 0x00, 0x06, 0xb3, 0x11, // ...@.......(.... + 0x01, 0x01, 0x30, 0x2b, 0x01, 0x13, 0x21, 0x15, 0x21, 0x07, 0x36, 0x36, 0x33, 0x32, 0x1e, 0x02, // ..0+..!.!.6632.. + 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, 0x16, 0x16, 0x33, 0x32, 0x3e, 0x02, // ....#"..'3..32>. + 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x07, 0x01, 0x55, 0x32, 0x01, 0xde, 0xfe, 0xa3, 0x16, // 54&#"....U2..... + 0x14, 0x4a, 0x2d, 0x3f, 0x65, 0x46, 0x25, 0x24, 0x49, 0x6f, 0x4a, 0x38, 0x68, 0x51, 0x32, 0x03, // .J-?eF%$IoJ8hQ2. + 0x9b, 0x06, 0x4a, 0x3b, 0x24, 0x33, 0x22, 0x10, 0x50, 0x48, 0x1a, 0x28, 0x1f, 0x18, 0x0c, 0x01, // ..J;$3".PH.(.... + 0x83, 0x01, 0x92, 0x84, 0xaa, 0x08, 0x15, 0x23, 0x43, 0x60, 0x3c, 0x36, 0x62, 0x4a, 0x2b, 0x1e, // .......#C`<6bJ+. + 0x3b, 0x54, 0x36, 0x33, 0x30, 0x15, 0x27, 0x34, 0x1f, 0x3f, 0x4c, 0x08, 0x0c, 0x0f, 0x08, 0x00, // ;T630.'4.?L..... + 0x00, 0x02, 0x01, 0x3b, 0xff, 0xf5, 0x03, 0x90, 0x03, 0x1e, 0x00, 0x1c, 0x00, 0x2b, 0x00, 0x08, // ...;.........+.. + 0xb5, 0x23, 0x1d, 0x10, 0x00, 0x02, 0x30, 0x2b, 0x01, 0x15, 0x23, 0x20, 0x07, 0x36, 0x36, 0x33, // .#....0+..# .663 + 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, // 2......#"..554>. + 0x33, 0x03, 0x22, 0x06, 0x07, 0x15, 0x16, 0x16, 0x37, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x03, // 3.".....72>.54&. + 0x0d, 0x0b, 0xfe, 0xf0, 0x19, 0x20, 0x5e, 0x3c, 0x3f, 0x5f, 0x3f, 0x20, 0x29, 0x4b, 0x6c, 0x43, // ..... ^.... + 0x03, 0x20, 0x00, 0x1f, 0x00, 0x2f, 0x00, 0x3b, 0x00, 0x9d, 0xb6, 0x13, 0x03, 0x02, 0x02, 0x05, // . .../.;........ + 0x01, 0x4a, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x1b, 0x00, 0x01, 0x00, 0x04, 0x05, 0x01, 0x04, // .JK..PX@........ + 0x63, 0x00, 0x05, 0x00, 0x02, 0x03, 0x05, 0x02, 0x63, 0x00, 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, // c.......c....[.. + 0x00, 0x3d, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0c, 0x50, 0x58, 0x40, 0x1b, 0x00, 0x01, 0x00, 0x04, // .=.L.K..PX@..... + 0x05, 0x01, 0x04, 0x63, 0x00, 0x05, 0x00, 0x02, 0x03, 0x05, 0x02, 0x63, 0x00, 0x03, 0x03, 0x00, // ...c.......c.... + 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x1b, 0x4b, 0xb0, 0x0e, 0x50, 0x58, 0x40, 0x1b, 0x00, // [...E.L.K..PX@.. + 0x01, 0x00, 0x04, 0x05, 0x01, 0x04, 0x63, 0x00, 0x05, 0x00, 0x02, 0x03, 0x05, 0x02, 0x63, 0x00, // ......c.......c. + 0x03, 0x03, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x1b, 0x40, 0x1b, 0x00, 0x01, 0x00, // ...[...=.L.@.... + 0x04, 0x05, 0x01, 0x04, 0x63, 0x00, 0x05, 0x00, 0x02, 0x03, 0x05, 0x02, 0x63, 0x00, 0x03, 0x03, // ....c.......c... + 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4c, 0x59, 0x59, 0x59, 0x40, 0x09, 0x24, 0x26, 0x24, // .[...E.LYYY@.$&$ + 0x28, 0x2e, 0x2a, 0x06, 0x08, 0x1a, 0x2b, 0x01, 0x06, 0x06, 0x07, 0x16, 0x16, 0x15, 0x14, 0x0e, // (.*...+......... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x37, 0x26, 0x26, 0x35, 0x34, 0x3e, 0x02, 0x33, // .#"..5467&&54>.3 + 0x32, 0x1e, 0x02, 0x03, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x3e, // 2...4..#"....32> + 0x02, 0x03, 0x34, 0x26, 0x23, 0x22, 0x06, 0x15, 0x14, 0x16, 0x33, 0x32, 0x36, 0x03, 0x7b, 0x01, // ..4&#"....326.{. + 0x40, 0x37, 0x3f, 0x4c, 0x2e, 0x4f, 0x6c, 0x3e, 0x3e, 0x6d, 0x50, 0x2e, 0x4b, 0x40, 0x37, 0x40, // @7?L.Ol>>mP.K@7@ + 0x29, 0x4a, 0x65, 0x3c, 0x3b, 0x66, 0x4a, 0x2a, 0x89, 0x16, 0x25, 0x33, 0x1e, 0x3d, 0x4e, 0x4e, // )Je<;fJ*..%3.=NN + 0x3e, 0x1e, 0x32, 0x26, 0x15, 0x15, 0x41, 0x36, 0x36, 0x41, 0x42, 0x36, 0x36, 0x40, 0x02, 0x43, // >.2&..A66AB66@.C + 0x3b, 0x58, 0x1a, 0x1a, 0x61, 0x43, 0x39, 0x55, 0x39, 0x1c, 0x1c, 0x39, 0x55, 0x39, 0x43, 0x61, // ;X..aC9U9..9U9Ca + 0x1a, 0x1a, 0x58, 0x3b, 0x36, 0x52, 0x38, 0x1d, 0x1d, 0x38, 0x52, 0xfe, 0x6b, 0x1a, 0x29, 0x1c, // ..X;6R8..8R.k.). + 0x0f, 0x39, 0x35, 0x36, 0x39, 0x0f, 0x1c, 0x29, 0x01, 0x71, 0x2f, 0x36, 0x35, 0x30, 0x2f, 0x37, // .9569..).q/650/7 + 0x37, 0x00, 0x00, 0x02, 0x01, 0x40, 0xff, 0xf9, 0x03, 0x8c, 0x03, 0x20, 0x00, 0x1b, 0x00, 0x2c, // 7....@..... ..., + 0x00, 0x08, 0xb5, 0x22, 0x1c, 0x19, 0x0f, 0x02, 0x30, 0x2b, 0x25, 0x32, 0x36, 0x37, 0x06, 0x06, // ..."....0+%267.. + 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x15, 0x14, 0x06, // #"..54>.32...... + 0x07, 0x23, 0x35, 0x13, 0x32, 0x36, 0x37, 0x35, 0x34, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, // .#5.26754&#".... + 0x1e, 0x02, 0x01, 0xd5, 0x87, 0x86, 0x0b, 0x1f, 0x56, 0x35, 0x3f, 0x61, 0x41, 0x22, 0x29, 0x4c, // ........V5?aA")L + 0x6c, 0x44, 0x46, 0x6d, 0x4c, 0x28, 0xd6, 0xe0, 0x0e, 0x9f, 0x30, 0x47, 0x11, 0x4e, 0x3c, 0x20, // lDFmL(....0G.N< + 0x32, 0x23, 0x13, 0x12, 0x22, 0x34, 0x78, 0x61, 0x67, 0x1d, 0x24, 0x27, 0x45, 0x61, 0x3b, 0x39, // 2#.."4xag.$'Ea;9 + 0x66, 0x4d, 0x2d, 0x2c, 0x54, 0x78, 0x4b, 0x33, 0xd1, 0xdf, 0x01, 0x7f, 0x01, 0x00, 0x2a, 0x1d, // fM-,TxK3......*. + 0x3c, 0x51, 0x52, 0x18, 0x29, 0x37, 0x1f, 0x1e, 0x35, 0x26, 0x16, 0x00, 0x00, 0x01, 0x01, 0x35, // .32......#"..7. + 0x16, 0x33, 0x32, 0x36, 0x37, 0x34, 0x26, 0x23, 0x22, 0x06, 0x02, 0xe2, 0xc6, 0xdc, 0x7c, 0x7f, // .32674&#".....|. + 0x1c, 0x2f, 0x3e, 0x23, 0x22, 0x3e, 0x2d, 0x1b, 0x1b, 0x2d, 0x3e, 0x22, 0x23, 0x3e, 0x2f, 0x1c, // ./>#">-..->"#>/. + 0x55, 0x01, 0x32, 0x24, 0x23, 0x30, 0x01, 0x31, 0x23, 0x24, 0x32, 0x06, 0x72, 0xb8, 0xd7, 0x24, // U.2$#0.1#$2.r..$ + 0x3e, 0x2c, 0x19, 0x19, 0x2c, 0x3e, 0x24, 0x24, 0x3c, 0x2b, 0x18, 0x18, 0x2b, 0x3c, 0x24, 0x23, // >,..,>$$<+..+<$# + 0x32, 0x32, 0x23, 0x26, 0x32, 0x32, 0x00, 0x02, 0x01, 0xf5, 0x04, 0x82, 0x03, 0xb7, 0x05, 0xc4, // 22#&22.......... + 0x00, 0x05, 0x00, 0x0e, 0x00, 0x08, 0xb5, 0x0d, 0x09, 0x04, 0x01, 0x02, 0x30, 0x2b, 0x01, 0x13, // ............0+.. + 0x33, 0x15, 0x03, 0x23, 0x27, 0x36, 0x36, 0x37, 0x17, 0x06, 0x07, 0x15, 0x23, 0x02, 0xaf, 0x60, // 3..#'667....#..` + 0xa8, 0xb8, 0x50, 0xba, 0x09, 0x33, 0x2d, 0x48, 0x33, 0x03, 0x7b, 0x04, 0x9e, 0x01, 0x26, 0x15, // ..P..3-H3.{...&. + 0xfe, 0xd5, 0x8a, 0x3b, 0x5d, 0x1e, 0x03, 0x53, 0x66, 0x86, 0x00, 0x02, 0x01, 0x74, 0x04, 0xd9, // ...;]..Sf....t.. + 0x03, 0xc2, 0x06, 0xd0, 0x00, 0x13, 0x00, 0x2f, 0x00, 0x08, 0xb5, 0x2f, 0x21, 0x04, 0x00, 0x02, // ......./.../!... + 0x30, 0x2b, 0x01, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x33, 0x16, 0x16, 0x33, 0x32, // 0+....#"..53..32 + 0x3e, 0x02, 0x35, 0x13, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x23, 0x22, 0x06, 0x07, 0x27, // >.5....#"..#"..' + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x33, 0x32, 0x36, 0x35, 0x03, 0xc2, 0x2a, 0x4d, 0x6d, // 4>.32..3265..*Mm + 0x43, 0x43, 0x6d, 0x4d, 0x2a, 0x95, 0x01, 0x44, 0x4d, 0x26, 0x37, 0x24, 0x11, 0x8c, 0x18, 0x2c, // CCmM*..DM&7$..., + 0x3d, 0x24, 0x28, 0x36, 0x2f, 0x2f, 0x21, 0x23, 0x2e, 0x01, 0x54, 0x19, 0x2b, 0x3d, 0x25, 0x21, // =$(6//!#..T.+=%! + 0x35, 0x33, 0x34, 0x20, 0x22, 0x30, 0x05, 0xae, 0x2f, 0x4f, 0x38, 0x1f, 0x1f, 0x38, 0x4f, 0x2f, // 534 "0../O8..8O/ + 0x31, 0x45, 0x13, 0x20, 0x2b, 0x18, 0x01, 0x0a, 0x24, 0x41, 0x31, 0x1d, 0x17, 0x1d, 0x17, 0x33, // 1E. +...$A1....3 + 0x26, 0x15, 0x24, 0x42, 0x32, 0x1e, 0x17, 0x1d, 0x17, 0x33, 0x26, 0x00, 0x00, 0x01, 0x02, 0x06, // &.$B2....3&..... + 0xfe, 0x99, 0x02, 0xbf, 0x00, 0x9a, 0x00, 0x03, 0x00, 0x18, 0x40, 0x15, 0x00, 0x01, 0x00, 0x00, // ..........@..... + 0x01, 0x55, 0x00, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x01, 0x00, 0x4d, 0x11, 0x10, 0x02, 0x06, // .U....Y....M.... + 0x16, 0x2b, 0x01, 0x23, 0x11, 0x33, 0x02, 0xbf, 0xb9, 0xb9, 0xfe, 0x99, 0x02, 0x01, 0x00, 0x01, // .+.#.3.......... + 0x01, 0x69, 0xfe, 0x64, 0x03, 0x11, 0x00, 0x42, 0x00, 0x19, 0x00, 0x06, 0xb3, 0x09, 0x00, 0x01, // .i.d...B........ + 0x30, 0x2b, 0x25, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x37, 0x16, 0x16, // 0+%......#"&'7.. + 0x33, 0x32, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x27, 0x02, 0x47, 0x34, 0x4d, 0x31, 0x18, 0x24, 0x3d, // 32654..'.G4M1.$= + 0x53, 0x2f, 0x48, 0x5e, 0x1f, 0x20, 0x13, 0x3d, 0x26, 0x3e, 0x33, 0x16, 0x25, 0x2e, 0x18, 0x42, // S/H^. .=&>3.%..B + 0x1b, 0x41, 0x46, 0x49, 0x23, 0x33, 0x4d, 0x35, 0x1b, 0x1d, 0x0f, 0x7a, 0x08, 0x13, 0x30, 0x2a, // .AFI#3M5...z..0* + 0x1b, 0x32, 0x2d, 0x2a, 0x13, 0x00, 0x00, 0x01, 0x01, 0x60, 0xfe, 0x4b, 0x03, 0x12, 0x00, 0x97, // .2-*.....`.K.... + 0x00, 0x11, 0x00, 0x29, 0x40, 0x26, 0x08, 0x01, 0x01, 0x02, 0x07, 0x01, 0x00, 0x01, 0x02, 0x4a, // ...)@&.........J + 0x03, 0x01, 0x02, 0x01, 0x02, 0x72, 0x00, 0x01, 0x01, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x21, 0x00, // .....r........!. + 0x4c, 0x00, 0x00, 0x00, 0x11, 0x00, 0x11, 0x27, 0x23, 0x04, 0x06, 0x16, 0x2b, 0x25, 0x15, 0x14, // L......'#...+%.. + 0x06, 0x23, 0x22, 0x26, 0x27, 0x37, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x35, 0x35, 0x03, 0x12, 0xa8, // .#"&'7..32655... + 0x9a, 0x1e, 0x35, 0x1d, 0x0e, 0x08, 0x1b, 0x1e, 0x1a, 0x07, 0x42, 0x47, 0x97, 0xf0, 0xa7, 0xb5, // ..5.......BG.... + 0x08, 0x0a, 0x9d, 0x03, 0x05, 0x03, 0x02, 0x60, 0x5a, 0xf0, 0x00, 0x03, 0x00, 0x6e, 0xfe, 0x4a, // .......`Z....n.J + 0x04, 0x60, 0x04, 0x4e, 0x00, 0x3d, 0x00, 0x52, 0x00, 0x68, 0x00, 0x0a, 0xb7, 0x62, 0x57, 0x47, // .`.N.=.R.h...bWG + 0x40, 0x39, 0x1e, 0x03, 0x30, 0x2b, 0x01, 0x23, 0x16, 0x16, 0x15, 0x15, 0x14, 0x0e, 0x02, 0x23, // @9..0+.#.......# + 0x22, 0x27, 0x06, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, // "'......332..... + 0x02, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x26, 0x26, 0x35, 0x34, 0x3e, 0x02, // .#"..54>.7&&54>. + 0x37, 0x26, 0x26, 0x35, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x17, 0x21, 0x01, 0x22, 0x27, 0x06, // 7&&554>.32.!."'. + 0x06, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x01, 0x14, // .....32>.54..#.. + 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, 0x15, // ..32>.554..#"... + 0x04, 0x60, 0x96, 0x1d, 0x1e, 0x3f, 0x71, 0x9d, 0x5e, 0x52, 0x46, 0x14, 0x1f, 0x13, 0x23, 0x2e, // .`...?q.^RF...#. + 0x1b, 0xac, 0x60, 0x99, 0x6a, 0x39, 0x4b, 0x8c, 0xc7, 0x7b, 0x6e, 0xac, 0x76, 0x3f, 0x1d, 0x31, // ..`.j9K..{n.v?.1 + 0x41, 0x24, 0x1b, 0x1e, 0x14, 0x20, 0x2a, 0x15, 0x51, 0x5e, 0x40, 0x71, 0x9d, 0x5e, 0x50, 0x48, // A$... *.Q^@q.^PH + 0x01, 0x6e, 0xfd, 0x8c, 0x29, 0x25, 0x31, 0x44, 0x24, 0x46, 0x68, 0x44, 0x50, 0x82, 0x5b, 0x32, // .n..)%1D$FhDP.[2 + 0x18, 0x36, 0x56, 0x3e, 0xfe, 0xac, 0x24, 0x41, 0x59, 0x36, 0x35, 0x59, 0x40, 0x24, 0x24, 0x41, // .6V>..$AY65Y@$$A + 0x59, 0x36, 0x35, 0x59, 0x40, 0x24, 0x03, 0xa7, 0x2a, 0x60, 0x36, 0x16, 0x4a, 0x82, 0x62, 0x38, // Y65Y@$..*`6.J.b8 + 0x15, 0x11, 0x33, 0x26, 0x17, 0x1f, 0x14, 0x08, 0x23, 0x48, 0x6e, 0x4c, 0x3c, 0x7a, 0x61, 0x3e, // ..3&....#HnL + 0x2c, 0x4b, 0x65, 0x39, 0x30, 0x50, 0x42, 0x33, 0x12, 0x16, 0x3b, 0x28, 0x26, 0x3e, 0x33, 0x27, // ,Ke90PB3..;(&>3' + 0x10, 0x31, 0x98, 0x5b, 0x16, 0x4e, 0x84, 0x60, 0x35, 0x14, 0xfb, 0xf2, 0x06, 0x16, 0x5a, 0x3e, // .1.[.N.`5.....Z> + 0x23, 0x3c, 0x2b, 0x19, 0x22, 0x36, 0x44, 0x22, 0x23, 0x35, 0x23, 0x12, 0x02, 0xa5, 0x28, 0x4a, // #<+."6D"#5#...(J + 0x39, 0x23, 0x23, 0x39, 0x4a, 0x28, 0x16, 0x2b, 0x4b, 0x38, 0x21, 0x21, 0x38, 0x4b, 0x2b, 0x00, // 9##9J(.+K8!!8K+. + 0x00, 0x01, 0x00, 0xb2, 0xfe, 0xdf, 0x03, 0xdc, 0x03, 0x41, 0x00, 0x15, 0x00, 0x06, 0xb3, 0x0a, // .........A...... + 0x00, 0x01, 0x30, 0x2b, 0x13, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x27, 0x32, // ..0+.32......#'2 + 0x3e, 0x02, 0x35, 0x26, 0x26, 0x23, 0x23, 0xb2, 0xd6, 0x8e, 0xdd, 0x99, 0x50, 0x3d, 0x78, 0xb1, // >.5&&##.....P=x. + 0x73, 0x02, 0x51, 0x6f, 0x44, 0x1e, 0x02, 0xcb, 0xce, 0xd6, 0x03, 0x41, 0x50, 0x95, 0xd6, 0x86, // s.QoD......AP... + 0x83, 0xcb, 0x8a, 0x49, 0x93, 0x39, 0x68, 0x93, 0x5a, 0xc7, 0xd8, 0x00, 0x00, 0x02, 0x00, 0xcb, // ...I.9h.Z....... + 0x00, 0x00, 0x03, 0x01, 0x05, 0xc3, 0x00, 0x05, 0x00, 0x11, 0x00, 0x08, 0xb5, 0x0e, 0x08, 0x02, // ................ + 0x00, 0x02, 0x30, 0x2b, 0x13, 0x21, 0x11, 0x23, 0x11, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, // ..0+.!.#.!.4632. + 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0xcb, 0x02, 0x29, 0xb9, 0xfe, 0x90, 0x01, 0x58, 0x37, 0x38, // ...#"&..)....X78 + 0x37, 0x38, 0x38, 0x37, 0x38, 0x37, 0x04, 0x3a, 0xfb, 0xc6, 0x03, 0x99, 0x01, 0xbd, 0x2e, 0x3f, // 788787.:.......? + 0x3f, 0x2e, 0x2d, 0x3c, 0x3c, 0x00, 0x00, 0x01, 0x01, 0xa0, 0xff, 0xec, 0x03, 0xfb, 0x06, 0x18, // ?.-<<........... + 0x00, 0x15, 0x00, 0x06, 0xb3, 0x0e, 0x00, 0x01, 0x30, 0x2b, 0x01, 0x11, 0x14, 0x1e, 0x02, 0x33, // ........0+.....3 + 0x32, 0x3e, 0x02, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x02, 0x59, 0x15, // 2>.7...#"..5..Y. + 0x2f, 0x4d, 0x38, 0x1e, 0x37, 0x32, 0x2c, 0x12, 0x14, 0x46, 0x86, 0x46, 0x5d, 0x7f, 0x4c, 0x21, // /M8.72,..F.F].L! + 0x06, 0x18, 0xfb, 0x62, 0x48, 0x5d, 0x36, 0x15, 0x0a, 0x0f, 0x11, 0x07, 0x91, 0x20, 0x1e, 0x2f, // ...bH]6...... ./ + 0x63, 0x9b, 0x6c, 0x04, 0x93, 0x00, 0xff, 0xff, 0x00, 0xd0, 0x00, 0x00, 0x03, 0x06, 0x05, 0xb0, // c.l............. + 0x02, 0x06, 0x00, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0x54, 0x00, 0x00, 0x04, 0x2c, 0x05, 0xb0, // .........T...,.. + 0x02, 0x06, 0x00, 0x19, 0xe4, 0x00, 0x00, 0x02, 0x00, 0xcc, 0x00, 0x00, 0x04, 0x4b, 0x04, 0x8d, // .............K.. + 0x00, 0x0e, 0x00, 0x1b, 0x00, 0x29, 0x40, 0x26, 0x00, 0x01, 0x00, 0x04, 0x03, 0x01, 0x04, 0x63, // .....)@&.......c + 0x00, 0x03, 0x05, 0x01, 0x02, 0x00, 0x03, 0x02, 0x63, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x4c, 0x00, // ........c...=.L. + 0x00, 0x1b, 0x19, 0x11, 0x0f, 0x00, 0x0e, 0x00, 0x0d, 0x21, 0x11, 0x06, 0x08, 0x16, 0x2b, 0x01, // .........!....+. + 0x11, 0x23, 0x11, 0x21, 0x1e, 0x03, 0x15, 0x14, 0x0e, 0x02, 0x07, 0x25, 0x21, 0x3e, 0x03, 0x35, // .#.!.......%!>.5 + 0x34, 0x2e, 0x02, 0x27, 0x21, 0x01, 0x84, 0xb8, 0x01, 0xca, 0x54, 0x9d, 0x7a, 0x4a, 0x4a, 0x79, // 4..'!.....T.zJJy + 0x9e, 0x54, 0xfe, 0xee, 0x01, 0x12, 0x31, 0x5c, 0x45, 0x2a, 0x2a, 0x45, 0x5c, 0x31, 0xfe, 0xee, // .T....1.E**E.1.. + 0x01, 0xb6, 0xfe, 0x4a, 0x04, 0x8d, 0x01, 0x2e, 0x5b, 0x89, 0x5c, 0x5f, 0x87, 0x57, 0x2a, 0x01, // ...J....[.._.W*. + 0x98, 0x01, 0x17, 0x32, 0x4d, 0x37, 0x36, 0x50, 0x35, 0x1c, 0x01, 0x00, 0x00, 0x01, 0x00, 0x6b, // ...2M76P5......k + 0xfe, 0x4c, 0x04, 0x7b, 0x04, 0x49, 0x00, 0x2b, 0x00, 0x06, 0xb3, 0x15, 0x00, 0x01, 0x30, 0x2b, // .L.{.I.+......0+ + 0x13, 0x32, 0x1e, 0x02, 0x17, 0x13, 0x01, 0x33, 0x01, 0x13, 0x1e, 0x03, 0x33, 0x32, 0x36, 0x37, // .2.....3....3267 + 0x07, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x03, 0x01, 0x23, 0x01, 0x03, 0x2e, 0x03, 0x23, // ...#"..'..#....# + 0x22, 0x06, 0x07, 0x27, 0x36, 0x36, 0xd4, 0x47, 0x69, 0x4b, 0x32, 0x0f, 0x76, 0x01, 0x0a, 0xbc, // "..'66.GiK2.v... + 0xfe, 0x94, 0xe0, 0x0e, 0x1d, 0x21, 0x28, 0x18, 0x10, 0x0e, 0x11, 0x02, 0x0b, 0x24, 0x0d, 0x3b, // .....!(......$.; + 0x5b, 0x47, 0x38, 0x18, 0x9a, 0xfe, 0xd8, 0xc5, 0x01, 0x92, 0xb7, 0x0e, 0x22, 0x2b, 0x37, 0x22, // [G8........."+7" + 0x0d, 0x29, 0x0e, 0x01, 0x12, 0x3d, 0x04, 0x49, 0x36, 0x50, 0x5e, 0x28, 0xfe, 0xfc, 0x02, 0x01, // .)...=.I6P^(.... + 0xfd, 0x3a, 0xfe, 0x17, 0x20, 0x37, 0x28, 0x18, 0x02, 0x03, 0x9e, 0x07, 0x08, 0x23, 0x45, 0x65, // .:.. 7(......#Ee + 0x42, 0x01, 0x4a, 0xfd, 0xbc, 0x03, 0x09, 0x01, 0x8a, 0x22, 0x42, 0x34, 0x1f, 0x04, 0x01, 0x94, // B.J......"B4.... + 0x05, 0x0a, 0x00, 0x02, 0x00, 0xa3, 0x00, 0x00, 0x04, 0x60, 0x05, 0xaf, 0x00, 0x22, 0x00, 0x2d, // .........`...".- + 0x00, 0x08, 0xb5, 0x2b, 0x23, 0x03, 0x01, 0x02, 0x30, 0x2b, 0x01, 0x11, 0x23, 0x11, 0x21, 0x32, // ...+#...0+..#.!2 + 0x1e, 0x02, 0x15, 0x06, 0x06, 0x07, 0x1e, 0x03, 0x15, 0x15, 0x14, 0x16, 0x17, 0x15, 0x23, 0x2e, // ..............#. + 0x03, 0x35, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x25, 0x33, 0x36, 0x36, 0x35, 0x34, 0x2e, 0x02, 0x23, // .554..#%36654..# + 0x23, 0x01, 0x5c, 0xb9, 0x01, 0x99, 0x75, 0xb5, 0x7c, 0x40, 0x01, 0x75, 0x70, 0x3e, 0x56, 0x35, // #.....u.|@.up>V5 + 0x18, 0x1d, 0x26, 0xbe, 0x17, 0x19, 0x0c, 0x02, 0x25, 0x45, 0x60, 0x3c, 0xfe, 0xfe, 0xcd, 0xa9, // ..&.....%E`<.... + 0x96, 0x23, 0x49, 0x72, 0x4e, 0xe0, 0x02, 0x79, 0xfd, 0x87, 0x05, 0xaf, 0x35, 0x69, 0x9a, 0x66, // .#IrN..y....5i.f + 0x71, 0xa5, 0x31, 0x14, 0x43, 0x58, 0x6b, 0x3d, 0x89, 0x3e, 0x6e, 0x26, 0x18, 0x15, 0x41, 0x45, // q.1.CXk=.>n&..AE + 0x3e, 0x13, 0x85, 0x3c, 0x61, 0x45, 0x26, 0x97, 0x01, 0x82, 0x80, 0x3c, 0x61, 0x43, 0x25, 0x00, // >... + 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, // 7...#"..5.!.4632 + 0x16, 0x15, 0x14, 0x06, 0x23, 0x22, 0x26, 0x79, 0x02, 0x22, 0x20, 0x37, 0x4a, 0x29, 0x1e, 0x40, // ....#"&y." 7J).@ + 0x3d, 0x34, 0x12, 0x19, 0x17, 0x42, 0x4e, 0x56, 0x2b, 0x48, 0x7d, 0x5c, 0x35, 0xfe, 0x98, 0x01, // =4...BNV+H}.5... + 0x52, 0x37, 0x36, 0x36, 0x38, 0x38, 0x36, 0x36, 0x37, 0x04, 0x3a, 0xfd, 0x25, 0x3f, 0x53, 0x30, // R76688667.:.%?S0 + 0x14, 0x07, 0x0b, 0x0b, 0x05, 0x85, 0x0e, 0x15, 0x0f, 0x08, 0x29, 0x59, 0x8d, 0x64, 0x02, 0x3a, // ..........)Y.d.: + 0x01, 0xbe, 0x2d, 0x3e, 0x3e, 0x2d, 0x2c, 0x3d, 0x3d, 0x00, 0x00, 0x01, 0x00, 0xa0, 0xff, 0xec, // ..->>-,==....... + 0x04, 0x68, 0x06, 0x00, 0x00, 0x1a, 0x00, 0x06, 0xb3, 0x12, 0x02, 0x01, 0x30, 0x2b, 0x13, 0x21, // .h..........0+.! + 0x37, 0x03, 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x2e, // 7....32>.7...#". + 0x02, 0x35, 0x13, 0x21, 0xa0, 0x01, 0x68, 0xba, 0x1e, 0x20, 0x37, 0x4a, 0x29, 0x1e, 0x40, 0x3d, // .5.!..h.. 7J).@= + 0x35, 0x11, 0x19, 0x17, 0x42, 0x4e, 0x56, 0x2b, 0x48, 0x7d, 0x5c, 0x35, 0x1a, 0xfe, 0x9c, 0x05, // 5...BNV+H}.5.... + 0xff, 0x01, 0xfb, 0x5f, 0x3f, 0x53, 0x30, 0x14, 0x07, 0x0b, 0x0b, 0x05, 0x85, 0x0e, 0x15, 0x0f, // ..._?S0......... + 0x08, 0x29, 0x59, 0x8d, 0x64, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0xce, 0x00, 0x00, 0x03, 0xf1, // .)Y.d........... + 0x05, 0xb0, 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x09, 0x05, 0x01, 0x30, 0x2b, 0x37, 0x21, 0x11, 0x05, // ..........0+7!.. + 0x35, 0x25, 0x33, 0x11, 0x21, 0x15, 0x21, 0xda, 0x01, 0x37, 0xfe, 0xbd, 0x01, 0xed, 0x0f, 0x01, // 5%3.!.!..7...... + 0x27, 0xfc, 0xe9, 0xa0, 0x04, 0x24, 0x71, 0xa8, 0xb5, 0xfa, 0xf0, 0xa0, 0x00, 0x02, 0x00, 0x8d, // '....$q......... + 0xff, 0x98, 0x04, 0x63, 0x04, 0xeb, 0x00, 0x41, 0x00, 0x52, 0x00, 0x08, 0xb5, 0x48, 0x42, 0x36, // ...c...A.R...HB6 + 0x2b, 0x02, 0x30, 0x2b, 0x01, 0x26, 0x26, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, // +.0+.&&'..#"..54 + 0x3e, 0x02, 0x33, 0x33, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x17, 0x17, 0x1e, 0x03, 0x33, 0x32, // >.33..#"......32 + 0x3e, 0x02, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x27, 0x26, 0x3e, 0x02, 0x33, // >.7...#"..''&>.3 + 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x16, 0x17, 0x15, 0x25, 0x32, 0x3e, 0x02, 0x37, 0x35, 0x23, // 2........%2>.75# + 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x03, 0xc0, 0x08, 0x0b, 0x03, 0x23, 0x67, 0x42, 0x41, // "...........#gBA + 0x64, 0x44, 0x23, 0x38, 0x63, 0x87, 0x50, 0x61, 0x05, 0x29, 0x45, 0x5e, 0x39, 0x5d, 0x8b, 0x5c, // dD#8c.Pa.)E^9].. + 0x2d, 0x02, 0x01, 0x02, 0x39, 0x65, 0x8d, 0x56, 0x1c, 0x3a, 0x37, 0x30, 0x12, 0x31, 0x19, 0x3f, // -...9e.V.:70.1.? + 0x45, 0x46, 0x20, 0x8c, 0xc9, 0x83, 0x41, 0x03, 0x01, 0x03, 0x43, 0x88, 0xca, 0x83, 0x56, 0x96, // EF ...A...C...V. + 0x70, 0x41, 0x10, 0x11, 0xfe, 0x9b, 0x21, 0x37, 0x2c, 0x1d, 0x07, 0x48, 0x33, 0x58, 0x41, 0x24, // pA....!7,..H3XA$ + 0x11, 0x23, 0x36, 0x01, 0x06, 0x0f, 0x2e, 0x19, 0x26, 0x37, 0x2d, 0x4e, 0x6a, 0x3d, 0x4c, 0x77, // .#6.....&7-Nj=Lw + 0x53, 0x2c, 0x3b, 0x5c, 0x3f, 0x21, 0x47, 0x85, 0xbe, 0x77, 0x3c, 0x7a, 0xba, 0x7e, 0x40, 0x09, // S,;.?!G..w. + 0x37, 0x2e, 0x03, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x34, 0x2e, 0x02, // 7..54>.32...#4.. + 0x23, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, 0x02, 0x33, 0x07, 0x22, 0x0e, 0x02, 0x15, 0x14, 0x1e, // #"......3."..... + 0x02, 0x33, 0x16, 0x3e, 0x02, 0x37, 0x11, 0x04, 0x9a, 0xc5, 0x58, 0xdb, 0x86, 0x5e, 0xa4, 0x7a, // .3.>.7....X..^.z + 0x46, 0x17, 0x38, 0x5d, 0x47, 0x35, 0x4c, 0x31, 0x17, 0x45, 0x75, 0x9a, 0x55, 0x60, 0x9b, 0x6d, // F.8]G5L1.Eu.U`.m + 0x3b, 0xb9, 0x21, 0x3c, 0x57, 0x36, 0x30, 0x57, 0x42, 0x27, 0x20, 0x3f, 0x5b, 0x3c, 0x03, 0x41, // ;.!.54&##5...# + 0x22, 0x0e, 0x02, 0x15, 0x01, 0x47, 0xb8, 0xdb, 0xe3, 0x4b, 0x7f, 0x6f, 0x61, 0x2c, 0xfe, 0xd9, // "....G...K.oa,.. + 0x60, 0x96, 0x67, 0x36, 0x43, 0x78, 0xa6, 0x63, 0x3d, 0x7a, 0x3e, 0x36, 0x23, 0x5f, 0x3d, 0x3f, // `.g6Cx.c=z>6#_=? + 0x62, 0x45, 0x24, 0x92, 0x90, 0x6f, 0x01, 0x0c, 0x15, 0x30, 0x3c, 0x47, 0x2b, 0x51, 0x66, 0x3a, // bE$..o...0U2.p.Ao. + 0x61, 0x66, 0xa0, 0x6d, 0x39, 0x17, 0x1a, 0x98, 0x14, 0x1f, 0x29, 0x48, 0x65, 0x3c, 0x9a, 0x8e, // af.m9.....)He<.. + 0x97, 0x01, 0x75, 0x13, 0x24, 0x1c, 0x11, 0x3b, 0x64, 0x84, 0x4a, 0x00, 0x00, 0x01, 0x00, 0xd2, // ..u.$..;d.J..... + 0xff, 0xec, 0x04, 0x41, 0x04, 0x9d, 0x00, 0x2f, 0x00, 0x62, 0x40, 0x0d, 0x22, 0x21, 0x0e, 0x0d, // ...A.../.b@."!.. + 0x04, 0x01, 0x02, 0x2f, 0x01, 0x03, 0x00, 0x02, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x1c, // .../....JK..PX@. + 0x00, 0x01, 0x02, 0x00, 0x02, 0x01, 0x00, 0x70, 0x00, 0x04, 0x00, 0x02, 0x01, 0x04, 0x02, 0x63, // .......p.......c + 0x00, 0x00, 0x00, 0x03, 0x5b, 0x05, 0x01, 0x03, 0x03, 0x3d, 0x03, 0x4c, 0x1b, 0x40, 0x20, 0x00, // ....[....=.L.@ . + 0x01, 0x02, 0x00, 0x02, 0x01, 0x00, 0x70, 0x00, 0x04, 0x00, 0x02, 0x01, 0x04, 0x02, 0x63, 0x00, // ......p.......c. + 0x03, 0x03, 0x3d, 0x4b, 0x00, 0x00, 0x00, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x45, 0x05, 0x4c, 0x59, // ..=K....[...E.LY + 0x40, 0x09, 0x2e, 0x23, 0x15, 0x24, 0x26, 0x22, 0x06, 0x08, 0x1a, 0x2b, 0x25, 0x16, 0x16, 0x33, // @..#.$&"...+%..3 + 0x32, 0x3e, 0x02, 0x35, 0x34, 0x26, 0x23, 0x23, 0x35, 0x13, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, // 2>.54&##5.&&#".. + 0x15, 0x11, 0x23, 0x11, 0x34, 0x36, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x01, 0x1e, 0x03, 0x15, 0x14, // ..#.4632........ + 0x0e, 0x02, 0x23, 0x22, 0x26, 0x27, 0x02, 0x0b, 0x20, 0x54, 0x36, 0x32, 0x4e, 0x36, 0x1d, 0x88, // ..#"&'.. T62N6.. + 0x87, 0x54, 0xed, 0x1d, 0x54, 0x3f, 0x3f, 0x53, 0x31, 0x15, 0xb8, 0xc4, 0xcc, 0x41, 0x70, 0x63, // .T..T??S1....Apc + 0x57, 0x27, 0xfe, 0xee, 0x51, 0x82, 0x5b, 0x31, 0x3b, 0x69, 0x91, 0x57, 0x39, 0x6f, 0x37, 0xb5, // W'..Q.[1;i.W9o7. + 0x14, 0x1f, 0x21, 0x3b, 0x51, 0x31, 0x62, 0x55, 0x89, 0x01, 0x27, 0x17, 0x27, 0x2c, 0x4b, 0x65, // ..!;Q1bU..'.',Ke + 0x38, 0xfd, 0x0f, 0x02, 0xf1, 0xd5, 0xd7, 0x1d, 0x31, 0x43, 0x26, 0xfe, 0xb6, 0x07, 0x2f, 0x4f, // 8.......1C&.../O + 0x6d, 0x46, 0x5a, 0x8c, 0x60, 0x32, 0x17, 0x1a, 0xff, 0xff, 0x01, 0x3b, 0x04, 0xa7, 0x03, 0x91, // mFZ.`2.....;.... + 0x05, 0xb2, 0x02, 0x06, 0x00, 0x9e, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x00, 0x02, 0x06, 0x00, 0x03, 0x00, 0x00, 0xff, 0xff, 0x00, 0xda, 0x02, 0x31, 0x03, 0xd7, // .............1.. + 0x02, 0xc9, 0x02, 0x06, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x00, 0x00, 0x04, 0x8e, // ................ + 0x05, 0xb0, 0x00, 0x11, 0x00, 0x23, 0x00, 0x37, 0x40, 0x34, 0x07, 0x01, 0x01, 0x04, 0x01, 0x00, // .....#.7@4...... + 0x05, 0x01, 0x00, 0x61, 0x00, 0x06, 0x06, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x3c, 0x4b, 0x00, 0x05, // ...a....[....75..'#.3....Q + 0x98, 0xef, 0xa5, 0x57, 0x01, 0x01, 0x57, 0xa5, 0xef, 0x98, 0x47, 0xdc, 0x95, 0x76, 0xac, 0x71, // ...W..W...G..v.q + 0x37, 0x01, 0x01, 0x38, 0x70, 0xac, 0x76, 0x95, 0xdc, 0x02, 0x9a, 0x97, 0x02, 0x7f, 0x02, 0x63, // 7..8p.v........c + 0xb1, 0xf7, 0x96, 0x6b, 0x96, 0xf7, 0xb1, 0x63, 0x01, 0x02, 0x9a, 0xfd, 0xfd, 0x01, 0x51, 0x8c, // ...k...c......Q. + 0xbe, 0x6f, 0x6d, 0x6f, 0xbd, 0x8b, 0x50, 0x02, 0xfe, 0x19, 0x00, 0x02, 0xff, 0xd4, 0x00, 0x00, // .omo..P......... + 0x04, 0x8e, 0x05, 0xb0, 0x00, 0x11, 0x00, 0x23, 0x00, 0x37, 0x40, 0x34, 0x07, 0x01, 0x01, 0x04, // .......#.7@4.... + 0x01, 0x00, 0x05, 0x01, 0x00, 0x61, 0x00, 0x06, 0x06, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x3c, 0x4b, // .....a....[....75..'#.3... + 0x01, 0x51, 0x98, 0xef, 0xa5, 0x57, 0x01, 0x01, 0x57, 0xa5, 0xef, 0x98, 0x47, 0xdc, 0x95, 0x76, // .Q...W..W...G..v + 0xac, 0x71, 0x37, 0x01, 0x01, 0x38, 0x70, 0xac, 0x76, 0x95, 0xdc, 0x02, 0x9a, 0x97, 0x02, 0x7f, // .q7..8p.v....... + 0x02, 0x63, 0xb1, 0xf7, 0x96, 0x6b, 0x96, 0xf7, 0xb1, 0x63, 0x01, 0x02, 0x9a, 0xfd, 0xfd, 0x01, // .c...k...c...... + 0x51, 0x8c, 0xbe, 0x6f, 0x6d, 0x6f, 0xbd, 0x8b, 0x50, 0x02, 0xfe, 0x19, 0x00, 0x01, 0x00, 0x1a, // Q..omo..P....... + 0x00, 0x00, 0x04, 0x4a, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x62, 0xb6, 0x13, 0x02, 0x02, 0x02, 0x03, // ...J.....b...... + 0x01, 0x4a, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, 0x20, 0x08, 0x01, 0x06, 0x05, 0x01, 0x00, 0x01, // .JK.!PX@ ....... + 0x06, 0x00, 0x61, 0x00, 0x07, 0x07, 0x3e, 0x4b, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, // ..a...>K....[... + 0x47, 0x4b, 0x04, 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x1b, 0x40, 0x20, 0x08, 0x01, 0x06, 0x05, // GK....=.L.@ .... + 0x01, 0x00, 0x01, 0x06, 0x00, 0x61, 0x00, 0x03, 0x03, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x47, 0x4b, // .....a....[...GK + 0x00, 0x07, 0x07, 0x02, 0x59, 0x04, 0x01, 0x02, 0x02, 0x3d, 0x02, 0x4c, 0x59, 0x40, 0x0c, 0x11, // ....Y....=.LY@.. + 0x11, 0x11, 0x11, 0x13, 0x23, 0x15, 0x23, 0x10, 0x09, 0x08, 0x1d, 0x2b, 0x01, 0x21, 0x11, 0x36, // ....#.#....+.!.6 + 0x36, 0x37, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x23, 0x11, 0x34, 0x26, 0x07, 0x22, 0x06, 0x07, 0x11, // 672....#.4&."... + 0x23, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, 0x02, 0x97, 0xfe, 0xee, 0x3a, 0xaa, 0x6a, // #.#5353.!....:.j + 0x55, 0x8b, 0x62, 0x35, 0xb9, 0x7f, 0x76, 0x59, 0x91, 0x2d, 0xb9, 0xb2, 0xb2, 0xb9, 0x01, 0x12, // U.b5..vY.-...... + 0x04, 0xd2, 0xfe, 0xc7, 0x55, 0x5f, 0x01, 0x31, 0x68, 0x9f, 0x6d, 0xfd, 0x57, 0x02, 0xab, 0x85, // ....U_.1h.m.W... + 0x82, 0x01, 0x57, 0x48, 0xfc, 0xee, 0x04, 0xd2, 0x97, 0x97, 0x97, 0x00, 0x00, 0x01, 0x00, 0x4c, // ..WH...........L + 0x00, 0x00, 0x04, 0x84, 0x05, 0xb0, 0x00, 0x0f, 0x00, 0x29, 0x40, 0x26, 0x07, 0x01, 0x03, 0x02, // .........)@&.... + 0x01, 0x00, 0x01, 0x03, 0x00, 0x61, 0x06, 0x01, 0x04, 0x04, 0x05, 0x59, 0x00, 0x05, 0x05, 0x3c, // .....a.....Y...< + 0x4b, 0x00, 0x01, 0x01, 0x3d, 0x01, 0x4c, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x10, 0x08, // K...=.L......... + 0x08, 0x1c, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x11, 0x21, 0x35, 0x21, 0x15, // ..+.#.#.#53.!5!. + 0x21, 0x11, 0x33, 0x03, 0xad, 0xeb, 0xb4, 0xde, 0xde, 0xfe, 0x3e, 0x04, 0x38, 0xfe, 0x3e, 0xeb, // !.3.......>.8.>. + 0x03, 0x37, 0xfc, 0xc9, 0x03, 0x37, 0x97, 0x01, 0x44, 0x9e, 0x9e, 0xfe, 0xbc, 0x00, 0x00, 0x01, // .7...7..D....... + 0x00, 0x8e, 0xff, 0xec, 0x04, 0x29, 0x05, 0x40, 0x00, 0x27, 0x00, 0x48, 0x40, 0x45, 0x13, 0x01, // .....).@.'.H@E.. + 0x04, 0x03, 0x14, 0x01, 0x05, 0x04, 0x02, 0x4a, 0x0b, 0x01, 0x0a, 0x00, 0x0a, 0x72, 0x07, 0x01, // .......J.....r.. + 0x02, 0x06, 0x01, 0x03, 0x04, 0x02, 0x03, 0x61, 0x08, 0x01, 0x01, 0x01, 0x00, 0x59, 0x09, 0x01, // .......a.....Y.. + 0x00, 0x00, 0x3f, 0x4b, 0x00, 0x04, 0x04, 0x05, 0x5b, 0x00, 0x05, 0x05, 0x45, 0x05, 0x4c, 0x00, // ..?K....[...E.L. + 0x00, 0x00, 0x27, 0x00, 0x27, 0x26, 0x25, 0x11, 0x11, 0x15, 0x29, 0x25, 0x11, 0x11, 0x11, 0x11, // ..'.'&%...)%.... + 0x0c, 0x08, 0x1d, 0x2b, 0x01, 0x11, 0x21, 0x15, 0x21, 0x15, 0x33, 0x15, 0x23, 0x15, 0x14, 0x1e, // ...+..!.!.3.#... + 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x17, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x23, // .32>.7...#"..55# + 0x35, 0x33, 0x35, 0x21, 0x35, 0x21, 0x11, 0x02, 0x64, 0x01, 0x9c, 0xfe, 0x64, 0xea, 0xea, 0x20, // 535!5!..d...d.. + 0x38, 0x49, 0x29, 0x1e, 0x40, 0x3d, 0x35, 0x11, 0x1a, 0x17, 0x42, 0x4e, 0x57, 0x2b, 0x48, 0x7d, // 8I).@=5...BNW+H} + 0x5c, 0x35, 0xd9, 0xd9, 0xfe, 0xe4, 0x01, 0x1c, 0x05, 0x40, 0xfe, 0xfa, 0x8f, 0xba, 0x97, 0xfb, // .5.......@...... + 0x3f, 0x52, 0x31, 0x14, 0x07, 0x0a, 0x0b, 0x04, 0x83, 0x0e, 0x15, 0x0f, 0x08, 0x29, 0x59, 0x8d, // ?R1..........)Y. + 0x64, 0xfb, 0x97, 0xba, 0x8f, 0x01, 0x06, 0x00, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, // d..........Q.... + 0x07, 0x23, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x99, 0x01, 0x5a, // .#.&.#.....B...Z + 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x51, // .......Z.3+....Q + 0x00, 0x00, 0x04, 0x90, 0x07, 0x20, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, // ..... .&.#.....s + 0x00, 0x85, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, // ...W.......W.3+. + 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x07, 0x48, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, // ...Q.....H.&.#.. + 0x01, 0x07, 0x00, 0x9c, 0x00, 0x87, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x5b, // .......[.......[ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x07, 0x52, 0x02, 0x26, // .3+....Q.....R.& + 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x93, 0x01, 0x61, 0x00, 0x09, 0xb1, 0x02, // .#.........a.... + 0x01, 0xb8, 0x01, 0x61, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, // ...a.3+....Q.... + 0x07, 0x20, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0x00, 0x0f, 0x01, 0x5b, // . .&.#.....h...[ + 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x51, // .......[.3+....Q + 0x00, 0x00, 0x04, 0x90, 0x07, 0x8b, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa0, // .......&.#...... + 0x00, 0x0e, 0x01, 0xa4, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0xa4, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x08, 0x18, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, // ...Q.......&.#.. + 0x01, 0x07, 0x01, 0xcb, 0xff, 0xfc, 0x01, 0xa6, 0x00, 0x09, 0xb1, 0x02, 0x03, 0xb8, 0x01, 0xa6, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x6b, 0xfe, 0x4d, 0x04, 0x5d, 0x05, 0xc4, 0x02, 0x26, // .3+....k.M.]...& + 0x00, 0x25, 0x00, 0x00, 0x00, 0x06, 0x00, 0x77, 0x36, 0x00, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, // .%.....w6....... + 0x04, 0x34, 0x07, 0x23, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x8f, // .4.#.&.'.....B.. + 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .Z.......Z.3+... + 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x20, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, // .....4. .&.'.... + 0x00, 0x73, 0x00, 0x7b, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x57, 0xb0, 0x33, // .s.{.W.......W.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x48, 0x02, 0x26, 0x00, 0x27, // +........4.H.&.' + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x7d, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .......}.[...... + 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x20, // .[.3+........4. + 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0x00, 0x05, 0x01, 0x5b, 0x00, 0x09, // .&.'.....h...[.. + 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, // .....[.3+....... + 0x04, 0x1e, 0x07, 0x23, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x5b, // ...#.&.+.....B.[ + 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .Z.......Z.3+... + 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x07, 0x20, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, // ....... .&.+.... + 0x00, 0x73, 0x00, 0x47, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x57, 0xb0, 0x33, // .s.G.W.......W.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x07, 0x48, 0x02, 0x26, 0x00, 0x2b, // +..........H.&.+ + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x49, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .......I.[...... + 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x07, 0x20, // .[.3+.......... + 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0xff, 0xd2, 0x01, 0x5b, 0x00, 0x09, // .&.+.....h...[.. + 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, // .....[.3+....... + 0x04, 0x3e, 0x07, 0x52, 0x02, 0x26, 0x00, 0x30, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x6c, // .>.R.&.0.......l + 0x01, 0x61, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x61, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .a.......a.3+... + 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x07, 0x38, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, // .j...a.8.&.1.... + 0x00, 0x42, 0xff, 0x9d, 0x01, 0x6f, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x6f, 0xb0, 0x33, // .B...o.......o.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x07, 0x35, 0x02, 0x26, 0x00, 0x31, // +....j...a.5.&.1 + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x89, 0x01, 0x6c, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, // .....s...l...... + 0x01, 0x6c, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x07, 0x5d, // .l.3+....j...a.] + 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x8b, 0x01, 0x70, 0x00, 0x09, // .&.1.........p.. + 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x70, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, // .....p.3+....j.. + 0x04, 0x61, 0x07, 0x67, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x97, // .a.g.&.1........ + 0x01, 0x76, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x76, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .v.......v.3+... + 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x07, 0x35, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, // .j...a.5.&.1.... + 0x00, 0x68, 0x00, 0x13, 0x01, 0x70, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x70, 0xb0, 0x33, // .h...p.......p.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, 0x07, 0x17, 0x02, 0x26, 0x00, 0x37, // +........B...&.7 + 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0xb7, 0x01, 0x4e, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....B...N...... + 0x01, 0x4e, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, 0x07, 0x14, // .N.3+........B.. + 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0xa3, 0x01, 0x4b, 0x00, 0x09, // .&.7.....s...K.. + 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x4b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, // .....K.3+....... + 0x04, 0x42, 0x07, 0x3c, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0xa5, // .B.<.&.7........ + 0x01, 0x4f, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x4f, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .O.......O.3+... + 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, 0x07, 0x14, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, // .....B...&.7.... + 0x00, 0x68, 0x00, 0x2d, 0x01, 0x4f, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x4f, 0xb0, 0x33, // .h.-.O.......O.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x07, 0x1f, 0x02, 0x26, 0x00, 0x3b, // +....=...y...&.; + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x71, 0x01, 0x56, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....s.q.V...... + 0x01, 0x56, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x05, 0xe1, // .V.3+........6.. + 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x95, 0x18, 0x00, 0x06, 0xb3, 0x02, // .&.C.....B...... + 0x01, 0x18, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x05, 0xde, 0x02, 0x26, // ..3+.......6...& + 0x00, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x81, 0x00, 0x15, 0x00, 0x06, 0xb3, 0x02, // .C.....s........ + 0x01, 0x15, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0x06, 0x02, 0x26, // ..3+.......6...& + 0x00, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x83, 0x00, 0x19, 0x00, 0x06, 0xb3, 0x02, // .C.............. + 0x01, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0x10, 0x02, 0x26, // ..3+.......6...& + 0x00, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x8f, 0x00, 0x1f, 0x00, 0x06, 0xb3, 0x02, // .C.............. + 0x01, 0x1f, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x05, 0xde, 0x02, 0x26, // ..3+.......6...& + 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x0b, 0x19, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x19, // .C.....h........ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0x49, 0x02, 0x26, 0x00, 0x43, // 3+.......6.I.&.C + 0x00, 0x00, 0x01, 0x06, 0x00, 0xa0, 0x0a, 0x62, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x62, 0x33, 0x2b, // .......b.....b3+ + 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0xd6, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, // .......6...&.C.. + 0x01, 0x06, 0x01, 0xcb, 0xf8, 0x64, 0x00, 0x06, 0xb3, 0x02, 0x03, 0x64, 0x33, 0x2b, 0xff, 0xff, // .....d.....d3+.. + 0x00, 0x8f, 0xfe, 0x4d, 0x04, 0x33, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x45, 0x00, 0x00, 0x00, 0x06, // ...M.3.N.&.E.... + 0x00, 0x77, 0x4b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x05, 0xe2, 0x02, 0x26, // .wK........E...& + 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x90, 0x19, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x19, // .G.....B........ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x05, 0xdf, 0x02, 0x26, 0x00, 0x47, // 3+.......E...&.G + 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x7c, 0x16, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x16, 0x33, 0x2b, // .....s|.......3+ + 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x06, 0x07, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, // .......E...&.G.. + 0x01, 0x06, 0x00, 0x9c, 0x7e, 0x1a, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x1a, 0x33, 0x2b, 0xff, 0xff, // ....~.......3+.. + 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x05, 0xdf, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, // .....E...&.G.... + 0x00, 0x68, 0x06, 0x1a, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x1a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xcb, // .h........3+.... + 0x00, 0x00, 0x04, 0x55, 0x05, 0xcc, 0x02, 0x26, 0x00, 0x8a, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, // ...U...&.......B + 0xbe, 0x03, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x03, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, // ........3+...... + 0x04, 0x55, 0x05, 0xc9, 0x02, 0x26, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x73, 0x00, 0xaa, // .U...&.......s.. + 0x00, 0x00, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x05, 0xf1, 0x02, 0x26, 0x00, 0x8a, // .........U...&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0xac, 0x00, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x04, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x05, 0xc9, 0x02, 0x26, 0x00, 0x8a, // 3+.......U...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x34, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, // .....h4.......3+ + 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x29, 0x06, 0x10, 0x02, 0x26, 0x00, 0x50, 0x00, 0x00, // .......)...&.P.. + 0x01, 0x06, 0x00, 0xa2, 0x7b, 0x1f, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1f, 0x33, 0x2b, 0xff, 0xff, // ....{.......3+.. + 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x05, 0xe1, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, // .z...R...&.Q.... + 0x00, 0x42, 0x8a, 0x18, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x18, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7a, // .B........3+...z + 0xff, 0xec, 0x04, 0x52, 0x05, 0xde, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, // ...R...&.Q.....s + 0x76, 0x15, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x15, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, // v.......3+...z.. + 0x04, 0x52, 0x06, 0x06, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x78, 0x19, // .R...&.Q......x. + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, // ......3+...z...R + 0x06, 0x10, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x84, 0x00, 0x1f, // ...&.Q.......... + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x1f, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, // ......3+...z...R + 0x05, 0xde, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x00, 0x19, 0x00, 0x06, // ...&.Q.....h.... + 0xb3, 0x02, 0x02, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x05, 0xcd, // ....3+.......... + 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x89, 0x04, 0x00, 0x06, 0xb3, 0x01, // .&.W.....B...... + 0x01, 0x04, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x05, 0xca, 0x02, 0x26, // ..3+...........& + 0x00, 0x57, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x75, 0x01, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x01, // .W.....su....... + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x05, 0xf2, 0x02, 0x26, 0x00, 0x57, // 3+...........&.W + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x77, 0x05, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x05, 0x33, 0x2b, // ......w.......3+ + 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x05, 0xca, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, // ...........&.W.. + 0x01, 0x06, 0x00, 0x68, 0x00, 0x05, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x05, 0x33, 0x2b, 0xff, 0xff, // ...h........3+.. + 0x00, 0x44, 0xfe, 0x4b, 0x04, 0x85, 0x05, 0xca, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x07, // .D.K.....&.[.... + 0x00, 0x73, 0x00, 0x89, 0x00, 0x01, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x01, 0x33, 0x2b, 0xff, 0xff, // .s..........3+.. + 0x00, 0x44, 0xfe, 0x4b, 0x04, 0x85, 0x05, 0xca, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x06, // .D.K.....&.[.... + 0x00, 0x68, 0x13, 0x05, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, // .h........3+...Q + 0x00, 0x00, 0x04, 0x90, 0x06, 0xfa, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6e, // .......&.#.....n + 0x00, 0x13, 0x01, 0x4a, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x4a, 0xb0, 0x33, 0x2b, 0x00, // ...J.......J.3+. + 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x05, 0xb8, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, // .......6...&.C.. + 0x01, 0x06, 0x00, 0x6e, 0x0f, 0x08, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x08, 0x33, 0x2b, 0xff, 0xff, // ...n........3+.. + 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x07, 0x4a, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, // .Q.....J.&.#.... + 0x00, 0x9e, 0x00, 0x0f, 0x01, 0x98, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x98, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0x08, 0x02, 0x26, 0x00, 0x43, // +........6...&.C + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0x0b, 0x56, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x56, 0x33, 0x2b, // .......V.....V3+ + 0x00, 0x02, 0x00, 0x51, 0xfe, 0x4f, 0x04, 0x90, 0x05, 0xb0, 0x00, 0x1e, 0x00, 0x21, 0x00, 0x3d, // ...Q.O.......!.= + 0x40, 0x3a, 0x21, 0x01, 0x06, 0x00, 0x1a, 0x01, 0x01, 0x04, 0x0c, 0x01, 0x02, 0x01, 0x0d, 0x01, // @:!............. + 0x03, 0x02, 0x04, 0x4a, 0x00, 0x06, 0x00, 0x04, 0x01, 0x06, 0x04, 0x62, 0x00, 0x00, 0x00, 0x3c, // ...J.......b...< + 0x4b, 0x05, 0x01, 0x01, 0x01, 0x3d, 0x4b, 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x49, // K....=K....[...I + 0x03, 0x4c, 0x11, 0x11, 0x1a, 0x25, 0x25, 0x11, 0x10, 0x07, 0x08, 0x1b, 0x2b, 0x01, 0x33, 0x01, // .L...%%.....+.3. + 0x23, 0x06, 0x06, 0x15, 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, // #.....3.67...#". + 0x02, 0x35, 0x34, 0x3e, 0x02, 0x37, 0x03, 0x21, 0x03, 0x23, 0x01, 0x21, 0x03, 0x02, 0x27, 0x9b, // .54>.7.!.#.!..'. + 0x01, 0xce, 0x30, 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, // ..0N^$* 5...UA)F + 0x34, 0x1e, 0x1a, 0x31, 0x46, 0x2c, 0x6b, 0xfe, 0x1a, 0x75, 0xb9, 0x01, 0x60, 0x01, 0x83, 0xc0, // 4..1F,k..u..`... + 0x05, 0xb0, 0xfa, 0x50, 0x2a, 0x6f, 0x42, 0x22, 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, // ...P*oB")...y... + 0x30, 0x47, 0x2f, 0x24, 0x48, 0x45, 0x40, 0x1b, 0x01, 0x60, 0xfe, 0x87, 0x02, 0x1a, 0x02, 0x78, // 0G/$HE@..`.....x + 0x00, 0x02, 0x00, 0x9c, 0xfe, 0x4f, 0x04, 0x36, 0x04, 0x4e, 0x00, 0x43, 0x00, 0x52, 0x00, 0x58, // .....O.6.N.C.R.X + 0x40, 0x55, 0x49, 0x01, 0x07, 0x08, 0x2d, 0x03, 0x02, 0x00, 0x07, 0x38, 0x01, 0x05, 0x00, 0x39, // @UI...-....8...9 + 0x01, 0x06, 0x05, 0x04, 0x4a, 0x00, 0x03, 0x02, 0x01, 0x02, 0x03, 0x01, 0x70, 0x00, 0x01, 0x00, // ....J.......p... + 0x08, 0x07, 0x01, 0x08, 0x63, 0x00, 0x02, 0x02, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x47, 0x4b, 0x09, // ....c....[...GK. + 0x01, 0x07, 0x07, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x45, 0x4b, 0x00, 0x05, 0x05, 0x06, 0x5b, 0x00, // ....[...EK....[. + 0x06, 0x06, 0x49, 0x06, 0x4c, 0x45, 0x44, 0x4c, 0x4a, 0x44, 0x52, 0x45, 0x52, 0x25, 0x2f, 0x24, // ..I.LEDLJDRER%/$ + 0x14, 0x25, 0x28, 0x27, 0x0a, 0x08, 0x1b, 0x2b, 0x25, 0x26, 0x26, 0x27, 0x0e, 0x03, 0x23, 0x22, // .%('...+%&&'..#" + 0x2e, 0x02, 0x35, 0x34, 0x3e, 0x02, 0x33, 0x33, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x22, 0x0e, 0x02, // ..54>.3354..#".. + 0x15, 0x23, 0x3e, 0x03, 0x33, 0x32, 0x1e, 0x02, 0x15, 0x11, 0x14, 0x16, 0x17, 0x15, 0x23, 0x06, // .#>.32........#. + 0x06, 0x15, 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // ....3.67...#"..5 + 0x34, 0x36, 0x27, 0x32, 0x3e, 0x02, 0x37, 0x35, 0x23, 0x22, 0x06, 0x15, 0x14, 0x1e, 0x02, 0x03, // 46'2>.75#"...... + 0x6f, 0x08, 0x0a, 0x03, 0x1c, 0x45, 0x53, 0x5e, 0x35, 0x56, 0x8b, 0x61, 0x35, 0x47, 0x82, 0xb7, // o....ES^5V.a5G.. + 0x71, 0xca, 0x24, 0x42, 0x5f, 0x3b, 0x37, 0x57, 0x3c, 0x21, 0xba, 0x01, 0x3b, 0x6f, 0x9f, 0x65, // q.$B_;7W.........J.... + 0x01, 0x08, 0x00, 0x61, 0x00, 0x07, 0x07, 0x06, 0x59, 0x00, 0x06, 0x06, 0x3c, 0x4b, 0x00, 0x01, // ...a....Y....32....!. + 0x03, 0x33, 0x32, 0x36, 0x37, 0x01, 0x22, 0x0e, 0x02, 0x07, 0x21, 0x35, 0x2e, 0x03, 0x04, 0x37, // .3267."...!5...7 + 0x22, 0x6b, 0x4b, 0x01, 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, // "kK.N^$* 5...UA) + 0x46, 0x34, 0x1e, 0x37, 0x33, 0x6f, 0xb9, 0x85, 0x49, 0x54, 0x8b, 0xb1, 0x5d, 0x75, 0xaf, 0x74, // F4.73o..IT..]u.t + 0x39, 0xfc, 0xfb, 0x03, 0x33, 0x59, 0x7c, 0x4b, 0x63, 0x9a, 0x33, 0xfe, 0xae, 0x38, 0x64, 0x50, // 9...3Y|Kc.3..8dP + 0x37, 0x0b, 0x02, 0x46, 0x03, 0x23, 0x44, 0x67, 0xbd, 0x33, 0x5b, 0x1d, 0x2a, 0x6f, 0x42, 0x22, // 7..F.#Dg.3[.*oB" + 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x35, 0x69, 0x30, 0x03, 0x50, // )...y...0G/5i0.P + 0x8b, 0xbd, 0x6f, 0x2a, 0x83, 0xcf, 0x8f, 0x4c, 0x51, 0x8f, 0xc2, 0x71, 0x53, 0x4a, 0x82, 0x61, // ..o*...LQ..qSJ.a + 0x38, 0x50, 0x42, 0x02, 0xa1, 0x29, 0x4f, 0x73, 0x4b, 0x0e, 0x36, 0x6a, 0x54, 0x34, 0xff, 0xff, // 8PB..)OsK.6jT4.. + 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x49, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, // .....4.I.&.'.... + 0x00, 0x9d, 0x00, 0x06, 0x01, 0x5c, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5c, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x06, 0x08, 0x02, 0x26, 0x00, 0x47, // +........E...&.G + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0x07, 0x1b, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x1b, 0x33, 0x2b, // ..............3+ + 0xff, 0xff, 0x00, 0x64, 0xff, 0xeb, 0x04, 0x5c, 0x07, 0x5d, 0x02, 0x26, 0x00, 0x29, 0x00, 0x00, // ...d.....].&.).. + 0x01, 0x07, 0x00, 0x9c, 0x00, 0x91, 0x01, 0x70, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x70, // .......p.......p + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8c, 0xfe, 0x56, 0x04, 0x1d, 0x06, 0x06, 0x02, 0x26, // .3+......V.....& + 0x00, 0x49, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x6d, 0x19, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x19, // .I......m....... + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x64, 0xff, 0xeb, 0x04, 0x5c, 0x07, 0x5f, 0x02, 0x26, 0x00, 0x29, // 3+...d....._.&.) + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x19, 0x01, 0xad, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // ................ + 0x01, 0xad, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8c, 0xfe, 0x56, 0x04, 0x1d, 0x06, 0x08, // ...3+......V.... + 0x02, 0x26, 0x00, 0x49, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0xf6, 0x56, 0x00, 0x06, 0xb3, 0x02, // .&.I.......V.... + 0x01, 0x56, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x64, 0xff, 0xeb, 0x04, 0x5c, 0x07, 0x2e, 0x02, 0x26, // .V3+...d.......& + 0x00, 0x29, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9f, 0x00, 0x19, 0x01, 0x70, 0x00, 0x09, 0xb1, 0x01, // .).........p.... + 0x01, 0xb8, 0x01, 0x70, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8c, 0xfe, 0x56, 0x04, 0x1d, // ...p.3+......V.. + 0x05, 0xd7, 0x02, 0x26, 0x00, 0x49, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9f, 0xf6, 0x19, 0x00, 0x06, // ...&.I.......... + 0xb3, 0x02, 0x01, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x64, 0xfe, 0x25, 0x04, 0x5c, 0x05, 0xc4, // ....3+...d.%.... + 0x02, 0x26, 0x00, 0x29, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0xb1, 0xfe, 0xcf, 0x00, 0x09, // .&.)............ + 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xcf, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8c, 0xfe, 0x56, // .......3+......V + 0x04, 0x1d, 0x06, 0x93, 0x02, 0x26, 0x00, 0x49, 0x00, 0x00, 0x01, 0x06, 0x01, 0x9c, 0x07, 0x58, // .....&.I.......X + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x58, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8d, 0x00, 0x00, 0x04, 0x3f, // .....X3+.......? + 0x07, 0x48, 0x02, 0x26, 0x00, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x71, 0x01, 0x5b, // .H.&.*.......q.[ + 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, // .......[.3+..... + 0x00, 0x00, 0x04, 0x2c, 0x07, 0x6f, 0x02, 0x26, 0x00, 0x4a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, // ...,.o.&.J...... + 0x00, 0x24, 0x01, 0x82, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x82, 0xb0, 0x33, 0x2b, 0x00, // .$...........3+. + 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x07, 0x52, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, // .........R.&.+.. + 0x01, 0x07, 0x00, 0xa2, 0x00, 0x55, 0x01, 0x61, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x61, // .....U.a.......a + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x05, 0xfb, 0x02, 0x26, // .3+........U...& + 0x00, 0x8a, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0xb8, 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x01, // ................ + 0x01, 0x0a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x06, 0xfa, 0x02, 0x26, // ..3+...........& + 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6e, 0xff, 0xd6, 0x01, 0x4a, 0x00, 0x09, 0xb1, 0x01, // .+.....n...J.... + 0x01, 0xb8, 0x01, 0x4a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, // ...J.3+........U + 0x05, 0xa4, 0x02, 0x26, 0x00, 0x8a, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0x38, 0xf4, 0x00, 0x09, // ...&.......n8... + 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf4, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, // .......3+....... + 0x04, 0x1e, 0x07, 0x4a, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0xff, 0xd2, // ...J.&.+........ + 0x01, 0x98, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x98, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x05, 0xf3, 0x02, 0x26, 0x00, 0x8a, 0x00, 0x00, 0x01, 0x06, // .....U...&...... + 0x00, 0x9e, 0x34, 0x41, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x41, 0x33, 0x2b, 0x00, 0x01, 0x00, 0xae, // ..4A.....A3+.... + 0xfe, 0x4f, 0x04, 0x1e, 0x05, 0xb0, 0x00, 0x21, 0x00, 0x3b, 0x40, 0x38, 0x10, 0x01, 0x04, 0x03, // .O.....!.;@8.... + 0x11, 0x01, 0x05, 0x04, 0x02, 0x4a, 0x08, 0x01, 0x01, 0x01, 0x00, 0x59, 0x00, 0x00, 0x00, 0x3c, // .....J.....Y...< + 0x4b, 0x07, 0x01, 0x02, 0x02, 0x03, 0x59, 0x06, 0x01, 0x03, 0x03, 0x3d, 0x4b, 0x00, 0x04, 0x04, // K.....Y....=K... + 0x05, 0x5b, 0x00, 0x05, 0x05, 0x49, 0x05, 0x4c, 0x11, 0x11, 0x17, 0x25, 0x25, 0x11, 0x11, 0x11, // .[...I.L...%%... + 0x10, 0x09, 0x08, 0x1d, 0x2b, 0x13, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x06, 0x06, 0x15, // ....+.!.!.!.!... + 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x36, // ..3.67...#"..546 + 0x37, 0x21, 0x35, 0x21, 0x11, 0x21, 0xae, 0x03, 0x70, 0xfe, 0xa3, 0x01, 0x5d, 0xfe, 0xdc, 0x4e, // 7!5!.!..p...]..N + 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, 0x1e, 0x50, 0x48, // ^$* 5...UA)F4.PH + 0xfe, 0x69, 0x01, 0x55, 0xfe, 0xab, 0x05, 0xb0, 0xa1, 0xfb, 0x91, 0xa0, 0x2a, 0x6f, 0x42, 0x22, // .i.U........*oB" + 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x3f, 0x7f, 0x35, 0xa0, 0x04, // )...y...0G/?.5.. + 0x6f, 0x00, 0x00, 0x02, 0x00, 0xcb, 0xfe, 0x4f, 0x04, 0x55, 0x05, 0xc3, 0x00, 0x1f, 0x00, 0x2b, // o......O.U.....+ + 0x00, 0x46, 0x40, 0x43, 0x0e, 0x01, 0x03, 0x02, 0x0f, 0x01, 0x04, 0x03, 0x02, 0x4a, 0x00, 0x09, // .F@C.........J.. + 0x09, 0x08, 0x5b, 0x00, 0x08, 0x08, 0x44, 0x4b, 0x00, 0x07, 0x07, 0x00, 0x59, 0x00, 0x00, 0x00, // ..[...DK....Y... + 0x3f, 0x4b, 0x06, 0x01, 0x01, 0x01, 0x02, 0x59, 0x05, 0x01, 0x02, 0x02, 0x3d, 0x4b, 0x00, 0x03, // ?K.....Y....=K.. + 0x03, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x49, 0x04, 0x4c, 0x2a, 0x28, 0x23, 0x11, 0x11, 0x17, 0x25, // ..[...I.L*(#...% + 0x25, 0x11, 0x11, 0x10, 0x0a, 0x08, 0x1d, 0x2b, 0x13, 0x21, 0x11, 0x21, 0x15, 0x21, 0x06, 0x06, // %......+.!.!.!.. + 0x15, 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, // ...3.67...#"..54 + 0x36, 0x37, 0x21, 0x35, 0x21, 0x11, 0x21, 0x01, 0x34, 0x36, 0x33, 0x32, 0x16, 0x15, 0x14, 0x06, // 67!5!.!.4632.... + 0x23, 0x22, 0x26, 0xcb, 0x02, 0x29, 0x01, 0x61, 0xfe, 0x9f, 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, // #"&..).a..N^$* 5 + 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, 0x1e, 0x50, 0x48, 0xfe, 0x8c, 0x01, 0x70, 0xfe, // ...UA)F4.PH...p. + 0x90, 0x01, 0x58, 0x37, 0x38, 0x37, 0x38, 0x38, 0x37, 0x38, 0x37, 0x04, 0x3a, 0xfc, 0x66, 0xa0, // ..X78788787.:.f. + 0x2a, 0x6f, 0x42, 0x22, 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x3f, // *oB")...y...0G/? + 0x7f, 0x35, 0xa0, 0x02, 0xf9, 0x01, 0xbd, 0x2e, 0x3f, 0x3f, 0x2e, 0x2d, 0x3c, 0x3c, 0xff, 0xff, // .5......??.-<<.. + 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x07, 0x19, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, // .........&.+.... + 0x00, 0x9f, 0xff, 0xd2, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5b, 0xb0, 0x33, // .....[.......[.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x62, 0xff, 0xec, 0x04, 0xdf, 0x07, 0x3b, 0x02, 0x26, 0x00, 0x2c, // +....b.....;.&., + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x01, 0xc1, 0x01, 0x4e, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .........N...... + 0x01, 0x4e, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb0, 0xfe, 0x4b, 0x03, 0xf5, 0x05, 0xe8, // .N.3+......K.... + 0x02, 0x26, 0x00, 0x9a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0xd7, 0xff, 0xfb, 0x00, 0x09, // .&.............. + 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xfb, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xac, 0xfe, 0x3e, // .......3+......> + 0x04, 0xa4, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2d, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0xb6, // .....&.-........ + 0xfe, 0xe8, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xe8, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0xb0, 0xfe, 0x40, 0x04, 0x6a, 0x06, 0x00, 0x02, 0x26, 0x00, 0x4d, 0x00, 0x00, 0x01, 0x07, // ...@.j...&.M.... + 0x01, 0x91, 0x00, 0x62, 0xfe, 0xea, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xea, 0xb0, 0x33, // ...b...........3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xc6, 0x00, 0x00, 0x04, 0x47, 0x07, 0x00, 0x02, 0x26, 0x00, 0x2e, // +........G...&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0xff, 0x36, 0x01, 0x37, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....s.6.7...... + 0x01, 0x37, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x07, 0x66, // .7.3+........U.f + 0x02, 0x26, 0x00, 0x4e, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0xa2, 0x01, 0x9d, 0x00, 0x09, // .&.N.....s...... + 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x9d, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xc6, 0xfe, 0x38, // .......3+......8 + 0x04, 0x47, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0xb7, // .G...&.......... + 0xfe, 0xe2, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xe2, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0xcb, 0xfe, 0x39, 0x04, 0x55, 0x06, 0x00, 0x02, 0x26, 0x00, 0x4e, 0x00, 0x00, 0x01, 0x07, // ...9.U...&.N.... + 0x01, 0x91, 0x00, 0xd2, 0xfe, 0xe3, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xe3, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xc6, 0x00, 0x00, 0x04, 0x47, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2e, // +........G...&.. + 0x00, 0x00, 0x01, 0x07, 0x01, 0x68, 0x00, 0xf2, 0xff, 0x9a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....h.......... + 0xff, 0x9a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xcb, 0x00, 0x00, 0x04, 0xe1, 0x06, 0x04, // ...3+........... + 0x00, 0x26, 0x00, 0x4e, 0x00, 0x00, 0x01, 0x07, 0x01, 0x68, 0x02, 0x01, 0xff, 0xee, 0x00, 0x09, // .&.N.....h...... + 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xee, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xc6, 0x00, 0x00, // .......3+....... + 0x04, 0x47, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2e, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9f, 0x00, 0x74, // .G...&.........t + 0xfd, 0xc5, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfd, 0xc5, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0xcb, 0x00, 0x00, 0x04, 0x58, 0x06, 0x00, 0x00, 0x26, 0x00, 0x4e, 0x00, 0x00, 0x01, 0x07, // .....X...&.N.... + 0x00, 0x9f, 0x01, 0x80, 0xfd, 0xe7, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfd, 0xe7, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8f, 0x00, 0x00, 0x04, 0x3e, 0x07, 0x20, 0x02, 0x26, 0x00, 0x30, // +........>. .&.0 + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x5e, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....s.^.W...... + 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x29, 0x05, 0xde, // .W.3+........).. + 0x02, 0x26, 0x00, 0x50, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x6d, 0x15, 0x00, 0x06, 0xb3, 0x01, // .&.P.....sm..... + 0x01, 0x15, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x38, 0x04, 0x3e, 0x05, 0xb0, 0x02, 0x26, // ..3+.....8.>...& + 0x00, 0x30, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0x84, 0xfe, 0xe2, 0x00, 0x09, 0xb1, 0x01, // .0.............. + 0x01, 0xb8, 0xfe, 0xe2, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0xfe, 0x38, 0x04, 0x29, // .....3+......8.) + 0x04, 0x4e, 0x02, 0x26, 0x00, 0x50, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0x93, 0xfe, 0xe2, // .N.&.P.......... + 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xe2, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8f, // .........3+..... + 0x00, 0x00, 0x04, 0x3e, 0x07, 0x49, 0x02, 0x26, 0x00, 0x30, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9d, // ...>.I.&.0...... + 0xff, 0xea, 0x01, 0x5c, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5c, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x29, 0x06, 0x07, 0x02, 0x26, 0x00, 0x50, 0x00, 0x00, // .......)...&.P.. + 0x01, 0x06, 0x00, 0x9d, 0xf9, 0x1a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1a, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0xff, 0xba, 0x00, 0x00, 0x04, 0x29, 0x06, 0x16, 0x02, 0x26, 0x00, 0x50, 0x00, 0x00, 0x00, 0x07, // .....)...&.P.... + 0x01, 0x68, 0xfd, 0xed, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, 0x07, 0x0f, // .h.......j...a.. + 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6e, 0x00, 0x17, 0x01, 0x5f, 0x00, 0x09, // .&.1.....n..._.. + 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x5f, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, // ....._.3+....z.. + 0x04, 0x52, 0x05, 0xb8, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0x04, 0x08, // .R...&.Q.....n.. + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x08, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, // ......3+...j...a + 0x07, 0x5f, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x13, 0x01, 0xad, // ._.&.1.......... + 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0xad, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x7a, // .........3+....z + 0xff, 0xec, 0x04, 0x52, 0x06, 0x08, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, // ...R...&.Q...... + 0x00, 0x56, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x56, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, // .V.....V3+...j.. + 0x04, 0x6f, 0x07, 0x5f, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa3, 0x00, 0x99, // .o._.&.1........ + 0x01, 0x70, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x70, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .p.......p.3+... + 0x00, 0x7a, 0xff, 0xec, 0x04, 0x5c, 0x06, 0x08, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x07, // .z.......&.Q.... + 0x00, 0xa3, 0x00, 0x86, 0x00, 0x19, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x19, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0xb5, 0x00, 0x00, 0x04, 0x72, 0x07, 0x14, 0x02, 0x26, 0x00, 0x34, 0x00, 0x00, 0x01, 0x07, // .....r...&.4.... + 0x00, 0x73, 0x00, 0x78, 0x01, 0x4b, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x4b, 0xb0, 0x33, // .s.x.K.......K.3 + 0x2b, 0x00, 0xff, 0xff, 0x01, 0x49, 0x00, 0x00, 0x04, 0x31, 0x05, 0xde, 0x02, 0x26, 0x00, 0x54, // +....I...1...&.T + 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x58, 0x15, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x15, 0x33, 0x2b, // .....sX.......3+ + 0xff, 0xff, 0x00, 0xb5, 0xfe, 0x38, 0x04, 0x72, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x34, 0x00, 0x00, // .....8.r...&.4.. + 0x01, 0x07, 0x01, 0x91, 0x00, 0x9c, 0xfe, 0xe2, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0xfe, 0xe2, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x01, 0x10, 0xfe, 0x38, 0x04, 0x31, 0x04, 0x4e, 0x02, 0x26, // .3+......8.1.N.& + 0x00, 0x54, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0xff, 0xe2, 0xfe, 0xe2, 0x00, 0x09, 0xb1, 0x01, // .T.............. + 0x01, 0xb8, 0xfe, 0xe2, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb5, 0x00, 0x00, 0x04, 0x72, // .....3+........r + 0x07, 0x3d, 0x02, 0x26, 0x00, 0x34, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9d, 0x00, 0x03, 0x01, 0x50, // .=.&.4.........P + 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x50, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x01, 0x14, // .......P.3+..... + 0x00, 0x00, 0x04, 0x31, 0x06, 0x07, 0x02, 0x26, 0x00, 0x54, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, // ...1...&.T...... + 0xe4, 0x1a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x76, 0xff, 0xec, // ........3+...v.. + 0x04, 0x69, 0x07, 0x35, 0x02, 0x26, 0x00, 0x35, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x82, // .i.5.&.5.....s.. + 0x01, 0x6c, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x6c, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .l.......l.3+... + 0x00, 0xaf, 0xff, 0xec, 0x04, 0x36, 0x05, 0xde, 0x02, 0x26, 0x00, 0x55, 0x00, 0x00, 0x01, 0x07, // .....6...&.U.... + 0x00, 0x73, 0x00, 0x84, 0x00, 0x15, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x15, 0x33, 0x2b, 0xff, 0xff, // .s..........3+.. + 0x00, 0x76, 0xff, 0xec, 0x04, 0x69, 0x07, 0x5d, 0x02, 0x26, 0x00, 0x35, 0x00, 0x00, 0x01, 0x07, // .v...i.].&.5.... + 0x00, 0x9c, 0x00, 0x84, 0x01, 0x70, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x70, 0xb0, 0x33, // .....p.......p.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xaf, 0xff, 0xec, 0x04, 0x36, 0x06, 0x06, 0x02, 0x26, 0x00, 0x55, // +........6...&.U + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x86, 0x00, 0x19, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x19, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x76, 0xfe, 0x44, 0x04, 0x69, 0x05, 0xc4, 0x02, 0x26, 0x00, 0x35, // 3+...v.D.i...&.5 + 0x00, 0x00, 0x01, 0x06, 0x00, 0x77, 0x51, 0xf7, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf7, // .....wQ......... + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xaf, 0xfe, 0x45, 0x04, 0x36, 0x04, 0x4e, 0x02, 0x26, // .3+......E.6.N.& + 0x00, 0x55, 0x00, 0x00, 0x01, 0x06, 0x00, 0x77, 0x44, 0xf8, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .U.....wD....... + 0xff, 0xf8, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x76, 0xfe, 0x24, 0x04, 0x69, 0x05, 0xc4, // ...3+....v.$.i.. + 0x02, 0x26, 0x00, 0x35, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0xb5, 0xfe, 0xce, 0x00, 0x09, // .&.5............ + 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xce, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xaf, 0xfe, 0x25, // .......3+......% + 0x04, 0x36, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x55, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0xa8, // .6.N.&.U........ + 0xfe, 0xcf, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xcf, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x76, 0xff, 0xec, 0x04, 0x69, 0x07, 0x5e, 0x02, 0x26, 0x00, 0x35, 0x00, 0x00, 0x01, 0x07, // .v...i.^.&.5.... + 0x00, 0x9d, 0x00, 0x0d, 0x01, 0x71, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x71, 0xb0, 0x33, // .....q.......q.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xaf, 0xff, 0xec, 0x04, 0x36, 0x06, 0x07, 0x02, 0x26, 0x00, 0x55, // +........6...&.U + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0x0f, 0x1a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1a, 0x33, 0x2b, // ..............3+ + 0xff, 0xff, 0x00, 0x4c, 0xfe, 0x2e, 0x04, 0x84, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x36, 0x00, 0x00, // ...L.......&.6.. + 0x01, 0x07, 0x01, 0x91, 0x00, 0xa3, 0xfe, 0xd8, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xd8, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8e, 0xfe, 0x2e, 0x04, 0x29, 0x05, 0x40, 0x02, 0x26, // .3+........).@.& + 0x00, 0x56, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x01, 0x05, 0xfe, 0xd8, 0x00, 0x09, 0xb1, 0x01, // .V.............. + 0x01, 0xb8, 0xfe, 0xd8, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x4c, 0xfe, 0x4d, 0x04, 0x84, // .....3+....L.M.. + 0x05, 0xb0, 0x02, 0x26, 0x00, 0x36, 0x00, 0x00, 0x00, 0x06, 0x00, 0x77, 0x3f, 0x00, 0xff, 0xff, // ...&.6.....w?... + 0x00, 0x5d, 0xfe, 0x4f, 0x04, 0x69, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xaf, 0x00, 0x00, 0x01, 0x06, // .].O.i...&...... + 0x00, 0x77, 0x30, 0x02, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x02, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8e, // .w0.......3+.... + 0xfe, 0x4d, 0x04, 0x29, 0x05, 0x40, 0x02, 0x26, 0x00, 0x56, 0x00, 0x00, 0x00, 0x07, 0x00, 0x77, // .M.).@.&.V.....w + 0x00, 0xa1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4c, 0x00, 0x00, 0x04, 0x84, 0x07, 0x3d, 0x02, 0x26, // .......L.....=.& + 0x00, 0x36, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9d, 0x00, 0x0d, 0x01, 0x50, 0x00, 0x09, 0xb1, 0x01, // .6.........P.... + 0x01, 0xb8, 0x01, 0x50, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8e, 0xff, 0xec, 0x04, 0x7c, // ...P.3+........| + 0x06, 0xb3, 0x00, 0x26, 0x00, 0x56, 0x00, 0x00, 0x01, 0x07, 0x01, 0x68, 0x01, 0x9c, 0x00, 0x9d, // ...&.V.....h.... + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x9d, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, // ......3+.......B + 0x07, 0x46, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0xb1, 0x01, 0x55, // .F.&.7.........U + 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x55, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, // .......U.3+..... + 0xff, 0xec, 0x04, 0x1f, 0x05, 0xfc, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, // .......&.W...... + 0x00, 0x83, 0x00, 0x0b, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x0b, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8b, // ..........3+.... + 0xff, 0xec, 0x04, 0x42, 0x06, 0xee, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0x6e, // ...B...&.7.....n + 0x00, 0x31, 0x01, 0x3e, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x3e, 0xb0, 0x33, 0x2b, 0x00, // .1.>.......>.3+. + 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x05, 0xa5, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, // ...........&.W.. + 0x01, 0x06, 0x00, 0x6e, 0x03, 0xf5, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf5, 0xb0, 0x33, // ...n...........3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, 0x07, 0x3e, 0x02, 0x26, 0x00, 0x37, // +........B.>.&.7 + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x2d, 0x01, 0x8c, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .......-........ + 0x01, 0x8c, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x05, 0xf4, // ...3+........... + 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0x00, 0x42, 0x00, 0x06, 0xb3, 0x01, // .&.W.......B.... + 0x01, 0x42, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x42, 0x07, 0x7f, 0x02, 0x26, // .B3+.......B...& + 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa0, 0x00, 0x2c, 0x01, 0x98, 0x00, 0x09, 0xb1, 0x01, // .7.......,...... + 0x02, 0xb8, 0x01, 0x98, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, // .....3+......... + 0x06, 0x35, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, 0x01, 0x06, 0x00, 0xa0, 0xff, 0x4e, 0x00, 0x06, // .5.&.W.......N.. + 0xb3, 0x01, 0x02, 0x4e, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x89, 0x07, 0x3e, // ...N3+.........> + 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa3, 0x00, 0xb3, 0x01, 0x4f, 0x00, 0x09, // .&.7.........O.. + 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x4f, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, // .....O.3+....... + 0x04, 0x5b, 0x05, 0xf4, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa3, 0x00, 0x85, // .[...&.W........ + 0x00, 0x05, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x05, 0x33, 0x2b, 0x00, 0x01, 0x00, 0x8b, 0xfe, 0x7e, // ........3+.....~ + 0x04, 0x42, 0x05, 0xb0, 0x00, 0x2e, 0x00, 0x5d, 0x40, 0x0a, 0x0f, 0x01, 0x00, 0x02, 0x10, 0x01, // .B.....]@....... + 0x01, 0x00, 0x02, 0x4a, 0x4b, 0xb0, 0x23, 0x50, 0x58, 0x40, 0x1c, 0x06, 0x05, 0x02, 0x03, 0x03, // ...JK.#PX@...... + 0x3c, 0x4b, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, 0x4b, 0x00, 0x00, 0x00, 0x01, // .7..@.. + 0x27, 0x46, 0x64, 0x3d, 0x3e, 0x48, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, // 'Fd=>H$* 5...UA) + 0x46, 0x34, 0x1e, 0x28, 0x26, 0x68, 0xa9, 0x79, 0x44, 0x01, 0x02, 0xb0, 0x04, 0x01, 0x27, 0x49, // F4.(&h.yD.....'I + 0x6d, 0x47, 0x47, 0x6c, 0x49, 0x26, 0x02, 0x03, 0x05, 0xb0, 0xfc, 0x26, 0x4a, 0x88, 0x74, 0x5a, // mGGlI&.....&J.tZ + 0x1d, 0x28, 0x63, 0x3a, 0x22, 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, // .(c:")...y...0G/ + 0x2d, 0x5a, 0x2a, 0x02, 0x4e, 0x84, 0xb0, 0x65, 0x03, 0xda, 0xfc, 0x26, 0x41, 0x78, 0x5c, 0x38, // -Z*.N..e...&Ax.8 + 0x37, 0x5d, 0x78, 0x41, 0x03, 0xda, 0x00, 0x01, 0x00, 0xb4, 0xfe, 0x4f, 0x04, 0x44, 0x04, 0x3a, // 7]xA.......O.D.: + 0x00, 0x2c, 0x00, 0x3a, 0x40, 0x37, 0x29, 0x16, 0x02, 0x04, 0x03, 0x2c, 0x01, 0x02, 0x04, 0x09, // .,.:@7)....,.... + 0x01, 0x00, 0x02, 0x0a, 0x01, 0x01, 0x00, 0x04, 0x4a, 0x05, 0x01, 0x03, 0x03, 0x3f, 0x4b, 0x00, // ........J....?K. + 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, 0x4b, 0x00, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x01, // ...[...EK....... + 0x01, 0x49, 0x01, 0x4c, 0x13, 0x25, 0x15, 0x2a, 0x25, 0x25, 0x06, 0x08, 0x1a, 0x2b, 0x21, 0x06, // .I.L.%.*%%...+!. + 0x06, 0x15, 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // ....3.67...#"..5 + 0x34, 0x36, 0x37, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x11, 0x33, 0x11, 0x14, 0x1e, // 467'..#"..5.3... + 0x02, 0x33, 0x32, 0x36, 0x37, 0x11, 0x33, 0x11, 0x04, 0x1e, 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, // .3267.3...N^$* 5 + 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, 0x1e, 0x57, 0x4e, 0x0a, 0x36, 0xa2, 0x6a, 0x55, // ...UA)F4.WN.6.jU + 0x8a, 0x62, 0x35, 0xb9, 0x1c, 0x38, 0x51, 0x35, 0x71, 0x8b, 0x22, 0xba, 0x2a, 0x6f, 0x42, 0x22, // .b5..8Q5q.".*oB" + 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x42, 0x84, 0x36, 0x8c, 0x50, // )...y...0G/B.6.P + 0x59, 0x35, 0x70, 0xad, 0x79, 0x02, 0x83, 0xfd, 0x7b, 0x58, 0x74, 0x45, 0x1c, 0x5c, 0x4e, 0x03, // Y5p.y...{XtE..N. + 0x08, 0xfb, 0xc6, 0x00, 0xff, 0xff, 0x00, 0x49, 0x00, 0x00, 0x04, 0x9e, 0x07, 0x48, 0x02, 0x26, // .......I.....H.& + 0x00, 0x39, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x7f, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, // .9.........[.... + 0x01, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x04, 0xa7, // ...[.3+....0.... + 0x05, 0xf2, 0x02, 0x26, 0x00, 0x59, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x7e, 0x05, 0x00, 0x06, // ...&.Y......~... + 0xb3, 0x01, 0x01, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x07, 0x47, // ....3+...=...y.G + 0x02, 0x26, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x73, 0x01, 0x5a, 0x00, 0x09, // .&.;.......s.Z.. + 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, // .....Z.3+....D.K + 0x04, 0x85, 0x05, 0xf2, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x8b, // .....&.[........ + 0x00, 0x05, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, // ........3+...=.. + 0x04, 0x79, 0x07, 0x1f, 0x02, 0x26, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0xff, 0xfc, // .y...&.;.....h.. + 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .Z.......Z.3+... + 0x00, 0x72, 0x00, 0x00, 0x04, 0x37, 0x07, 0x14, 0x02, 0x26, 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, // .r...7...&.<.... + 0x00, 0x73, 0x00, 0x9d, 0x01, 0x4b, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x4b, 0xb0, 0x33, // .s...K.......K.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa0, 0x00, 0x00, 0x04, 0x3d, 0x05, 0xca, 0x02, 0x26, 0x00, 0x5c, // +........=...&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x9a, 0x00, 0x01, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x01, // .....s.......... + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x72, 0x00, 0x00, 0x04, 0x37, 0x07, 0x0d, 0x02, 0x26, 0x00, 0x3c, // 3+...r...7...&.< + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9f, 0x00, 0x27, 0x01, 0x4f, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .......'.O...... + 0x01, 0x4f, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa0, 0x00, 0x00, 0x04, 0x3d, 0x05, 0xc3, // .O.3+........=.. + 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9f, 0x24, 0x05, 0x00, 0x06, 0xb3, 0x01, // .&........$..... + 0x01, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x72, 0x00, 0x00, 0x04, 0x37, 0x07, 0x3d, 0x02, 0x26, // ..3+...r...7.=.& + 0x00, 0x3c, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9d, 0x00, 0x28, 0x01, 0x50, 0x00, 0x09, 0xb1, 0x01, // .<.......(.P.... + 0x01, 0xb8, 0x01, 0x50, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa0, 0x00, 0x00, 0x04, 0x3d, // ...P.3+........= + 0x05, 0xf3, 0x02, 0x26, 0x00, 0x5c, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0x25, 0x06, 0x00, 0x06, // ...&........%... + 0xb3, 0x01, 0x01, 0x06, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, 0x04, 0xab, 0x07, 0x20, // ....3+... ..... + 0x02, 0x26, 0x00, 0x7f, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0xd7, 0x01, 0x57, 0x00, 0x09, // .&.......s...W.. + 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x2b, 0xff, 0xec, // .....W.3+....+.. + 0x04, 0xa9, 0x05, 0xdf, 0x02, 0x26, 0x00, 0x84, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x98, // .....&.......s.. + 0x00, 0x16, 0x00, 0x06, 0xb3, 0x03, 0x01, 0x16, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x47, 0xff, 0xa3, // ........3+...G.. + 0x04, 0x8c, 0x07, 0x5e, 0x02, 0x26, 0x00, 0x81, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x7b, // ...^.&.......s.{ + 0x01, 0x95, 0x00, 0x09, 0xb1, 0x03, 0x01, 0xb8, 0x01, 0x95, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x7a, 0xff, 0x79, 0x04, 0x52, 0x05, 0xdd, 0x02, 0x26, 0x00, 0x87, 0x00, 0x00, 0x01, 0x06, // .z.y.R...&...... + 0x00, 0x73, 0x50, 0x14, 0x00, 0x06, 0xb3, 0x03, 0x01, 0x14, 0x33, 0x2b, 0xff, 0xff, 0xff, 0xe7, // .sP.......3+.... + 0x00, 0x00, 0x04, 0x53, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xa0, 0x00, 0x00, 0x01, 0x07, 0x01, 0xca, // ...S...&........ + 0xfe, 0xb2, 0xff, 0x78, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0xff, 0x78, 0xb0, 0x33, 0x2b, 0x00, // ...x.......x.3+. + 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x04, 0x53, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xa0, 0x00, 0x00, // .......S...&.... + 0x01, 0x07, 0x01, 0xca, 0xfe, 0xb2, 0xff, 0x78, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0xff, 0x78, // .......x.......x + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x5d, 0x00, 0x00, 0x04, 0x69, 0x04, 0x8d, 0x02, 0x26, // .3+....]...i...& + 0x01, 0xaf, 0x00, 0x00, 0x01, 0x06, 0x01, 0xca, 0xf3, 0xe0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // ................ + 0xff, 0xe0, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x05, 0xff, // ...3+....6...... + 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x8b, 0x36, 0x00, 0x06, 0xb3, 0x02, // .&.......B.6.... + 0x01, 0x36, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x05, 0xfc, 0x02, 0x26, // .63+...6.......& + 0x01, 0x9d, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x77, 0x33, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x33, // .......sw3.....3 + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x06, 0x24, 0x02, 0x26, 0x01, 0x9d, // 3+...6.....$.&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x79, 0x37, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x37, 0x33, 0x2b, // ......y7.....73+ + 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x06, 0x2e, 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, // ...6.......&.... + 0x01, 0x07, 0x00, 0xa2, 0x00, 0x85, 0x00, 0x3d, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x3d, 0x33, 0x2b, // .......=.....=3+ + 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x05, 0xfc, 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, // ...6.......&.... + 0x01, 0x06, 0x00, 0x68, 0x01, 0x37, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x37, 0x33, 0x2b, 0xff, 0xff, // ...h.7.....73+.. + 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x06, 0x67, 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, 0x01, 0x07, // .6.....g.&...... + 0x00, 0xa0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x80, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0x36, 0x00, 0x00, 0x04, 0x8e, 0x06, 0xf4, 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, 0x01, 0x07, // .6.......&...... + 0x01, 0xcb, 0xff, 0xee, 0x00, 0x82, 0x00, 0x06, 0xb3, 0x02, 0x03, 0x82, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0x6e, 0xfe, 0x4a, 0x04, 0x36, 0x04, 0x9d, 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, 0x01, 0x06, // .n.J.6...&...... + 0x00, 0x77, 0x2a, 0xfd, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xfd, 0xb0, 0x33, 0x2b, 0x00, // .w*..........3+. + 0xff, 0xff, 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x05, 0xff, 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, // .......#...&.... + 0x01, 0x07, 0x00, 0x42, 0xff, 0x6d, 0x00, 0x36, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x36, 0x33, 0x2b, // ...B.m.6.....63+ + 0xff, 0xff, 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, // .......#...&.... + 0x01, 0x06, 0x00, 0x73, 0x59, 0x33, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, // ...sY3.....33+.. + 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x06, 0x24, 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, 0x01, 0x06, // .....#.$.&...... + 0x00, 0x9c, 0x5b, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xc8, // ..[7.....73+.... + 0x00, 0x00, 0x04, 0x23, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, // ...#...&.......h + 0xe4, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x37, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, // .7.....73+...... + 0x04, 0x10, 0x05, 0xe3, 0x02, 0x26, 0x01, 0xa5, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0xa6, 0x1a, // .....&.......B.. + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, // ......3+........ + 0x05, 0xe0, 0x02, 0x26, 0x01, 0xa5, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x92, 0x00, 0x17, // ...&.......s.... + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x17, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, // ......3+........ + 0x06, 0x08, 0x02, 0x26, 0x01, 0xa5, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x94, 0x00, 0x1b, // ...&............ + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1b, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, // ......3+........ + 0x05, 0xe0, 0x02, 0x26, 0x01, 0xa5, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x1c, 0x1b, 0x00, 0x06, // ...&.......h.... + 0xb3, 0x01, 0x02, 0x1b, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xc2, 0x00, 0x00, 0x04, 0x16, 0x06, 0x2e, // ....3+.......... + 0x02, 0x26, 0x01, 0xaa, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0xdc, 0x00, 0x3d, 0x00, 0x06, // .&...........=.. + 0xb3, 0x01, 0x01, 0x3d, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x05, 0xff, // ...=3+.......J.. + 0x02, 0x26, 0x01, 0xab, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0xad, 0x36, 0x00, 0x06, 0xb3, 0x02, // .&.......B.6.... + 0x01, 0x36, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x05, 0xfc, 0x02, 0x26, // .63+.......J...& + 0x01, 0xab, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x99, 0x00, 0x33, 0x00, 0x06, 0xb3, 0x02, // .......s...3.... + 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x06, 0x24, 0x02, 0x26, // .33+.......J.$.& + 0x01, 0xab, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x9b, 0x00, 0x37, 0x00, 0x06, 0xb3, 0x02, // ...........7.... + 0x01, 0x37, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x06, 0x2e, 0x02, 0x26, // .73+.......J...& + 0x01, 0xab, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0xa7, 0x00, 0x3d, 0x00, 0x06, 0xb3, 0x02, // ...........=.... + 0x01, 0x3d, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x05, 0xfc, 0x02, 0x26, // .=3+.......J...& + 0x01, 0xab, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x23, 0x37, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x37, // .......h#7.....7 + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x05, 0xff, 0x02, 0x26, 0x01, 0xb0, // 3+.......+...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0xa9, 0x36, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x36, 0x33, 0x2b, // .....B.6.....63+ + 0xff, 0xff, 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, // .......+...&.... + 0x01, 0x07, 0x00, 0x73, 0x00, 0x95, 0x00, 0x33, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x33, 0x33, 0x2b, // ...s...3.....33+ + 0xff, 0xff, 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x06, 0x24, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, // .......+.$.&.... + 0x01, 0x07, 0x00, 0x9c, 0x00, 0x97, 0x00, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, // .......7.....73+ + 0xff, 0xff, 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, // .......+...&.... + 0x01, 0x06, 0x00, 0x68, 0x1f, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x37, 0x33, 0x2b, 0xff, 0xff, // ...h.7.....73+.. + 0x00, 0x4d, 0x00, 0x00, 0x04, 0x81, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xb4, 0x00, 0x00, 0x01, 0x06, // .M.......&...... + 0x00, 0x73, 0x62, 0x33, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x36, // .sb3.....33+...6 + 0x00, 0x00, 0x04, 0x8e, 0x05, 0xd6, 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, // .......&.......n + 0x05, 0x26, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x26, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x36, 0x00, 0x00, // .&.....&3+...6.. + 0x04, 0x8e, 0x06, 0x26, 0x02, 0x26, 0x01, 0x9d, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0x01, 0x74, // ...&.&.........t + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x74, 0x33, 0x2b, 0x00, 0x02, 0x00, 0x36, 0xfe, 0x4f, 0x04, 0x91, // .....t3+...6.O.. + 0x04, 0x8d, 0x00, 0x1c, 0x00, 0x1f, 0x00, 0x44, 0x40, 0x41, 0x1f, 0x01, 0x06, 0x05, 0x17, 0x01, // .......D@A...... + 0x00, 0x03, 0x0b, 0x01, 0x01, 0x00, 0x0c, 0x01, 0x02, 0x01, 0x04, 0x4a, 0x07, 0x01, 0x05, 0x06, // ...........J.... + 0x05, 0x72, 0x00, 0x06, 0x00, 0x03, 0x00, 0x06, 0x03, 0x62, 0x04, 0x01, 0x00, 0x00, 0x3d, 0x4b, // .r.......b....=K + 0x00, 0x01, 0x01, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x49, 0x02, 0x4c, 0x00, 0x00, 0x1e, 0x1d, 0x00, // ....[...I.L..... + 0x1c, 0x00, 0x1c, 0x11, 0x18, 0x25, 0x25, 0x11, 0x08, 0x08, 0x19, 0x2b, 0x01, 0x01, 0x23, 0x06, // .....%%....+..#. + 0x06, 0x15, 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // ....3.67...#"..5 + 0x34, 0x36, 0x37, 0x03, 0x21, 0x03, 0x23, 0x01, 0x03, 0x21, 0x03, 0x02, 0xb8, 0x01, 0xd6, 0x23, // 467.!.#..!.....# + 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, 0x1e, 0x5d, // N^$* 5...UA)F4.] + 0x52, 0x67, 0xfd, 0xfa, 0x6e, 0xbc, 0x01, 0xdd, 0x77, 0x01, 0x8f, 0xc7, 0x04, 0x8d, 0xfb, 0x73, // Rg..n...w......s + 0x2a, 0x6f, 0x42, 0x22, 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x45, // *oB")...y...0G/E + 0x87, 0x36, 0x01, 0x08, 0xfe, 0xe9, 0x04, 0x8d, 0xfd, 0x21, 0x01, 0xfb, 0xff, 0xff, 0x00, 0x6e, // .6.......!.....n + 0xff, 0xf0, 0x04, 0x36, 0x05, 0xfc, 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, // ...6...&.......s + 0x68, 0x33, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6e, 0xff, 0xf0, // h3.....33+...n.. + 0x04, 0x36, 0x06, 0x24, 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x6a, 0x37, // .6.$.&........j7 + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6e, 0xff, 0xf0, 0x04, 0x36, // .....73+...n...6 + 0x05, 0xf5, 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9f, 0xf3, 0x37, 0x00, 0x06, // ...&.........7.. + 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6e, 0xff, 0xf0, 0x04, 0x36, 0x06, 0x25, // ...73+...n...6.% + 0x02, 0x26, 0x01, 0x9f, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0xf4, 0x38, 0x00, 0x06, 0xb3, 0x01, // .&.........8.... + 0x01, 0x38, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb7, 0x00, 0x00, 0x04, 0x53, 0x06, 0x25, 0x02, 0x26, // .83+.......S.%.& + 0x01, 0xa0, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0xbb, 0x38, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x38, // .........8.....8 + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x05, 0xd6, 0x02, 0x26, 0x01, 0xa1, // 3+.......#...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0xe8, 0x26, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x26, 0x33, 0x2b, // .....n.&.....&3+ + 0xff, 0xff, 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x06, 0x26, 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, // .......#.&.&.... + 0x01, 0x06, 0x00, 0x9e, 0xe4, 0x74, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x74, 0x33, 0x2b, 0xff, 0xff, // .....t.....t3+.. + 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x05, 0xf5, 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, 0x01, 0x06, // .....#...&...... + 0x00, 0x9f, 0xe4, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, 0x00, 0x01, 0x00, 0xc8, // ...7.....73+.... + 0xfe, 0x4f, 0x04, 0x23, 0x04, 0x8d, 0x00, 0x21, 0x00, 0x3f, 0x40, 0x3c, 0x0e, 0x01, 0x03, 0x02, // .O.#...!.?@<.... + 0x0f, 0x01, 0x04, 0x03, 0x02, 0x4a, 0x00, 0x06, 0x00, 0x07, 0x08, 0x06, 0x07, 0x61, 0x00, 0x08, // .....J.......a.. + 0x00, 0x00, 0x01, 0x08, 0x00, 0x61, 0x00, 0x01, 0x01, 0x02, 0x59, 0x05, 0x01, 0x02, 0x02, 0x3d, // .....a....Y....= + 0x4b, 0x00, 0x03, 0x03, 0x04, 0x5b, 0x00, 0x04, 0x04, 0x49, 0x04, 0x4c, 0x11, 0x11, 0x11, 0x17, // K....[...I.L.... + 0x25, 0x25, 0x11, 0x11, 0x10, 0x09, 0x08, 0x1d, 0x2b, 0x01, 0x21, 0x11, 0x21, 0x15, 0x23, 0x06, // %%......+.!.!.#. + 0x06, 0x15, 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, // ....3.67...#"..5 + 0x34, 0x36, 0x37, 0x21, 0x11, 0x21, 0x15, 0x21, 0x11, 0x21, 0x03, 0xc5, 0xfd, 0xc0, 0x02, 0x9e, // 467!.!.!.!...... + 0x87, 0x4e, 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, 0x1e, // .N^$* 5...UA)F4. + 0x50, 0x48, 0xfd, 0xe1, 0x03, 0x55, 0xfd, 0x68, 0x02, 0x40, 0x02, 0x0e, 0xfe, 0x89, 0x97, 0x2a, // PH...U.h.@.....* + 0x6f, 0x42, 0x22, 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x3f, 0x7f, // oB")...y...0G/?. + 0x35, 0x04, 0x8d, 0x99, 0xfe, 0xb2, 0xff, 0xff, 0x00, 0xc8, 0x00, 0x00, 0x04, 0x23, 0x06, 0x25, // 5............#.% + 0x02, 0x26, 0x01, 0xa1, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0xe5, 0x38, 0x00, 0x06, 0xb3, 0x01, // .&.........8.... + 0x01, 0x38, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7c, 0xff, 0xf0, 0x04, 0x41, 0x06, 0x24, 0x02, 0x26, // .83+...|...A.$.& + 0x01, 0xa3, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, 0x74, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, // ........t7.....7 + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7c, 0xff, 0xf0, 0x04, 0x41, 0x06, 0x26, 0x02, 0x26, 0x01, 0xa3, // 3+...|...A.&.&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0xfd, 0x74, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x74, 0x33, 0x2b, // .......t.....t3+ + 0xff, 0xff, 0x00, 0x7c, 0xff, 0xf0, 0x04, 0x41, 0x05, 0xf5, 0x02, 0x26, 0x01, 0xa3, 0x00, 0x00, // ...|...A...&.... + 0x01, 0x06, 0x00, 0x9f, 0xfd, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, 0xff, 0xff, // .....7.....73+.. + 0x00, 0x7c, 0xfe, 0x2b, 0x04, 0x41, 0x04, 0x9d, 0x02, 0x26, 0x01, 0xa3, 0x00, 0x00, 0x01, 0x07, // .|.+.A...&...... + 0x01, 0x91, 0x00, 0x9d, 0xfe, 0xd5, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xd5, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9b, 0x00, 0x00, 0x03, 0xf9, 0x06, 0x24, 0x02, 0x26, 0x01, 0xa4, // +..........$.&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x9c, 0x00, 0x9e, 0x00, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, // .........7.....7 + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, 0x06, 0x12, 0x02, 0x26, 0x01, 0xa5, // 3+...........&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0xa0, 0x00, 0x21, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x21, // .........!.....! + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, 0x05, 0xba, 0x02, 0x26, 0x01, 0xa5, // 3+...........&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0x20, 0x0a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x0a, 0x33, 0x2b, // .....n .......3+ + 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, 0x06, 0x0a, 0x02, 0x26, 0x01, 0xa5, 0x00, 0x00, // ...........&.... + 0x01, 0x06, 0x00, 0x9e, 0x1c, 0x58, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x58, 0x33, 0x2b, 0x00, 0x01, // .....X.....X3+.. + 0x00, 0xd9, 0xfe, 0x4f, 0x04, 0x10, 0x04, 0x8c, 0x00, 0x21, 0x00, 0x39, 0x40, 0x36, 0x10, 0x01, // ...O.....!.9@6.. + 0x04, 0x03, 0x11, 0x01, 0x05, 0x04, 0x02, 0x4a, 0x00, 0x00, 0x08, 0x01, 0x01, 0x02, 0x00, 0x01, // .......J........ + 0x61, 0x07, 0x01, 0x02, 0x02, 0x03, 0x59, 0x06, 0x01, 0x03, 0x03, 0x3d, 0x4b, 0x00, 0x04, 0x04, // a.....Y....=K... + 0x05, 0x5b, 0x00, 0x05, 0x05, 0x49, 0x05, 0x4c, 0x11, 0x11, 0x17, 0x25, 0x25, 0x11, 0x11, 0x11, // .[...I.L...%%... + 0x10, 0x09, 0x08, 0x1d, 0x2b, 0x13, 0x21, 0x15, 0x21, 0x11, 0x21, 0x15, 0x21, 0x06, 0x06, 0x15, // ....+.!.!.!.!... + 0x14, 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x36, // ..3.67...#"..546 + 0x37, 0x21, 0x35, 0x21, 0x11, 0x21, 0xd9, 0x03, 0x37, 0xfe, 0xbd, 0x01, 0x43, 0xfe, 0xea, 0x4e, // 7!5!.!..7...C..N + 0x5e, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, 0x1c, 0x55, 0x41, 0x29, 0x46, 0x34, 0x1e, 0x50, 0x48, // ^$* 5...UA)F4.PH + 0xfe, 0x94, 0x01, 0x3b, 0xfe, 0xc5, 0x04, 0x8c, 0xa1, 0xfc, 0xb5, 0xa0, 0x2a, 0x6f, 0x42, 0x22, // ...;........*oB" + 0x29, 0x01, 0x13, 0x08, 0x79, 0x10, 0x1c, 0x18, 0x30, 0x47, 0x2f, 0x3f, 0x7f, 0x35, 0xa0, 0x03, // )...y...0G/?.5.. + 0x4b, 0x00, 0xff, 0xff, 0x00, 0xd9, 0x00, 0x00, 0x04, 0x10, 0x05, 0xd9, 0x02, 0x26, 0x01, 0xa5, // K............&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9f, 0x1c, 0x1b, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x1b, 0x33, 0x2b, // ..............3+ + 0xff, 0xff, 0x00, 0x96, 0xff, 0xf0, 0x04, 0x77, 0x06, 0x24, 0x02, 0x26, 0x01, 0xa6, 0x00, 0x00, // .......w.$.&.... + 0x01, 0x07, 0x00, 0x9c, 0x01, 0x59, 0x00, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, // .....Y.7.....73+ + 0xff, 0xff, 0x00, 0xb4, 0xfe, 0x34, 0x04, 0x80, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xa7, 0x00, 0x00, // .....4.....&.... + 0x01, 0x07, 0x01, 0x91, 0x00, 0x6b, 0xfe, 0xde, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xde, // .....k.......... + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x52, 0x05, 0xfc, 0x02, 0x26, // .3+........R...& + 0x01, 0xa8, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0xff, 0x1c, 0x00, 0x33, 0x00, 0x06, 0xb3, 0x01, // .......s...3.... + 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd1, 0xfe, 0x36, 0x04, 0x52, 0x04, 0x8d, 0x02, 0x26, // .33+.....6.R...& + 0x01, 0xa8, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, 0x00, 0x68, 0xfe, 0xe0, 0x00, 0x09, 0xb1, 0x01, // .........h...... + 0x01, 0xb8, 0xfe, 0xe0, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xd1, 0x00, 0x00, 0x04, 0x52, // .....3+........R + 0x04, 0x8d, 0x02, 0x26, 0x01, 0xa8, 0x00, 0x00, 0x01, 0x07, 0x01, 0x68, 0x00, 0x94, 0xfe, 0x77, // ...&.......h...w + 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0x77, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xd1, // .......w.3+..... + 0x00, 0x00, 0x04, 0x52, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xa8, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9f, // ...R...&........ + 0x00, 0x19, 0xfd, 0x37, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfd, 0x37, 0xb0, 0x33, 0x2b, 0x00, // ...7.......7.3+. + 0xff, 0xff, 0x00, 0xc2, 0x00, 0x00, 0x04, 0x0f, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xaa, 0x00, 0x00, // ...........&.... + 0x01, 0x07, 0x00, 0x73, 0x00, 0xce, 0x00, 0x33, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x33, 0x33, 0x2b, // ...s...3.....33+ + 0xff, 0xff, 0x00, 0xc2, 0xfe, 0x32, 0x04, 0x0f, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xaa, 0x00, 0x00, // .....2.....&.... + 0x01, 0x07, 0x01, 0x91, 0x00, 0xef, 0xfe, 0xdc, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xdc, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xc2, 0x00, 0x00, 0x04, 0x0f, 0x06, 0x25, 0x02, 0x26, // .3+..........%.& + 0x01, 0xaa, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0x59, 0x38, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x38, // ........Y8.....8 + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x05, 0xd6, 0x02, 0x26, 0x01, 0xab, // 3+.......J...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0x27, 0x26, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x26, 0x33, 0x2b, // .....n'&.....&3+ + 0xff, 0xff, 0x00, 0x82, 0xff, 0xf0, 0x04, 0x4a, 0x06, 0x26, 0x02, 0x26, 0x01, 0xab, 0x00, 0x00, // .......J.&.&.... + 0x01, 0x06, 0x00, 0x9e, 0x23, 0x74, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x74, 0x33, 0x2b, 0xff, 0xff, // ....#t.....t3+.. + 0x00, 0x82, 0xff, 0xf0, 0x04, 0x7f, 0x06, 0x26, 0x02, 0x26, 0x01, 0xab, 0x00, 0x00, 0x01, 0x07, // .......&.&...... + 0x00, 0xa3, 0x00, 0xa9, 0x00, 0x37, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x37, 0x33, 0x2b, 0xff, 0xff, // .....7.....73+.. + 0x00, 0x90, 0x00, 0x00, 0x04, 0x2c, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xad, 0x00, 0x00, 0x01, 0x06, // .....,...&...... + 0x00, 0x73, 0x1e, 0x33, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x90, // .s.3.....33+.... + 0xfe, 0x36, 0x04, 0x2c, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xad, 0x00, 0x00, 0x01, 0x07, 0x01, 0x91, // .6.,...&........ + 0x00, 0x45, 0xfe, 0xe0, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0xfe, 0xe0, 0xb0, 0x33, 0x2b, 0x00, // .E...........3+. + 0xff, 0xff, 0x00, 0x90, 0x00, 0x00, 0x04, 0x2c, 0x06, 0x25, 0x02, 0x26, 0x01, 0xad, 0x00, 0x00, // .......,.%.&.... + 0x01, 0x06, 0x00, 0x9d, 0xaa, 0x38, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x38, 0x33, 0x2b, 0xff, 0xff, // .....8.....83+.. + 0x00, 0x8a, 0xff, 0xf0, 0x04, 0x39, 0x05, 0xfc, 0x02, 0x26, 0x01, 0xae, 0x00, 0x00, 0x01, 0x06, // .....9...&...... + 0x00, 0x73, 0x71, 0x33, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x33, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8a, // .sq3.....33+.... + 0xff, 0xf0, 0x04, 0x39, 0x06, 0x24, 0x02, 0x26, 0x01, 0xae, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9c, // ...9.$.&........ + 0x73, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x37, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8a, 0xfe, 0x4d, // s7.....73+.....M + 0x04, 0x39, 0x04, 0x9d, 0x02, 0x26, 0x01, 0xae, 0x00, 0x00, 0x00, 0x06, 0x00, 0x77, 0x3d, 0x00, // .9...&.......w=. + 0xff, 0xff, 0x00, 0x8a, 0xff, 0xf0, 0x04, 0x39, 0x06, 0x25, 0x02, 0x26, 0x01, 0xae, 0x00, 0x00, // .......9.%.&.... + 0x01, 0x06, 0x00, 0x9d, 0xfd, 0x38, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x38, 0x33, 0x2b, 0xff, 0xff, // .....8.....83+.. + 0x00, 0x5d, 0xfe, 0x30, 0x04, 0x69, 0x04, 0x8d, 0x02, 0x26, 0x01, 0xaf, 0x00, 0x00, 0x01, 0x07, // .].0.i...&...... + 0x01, 0x91, 0x00, 0x94, 0xfe, 0xda, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0xda, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x5d, 0x00, 0x00, 0x04, 0x69, 0x06, 0x25, 0x02, 0x26, 0x01, 0xaf, // +....]...i.%.&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9d, 0xf9, 0x38, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x38, 0x33, 0x2b, // .......8.....83+ + 0xff, 0xff, 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x06, 0x2e, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, // .......+...&.... + 0x01, 0x07, 0x00, 0xa2, 0x00, 0xa3, 0x00, 0x3d, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x3d, 0x33, 0x2b, // .......=.....=3+ + 0xff, 0xff, 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x05, 0xd6, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, // .......+...&.... + 0x01, 0x06, 0x00, 0x6e, 0x23, 0x26, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x26, 0x33, 0x2b, 0xff, 0xff, // ...n#&.....&3+.. + 0x00, 0xb5, 0xff, 0xf0, 0x04, 0x2b, 0x06, 0x26, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, 0x01, 0x06, // .....+.&.&...... + 0x00, 0x9e, 0x1f, 0x74, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x74, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb5, // ...t.....t3+.... + 0xff, 0xf0, 0x04, 0x2b, 0x06, 0x67, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa0, // ...+.g.&........ + 0x00, 0x1e, 0x00, 0x80, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x80, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb5, // ..........3+.... + 0xff, 0xf0, 0x04, 0x7b, 0x06, 0x26, 0x02, 0x26, 0x01, 0xb0, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa3, // ...{.&.&........ + 0x00, 0xa5, 0x00, 0x37, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x37, 0x33, 0x2b, 0x00, 0x01, 0x00, 0xb5, // ...7.....73+.... + 0xfe, 0x8c, 0x04, 0x2b, 0x04, 0x8d, 0x00, 0x2f, 0x00, 0x5d, 0x40, 0x0a, 0x0f, 0x01, 0x00, 0x02, // ...+.../.]@..... + 0x10, 0x01, 0x01, 0x00, 0x02, 0x4a, 0x4b, 0xb0, 0x17, 0x50, 0x58, 0x40, 0x1c, 0x06, 0x05, 0x02, // .....JK..PX@.... + 0x03, 0x04, 0x03, 0x72, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, 0x4b, 0x00, 0x00, // ...r....[...EK.. + 0x00, 0x01, 0x5b, 0x00, 0x01, 0x01, 0x41, 0x01, 0x4c, 0x1b, 0x40, 0x19, 0x06, 0x05, 0x02, 0x03, // ..[...A.L.@..... + 0x04, 0x03, 0x72, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x5f, 0x00, 0x04, 0x04, 0x02, 0x5b, 0x00, // ..r......_....[. + 0x02, 0x02, 0x45, 0x02, 0x4c, 0x59, 0x40, 0x0e, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x2f, 0x25, 0x15, // ..E.LY@...././%. + 0x27, 0x25, 0x2b, 0x07, 0x08, 0x19, 0x2b, 0x01, 0x13, 0x0e, 0x03, 0x07, 0x06, 0x06, 0x15, 0x14, // '%+...+......... + 0x16, 0x33, 0x16, 0x36, 0x37, 0x17, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x34, 0x36, 0x37, // .3.67...#"..5467 + 0x23, 0x22, 0x2e, 0x02, 0x27, 0x13, 0x33, 0x13, 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x13, // #"..'.3...32>.7. + 0x04, 0x2a, 0x01, 0x01, 0x22, 0x3c, 0x54, 0x32, 0x38, 0x3f, 0x24, 0x2a, 0x20, 0x35, 0x10, 0x1f, // .*..".....0.....j + 0xff, 0xec, 0x04, 0x61, 0x05, 0xc4, 0x02, 0x06, 0x00, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xbf, // ...a.....1...... + 0x00, 0x00, 0x04, 0x79, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x32, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4c, // ...y.....2.....L + 0x00, 0x00, 0x04, 0x84, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x36, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3d, // .........6.....= + 0x00, 0x00, 0x04, 0x79, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x57, // ...y.....;.....W + 0x00, 0x00, 0x04, 0x8f, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3a, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae, // .........:...... + 0x00, 0x00, 0x04, 0x1e, 0x07, 0x20, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, // ..... .&.+.....h + 0xff, 0xd2, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, // ...[.......[.3+. + 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x07, 0x1f, 0x02, 0x26, 0x00, 0x3b, 0x00, 0x00, // ...=...y...&.;.. + 0x01, 0x07, 0x00, 0x68, 0xff, 0xfc, 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5a, // ...h...Z.......Z + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x81, 0xff, 0xeb, 0x04, 0x8a, 0x06, 0x7e, 0x02, 0x26, // .3+..........~.& + 0x00, 0xb8, 0x00, 0x00, 0x01, 0x06, 0x00, 0xab, 0x0f, 0x04, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x04, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x60, 0x06, 0x7d, 0x02, 0x26, 0x00, 0xbc, // 3+.......`.}.&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0xab, 0x14, 0x03, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x03, 0x33, 0x2b, // ..............3+ + 0xff, 0xff, 0x00, 0xa4, 0xfe, 0x61, 0x04, 0x2b, 0x06, 0x7e, 0x02, 0x26, 0x00, 0xbe, 0x00, 0x00, // .....a.+.~.&.... + 0x01, 0x06, 0x00, 0xab, 0x1c, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x04, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0xb8, 0xff, 0xec, 0x04, 0x3a, 0x06, 0x6a, 0x02, 0x26, 0x00, 0xc0, 0x00, 0x00, 0x01, 0x06, // .....:.j.&...... + 0x00, 0xab, 0x0e, 0xf0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf0, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0xff, 0xff, 0x00, 0x9e, 0xff, 0xec, 0x04, 0x3f, 0x06, 0x7a, 0x02, 0x26, 0x00, 0xc8, 0x00, 0x00, // .......?.z.&.... + 0x01, 0x06, 0x00, 0xac, 0xc0, 0xbb, 0x00, 0x09, 0xb1, 0x01, 0x03, 0xb8, 0xff, 0xbb, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xba, 0x00, 0x00, 0x04, 0x72, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x8d, // +........r.:.... + 0x00, 0x00, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x04, 0x4e, 0x02, 0x06, 0x00, 0x51, // .....z...R.N...Q + 0x00, 0x00, 0xff, 0xff, 0x00, 0xbc, 0xfe, 0x60, 0x04, 0x10, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x74, // .......`...:...t + 0x00, 0x00, 0xff, 0xff, 0x00, 0x62, 0x00, 0x00, 0x04, 0x65, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x58, // .....b...e.:...X + 0x00, 0x00, 0xff, 0xff, 0x00, 0x6e, 0x00, 0x00, 0x04, 0x72, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x5a, // .....n...r.:...Z + 0x00, 0x00, 0xff, 0xff, 0x00, 0xb8, 0xff, 0xec, 0x04, 0x3a, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xc0, // .........:...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x05, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, // .....h........3+ + 0xff, 0xff, 0x00, 0x9e, 0xff, 0xec, 0x04, 0x3f, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xc8, 0x00, 0x00, // .......?...&.... + 0x01, 0x06, 0x00, 0x68, 0xe2, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, 0xff, 0xff, // ...h........3+.. + 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x06, 0x7e, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, // .z...R.~.&.Q.... + 0x00, 0xab, 0x09, 0x04, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x04, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x9e, // ..........3+.... + 0xff, 0xec, 0x04, 0x3f, 0x06, 0x6a, 0x02, 0x26, 0x00, 0xc8, 0x00, 0x00, 0x01, 0x06, 0x00, 0xab, // ...?.j.&........ + 0xeb, 0xf0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf0, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x4f, 0xff, 0xec, 0x04, 0x89, 0x06, 0x6a, 0x02, 0x26, 0x00, 0xcb, 0x00, 0x00, 0x01, 0x06, // .O.....j.&...... + 0x00, 0xab, 0x15, 0xf0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf0, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x20, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, // .......4. .&.'.. + 0x01, 0x07, 0x00, 0x68, 0x00, 0x05, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, // ...h...[.......[ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb5, 0x00, 0x00, 0x04, 0x30, 0x07, 0x20, 0x02, 0x26, // .3+........0. .& + 0x00, 0xae, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x80, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, // .......s...W.... + 0x01, 0xb8, 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0x00, 0x01, 0x00, 0x76, 0xff, 0xec, 0x04, 0x69, // ...W.3+....v...i + 0x05, 0xc4, 0x00, 0x3f, 0x00, 0x33, 0x40, 0x30, 0x00, 0x01, 0x02, 0x04, 0x02, 0x01, 0x04, 0x70, // ...?.3@0.......p + 0x00, 0x04, 0x05, 0x02, 0x04, 0x05, 0x6e, 0x00, 0x02, 0x02, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x1d, // ......n....[.... + 0x4b, 0x00, 0x05, 0x05, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1e, 0x03, 0x4c, 0x3c, 0x3a, 0x36, 0x35, // K....[.....L<:65 + 0x31, 0x2f, 0x24, 0x14, 0x2e, 0x06, 0x06, 0x17, 0x2b, 0x01, 0x34, 0x2e, 0x02, 0x27, 0x2e, 0x03, // 1/$.....+.4..'.. + 0x35, 0x34, 0x3e, 0x02, 0x33, 0x32, 0x1e, 0x02, 0x17, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, // 54>.32...#..#".. + 0x15, 0x1e, 0x03, 0x17, 0x1e, 0x05, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x22, 0x2e, 0x02, 0x27, 0x33, // ..........#"..'3 + 0x1e, 0x03, 0x33, 0x32, 0x3e, 0x02, 0x03, 0xa8, 0x3d, 0x60, 0x73, 0x35, 0x4d, 0x9f, 0x83, 0x53, // ..32>...=`s5M..S + 0x53, 0x86, 0xaa, 0x56, 0x5f, 0xb0, 0x88, 0x52, 0x02, 0xbe, 0x08, 0x2e, 0x4c, 0x69, 0x42, 0x35, // S..V_..R....LiB5 + 0x65, 0x4f, 0x2f, 0x01, 0x3e, 0x5f, 0x6f, 0x31, 0x36, 0x6e, 0x66, 0x58, 0x42, 0x25, 0x57, 0x8a, // eO/.>_o16nfXB%W. + 0xae, 0x57, 0x61, 0xba, 0x93, 0x5c, 0x03, 0xbd, 0x09, 0x38, 0x58, 0x73, 0x44, 0x36, 0x69, 0x52, // .Wa......8XsD6iR + 0x34, 0x01, 0x70, 0x43, 0x5c, 0x3f, 0x2a, 0x11, 0x19, 0x46, 0x66, 0x8b, 0x5e, 0x5e, 0x94, 0x66, // 4.pC.?*..Ff.^^.f + 0x35, 0x3f, 0x72, 0xa2, 0x64, 0x3f, 0x67, 0x4a, 0x29, 0x1e, 0x3c, 0x58, 0x3a, 0x3f, 0x57, 0x3c, // 5?r.d?gJ)..& + 0x00, 0xd9, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0xff, 0xf9, 0x01, 0x8c, 0x00, 0x09, 0xb1, 0x01, // ................ + 0x01, 0xb8, 0x01, 0x8c, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x94, 0x00, 0x00, 0x04, 0x4c, // .....3+........L + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8d, 0x00, 0x00, 0x04, 0x3f, // ...../.........? + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x2a, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, // .....*.....j...a + 0x05, 0xc4, 0x02, 0x06, 0x00, 0x31, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa2, 0x00, 0x00, 0x04, 0x2a, // .....1.........* + 0x05, 0xb0, 0x02, 0x06, 0x00, 0xb3, 0x00, 0x00, 0xff, 0xff, 0x00, 0xbf, 0x00, 0x00, 0x04, 0x79, // ...............y + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x32, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6b, 0xff, 0xec, 0x04, 0x5d, // .....2.....k...] + 0x05, 0xc4, 0x02, 0x06, 0x00, 0x25, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4c, 0x00, 0x00, 0x04, 0x84, // .....%.....L.... + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x36, 0x00, 0x00, 0xff, 0xff, 0x00, 0x45, 0x00, 0x00, 0x04, 0x87, // .....6.....E.... + 0x05, 0xb0, 0x02, 0x06, 0x00, 0xb5, 0x00, 0x00, 0xff, 0xff, 0x00, 0x57, 0x00, 0x00, 0x04, 0x8f, // ...........W.... + 0x05, 0xb0, 0x02, 0x06, 0x00, 0x3a, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, // .....:.........6 + 0x04, 0x4e, 0x02, 0x06, 0x00, 0x43, 0x00, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, // .N...C.........E + 0x04, 0x4e, 0x02, 0x06, 0x00, 0x47, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa5, 0x00, 0x00, 0x04, 0x27, // .N...G.........' + 0x05, 0xf3, 0x02, 0x26, 0x00, 0xec, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0xf4, 0x41, 0x00, 0x06, // ...&.........A.. + 0xb3, 0x01, 0x01, 0x41, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x04, 0x4e, // ...A3+...z...R.N + 0x02, 0x06, 0x00, 0x51, 0x00, 0x00, 0xff, 0xff, 0x00, 0xad, 0xfe, 0x60, 0x04, 0x3f, 0x04, 0x4e, // ...Q.......`.?.N + 0x02, 0x06, 0x00, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x8f, 0xff, 0xec, 0x04, 0x33, 0x04, 0x4e, // ...R.........3.N + 0x00, 0x2b, 0x00, 0x3b, 0x40, 0x38, 0x00, 0x04, 0x05, 0x01, 0x05, 0x04, 0x01, 0x70, 0x00, 0x01, // .+.;@8.......p.. + 0x00, 0x05, 0x01, 0x00, 0x6e, 0x00, 0x05, 0x05, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x1f, 0x4b, 0x06, // ....n....[....K. + 0x01, 0x00, 0x00, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x1e, 0x02, 0x4c, 0x01, 0x00, 0x22, 0x20, 0x1c, // ....[.....L.." . + 0x1b, 0x17, 0x15, 0x0c, 0x0a, 0x06, 0x05, 0x00, 0x2b, 0x01, 0x2b, 0x07, 0x06, 0x14, 0x2b, 0x25, // ........+.+...+% + 0x32, 0x3e, 0x02, 0x37, 0x33, 0x0e, 0x03, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, 0x34, 0x3e, 0x02, // 2>.73..#"..554>. + 0x33, 0x32, 0x1e, 0x02, 0x15, 0x23, 0x2e, 0x03, 0x23, 0x22, 0x0e, 0x02, 0x15, 0x15, 0x14, 0x1e, // 32...#..#"...... + 0x02, 0x02, 0x7b, 0x32, 0x5f, 0x4a, 0x2d, 0x01, 0xaf, 0x01, 0x49, 0x7a, 0x9e, 0x56, 0x7b, 0xb8, // ..{2_J-...Iz.V{. + 0x7b, 0x3e, 0x3e, 0x7b, 0xb8, 0x7b, 0x60, 0xa1, 0x75, 0x42, 0xaf, 0x01, 0x29, 0x46, 0x61, 0x38, // {>>{.{`.uB..)Fa8 + 0x56, 0x75, 0x48, 0x1f, 0x1f, 0x47, 0x75, 0x82, 0x20, 0x39, 0x4d, 0x2d, 0x48, 0x83, 0x63, 0x3b, // VuH..Gu. 9M-H.c; + 0x58, 0x95, 0xc3, 0x6c, 0x2a, 0x6b, 0xc4, 0x95, 0x58, 0x3d, 0x69, 0x90, 0x52, 0x31, 0x57, 0x42, // X..l*k..X=i.R1WB + 0x26, 0x45, 0x6f, 0x8a, 0x46, 0x2a, 0x47, 0x8b, 0x6f, 0x45, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, // &Eo.F*G.oE...D.K + 0x04, 0x85, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x5b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6e, 0x00, 0x00, // ...:...[.....n.. + 0x04, 0x72, 0x04, 0x3a, 0x02, 0x06, 0x00, 0x5a, 0x00, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, // .r.:...Z........ + 0x04, 0x45, 0x05, 0xdf, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x06, 0x1a, // .E...&.G.....h.. + 0x00, 0x06, 0xb3, 0x02, 0x02, 0x1a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb7, 0x00, 0x00, 0x04, 0x2a, // ......3+.......* + 0x05, 0xc9, 0x02, 0x26, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x06, 0x00, 0x73, 0x73, 0x00, 0xff, 0xff, // ...&.......ss... + 0x00, 0xaf, 0xff, 0xec, 0x04, 0x36, 0x04, 0x4e, 0x02, 0x06, 0x00, 0x55, 0x00, 0x00, 0xff, 0xff, // .....6.N...U.... + 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x05, 0xc3, 0x02, 0x06, 0x00, 0x4b, 0x00, 0x00, 0xff, 0xff, // .....U.....K.... + 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x05, 0xc9, 0x02, 0x26, 0x00, 0x8a, 0x00, 0x00, 0x01, 0x06, // .....U...&...... + 0x00, 0x68, 0x34, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xd3, // .h4.......3+.... + 0xfe, 0x4b, 0x03, 0x58, 0x05, 0xc3, 0x02, 0x06, 0x00, 0x4c, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa4, // .K.X.....L...... + 0x00, 0x00, 0x04, 0x95, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xed, 0x00, 0x00, 0x00, 0x06, 0x00, 0x73, // .......&.......s + 0x27, 0x00, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, 0x04, 0x85, 0x05, 0xf4, 0x02, 0x26, 0x00, 0x5b, // '....D.K.....&.[ + 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0x13, 0x42, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x42, 0x33, 0x2b, // .......B.....B3+ + 0xff, 0xff, 0x00, 0x49, 0x00, 0x00, 0x04, 0x9e, 0x07, 0x23, 0x02, 0x26, 0x00, 0x39, 0x00, 0x00, // ...I.....#.&.9.. + 0x01, 0x07, 0x00, 0x42, 0xff, 0x91, 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5a, // ...B...Z.......Z + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x04, 0xa7, 0x05, 0xcd, 0x02, 0x26, // .3+....0.......& + 0x00, 0x59, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x90, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x04, // .Y.....B........ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x49, 0x00, 0x00, 0x04, 0x9e, 0x07, 0x20, 0x02, 0x26, 0x00, 0x39, // 3+...I..... .&.9 + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x7d, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....s.}.W...... + 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x04, 0xa7, 0x05, 0xca, // .W.3+....0...... + 0x02, 0x26, 0x00, 0x59, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x7c, 0x01, 0x00, 0x06, 0xb3, 0x01, // .&.Y.....s|..... + 0x01, 0x01, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x49, 0x00, 0x00, 0x04, 0x9e, 0x07, 0x20, 0x02, 0x26, // ..3+...I..... .& + 0x00, 0x39, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0x00, 0x07, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, // .9.....h...[.... + 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x30, 0x00, 0x00, 0x04, 0xa7, // ...[.3+....0.... + 0x05, 0xca, 0x02, 0x26, 0x00, 0x59, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x06, 0x05, 0x00, 0x06, // ...&.Y.....h.... + 0xb3, 0x01, 0x02, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x07, 0x22, // ....3+...=...y." + 0x02, 0x26, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x85, 0x01, 0x59, 0x00, 0x09, // .&.;.....B...Y.. + 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x59, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, // .....Y.3+....D.K + 0x04, 0x85, 0x05, 0xcd, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x9d, 0x04, // .....&.[.....B.. + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x04, 0x33, 0x2b, 0xff, 0xff, 0x01, 0xee, 0x04, 0x21, 0x02, 0x8d, // ......3+.....!.. + 0x06, 0x00, 0x02, 0x06, 0x00, 0x09, 0x00, 0x00, 0xff, 0xff, 0x01, 0x62, 0x04, 0x21, 0x03, 0x5f, // ...........b.!._ + 0x06, 0x00, 0x02, 0x06, 0x00, 0x04, 0x00, 0x00, 0xff, 0xff, 0x01, 0xe6, 0xff, 0xf5, 0x07, 0x99, // ................ + 0x05, 0xb0, 0x00, 0x26, 0x04, 0x10, 0x00, 0x00, 0x00, 0x07, 0x04, 0x10, 0x04, 0xcd, 0x00, 0x00, // ...&............ + 0xff, 0xff, 0x00, 0xb0, 0xfe, 0x4b, 0x03, 0xfb, 0x05, 0xe9, 0x02, 0x26, 0x00, 0x9a, 0x00, 0x00, // .....K.....&.... + 0x01, 0x06, 0x00, 0x9d, 0x60, 0xfc, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xfc, 0xb0, 0x33, // ....`..........3 + 0x2b, 0x00, 0xff, 0xff, 0x01, 0xcd, 0x04, 0x07, 0x02, 0xe0, 0x06, 0x16, 0x02, 0x06, 0x01, 0x68, // +..............h + 0x00, 0x00, 0xff, 0xff, 0x00, 0x94, 0x00, 0x00, 0x04, 0x4c, 0x07, 0x20, 0x02, 0x26, 0x00, 0x2f, // .........L. .&./ + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x75, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....s.u.W...... + 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x5d, 0x00, 0x00, 0x04, 0x72, 0x05, 0xde, // .W.3+....]...r.. + 0x02, 0x26, 0x00, 0x4f, 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x9c, 0x00, 0x15, 0x00, 0x06, // .&.O.....s...... + 0xb3, 0x01, 0x01, 0x15, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, 0xfe, 0x86, 0x04, 0x90, 0x05, 0xb0, // ....3+...Q...... + 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x00, 0x06, 0x00, 0xa4, 0x25, 0x00, 0xff, 0xff, 0x00, 0x9c, // .&.#......%..... + 0xfe, 0x86, 0x04, 0x36, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x00, 0x06, 0x00, 0xa4, // ...6.N.&.C...... + 0xea, 0x00, 0xff, 0xff, 0xff, 0x89, 0xff, 0xec, 0x04, 0x61, 0x06, 0x56, 0x02, 0x26, 0x00, 0x31, // .........a.V.&.1 + 0x00, 0x00, 0x01, 0x07, 0x01, 0xcc, 0xfd, 0x94, 0x00, 0x92, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x92, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x23, 0x02, 0x26, 0x00, 0x27, // 3+.......4.#.&.' + 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x8f, 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....B...Z...... + 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa2, 0x00, 0x00, 0x04, 0x2a, 0x07, 0x17, // .Z.3+........*.. + 0x02, 0x26, 0x00, 0xd9, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x82, 0x01, 0x4e, 0x00, 0x09, // .&.......B...N.. + 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x4e, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, // .....N.3+....... + 0x04, 0x45, 0x05, 0xe2, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x90, 0x19, // .E...&.G.....B.. + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xa5, 0x00, 0x00, 0x04, 0x27, // ......3+.......' + 0x05, 0xcc, 0x02, 0x26, 0x00, 0xec, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x7d, 0x00, 0x03, // ...&.......B.}.. + 0x00, 0x06, 0xb3, 0x01, 0x01, 0x03, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x65, 0x00, 0x00, 0x04, 0x72, // ......3+...e...r + 0x05, 0xb0, 0x02, 0x06, 0x00, 0xb6, 0x00, 0x00, 0xff, 0xff, 0x00, 0x61, 0xfe, 0x28, 0x04, 0x80, // ...........a.(.. + 0x04, 0x3a, 0x02, 0x06, 0x00, 0xca, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1a, 0x00, 0x00, 0x04, 0xe1, // .:.............. + 0x07, 0x42, 0x02, 0x26, 0x01, 0x15, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa9, 0x04, 0x59, 0x01, 0x54, // .B.&.........Y.T + 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x54, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x35, // .......T.3+....5 + 0x00, 0x00, 0x04, 0x60, 0x06, 0x1a, 0x02, 0x26, 0x01, 0x16, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa9, // ...`...&........ + 0x04, 0x30, 0x00, 0x2c, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x2c, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x59, // .0.,.....,3+...Y + 0xfe, 0x2f, 0x04, 0x70, 0x05, 0xc4, 0x02, 0x26, 0x00, 0xd8, 0x00, 0x00, 0x01, 0x06, 0x01, 0xce, // ./.p...&........ + 0xf1, 0x96, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0x96, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x87, 0xfe, 0x39, 0x04, 0x4a, 0x04, 0x4d, 0x02, 0x26, 0x00, 0xeb, 0x00, 0x00, 0x01, 0x06, // ...9.J.M.&...... + 0x01, 0xce, 0x08, 0xa0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xa0, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0xff, 0xff, 0x00, 0x6b, 0xfe, 0x39, 0x04, 0x5d, 0x05, 0xc4, 0x02, 0x26, 0x00, 0x25, 0x00, 0x00, // ...k.9.]...&.%.. + 0x01, 0x06, 0x01, 0xce, 0xff, 0xa0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xa0, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8f, 0xfe, 0x39, 0x04, 0x33, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x45, // +......9.3.N.&.E + 0x00, 0x00, 0x01, 0x06, 0x01, 0xce, 0x13, 0xa0, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xa0, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x05, 0xb0, 0x02, 0x06, // .3+....=...y.... + 0x00, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x47, 0xfe, 0x60, 0x04, 0x96, 0x04, 0x3a, 0x02, 0x06, // .;.....G.`...:.. + 0x00, 0xba, 0x00, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x05, 0xb0, 0x02, 0x06, // ................ + 0x00, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1d, 0x00, 0x00, 0x04, 0xae, 0x07, 0x4a, 0x02, 0x26, // .+...........J.& + 0x00, 0xd7, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x0d, 0x01, 0x98, 0x00, 0x09, 0xb1, 0x01, // ................ + 0x01, 0xb8, 0x01, 0x98, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x11, 0x00, 0x00, 0x04, 0xac, // .....3+......... + 0x05, 0xf3, 0x02, 0x26, 0x00, 0xea, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0xf4, 0x41, 0x00, 0x06, // ...&.........A.. + 0xb3, 0x01, 0x01, 0x41, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x1e, 0x05, 0xb0, // ...A3+.......... + 0x02, 0x06, 0x00, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x07, 0x4a, // ...+.....Q.....J + 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x0f, 0x01, 0x98, 0x00, 0x09, // .&.#............ + 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x98, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, // .......3+....... + 0x04, 0x36, 0x06, 0x08, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x00, 0x9e, 0x0b, 0x56, // .6...&.C.......V + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x56, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, // .....V3+...Q.... + 0x07, 0x20, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0x00, 0x0f, 0x01, 0x5b, // . .&.#.....h...[ + 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, // .......[.3+..... + 0xff, 0xec, 0x04, 0x36, 0x05, 0xde, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, // ...6...&.C.....h + 0x0b, 0x19, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, // ........3+... .. + 0x04, 0xab, 0x05, 0xb0, 0x02, 0x06, 0x00, 0x7f, 0x00, 0x00, 0xff, 0xff, 0x00, 0x2b, 0xff, 0xec, // .............+.. + 0x04, 0xa9, 0x04, 0x4e, 0x02, 0x06, 0x00, 0x84, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, // ...N............ + 0x04, 0x34, 0x07, 0x4a, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x05, // .4.J.&.'........ + 0x01, 0x98, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x98, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x06, 0x09, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, // .....E...&.G.... + 0x00, 0x9e, 0x06, 0x57, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x57, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x5a, // ...W.....W3+...Z + 0xff, 0xeb, 0x04, 0x57, 0x06, 0xf2, 0x02, 0x26, 0x01, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, // ...W...&.C.....h + 0xff, 0xfb, 0x01, 0x2d, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x2d, 0xb0, 0x33, 0x2b, 0x00, // ...-.......-.3+. + 0xff, 0xff, 0x00, 0xb1, 0xff, 0xec, 0x04, 0x5f, 0x04, 0x4f, 0x02, 0x06, 0x00, 0x9b, 0x00, 0x00, // ......._.O...... + 0xff, 0xff, 0x00, 0xb1, 0xff, 0xec, 0x04, 0x5f, 0x05, 0xdf, 0x02, 0x26, 0x00, 0x9b, 0x00, 0x00, // ......._...&.... + 0x01, 0x06, 0x00, 0x68, 0x28, 0x1a, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x1a, 0x33, 0x2b, 0xff, 0xff, // ...h(.......3+.. + 0x00, 0x1d, 0x00, 0x00, 0x04, 0xae, 0x07, 0x20, 0x02, 0x26, 0x00, 0xd7, 0x00, 0x00, 0x01, 0x07, // ....... .&...... + 0x00, 0x68, 0x00, 0x0d, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, // .h...[.......[.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x11, 0x00, 0x00, 0x04, 0xac, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xea, // +............&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0xf4, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, // .....h........3+ + 0xff, 0xff, 0x00, 0x59, 0xff, 0xeb, 0x04, 0x70, 0x07, 0x35, 0x02, 0x26, 0x00, 0xd8, 0x00, 0x00, // ...Y...p.5.&.... + 0x01, 0x07, 0x00, 0x68, 0xff, 0xfc, 0x01, 0x70, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x70, // ...h...p.......p + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xed, 0x04, 0x4a, 0x05, 0xdd, 0x02, 0x26, // .3+........J...& + 0x00, 0xeb, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x0a, 0x18, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x18, // .......h........ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xa2, 0x00, 0x00, 0x04, 0x2a, 0x06, 0xee, 0x02, 0x26, 0x00, 0xd9, // 3+.......*...&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x6e, 0xff, 0xfd, 0x01, 0x3e, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....n...>...... + 0x01, 0x3e, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa5, 0x00, 0x00, 0x04, 0x27, 0x05, 0xa4, // .>.3+........'.. + 0x02, 0x26, 0x00, 0xec, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0xf8, 0xf4, 0x00, 0x09, 0xb1, 0x01, // .&.......n...... + 0x01, 0xb8, 0xff, 0xf4, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa2, 0x00, 0x00, 0x04, 0x2a, // .....3+........* + 0x07, 0x14, 0x02, 0x26, 0x00, 0xd9, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0xff, 0xf9, 0x01, 0x4f, // ...&.......h...O + 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x4f, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa5, // .......O.3+..... + 0x00, 0x00, 0x04, 0x27, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xec, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, // ...'...&.......h + 0xf4, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, // ........3+...j.. + 0x04, 0x61, 0x07, 0x35, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0x00, 0x13, // .a.5.&.1.....h.. + 0x01, 0x70, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x70, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .p.......p.3+... + 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x05, 0xde, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, // .z...R...&.Q.... + 0x00, 0x68, 0x00, 0x19, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x63, // .h........3+...c + 0xff, 0xec, 0x04, 0x5a, 0x05, 0xc4, 0x02, 0x06, 0x01, 0x13, 0x00, 0x00, 0xff, 0xff, 0x00, 0x5d, // ...Z...........] + 0xff, 0xec, 0x04, 0x35, 0x04, 0x4e, 0x02, 0x06, 0x01, 0x14, 0x00, 0x00, 0xff, 0xff, 0x00, 0x63, // ...5.N.........c + 0xff, 0xec, 0x04, 0x5a, 0x07, 0x1b, 0x02, 0x26, 0x01, 0x13, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, // ...Z...&.......h + 0x00, 0x14, 0x01, 0x56, 0x00, 0x09, 0xb1, 0x03, 0x02, 0xb8, 0x01, 0x56, 0xb0, 0x33, 0x2b, 0x00, // ...V.......V.3+. + 0xff, 0xff, 0x00, 0x5d, 0xff, 0xec, 0x04, 0x35, 0x05, 0xfa, 0x02, 0x26, 0x01, 0x14, 0x00, 0x00, // ...]...5...&.... + 0x01, 0x06, 0x00, 0x68, 0xd0, 0x35, 0x00, 0x06, 0xb3, 0x03, 0x02, 0x35, 0x33, 0x2b, 0xff, 0xff, // ...h.5.....53+.. + 0x00, 0x72, 0xff, 0xec, 0x04, 0x53, 0x07, 0x36, 0x02, 0x26, 0x00, 0xe3, 0x00, 0x00, 0x01, 0x07, // .r...S.6.&...... + 0x00, 0x68, 0xff, 0xf1, 0x01, 0x71, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x71, 0xb0, 0x33, // .h...q.......q.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x81, 0xff, 0xec, 0x04, 0x3a, 0x05, 0xde, 0x02, 0x26, 0x00, 0xfb, // +........:...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0xed, 0x19, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x19, 0x33, 0x2b, // .....h........3+ + 0xff, 0xff, 0x00, 0x2b, 0xff, 0xeb, 0x04, 0xb5, 0x06, 0xfa, 0x02, 0x26, 0x00, 0xdb, 0x00, 0x00, // ...+.......&.... + 0x01, 0x07, 0x00, 0x6e, 0x00, 0x25, 0x01, 0x4a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x4a, // ...n.%.J.......J + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, 0x04, 0x85, 0x05, 0xa5, 0x02, 0x26, // .3+....D.K.....& + 0x00, 0x5b, 0x00, 0x00, 0x01, 0x06, 0x00, 0x6e, 0x17, 0xf5, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .[.....n........ + 0xff, 0xf5, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x2b, 0xff, 0xeb, 0x04, 0xb5, 0x07, 0x20, // ...3+....+..... + 0x02, 0x26, 0x00, 0xdb, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, 0x00, 0x21, 0x01, 0x5b, 0x00, 0x09, // .&.......h.!.[.. + 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, // .....[.3+....D.K + 0x04, 0x85, 0x05, 0xca, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x13, 0x05, // .....&.[.....h.. + 0x00, 0x06, 0xb3, 0x01, 0x02, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x2b, 0xff, 0xeb, 0x04, 0xb5, // ......3+...+.... + 0x07, 0x4a, 0x02, 0x26, 0x00, 0xdb, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa3, 0x00, 0xa7, 0x01, 0x5b, // .J.&...........[ + 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x44, // .......[.3+....D + 0xfe, 0x4b, 0x04, 0x85, 0x05, 0xf4, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa3, // .K.....&.[...... + 0x00, 0x99, 0x00, 0x05, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x05, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xab, // ..........3+.... + 0x00, 0x00, 0x04, 0x27, 0x07, 0x20, 0x02, 0x26, 0x00, 0xdd, 0x00, 0x00, 0x01, 0x07, 0x00, 0x68, // ...'. .&.......h + 0xff, 0xb3, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, // ...[.......[.3+. + 0xff, 0xff, 0x00, 0x8d, 0x00, 0x00, 0x04, 0x27, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xf5, 0x00, 0x00, // .......'...&.... + 0x01, 0x06, 0x00, 0x68, 0x1b, 0x04, 0x00, 0x06, 0xb3, 0x01, 0x02, 0x04, 0x33, 0x2b, 0xff, 0xff, // ...h........3+.. + 0x00, 0x90, 0x00, 0x00, 0x04, 0x4b, 0x07, 0x20, 0x02, 0x26, 0x00, 0xe1, 0x00, 0x00, 0x01, 0x07, // .....K. .&...... + 0x00, 0x68, 0xff, 0xe1, 0x01, 0x5b, 0x00, 0x09, 0xb1, 0x03, 0x02, 0xb8, 0x01, 0x5b, 0xb0, 0x33, // .h...[.......[.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x90, 0x00, 0x00, 0x04, 0x3f, 0x05, 0xc9, 0x02, 0x26, 0x00, 0xf9, // +........?...&.. + 0x00, 0x00, 0x01, 0x06, 0x00, 0x68, 0x43, 0x04, 0x00, 0x06, 0xb3, 0x03, 0x02, 0x04, 0x33, 0x2b, // .....hC.......3+ + 0xff, 0xff, 0x00, 0x57, 0xfe, 0x4b, 0x05, 0x16, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x3a, 0x00, 0x00, // ...W.K.....&.:.. + 0x00, 0x07, 0x01, 0xd0, 0x02, 0x04, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6e, 0xfe, 0x4b, 0x04, 0xa5, // ...........n.K.. + 0x04, 0x3a, 0x02, 0x26, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x07, 0x01, 0xd0, 0x01, 0x93, 0x00, 0x00, // .:.&.Z.......... + 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x04, 0x1c, 0x06, 0x00, 0x02, 0x06, 0x00, 0x46, 0x00, 0x00, // .............F.. + 0xff, 0xff, 0x00, 0x2f, 0xfe, 0x4b, 0x04, 0xe3, 0x05, 0xb0, 0x02, 0x26, 0x00, 0xda, 0x00, 0x00, // .../.K.....&.... + 0x00, 0x07, 0x01, 0xd0, 0x01, 0xd1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x37, 0xfe, 0x4b, 0x04, 0xde, // ...........7.K.. + 0x04, 0x3a, 0x02, 0x26, 0x00, 0xee, 0x00, 0x00, 0x00, 0x07, 0x01, 0xd0, 0x01, 0xcc, 0x00, 0x00, // .:.&............ + 0xff, 0xff, 0x00, 0x51, 0xfe, 0xa8, 0x04, 0x90, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, // ...Q.......&.#.. + 0x00, 0x07, 0x00, 0xaa, 0x04, 0xdf, 0x00, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xfe, 0xa8, 0x04, 0x36, // ...............6 + 0x04, 0x4e, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x00, 0x07, 0x00, 0xaa, 0x04, 0xa3, 0x00, 0x00, // .N.&.C.......... + 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x07, 0xc6, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, // ...Q.......&.#.. + 0x01, 0x07, 0x00, 0xa8, 0x04, 0xc8, 0x01, 0x52, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x52, // .......R.......R + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0x84, 0x02, 0x26, // .3+........6...& + 0x00, 0x43, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xc4, 0x00, 0x10, 0x00, 0x06, 0xb3, 0x02, // .C.............. + 0x01, 0x10, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0xe9, 0x07, 0xee, 0x02, 0x26, // ..3+...Q.......& + 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x01, 0x9a, 0xff, 0xf5, 0x01, 0x59, 0x00, 0x09, 0xb1, 0x02, // .#.........Y.... + 0x02, 0xb8, 0x01, 0x59, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0xe5, // ...Y.3+......... + 0x06, 0xac, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x01, 0x9a, 0xf1, 0x17, 0x00, 0x06, // ...&.C.......... + 0xb3, 0x02, 0x02, 0x17, 0x33, 0x2b, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x04, 0x90, 0x07, 0xdd, // ....3+.......... + 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x01, 0x99, 0xff, 0xec, 0x01, 0x48, 0x00, 0x09, // .&.#.........H.. + 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x48, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xec, // .....H.3+....... + 0x04, 0x36, 0x06, 0x9b, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x01, 0x99, 0xe8, 0x06, // .6...&.C........ + 0x00, 0x06, 0xb3, 0x02, 0x02, 0x06, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0xbb, // ......3+...Q.... + 0x08, 0x04, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x01, 0x98, 0x00, 0x01, 0x01, 0x35, // ...&.#.........5 + 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x35, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, // .......5.3+..... + 0xff, 0xec, 0x04, 0xb8, 0x06, 0xc3, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x01, 0x98, // .......&.C...... + 0xfe, 0xf4, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0xff, 0xf4, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x08, 0x2f, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, // .Q...../.&.#.... + 0x01, 0x97, 0xff, 0xf3, 0x01, 0x36, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x36, 0xb0, 0x33, // .....6.......6.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0xee, 0x02, 0x26, 0x00, 0x43, // +........6...&.C + 0x00, 0x00, 0x01, 0x06, 0x01, 0x97, 0xef, 0xf5, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0xff, 0xf5, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x51, 0xfe, 0xa8, 0x04, 0x90, 0x07, 0x48, 0x02, 0x26, // .3+....Q.....H.& + 0x00, 0x23, 0x00, 0x00, 0x00, 0x27, 0x00, 0x9c, 0x00, 0x87, 0x01, 0x5b, 0x01, 0x07, 0x00, 0xaa, // .#...'.....[.... + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0x00, // ...........[.3+. + 0xff, 0xff, 0x00, 0x9c, 0xfe, 0xa8, 0x04, 0x36, 0x06, 0x06, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, // .......6...&.C.. + 0x00, 0x27, 0x00, 0x9c, 0x00, 0x83, 0x00, 0x19, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xa3, 0x00, 0x00, // .'.............. + 0x00, 0x06, 0xb3, 0x02, 0x01, 0x19, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, // ......3+...Q.... + 0x07, 0xde, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x01, 0xc2, 0x00, 0x00, 0x01, 0x54, // ...&.#.........T + 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x54, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, // .......T.3+..... + 0xff, 0xec, 0x04, 0x36, 0x06, 0x9c, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, 0x01, 0xc2, // ...6...&.C...... + 0xfc, 0x12, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x12, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, 0x00, 0x00, // ........3+...Q.. + 0x04, 0x90, 0x08, 0x21, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x01, 0x9b, 0x00, 0x03, // ...!.&.#........ + 0x01, 0x7a, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x7a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .z.......z.3+... + 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0xdf, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x01, 0x06, // .....6...&.C.... + 0x01, 0x9b, 0x00, 0x38, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x38, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x51, // ...8.....83+...Q + 0x00, 0x00, 0x04, 0x90, 0x08, 0x4c, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, 0x01, 0xb6, // .....L.&.#...... + 0xff, 0xf4, 0x01, 0x49, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x49, 0xb0, 0x33, 0x2b, 0x00, // ...I.......I.3+. + 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x07, 0x0a, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, // .......6...&.C.. + 0x01, 0x06, 0x01, 0xb6, 0xf0, 0x07, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x07, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0x51, 0x00, 0x00, 0x04, 0x90, 0x08, 0x21, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, 0x01, 0x07, // .Q.....!.&.#.... + 0x01, 0xcd, 0xff, 0xd4, 0x01, 0x51, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x51, 0xb0, 0x33, // .....Q.......Q.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, 0xff, 0xec, 0x04, 0x36, 0x06, 0xdf, 0x02, 0x26, 0x00, 0x43, // +........6...&.C + 0x00, 0x00, 0x01, 0x06, 0x01, 0xcd, 0xd0, 0x0f, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x0f, 0x33, 0x2b, // ..............3+ + 0xff, 0xff, 0x00, 0x51, 0xfe, 0xa8, 0x04, 0x90, 0x07, 0x4a, 0x02, 0x26, 0x00, 0x23, 0x00, 0x00, // ...Q.....J.&.#.. + 0x00, 0x27, 0x00, 0x9e, 0x00, 0x0f, 0x01, 0x98, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xdf, 0x00, 0x00, // .'.............. + 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x98, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x9c, // .........3+..... + 0xfe, 0xa8, 0x04, 0x36, 0x06, 0x08, 0x02, 0x26, 0x00, 0x43, 0x00, 0x00, 0x00, 0x26, 0x00, 0x9e, // ...6...&.C...&.. + 0x0b, 0x56, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xa3, 0x00, 0x00, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x56, // .V.............V + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb6, 0xfe, 0xb2, 0x04, 0x34, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x27, // 3+.......4...&.' + 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xd2, 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x0a, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x87, 0xfe, 0xa8, 0x04, 0x45, 0x04, 0x4e, 0x02, 0x26, 0x00, 0x47, // 3+.......E.N.&.G + 0x00, 0x00, 0x00, 0x07, 0x00, 0xaa, 0x04, 0xe3, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, // ................ + 0x04, 0x34, 0x07, 0xc6, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xbe, // .4...&.'........ + 0x01, 0x52, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x52, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .R.......R.3+... + 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x06, 0x85, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x07, // .....E...&.G.... + 0x00, 0xa8, 0x04, 0xbf, 0x00, 0x11, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x11, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0xb6, 0x00, 0x00, 0x04, 0x34, 0x07, 0x52, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, // .....4.R.&.'.... + 0x00, 0xa2, 0x00, 0x89, 0x01, 0x61, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x61, 0xb0, 0x33, // .....a.......a.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x06, 0x11, 0x02, 0x26, 0x00, 0x47, // +........E...&.G + 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x8a, 0x00, 0x20, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x20, // ......... ..... + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0xdf, 0x07, 0xee, 0x02, 0x26, 0x00, 0x27, // 3+...........&.' + 0x00, 0x00, 0x01, 0x07, 0x01, 0x9a, 0xff, 0xeb, 0x01, 0x59, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, // .........Y...... + 0x01, 0x59, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0xe0, 0x06, 0xad, // .Y.3+........... + 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, 0x01, 0x9a, 0xec, 0x18, 0x00, 0x06, 0xb3, 0x02, // .&.G............ + 0x02, 0x18, 0x33, 0x2b, 0xff, 0xff, 0xff, 0xf2, 0x00, 0x00, 0x04, 0x34, 0x07, 0xdd, 0x02, 0x26, // ..3+.......4...& + 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x01, 0x99, 0xff, 0xe2, 0x01, 0x48, 0x00, 0x09, 0xb1, 0x01, // .'.........H.... + 0x02, 0xb8, 0x01, 0x48, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xec, 0x04, 0x45, // ...H.3+........E + 0x06, 0x9c, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, 0x01, 0x99, 0xe3, 0x07, 0x00, 0x06, // ...&.G.......... + 0xb3, 0x02, 0x02, 0x07, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xb6, 0x00, 0x00, 0x04, 0xb2, 0x08, 0x04, // ....3+.......... + 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x01, 0x98, 0xff, 0xf8, 0x01, 0x35, 0x00, 0x09, // .&.'.........5.. + 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x35, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, // .....5.3+....... + 0x04, 0xb3, 0x06, 0xc4, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, 0x01, 0x06, 0x01, 0x98, 0xf9, 0xf5, // .....&.G........ + 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0xff, 0xf5, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb6, // .........3+..... + 0x00, 0x00, 0x04, 0x34, 0x08, 0x2f, 0x02, 0x26, 0x00, 0x27, 0x00, 0x00, 0x01, 0x07, 0x01, 0x97, // ...4./.&.'...... + 0xff, 0xe9, 0x01, 0x36, 0x00, 0x09, 0xb1, 0x01, 0x02, 0xb8, 0x01, 0x36, 0xb0, 0x33, 0x2b, 0x00, // ...6.......6.3+. + 0xff, 0xff, 0x00, 0x87, 0xff, 0xec, 0x04, 0x45, 0x06, 0xef, 0x02, 0x26, 0x00, 0x47, 0x00, 0x00, // .......E...&.G.. + 0x01, 0x06, 0x01, 0x97, 0xea, 0xf6, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0xff, 0xf6, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb6, 0xfe, 0xb2, 0x04, 0x34, 0x07, 0x48, 0x02, 0x26, 0x00, 0x27, // +........4.H.&.' + 0x00, 0x00, 0x00, 0x27, 0x00, 0x9c, 0x00, 0x7d, 0x01, 0x5b, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xd2, // ...'...}.[...... + 0x00, 0x0a, 0x00, 0x0f, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5b, 0xb0, 0x33, 0x2b, 0xb3, 0x02, 0x01, // .........[.3+... + 0x0a, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x87, 0xfe, 0xa8, 0x04, 0x45, 0x06, 0x07, 0x02, 0x26, // .3+........E...& + 0x00, 0x47, 0x00, 0x00, 0x00, 0x26, 0x00, 0x9c, 0x7e, 0x1a, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xe3, // .G...&..~....... + 0x00, 0x00, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x1a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, // ........3+...... + 0x04, 0x1e, 0x07, 0xc6, 0x02, 0x26, 0x00, 0x2b, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0x8a, // .....&.+........ + 0x01, 0x52, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x52, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .R.......R.3+... + 0x00, 0xcb, 0x00, 0x00, 0x04, 0x55, 0x06, 0x70, 0x02, 0x26, 0x00, 0x8a, 0x00, 0x00, 0x01, 0x07, // .....U.p.&...... + 0x00, 0xa8, 0x04, 0xed, 0xff, 0xfc, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xfc, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0xfe, 0xb2, 0x04, 0x1e, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2b, // +............&.+ + 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0x9e, 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x0a, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0xcb, 0xfe, 0xb2, 0x04, 0x55, 0x05, 0xc3, 0x02, 0x26, 0x00, 0x4b, // 3+.......U...&.K + 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x05, 0x06, 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x0a, // ................ + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6a, 0xfe, 0xa0, 0x04, 0x61, 0x05, 0xc4, 0x02, 0x26, 0x00, 0x31, // 3+...j...a...&.1 + 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xdf, 0xff, 0xf8, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, // ................ + 0xff, 0xf8, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x7a, 0xfe, 0x9f, 0x04, 0x52, 0x04, 0x4e, // ...3+....z...R.N + 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xcd, 0xff, 0xf7, 0x00, 0x09, // .&.Q............ + 0xb1, 0x02, 0x01, 0xb8, 0xff, 0xf7, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, // .......3+....j.. + 0x04, 0x61, 0x07, 0xdb, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xcc, // .a...&.1........ + 0x01, 0x67, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x67, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .g.......g.3+... + 0x00, 0x7a, 0xff, 0xec, 0x04, 0x52, 0x06, 0x84, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x07, // .z...R...&.Q.... + 0x00, 0xa8, 0x04, 0xb9, 0x00, 0x10, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x10, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0x6a, 0xff, 0xec, 0x04, 0xed, 0x08, 0x03, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, // .j.......&.1.... + 0x01, 0x9a, 0xff, 0xf9, 0x01, 0x6e, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x6e, 0xb0, 0x33, // .....n.......n.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, 0x04, 0xda, 0x06, 0xac, 0x02, 0x26, 0x00, 0x51, // +....z.......&.Q + 0x00, 0x00, 0x01, 0x06, 0x01, 0x9a, 0xe6, 0x17, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x17, 0x33, 0x2b, // ..............3+ + 0xff, 0xff, 0x00, 0x00, 0xff, 0xec, 0x04, 0x61, 0x07, 0xf2, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, // .......a...&.1.. + 0x01, 0x07, 0x01, 0x99, 0xff, 0xf0, 0x01, 0x5d, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x5d, // .......].......] + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0xff, 0xed, 0xff, 0xec, 0x04, 0x52, 0x06, 0x9b, 0x02, 0x26, // .3+........R...& + 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x01, 0x99, 0xdd, 0x06, 0x00, 0x06, 0xb3, 0x02, 0x02, 0x06, // .Q.............. + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0xbf, 0x08, 0x19, 0x02, 0x26, 0x00, 0x31, // 3+...j.......&.1 + 0x00, 0x00, 0x01, 0x07, 0x01, 0x98, 0x00, 0x05, 0x01, 0x4a, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, // .........J...... + 0x01, 0x4a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x7a, 0xff, 0xec, 0x04, 0xad, 0x06, 0xc3, // .J.3+....z...... + 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x01, 0x98, 0xf3, 0xf4, 0x00, 0x09, 0xb1, 0x02, // .&.Q............ + 0x02, 0xb8, 0xff, 0xf4, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x6a, 0xff, 0xec, 0x04, 0x61, // .....3+....j...a + 0x08, 0x44, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x01, 0x07, 0x01, 0x97, 0xff, 0xf7, 0x01, 0x4b, // .D.&.1.........K + 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0x01, 0x4b, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x7a, // .......K.3+....z + 0xff, 0xec, 0x04, 0x52, 0x06, 0xee, 0x02, 0x26, 0x00, 0x51, 0x00, 0x00, 0x01, 0x06, 0x01, 0x97, // ...R...&.Q...... + 0xe4, 0xf5, 0x00, 0x09, 0xb1, 0x02, 0x02, 0xb8, 0xff, 0xf5, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0x6a, 0xfe, 0xa0, 0x04, 0x61, 0x07, 0x5d, 0x02, 0x26, 0x00, 0x31, 0x00, 0x00, 0x00, 0x27, // .j...a.].&.1...' + 0x00, 0x9c, 0x00, 0x8b, 0x01, 0x70, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xdf, 0xff, 0xf8, 0x00, 0x12, // .....p.......... + 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x70, 0xb0, 0x33, 0x2b, 0xb1, 0x03, 0x01, 0xb8, 0xff, 0xf8, 0xb0, // .....p.3+....... + 0x33, 0x2b, 0xff, 0xff, 0x00, 0x7a, 0xfe, 0x9f, 0x04, 0x52, 0x06, 0x06, 0x02, 0x26, 0x00, 0x51, // 3+...z...R...&.Q + 0x00, 0x00, 0x00, 0x26, 0x00, 0x9c, 0x78, 0x19, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xcd, 0xff, 0xf7, // ...&..x......... + 0x00, 0x0f, 0xb3, 0x02, 0x01, 0x19, 0x33, 0x2b, 0xb1, 0x03, 0x01, 0xb8, 0xff, 0xf7, 0xb0, 0x33, // ......3+.......3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x63, 0xff, 0xec, 0x04, 0xc6, 0x07, 0x20, 0x02, 0x26, 0x00, 0x96, // +....c..... .&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x84, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, // .....s...W...... + 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x77, 0xff, 0xec, 0x04, 0xae, 0x05, 0xde, // .W.3+....w...... + 0x02, 0x26, 0x00, 0x97, 0x00, 0x00, 0x01, 0x06, 0x00, 0x73, 0x7c, 0x15, 0x00, 0x06, 0xb3, 0x02, // .&.......s|..... + 0x01, 0x15, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x63, 0xff, 0xec, 0x04, 0xc6, 0x07, 0x23, 0x02, 0x26, // ..3+...c.....#.& + 0x00, 0x96, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, 0xff, 0x98, 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x02, // .......B...Z.... + 0x01, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x77, 0xff, 0xec, 0x04, 0xae, // ...Z.3+....w.... + 0x05, 0xe1, 0x02, 0x26, 0x00, 0x97, 0x00, 0x00, 0x01, 0x06, 0x00, 0x42, 0x90, 0x18, 0x00, 0x06, // ...&.......B.... + 0xb3, 0x02, 0x01, 0x18, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x63, 0xff, 0xec, 0x04, 0xc6, 0x07, 0xc6, // ....3+...c...... + 0x02, 0x26, 0x00, 0x96, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xc7, 0x01, 0x52, 0x00, 0x09, // .&...........R.. + 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x52, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x77, 0xff, 0xec, // .....R.3+....w.. + 0x04, 0xae, 0x06, 0x84, 0x02, 0x26, 0x00, 0x97, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xbf, // .....&.......... + 0x00, 0x10, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x10, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x63, 0xff, 0xec, // ........3+...c.. + 0x04, 0xc6, 0x07, 0x52, 0x02, 0x26, 0x00, 0x96, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x92, // ...R.&.......... + 0x01, 0x61, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0x01, 0x61, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .a.......a.3+... + 0x00, 0x77, 0xff, 0xec, 0x04, 0xae, 0x06, 0x10, 0x02, 0x26, 0x00, 0x97, 0x00, 0x00, 0x01, 0x07, // .w.......&...... + 0x00, 0xa2, 0x00, 0x8a, 0x00, 0x1f, 0x00, 0x06, 0xb3, 0x02, 0x01, 0x1f, 0x33, 0x2b, 0xff, 0xff, // ............3+.. + 0x00, 0x63, 0xfe, 0xa8, 0x04, 0xc6, 0x05, 0xfa, 0x02, 0x26, 0x00, 0x96, 0x00, 0x00, 0x00, 0x07, // .c.......&...... + 0x00, 0xaa, 0x04, 0xd3, 0x00, 0x00, 0xff, 0xff, 0x00, 0x77, 0xfe, 0x9f, 0x04, 0xae, 0x04, 0xaa, // .........w...... + 0x02, 0x26, 0x00, 0x97, 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xcb, 0xff, 0xf7, 0x00, 0x09, // .&.............. + 0xb1, 0x02, 0x01, 0xb8, 0xff, 0xf7, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xfe, 0xa8, // .......3+....... + 0x04, 0x42, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x00, 0x07, 0x00, 0xaa, 0x04, 0xc8, // .B...&.7........ + 0x00, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xfe, 0xa8, 0x04, 0x1f, 0x04, 0x3a, 0x02, 0x26, 0x00, 0x57, // ...........:.&.W + 0x00, 0x00, 0x00, 0x07, 0x00, 0xaa, 0x04, 0x91, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, // ................ + 0x04, 0x42, 0x07, 0xba, 0x02, 0x26, 0x00, 0x37, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xe6, // .B...&.7........ + 0x01, 0x46, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x46, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .F.......F.3+... + 0x00, 0xb4, 0xff, 0xec, 0x04, 0x1f, 0x06, 0x71, 0x02, 0x26, 0x00, 0x57, 0x00, 0x00, 0x01, 0x07, // .......q.&.W.... + 0x00, 0xa8, 0x04, 0xb8, 0xff, 0xfd, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xfd, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x05, 0x83, 0x07, 0x20, 0x02, 0x26, 0x00, 0x98, // +.......... .&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0x73, 0x00, 0x74, 0x01, 0x57, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .....s.t.W...... + 0x01, 0x57, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x05, 0x3f, 0x05, 0xc9, // .W.3+........?.. + 0x02, 0x26, 0x00, 0x99, 0x00, 0x00, 0x00, 0x06, 0x00, 0x73, 0x76, 0x00, 0xff, 0xff, 0x00, 0x8b, // .&.......sv..... + 0xff, 0xec, 0x05, 0x83, 0x07, 0x23, 0x02, 0x26, 0x00, 0x98, 0x00, 0x00, 0x01, 0x07, 0x00, 0x42, // .....#.&.......B + 0xff, 0x88, 0x01, 0x5a, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x5a, 0xb0, 0x33, 0x2b, 0x00, // ...Z.......Z.3+. + 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x05, 0x3f, 0x05, 0xcc, 0x02, 0x26, 0x00, 0x99, 0x00, 0x00, // .......?...&.... + 0x01, 0x06, 0x00, 0x42, 0x8a, 0x03, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x03, 0x33, 0x2b, 0xff, 0xff, // ...B........3+.. + 0x00, 0x8b, 0xff, 0xec, 0x05, 0x83, 0x07, 0xc6, 0x02, 0x26, 0x00, 0x98, 0x00, 0x00, 0x01, 0x07, // .........&...... + 0x00, 0xa8, 0x04, 0xb7, 0x01, 0x52, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x52, 0xb0, 0x33, // .....R.......R.3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, 0x05, 0x3f, 0x06, 0x70, 0x02, 0x26, 0x00, 0x99, // +........?.p.&.. + 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xb9, 0xff, 0xfc, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // ................ + 0xff, 0xfc, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8b, 0xff, 0xec, 0x05, 0x83, 0x07, 0x52, // ...3+..........R + 0x02, 0x26, 0x00, 0x98, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x82, 0x01, 0x61, 0x00, 0x09, // .&...........a.. + 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x61, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xb4, 0xff, 0xec, // .....a.3+....... + 0x05, 0x3f, 0x05, 0xfb, 0x02, 0x26, 0x00, 0x99, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x84, // .?...&.......... + 0x00, 0x0a, 0x00, 0x06, 0xb3, 0x01, 0x01, 0x0a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x8b, 0xfe, 0xa0, // ........3+...... + 0x05, 0x83, 0x05, 0xe8, 0x02, 0x26, 0x00, 0x98, 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xcd, // .....&.......... + 0xff, 0xf8, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xf8, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // ...........3+... + 0x00, 0xb4, 0xfe, 0xa8, 0x05, 0x3f, 0x04, 0x93, 0x02, 0x26, 0x00, 0x99, 0x00, 0x00, 0x00, 0x07, // .....?...&...... + 0x00, 0xaa, 0x04, 0x90, 0x00, 0x00, 0xff, 0xff, 0x00, 0x3d, 0xfe, 0xb2, 0x04, 0x79, 0x05, 0xb0, // .........=...y.. + 0x02, 0x26, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x04, 0xc3, 0x00, 0x0a, 0x00, 0x06, // .&.;............ + 0xb3, 0x01, 0x01, 0x0a, 0x33, 0x2b, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x0b, 0x04, 0x85, 0x04, 0x3a, // ....3+...D.....: + 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x07, 0x00, 0xaa, 0x05, 0xa7, 0xff, 0x63, 0x00, 0x09, // .&.[.........c.. + 0xb1, 0x01, 0x01, 0xb8, 0xff, 0x63, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, // .....c.3+....=.. + 0x04, 0x79, 0x07, 0xc5, 0x02, 0x26, 0x00, 0x3b, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa8, 0x04, 0xb4, // .y...&.;........ + 0x01, 0x51, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x51, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, // .Q.......Q.3+... + 0x00, 0x44, 0xfe, 0x4b, 0x04, 0x85, 0x06, 0x71, 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x07, // .D.K...q.&.[.... + 0x00, 0xa8, 0x04, 0xcc, 0xff, 0xfd, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xfd, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x07, 0x51, 0x02, 0x26, 0x00, 0x3b, // +....=...y.Q.&.; + 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x7f, 0x01, 0x60, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, // .........`...... + 0x01, 0x60, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x44, 0xfe, 0x4b, 0x04, 0x85, 0x05, 0xfc, // .`.3+....D.K.... + 0x02, 0x26, 0x00, 0x5b, 0x00, 0x00, 0x01, 0x07, 0x00, 0xa2, 0x00, 0x97, 0x00, 0x0b, 0x00, 0x06, // .&.[............ + 0xb3, 0x01, 0x01, 0x0b, 0x33, 0x2b, 0x00, 0x02, 0x00, 0x8b, 0xff, 0xec, 0x04, 0xe1, 0x06, 0x00, // ....3+.......... + 0x00, 0x1d, 0x00, 0x31, 0x00, 0xad, 0x40, 0x0f, 0x15, 0x01, 0x09, 0x03, 0x29, 0x28, 0x02, 0x08, // ...1..@.....)(.. + 0x09, 0x04, 0x01, 0x01, 0x08, 0x03, 0x4a, 0x4b, 0xb0, 0x19, 0x50, 0x58, 0x40, 0x25, 0x07, 0x01, // ......JK..PX@%.. + 0x05, 0x04, 0x01, 0x00, 0x03, 0x05, 0x00, 0x61, 0x00, 0x06, 0x06, 0x3e, 0x4b, 0x00, 0x09, 0x09, // .......a...>K... + 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, 0x4b, 0x00, 0x08, 0x08, 0x01, 0x5b, 0x02, 0x01, 0x01, 0x01, // .[...GK....[.... + 0x3d, 0x01, 0x4c, 0x1b, 0x4b, 0xb0, 0x21, 0x50, 0x58, 0x40, 0x29, 0x07, 0x01, 0x05, 0x04, 0x01, // =.L.K.!PX@)..... + 0x00, 0x03, 0x05, 0x00, 0x61, 0x00, 0x06, 0x06, 0x3e, 0x4b, 0x00, 0x09, 0x09, 0x03, 0x5b, 0x00, // ....a...>K....[. + 0x03, 0x03, 0x47, 0x4b, 0x00, 0x01, 0x01, 0x3d, 0x4b, 0x00, 0x08, 0x08, 0x02, 0x5b, 0x00, 0x02, // ..GK...=K....[.. + 0x02, 0x45, 0x02, 0x4c, 0x1b, 0x40, 0x29, 0x07, 0x01, 0x05, 0x04, 0x01, 0x00, 0x03, 0x05, 0x00, // .E.L.@)......... + 0x61, 0x00, 0x09, 0x09, 0x03, 0x5b, 0x00, 0x03, 0x03, 0x47, 0x4b, 0x00, 0x06, 0x06, 0x01, 0x59, // a....[...GK....Y + 0x00, 0x01, 0x01, 0x3d, 0x4b, 0x00, 0x08, 0x08, 0x02, 0x5b, 0x00, 0x02, 0x02, 0x45, 0x02, 0x4c, // ...=K....[...E.L + 0x59, 0x59, 0x40, 0x0e, 0x2d, 0x2b, 0x25, 0x11, 0x11, 0x11, 0x13, 0x29, 0x23, 0x11, 0x10, 0x0a, // YY@.-+%....)#... + 0x08, 0x1d, 0x2b, 0x01, 0x23, 0x11, 0x23, 0x27, 0x06, 0x06, 0x23, 0x22, 0x2e, 0x02, 0x35, 0x35, // ..+.#.#'..#"..55 + 0x34, 0x3e, 0x02, 0x33, 0x32, 0x16, 0x17, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x33, 0x01, // 4>.32...#5353.3. + 0x14, 0x1e, 0x02, 0x33, 0x32, 0x3e, 0x02, 0x37, 0x11, 0x26, 0x26, 0x23, 0x22, 0x0e, 0x02, 0x15, // ...32>.7.&&#"... + 0x04, 0xe1, 0xc5, 0xaa, 0x08, 0x36, 0x96, 0x64, 0x62, 0x9f, 0x70, 0x3e, 0x3d, 0x71, 0xa0, 0x63, // .....6.db.p>=q.c + 0x61, 0x91, 0x35, 0xff, 0xff, 0xb9, 0xc5, 0xfc, 0x63, 0x22, 0x47, 0x6e, 0x4d, 0x2f, 0x4c, 0x3e, // a.5.....c"GnM/L> + 0x30, 0x12, 0x24, 0x7a, 0x5b, 0x4e, 0x6f, 0x47, 0x22, 0x04, 0xd2, 0xfb, 0x2e, 0x72, 0x42, 0x44, // 0.$z[NoG"....rBD + 0x54, 0x94, 0xc9, 0x74, 0x15, 0x79, 0xcb, 0x92, 0x52, 0x41, 0x3e, 0x01, 0x03, 0x97, 0x97, 0x97, // T..t.y..RA>..... + 0xfc, 0xa8, 0x4f, 0x8e, 0x6c, 0x3f, 0x16, 0x29, 0x39, 0x23, 0x01, 0xf6, 0x42, 0x55, 0x40, 0x6d, // ..O.l?.)9#..BU@m + 0x8f, 0x4f, 0xff, 0xff, 0x00, 0x8b, 0xfe, 0xed, 0x04, 0xe1, 0x06, 0x00, 0x00, 0x26, 0x00, 0x46, // .O...........&.F + 0x00, 0x00, 0x00, 0x27, 0x01, 0xca, 0x01, 0x2f, 0x02, 0x47, 0x01, 0x06, 0x00, 0x41, 0x30, 0x84, // ...'.../.G...A0. + 0x00, 0x12, 0xb1, 0x02, 0x01, 0xb8, 0x02, 0x47, 0xb0, 0x33, 0x2b, 0xb1, 0x03, 0x01, 0xb8, 0xff, // .......G.3+..... + 0x84, 0xb0, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xa9, 0xfe, 0xa0, 0x04, 0xdf, 0x05, 0xb0, 0x02, 0x26, // ..3+...........& + 0x01, 0xda, 0x00, 0x00, 0x01, 0x07, 0x01, 0xce, 0x02, 0x20, 0x00, 0x07, 0x00, 0x06, 0xb3, 0x01, // ......... ...... + 0x01, 0x07, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xa4, 0xfe, 0x99, 0x04, 0xba, 0x04, 0x3a, 0x02, 0x26, // ..3+.........:.& + 0x00, 0xed, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x01, 0xfb, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8d, // ................ + 0xfe, 0x99, 0x04, 0xa8, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // .......&.*...... + 0x01, 0xe9, 0x00, 0x00, 0xff, 0xff, 0x00, 0xa5, 0xfe, 0x99, 0x04, 0xb0, 0x04, 0x3a, 0x02, 0x26, // .............:.& + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x01, 0xf1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x4c, // ...............L + 0xfe, 0x99, 0x04, 0x84, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x36, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // .......&.6...... + 0x00, 0x8c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x68, 0xfe, 0x99, 0x04, 0x7b, 0x04, 0x3a, 0x02, 0x26, // .......h...{.:.& + 0x00, 0xf2, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x00, 0x95, 0x00, 0x00, 0xff, 0xff, 0x00, 0x57, // ...............W + 0xfe, 0x99, 0x04, 0xe7, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // .......&.:...... + 0x02, 0x28, 0x00, 0x00, 0xff, 0xff, 0x00, 0x6e, 0xfe, 0x99, 0x04, 0x76, 0x04, 0x3a, 0x02, 0x26, // .(.....n...v.:.& + 0x00, 0x5a, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x01, 0xb7, 0x00, 0x00, 0xff, 0xff, 0x00, 0xab, // .Z.............. + 0xfe, 0x99, 0x04, 0xb0, 0x05, 0xb0, 0x02, 0x26, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // .......&........ + 0x01, 0xf1, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8d, 0xfe, 0x99, 0x04, 0xb0, 0x04, 0x3a, 0x02, 0x26, // .............:.& + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x01, 0xf1, 0x00, 0x00, 0xff, 0xff, 0x00, 0xab, // ................ + 0xfe, 0x99, 0x04, 0x27, 0x05, 0xb0, 0x02, 0x26, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // ...'...&........ + 0x00, 0xde, 0x00, 0x00, 0xff, 0xff, 0x00, 0x8d, 0xfe, 0x99, 0x04, 0x27, 0x04, 0x3a, 0x02, 0x26, // ...........'.:.& + 0x00, 0xf5, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x00, 0xdd, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb5, // ................ + 0xfe, 0x99, 0x04, 0x30, 0x05, 0xb0, 0x02, 0x26, 0x00, 0xae, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // ...0...&........ + 0xff, 0x3a, 0x00, 0x00, 0xff, 0xff, 0x00, 0xb7, 0xfe, 0x99, 0x04, 0x2a, 0x04, 0x3a, 0x02, 0x26, // .:.........*.:.& + 0x00, 0xe8, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x00, 0x1d, // ................ + 0xfe, 0x99, 0x04, 0xfb, 0x05, 0xb0, 0x02, 0x26, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, // .......&........ + 0x02, 0x3c, 0x00, 0x00, 0xff, 0xff, 0x00, 0x11, 0xfe, 0x99, 0x04, 0xef, 0x04, 0x3a, 0x02, 0x26, // .<...........:.& + 0x00, 0xea, 0x00, 0x00, 0x00, 0x07, 0x01, 0xce, 0x02, 0x30, 0x00, 0x00, 0xff, 0xff, 0x00, 0x26, // .........0.....& + 0xfe, 0x3b, 0x04, 0x89, 0x05, 0xc3, 0x02, 0x26, 0x01, 0x3d, 0x00, 0x00, 0x01, 0x07, 0x01, 0xce, // .;.....&.=...... + 0x00, 0xbf, 0xff, 0xa2, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0xff, 0xa2, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0xff, 0xff, 0x00, 0x26, 0xfe, 0x3b, 0x04, 0x85, 0x04, 0x4e, 0x02, 0x26, 0x01, 0x3e, 0x00, 0x00, // ...&.;...N.&.>.. + 0x01, 0x07, 0x01, 0xce, 0x00, 0x9b, 0xff, 0xa2, 0x00, 0x09, 0xb1, 0x02, 0x01, 0xb8, 0xff, 0xa2, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xae, 0x00, 0x00, 0x04, 0x2c, 0x06, 0x00, 0x02, 0x06, // .3+........,.... + 0x00, 0x4a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x12, 0x00, 0x00, 0x04, 0x40, 0x04, 0x3a, 0x00, 0x16, // .J.........@.:.. + 0x00, 0x23, 0x00, 0x37, 0x40, 0x34, 0x06, 0x01, 0x04, 0x03, 0x01, 0x00, 0x01, 0x04, 0x00, 0x61, // .#.7@4.........a + 0x00, 0x01, 0x09, 0x01, 0x08, 0x07, 0x01, 0x08, 0x63, 0x00, 0x05, 0x05, 0x18, 0x4b, 0x00, 0x07, // ........c....K.. + 0x07, 0x02, 0x5c, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x17, 0x17, 0x17, 0x23, 0x17, 0x22, 0x22, // ........L...#."" + 0x11, 0x11, 0x11, 0x11, 0x28, 0x21, 0x10, 0x0a, 0x06, 0x1c, 0x2b, 0x01, 0x21, 0x15, 0x21, 0x32, // ....(!....+.!.!2 + 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, 0x35, 0x33, 0x15, 0x21, // ......#!.#5353.! + 0x01, 0x11, 0x21, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x02, 0x8f, 0xfe, 0xcf, 0x01, // ..!2>.54..#..... + 0x4b, 0x61, 0x97, 0x68, 0x37, 0x36, 0x68, 0x98, 0x61, 0xfd, 0xfc, 0x93, 0x93, 0xb9, 0x01, 0x31, // Ka.h76h.a......1 + 0xfe, 0xcf, 0x01, 0x4b, 0x3a, 0x54, 0x36, 0x19, 0x1a, 0x36, 0x53, 0x3a, 0x03, 0x23, 0x83, 0x31, // ...K:T6..6S:.#.1 + 0x58, 0x7a, 0x49, 0x48, 0x7d, 0x5b, 0x34, 0x03, 0x23, 0x97, 0x80, 0x80, 0xfe, 0x4f, 0xfe, 0x8e, // XzIH}[4.#....O.. + 0x1e, 0x32, 0x42, 0x24, 0x23, 0x43, 0x35, 0x21, 0x00, 0x02, 0xff, 0xd4, 0x00, 0x00, 0x04, 0x51, // .2B$#C5!.......Q + 0x05, 0xb0, 0x00, 0x16, 0x00, 0x23, 0x00, 0x37, 0x40, 0x34, 0x06, 0x01, 0x04, 0x03, 0x01, 0x00, // .....#.7@4...... + 0x01, 0x04, 0x00, 0x61, 0x00, 0x01, 0x09, 0x01, 0x08, 0x07, 0x01, 0x08, 0x63, 0x00, 0x05, 0x05, // ...a........c... + 0x16, 0x4b, 0x00, 0x07, 0x07, 0x02, 0x5c, 0x00, 0x02, 0x02, 0x17, 0x02, 0x4c, 0x17, 0x17, 0x17, // .K..........L... + 0x23, 0x17, 0x22, 0x22, 0x11, 0x11, 0x11, 0x11, 0x28, 0x21, 0x10, 0x0a, 0x06, 0x1c, 0x2b, 0x01, // #.""....(!....+. + 0x23, 0x15, 0x21, 0x32, 0x1e, 0x02, 0x15, 0x14, 0x0e, 0x02, 0x23, 0x21, 0x11, 0x23, 0x35, 0x33, // #.!2......#!.#53 + 0x35, 0x33, 0x15, 0x33, 0x03, 0x11, 0x21, 0x32, 0x3e, 0x02, 0x35, 0x34, 0x2e, 0x02, 0x23, 0x02, // 53.3..!2>.54..#. + 0x51, 0xf0, 0x01, 0x0a, 0x74, 0xb5, 0x7c, 0x41, 0x41, 0x7c, 0xb5, 0x74, 0xfe, 0x3d, 0xd4, 0xd4, // Q...t.|AA|.t.=.. + 0xb9, 0xf0, 0xf0, 0x01, 0x0a, 0x4e, 0x71, 0x4a, 0x23, 0x23, 0x4a, 0x71, 0x4e, 0x04, 0x50, 0xf7, // .....NqJ##JqN.P. + 0x3c, 0x6f, 0x9c, 0x61, 0x60, 0xa0, 0x72, 0x3f, 0x04, 0x50, 0x97, 0xc9, 0xc9, 0xfd, 0xdb, 0xfd, // .54.. + 0x23, 0x02, 0x51, 0xf0, 0x01, 0x0a, 0x74, 0xb5, 0x7c, 0x41, 0x41, 0x7c, 0xb5, 0x74, 0xfe, 0x3d, // #.Q...t.|AA|.t.= + 0xd4, 0xd4, 0xb9, 0xf0, 0xf0, 0x01, 0x0a, 0x4e, 0x71, 0x4a, 0x23, 0x23, 0x4a, 0x71, 0x4e, 0x04, // .......NqJ##JqN. + 0x50, 0xf7, 0x3c, 0x6f, 0x9c, 0x61, 0x60, 0xa0, 0x72, 0x3f, 0x04, 0x50, 0x97, 0xc9, 0xc9, 0xfd, // P..& + 0x00, 0xd9, 0x00, 0x00, 0x00, 0x27, 0x00, 0x9e, 0xff, 0xf9, 0x01, 0x8c, 0x01, 0x07, 0x00, 0x0e, // .....'.......... + 0x02, 0x60, 0xff, 0xda, 0x00, 0x12, 0xb1, 0x01, 0x01, 0xb8, 0x01, 0x8c, 0xb0, 0x33, 0x2b, 0xb1, // .`...........3+. + 0x02, 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0xff, 0xff, 0x00, 0xa5, 0xfe, 0x8a, 0x04, 0xe0, // ......3+........ + 0x05, 0xf3, 0x02, 0x26, 0x00, 0xec, 0x00, 0x00, 0x00, 0x26, 0x00, 0x9e, 0xf4, 0x41, 0x01, 0x07, // ...&.....&...A.. + 0x00, 0x0e, 0x02, 0x5d, 0xff, 0xda, 0x00, 0x0f, 0xb3, 0x01, 0x01, 0x41, 0x33, 0x2b, 0xb1, 0x02, // ...].......A3+.. + 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x8d, 0xfe, 0x8a, 0x04, 0xd8, // .....3+......... + 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2a, 0x00, 0x00, 0x01, 0x07, 0x00, 0x0e, 0x02, 0x55, 0xff, 0xda, // ...&.*.......U.. + 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0xa5, // .........3+..... + 0xfe, 0x8a, 0x04, 0xe0, 0x04, 0x3a, 0x02, 0x26, 0x00, 0xf0, 0x00, 0x00, 0x01, 0x07, 0x00, 0x0e, // .....:.&........ + 0x02, 0x5d, 0xff, 0xda, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0x00, // .]...........3+. + 0xff, 0xff, 0x00, 0x94, 0xfe, 0x8a, 0x05, 0x02, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x2f, 0x00, 0x00, // ...........&./.. + 0x01, 0x07, 0x00, 0x0e, 0x02, 0x7f, 0xff, 0xda, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xda, // ................ + 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x89, 0xfe, 0x8a, 0x04, 0xe4, 0x04, 0x3a, 0x02, 0x26, // .3+..........:.& + 0x00, 0xef, 0x00, 0x00, 0x01, 0x07, 0x00, 0x0e, 0x02, 0x61, 0xff, 0xda, 0x00, 0x09, 0xb1, 0x01, // .........a...... + 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x2f, 0xfe, 0x8a, 0x04, 0xe4, // .....3+..../.... + 0x05, 0xb0, 0x02, 0x26, 0x00, 0xda, 0x00, 0x00, 0x01, 0x07, 0x00, 0x0e, 0x02, 0x61, 0xff, 0xda, // ...&.........a.. + 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0x00, 0xff, 0xff, 0x00, 0x37, // .........3+....7 + 0xfe, 0x8a, 0x04, 0xdf, 0x04, 0x3a, 0x02, 0x26, 0x00, 0xee, 0x00, 0x00, 0x01, 0x07, 0x00, 0x0e, // .....:.&........ + 0x02, 0x5c, 0xff, 0xda, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xff, 0xda, 0xb0, 0x33, 0x2b, 0x00, // .............3+. + 0x00, 0x01, 0x00, 0x3d, 0x00, 0x00, 0x04, 0x79, 0x05, 0xb0, 0x00, 0x0e, 0x00, 0x29, 0x40, 0x26, // ...=...y.....)@& + 0x0a, 0x01, 0x03, 0x04, 0x01, 0x4a, 0x06, 0x01, 0x03, 0x02, 0x01, 0x00, 0x01, 0x03, 0x00, 0x61, // .....J.........a + 0x05, 0x01, 0x04, 0x04, 0x16, 0x4b, 0x00, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x12, 0x11, 0x11, // .....K.....L.... + 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, 0x2b, 0x01, 0x23, 0x03, 0x23, 0x03, 0x23, 0x35, 0x33, 0x01, // ......+.#.#.#53. + 0x33, 0x01, 0x01, 0x33, 0x01, 0x33, 0x03, 0x9b, 0xe7, 0x03, 0xac, 0x03, 0xe4, 0x9f, 0xfe, 0x80, // 3..3.3.......... + 0xd3, 0x01, 0x4b, 0x01, 0x4c, 0xd2, 0xfe, 0x7f, 0xa3, 0x02, 0x12, 0xfd, 0xee, 0x02, 0x12, 0x97, // ..K.L........... + 0x03, 0x07, 0xfd, 0x25, 0x02, 0xdb, 0xfc, 0xf9, 0x00, 0x01, 0x00, 0x47, 0xfe, 0x60, 0x04, 0x96, // ...%.......G.`.. + 0x04, 0x3a, 0x00, 0x10, 0x00, 0x2b, 0x40, 0x28, 0x0b, 0x01, 0x03, 0x04, 0x01, 0x4a, 0x05, 0x01, // .:...+@(.....J.. + 0x04, 0x04, 0x18, 0x4b, 0x06, 0x01, 0x03, 0x03, 0x00, 0x59, 0x02, 0x01, 0x00, 0x00, 0x17, 0x4b, // ...K.....Y.....K + 0x00, 0x01, 0x01, 0x1a, 0x01, 0x4c, 0x11, 0x14, 0x11, 0x11, 0x11, 0x11, 0x10, 0x07, 0x06, 0x1b, // .....L.......... + 0x2b, 0x05, 0x23, 0x11, 0x23, 0x11, 0x23, 0x35, 0x33, 0x01, 0x33, 0x01, 0x17, 0x37, 0x01, 0x33, // +.#.#.#53.3..7.3 + 0x01, 0x33, 0x03, 0xb1, 0xe5, 0xba, 0xde, 0xb7, 0xfe, 0x5c, 0xbe, 0x01, 0x54, 0x18, 0x1a, 0x01, // .3..........T... + 0x4d, 0xbe, 0xfe, 0x5f, 0xbc, 0x0b, 0xfe, 0x6b, 0x01, 0x95, 0x97, 0x03, 0xae, 0xfc, 0xf0, 0x61, // M.._...k.......a + 0x61, 0x03, 0x10, 0xfc, 0x52, 0x00, 0x00, 0x01, 0x00, 0x57, 0x00, 0x00, 0x04, 0x8f, 0x05, 0xb0, // a...R....W...... + 0x00, 0x11, 0x00, 0x2f, 0x40, 0x2c, 0x0d, 0x01, 0x04, 0x05, 0x04, 0x01, 0x01, 0x00, 0x02, 0x4a, // .../@,.........J + 0x07, 0x01, 0x04, 0x03, 0x01, 0x00, 0x01, 0x04, 0x00, 0x62, 0x06, 0x01, 0x05, 0x05, 0x16, 0x4b, // .........b.....K + 0x02, 0x01, 0x01, 0x01, 0x17, 0x01, 0x4c, 0x11, 0x12, 0x11, 0x11, 0x11, 0x12, 0x11, 0x10, 0x08, // ......L......... + 0x06, 0x1c, 0x2b, 0x01, 0x23, 0x01, 0x23, 0x01, 0x01, 0x23, 0x01, 0x23, 0x35, 0x33, 0x01, 0x33, // ..+.#.#..#.#53.3 + 0x01, 0x01, 0x33, 0x01, 0x33, 0x03, 0xae, 0xaa, 0x01, 0x8b, 0xd8, 0xfe, 0xbe, 0xfe, 0xbd, 0xdb, // ..3.3........... + 0x01, 0x8c, 0xb2, 0xa5, 0xfe, 0x8c, 0xd9, 0x01, 0x36, 0x01, 0x3a, 0xda, 0xfe, 0x8c, 0x9d, 0x02, // ........6.:..... + 0x9e, 0xfd, 0x62, 0x02, 0x46, 0xfd, 0xba, 0x02, 0x9e, 0x97, 0x02, 0x7b, 0xfd, 0xc5, 0x02, 0x3b, // ..b.F......{...; + 0xfd, 0x85, 0x00, 0x01, 0x00, 0x6e, 0x00, 0x00, 0x04, 0x72, 0x04, 0x3a, 0x00, 0x11, 0x00, 0x2f, // .....n...r.:.../ + 0x40, 0x2c, 0x0d, 0x01, 0x04, 0x05, 0x04, 0x01, 0x01, 0x00, 0x02, 0x4a, 0x07, 0x01, 0x04, 0x03, // @,.........J.... + 0x01, 0x00, 0x01, 0x04, 0x00, 0x62, 0x06, 0x01, 0x05, 0x05, 0x18, 0x4b, 0x02, 0x01, 0x01, 0x01, // .....b.....K.... + 0x17, 0x01, 0x4c, 0x11, 0x12, 0x11, 0x11, 0x11, 0x12, 0x11, 0x10, 0x08, 0x06, 0x1c, 0x2b, 0x01, // ..L...........+. + 0x23, 0x01, 0x23, 0x01, 0x01, 0x23, 0x01, 0x23, 0x35, 0x33, 0x01, 0x33, 0x01, 0x01, 0x33, 0x01, // #.#..#.#53.3..3. + 0x33, 0x03, 0xa2, 0x9c, 0x01, 0x6c, 0xd6, 0xfe, 0xd5, 0xfe, 0xd5, 0xd8, 0x01, 0x6c, 0xb5, 0xa7, // 3....l.......l.. + 0xfe, 0xad, 0xd6, 0x01, 0x1e, 0x01, 0x21, 0xd9, 0xfe, 0xad, 0x8e, 0x01, 0xe1, 0xfe, 0x1f, 0x01, // ......!......... + 0x9c, 0xfe, 0x64, 0x01, 0xe1, 0x97, 0x01, 0xc2, 0xfe, 0x6f, 0x01, 0x91, 0xfe, 0x3e, 0xff, 0xff, // ..d......o...>.. + 0x00, 0x8b, 0xff, 0xec, 0x04, 0x60, 0x04, 0x4d, 0x02, 0x06, 0x00, 0xbc, 0x00, 0x00, 0xff, 0xff, // .....`.M........ + 0x00, 0x11, 0x00, 0x00, 0x04, 0x3d, 0x05, 0xb0, 0x02, 0x26, 0x00, 0x28, 0x00, 0x00, 0x01, 0x07, // .....=...&.(.... + 0x01, 0xca, 0xfe, 0xdc, 0xfe, 0x7f, 0x00, 0x09, 0xb1, 0x01, 0x01, 0xb8, 0xfe, 0x7f, 0xb0, 0x33, // ...............3 + 0x2b, 0x00, 0xff, 0xff, 0x00, 0x4e, 0x02, 0x8b, 0x04, 0x8d, 0x03, 0x22, 0x00, 0x47, 0x01, 0x88, // +....N.....".G.. + 0xff, 0x73, 0x00, 0x00, 0x53, 0x33, 0x40, 0x00, 0x00, 0x02, 0x01, 0xe6, 0xff, 0xf5, 0x02, 0xcc, // .s..S3@......... + 0x05, 0xb0, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x7a, 0x4b, 0xb0, 0x0a, 0x50, 0x58, 0x40, 0x15, 0x00, // .......zK..PX@.. + 0x00, 0x00, 0x01, 0x59, 0x00, 0x01, 0x01, 0x3c, 0x4b, 0x00, 0x02, 0x02, 0x03, 0x5b, 0x00, 0x03, // ...Y...>.... + 0x00, 0xa2, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x03, // ...........^.... + 0x00, 0x01, 0x04, 0x09, 0x00, 0x01, 0x00, 0x16, 0x00, 0x5e, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .........^...... + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x74, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x2e, // .....t.......... + 0x00, 0x82, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x16, 0x00, 0x5e, 0x00, 0x03, // .............^.. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 0x00, 0x54, 0x00, 0xb0, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .......T........ + 0x00, 0x06, 0x00, 0x24, 0x01, 0x04, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x07, 0x00, 0x4a, // ...$...........J + 0x01, 0x28, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x09, 0x00, 0x0c, 0x01, 0x72, 0x00, 0x03, // .(...........r.. + 0x00, 0x01, 0x04, 0x09, 0x00, 0x0b, 0x00, 0x14, 0x01, 0x7e, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, // .........~...... + 0x00, 0x0c, 0x00, 0x26, 0x01, 0x92, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0d, 0x00, 0x5c, // ...&............ + 0x01, 0xb8, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x0e, 0x00, 0x54, 0x02, 0x14, 0x00, 0x43, // ...........T...C + 0x00, 0x6f, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, // .o.p.y.r.i.g.h.t + 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x35, 0x00, 0x20, 0x00, 0x47, 0x00, 0x6f, // . .2.0.1.5. .G.o + 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x49, 0x00, 0x6e, 0x00, 0x63, // .o.g.l.e. .I.n.c + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x41, 0x00, 0x6c, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x52, 0x00, 0x69, // ... .A.l.l. .R.i + 0x00, 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x73, 0x00, 0x20, 0x00, 0x52, 0x00, 0x65, 0x00, 0x73, // .g.h.t.s. .R.e.s + 0x00, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x52, 0x00, 0x6f, // .e.r.v.e.d...R.o + 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, // .b.o.t.o. .M.o.n + 0x00, 0x6f, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, // .o.R.e.g.u.l.a.r + 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x3a, 0x00, 0x52, // .G.o.o.g.l.e.:.R + 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x6f, // .o.b.o.t.o. .M.o + 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x3a, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x35, 0x00, 0x56, // .n.o.:.2.0.1.5.V + 0x00, 0x65, 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x32, // .e.r.s.i.o.n. .2 + 0x00, 0x2e, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x39, 0x00, 0x38, 0x00, 0x36, 0x00, 0x3b, // ...0.0.0.9.8.6.; + 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x35, 0x00, 0x3b, 0x00, 0x20, 0x00, 0x74, // . .2.0.1.5.;. .t + 0x00, 0x74, 0x00, 0x66, 0x00, 0x61, 0x00, 0x75, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x68, 0x00, 0x69, // .t.f.a.u.t.o.h.i + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x28, 0x00, 0x76, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x33, // .n.t. .(.v.1...3 + 0x00, 0x29, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x4d, // .).R.o.b.o.t.o.M + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, // .o.n.o.-.R.e.g.u + 0x00, 0x6c, 0x00, 0x61, 0x00, 0x72, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x6f, 0x00, 0x74, // .l.a.r.R.o.b.o.t + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x69, // .o. .M.o.n.o. .i + 0x00, 0x73, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0x61, 0x00, 0x64, // .s. .a. .t.r.a.d + 0x00, 0x65, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x20, 0x00, 0x6f, 0x00, 0x66, // .e.m.a.r.k. .o.f + 0x00, 0x20, 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x2e, // . .G.o.o.g.l.e.. + 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x47, 0x00, 0x6f, // .G.o.o.g.l.e.G.o + 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, // .o.g.l.e...c.o.m + 0x00, 0x43, 0x00, 0x68, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, 0x00, 0x69, 0x00, 0x61, // .C.h.r.i.s.t.i.a + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x52, 0x00, 0x6f, 0x00, 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x74, // .n. .R.o.b.e.r.t + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, // .s.o.n.L.i.c.e.n + 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x65, // .s.e.d. .u.n.d.e + 0x00, 0x72, 0x00, 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x41, 0x00, 0x70, // .r. .t.h.e. .A.p + 0x00, 0x61, 0x00, 0x63, 0x00, 0x68, 0x00, 0x65, 0x00, 0x20, 0x00, 0x4c, 0x00, 0x69, 0x00, 0x63, // .a.c.h.e. .L.i.c + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x56, 0x00, 0x65, // .e.n.s.e.,. .V.e + 0x00, 0x72, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x32, 0x00, 0x2e, // .r.s.i.o.n. .2.. + 0x00, 0x30, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, // .0.h.t.t.p.:././ + 0x00, 0x77, 0x00, 0x77, 0x00, 0x77, 0x00, 0x2e, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, 0x00, 0x63, // .w.w.w...a.p.a.c + 0x00, 0x68, 0x00, 0x65, 0x00, 0x2e, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x6c, // .h.e...o.r.g./.l + 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x73, 0x00, 0x2f, // .i.c.e.n.s.e.s./ + 0x00, 0x4c, 0x00, 0x49, 0x00, 0x43, 0x00, 0x45, 0x00, 0x4e, 0x00, 0x53, 0x00, 0x45, 0x00, 0x2d, // .L.I.C.E.N.S.E.- + 0x00, 0x32, 0x00, 0x2e, 0x00, 0x30, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .2...0.......... + 0xff, 0x6a, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // .j.d............ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x11, 0x00, 0x00, 0x01, 0x02, 0x00, 0x02, // ................ + 0x00, 0x03, 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, // .,.-.../.0.1.2.3 + 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x3a, 0x00, 0x3b, // .4.5.6.7.8.9.:.; + 0x00, 0x3c, 0x00, 0x3d, 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x40, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, // .<.=.>.?.@.A.B.C + 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x4b, // .D.E.F.G.H.I.J.K + 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x4e, 0x00, 0x4f, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, // .L.M.N.O.P.Q.R.S + 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5a, 0x00, 0x5b, // .T.U.V.W.X.Y.Z.[ + 0x00, 0x5c, 0x00, 0x5d, 0x00, 0x5e, 0x00, 0x5f, 0x00, 0x60, 0x00, 0x61, 0x00, 0xa3, 0x00, 0x84, // ...].^._.`.a.... + 0x00, 0x85, 0x00, 0xbd, 0x00, 0x96, 0x00, 0xe8, 0x00, 0x86, 0x00, 0x8e, 0x00, 0x8b, 0x00, 0x9d, // ................ + 0x00, 0xa9, 0x00, 0xa4, 0x00, 0x8a, 0x01, 0x03, 0x00, 0x83, 0x00, 0x93, 0x00, 0xf2, 0x00, 0xf3, // ................ + 0x00, 0x8d, 0x00, 0x97, 0x00, 0x88, 0x01, 0x04, 0x00, 0xde, 0x00, 0xf1, 0x00, 0x9e, 0x00, 0xaa, // ................ + 0x00, 0xf5, 0x00, 0xf4, 0x00, 0xf6, 0x00, 0xa2, 0x00, 0x90, 0x00, 0xf0, 0x00, 0x91, 0x00, 0xed, // ................ + 0x00, 0x89, 0x00, 0xa0, 0x00, 0xea, 0x00, 0xb8, 0x00, 0xa1, 0x00, 0xee, 0x01, 0x05, 0x00, 0xd7, // ................ + 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x00, 0xe2, 0x00, 0xe3, 0x01, 0x09, 0x01, 0x0a, 0x00, 0xb0, // ................ + 0x00, 0xb1, 0x01, 0x0b, 0x00, 0xa6, 0x01, 0x0c, 0x01, 0x0d, 0x01, 0x0e, 0x01, 0x0f, 0x01, 0x10, // ................ + 0x01, 0x11, 0x00, 0xd8, 0x00, 0xe1, 0x00, 0xdb, 0x00, 0xdc, 0x00, 0xdd, 0x00, 0xe0, 0x00, 0xd9, // ................ + 0x00, 0xdf, 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, 0x00, 0x9f, 0x01, 0x25, 0x01, 0x26, 0x01, 0x27, // .!.".#.$...%.&.' + 0x01, 0x28, 0x01, 0x29, 0x01, 0x2a, 0x01, 0x2b, 0x01, 0x2c, 0x01, 0x2d, 0x01, 0x2e, 0x01, 0x2f, // .(.).*.+.,.-.../ + 0x00, 0x9b, 0x01, 0x30, 0x01, 0x31, 0x01, 0x32, 0x01, 0x33, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, // ...0.1.2.3.4.5.6 + 0x01, 0x37, 0x01, 0x38, 0x01, 0x39, 0x01, 0x3a, 0x01, 0x3b, 0x01, 0x3c, 0x01, 0x3d, 0x01, 0x3e, // .7.8.9.:.;.<.=.> + 0x01, 0x3f, 0x01, 0x40, 0x01, 0x41, 0x01, 0x42, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, // .?.@.A.B.C.D.E.F + 0x01, 0x47, 0x01, 0x48, 0x01, 0x49, 0x01, 0x4a, 0x01, 0x4b, 0x01, 0x4c, 0x01, 0x4d, 0x01, 0x4e, // .G.H.I.J.K.L.M.N + 0x01, 0x4f, 0x01, 0x50, 0x01, 0x51, 0x01, 0x52, 0x01, 0x53, 0x01, 0x54, 0x01, 0x55, 0x01, 0x56, // .O.P.Q.R.S.T.U.V + 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5a, 0x01, 0x5b, 0x01, 0x5c, 0x01, 0x5d, 0x01, 0x5e, // .W.X.Y.Z.[...].^ + 0x01, 0x5f, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64, 0x01, 0x65, 0x01, 0x66, // ._.`.a.b.c.d.e.f + 0x01, 0x67, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6a, 0x01, 0x6b, 0x01, 0x6c, 0x01, 0x6d, 0x01, 0x6e, // .g.h.i.j.k.l.m.n + 0x01, 0x6f, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x76, // .o.p.q.r.s.t.u.v + 0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7a, 0x01, 0x7b, 0x01, 0x7c, 0x01, 0x7d, 0x01, 0x7e, // .w.x.y.z.{.|.}.~ + 0x01, 0x7f, 0x01, 0x80, 0x01, 0x81, 0x01, 0x82, 0x01, 0x83, 0x01, 0x84, 0x01, 0x85, 0x01, 0x86, // ................ + 0x01, 0x87, 0x01, 0x88, 0x01, 0x89, 0x01, 0x8a, 0x01, 0x8b, 0x01, 0x8c, 0x01, 0x8d, 0x01, 0x8e, // ................ + 0x01, 0x8f, 0x01, 0x90, 0x01, 0x91, 0x01, 0x92, 0x01, 0x93, 0x01, 0x94, 0x01, 0x95, 0x01, 0x96, // ................ + 0x01, 0x97, 0x01, 0x98, 0x01, 0x99, 0x01, 0x9a, 0x01, 0x9b, 0x01, 0x9c, 0x01, 0x9d, 0x01, 0x9e, // ................ + 0x01, 0x9f, 0x01, 0xa0, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, // ................ + 0x01, 0xa7, 0x01, 0xa8, 0x01, 0xa9, 0x01, 0xaa, 0x01, 0xab, 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, // ................ + 0x01, 0xaf, 0x01, 0xb0, 0x01, 0xb1, 0x01, 0xb2, 0x01, 0xb3, 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xb6, // ................ + 0x01, 0xb7, 0x01, 0xb8, 0x01, 0xb9, 0x01, 0xba, 0x01, 0xbb, 0x01, 0xbc, 0x01, 0xbd, 0x01, 0xbe, // ................ + 0x01, 0xbf, 0x01, 0xc0, 0x01, 0xc1, 0x01, 0xc2, 0x01, 0xc3, 0x01, 0xc4, 0x01, 0xc5, 0x01, 0xc6, // ................ + 0x01, 0xc7, 0x01, 0xc8, 0x01, 0xc9, 0x01, 0xca, 0x01, 0xcb, 0x01, 0xcc, 0x01, 0xcd, 0x01, 0xce, // ................ + 0x01, 0xcf, 0x00, 0xb2, 0x00, 0xb3, 0x01, 0xd0, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xc4, 0x01, 0xd1, // ................ + 0x00, 0xb4, 0x00, 0xb5, 0x00, 0xc5, 0x00, 0x82, 0x00, 0xc2, 0x00, 0x87, 0x01, 0xd2, 0x00, 0xab, // ................ + 0x00, 0xc6, 0x00, 0xbe, 0x00, 0xbf, 0x00, 0xbc, 0x01, 0xd3, 0x01, 0xd4, 0x01, 0xd5, 0x01, 0xd6, // ................ + 0x01, 0xd7, 0x01, 0xd8, 0x01, 0xd9, 0x01, 0xda, 0x00, 0x8c, 0x01, 0xdb, 0x01, 0xdc, 0x01, 0xdd, // ................ + 0x01, 0xde, 0x01, 0xdf, 0x00, 0x98, 0x00, 0x9a, 0x00, 0x99, 0x00, 0xef, 0x00, 0xa5, 0x00, 0x92, // ................ + 0x00, 0x9c, 0x00, 0xa7, 0x00, 0x8f, 0x00, 0x94, 0x00, 0x95, 0x00, 0xb9, 0x01, 0xe0, 0x01, 0xe1, // ................ + 0x01, 0xe2, 0x01, 0xe3, 0x01, 0xe4, 0x01, 0xe5, 0x01, 0xe6, 0x01, 0xe7, 0x01, 0xe8, 0x01, 0xe9, // ................ + 0x01, 0xea, 0x01, 0xeb, 0x01, 0xec, 0x01, 0xed, 0x01, 0xee, 0x01, 0xef, 0x01, 0xf0, 0x01, 0xf1, // ................ + 0x01, 0xf2, 0x01, 0xf3, 0x01, 0xf4, 0x01, 0xf5, 0x01, 0xf6, 0x01, 0xf7, 0x01, 0xf8, 0x01, 0xf9, // ................ + 0x01, 0xfa, 0x01, 0xfb, 0x01, 0xfc, 0x01, 0xfd, 0x01, 0xfe, 0x01, 0xff, 0x02, 0x00, 0x02, 0x01, // ................ + 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08, 0x02, 0x09, // ................ + 0x02, 0x0a, 0x02, 0x0b, 0x02, 0x0c, 0x02, 0x0d, 0x02, 0x0e, 0x02, 0x0f, 0x02, 0x10, 0x02, 0x11, // ................ + 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x02, 0x18, 0x02, 0x19, // ................ + 0x02, 0x1a, 0x02, 0x1b, 0x02, 0x1c, 0x02, 0x1d, 0x02, 0x1e, 0x02, 0x1f, 0x02, 0x20, 0x02, 0x21, // ............. .! + 0x02, 0x22, 0x02, 0x23, 0x02, 0x24, 0x02, 0x25, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28, 0x02, 0x29, // .".#.$.%.&.'.(.) + 0x02, 0x2a, 0x02, 0x2b, 0x02, 0x2c, 0x02, 0x2d, 0x02, 0x2e, 0x02, 0x2f, 0x02, 0x30, 0x02, 0x31, // .*.+.,.-.../.0.1 + 0x00, 0xac, 0x02, 0x32, 0x02, 0x33, 0x00, 0xe9, 0x02, 0x34, 0x02, 0x35, 0x02, 0x36, 0x00, 0xad, // ...2.3...4.5.6.. + 0x00, 0xc9, 0x00, 0xc7, 0x00, 0xae, 0x00, 0x62, 0x00, 0x63, 0x02, 0x37, 0x00, 0x64, 0x00, 0xcb, // .......b.c.7.d.. + 0x00, 0x65, 0x00, 0xc8, 0x00, 0xca, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcd, 0x00, 0xce, 0x00, 0x66, // .e.............f + 0x00, 0xd3, 0x00, 0xd0, 0x00, 0xd1, 0x00, 0xaf, 0x00, 0x67, 0x00, 0xd6, 0x00, 0xd4, 0x00, 0xd5, // .........g...... + 0x00, 0x68, 0x00, 0xeb, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x6d, 0x00, 0x6c, 0x00, 0x6e, // .h...j.i.k.m.l.n + 0x02, 0x38, 0x00, 0x6f, 0x00, 0x71, 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x75, 0x00, 0x74, // .8.o.q.p.r.s.u.t + 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x7b, 0x00, 0x7d, 0x00, 0x7c, // .v.w.x.z.y.{.}.| + 0x00, 0x7f, 0x00, 0x7e, 0x00, 0x80, 0x00, 0x81, 0x00, 0xec, 0x00, 0xba, 0x02, 0x39, 0x02, 0x3a, // ...~.........9.: + 0x02, 0x3b, 0x02, 0x3c, 0x02, 0x3d, 0x02, 0x3e, 0x00, 0xfd, 0x00, 0xfe, 0x02, 0x3f, 0x02, 0x40, // .;.<.=.>.....?.@ + 0x02, 0x41, 0x02, 0x42, 0x00, 0xff, 0x01, 0x00, 0x02, 0x43, 0x02, 0x44, 0x02, 0x45, 0x02, 0x46, // .A.B.....C.D.E.F + 0x02, 0x47, 0x02, 0x48, 0x02, 0x49, 0x02, 0x4a, 0x02, 0x4b, 0x02, 0x4c, 0x02, 0x4d, 0x02, 0x4e, // .G.H.I.J.K.L.M.N + 0x02, 0x4f, 0x02, 0x50, 0x00, 0xf8, 0x00, 0xf9, 0x02, 0x51, 0x02, 0x52, 0x02, 0x53, 0x02, 0x54, // .O.P.....Q.R.S.T + 0x02, 0x55, 0x02, 0x56, 0x02, 0x57, 0x02, 0x58, 0x02, 0x59, 0x02, 0x5a, 0x02, 0x5b, 0x02, 0x5c, // .U.V.W.X.Y.Z.[.. + 0x02, 0x5d, 0x02, 0x5e, 0x02, 0x5f, 0x02, 0x60, 0x02, 0x61, 0x02, 0x62, 0x02, 0x63, 0x02, 0x64, // .].^._.`.a.b.c.d + 0x02, 0x65, 0x02, 0x66, 0x02, 0x67, 0x02, 0x68, 0x02, 0x69, 0x02, 0x6a, 0x02, 0x6b, 0x02, 0x6c, // .e.f.g.h.i.j.k.l + 0x02, 0x6d, 0x02, 0x6e, 0x02, 0x6f, 0x02, 0x70, 0x02, 0x71, 0x02, 0x72, 0x02, 0x73, 0x02, 0x74, // .m.n.o.p.q.r.s.t + 0x02, 0x75, 0x02, 0x76, 0x02, 0x77, 0x02, 0x78, 0x02, 0x79, 0x02, 0x7a, 0x02, 0x7b, 0x02, 0x7c, // .u.v.w.x.y.z.{.| + 0x02, 0x7d, 0x02, 0x7e, 0x02, 0x7f, 0x02, 0x80, 0x02, 0x81, 0x02, 0x82, 0x00, 0xfb, 0x00, 0xfc, // .}.~............ + 0x02, 0x83, 0x02, 0x84, 0x00, 0xe4, 0x00, 0xe5, 0x02, 0x85, 0x02, 0x86, 0x02, 0x87, 0x02, 0x88, // ................ + 0x02, 0x89, 0x02, 0x8a, 0x02, 0x8b, 0x02, 0x8c, 0x02, 0x8d, 0x02, 0x8e, 0x02, 0x8f, 0x02, 0x90, // ................ + 0x02, 0x91, 0x02, 0x92, 0x02, 0x93, 0x02, 0x94, 0x02, 0x95, 0x02, 0x96, 0x02, 0x97, 0x02, 0x98, // ................ + 0x02, 0x99, 0x02, 0x9a, 0x02, 0x9b, 0x00, 0xbb, 0x02, 0x9c, 0x02, 0x9d, 0x02, 0x9e, 0x02, 0x9f, // ................ + 0x00, 0xe6, 0x00, 0xe7, 0x02, 0xa0, 0x02, 0xa1, 0x02, 0xa2, 0x02, 0xa3, 0x02, 0xa4, 0x02, 0xa5, // ................ + 0x02, 0xa6, 0x02, 0xa7, 0x02, 0xa8, 0x02, 0xa9, 0x02, 0xaa, 0x02, 0xab, 0x02, 0xac, 0x02, 0xad, // ................ + 0x02, 0xae, 0x02, 0xaf, 0x02, 0xb0, 0x02, 0xb1, 0x02, 0xb2, 0x02, 0xb3, 0x02, 0xb4, 0x02, 0xb5, // ................ + 0x02, 0xb6, 0x02, 0xb7, 0x02, 0xb8, 0x02, 0xb9, 0x02, 0xba, 0x02, 0xbb, 0x02, 0xbc, 0x02, 0xbd, // ................ + 0x02, 0xbe, 0x02, 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02, 0xc3, 0x02, 0xc4, 0x02, 0xc5, // ................ + 0x02, 0xc6, 0x02, 0xc7, 0x02, 0xc8, 0x02, 0xc9, 0x02, 0xca, 0x02, 0xcb, 0x02, 0xcc, 0x02, 0xcd, // ................ + 0x02, 0xce, 0x02, 0xcf, 0x02, 0xd0, 0x02, 0xd1, 0x02, 0xd2, 0x02, 0xd3, 0x02, 0xd4, 0x02, 0xd5, // ................ + 0x02, 0xd6, 0x02, 0xd7, 0x02, 0xd8, 0x02, 0xd9, 0x02, 0xda, 0x02, 0xdb, 0x02, 0xdc, 0x02, 0xdd, // ................ + 0x02, 0xde, 0x02, 0xdf, 0x02, 0xe0, 0x02, 0xe1, 0x02, 0xe2, 0x02, 0xe3, 0x02, 0xe4, 0x02, 0xe5, // ................ + 0x02, 0xe6, 0x02, 0xe7, 0x02, 0xe8, 0x02, 0xe9, 0x02, 0xea, 0x02, 0xeb, 0x02, 0xec, 0x02, 0xed, // ................ + 0x02, 0xee, 0x02, 0xef, 0x02, 0xf0, 0x02, 0xf1, 0x02, 0xf2, 0x02, 0xf3, 0x02, 0xf4, 0x02, 0xf5, // ................ + 0x02, 0xf6, 0x02, 0xf7, 0x02, 0xf8, 0x02, 0xf9, 0x02, 0xfa, 0x02, 0xfb, 0x02, 0xfc, 0x02, 0xfd, // ................ + 0x02, 0xfe, 0x02, 0xff, 0x03, 0x00, 0x03, 0x01, 0x03, 0x02, 0x03, 0x03, 0x03, 0x04, 0x03, 0x05, // ................ + 0x03, 0x06, 0x03, 0x07, 0x03, 0x08, 0x03, 0x09, 0x03, 0x0a, 0x03, 0x0b, 0x03, 0x0c, 0x03, 0x0d, // ................ + 0x03, 0x0e, 0x03, 0x0f, 0x03, 0x10, 0x03, 0x11, 0x03, 0x12, 0x03, 0x13, 0x03, 0x14, 0x03, 0x15, // ................ + 0x03, 0x16, 0x03, 0x17, 0x03, 0x18, 0x03, 0x19, 0x03, 0x1a, 0x03, 0x1b, 0x03, 0x1c, 0x03, 0x1d, // ................ + 0x03, 0x1e, 0x03, 0x1f, 0x03, 0x20, 0x03, 0x21, 0x03, 0x22, 0x03, 0x23, 0x03, 0x24, 0x03, 0x25, // ..... .!.".#.$.% + 0x03, 0x26, 0x03, 0x27, 0x03, 0x28, 0x03, 0x29, 0x03, 0x2a, 0x03, 0x2b, 0x03, 0x2c, 0x03, 0x2d, // .&.'.(.).*.+.,.- + 0x03, 0x2e, 0x03, 0x2f, 0x03, 0x30, 0x03, 0x31, 0x03, 0x32, 0x03, 0x33, 0x03, 0x34, 0x03, 0x35, // .../.0.1.2.3.4.5 + 0x03, 0x36, 0x03, 0x37, 0x03, 0x38, 0x03, 0x39, 0x03, 0x3a, 0x03, 0x3b, 0x03, 0x3c, 0x03, 0x3d, // .6.7.8.9.:.;.<.= + 0x03, 0x3e, 0x03, 0x3f, 0x03, 0x40, 0x03, 0x41, 0x03, 0x42, 0x03, 0x43, 0x03, 0x44, 0x03, 0x45, // .>.?.@.A.B.C.D.E + 0x03, 0x46, 0x03, 0x47, 0x03, 0x48, 0x03, 0x49, 0x03, 0x4a, 0x03, 0x4b, 0x03, 0x4c, 0x03, 0x4d, // .F.G.H.I.J.K.L.M + 0x03, 0x4e, 0x03, 0x4f, 0x03, 0x50, 0x03, 0x51, 0x03, 0x52, 0x03, 0x53, 0x03, 0x54, 0x03, 0x55, // .N.O.P.Q.R.S.T.U + 0x03, 0x56, 0x03, 0x57, 0x03, 0x58, 0x03, 0x59, 0x03, 0x5a, 0x03, 0x5b, 0x03, 0x5c, 0x03, 0x5d, // .V.W.X.Y.Z.[...] + 0x03, 0x5e, 0x03, 0x5f, 0x03, 0x60, 0x03, 0x61, 0x03, 0x62, 0x03, 0x63, 0x03, 0x64, 0x03, 0x65, // .^._.`.a.b.c.d.e + 0x03, 0x66, 0x03, 0x67, 0x03, 0x68, 0x03, 0x69, 0x03, 0x6a, 0x03, 0x6b, 0x03, 0x6c, 0x03, 0x6d, // .f.g.h.i.j.k.l.m + 0x03, 0x6e, 0x03, 0x6f, 0x03, 0x70, 0x03, 0x71, 0x03, 0x72, 0x03, 0x73, 0x03, 0x74, 0x03, 0x75, // .n.o.p.q.r.s.t.u + 0x03, 0x76, 0x03, 0x77, 0x03, 0x78, 0x03, 0x79, 0x03, 0x7a, 0x03, 0x7b, 0x03, 0x7c, 0x03, 0x7d, // .v.w.x.y.z.{.|.} + 0x03, 0x7e, 0x03, 0x7f, 0x03, 0x80, 0x03, 0x81, 0x03, 0x82, 0x03, 0x83, 0x03, 0x84, 0x03, 0x85, // .~.............. + 0x03, 0x86, 0x03, 0x87, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8a, 0x03, 0x8b, 0x03, 0x8c, 0x03, 0x8d, // ................ + 0x03, 0x8e, 0x03, 0x8f, 0x03, 0x90, 0x03, 0x91, 0x03, 0x92, 0x03, 0x93, 0x03, 0x94, 0x03, 0x95, // ................ + 0x03, 0x96, 0x03, 0x97, 0x03, 0x98, 0x03, 0x99, 0x03, 0x9a, 0x03, 0x9b, 0x03, 0x9c, 0x03, 0x9d, // ................ + 0x03, 0x9e, 0x03, 0x9f, 0x03, 0xa0, 0x03, 0xa1, 0x03, 0xa2, 0x03, 0xa3, 0x03, 0xa4, 0x03, 0xa5, // ................ + 0x03, 0xa6, 0x03, 0xa7, 0x03, 0xa8, 0x03, 0xa9, 0x03, 0xaa, 0x03, 0xab, 0x03, 0xac, 0x03, 0xad, // ................ + 0x03, 0xae, 0x03, 0xaf, 0x03, 0xb0, 0x03, 0xb1, 0x03, 0xb2, 0x03, 0xb3, 0x03, 0xb4, 0x03, 0xb5, // ................ + 0x03, 0xb6, 0x03, 0xb7, 0x03, 0xb8, 0x03, 0xb9, 0x03, 0xba, 0x03, 0xbb, 0x03, 0xbc, 0x03, 0xbd, // ................ + 0x03, 0xbe, 0x03, 0xbf, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xc2, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xc5, // ................ + 0x03, 0xc6, 0x03, 0xc7, 0x03, 0xc8, 0x03, 0xc9, 0x03, 0xca, 0x03, 0xcb, 0x03, 0xcc, 0x03, 0xcd, // ................ + 0x03, 0xce, 0x03, 0xcf, 0x03, 0xd0, 0x03, 0xd1, 0x03, 0xd2, 0x03, 0xd3, 0x03, 0xd4, 0x03, 0xd5, // ................ + 0x03, 0xd6, 0x03, 0xd7, 0x03, 0xd8, 0x03, 0xd9, 0x03, 0xda, 0x03, 0xdb, 0x03, 0xdc, 0x03, 0xdd, // ................ + 0x03, 0xde, 0x03, 0xdf, 0x03, 0xe0, 0x03, 0xe1, 0x03, 0xe2, 0x03, 0xe3, 0x03, 0xe4, 0x03, 0xe5, // ................ + 0x03, 0xe6, 0x03, 0xe7, 0x03, 0xe8, 0x03, 0xe9, 0x03, 0xea, 0x03, 0xeb, 0x03, 0xec, 0x03, 0xed, // ................ + 0x03, 0xee, 0x03, 0xef, 0x03, 0xf0, 0x03, 0xf1, 0x03, 0xf2, 0x03, 0xf3, 0x03, 0xf4, 0x03, 0xf5, // ................ + 0x03, 0xf6, 0x03, 0xf7, 0x03, 0xf8, 0x03, 0xf9, 0x03, 0xfa, 0x03, 0xfb, 0x03, 0xfc, 0x03, 0xfd, // ................ + 0x03, 0xfe, 0x03, 0xff, 0x04, 0x00, 0x04, 0x01, 0x04, 0x02, 0x04, 0x03, 0x04, 0x04, 0x04, 0x05, // ................ + 0x04, 0x06, 0x04, 0x07, 0x04, 0x08, 0x04, 0x09, 0x04, 0x0a, 0x04, 0x0b, 0x04, 0x0c, 0x04, 0x0d, // ................ + 0x04, 0x0e, 0x04, 0x0f, 0x04, 0x10, 0x04, 0x11, 0x04, 0x12, 0x04, 0x13, 0x04, 0x14, 0x04, 0x15, // ................ + 0x04, 0x16, 0x00, 0xf7, 0x04, 0x17, 0x04, 0x18, 0x04, 0x19, 0x00, 0x04, 0x04, 0x4e, 0x55, 0x4c, // .............NUL + 0x4c, 0x06, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x63, // L.macron.periodc + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x64, 0x04, 0x48, 0x62, 0x61, 0x72, 0x02, 0x49, 0x4a, 0x02, // entered.Hbar.IJ. + 0x69, 0x6a, 0x0c, 0x6b, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x6c, 0x61, 0x6e, 0x64, 0x69, 0x63, 0x03, // ij.kgreenlandic. + 0x45, 0x6e, 0x67, 0x03, 0x65, 0x6e, 0x67, 0x05, 0x6c, 0x6f, 0x6e, 0x67, 0x73, 0x05, 0x4f, 0x68, // Eng.eng.longs.Oh + 0x6f, 0x72, 0x6e, 0x05, 0x6f, 0x68, 0x6f, 0x72, 0x6e, 0x05, 0x55, 0x68, 0x6f, 0x72, 0x6e, 0x05, // orn.ohorn.Uhorn. + 0x75, 0x68, 0x6f, 0x72, 0x6e, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x33, 0x37, 0x05, 0x73, 0x63, // uhorn.uni0237.sc + 0x68, 0x77, 0x61, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x46, 0x33, 0x09, 0x67, 0x72, 0x61, 0x76, // hwa.uni02F3.grav + 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x09, 0x61, 0x63, 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x09, // ecomb.acutecomb. + 0x74, 0x69, 0x6c, 0x64, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x04, 0x68, 0x6f, 0x6f, 0x6b, 0x07, 0x75, // tildecomb.hook.u + 0x6e, 0x69, 0x30, 0x33, 0x30, 0x46, 0x08, 0x64, 0x6f, 0x74, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x05, // ni030F.dotbelow. + 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0d, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x6f, // tonos.dieresisto + 0x6e, 0x6f, 0x73, 0x09, 0x61, 0x6e, 0x6f, 0x74, 0x65, 0x6c, 0x65, 0x69, 0x61, 0x05, 0x47, 0x61, // nos.anoteleia.Ga + 0x6d, 0x6d, 0x61, 0x05, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x05, 0x54, 0x68, 0x65, 0x74, 0x61, 0x06, // mma.Delta.Theta. + 0x4c, 0x61, 0x6d, 0x62, 0x64, 0x61, 0x02, 0x58, 0x69, 0x02, 0x50, 0x69, 0x05, 0x53, 0x69, 0x67, // Lambda.Xi.Pi.Sig + 0x6d, 0x61, 0x03, 0x50, 0x68, 0x69, 0x03, 0x50, 0x73, 0x69, 0x05, 0x61, 0x6c, 0x70, 0x68, 0x61, // ma.Phi.Psi.alpha + 0x04, 0x62, 0x65, 0x74, 0x61, 0x05, 0x67, 0x61, 0x6d, 0x6d, 0x61, 0x05, 0x64, 0x65, 0x6c, 0x74, // .beta.gamma.delt + 0x61, 0x07, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x04, 0x7a, 0x65, 0x74, 0x61, 0x03, 0x65, // a.epsilon.zeta.e + 0x74, 0x61, 0x05, 0x74, 0x68, 0x65, 0x74, 0x61, 0x04, 0x69, 0x6f, 0x74, 0x61, 0x06, 0x6c, 0x61, // ta.theta.iota.la + 0x6d, 0x62, 0x64, 0x61, 0x02, 0x78, 0x69, 0x03, 0x72, 0x68, 0x6f, 0x06, 0x73, 0x69, 0x67, 0x6d, // mbda.xi.rho.sigm + 0x61, 0x31, 0x05, 0x73, 0x69, 0x67, 0x6d, 0x61, 0x03, 0x74, 0x61, 0x75, 0x07, 0x75, 0x70, 0x73, // a1.sigma.tau.ups + 0x69, 0x6c, 0x6f, 0x6e, 0x03, 0x70, 0x68, 0x69, 0x03, 0x70, 0x73, 0x69, 0x05, 0x6f, 0x6d, 0x65, // ilon.phi.psi.ome + 0x67, 0x61, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, // ga.uni03D1.uni03 + 0x44, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, 0x44, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // D2.uni03D6.uni04 + 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 02.uni0404.uni04 + 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 09.uni040A.uni04 + 0x30, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 0B.uni040F.uni04 + 0x31, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 11.uni0414.uni04 + 0x31, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 16.uni0417.uni04 + 0x31, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 18.uni041B.uni04 + 0x32, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 23.uni0426.uni04 + 0x32, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 27.uni0428.uni04 + 0x32, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 29.uni042A.uni04 + 0x32, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 2B.uni042C.uni04 + 0x32, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 2D.uni042E.uni04 + 0x32, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 2F.uni0431.uni04 + 0x33, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 32.uni0433.uni04 + 0x33, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 34.uni0436.uni04 + 0x33, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 37.uni0438.uni04 + 0x33, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 3A.uni043B.uni04 + 0x33, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 3C.uni043D.uni04 + 0x33, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 3F.uni0442.uni04 + 0x34, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 44.uni0446.uni04 + 0x34, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 47.uni0448.uni04 + 0x34, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 49.uni044A.uni04 + 0x34, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 4B.uni044C.uni04 + 0x34, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 4D.uni044E.uni04 + 0x34, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 4F.uni0452.uni04 + 0x35, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 54.uni0459.uni04 + 0x35, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 5A.uni045B.uni04 + 0x35, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 5F.uni0460.uni04 + 0x36, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 61.uni0463.uni04 + 0x36, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 64.uni0465.uni04 + 0x36, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 66.uni0467.uni04 + 0x36, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 68.uni0469.uni04 + 0x36, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 6A.uni046B.uni04 + 0x36, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 6C.uni046D.uni04 + 0x36, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 6E.uni046F.uni04 + 0x37, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 72.uni0473.uni04 + 0x37, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 74.uni0475.uni04 + 0x37, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 78.uni0479.uni04 + 0x37, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 7A.uni047B.uni04 + 0x37, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 7C.uni047D.uni04 + 0x37, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 7E.uni047F.uni04 + 0x38, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 80.uni0481.uni04 + 0x38, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 82.uni0483.uni04 + 0x38, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 84.uni0485.uni04 + 0x38, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 86.uni0488.uni04 + 0x38, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 89.uni048E.uni04 + 0x38, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 8F.uni0490.uni04 + 0x39, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 91.uni0494.uni04 + 0x39, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 95.uni049C.uni04 + 0x39, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 9D.uni04A0.uni04 + 0x41, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // A1.uni04A4.uni04 + 0x41, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // A5.uni04A6.uni04 + 0x41, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // A7.uni04A8.uni04 + 0x41, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // A9.uni04B4.uni04 + 0x42, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // B5.uni04B8.uni04 + 0x42, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // B9.uni04BA.uni04 + 0x42, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // BC.uni04BD.uni04 + 0x43, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // C3.uni04C4.uni04 + 0x43, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // C7.uni04C8.uni04 + 0x44, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // D8.uni04E0.uni04 + 0x45, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // E1.uni04FA.uni04 + 0x46, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // FB.uni0500.uni05 + 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 02.uni0503.uni05 + 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 04.uni0505.uni05 + 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 06.uni0507.uni05 + 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 08.uni0509.uni05 + 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 0A.uni050B.uni05 + 0x30, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 0C.uni050D.uni05 + 0x30, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // 0E.uni050F.uni05 + 0x31, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 10.uni2000.uni20 + 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 01.uni2002.uni20 + 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 03.uni2004.uni20 + 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 05.uni2006.uni20 + 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 07.uni2008.uni20 + 0x30, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x30, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, // 09.uni200A.uni20 + 0x30, 0x42, 0x0d, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x64, 0x62, 0x6c, // 0B.underscoredbl + 0x0d, 0x71, 0x75, 0x6f, 0x74, 0x65, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x64, 0x07, 0x75, // .quotereversed.u + 0x6e, 0x69, 0x32, 0x30, 0x32, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x37, 0x34, 0x09, 0x6e, // ni2025.uni2074.n + 0x73, 0x75, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x72, 0x04, 0x6c, 0x69, 0x72, 0x61, 0x06, 0x70, 0x65, // superior.lira.pe + 0x73, 0x65, 0x74, 0x61, 0x04, 0x45, 0x75, 0x72, 0x6f, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x31, 0x30, // seta.Euro.uni210 + 0x35, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x31, 0x31, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x31, 0x31, // 5.uni2113.uni211 + 0x36, 0x09, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x64, 0x09, 0x6f, 0x6e, 0x65, 0x65, // 6.estimated.onee + 0x69, 0x67, 0x68, 0x74, 0x68, 0x0c, 0x74, 0x68, 0x72, 0x65, 0x65, 0x65, 0x69, 0x67, 0x68, 0x74, // ighth.threeeight + 0x68, 0x73, 0x0b, 0x66, 0x69, 0x76, 0x65, 0x65, 0x69, 0x67, 0x68, 0x74, 0x68, 0x73, 0x0c, 0x73, // hs.fiveeighths.s + 0x65, 0x76, 0x65, 0x6e, 0x65, 0x69, 0x67, 0x68, 0x74, 0x68, 0x73, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, // eveneighths.comm + 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x45, 0x46, 0x46, 0x07, // aaccent.uniFEFF. + 0x75, 0x6e, 0x69, 0x46, 0x46, 0x46, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x46, 0x46, 0x46, 0x44, 0x09, // uniFFFC.uniFFFD. + 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x07, 0x74, 0x77, 0x6f, 0x2e, 0x73, 0x75, // zero.smcp.two.su + 0x70, 0x13, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x74, 0x69, 0x6c, 0x64, // p.circumflextild + 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x12, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, // ecomb.circumflex + 0x68, 0x6f, 0x6f, 0x6b, 0x63, 0x6f, 0x6d, 0x62, 0x13, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, // hookcomb.circumf + 0x6c, 0x65, 0x78, 0x67, 0x72, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x13, 0x63, 0x69, 0x72, // lexgravecomb.cir + 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x61, 0x63, 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0x62, // cumflexacutecomb + 0x0e, 0x62, 0x72, 0x65, 0x76, 0x65, 0x67, 0x72, 0x61, 0x76, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x11, // .brevegravecomb. + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x74, 0x61, 0x74, // commaaccentrotat + 0x65, 0x06, 0x41, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x42, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, // e.A.smcp.B.smcp. + 0x43, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x44, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x45, 0x2e, // C.smcp.D.smcp.E. + 0x73, 0x6d, 0x63, 0x70, 0x06, 0x46, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x47, 0x2e, 0x73, 0x6d, // smcp.F.smcp.G.sm + 0x63, 0x70, 0x06, 0x48, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x49, 0x2e, 0x73, 0x6d, 0x63, 0x70, // cp.H.smcp.I.smcp + 0x06, 0x4a, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x4b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x4c, // .J.smcp.K.smcp.L + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x4d, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x4e, 0x2e, 0x73, // .smcp.M.smcp.N.s + 0x6d, 0x63, 0x70, 0x06, 0x4f, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x51, 0x2e, 0x73, 0x6d, 0x63, // mcp.O.smcp.Q.smc + 0x70, 0x06, 0x52, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x53, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, // p.R.smcp.S.smcp. + 0x54, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x55, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x56, 0x2e, // T.smcp.U.smcp.V. + 0x73, 0x6d, 0x63, 0x70, 0x06, 0x57, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x58, 0x2e, 0x73, 0x6d, // smcp.W.smcp.X.sm + 0x63, 0x70, 0x06, 0x59, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x06, 0x5a, 0x2e, 0x73, 0x6d, 0x63, 0x70, // cp.Y.smcp.Z.smcp + 0x0d, 0x62, 0x72, 0x65, 0x76, 0x65, 0x68, 0x6f, 0x6f, 0x6b, 0x63, 0x6f, 0x6d, 0x62, 0x08, 0x6f, // .brevehookcomb.o + 0x6e, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, 0x74, 0x77, 0x6f, 0x2e, 0x73, 0x6d, 0x63, 0x70, // ne.smcp.two.smcp + 0x0a, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x66, 0x6f, 0x75, 0x72, // .three.smcp.four + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x66, 0x69, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, // .smcp.five.smcp. + 0x73, 0x69, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x2e, 0x73, // six.smcp.seven.s + 0x6d, 0x63, 0x70, 0x0a, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x6e, // mcp.eight.smcp.n + 0x69, 0x6e, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x73, 0x75, // ine.smcp.zero.su + 0x70, 0x07, 0x6f, 0x6e, 0x65, 0x2e, 0x73, 0x75, 0x70, 0x0e, 0x62, 0x72, 0x65, 0x76, 0x65, 0x61, // p.one.sup.brevea + 0x63, 0x75, 0x74, 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x09, 0x74, 0x68, 0x72, 0x65, 0x65, 0x2e, 0x73, // cutecomb.three.s + 0x75, 0x70, 0x08, 0x66, 0x6f, 0x75, 0x72, 0x2e, 0x73, 0x75, 0x70, 0x08, 0x66, 0x69, 0x76, 0x65, // up.four.sup.five + 0x2e, 0x73, 0x75, 0x70, 0x07, 0x73, 0x69, 0x78, 0x2e, 0x73, 0x75, 0x70, 0x09, 0x73, 0x65, 0x76, // .sup.six.sup.sev + 0x65, 0x6e, 0x2e, 0x73, 0x75, 0x70, 0x09, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x73, 0x75, 0x70, // en.sup.eight.sup + 0x08, 0x6e, 0x69, 0x6e, 0x65, 0x2e, 0x73, 0x75, 0x70, 0x08, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x62, // .nine.sup.crossb + 0x61, 0x72, 0x09, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x63, 0x75, 0x74, 0x65, 0x09, 0x64, 0x61, 0x73, // ar.ringacute.das + 0x69, 0x61, 0x6f, 0x78, 0x69, 0x61, 0x0e, 0x62, 0x72, 0x65, 0x76, 0x65, 0x74, 0x69, 0x6c, 0x64, // iaoxia.brevetild + 0x65, 0x63, 0x6f, 0x6d, 0x62, 0x0b, 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x74, 0x69, // ecomb.cyrillicti + 0x63, 0x10, 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x68, 0x6f, 0x6f, 0x6b, 0x6c, 0x65, // c.cyrillichookle + 0x66, 0x74, 0x0c, 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x68, 0x6f, 0x6f, 0x6b, 0x05, // ft.cyrillichook. + 0x67, 0x2e, 0x61, 0x6c, 0x74, 0x0e, 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x69, 0x67, 0x68, 0x74, // g.alt.largeright + 0x68, 0x6f, 0x6f, 0x6b, 0x05, 0x69, 0x2e, 0x61, 0x6c, 0x74, 0x05, 0x6c, 0x2e, 0x61, 0x6c, 0x74, // hook.i.alt.l.alt + 0x08, 0x6f, 0x6e, 0x65, 0x2e, 0x6c, 0x6e, 0x75, 0x6d, 0x0a, 0x73, 0x65, 0x76, 0x65, 0x6e, 0x2e, // .one.lnum.seven. + 0x6c, 0x6e, 0x75, 0x6d, 0x06, 0x50, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x07, 0x63, 0x68, 0x69, 0x2e, // lnum.P.smcp.chi. + 0x61, 0x6c, 0x74, 0x05, 0x52, 0x2e, 0x61, 0x6c, 0x74, 0x05, 0x4b, 0x2e, 0x61, 0x6c, 0x74, 0x04, // alt.R.alt.K.alt. + 0x69, 0x2e, 0x69, 0x74, 0x04, 0x6c, 0x2e, 0x69, 0x74, 0x07, 0x6f, 0x6e, 0x65, 0x2e, 0x61, 0x6c, // i.it.l.it.one.al + 0x74, 0x06, 0x61, 0x74, 0x2e, 0x61, 0x6c, 0x74, 0x0d, 0x61, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x61, // t.at.alt.ampersa + 0x6e, 0x64, 0x2e, 0x61, 0x6c, 0x74, 0x0a, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x6c, // nd.alt.Germandbl + 0x73, 0x0f, 0x47, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x64, 0x62, 0x6c, 0x73, 0x2e, 0x73, 0x6d, 0x63, // s.Germandbls.smc + 0x70, 0x0d, 0x63, 0x79, 0x72, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x62, 0x72, 0x65, 0x76, 0x65, 0x07, // p.cyrillicbreve. + 0x75, 0x6e, 0x69, 0x30, 0x30, 0x41, 0x44, 0x06, 0x44, 0x63, 0x72, 0x6f, 0x61, 0x74, 0x04, 0x68, // uni00AD.Dcroat.h + 0x62, 0x61, 0x72, 0x04, 0x54, 0x62, 0x61, 0x72, 0x04, 0x74, 0x62, 0x61, 0x72, 0x0a, 0x41, 0x72, // bar.Tbar.tbar.Ar + 0x69, 0x6e, 0x67, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0a, 0x61, 0x72, 0x69, 0x6e, 0x67, 0x61, 0x63, // ingacute.aringac + 0x75, 0x74, 0x65, 0x07, 0x41, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x61, 0x6d, 0x61, 0x63, // ute.Amacron.amac + 0x72, 0x6f, 0x6e, 0x06, 0x41, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x61, 0x62, 0x72, 0x65, 0x76, // ron.Abreve.abrev + 0x65, 0x07, 0x41, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x07, 0x61, 0x6f, 0x67, 0x6f, 0x6e, 0x65, // e.Aogonek.aogone + 0x6b, 0x0b, 0x43, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x63, 0x63, // k.Ccircumflex.cc + 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x30, // ircumflex.uni010 + 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x30, 0x42, 0x06, 0x44, 0x63, 0x61, 0x72, 0x6f, 0x6e, // A.uni010B.Dcaron + 0x06, 0x64, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x07, 0x45, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, // .dcaron.Emacron. + 0x65, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x06, 0x45, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x65, // emacron.Ebreve.e + 0x62, 0x72, 0x65, 0x76, 0x65, 0x0a, 0x45, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, // breve.Edotaccent + 0x0a, 0x65, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x07, 0x45, 0x6f, 0x67, 0x6f, // .edotaccent.Eogo + 0x6e, 0x65, 0x6b, 0x07, 0x65, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x06, 0x45, 0x63, 0x61, 0x72, // nek.eogonek.Ecar + 0x6f, 0x6e, 0x06, 0x65, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x0b, 0x47, 0x63, 0x69, 0x72, 0x63, 0x75, // on.ecaron.Gcircu + 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x67, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, // mflex.gcircumfle + 0x78, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x32, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x32, // x.uni0120.uni012 + 0x31, 0x0c, 0x47, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x67, // 1.Gcommaaccent.g + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0b, 0x48, 0x63, 0x69, 0x72, // commaaccent.Hcir + 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x68, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, // cumflex.hcircumf + 0x6c, 0x65, 0x78, 0x06, 0x49, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x06, 0x69, 0x74, 0x69, 0x6c, 0x64, // lex.Itilde.itild + 0x65, 0x07, 0x49, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x69, 0x6d, 0x61, 0x63, 0x72, 0x6f, // e.Imacron.imacro + 0x6e, 0x06, 0x49, 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x69, 0x62, 0x72, 0x65, 0x76, 0x65, 0x07, // n.Ibreve.ibreve. + 0x49, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x07, 0x69, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x0a, // Iogonek.iogonek. + 0x49, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0b, 0x4a, 0x63, 0x69, 0x72, 0x63, // Idotaccent.Jcirc + 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x6a, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, // umflex.jcircumfl + 0x65, 0x78, 0x0c, 0x4b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, // ex.Kcommaaccent. + 0x6b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x06, 0x4c, 0x61, 0x63, // kcommaaccent.Lac + 0x75, 0x74, 0x65, 0x06, 0x6c, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x4c, 0x63, 0x6f, 0x6d, 0x6d, // ute.lacute.Lcomm + 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x6c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, // aaccent.lcommaac + 0x63, 0x65, 0x6e, 0x74, 0x06, 0x4c, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x6c, 0x63, 0x61, 0x72, // cent.Lcaron.lcar + 0x6f, 0x6e, 0x04, 0x4c, 0x64, 0x6f, 0x74, 0x04, 0x6c, 0x64, 0x6f, 0x74, 0x06, 0x4e, 0x61, 0x63, // on.Ldot.ldot.Nac + 0x75, 0x74, 0x65, 0x06, 0x6e, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x4e, 0x63, 0x6f, 0x6d, 0x6d, // ute.nacute.Ncomm + 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0c, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, // aaccent.ncommaac + 0x63, 0x65, 0x6e, 0x74, 0x06, 0x4e, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x6e, 0x63, 0x61, 0x72, // cent.Ncaron.ncar + 0x6f, 0x6e, 0x0b, 0x6e, 0x61, 0x70, 0x6f, 0x73, 0x74, 0x72, 0x6f, 0x70, 0x68, 0x65, 0x07, 0x4f, // on.napostrophe.O + 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x6f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x06, 0x4f, // macron.omacron.O + 0x62, 0x72, 0x65, 0x76, 0x65, 0x06, 0x6f, 0x62, 0x72, 0x65, 0x76, 0x65, 0x0d, 0x4f, 0x68, 0x75, // breve.obreve.Ohu + 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x0d, 0x6f, 0x68, 0x75, 0x6e, 0x67, // ngarumlaut.ohung + 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x06, 0x52, 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, // arumlaut.Racute. + 0x72, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0c, 0x52, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, // racute.Rcommaacc + 0x65, 0x6e, 0x74, 0x0c, 0x72, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, // ent.rcommaaccent + 0x06, 0x52, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x72, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x53, // .Rcaron.rcaron.S + 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, 0x73, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0b, 0x53, 0x63, 0x69, // acute.sacute.Sci + 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x73, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, // rcumflex.scircum + 0x66, 0x6c, 0x65, 0x78, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x31, 0x38, 0x07, 0x75, 0x6e, 0x69, // flex.uni0218.uni + 0x30, 0x32, 0x31, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, 0x31, 0x41, 0x07, 0x75, 0x6e, 0x69, // 0219.uni021A.uni + 0x30, 0x32, 0x31, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x36, 0x32, 0x0c, 0x75, 0x6e, 0x69, // 021B.uni0162.uni + 0x30, 0x31, 0x36, 0x32, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x36, // 0162.smcp.uni016 + 0x33, 0x06, 0x54, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, 0x74, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x06, // 3.Tcaron.tcaron. + 0x55, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x06, 0x75, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x07, 0x55, 0x6d, // Utilde.utilde.Um + 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x07, 0x75, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x06, 0x55, 0x62, // acron.umacron.Ub + 0x72, 0x65, 0x76, 0x65, 0x06, 0x75, 0x62, 0x72, 0x65, 0x76, 0x65, 0x05, 0x55, 0x72, 0x69, 0x6e, // reve.ubreve.Urin + 0x67, 0x05, 0x75, 0x72, 0x69, 0x6e, 0x67, 0x0d, 0x55, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, // g.uring.Uhungaru + 0x6d, 0x6c, 0x61, 0x75, 0x74, 0x0d, 0x75, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, // mlaut.uhungaruml + 0x61, 0x75, 0x74, 0x07, 0x55, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x07, 0x75, 0x6f, 0x67, 0x6f, // aut.Uogonek.uogo + 0x6e, 0x65, 0x6b, 0x0b, 0x57, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, // nek.Wcircumflex. + 0x77, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x59, 0x63, 0x69, 0x72, // wcircumflex.Ycir + 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x0b, 0x79, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, // cumflex.ycircumf + 0x6c, 0x65, 0x78, 0x06, 0x5a, 0x61, 0x63, 0x75, 0x74, 0x65, 0x06, 0x7a, 0x61, 0x63, 0x75, 0x74, // lex.Zacute.zacut + 0x65, 0x0a, 0x5a, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x0a, 0x7a, 0x64, 0x6f, // e.Zdotaccent.zdo + 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x07, 0x41, 0x45, 0x61, 0x63, 0x75, 0x74, 0x65, 0x07, // taccent.AEacute. + 0x61, 0x65, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0b, 0x4f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x61, 0x63, // aeacute.Oslashac + 0x75, 0x74, 0x65, 0x0b, 0x6f, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x61, 0x63, 0x75, 0x74, 0x65, 0x0b, // ute.oslashacute. + 0x44, 0x63, 0x72, 0x6f, 0x61, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x08, 0x45, 0x74, 0x68, 0x2e, // Dcroat.smcp.Eth. + 0x73, 0x6d, 0x63, 0x70, 0x09, 0x54, 0x62, 0x61, 0x72, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, // smcp.Tbar.smcp.A + 0x67, 0x72, 0x61, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x61, 0x63, 0x75, 0x74, // grave.smcp.Aacut + 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x41, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, // e.smcp.Acircumfl + 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, // ex.smcp.Atilde.s + 0x6d, 0x63, 0x70, 0x0e, 0x41, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, // mcp.Adieresis.sm + 0x63, 0x70, 0x0a, 0x41, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x41, 0x72, // cp.Aring.smcp.Ar + 0x69, 0x6e, 0x67, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0d, 0x43, 0x63, // ingacute.smcp.Cc + 0x65, 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x67, 0x72, 0x61, // edilla.smcp.Egra + 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, // ve.smcp.Eacute.s + 0x6d, 0x63, 0x70, 0x10, 0x45, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, // mcp.Ecircumflex. + 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x45, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, // smcp.Edieresis.s + 0x6d, 0x63, 0x70, 0x0b, 0x49, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, // mcp.Igrave.smcp. + 0x49, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x49, 0x63, 0x69, 0x72, // Iacute.smcp.Icir + 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x49, 0x64, 0x69, // cumflex.smcp.Idi + 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4e, 0x74, 0x69, 0x6c, // eresis.smcp.Ntil + 0x64, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4f, 0x67, 0x72, 0x61, 0x76, 0x65, 0x2e, 0x73, // de.smcp.Ograve.s + 0x6d, 0x63, 0x70, 0x0b, 0x4f, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, // mcp.Oacute.smcp. + 0x4f, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, // Ocircumflex.smcp + 0x0b, 0x4f, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x4f, 0x64, 0x69, // .Otilde.smcp.Odi + 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x67, 0x72, 0x61, // eresis.smcp.Ugra + 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, // ve.smcp.Uacute.s + 0x6d, 0x63, 0x70, 0x10, 0x55, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, // mcp.Ucircumflex. + 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x55, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x2e, 0x73, // smcp.Udieresis.s + 0x6d, 0x63, 0x70, 0x0b, 0x59, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, // mcp.Yacute.smcp. + 0x41, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x41, 0x62, 0x72, // Amacron.smcp.Abr + 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x41, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, // eve.smcp.Aogonek + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x43, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Cacute.smc + 0x70, 0x10, 0x43, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, // p.Ccircumflex.sm + 0x63, 0x70, 0x0c, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x30, 0x41, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, // cp.uni010A.smcp. + 0x43, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x44, 0x63, 0x61, 0x72, // Ccaron.smcp.Dcar + 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x45, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, // on.smcp.Emacron. + 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, // smcp.Ebreve.smcp + 0x0f, 0x45, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, // .Edotaccent.smcp + 0x0c, 0x45, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x45, 0x63, // .Eogonek.smcp.Ec + 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x47, 0x63, 0x69, 0x72, 0x63, 0x75, // aron.smcp.Gcircu + 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x47, 0x62, 0x72, 0x65, 0x76, // mflex.smcp.Gbrev + 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x32, 0x30, 0x2e, 0x73, // e.smcp.uni0120.s + 0x6d, 0x63, 0x70, 0x11, 0x47, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, // mcp.Gcommaaccent + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x48, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, // .smcp.Hcircumfle + 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x49, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, 0x6d, // x.smcp.Itilde.sm + 0x63, 0x70, 0x0c, 0x49, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, // cp.Imacron.smcp. + 0x49, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x49, 0x6f, 0x67, 0x6f, // Ibreve.smcp.Iogo + 0x6e, 0x65, 0x6b, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0f, 0x49, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, // nek.smcp.Idotacc + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x4a, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, // ent.smcp.Jcircum + 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x4b, 0x63, 0x6f, 0x6d, 0x6d, 0x61, // flex.smcp.Kcomma + 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4c, 0x61, 0x63, 0x75, // accent.smcp.Lacu + 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x4c, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, // te.smcp.Lcommaac + 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4c, 0x63, 0x61, 0x72, 0x6f, 0x6e, // cent.smcp.Lcaron + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x09, 0x4c, 0x64, 0x6f, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, // .smcp.Ldot.smcp. + 0x4e, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x4e, 0x63, 0x6f, 0x6d, // Nacute.smcp.Ncom + 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4e, 0x63, // maaccent.smcp.Nc + 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x4f, 0x6d, 0x61, 0x63, 0x72, 0x6f, // aron.smcp.Omacro + 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x4f, 0x62, 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, // n.smcp.Obreve.sm + 0x63, 0x70, 0x12, 0x4f, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, 0x75, 0x74, // cp.Ohungarumlaut + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x52, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Racute.smc + 0x70, 0x11, 0x52, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, // p.Rcommaaccent.s + 0x6d, 0x63, 0x70, 0x0b, 0x52, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, // mcp.Rcaron.smcp. + 0x53, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x53, 0x63, 0x69, 0x72, // Sacute.smcp.Scir + 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0d, 0x53, 0x63, 0x65, // cumflex.smcp.Sce + 0x64, 0x69, 0x6c, 0x6c, 0x61, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x53, 0x63, 0x61, 0x72, 0x6f, // dilla.smcp.Scaro + 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x11, 0x54, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x61, 0x63, 0x63, // n.smcp.Tcommaacc + 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x54, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, // ent.smcp.Tcaron. + 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x74, 0x69, 0x6c, 0x64, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, // smcp.Utilde.smcp + 0x0c, 0x55, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x55, 0x62, // .Umacron.smcp.Ub + 0x72, 0x65, 0x76, 0x65, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, 0x55, 0x72, 0x69, 0x6e, 0x67, 0x2e, // reve.smcp.Uring. + 0x73, 0x6d, 0x63, 0x70, 0x12, 0x55, 0x68, 0x75, 0x6e, 0x67, 0x61, 0x72, 0x75, 0x6d, 0x6c, 0x61, // smcp.Uhungarumla + 0x75, 0x74, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0c, 0x55, 0x6f, 0x67, 0x6f, 0x6e, 0x65, 0x6b, 0x2e, // ut.smcp.Uogonek. + 0x73, 0x6d, 0x63, 0x70, 0x10, 0x57, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, 0x78, // smcp.Wcircumflex + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x10, 0x59, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6d, 0x66, 0x6c, 0x65, // .smcp.Ycircumfle + 0x78, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0e, 0x59, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, // x.smcp.Ydieresis + 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0b, 0x5a, 0x61, 0x63, 0x75, 0x74, 0x65, 0x2e, 0x73, 0x6d, 0x63, // .smcp.Zacute.smc + 0x70, 0x0f, 0x5a, 0x64, 0x6f, 0x74, 0x61, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x2e, 0x73, 0x6d, 0x63, // p.Zdotaccent.smc + 0x70, 0x0b, 0x5a, 0x63, 0x61, 0x72, 0x6f, 0x6e, 0x2e, 0x73, 0x6d, 0x63, 0x70, 0x0a, 0x41, 0x6c, // p.Zcaron.smcp.Al + 0x70, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x45, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, // phatonos.Epsilon + 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x08, 0x45, 0x74, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x09, 0x49, // tonos.Etatonos.I + 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x4f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, // otatonos.Omicron + 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x55, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, // tonos.Upsilonton + 0x6f, 0x73, 0x0a, 0x4f, 0x6d, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x11, 0x69, 0x6f, // os.Omegatonos.io + 0x74, 0x61, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x05, // tadieresistonos. + 0x41, 0x6c, 0x70, 0x68, 0x61, 0x04, 0x42, 0x65, 0x74, 0x61, 0x07, 0x45, 0x70, 0x73, 0x69, 0x6c, // Alpha.Beta.Epsil + 0x6f, 0x6e, 0x04, 0x5a, 0x65, 0x74, 0x61, 0x03, 0x45, 0x74, 0x61, 0x04, 0x49, 0x6f, 0x74, 0x61, // on.Zeta.Eta.Iota + 0x05, 0x4b, 0x61, 0x70, 0x70, 0x61, 0x02, 0x4d, 0x75, 0x02, 0x4e, 0x75, 0x07, 0x4f, 0x6d, 0x69, // .Kappa.Mu.Nu.Omi + 0x63, 0x72, 0x6f, 0x6e, 0x03, 0x52, 0x68, 0x6f, 0x03, 0x54, 0x61, 0x75, 0x07, 0x55, 0x70, 0x73, // cron.Rho.Tau.Ups + 0x69, 0x6c, 0x6f, 0x6e, 0x03, 0x43, 0x68, 0x69, 0x0c, 0x49, 0x6f, 0x74, 0x61, 0x64, 0x69, 0x65, // ilon.Chi.Iotadie + 0x72, 0x65, 0x73, 0x69, 0x73, 0x0f, 0x55, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x64, 0x69, 0x65, // resis.Upsilondie + 0x72, 0x65, 0x73, 0x69, 0x73, 0x0a, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, // resis.alphatonos + 0x0c, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x08, 0x65, 0x74, // .epsilontonos.et + 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x09, 0x69, 0x6f, 0x74, 0x61, 0x74, 0x6f, 0x6e, 0x6f, 0x73, // atonos.iotatonos + 0x14, 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, // .upsilondieresis + 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x05, 0x6b, 0x61, 0x70, 0x70, 0x61, 0x07, 0x6f, 0x6d, 0x69, 0x63, // tonos.kappa.omic + 0x72, 0x6f, 0x6e, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x33, 0x42, 0x43, 0x02, 0x6e, 0x75, 0x03, 0x63, // ron.uni03BC.nu.c + 0x68, 0x69, 0x0c, 0x69, 0x6f, 0x74, 0x61, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x0f, // hi.iotadieresis. + 0x75, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x0c, // upsilondieresis. + 0x6f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0c, 0x75, 0x70, 0x73, // omicrontonos.ups + 0x69, 0x6c, 0x6f, 0x6e, 0x74, 0x6f, 0x6e, 0x6f, 0x73, 0x0a, 0x6f, 0x6d, 0x65, 0x67, 0x61, 0x74, // ilontonos.omegat + 0x6f, 0x6e, 0x6f, 0x73, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, // onos.uni0401.uni + 0x30, 0x34, 0x30, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x35, 0x07, 0x75, 0x6e, 0x69, // 0403.uni0405.uni + 0x30, 0x34, 0x30, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x37, 0x07, 0x75, 0x6e, 0x69, // 0406.uni0407.uni + 0x30, 0x34, 0x30, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x41, 0x07, 0x75, 0x6e, 0x69, // 0408.uni041A.uni + 0x30, 0x34, 0x30, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x45, 0x07, 0x75, 0x6e, 0x69, // 040C.uni040E.uni + 0x30, 0x34, 0x31, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x32, 0x07, 0x75, 0x6e, 0x69, // 0410.uni0412.uni + 0x30, 0x34, 0x31, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x35, 0x07, 0x75, 0x6e, 0x69, // 0413.uni0415.uni + 0x30, 0x34, 0x31, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x43, 0x07, 0x75, 0x6e, 0x69, // 0419.uni041C.uni + 0x30, 0x34, 0x31, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x31, 0x45, 0x07, 0x75, 0x6e, 0x69, // 041D.uni041E.uni + 0x30, 0x34, 0x31, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x30, 0x07, 0x75, 0x6e, 0x69, // 041F.uni0420.uni + 0x30, 0x34, 0x32, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x32, 0x07, 0x75, 0x6e, 0x69, // 0421.uni0422.uni + 0x30, 0x34, 0x32, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x32, 0x35, 0x07, 0x75, 0x6e, 0x69, // 0424.uni0425.uni + 0x30, 0x34, 0x33, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x35, 0x07, 0x75, 0x6e, 0x69, // 0430.uni0435.uni + 0x30, 0x34, 0x33, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x33, 0x45, 0x07, 0x75, 0x6e, 0x69, // 0439.uni043E.uni + 0x30, 0x34, 0x34, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x31, 0x07, 0x75, 0x6e, 0x69, // 0440.uni0441.uni + 0x30, 0x34, 0x34, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x34, 0x35, 0x07, 0x75, 0x6e, 0x69, // 0443.uni0445.uni + 0x30, 0x34, 0x35, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x33, 0x07, 0x75, 0x6e, 0x69, // 0451.uni0453.uni + 0x30, 0x34, 0x35, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x36, 0x07, 0x75, 0x6e, 0x69, // 0455.uni0456.uni + 0x30, 0x34, 0x35, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x38, 0x07, 0x75, 0x6e, 0x69, // 0457.uni0458.uni + 0x30, 0x34, 0x35, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x45, 0x06, 0x57, 0x67, 0x72, // 045C.uni045E.Wgr + 0x61, 0x76, 0x65, 0x06, 0x77, 0x67, 0x72, 0x61, 0x76, 0x65, 0x06, 0x57, 0x61, 0x63, 0x75, 0x74, // ave.wgrave.Wacut + 0x65, 0x06, 0x77, 0x61, 0x63, 0x75, 0x74, 0x65, 0x09, 0x57, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, // e.wacute.Wdieres + 0x69, 0x73, 0x09, 0x77, 0x64, 0x69, 0x65, 0x72, 0x65, 0x73, 0x69, 0x73, 0x06, 0x59, 0x67, 0x72, // is.wdieresis.Ygr + 0x61, 0x76, 0x65, 0x06, 0x79, 0x67, 0x72, 0x61, 0x76, 0x65, 0x06, 0x6d, 0x69, 0x6e, 0x75, 0x74, // ave.ygrave.minut + 0x65, 0x06, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x09, 0x65, 0x78, 0x63, 0x6c, 0x61, 0x6d, 0x64, // e.second.exclamd + 0x62, 0x6c, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x31, 0x46, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x32, // bl.uni01F0.uni02 + 0x42, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x33, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // BC.uni1E3E.uni1E + 0x33, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // 3F.uni1E00.uni1E + 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x46, 0x34, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 01.uni1F4D.uni04 + 0x30, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x30, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 00.uni040D.uni04 + 0x35, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x35, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 50.uni045D.uni04 + 0x37, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 70.uni0471.uni04 + 0x37, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x37, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 76.uni0477.uni04 + 0x39, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // 98.uni0499.uni04 + 0x41, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // AA.uni04AB.uni04 + 0x41, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // AE.uni04AF.uni04 + 0x43, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // C0.uni04C1.uni04 + 0x43, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // C2.uni04CF.uni04 + 0x44, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // D0.uni04D1.uni04 + 0x44, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // D2.uni04D3.uni04 + 0x44, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // D4.uni04D5.uni04 + 0x44, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // D6.uni04D7.uni04 + 0x44, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // DA.uni04D9.uni04 + 0x44, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // DB.uni04DC.uni04 + 0x44, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x44, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // DD.uni04DE.uni04 + 0x44, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // DF.uni04E2.uni04 + 0x45, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // E3.uni04E4.uni04 + 0x45, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // E5.uni04E6.uni04 + 0x45, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // E7.uni04E8.uni04 + 0x45, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // E9.uni04EA.uni04 + 0x45, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // EB.uni04EC.uni04 + 0x45, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x45, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // ED.uni04EE.uni04 + 0x45, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // EF.uni04F0.uni04 + 0x46, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // F1.uni04F2.uni04 + 0x46, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // F3.uni04F4.uni04 + 0x46, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // F5.uni04F8.uni04 + 0x46, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, // F9.uni04FC.uni04 + 0x46, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x30, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, // FD.uni0501.uni05 + 0x31, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x31, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // 12.uni0513.uni1E + 0x41, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // A0.uni1EA1.uni1E + 0x41, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // A2.uni1EA3.uni1E + 0x41, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // A4.uni1EA5.uni1E + 0x41, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // A6.uni1EA7.uni1E + 0x41, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // A8.uni1EA9.uni1E + 0x41, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // AA.uni1EAB.uni1E + 0x41, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // AC.uni1EAD.uni1E + 0x41, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x41, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // AE.uni1EAF.uni1E + 0x42, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // B0.uni1EB1.uni1E + 0x42, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // B2.uni1EB3.uni1E + 0x42, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // B4.uni1EB5.uni1E + 0x42, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // B6.uni1EB7.uni1E + 0x42, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // B8.uni1EB9.uni1E + 0x42, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // BA.uni1EBB.uni1E + 0x42, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // BC.uni1EBD.uni1E + 0x42, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x42, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // BE.uni1EBF.uni1E + 0x43, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // C0.uni1EC1.uni1E + 0x43, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // C2.uni1EC3.uni1E + 0x43, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // C4.uni1EC5.uni1E + 0x43, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // C6.uni1EC7.uni1E + 0x43, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // C8.uni1EC9.uni1E + 0x43, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // CA.uni1ECB.uni1E + 0x43, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // CC.uni1ECD.uni1E + 0x43, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x43, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // CE.uni1ECF.uni1E + 0x44, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // D0.uni1ED1.uni1E + 0x44, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // D2.uni1ED3.uni1E + 0x44, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // D4.uni1ED5.uni1E + 0x44, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // D6.uni1ED7.uni1E + 0x44, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // D8.uni1ED9.uni1E + 0x44, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // DA.uni1EDB.uni1E + 0x44, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // DC.uni1EDD.uni1E + 0x44, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x44, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // DE.uni1EDF.uni1E + 0x45, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // E0.uni1EE1.uni1E + 0x45, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // E2.uni1EE3.uni1E + 0x45, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // E4.uni1EE5.uni1E + 0x45, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // E6.uni1EE7.uni1E + 0x45, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x39, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // E8.uni1EE9.uni1E + 0x45, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // EA.uni1EEB.uni1E + 0x45, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // EC.uni1EED.uni1E + 0x45, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x45, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // EE.uni1EEF.uni1E + 0x46, 0x30, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // F0.uni1EF1.uni1E + 0x46, 0x34, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // F4.uni1EF5.uni1E + 0x46, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, // F6.uni1EF7.uni1E + 0x46, 0x38, 0x07, 0x75, 0x6e, 0x69, 0x31, 0x45, 0x46, 0x39, 0x06, 0x64, 0x63, 0x72, 0x6f, 0x61, // F8.uni1EF9.dcroa + 0x74, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x41, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, // t.uni20AB.uni049 + 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, // A.uni049B.uni04A + 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, // 2.uni04A3.uni04A + 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x41, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, // C.uni04AD.uni04B + 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, // 2.uni04B3.uni04B + 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, // 6.uni04B7.uni04C + 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, // B.uni04CC.uni04F + 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, // 6.uni04F7.uni049 + 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x37, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, // 6.uni0497.uni04B + 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, // E.uni04BF.uni04B + 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, // B.uni048D.uni048 + 0x43, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x36, 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, // C.uni0462.uni049 + 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x33, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, // 2.uni0493.uni049 + 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x39, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, // E.uni049F.uni048 + 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x38, 0x42, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, // A.uni048B.uni04C + 0x39, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x41, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, // 9.uni04CA.uni04C + 0x44, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, // D.uni04CE.uni04C + 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x43, 0x36, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, // 5.uni04C6.uni04B + 0x30, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x42, 0x31, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, // 0.uni04B1.uni04F + 0x45, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x34, 0x46, 0x46, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x35, 0x31, // E.uni04FF.uni051 + 0x31, 0x07, 0x75, 0x6e, 0x69, 0x32, 0x30, 0x31, 0x35, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, 0x30, // 1.uni2015.uni000 + 0x32, 0x07, 0x75, 0x6e, 0x69, 0x30, 0x30, 0x30, 0x39, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, // 2.uni0009....... + 0xff, 0xff, 0x00, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ................ + 0x00, 0x02, 0x00, 0x08, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0x01, 0x01, 0x21, 0x01, 0x27, 0x00, 0x01, // ...........!.'.. + 0x01, 0x58, 0x01, 0x63, 0x00, 0x01, 0x01, 0x78, 0x01, 0x78, 0x00, 0x01, 0x01, 0x7d, 0x01, 0x7e, // .X.c...x.x...}.~ + 0x00, 0x01, 0x01, 0x80, 0x01, 0x80, 0x00, 0x01, 0x01, 0x92, 0x01, 0x94, 0x00, 0x01, 0x01, 0xcc, // ................ + 0x01, 0xcc, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x1e, 0x00, 0x2c, 0x00, 0x01, // .............,.. + 0x44, 0x46, 0x4c, 0x54, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x01, // DFLT............ + 0x00, 0x00, 0x00, 0x01, 0x73, 0x6d, 0x63, 0x70, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ....smcp........ + 0x00, 0x01, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x01, 0xbe, // ................ + 0x00, 0xdc, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0x9f, 0x01, 0xa0, 0x01, 0xa1, 0x01, 0xa2, 0x01, 0xa3, // ................ + 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, 0x01, 0xa7, 0x01, 0xa8, 0x01, 0xa9, 0x01, 0xaa, 0x01, 0xab, // ................ + 0x01, 0xd7, 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb0, 0x01, 0xb1, 0x01, 0xb2, // ................ + 0x01, 0xb3, 0x01, 0xb4, 0x01, 0xb5, 0x01, 0x9d, 0x01, 0x9e, 0x01, 0x9f, 0x01, 0xa0, 0x01, 0xa1, // ................ + 0x01, 0xa2, 0x01, 0xa3, 0x01, 0xa4, 0x01, 0xa5, 0x01, 0xa6, 0x01, 0xa7, 0x01, 0xa8, 0x01, 0xa9, // ................ + 0x01, 0xaa, 0x01, 0xab, 0x01, 0xd7, 0x01, 0xac, 0x01, 0xad, 0x01, 0xae, 0x01, 0xaf, 0x01, 0xb0, // ................ + 0x01, 0xb1, 0x01, 0xb2, 0x01, 0xb3, 0x01, 0xb4, 0x01, 0xb5, 0x01, 0xe1, 0x02, 0x9a, 0x02, 0x99, // ................ + 0x02, 0x9a, 0x02, 0x9b, 0x02, 0x9b, 0x02, 0x9c, 0x02, 0x9d, 0x02, 0x9e, 0x02, 0x9f, 0x02, 0xa0, // ................ + 0x02, 0xa1, 0x02, 0xa2, 0x02, 0xa3, 0x02, 0xa4, 0x02, 0xa5, 0x02, 0xa6, 0x02, 0xa7, 0x02, 0xa8, // ................ + 0x02, 0xa9, 0x02, 0xaa, 0x02, 0xab, 0x02, 0xac, 0x02, 0xad, 0x02, 0xae, 0x02, 0xaf, 0x02, 0xb0, // ................ + 0x02, 0xb1, 0x02, 0xb2, 0x02, 0xb3, 0x02, 0xb4, 0x02, 0xb5, 0x02, 0xb6, 0x02, 0x9c, 0x02, 0x9d, // ................ + 0x02, 0x9e, 0x02, 0x9f, 0x02, 0xa0, 0x02, 0xa1, 0x02, 0xa2, 0x02, 0xa3, 0x02, 0xa4, 0x02, 0xa5, // ................ + 0x02, 0xa6, 0x02, 0xa7, 0x02, 0xa8, 0x02, 0xa9, 0x02, 0xaa, 0x02, 0xab, 0x02, 0xac, 0x02, 0xad, // ................ + 0x02, 0xae, 0x02, 0xaf, 0x02, 0xb0, 0x02, 0xb1, 0x02, 0xb2, 0x02, 0xb3, 0x02, 0xb4, 0x02, 0xb5, // ................ + 0x02, 0xb6, 0x02, 0xeb, 0x02, 0xb7, 0x02, 0xb7, 0x02, 0xb8, 0x02, 0xb8, 0x02, 0xb9, 0x02, 0xb9, // ................ + 0x02, 0xba, 0x02, 0xba, 0x02, 0xbb, 0x02, 0xbb, 0x02, 0xbd, 0x02, 0xbd, 0x02, 0xbe, 0x02, 0xbe, // ................ + 0x02, 0xbf, 0x02, 0xbf, 0x02, 0xc0, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc1, 0x02, 0xc2, 0x02, 0xc2, // ................ + 0x02, 0xc3, 0x02, 0xc3, 0x02, 0xc4, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc5, 0x02, 0xc7, 0x02, 0xc7, // ................ + 0x02, 0xc8, 0x02, 0xc8, 0x02, 0xc9, 0x02, 0xc9, 0x02, 0xca, 0x02, 0xca, 0x02, 0xcb, 0x02, 0xcb, // ................ + 0x02, 0xcc, 0x02, 0xcc, 0x02, 0xcd, 0x02, 0xce, 0x02, 0xce, 0x02, 0xcf, 0x02, 0xcf, 0x02, 0xd0, // ................ + 0x02, 0xd0, 0x02, 0xd1, 0x02, 0xd1, 0x02, 0xd2, 0x02, 0xd2, 0x02, 0xd3, 0x02, 0xd3, 0x02, 0xd4, // ................ + 0x02, 0xd4, 0x02, 0xd5, 0x02, 0xd5, 0x02, 0xd6, 0x02, 0xd6, 0x02, 0xd7, 0x02, 0xd7, 0x02, 0xd8, // ................ + 0x02, 0xd8, 0x02, 0xd9, 0x02, 0xd9, 0x02, 0xda, 0x02, 0xda, 0x02, 0xdb, 0x02, 0xdb, 0x02, 0xdc, // ................ + 0x02, 0xdc, 0x02, 0xdd, 0x02, 0xdd, 0x02, 0xde, 0x02, 0xde, 0x02, 0xdf, 0x02, 0xdf, 0x02, 0xe0, // ................ + 0x02, 0xe0, 0x02, 0x7a, 0x02, 0x7a, 0x02, 0xe2, 0x02, 0xe2, 0x02, 0xe3, 0x02, 0xe3, 0x02, 0xe4, // ...z.z.......... + 0x02, 0xe4, 0x02, 0xe5, 0x02, 0xe5, 0x02, 0xe6, 0x02, 0xe6, 0x02, 0xe7, 0x02, 0xe7, 0x02, 0xe8, // ................ + 0x02, 0xe8, 0x02, 0xe9, 0x02, 0xe9, 0x02, 0xea, 0x02, 0xea, 0x02, 0xeb, 0x02, 0xec, 0x02, 0xec, // ................ + 0x02, 0xed, 0x02, 0xed, 0x02, 0xee, 0x02, 0xee, 0x02, 0x99, 0x00, 0x02, 0x00, 0x0d, 0x00, 0x23, // ...............# + 0x00, 0x3c, 0x00, 0x00, 0x00, 0x43, 0x00, 0x5c, 0x00, 0x1a, 0x00, 0x83, 0x00, 0x83, 0x00, 0x34, // .<...C.........4 + 0x00, 0x85, 0x00, 0x85, 0x00, 0x35, 0x01, 0xe5, 0x01, 0xe6, 0x00, 0x36, 0x01, 0xe8, 0x02, 0x2a, // .....5.....6...* + 0x00, 0x38, 0x02, 0x2d, 0x02, 0x3e, 0x00, 0x7b, 0x02, 0x41, 0x02, 0x5f, 0x00, 0x8d, 0x02, 0x61, // .8.-.>.{.A._...a + 0x02, 0x72, 0x00, 0xac, 0x02, 0x75, 0x02, 0x76, 0x00, 0xbe, 0x02, 0x79, 0x02, 0x79, 0x00, 0xc0, // .r...u.v...y.y.. + 0x02, 0x7b, 0x02, 0x94, 0x00, 0xc1, 0x03, 0xe3, 0x03, 0xe3, 0x00, 0xdb, // .{.......... +}; diff --git a/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp b/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp index 62a1ce539cb..8dbac8a294e 100644 --- a/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp +++ b/3rdparty/bgfx/examples/common/nanovg/nanovg.cpp @@ -34,10 +34,39 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_GCC("-Wunused-result"); #include "fontstash.h" BX_PRAGMA_DIAGNOSTIC_POP(); +BX_PRAGMA_DIAGNOSTIC_PUSH(); +BX_PRAGMA_DIAGNOSTIC_IGNORED_MSVC(4127) // warning C4127: conditional expression is constant +#define LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_NO_COMPILE_DISK +#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_NO_COMPILE_CPP +#include +BX_PRAGMA_DIAGNOSTIC_POP(); + +void* lodepng_malloc(size_t _size) +{ + return ::malloc(_size); +} + +void* lodepng_realloc(void* _ptr, size_t _size) +{ + return ::realloc(_ptr, _size); +} + +void lodepng_free(void* _ptr) +{ + ::free(_ptr); +} + BX_PRAGMA_DIAGNOSTIC_PUSH(); BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers"); BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow"); BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wint-to-pointer-cast") +#define STBI_MALLOC(_size) lodepng_malloc(_size) +#define STBI_REALLOC(_ptr, _size) lodepng_realloc(_ptr, _size) +#define STBI_FREE(_ptr) lodepng_free(_ptr) #define STB_IMAGE_IMPLEMENTATION #include BX_PRAGMA_DIAGNOSTIC_POP(); diff --git a/3rdparty/bgfx/examples/runtime/font/droidsansmono.ttf b/3rdparty/bgfx/examples/runtime/font/droidsansmono.ttf new file mode 100644 index 00000000000..d604425b26f Binary files /dev/null and b/3rdparty/bgfx/examples/runtime/font/droidsansmono.ttf differ diff --git a/3rdparty/bgfx/examples/runtime/font/robotomono-regular.ttf b/3rdparty/bgfx/examples/runtime/font/robotomono-regular.ttf new file mode 100644 index 00000000000..495a82ce92e Binary files /dev/null and b/3rdparty/bgfx/examples/runtime/font/robotomono-regular.ttf differ diff --git a/3rdparty/bgfx/include/bgfx/bgfx.h b/3rdparty/bgfx/include/bgfx/bgfx.h index a77a769eafd..323a2ebe19e 100644 --- a/3rdparty/bgfx/include/bgfx/bgfx.h +++ b/3rdparty/bgfx/include/bgfx/bgfx.h @@ -938,13 +938,15 @@ namespace bgfx /// just swaps internal buffers, kicks render thread, and returns. In /// singlethreaded renderer this call does frame rendering. /// + /// @param[in] _capture Capture frame with graphics debugger. + /// /// @returns Current frame number. This might be used in conjunction with /// double/multi buffering data outside the library and passing it to /// library via `bgfx::makeRef` calls. /// /// @attention C99 equivalent is `bgfx_frame`. /// - uint32_t frame(); + uint32_t frame(bool _capture = false); /// Returns current renderer backend API type. /// @@ -1671,11 +1673,13 @@ namespace bgfx /// @param[in] _handle Texture handle. /// @param[in] _data Destination buffer. /// + /// @returns Frame number when the result will be available. See: `bgfx::frame`. + /// /// @attention Texture must be created with `BGFX_TEXTURE_READ_BACK` flag. /// @attention Availability depends on: `BGFX_CAPS_TEXTURE_READ_BACK`. /// @attention C99 equivalent is `bgfx_read_texture`. /// - void readTexture(TextureHandle _handle, void* _data); + uint32_t readTexture(TextureHandle _handle, void* _data); /// Read back texture content. /// @@ -1683,11 +1687,13 @@ namespace bgfx /// @param[in] _attachment Frame buffer attachment index. /// @param[in] _data Destination buffer. /// + /// @returns Frame number when the result will be available. See: `bgfx::frame`. + /// /// @attention Texture must be created with `BGFX_TEXTURE_READ_BACK` flag. /// @attention Availability depends on: `BGFX_CAPS_TEXTURE_READ_BACK`. /// @attention C99 equivalent is `bgfx_read_frame_buffer`. /// - void readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data); + uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data); /// Destroy texture. /// @@ -1709,6 +1715,8 @@ namespace bgfx /// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic /// sampling. /// + /// @returns Handle to frame buffer object. + /// /// @attention C99 equivalent is `bgfx_create_frame_buffer`. /// FrameBufferHandle createFrameBuffer( @@ -1731,6 +1739,8 @@ namespace bgfx /// - `BGFX_TEXTURE_[MIN/MAG/MIP]_[POINT/ANISOTROPIC]` - Point or anisotropic /// sampling. /// + /// @returns Handle to frame buffer object. + /// /// @attention C99 equivalent is `bgfx_create_frame_buffer_scaled`. /// FrameBufferHandle createFrameBuffer( @@ -1746,6 +1756,8 @@ namespace bgfx /// @param[in] _destroyTextures If true, textures will be destroyed when /// frame buffer is destroyed. /// + /// @returns Handle to frame buffer object. + /// /// @attention C99 equivalent is `bgfx_create_frame_buffer_from_handles`. /// FrameBufferHandle createFrameBuffer( @@ -1761,6 +1773,8 @@ namespace bgfx /// @param[in] _destroyTextures If true, textures will be destroyed when /// frame buffer is destroyed. /// + /// @returns Handle to frame buffer object. + /// /// @attention C99 equivalent is `bgfx_create_frame_buffer_from_handles`. /// FrameBufferHandle createFrameBuffer( diff --git a/3rdparty/bgfx/include/bgfx/bgfxdefines.h b/3rdparty/bgfx/include/bgfx/bgfxdefines.h index 69fcea60aa8..f8923517184 100644 --- a/3rdparty/bgfx/include/bgfx/bgfxdefines.h +++ b/3rdparty/bgfx/include/bgfx/bgfxdefines.h @@ -6,7 +6,7 @@ #ifndef BGFX_DEFINES_H_HEADER_GUARD #define BGFX_DEFINES_H_HEADER_GUARD -#define BGFX_API_VERSION UINT32_C(14) +#define BGFX_API_VERSION UINT32_C(16) /// #define BGFX_STATE_RGB_WRITE UINT64_C(0x0000000000000001) //!< Enable RGB write. diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfx.h b/3rdparty/bgfx/include/bgfx/c99/bgfx.h index dfc940cbd38..222f202f29d 100644 --- a/3rdparty/bgfx/include/bgfx/c99/bgfx.h +++ b/3rdparty/bgfx/include/bgfx/c99/bgfx.h @@ -238,11 +238,11 @@ typedef enum bgfx_topology_convert #define BGFX_HANDLE_T(_name) \ typedef struct _name { uint16_t idx; } _name##_t -BGFX_HANDLE_T(bgfx_indirect_buffer_handle); BGFX_HANDLE_T(bgfx_dynamic_index_buffer_handle); BGFX_HANDLE_T(bgfx_dynamic_vertex_buffer_handle); BGFX_HANDLE_T(bgfx_frame_buffer_handle); BGFX_HANDLE_T(bgfx_index_buffer_handle); +BGFX_HANDLE_T(bgfx_indirect_buffer_handle); BGFX_HANDLE_T(bgfx_occlusion_query_handle); BGFX_HANDLE_T(bgfx_program_handle); BGFX_HANDLE_T(bgfx_shader_handle); @@ -505,7 +505,7 @@ BGFX_C_API void bgfx_shutdown(); BGFX_C_API void bgfx_reset(uint32_t _width, uint32_t _height, uint32_t _flags); /**/ -BGFX_C_API uint32_t bgfx_frame(); +BGFX_C_API uint32_t bgfx_frame(bool _capture); /**/ BGFX_C_API bgfx_renderer_type_t bgfx_get_renderer_type(); @@ -655,10 +655,10 @@ BGFX_C_API void bgfx_update_texture_3d(bgfx_texture_handle_t _handle, uint8_t _m BGFX_C_API void bgfx_update_texture_cube(bgfx_texture_handle_t _handle, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const bgfx_memory_t* _mem, uint16_t _pitch); /**/ -BGFX_C_API void bgfx_read_texture(bgfx_texture_handle_t _handle, void* _data); +BGFX_C_API uint32_t bgfx_read_texture(bgfx_texture_handle_t _handle, void* _data); /**/ -BGFX_C_API void bgfx_read_frame_buffer(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, void* _data); +BGFX_C_API uint32_t bgfx_read_frame_buffer(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, void* _data); /**/ BGFX_C_API void bgfx_destroy_texture(bgfx_texture_handle_t _handle); diff --git a/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h b/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h index 42f9e98b0a1..f7d5b76b532 100644 --- a/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h +++ b/3rdparty/bgfx/include/bgfx/c99/bgfxplatform.h @@ -85,7 +85,7 @@ typedef struct bgfx_interface_vtbl bool (*init)(bgfx_renderer_type_t _type, uint16_t _vendorId, uint16_t _deviceId, bgfx_callback_interface_t* _callback, bgfx_allocator_interface_t* _allocator); void (*shutdown)(); void (*reset)(uint32_t _width, uint32_t _height, uint32_t _flags); - uint32_t (*frame)(); + uint32_t (*frame)(bool _capture); bgfx_renderer_type_t (*get_renderer_type)(); const bgfx_caps_t* (*get_caps)(); const bgfx_hmd_t* (*get_hmd)(); diff --git a/3rdparty/bgfx/src/bgfx.cpp b/3rdparty/bgfx/src/bgfx.cpp index d44b84abcd1..a1d37e82c41 100644 --- a/3rdparty/bgfx/src/bgfx.cpp +++ b/3rdparty/bgfx/src/bgfx.cpp @@ -1471,7 +1471,7 @@ namespace bgfx } } - uint32_t Context::frame() + uint32_t Context::frame(bool _capture) { BX_CHECK(0 == m_instBufferCount, "Instance buffer allocated, but not used. This is incorrect, and causes memory leak."); @@ -1480,6 +1480,8 @@ namespace bgfx m_occlusionQuerySet.clear(); } + m_submit->m_capture = _capture; + BGFX_PROFILER_SCOPE(bgfx, main_thread_frame, 0xff2040ff); // wait for render thread to finish renderSemWait(); @@ -2510,10 +2512,10 @@ namespace bgfx s_ctx->reset(_width, _height, _flags); } - uint32_t frame() + uint32_t frame(bool _capture) { BGFX_CHECK_MAIN_THREAD(); - return s_ctx->frame(); + return s_ctx->frame(_capture); } const Caps* getCaps() @@ -3114,20 +3116,20 @@ namespace bgfx } } - void readTexture(TextureHandle _handle, void* _data) + uint32_t readTexture(TextureHandle _handle, void* _data) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(NULL != _data, "_data can't be NULL"); BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_READ_BACK, "Texture read-back is not supported!"); - s_ctx->readTexture(_handle, _data); + return s_ctx->readTexture(_handle, _data); } - void readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) + uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(NULL != _data, "_data can't be NULL"); BGFX_CHECK_CAPS(BGFX_CAPS_TEXTURE_READ_BACK, "Texture read-back is not supported!"); - s_ctx->readTexture(_handle, _attachment, _data); + return s_ctx->readTexture(_handle, _attachment, _data); } FrameBufferHandle createFrameBuffer(uint16_t _width, uint16_t _height, TextureFormat::Enum _format, uint32_t _textureFlags) @@ -3859,9 +3861,9 @@ BGFX_C_API void bgfx_reset(uint32_t _width, uint32_t _height, uint32_t _flags) bgfx::reset(_width, _height, _flags); } -BGFX_C_API uint32_t bgfx_frame() +BGFX_C_API uint32_t bgfx_frame(bool _capture) { - return bgfx::frame(); + return bgfx::frame(_capture); } BGFX_C_API bgfx_renderer_type_t bgfx_get_renderer_type() @@ -4167,16 +4169,16 @@ BGFX_C_API void bgfx_update_texture_cube(bgfx_texture_handle_t _handle, uint8_t bgfx::updateTextureCube(handle.cpp, _side, _mip, _x, _y, _width, _height, (const bgfx::Memory*)_mem, _pitch); } -BGFX_C_API void bgfx_read_texture(bgfx_texture_handle_t _handle, void* _data) +BGFX_C_API uint32_t bgfx_read_texture(bgfx_texture_handle_t _handle, void* _data) { union { bgfx_texture_handle_t c; bgfx::TextureHandle cpp; } handle = { _handle }; - bgfx::readTexture(handle.cpp, _data); + return bgfx::readTexture(handle.cpp, _data); } -BGFX_C_API void bgfx_read_frame_buffer(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, void* _data) +BGFX_C_API uint32_t bgfx_read_frame_buffer(bgfx_frame_buffer_handle_t _handle, uint8_t _attachment, void* _data) { union { bgfx_frame_buffer_handle_t c; bgfx::FrameBufferHandle cpp; } handle = { _handle }; - bgfx::readTexture(handle.cpp, _attachment, _data); + return bgfx::readTexture(handle.cpp, _attachment, _data); } BGFX_C_API void bgfx_destroy_texture(bgfx_texture_handle_t _handle) diff --git a/3rdparty/bgfx/src/bgfx_p.h b/3rdparty/bgfx/src/bgfx_p.h index 3f9e92ad0ce..02955987eff 100644 --- a/3rdparty/bgfx/src/bgfx_p.h +++ b/3rdparty/bgfx/src/bgfx_p.h @@ -1375,6 +1375,8 @@ namespace bgfx , m_waitSubmit(0) , m_waitRender(0) , m_hmdInitialized(false) + , m_capture(false) + , m_discard(false) { SortKey term; term.reset(); @@ -1428,6 +1430,7 @@ namespace bgfx m_cmdPre.start(); m_cmdPost.start(); m_uniformBuffer->reset(); + m_capture = false; m_discard = false; } @@ -1836,6 +1839,7 @@ namespace bgfx int64_t m_waitRender; bool m_hmdInitialized; + bool m_capture; bool m_discard; }; @@ -3125,20 +3129,21 @@ namespace bgfx textureDecRef(_handle); } - BGFX_API_FUNC(void readTexture(TextureHandle _handle, void* _data) ) + BGFX_API_FUNC(uint32_t readTexture(TextureHandle _handle, void* _data) ) { CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::ReadTexture); cmdbuf.write(_handle); cmdbuf.write(_data); + return m_frames + 2; } - BGFX_API_FUNC(void readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) ) + BGFX_API_FUNC(uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) ) { const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); TextureHandle textureHandle = ref.un.m_th[_attachment]; BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - readTexture(textureHandle, _data); + return readTexture(textureHandle, _data); } void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height) @@ -3865,7 +3870,7 @@ namespace bgfx blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, textureHandle, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); } - BGFX_API_FUNC(uint32_t frame() ); + BGFX_API_FUNC(uint32_t frame(bool _capture = false) ); void dumpViewStats(); void freeDynamicBuffers(); diff --git a/3rdparty/bgfx/src/debug_renderdoc.cpp b/3rdparty/bgfx/src/debug_renderdoc.cpp index 0cb7be99d64..b3e3e61f468 100644 --- a/3rdparty/bgfx/src/debug_renderdoc.cpp +++ b/3rdparty/bgfx/src/debug_renderdoc.cpp @@ -56,7 +56,7 @@ namespace bgfx } pRENDERDOC_GetAPI RENDERDOC_GetAPI; - static RENDERDOC_API_1_0_0* s_renderDoc; + static RENDERDOC_API_1_0_1* s_renderDoc; void* loadRenderDoc() { @@ -105,6 +105,14 @@ namespace bgfx } } + void renderDocTriggerCapture() + { + if (NULL != s_renderDoc) + { + s_renderDoc->TriggerCapture(); + } + } + } // namespace bgfx #else @@ -121,6 +129,10 @@ namespace bgfx { } + void renderDocTriggerCapture() + { + } + } // namespace bgfx #endif // BGFX_CONFIG_DEBUG_PIX && (BX_PLATFORM_WINDOWS || BX_PLATFORM_LINUX) diff --git a/3rdparty/bgfx/src/debug_renderdoc.h b/3rdparty/bgfx/src/debug_renderdoc.h index 803805ea581..92111d1e61c 100644 --- a/3rdparty/bgfx/src/debug_renderdoc.h +++ b/3rdparty/bgfx/src/debug_renderdoc.h @@ -10,6 +10,7 @@ namespace bgfx { void* loadRenderDoc(); void unloadRenderDoc(void*); + void renderDocTriggerCapture(); } // namespace bgfx diff --git a/3rdparty/bgfx/src/glcontext_egl.cpp b/3rdparty/bgfx/src/glcontext_egl.cpp index c47acd9e1a8..b15073348a0 100644 --- a/3rdparty/bgfx/src/glcontext_egl.cpp +++ b/3rdparty/bgfx/src/glcontext_egl.cpp @@ -123,7 +123,7 @@ EGL_IMPORT ~SwapChainGL() { - eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(m_display, m_context); eglDestroySurface(m_display, m_surface); } @@ -324,7 +324,7 @@ EGL_IMPORT { if (NULL != m_display) { - eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(m_display, m_context); eglDestroySurface(m_display, m_surface); eglTerminate(m_display); @@ -344,7 +344,7 @@ EGL_IMPORT if (NULL != m_display) { EGLNativeWindowType nwh = (EGLNativeWindowType )g_platformData.nwh; - eglMakeCurrent(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglMakeCurrent(m_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroySurface(m_display, m_surface); m_surface = eglCreateWindowSurface(m_display, m_config, nwh, NULL); BGFX_FATAL(m_surface != EGL_NO_SURFACE, Fatal::UnableToInitialize, "Failed to create surface."); diff --git a/3rdparty/bgfx/src/image.cpp b/3rdparty/bgfx/src/image.cpp index 8a93cee7d5e..1d91f1e7627 100644 --- a/3rdparty/bgfx/src/image.cpp +++ b/3rdparty/bgfx/src/image.cpp @@ -10,92 +10,93 @@ namespace bgfx { static const ImageBlockInfo s_imageBlockInfo[] = { - // +------------------------------- bits per pixel - // | +---------------------------- block width - // | | +------------------------- block height - // | | | +--------------------- block size - // | | | | +------------------ min blocks x - // | | | | | +--------------- min blocks y - // | | | | | | +----------- depth bits - // | | | | | | | +-------- stencil bits - // | | | | | | | | +----- encoding type - // | | | | | | | | | - { 4, 4, 4, 8, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC1 - { 8, 4, 4, 16, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC2 - { 8, 4, 4, 16, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC3 - { 4, 4, 4, 8, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC4 - { 8, 4, 4, 16, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC5 - { 8, 4, 4, 16, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC6H - { 8, 4, 4, 16, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BC7 - { 4, 4, 4, 8, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC1 - { 4, 4, 4, 8, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2 - { 8, 4, 4, 16, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2A - { 4, 4, 4, 8, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2A1 - { 2, 8, 4, 8, 2, 2, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC12 - { 4, 4, 4, 8, 2, 2, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC14 - { 2, 8, 4, 8, 2, 2, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC12A - { 4, 4, 4, 8, 2, 2, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC14A - { 2, 8, 4, 8, 2, 2, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC22 - { 4, 4, 4, 8, 2, 2, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC24 - { 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Count) }, // Unknown - { 1, 8, 1, 1, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // R1 - { 8, 1, 1, 1, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // A8 - { 8, 1, 1, 1, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // R8 - { 8, 1, 1, 1, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // R8I - { 8, 1, 1, 1, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // R8U - { 8, 1, 1, 1, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // R8S - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // R16 - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // R16I - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // R16U - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // R16F - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // R16S - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // R32I - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // R32U - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // R32F - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RG8 - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RG8I - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RG8U - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // RG8S - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RG16 - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RG16I - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RG16U - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RG16F - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // RG16S - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RG32I - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RG32U - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RG32F - { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGB8 - { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RGB8I - { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RGB8U - { 24, 1, 1, 3, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // RGB8S - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RGB9E5F - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // BGRA8 - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGBA8 - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RGBA8I - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RGBA8U - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // RGBA8S - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGBA16 - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RGBA16I - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RGBA16U - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RGBA16F - { 64, 1, 1, 8, 1, 1, 0, 0, uint8_t(EncodingType::Snorm) }, // RGBA16S - { 128, 1, 1, 16, 1, 1, 0, 0, uint8_t(EncodingType::Int ) }, // RGBA32I - { 128, 1, 1, 16, 1, 1, 0, 0, uint8_t(EncodingType::Uint ) }, // RGBA32U - { 128, 1, 1, 16, 1, 1, 0, 0, uint8_t(EncodingType::Float) }, // RGBA32F - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // R5G6B5 - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGBA4 - { 16, 1, 1, 2, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGB5A1 - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // RGB10A2 - { 32, 1, 1, 4, 1, 1, 0, 0, uint8_t(EncodingType::Unorm) }, // R11G11B10F - { 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Count) }, // UnknownDepth - { 16, 1, 1, 2, 1, 1, 16, 0, uint8_t(EncodingType::Unorm) }, // D16 - { 24, 1, 1, 3, 1, 1, 24, 0, uint8_t(EncodingType::Unorm) }, // D24 - { 32, 1, 1, 4, 1, 1, 24, 8, uint8_t(EncodingType::Unorm) }, // D24S8 - { 32, 1, 1, 4, 1, 1, 32, 0, uint8_t(EncodingType::Unorm) }, // D32 - { 16, 1, 1, 2, 1, 1, 16, 0, uint8_t(EncodingType::Unorm) }, // D16F - { 24, 1, 1, 3, 1, 1, 24, 0, uint8_t(EncodingType::Unorm) }, // D24F - { 32, 1, 1, 4, 1, 1, 32, 0, uint8_t(EncodingType::Unorm) }, // D32F - { 8, 1, 1, 1, 1, 1, 0, 8, uint8_t(EncodingType::Unorm) }, // D0S8 + // +-------------------------------------------- bits per pixel + // | +----------------------------------------- block width + // | | +-------------------------------------- block height + // | | | +---------------------------------- block size + // | | | | +------------------------------- min blocks x + // | | | | | +---------------------------- min blocks y + // | | | | | | +------------------------ depth bits + // | | | | | | | +--------------------- stencil bits + // | | | | | | | | +---+---+---+----- r, g, b, a bits + // | | | | | | | | r g b a +-- encoding type + // | | | | | | | | | | | | | + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC1 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC2 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC3 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC4 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC5 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC6H + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // BC7 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC1 + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2 + { 8, 4, 4, 16, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2A + { 4, 4, 4, 8, 1, 1, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // ETC2A1 + { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC12 + { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC14 + { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC12A + { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC14A + { 2, 8, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC22 + { 4, 4, 4, 8, 2, 2, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // PTC24 + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Count) }, // Unknown + { 1, 8, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // R1 + { 8, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 8, uint8_t(EncodingType::Unorm) }, // A8 + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // R8 + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Int ) }, // R8I + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Uint ) }, // R8U + { 8, 1, 1, 1, 1, 1, 0, 0, 8, 0, 0, 0, uint8_t(EncodingType::Snorm) }, // R8S + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // R16 + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Int ) }, // R16I + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Uint ) }, // R16U + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Float) }, // R16F + { 16, 1, 1, 2, 1, 1, 0, 0, 16, 0, 0, 0, uint8_t(EncodingType::Snorm) }, // R16S + { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(EncodingType::Int ) }, // R32I + { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(EncodingType::Uint ) }, // R32U + { 32, 1, 1, 4, 1, 1, 0, 0, 32, 0, 0, 0, uint8_t(EncodingType::Float) }, // R32F + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Unorm) }, // RG8 + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Int ) }, // RG8I + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Uint ) }, // RG8U + { 16, 1, 1, 2, 1, 1, 0, 0, 8, 8, 0, 0, uint8_t(EncodingType::Snorm) }, // RG8S + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Unorm) }, // RG16 + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Int ) }, // RG16I + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Uint ) }, // RG16U + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Float) }, // RG16F + { 32, 1, 1, 4, 1, 1, 0, 0, 16, 16, 0, 0, uint8_t(EncodingType::Snorm) }, // RG16S + { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(EncodingType::Int ) }, // RG32I + { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(EncodingType::Uint ) }, // RG32U + { 64, 1, 1, 8, 1, 1, 0, 0, 32, 32, 0, 0, uint8_t(EncodingType::Float) }, // RG32F + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Unorm) }, // RGB8 + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Int ) }, // RGB8I + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Uint ) }, // RGB8U + { 24, 1, 1, 3, 1, 1, 0, 0, 8, 8, 8, 0, uint8_t(EncodingType::Snorm) }, // RGB8S + { 32, 1, 1, 4, 1, 1, 0, 0, 9, 9, 9, 5, uint8_t(EncodingType::Float) }, // RGB9E5F + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Unorm) }, // BGRA8 + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Unorm) }, // RGBA8 + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Int ) }, // RGBA8I + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Uint ) }, // RGBA8U + { 32, 1, 1, 4, 1, 1, 0, 0, 8, 8, 8, 8, uint8_t(EncodingType::Snorm) }, // RGBA8S + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Unorm) }, // RGBA16 + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Int ) }, // RGBA16I + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Uint ) }, // RGBA16U + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Float) }, // RGBA16F + { 64, 1, 1, 8, 1, 1, 0, 0, 16, 16, 16, 16, uint8_t(EncodingType::Snorm) }, // RGBA16S + { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(EncodingType::Int ) }, // RGBA32I + { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(EncodingType::Uint ) }, // RGBA32U + { 128, 1, 1, 16, 1, 1, 0, 0, 32, 32, 32, 32, uint8_t(EncodingType::Float) }, // RGBA32F + { 16, 1, 1, 2, 1, 1, 0, 0, 5, 6, 5, 0, uint8_t(EncodingType::Unorm) }, // R5G6B5 + { 16, 1, 1, 2, 1, 1, 0, 0, 4, 4, 4, 4, uint8_t(EncodingType::Unorm) }, // RGBA4 + { 16, 1, 1, 2, 1, 1, 0, 0, 5, 5, 5, 1, uint8_t(EncodingType::Unorm) }, // RGB5A1 + { 32, 1, 1, 4, 1, 1, 0, 0, 10, 10, 10, 2, uint8_t(EncodingType::Unorm) }, // RGB10A2 + { 32, 1, 1, 4, 1, 1, 0, 0, 11, 11, 10, 0, uint8_t(EncodingType::Unorm) }, // R11G11B10F + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, uint8_t(EncodingType::Count) }, // UnknownDepth + { 16, 1, 1, 2, 1, 1, 16, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D16 + { 24, 1, 1, 3, 1, 1, 24, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D24 + { 32, 1, 1, 4, 1, 1, 24, 8, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D24S8 + { 32, 1, 1, 4, 1, 1, 32, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D32 + { 16, 1, 1, 2, 1, 1, 16, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D16F + { 24, 1, 1, 3, 1, 1, 24, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D24F + { 32, 1, 1, 4, 1, 1, 32, 0, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D32F + { 8, 1, 1, 1, 1, 1, 0, 8, 0, 0, 0, 0, uint8_t(EncodingType::Unorm) }, // D0S8 }; BX_STATIC_ASSERT(TextureFormat::Count == BX_COUNTOF(s_imageBlockInfo) ); @@ -452,6 +453,100 @@ namespace bgfx } } + void imageRgba32fToLinear(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) + { + uint8_t* dst = ( uint8_t*)_dst; + const uint8_t* src = (const uint8_t*)_src; + + for (uint32_t yy = 0; yy < _height; ++yy, src += _pitch) + { + for (uint32_t xx = 0; xx < _width; ++xx, dst += 16) + { + float* fd = ( float*)dst; + const float* fs = (const float*)src; + + fd[0] = bx::fpow(fs[0], 1.0f/2.2f); + fd[1] = bx::fpow(fs[1], 1.0f/2.2f); + fd[2] = bx::fpow(fs[2], 1.0f/2.2f); + fd[3] = fs[3]; + } + } + } + + void imageRgba32fToGamma(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src) + { + uint8_t* dst = ( uint8_t*)_dst; + const uint8_t* src = (const uint8_t*)_src; + + for (uint32_t yy = 0; yy < _height; ++yy, src += _pitch) + { + for (uint32_t xx = 0; xx < _width; ++xx, dst += 16) + { + float* fd = ( float*)dst; + const float* fs = (const float*)src; + + fd[0] = bx::fpow(fs[0], 2.2f); + fd[1] = bx::fpow(fs[1], 2.2f); + fd[2] = bx::fpow(fs[2], 2.2f); + fd[3] = fs[3]; + } + } + } + + void imageRgba32fLinearDownsample2x2Ref(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + { + const uint32_t dstwidth = _width/2; + const uint32_t dstheight = _height/2; + + if (0 == dstwidth + || 0 == dstheight) + { + return; + } + + const uint8_t* src = (const uint8_t*)_src; + uint8_t* dst = (uint8_t*)_dst; + + for (uint32_t yy = 0, ystep = _pitch*2; yy < dstheight; ++yy, src += ystep) + { + const float* rgba0 = (const float*)&src[0]; + const float* rgba1 = (const float*)&src[_pitch]; + for (uint32_t xx = 0; xx < dstwidth; ++xx, rgba0 += 8, rgba1 += 8, dst += 16) + { + float xyz[4]; + xyz[0] = rgba0[0]; + xyz[1] = rgba0[1]; + xyz[2] = rgba0[2]; + xyz[3] = rgba0[3]; + + xyz[0] += rgba0[4]; + xyz[1] += rgba0[5]; + xyz[2] += rgba0[6]; + xyz[3] += rgba0[7]; + + xyz[0] += rgba1[0]; + xyz[1] += rgba1[1]; + xyz[2] += rgba1[2]; + xyz[3] += rgba1[3]; + + xyz[0] += rgba1[4]; + xyz[1] += rgba1[5]; + xyz[2] += rgba1[6]; + xyz[3] += rgba1[7]; + + xyz[0] *= 0.25f; + xyz[1] *= 0.25f; + xyz[2] *= 0.25f; + xyz[3] *= 0.25f; + } + } + } + + void imageRgba32fLinearDownsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) + { + imageRgba32fLinearDownsample2x2Ref(_width, _height, _pitch, _src, _dst); + } + void imageRgba32fDownsample2x2NormalMapRef(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst) { const uint32_t dstwidth = _width/2; @@ -1563,7 +1658,7 @@ namespace bgfx bool imageConvert(void* _dst, TextureFormat::Enum _dstFormat, const void* _src, TextureFormat::Enum _srcFormat, uint32_t _width, uint32_t _height) { const uint32_t srcBpp = s_imageBlockInfo[_srcFormat].bitsPerPixel; - return imageConvert(_dst, _dstFormat, _src, _srcFormat, _width, _height, _width*srcBpp); + return imageConvert(_dst, _dstFormat, _src, _srcFormat, _width, _height, _width*srcBpp/8); } uint8_t bitRangeConvert(uint32_t _in, uint32_t _from, uint32_t _to) @@ -3605,12 +3700,17 @@ namespace bgfx break; default: + if (isCompressed(_format) ) { void* temp = BX_ALLOC(_allocator, imageGetSize(_format, uint16_t(_pitch/4), uint16_t(_height) ) ); imageDecodeToRgba8(temp, _src, _width, _height, _pitch, _format); imageRgba8ToRgba32f(_dst, _width, _height, _pitch, temp); BX_FREE(_allocator, temp); } + else + { + imageConvert(_dst, TextureFormat::RGBA32F, _src, _format, _width, _height, _pitch); + } break; } } diff --git a/3rdparty/bgfx/src/image.h b/3rdparty/bgfx/src/image.h index 173cf7b0fff..64bbf1c5f29 100644 --- a/3rdparty/bgfx/src/image.h +++ b/3rdparty/bgfx/src/image.h @@ -63,6 +63,10 @@ namespace bgfx uint8_t minBlockY; uint8_t depthBits; uint8_t stencilBits; + uint8_t rBits; + uint8_t gBits; + uint8_t bBits; + uint8_t aBits; uint8_t encoding; }; @@ -304,6 +308,15 @@ namespace bgfx /// void imageRgba8Downsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); + /// + void imageRgba32fToLinear(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src); + + /// + void imageRgba32fToGamma(void* _dst, uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src); + + /// + void imageRgba32fLinearDownsample2x2(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); + /// void imageRgba32fDownsample2x2NormalMap(uint32_t _width, uint32_t _height, uint32_t _pitch, const void* _src, void* _dst); diff --git a/3rdparty/bgfx/src/renderer_d3d11.cpp b/3rdparty/bgfx/src/renderer_d3d11.cpp index e226a9e3a9b..f8185ed0900 100644 --- a/3rdparty/bgfx/src/renderer_d3d11.cpp +++ b/3rdparty/bgfx/src/renderer_d3d11.cpp @@ -2343,18 +2343,18 @@ BX_PRAGMA_DIAGNOSTIC_POP(); m_rasterizerStateCache.invalidate(); } - uint32_t flags = _resolution.m_flags & ~(0 + const uint32_t maskFlags = ~(0 | BGFX_RESET_HMD_RECENTER | BGFX_RESET_MAXANISOTROPY | BGFX_RESET_DEPTH_CLAMP | BGFX_RESET_SUSPEND ); - if (m_resolution.m_width != _resolution.m_width - || m_resolution.m_height != _resolution.m_height - || m_resolution.m_flags != flags) + if (m_resolution.m_width != _resolution.m_width + || m_resolution.m_height != _resolution.m_height + || (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) ) { - flags &= ~BGFX_RESET_INTERNAL_FORCE; + uint32_t flags = _resolution.m_flags & (~BGFX_RESET_INTERNAL_FORCE); bool resize = true && !BX_ENABLED(BX_PLATFORM_XBOXONE || BX_PLATFORM_WINRT) // can't use ResizeBuffers on Windows Phone @@ -5020,6 +5020,11 @@ BX_PRAGMA_DIAGNOSTIC_POP(); return; } + if (_render->m_capture) + { + renderDocTriggerCapture(); + } + PIX_BEGINEVENT(D3DCOLOR_RGBA(0xff, 0x00, 0x00, 0xff), L"rendererSubmit"); BGFX_GPU_PROFILER_BEGIN_DYNAMIC("rendererSubmit"); diff --git a/3rdparty/bgfx/src/renderer_d3d12.cpp b/3rdparty/bgfx/src/renderer_d3d12.cpp index b94303eb952..3a35feacd04 100644 --- a/3rdparty/bgfx/src/renderer_d3d12.cpp +++ b/3rdparty/bgfx/src/renderer_d3d12.cpp @@ -367,6 +367,9 @@ namespace bgfx { namespace d3d12 static const GUID IID_ID3D12RootSignature = { 0xc54a6b66, 0x72df, 0x4ee8, { 0x8b, 0xe5, 0xa9, 0x46, 0xa1, 0x42, 0x92, 0x14 } }; static const GUID IID_ID3D12QueryHeap = { 0x0d9658ae, 0xed45, 0x469e, { 0xa6, 0x1d, 0x97, 0x0e, 0xc5, 0x83, 0xca, 0xb4 } }; static const GUID IID_IDXGIFactory4 = { 0x1bc6ea02, 0xef36, 0x464f, { 0xbf, 0x0c, 0x21, 0xca, 0x39, 0xe5, 0x16, 0x8a } }; +#else + static const GUID IID_ID3D12CommandSignature = { 0xc36a797c, 0xec80, 0x4f0a, { 0x89, 0x85, 0xa7, 0xb2, 0x47, 0x50, 0x82, 0xd1 } }; + static const GUID IID_ID3D12QueryHeap = { 0x0d9658ae, 0xed45, 0x469e, { 0xa6, 0x1d, 0x97, 0x0e, 0xc5, 0x83, 0xca, 0xb4 } }; #endif // USE_D3D12_DYNAMIC_LIB struct HeapProperty @@ -1868,18 +1871,18 @@ data.NumQualityLevels = 0; m_pipelineStateCache.invalidate(); } - uint32_t flags = _resolution.m_flags & ~(0 + const uint32_t maskFlags = ~(0 | BGFX_RESET_HMD_RECENTER | BGFX_RESET_MAXANISOTROPY | BGFX_RESET_DEPTH_CLAMP | BGFX_RESET_SUSPEND ); - if (m_resolution.m_width != _resolution.m_width - || m_resolution.m_height != _resolution.m_height - || m_resolution.m_flags != flags) + if (m_resolution.m_width != _resolution.m_width + || m_resolution.m_height != _resolution.m_height + || (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) ) { - flags &= ~BGFX_RESET_INTERNAL_FORCE; + uint32_t flags = _resolution.m_flags & (~BGFX_RESET_INTERNAL_FORCE); bool resize = (m_resolution.m_flags&BGFX_RESET_MSAA_MASK) == (_resolution.m_flags&BGFX_RESET_MSAA_MASK); diff --git a/3rdparty/bgfx/src/renderer_d3d9.cpp b/3rdparty/bgfx/src/renderer_d3d9.cpp index 9b939b62a94..84230d317df 100644 --- a/3rdparty/bgfx/src/renderer_d3d9.cpp +++ b/3rdparty/bgfx/src/renderer_d3d9.cpp @@ -1291,18 +1291,18 @@ namespace bgfx { namespace d3d9 ? m_caps.MaxAnisotropy : 1 ; - uint32_t flags = _resolution.m_flags & ~(0 + const uint32_t maskFlags = ~(0 | BGFX_RESET_HMD_RECENTER | BGFX_RESET_MAXANISOTROPY | BGFX_RESET_DEPTH_CLAMP | BGFX_RESET_SUSPEND ); - if (m_resolution.m_width != _resolution.m_width - || m_resolution.m_height != _resolution.m_height - || m_resolution.m_flags != flags) + if (m_resolution.m_width != _resolution.m_width + || m_resolution.m_height != _resolution.m_height + || (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) ) { - flags &= ~BGFX_RESET_INTERNAL_FORCE; + uint32_t flags = _resolution.m_flags & (~BGFX_RESET_INTERNAL_FORCE); m_resolution = _resolution; m_resolution.m_flags = flags; diff --git a/3rdparty/bgfx/src/renderer_gl.cpp b/3rdparty/bgfx/src/renderer_gl.cpp index 68e4b952cd9..1ed6333c217 100644 --- a/3rdparty/bgfx/src/renderer_gl.cpp +++ b/3rdparty/bgfx/src/renderer_gl.cpp @@ -2507,18 +2507,18 @@ namespace bgfx { namespace gl } } - uint32_t flags = _resolution.m_flags & ~(0 + const uint32_t maskFlags = ~(0 | BGFX_RESET_HMD_RECENTER | BGFX_RESET_MAXANISOTROPY | BGFX_RESET_DEPTH_CLAMP | BGFX_RESET_SUSPEND ); - if (m_resolution.m_width != _resolution.m_width - || m_resolution.m_height != _resolution.m_height - || m_resolution.m_flags != flags) + if (m_resolution.m_width != _resolution.m_width + || m_resolution.m_height != _resolution.m_height + || (m_resolution.m_flags&maskFlags) != (_resolution.m_flags&maskFlags) ) { - flags &= ~BGFX_RESET_INTERNAL_FORCE; + uint32_t flags = _resolution.m_flags & (~BGFX_RESET_INTERNAL_FORCE); m_resolution = _resolution; m_resolution.m_flags = flags; @@ -5640,6 +5640,11 @@ namespace bgfx { namespace gl { BGFX_GPU_PROFILER_BEGIN_DYNAMIC("rendererSubmit"); + if (_render->m_capture) + { + renderDocTriggerCapture(); + } + if (1 < m_numWindows && m_vaoSupport) { diff --git a/3rdparty/bgfx/tools/texturec/texturec.cpp b/3rdparty/bgfx/tools/texturec/texturec.cpp index ba23a528339..c1c271fddbc 100644 --- a/3rdparty/bgfx/tools/texturec/texturec.cpp +++ b/3rdparty/bgfx/tools/texturec/texturec.cpp @@ -23,8 +23,39 @@ extern "C" { #include } +#define LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_NO_COMPILE_DISK +#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_NO_COMPILE_CPP +#include + +void* lodepng_malloc(size_t _size) +{ + return ::malloc(_size); +} + +void* lodepng_realloc(void* _ptr, size_t _size) +{ + return ::realloc(_ptr, _size); +} + +void lodepng_free(void* _ptr) +{ + ::free(_ptr); +} + +BX_PRAGMA_DIAGNOSTIC_PUSH(); +BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wmissing-field-initializers"); +BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow"); +BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wint-to-pointer-cast") +#define STBI_MALLOC(_size) lodepng_malloc(_size) +#define STBI_REALLOC(_ptr, _size) lodepng_realloc(_ptr, _size) +#define STBI_FREE(_ptr) lodepng_free(_ptr) #define STB_IMAGE_IMPLEMENTATION #include +BX_PRAGMA_DIAGNOSTIC_POP(); #if 0 # define BX_TRACE(_format, ...) fprintf(stderr, "" _format "\n", ##__VA_ARGS__) @@ -60,6 +91,141 @@ namespace bgfx ::free(mem); } + bool imageParse(ImageContainer& _imageContainer, const void* _data, uint32_t _size, void** _out) + { + *_out = NULL; + bool loaded = imageParse(_imageContainer, _data, _size); + if (!loaded) + { + bgfx::TextureFormat::Enum format = bgfx::TextureFormat::RGBA8; + uint32_t bpp = 32; + + uint32_t width = 0; + uint32_t height = 0; + + uint8_t* out = NULL; + static uint8_t pngMagic[] = { 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0a }; + if (0 == memcmp(_data, pngMagic, sizeof(pngMagic) ) ) + { + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.decoder.color_convert = 0; + error = lodepng_decode(&out, &width, &height, &state, (uint8_t*)_data, _size); + + if (0 == error) + { + *_out = out; + + switch (state.info_raw.bitdepth) + { + case 8: + switch (state.info_raw.colortype) + { + case LCT_GREY: + format = bgfx::TextureFormat::R8; + bpp = 8; + break; + + case LCT_GREY_ALPHA: + format = bgfx::TextureFormat::RG8; + bpp = 16; + break; + + case LCT_RGB: + format = bgfx::TextureFormat::RGB8; + bpp = 24; + break; + + case LCT_RGBA: + format = bgfx::TextureFormat::RGBA8; + bpp = 32; + break; + + case LCT_PALETTE: + break; + } + break; + + case 16: + switch (state.info_raw.colortype) + { + case LCT_GREY: + for (uint32_t ii = 0, num = width*height; ii < num; ++ii) + { + uint16_t* rgba = (uint16_t*)out + ii*4; + rgba[0] = bx::toHostEndian(rgba[0], false); + } + format = bgfx::TextureFormat::R16; + bpp = 16; + break; + + case LCT_GREY_ALPHA: + for (uint32_t ii = 0, num = width*height; ii < num; ++ii) + { + uint16_t* rgba = (uint16_t*)out + ii*4; + rgba[0] = bx::toHostEndian(rgba[0], false); + rgba[1] = bx::toHostEndian(rgba[1], false); + } + format = bgfx::TextureFormat::R16; + bpp = 16; + break; + + case LCT_RGBA: + for (uint32_t ii = 0, num = width*height; ii < num; ++ii) + { + uint16_t* rgba = (uint16_t*)out + ii*4; + rgba[0] = bx::toHostEndian(rgba[0], false); + rgba[1] = bx::toHostEndian(rgba[1], false); + rgba[2] = bx::toHostEndian(rgba[2], false); + rgba[3] = bx::toHostEndian(rgba[3], false); + } + format = bgfx::TextureFormat::RGBA16; + bpp = 64; + break; + + case LCT_RGB: + case LCT_PALETTE: + break; + } + break; + + default: + break; + } + } + + lodepng_state_cleanup(&state); + } + else + { + int comp = 0; + *_out = stbi_load_from_memory( (uint8_t*)_data, _size, (int*)&width, (int*)&height, &comp, 4); + } + + loaded = NULL != *_out; + + if (loaded) + { + _imageContainer.m_data = *_out; + _imageContainer.m_size = width*height*bpp/8; + _imageContainer.m_offset = 0; + _imageContainer.m_width = width; + _imageContainer.m_height = height; + _imageContainer.m_depth = 1; + _imageContainer.m_format = format; + _imageContainer.m_numMips = 1; + _imageContainer.m_hasAlpha = true; + _imageContainer.m_cubeMap = false; + _imageContainer.m_ktx = false; + _imageContainer.m_ktxLE = false; + _imageContainer.m_srgb = false; + } + } + + return loaded; + } + bool imageEncodeFromRgba8(void* _dst, const void* _src, uint32_t _width, uint32_t _height, uint8_t _format) { TextureFormat::Enum format = TextureFormat::Enum(_format); @@ -334,7 +500,7 @@ void help(const char* _error = NULL) ); fprintf(stderr - , "Usage: texturec -f -o -t \n" + , "Usage: texturec -f -o [-t ]\n" "\n" "Supported input file types:\n" @@ -400,20 +566,6 @@ int main(int _argc, const char* _argv[]) return EXIT_FAILURE; } - const char* type = cmdLine.findOption('t'); - bgfx::TextureFormat::Enum format = bgfx::TextureFormat::BGRA8; - - if (NULL != type) - { - format = bgfx::getFormat(type); - - if (!isValid(format) ) - { - help("Invalid format specified."); - return EXIT_FAILURE; - } - } - const bool mips = cmdLine.hasArg('m', "mips"); const bool normalMap = cmdLine.hasArg('n', "normalmap"); const bool iqa = cmdLine.hasArg('\0', "iqa"); @@ -429,40 +581,29 @@ int main(int _argc, const char* _argv[]) uint8_t* decodedImage = NULL; ImageContainer imageContainer; - bool loaded = imageParse(imageContainer, mem->data, mem->size); - if (!loaded) + bool loaded = imageParse(imageContainer, mem->data, mem->size, (void**)&decodedImage); + if (NULL != decodedImage) { - int width = 0; - int height = 0; - int comp = 0; - - decodedImage = stbi_load_from_memory( (uint8_t*)mem->data, mem->size, &width, &height, &comp, 4); - loaded = NULL != decodedImage; - - if (loaded) - { - release(mem); - - mem = makeRef(decodedImage, width*height*4); - - imageContainer.m_data = mem->data; - imageContainer.m_size = mem->size; - imageContainer.m_offset = 0; - imageContainer.m_width = width; - imageContainer.m_height = height; - imageContainer.m_depth = 1; - imageContainer.m_format = bgfx::TextureFormat::RGBA8; - imageContainer.m_numMips = 1; - imageContainer.m_hasAlpha = true; - imageContainer.m_cubeMap = false; - imageContainer.m_ktx = false; - imageContainer.m_ktxLE = false; - imageContainer.m_srgb = false; - } + release(mem); + mem = makeRef(imageContainer.m_data, imageContainer.m_size); } if (loaded) { + const char* type = cmdLine.findOption('t'); + bgfx::TextureFormat::Enum format = imageContainer.m_format; + + if (NULL != type) + { + format = bgfx::getFormat(type); + + if (!isValid(format) ) + { + help("Invalid format specified."); + return EXIT_FAILURE; + } + } + bx::CrtAllocator allocator; const Memory* output = NULL; @@ -540,6 +681,66 @@ int main(int _argc, const char* _argv[]) BX_FREE(&allocator, rgbaDst); } + else if (8 != getBlockInfo(imageContainer.m_format).rBits) + { + output = imageAlloc(imageContainer, format, mip.m_width, mip.m_height, 0, false, mips); + + ImageMip dstMip; + imageGetRawData(imageContainer, 0, 0, NULL, 0, dstMip); + + if (mip.m_width != dstMip.m_width + && mip.m_height != dstMip.m_height) + { + printf("Invalid input image size %dx%d, it must be at least %dx%d to be converted to %s format.\n" + , mip.m_width + , mip.m_height + , dstMip.m_width + , dstMip.m_height + , getName(format) + ); + return EXIT_FAILURE; + } + + uint32_t size = imageGetSize(TextureFormat::RGBA32F, dstMip.m_width, dstMip.m_height); + temp = BX_ALLOC(&allocator, size); + float* rgba = (float*)temp; + float* rgbaDst = (float*)BX_ALLOC(&allocator, size); + + imageDecodeToRgba32f(&allocator + , rgba + , mip.m_data + , mip.m_width + , mip.m_height + , mip.m_width*mip.m_bpp/8 + , mip.m_format + ); + imageEncodeFromRgba32f(&allocator, output->data, rgba, dstMip.m_width, dstMip.m_height, format); + + imageRgba32fToLinear(rgba + , mip.m_width + , mip.m_height + , mip.m_width*mip.m_bpp/8 + , rgba + ); + + for (uint8_t lod = 1; lod < numMips; ++lod) + { + imageRgba32fLinearDownsample2x2(dstMip.m_width, dstMip.m_height, dstMip.m_width*16, rgba, rgba); + imageGetRawData(imageContainer, 0, lod, output->data, output->size, dstMip); + uint8_t* data = const_cast(dstMip.m_data); + + imageRgba32fToGamma(rgbaDst + , mip.m_width + , mip.m_height + , mip.m_width*mip.m_bpp/8 + , rgba + ); + + imageEncodeFromRgba32f(&allocator, data, rgbaDst, dstMip.m_width, dstMip.m_height, format); + } + + BX_FREE(&allocator, rgbaDst); + } else { output = imageAlloc(imageContainer, format, mip.m_width, mip.m_height, 0, false, mips); @@ -649,6 +850,11 @@ int main(int _argc, const char* _argv[]) imageFree(output); } } + else + { + help("Failed to load input file."); + return EXIT_FAILURE; + } release(mem); } diff --git a/3rdparty/bgfx/tools/texturev/texturev.cpp b/3rdparty/bgfx/tools/texturev/texturev.cpp index 01d36b091ca..8d866f97799 100644 --- a/3rdparty/bgfx/tools/texturev/texturev.cpp +++ b/3rdparty/bgfx/tools/texturev/texturev.cpp @@ -721,10 +721,10 @@ int _main_(int _argc, char** _argv) if (ImGui::BeginPopupModal("Help", NULL, ImGuiWindowFlags_AlwaysAutoResize) ) { - ImGui::SetWindowFontScale(1.2f); + ImGui::SetWindowFontScale(1.0f); ImGui::Text( - "texturev, bgfx texture viewer tool\n" + "texturev, bgfx texture viewer tool " ICON_KI_WRENCH "\n" "Copyright 2011-2016 Branimir Karadzic. All rights reserved.\n" "License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause\n" ); @@ -733,6 +733,7 @@ int _main_(int _argc, char** _argv) ImGui::Text("Key bindings:\n\n"); + ImGui::PushFont(ImGui::Font::Mono); ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "ESC"); ImGui::SameLine(64); ImGui::Text("Exit."); ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "h"); ImGui::SameLine(64); ImGui::Text("Toggle help screen."); ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "f"); ImGui::SameLine(64); ImGui::Text("Toggle full-screen."); @@ -753,6 +754,8 @@ int _main_(int _argc, char** _argv) ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "r/g/b"); ImGui::SameLine(64); ImGui::Text("Toggle R, G, or B color channel."); ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "a"); ImGui::SameLine(64); ImGui::Text("Toggle alpha blending."); + ImGui::PopFont(); + ImGui::NextLine(); ImGui::Dummy(ImVec2(0.0f, 0.0f) ); diff --git a/3rdparty/bx/include/bx/fpumath.h b/3rdparty/bx/include/bx/fpumath.h index 2335ad4f2f3..5f64564f688 100644 --- a/3rdparty/bx/include/bx/fpumath.h +++ b/3rdparty/bx/include/bx/fpumath.h @@ -341,6 +341,30 @@ namespace bx _result[2] = 1.0f / _a[2]; } + inline void vec3TangentFrame(const float* _n, float* _t, float* _b) + { + const float nx = _n[0]; + const float ny = _n[1]; + const float nz = _n[2]; + + if (bx::fabsolute(nx) > bx::fabsolute(nz) ) + { + float invLen = 1.0f / bx::fsqrt(nx*nx + nz*nz); + _t[0] = -nz * invLen; + _t[1] = 0.0f; + _t[2] = nx * invLen; + } + else + { + float invLen = 1.0f / bx::fsqrt(ny*ny + nz*nz); + _t[0] = 0.0f; + _t[1] = nz * invLen; + _t[2] = -ny * invLen; + } + + bx::vec3Cross(_b, _n, _t); + } + inline void quatIdentity(float* _result) { _result[0] = 0.0f; diff --git a/3rdparty/bx/scripts/toolchain.lua b/3rdparty/bx/scripts/toolchain.lua index a77b5f71ebd..5ff98ccf8c1 100644 --- a/3rdparty/bx/scripts/toolchain.lua +++ b/3rdparty/bx/scripts/toolchain.lua @@ -13,30 +13,32 @@ function toolchain(_buildDir, _libDir) value = "GCC", description = "Choose GCC flavor", allowed = { - { "android-arm", "Android - ARM" }, - { "android-mips", "Android - MIPS" }, - { "android-x86", "Android - x86" }, - { "asmjs", "Emscripten/asm.js" }, - { "freebsd", "FreeBSD" }, - { "linux-gcc", "Linux (GCC compiler)" }, - { "linux-gcc-5", "Linux (GCC-5 compiler)" }, - { "linux-clang", "Linux (Clang compiler)" }, - { "linux-mips-gcc", "Linux (MIPS, GCC compiler)" }, - { "linux-arm-gcc", "Linux (ARM, GCC compiler)" }, - { "ios-arm", "iOS - ARM" }, - { "ios-simulator", "iOS - Simulator" }, - { "tvos-arm64", "tvOS - ARM64" }, - { "tvos-simulator", "tvOS - Simulator" }, - { "mingw-gcc", "MinGW" }, - { "mingw-clang", "MinGW (clang compiler)" }, - { "nacl", "Native Client" }, - { "nacl-arm", "Native Client - ARM" }, - { "netbsd", "NetBSD" }, - { "osx", "OSX" }, - { "pnacl", "Native Client - PNaCl" }, - { "ps4", "PS4" }, - { "qnx-arm", "QNX/Blackberry - ARM" }, - { "rpi", "RaspberryPi" }, + { "android-arm", "Android - ARM" }, + { "android-mips", "Android - MIPS" }, + { "android-x86", "Android - x86" }, + { "asmjs", "Emscripten/asm.js" }, + { "freebsd", "FreeBSD" }, + { "linux-gcc", "Linux (GCC compiler)" }, + { "linux-gcc-afl", "Linux (GCC + AFL fuzzer)" }, + { "linux-gcc-5", "Linux (GCC-5 compiler)" }, + { "linux-clang", "Linux (Clang compiler)" }, + { "linux-clang-afl", "Linux (Clang + AFL fuzzer)" }, + { "linux-mips-gcc", "Linux (MIPS, GCC compiler)" }, + { "linux-arm-gcc", "Linux (ARM, GCC compiler)" }, + { "ios-arm", "iOS - ARM" }, + { "ios-simulator", "iOS - Simulator" }, + { "tvos-arm64", "tvOS - ARM64" }, + { "tvos-simulator", "tvOS - Simulator" }, + { "mingw-gcc", "MinGW" }, + { "mingw-clang", "MinGW (clang compiler)" }, + { "nacl", "Native Client" }, + { "nacl-arm", "Native Client - ARM" }, + { "netbsd", "NetBSD" }, + { "osx", "OSX" }, + { "pnacl", "Native Client - PNaCl" }, + { "ps4", "PS4" }, + { "qnx-arm", "QNX/Blackberry - ARM" }, + { "rpi", "RaspberryPi" }, }, } @@ -120,7 +122,7 @@ function toolchain(_buildDir, _libDir) tvosPlatform = _OPTIONS["with-tvos"] end - if _ACTION == "gmake" then + if _ACTION == "gmake" or _ACTION == "ninja" then if nil == _OPTIONS["gcc"] then print("GCC flavor must be specified!") @@ -206,6 +208,12 @@ function toolchain(_buildDir, _libDir) elseif "linux-gcc" == _OPTIONS["gcc"] then location (path.join(_buildDir, "projects", _ACTION .. "-linux")) + elseif "linux-gcc-afl" == _OPTIONS["gcc"] then + premake.gcc.cc = "afl-gcc" + premake.gcc.cxx = "afl-g++" + premake.gcc.ar = "ar" + location (path.join(_buildDir, "projects", _ACTION .. "-linux")) + elseif "linux-gcc-5" == _OPTIONS["gcc"] then premake.gcc.cc = "gcc-5" premake.gcc.cxx = "g++-5" @@ -218,6 +226,12 @@ function toolchain(_buildDir, _libDir) premake.gcc.ar = "ar" location (path.join(_buildDir, "projects", _ACTION .. "-linux-clang")) + elseif "linux-clang-afl" == _OPTIONS["gcc"] then + premake.gcc.cc = "afl-clang" + premake.gcc.cxx = "afl-clang++" + premake.gcc.ar = "ar" + location (path.join(_buildDir, "projects", _ACTION .. "-linux-clang")) + elseif "linux-mips-gcc" == _OPTIONS["gcc"] then location (path.join(_buildDir, "projects", _ACTION .. "-linux-mips-gcc")) @@ -610,7 +624,7 @@ function toolchain(_buildDir, _libDir) "-mfpmath=sse", } - configuration { "linux-gcc or linux-clang" } + configuration { "linux-gcc* or linux-clang*" } buildoptions { "-msse2", "-Wunused-value", @@ -643,7 +657,7 @@ function toolchain(_buildDir, _libDir) "-m64", } - configuration { "linux-clang", "x32" } + configuration { "linux-clang*", "x32" } targetdir (path.join(_buildDir, "linux32_clang/bin")) objdir (path.join(_buildDir, "linux32_clang/obj")) libdirs { path.join(_libDir, "lib/linux32_clang") } @@ -651,7 +665,7 @@ function toolchain(_buildDir, _libDir) "-m32", } - configuration { "linux-clang", "x64" } + configuration { "linux-clang*", "x64" } targetdir (path.join(_buildDir, "linux64_clang/bin")) objdir (path.join(_buildDir, "linux64_clang/obj")) libdirs { path.join(_libDir, "lib/linux64_clang") } diff --git a/3rdparty/bx/tools/bin/darwin/genie b/3rdparty/bx/tools/bin/darwin/genie index d301143236e..a092d05c1d2 100755 Binary files a/3rdparty/bx/tools/bin/darwin/genie and b/3rdparty/bx/tools/bin/darwin/genie differ diff --git a/3rdparty/bx/tools/bin/darwin/ninja b/3rdparty/bx/tools/bin/darwin/ninja index 64fcacc550c..d26afc28e73 100644 Binary files a/3rdparty/bx/tools/bin/darwin/ninja and b/3rdparty/bx/tools/bin/darwin/ninja differ diff --git a/3rdparty/bx/tools/bin/linux/genie b/3rdparty/bx/tools/bin/linux/genie index 6d02a8dc8ec..b497f5dc9b1 100755 Binary files a/3rdparty/bx/tools/bin/linux/genie and b/3rdparty/bx/tools/bin/linux/genie differ diff --git a/3rdparty/bx/tools/bin/linux/ninja b/3rdparty/bx/tools/bin/linux/ninja index e4a6202d999..189832fdb4b 100644 Binary files a/3rdparty/bx/tools/bin/linux/ninja and b/3rdparty/bx/tools/bin/linux/ninja differ diff --git a/3rdparty/bx/tools/bin/windows/genie.exe b/3rdparty/bx/tools/bin/windows/genie.exe index 46060c4e72e..8111412afcf 100644 Binary files a/3rdparty/bx/tools/bin/windows/genie.exe and b/3rdparty/bx/tools/bin/windows/genie.exe differ diff --git a/3rdparty/bx/tools/bin/windows/ninja.exe b/3rdparty/bx/tools/bin/windows/ninja.exe index 40f662e32ac..1b30c1eb432 100644 Binary files a/3rdparty/bx/tools/bin/windows/ninja.exe and b/3rdparty/bx/tools/bin/windows/ninja.exe differ diff --git a/3rdparty/genie/LICENSE b/3rdparty/genie/LICENSE index bce0a4497af..889065a9e36 100644 --- a/3rdparty/genie/LICENSE +++ b/3rdparty/genie/LICENSE @@ -3,7 +3,8 @@ GENie Copyright (c) 2014-2016 Branimir Karadžić, Neil Richardson, Mike Popoloski, Drew Solomon, Ted de Munnik, Miodrag Milanović, Brett Vickers, Bill Freist, -Terry Hendrix II, Ryan Juckett, Andrew Johnson, Johan Sköld, Alastair Murray +Terry Hendrix II, Ryan Juckett, Andrew Johnson, Johan Sköld, Alastair +Murray, Patrick Munns, Jan-Eric Duden, Phil Stevens, Stuart Carnie. All rights reserved. https://github.com/bkaradzic/genie diff --git a/3rdparty/genie/README.md b/3rdparty/genie/README.md index 27fe51f698d..b89a35eb81e 100644 --- a/3rdparty/genie/README.md +++ b/3rdparty/genie/README.md @@ -9,8 +9,10 @@ generates project from Lua script, making applying the same settings for multiple projects easy. Supported project generators: - * Visual Studio 2008, 2010, 2012, 2013, 2015, 15 + * FASTBuild (experimental) * GNU Makefile + * Ninja (experimental) + * Visual Studio 2008, 2010, 2012, 2013, 2015, 15 * XCode Download (stable) @@ -18,7 +20,7 @@ Download (stable) [![Build Status](https://travis-ci.org/bkaradzic/GENie.svg?branch=master)](https://travis-ci.org/bkaradzic/GENie) - version 445 (commit 6798f93ba8ee029b629cfc340e90c653e780d8b1) + version 545 (commit 34f239f24d8004777174a375b8f04ff21f2f5b8e) Linux: https://github.com/bkaradzic/bx/raw/master/tools/bin/linux/genie @@ -41,25 +43,6 @@ Documentation [Scripting Reference](https://github.com/bkaradzic/genie/blob/master/docs/scripting-reference.md#scripting-reference) -Who is using it? ----------------- - -https://github.com/bkaradzic/bgfx bgfx - Cross-platform, graphics API -agnostic, "Bring Your Own Engine/Framework" style rendering library. - -https://github.com/Psybrus/Psybrus Psybrus Engine & Toolchain - -https://github.com/dariomanesku/cmftstudio cmftStudio - cubemap filtering tool - -https://github.com/mamedev/mame MAME - Multiple Arcade Machine Emulator - -http://sol.gfxile.net/soloud SoLoud is an easy to use, free, -portable c/c++ audio engine for games. - -https://github.com/andr3wmac/Torque6 Torque 6 is an MIT licensed 3D engine -loosely based on Torque2D. Being neither Torque2D or Torque3D it is the 6th -derivative of the original Torque Engine. - History ------- @@ -111,6 +94,68 @@ intention to keep it compatible with it. - Added `NoBufferSecurityCheck` flag to disable security checks in VS. - Added `nopch` file list to exclude files from using PCH. - Added `EnableAVX` and `EnableAVX2` flags to enable enhanced instruction set. + - Added FASTBuild (.bff) project generator. + - Added Vala language support. + - Added MASM support for Visual Studio projects. + - Added `userincludedirs` for include header with angle brackets and quotes + search path control. + - Detect when generated project files are not changing, and skip writing over + existing project files. + - Added Ninja project generator. + +Debugging GENie scripts +----------------------- + +It is possible to debug build scripts using [ZeroBrane Studio][zbs]. You must +compile GENie in debug mode + + $ make config=debug + +This ensures the core lua scripts are loaded from disk rather than compiled +into the GENie binary. Create a file named `debug.lua` as a sibling to your +main `genie.lua` script with the following content: + + local zb_path = + local cpaths = { + string.format("%s/bin/lib?.dylib;%s/bin/clibs53/?.dylib;", zb_path, zb_path), + package.cpath, + } + package.cpath = table.concat(cpaths, ';') + + local paths = { + string.format('%s/lualibs/?.lua;%s/lualibs/?/?.lua', zb_path, zb_path), + string.format('%s/lualibs/?/init.lua;%s/lualibs/?/?/?.lua', zb_path, zb_path), + string.format('%s/lualibs/?/?/init.lua', zb), + package.path, + } + package.path = table.concat(paths, ';') + + require('mobdebug').start() + +**NOTE:** update `zb_path` to refer to the root of your ZeroBrane Studio +install. For reference, you should find `lualibs` in you `zb_path` folder + +To debug, make sure ZBS is listening for debug connections and add +`dofile("debug.lua")` to `genie.lua` + +Who is using it? +---------------- + +https://github.com/bkaradzic/bgfx bgfx - Cross-platform, graphics API +agnostic, "Bring Your Own Engine/Framework" style rendering library. + +https://github.com/Psybrus/Psybrus Psybrus Engine & Toolchain + +https://github.com/dariomanesku/cmftstudio cmftStudio - cubemap filtering tool + +https://github.com/mamedev/mame MAME - Multiple Arcade Machine Emulator + +http://sol.gfxile.net/soloud SoLoud is an easy to use, free, +portable c/c++ audio engine for games. + +https://github.com/andr3wmac/Torque6 Torque 6 is an MIT licensed 3D engine +loosely based on Torque2D. Being neither Torque2D or Torque3D it is the 6th +derivative of the original Torque Engine. [License](https://github.com/bkaradzic/genie/blob/master/LICENSE) ----------------------------------------------------------------- @@ -118,7 +163,8 @@ intention to keep it compatible with it. GENie Copyright (c) 2014-2016 Branimir Karadžić, Neil Richardson, Mike Popoloski, Drew Solomon, Ted de Munnik, Miodrag Milanović, Brett Vickers, Bill Freist, - Terry Hendrix II, Ryan Juckett, Andrew Johnson, Johan Sköld, Alastair Murray + Terry Hendrix II, Ryan Juckett, Andrew Johnson, Johan Sköld, Alastair + Murray, Patrick Munns, Jan-Eric Duden, Phil Stevens, Stuart Carnie. All rights reserved. https://github.com/bkaradzic/genie @@ -147,3 +193,5 @@ intention to keep it compatible with it. CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + [zbs]: https://studio.zerobrane.com diff --git a/3rdparty/genie/build/gmake.darwin/genie.make b/3rdparty/genie/build/gmake.darwin/genie.make index d424a93c156..ac1adeac66f 100644 --- a/3rdparty/genie/build/gmake.darwin/genie.make +++ b/3rdparty/genie/build/gmake.darwin/genie.make @@ -21,7 +21,7 @@ endif ifeq (posix,$(SHELLTYPE)) MKDIR = $(SILENT) mkdir -p "$(1)" COPY = $(SILENT) cp -fR "$(1)" "$(2)" - RM= $(SILENT) rm -f "$(1)" + RM = $(SILENT) rm -f "$(1)" else MKDIR = $(SILENT) mkdir "$(subst /,\\,$(1))" 2> nul || exit 0 COPY = $(SILENT) copy /Y "$(subst /,\\,$(1))" "$(subst /,\\,$(2))" @@ -41,74 +41,75 @@ ifndef RESCOMP endif ifeq ($(config),release) - OBJDIR = obj/Release - TARGETDIR = ../../bin/darwin - override TARGET = $(TARGETDIR)/genie - DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Release + TARGETDIR = ../../bin/darwin + override TARGET = $(TARGETDIR)/genie + DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -mmacosx-version-min=10.4 ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -mmacosx-version-min=10.4 ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -mmacosx-version-min=10.4 ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -mmacosx-version-min=10.4 - LDDEPS += - LIBS += $(LDDEPS) -framework CoreServices + LDDEPS += + LIBS += $(LDDEPS) -framework CoreServices EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -119,74 +120,75 @@ ifeq ($(config),release) endif ifeq ($(config),debug) - OBJDIR = obj/Debug - TARGETDIR = ../../bin/darwin - override TARGET = $(TARGETDIR)/genie - DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Debug + TARGETDIR = ../../bin/darwin + override TARGET = $(TARGETDIR)/genie + DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -mmacosx-version-min=10.4 ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -mmacosx-version-min=10.4 ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -mmacosx-version-min=10.4 ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -mmacosx-version-min=10.4 - LDDEPS += - LIBS += $(LDDEPS) -framework CoreServices + LDDEPS += + LIBS += $(LDDEPS) -framework CoreServices EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -198,74 +200,75 @@ endif ifeq ($(config),releaseuniv32) AR = libtool - OBJDIR = obj/Universal32/Release - TARGETDIR = ../../bin/darwin - override TARGET = $(TARGETDIR)/genie - DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Universal32/Release + TARGETDIR = ../../bin/darwin + override TARGET = $(TARGETDIR)/genie + DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -arch i386 -arch ppc -mmacosx-version-min=10.4 ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -arch i386 -arch ppc -mmacosx-version-min=10.4 ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os -arch i386 -arch ppc -mmacosx-version-min=10.4 ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -arch i386 -arch ppc -mmacosx-version-min=10.4 - LDDEPS += - LIBS += $(LDDEPS) -framework CoreServices + LDDEPS += + LIBS += $(LDDEPS) -framework CoreServices EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -277,74 +280,75 @@ endif ifeq ($(config),debuguniv32) AR = libtool - OBJDIR = obj/Universal32/Debug - TARGETDIR = ../../bin/darwin - override TARGET = $(TARGETDIR)/genie - DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Universal32/Debug + TARGETDIR = ../../bin/darwin + override TARGET = $(TARGETDIR)/genie + DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_MACOSX + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -arch i386 -arch ppc -mmacosx-version-min=10.4 ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -arch i386 -arch ppc -mmacosx-version-min=10.4 ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g -arch i386 -arch ppc -mmacosx-version-min=10.4 ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -arch i386 -arch ppc -mmacosx-version-min=10.4 - LDDEPS += - LIBS += $(LDDEPS) -framework CoreServices + LDDEPS += + LIBS += $(LDDEPS) -framework CoreServices EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -356,8 +360,8 @@ endif OBJDIRS := \ $(OBJDIR) \ - $(OBJDIR)/src/host/lua-5.3.0/src \ $(OBJDIR)/src/host \ + $(OBJDIR)/src/host/lua-5.3.0/src \ RESOURCES := \ @@ -401,211 +405,211 @@ $(GCH): $(PCH) | $(OBJDIR) $(SILENT) $(CC) $(ALL_CFLAGS) -x c-header $(DEFINES) $(INCLUDES) -o "$@" -c "$<" endif -$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) +$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) +$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) +$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) +$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) +$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) +$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) +$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) +$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) +$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) +$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) +$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) +$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) +$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) +$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) +$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) +$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) +$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) +$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) +$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" diff --git a/3rdparty/genie/build/gmake.bsd/Makefile b/3rdparty/genie/build/gmake.freebsd/Makefile similarity index 100% rename from 3rdparty/genie/build/gmake.bsd/Makefile rename to 3rdparty/genie/build/gmake.freebsd/Makefile diff --git a/3rdparty/genie/build/gmake.bsd/genie.make b/3rdparty/genie/build/gmake.freebsd/genie.make similarity index 59% rename from 3rdparty/genie/build/gmake.bsd/genie.make rename to 3rdparty/genie/build/gmake.freebsd/genie.make index ab3b36b4f0b..48d559f4a20 100644 --- a/3rdparty/genie/build/gmake.bsd/genie.make +++ b/3rdparty/genie/build/gmake.freebsd/genie.make @@ -14,11 +14,14 @@ endif ifeq (/bin,$(findstring /bin,$(SHELL))) SHELLTYPE := posix endif +ifeq (/bin,$(findstring /bin,$(MAKESHELL))) + SHELLTYPE := posix +endif ifeq (posix,$(SHELLTYPE)) MKDIR = $(SILENT) mkdir -p "$(1)" COPY = $(SILENT) cp -fR "$(1)" "$(2)" - RM= $(SILENT) rm -f "$(1)" + RM = $(SILENT) rm -f "$(1)" else MKDIR = $(SILENT) mkdir "$(subst /,\\,$(1))" 2> nul || exit 0 COPY = $(SILENT) copy /Y "$(subst /,\\,$(1))" "$(subst /,\\,$(2))" @@ -38,40 +41,23 @@ ifndef RESCOMP endif ifeq ($(config),release) - OBJDIR = obj/Release - TARGETDIR = ../../bin/bsd - override TARGET = $(TARGETDIR)/genie - DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN - INCLUDES += -I../../src/host/lua-5.3.0/src - ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES) + OBJDIR = obj/Release + TARGETDIR = ../../bin/bsd + override TARGET = $(TARGETDIR)/genie + DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += + ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -s -rdynamic - LDDEPS += - LIBS += $(LDDEPS) -lm - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LDDEPS += + LIBS += $(LDDEPS) -lm + EXTERNAL_LIBS += + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/os_copyfile.o \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_stat.o \ - $(OBJDIR)/src/host/os_ticks.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/scripts.o \ - $(OBJDIR)/src/host/string_endswith.o \ - $(OBJDIR)/src/host/string_hash.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ @@ -105,6 +91,25 @@ ifeq ($(config),release) $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ + $(OBJDIR)/src/host/os_chdir.o \ + $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ + $(OBJDIR)/src/host/scripts.o \ + $(OBJDIR)/src/host/string_endswith.o \ + $(OBJDIR)/src/host/string_hash.o \ define PREBUILDCMDS endef @@ -115,40 +120,23 @@ ifeq ($(config),release) endif ifeq ($(config),debug) - OBJDIR = obj/Debug - TARGETDIR = ../../bin/bsd - override TARGET = $(TARGETDIR)/genie - DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN - INCLUDES += -I../../src/host/lua-5.3.0/src - ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES) + OBJDIR = obj/Debug + TARGETDIR = ../../bin/bsd + override TARGET = $(TARGETDIR)/genie + DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += + ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -rdynamic - LDDEPS += - LIBS += $(LDDEPS) -lm - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LDDEPS += + LIBS += $(LDDEPS) -lm + EXTERNAL_LIBS += + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/os_copyfile.o \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_stat.o \ - $(OBJDIR)/src/host/os_ticks.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/scripts.o \ - $(OBJDIR)/src/host/string_endswith.o \ - $(OBJDIR)/src/host/string_hash.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ @@ -182,6 +170,25 @@ ifeq ($(config),debug) $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ + $(OBJDIR)/src/host/os_chdir.o \ + $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ + $(OBJDIR)/src/host/scripts.o \ + $(OBJDIR)/src/host/string_endswith.o \ + $(OBJDIR)/src/host/string_hash.o \ define PREBUILDCMDS endef @@ -193,17 +200,17 @@ endif OBJDIRS := \ $(OBJDIR) \ - $(OBJDIR)/src/host/lua-5.3.0/src \ $(OBJDIR)/src/host \ + $(OBJDIR)/src/host/lua-5.3.0/src \ RESOURCES := \ .PHONY: clean prebuild prelink -all: $(TARGETDIR) $(OBJDIRS) prebuild prelink $(TARGET) +all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR) @: -$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(RESOURCES) +$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS) @echo Linking genie $(SILENT) $(LINKCMD) $(POSTBUILDCMDS) @@ -233,218 +240,218 @@ prelink: $(PRELINKCMDS) ifneq (,$(PCH)) -$(GCH): $(PCH) +$(GCH): $(PCH) | $(OBJDIR) @echo $(notdir $<) - $(SILENT) $(CC) -x c-header $(ALL_CFLAGS) -MMD -MP $(DEFINES) $(INCLUDES) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) -x c-header $(DEFINES) $(INCLUDES) -o "$@" -c "$<" endif -$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c +$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c +$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c +$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c +$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c +$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c +$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c +$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c +$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c +$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c +$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c +$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c +$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c +$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c +$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c +$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c +$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c +$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c +$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c +$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c +$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c +$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c +$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c +$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c +$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c +$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c +$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c +$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c +$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c +$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c +$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c +$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c +$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c +$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c +$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c +$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c +$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c +$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c +$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c +$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c +$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c +$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c +$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c +$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c +$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c +$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c +$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c +$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c +$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c +$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c +$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c +$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c +$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) genie.make @echo $(notdir $<) - $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -MF $(@:%.o=%.d) -c "$<" + $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) ifneq (,$(PCH)) diff --git a/3rdparty/genie/build/gmake.linux/genie.make b/3rdparty/genie/build/gmake.linux/genie.make index 5ec330896f0..e76c96ad355 100644 --- a/3rdparty/genie/build/gmake.linux/genie.make +++ b/3rdparty/genie/build/gmake.linux/genie.make @@ -21,7 +21,7 @@ endif ifeq (posix,$(SHELLTYPE)) MKDIR = $(SILENT) mkdir -p "$(1)" COPY = $(SILENT) cp -fR "$(1)" "$(2)" - RM= $(SILENT) rm -f "$(1)" + RM = $(SILENT) rm -f "$(1)" else MKDIR = $(SILENT) mkdir "$(subst /,\\,$(1))" 2> nul || exit 0 COPY = $(SILENT) copy /Y "$(subst /,\\,$(1))" "$(subst /,\\,$(2))" @@ -41,74 +41,75 @@ ifndef RESCOMP endif ifeq ($(config),release) - OBJDIR = obj/Release - TARGETDIR = ../../bin/linux - override TARGET = $(TARGETDIR)/genie - DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Release + TARGETDIR = ../../bin/linux + override TARGET = $(TARGETDIR)/genie + DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -s -rdynamic - LDDEPS += - LIBS += $(LDDEPS) -ldl -lm + LDDEPS += + LIBS += $(LDDEPS) -ldl -lm EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -119,74 +120,75 @@ ifeq ($(config),release) endif ifeq ($(config),debug) - OBJDIR = obj/Debug - TARGETDIR = ../../bin/linux - override TARGET = $(TARGETDIR)/genie - DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Debug + TARGETDIR = ../../bin/linux + override TARGET = $(TARGETDIR)/genie + DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE -DLUA_USE_POSIX -DLUA_USE_DLOPEN + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -rdynamic - LDDEPS += - LIBS += $(LDDEPS) -ldl -lm + LDDEPS += + LIBS += $(LDDEPS) -ldl -lm EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -243,211 +245,211 @@ $(GCH): $(PCH) | $(OBJDIR) $(SILENT) $(CC) $(ALL_CFLAGS) -x c-header $(DEFINES) $(INCLUDES) -o "$@" -c "$<" endif -$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) +$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) +$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) +$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) +$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) +$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) +$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) +$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) +$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) +$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) +$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) +$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) +$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) +$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) +$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) +$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) +$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) +$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) +$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) +$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" diff --git a/3rdparty/genie/build/gmake.windows/genie.make b/3rdparty/genie/build/gmake.windows/genie.make index 02e5b88916c..87dec731e21 100644 --- a/3rdparty/genie/build/gmake.windows/genie.make +++ b/3rdparty/genie/build/gmake.windows/genie.make @@ -21,7 +21,7 @@ endif ifeq (posix,$(SHELLTYPE)) MKDIR = $(SILENT) mkdir -p "$(1)" COPY = $(SILENT) cp -fR "$(1)" "$(2)" - RM= $(SILENT) rm -f "$(1)" + RM = $(SILENT) rm -f "$(1)" else MKDIR = $(SILENT) mkdir "$(subst /,\\,$(1))" 2> nul || exit 0 COPY = $(SILENT) copy /Y "$(subst /,\\,$(1))" "$(subst /,\\,$(2))" @@ -41,74 +41,75 @@ ifndef RESCOMP endif ifeq ($(config),release) - OBJDIR = obj/Release - TARGETDIR = ../../bin/windows - override TARGET = $(TARGETDIR)/genie.exe - DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Release + TARGETDIR = ../../bin/windows + override TARGET = $(TARGETDIR)/genie.exe + DEFINES += -DNDEBUG -DLUA_COMPAT_MODULE + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -Os ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. -s - LDDEPS += - LIBS += $(LDDEPS) -lole32 + LDDEPS += + LIBS += $(LDDEPS) -lole32 EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -119,74 +120,75 @@ ifeq ($(config),release) endif ifeq ($(config),debug) - OBJDIR = obj/Debug - TARGETDIR = ../../bin/windows - override TARGET = $(TARGETDIR)/genie.exe - DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE - INCLUDES += -I../../src/host/lua-5.3.0/src + OBJDIR = obj/Debug + TARGETDIR = ../../bin/windows + override TARGET = $(TARGETDIR)/genie.exe + DEFINES += -D_DEBUG -DLUA_COMPAT_MODULE + INCLUDES += -I../../src/host/lua-5.3.0/src + INCLUDES += ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP -MP $(DEFINES) $(INCLUDES) ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH) -Wall -Wextra -g ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) ALL_LDFLAGS += $(LDFLAGS) -L. - LDDEPS += - LIBS += $(LDDEPS) -lole32 + LDDEPS += + LIBS += $(LDDEPS) -lole32 EXTERNAL_LIBS += - LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) + LINKCMD = $(CC) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS) OBJECTS := \ - $(OBJDIR)/src/host/os_getcwd.o \ - $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ + $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ $(OBJDIR)/src/host/os_chdir.o \ - $(OBJDIR)/src/host/premake_main.o \ - $(OBJDIR)/src/host/os_uuid.o \ - $(OBJDIR)/src/host/os_isfile.o \ - $(OBJDIR)/src/host/os_ticks.o \ $(OBJDIR)/src/host/os_copyfile.o \ + $(OBJDIR)/src/host/os_getcwd.o \ + $(OBJDIR)/src/host/os_is64bit.o \ + $(OBJDIR)/src/host/os_isdir.o \ + $(OBJDIR)/src/host/os_isfile.o \ + $(OBJDIR)/src/host/os_match.o \ + $(OBJDIR)/src/host/os_mkdir.o \ + $(OBJDIR)/src/host/os_pathsearch.o \ + $(OBJDIR)/src/host/os_rmdir.o \ + $(OBJDIR)/src/host/os_stat.o \ + $(OBJDIR)/src/host/os_ticks.o \ + $(OBJDIR)/src/host/os_uuid.o \ + $(OBJDIR)/src/host/path_isabsolute.o \ + $(OBJDIR)/src/host/premake.o \ + $(OBJDIR)/src/host/premake_main.o \ $(OBJDIR)/src/host/scripts.o \ $(OBJDIR)/src/host/string_endswith.o \ $(OBJDIR)/src/host/string_hash.o \ - $(OBJDIR)/src/host/os_pathsearch.o \ - $(OBJDIR)/src/host/os_rmdir.o \ - $(OBJDIR)/src/host/os_match.o \ - $(OBJDIR)/src/host/premake.o \ - $(OBJDIR)/src/host/os_isdir.o \ - $(OBJDIR)/src/host/os_mkdir.o \ - $(OBJDIR)/src/host/path_isabsolute.o \ - $(OBJDIR)/src/host/os_is64bit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lvm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltable.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/liolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcode.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lparser.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lzio.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lmem.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lgc.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstring.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/linit.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltm.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lapi.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lctype.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lstate.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/llex.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldo.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lundump.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/loslib.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/lobject.o \ - $(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o \ define PREBUILDCMDS endef @@ -198,8 +200,8 @@ endif OBJDIRS := \ $(OBJDIR) \ - $(OBJDIR)/src/host/lua-5.3.0/src \ $(OBJDIR)/src/host \ + $(OBJDIR)/src/host/lua-5.3.0/src \ RESOURCES := \ @@ -243,211 +245,211 @@ $(GCH): $(PCH) | $(OBJDIR) $(SILENT) $(CC) $(ALL_CFLAGS) -x c-header $(DEFINES) $(INCLUDES) -o "$@" -c "$<" endif -$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldump.o: ../../src/host/lua-5.3.0/src/ldump.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/liolib.o: ../../src/host/lua-5.3.0/src/liolib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcode.o: ../../src/host/lua-5.3.0/src/lcode.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lparser.o: ../../src/host/lua-5.3.0/src/lparser.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lstrlib.o: ../../src/host/lua-5.3.0/src/lstrlib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loadlib.o: ../../src/host/lua-5.3.0/src/loadlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltable.o: ../../src/host/lua-5.3.0/src/ltable.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbitlib.o: ../../src/host/lua-5.3.0/src/lbitlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldblib.o: ../../src/host/lua-5.3.0/src/ldblib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmathlib.o: ../../src/host/lua-5.3.0/src/lmathlib.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lfunc.o: ../../src/host/lua-5.3.0/src/lfunc.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lvm.o: ../../src/host/lua-5.3.0/src/lvm.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lmem.o: ../../src/host/lua-5.3.0/src/lmem.c $(GCH) +$(OBJDIR)/src/host/lua-5.3.0/src/lzio.o: ../../src/host/lua-5.3.0/src/lzio.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lgc.o: ../../src/host/lua-5.3.0/src/lgc.c $(GCH) +$(OBJDIR)/src/host/os_chdir.o: ../../src/host/os_chdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstring.o: ../../src/host/lua-5.3.0/src/lstring.c $(GCH) +$(OBJDIR)/src/host/os_copyfile.o: ../../src/host/os_copyfile.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/linit.o: ../../src/host/lua-5.3.0/src/linit.c $(GCH) +$(OBJDIR)/src/host/os_getcwd.o: ../../src/host/os_getcwd.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltm.o: ../../src/host/lua-5.3.0/src/ltm.c $(GCH) +$(OBJDIR)/src/host/os_is64bit.o: ../../src/host/os_is64bit.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lapi.o: ../../src/host/lua-5.3.0/src/lapi.c $(GCH) +$(OBJDIR)/src/host/os_isdir.o: ../../src/host/os_isdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lctype.o: ../../src/host/lua-5.3.0/src/lctype.c $(GCH) +$(OBJDIR)/src/host/os_isfile.o: ../../src/host/os_isfile.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lstate.o: ../../src/host/lua-5.3.0/src/lstate.c $(GCH) +$(OBJDIR)/src/host/os_match.o: ../../src/host/os_match.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lbaselib.o: ../../src/host/lua-5.3.0/src/lbaselib.c $(GCH) +$(OBJDIR)/src/host/os_mkdir.o: ../../src/host/os_mkdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ltablib.o: ../../src/host/lua-5.3.0/src/ltablib.c $(GCH) +$(OBJDIR)/src/host/os_pathsearch.o: ../../src/host/os_pathsearch.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lauxlib.o: ../../src/host/lua-5.3.0/src/lauxlib.c $(GCH) +$(OBJDIR)/src/host/os_rmdir.o: ../../src/host/os_rmdir.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lcorolib.o: ../../src/host/lua-5.3.0/src/lcorolib.c $(GCH) +$(OBJDIR)/src/host/os_stat.o: ../../src/host/os_stat.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/llex.o: ../../src/host/lua-5.3.0/src/llex.c $(GCH) +$(OBJDIR)/src/host/os_ticks.o: ../../src/host/os_ticks.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldo.o: ../../src/host/lua-5.3.0/src/ldo.c $(GCH) +$(OBJDIR)/src/host/os_uuid.o: ../../src/host/os_uuid.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lundump.o: ../../src/host/lua-5.3.0/src/lundump.c $(GCH) +$(OBJDIR)/src/host/path_isabsolute.o: ../../src/host/path_isabsolute.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lopcodes.o: ../../src/host/lua-5.3.0/src/lopcodes.c $(GCH) +$(OBJDIR)/src/host/premake.o: ../../src/host/premake.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lutf8lib.o: ../../src/host/lua-5.3.0/src/lutf8lib.c $(GCH) +$(OBJDIR)/src/host/premake_main.o: ../../src/host/premake_main.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/loslib.o: ../../src/host/lua-5.3.0/src/loslib.c $(GCH) +$(OBJDIR)/src/host/scripts.o: ../../src/host/scripts.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/lobject.o: ../../src/host/lua-5.3.0/src/lobject.c $(GCH) +$(OBJDIR)/src/host/string_endswith.o: ../../src/host/string_endswith.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" -$(OBJDIR)/src/host/lua-5.3.0/src/ldebug.o: ../../src/host/lua-5.3.0/src/ldebug.c $(GCH) +$(OBJDIR)/src/host/string_hash.o: ../../src/host/string_hash.c $(GCH) genie.make @echo $(notdir $<) $(SILENT) $(CC) $(ALL_CFLAGS) $(FORCE_INCLUDE) -o "$@" -c "$<" diff --git a/3rdparty/genie/docs/scripting-reference.md b/3rdparty/genie/docs/scripting-reference.md index e08e1dee4ac..cb1cf00f957 100644 --- a/3rdparty/genie/docs/scripting-reference.md +++ b/3rdparty/genie/docs/scripting-reference.md @@ -72,7 +72,7 @@ * [path.getrelative](#pathgetrelativesrc-dest) * [path.isabsolute](#pathisabsolutepath) * [path.iscfile](#pathiscfilepath) - * [path.iscppfile](#pathiscppfilepath) + * [path.isSourceFile](#pathiscppfilepath) * [path.isresourcefile](#pathisresourcefilepath) * [path.join](#pathjoinleading-trailing) * [path.rebase](#pathrebasepath-oldbase-newbase) @@ -101,6 +101,7 @@ * [targetname](#targetnamename) * [targetprefix](#targetprefixprefix) * [targetsuffix](#targetsuffixsuffix) + * [userincludedirs](#userincludedirspaths) * [uuid](#uuidprojectuuid) * [vpaths](#vpathsgroup--pattern) * Additional Information @@ -547,6 +548,7 @@ _flags_ - List of flag names from list below. Names are case-insensitive and ign * _Symbols_ - Generate debugging information. * _Unicode_ - Enable Unicode strings. If not specified, the default toolset behavior is used. * _Unsafe_ - Enable the use of unsafe code in .NET applications. +* _UseFullPaths_ - Enable absolute paths for `__FILE__`. * _WinMain_ - Use WinMain() as the entry point for Windows applications, rather than main(). **Note:** When not set, options will default to the tool default. @@ -779,12 +781,12 @@ project "MyProject" --- ### language(_lang_) -Sets the programming language used by a project. GENie currently supports C, C++, and C#. Not all languages are supported by all of the generators. For instance, SharpDevelop does not currently support C or C++ development, and Code::Blocks does not support the .NET languages (C#, managed C++). +Sets the programming language used by a project. GENie currently supports C, C++, C# and Vala. Not all languages are supported by all of the generators. For instance, SharpDevelop does not currently support C or C++ development, and Code::Blocks does not support the .NET languages (C#, managed C++). **Scope:** solutions, projects #### Arguments -_lang_ - language identifier string ("C", "C++", or "C#"). Case insensitive. +_lang_ - language identifier string ("C", "C++", "C#" or "Vala"). Case insensitive. #### Examples ```lua @@ -1276,6 +1278,32 @@ Table of values: [Back to top](#table-of-contents) +--- +### userincludedirs({_paths_...}) +Specifies the user include file search paths. Multiple calls are concatenated. + +For XCode, it maps to setting the USER INCLUDE SEARCH PATH. + +For clang/gcc, it maps to setting the include directory using the iquote option. + +On the other build systems, it behaves like [includedirs](#includedirspaths). + +**Scope:** solutions, projects, configurations + +#### Arguments +_paths_ - list of user include file search directories, relative to the currently-executing script file. + +#### Examples +Define two include file search paths +```lua +userincludedirs { "../lua/include", "../zlib" } +``` +You can also use [wildcards](#wildcards) to match multiple directories. +```lua +userincludedirs { "../includes/**" } +``` +[Back to top](#table-of-contents) + --- ### os.uuid() Returns a Universally Unique Identifier @@ -1397,7 +1425,7 @@ _path_ - path to check [Back to top](#table-of-contents) --- -### path.iscppfile(_path_) +### path.isSourceFile(_path_) Determines whether a file is a C++ source code file, based on extension. #### Arguments diff --git a/3rdparty/genie/makefile b/3rdparty/genie/makefile index f154dcd9b8e..e62bacb22da 100644 --- a/3rdparty/genie/makefile +++ b/3rdparty/genie/makefile @@ -31,12 +31,18 @@ SILENT?=@ $(GENIE): $(SILENT) $(MAKE) -C build/gmake.$(OS) -all: $(GENIE) +all: $(SILENT) $(GENIE) clean: $(SILENT) $(MAKE) -C build/gmake.$(OS) clean $(SILENT) -rm -rf bin +projgen: + $(SILENT) $(GENIE) --to=../build/gmake.windows --os=windows gmake + $(SILENT) $(GENIE) --to=../build/gmake.linux --os=linux gmake + $(SILENT) $(GENIE) --to=../build/gmake.darwin --os=macosx --platform=universal32 gmake + $(SILENT) $(GENIE) --to=../build/gmake.freebsd --os=bsd gmake + rebuild: $(SILENT) $(MAKE) -C build/gmake.$(OS) clean all @@ -47,7 +53,7 @@ release-windows release-darwin: $(GENIE) release-linux: $(GENIE) $(SILENT) $(GENIE) release - $(SILENT) $(MAKE) -C build/gmake.darwin clean all CC=x86_64-apple-darwin13-clang + $(SILENT) $(MAKE) -C build/gmake.darwin clean all CC=x86_64-apple-darwin15-clang $(SILENT) $(MAKE) -C build/gmake.linux clean all $(SILENT) $(MAKE) -C build/gmake.windows clean all CC=i686-w64-mingw32-gcc $(SILENT) git checkout src/host/version.h diff --git a/3rdparty/genie/scripts/release.lua b/3rdparty/genie/scripts/release.lua index 15267eb40a2..033f4f647c9 100644 --- a/3rdparty/genie/scripts/release.lua +++ b/3rdparty/genie/scripts/release.lua @@ -36,7 +36,7 @@ function dorelease() print("Generating project files...") - + exec("genie /to=../build/gmake.windows /os=windows gmake") exec("genie /to=../build/gmake.linux /os=linux gmake") exec("genie /to=../build/gmake.darwin /os=macosx /platform=universal32 gmake") diff --git a/3rdparty/genie/src/_manifest.lua b/3rdparty/genie/src/_manifest.lua index 7d5a8e95a23..15bae6090e4 100644 --- a/3rdparty/genie/src/_manifest.lua +++ b/3rdparty/genie/src/_manifest.lua @@ -33,9 +33,11 @@ "tools/msc.lua", "tools/ow.lua", "tools/snc.lua", + "tools/valac.lua", "base/validate.lua", "base/help.lua", "base/premake.lua", + "base/iter.lua", -- CodeBlocks action "actions/codeblocks/_codeblocks.lua", @@ -57,6 +59,7 @@ "actions/make/make_solution.lua", "actions/make/make_cpp.lua", "actions/make/make_csharp.lua", + "actions/make/make_vala.lua", -- Visual Studio actions "actions/vstudio/_vstudio.lua", @@ -87,4 +90,10 @@ "actions/fastbuild/_fastbuild.lua", "actions/fastbuild/fastbuild_project.lua", "actions/fastbuild/fastbuild_solution.lua", + + -- ninja action + "actions/ninja/_ninja.lua", + "actions/ninja/ninja_base.lua", + "actions/ninja/ninja_solution.lua", + "actions/ninja/ninja_cpp.lua", } diff --git a/3rdparty/genie/src/actions/codeblocks/codeblocks_cbp.lua b/3rdparty/genie/src/actions/codeblocks/codeblocks_cbp.lua index 6f31e29e613..84982fd1a85 100644 --- a/3rdparty/genie/src/actions/codeblocks/codeblocks_cbp.lua +++ b/3rdparty/genie/src/actions/codeblocks/codeblocks_cbp.lua @@ -88,6 +88,8 @@ _p(2,'') for _, platform in ipairs(platforms) do for cfg in premake.eachconfig(prj, platform) do + local includedirs = table.join(cfg.userincludedirs, cfg.includedirs) + _p(3,'', premake.esc(cfg.longname)) _p(4,'')\ncodeblocks.files(prj)\n_p(2,'')\n for _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.debugenvs and #cfg.debugenvs > 0 then\npremake.codeblocks.debugenvs(cfg)\nend\nend\nend\n_p(2,'')\n_p(1,'')\n_p('')\n_p('')\nend\n", + "ild>')\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\n_p(3,'', premake.esc(cfg.longname))\n_p(4,'')\nend\nend\n_p(2,'')\ncodeblocks.files(prj)\n_p(2,'')\n for _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.debugenvs and #cfg.debugenvs > 0 then\npremake.codeblocks.debugenvs(cfg)\nend\nend\nend\n_p(2,'')\n_p(1,'')\n_p('')\n_p('')\nend\n", /* actions/codelite/_codelite.lua */ "premake.codelite = { }\nnewaction {\ntrigger = \"codelite\",\nshortname = \"CodeLite\",\ndescription = \"Generate CodeLite project files\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\" },\nvalid_languages = { \"C\", \"C++\" },\nvalid_tools = {\ncc = { \"gcc\" },\n},\nonsolution = function(sln)\npremake.generate(sln, \"%%.workspace\", premake.codelite.workspace)\nend,\nonproject = function(prj)\npremake.generate(prj, \"%%.project\", premake.codelite.project)\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, \"%%.workspace\")\npremake.clean.file(sln, \"%%_wsp.mk\")\npremake.clean.file(sln, \"%%.tags\")\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, \"%%.project\")\npremake.clean.file(prj, \"%%.mk\")\npremake.clean.file(prj, \"%%.list\")\npremake.clean.file(prj, \"%%.out\")\nend\n}\n", @@ -187,10 +198,10 @@ const char* builtin_scripts[] = { /* actions/codelite/codelite_project.lua */ "local codelite = premake.codelite\nlocal tree = premake.tree\nfunction codelite.files(prj)\nlocal tr = premake.project.buildsourcetree(prj)\ntree.traverse(tr, {\nonbranchenter = function(node, depth)\n_p(depth, '', node.name)\nend,\nonbranchexit = function(node, depth)\n_p(depth, '')\nend,\nonleaf = function(node, depth)\n_p(depth, '', node.cfg.name)\nend,\n}, true, 1)\nend\nfunction premake.codelite.project(prj)\nio.indent = \" \"\n_p('')\n_p('', premake.esc(prj.name))\ncodelite.files(prj)\nlocal types = { \nConsoleApp = \"Executable\", \nWindowedApp = \"Executable\", \nStaticLib = \"Static Library\",\nSharedLib = \"Dynamic Library\",\n}\n_p(' ', types[prj.kind])\nlocal platforms = premake.filterplatforms(prj.solution, premake[_OPTIONS.cc].platforms, \"Native\")\nfor i = #platforms, 1, -1 do\nif premake.platforms[platforms[i]].iscrosscompiler " - "then\ntable.remove(platforms, i)\nend\nend \nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nlocal name = premake.esc(cfg.longname):gsub(\"|\",\"_\")\nlocal compiler = iif(cfg.language == \"C\", \"gcc\", \"g++\")\n_p(' ', name, compiler, types[cfg.kind])\nlocal fname = premake.esc(cfg.buildtarget.fullpath)\nlocal objdir = premake.esc(cfg.objectsdir)\nlocal runcmd = cfg.buildtarget.name\nlocal rundir = cfg.debugdir or cfg.buildtarget.directory\nlocal runargs = table.concat(cfg.debugargs, \" \")\nlocal pause = iif(cfg.kind == \"WindowedApp\", \"no\", \"yes\")\n_p(' ', fname, objdir, runcmd, runargs, rundir, pause)\nlocal flags = premake.esc(table.join(premake.gcc.getcflags(cfg), premake.gcc.getcxxflags(cfg), cfg" - ".buildoptions))\n_p(' ', table.concat(flags, \";\"))\nfor _,v in ipairs(cfg.includedirs) do\n_p(' ', premake.esc(v))\nend\nfor _,v in ipairs(cfg.defines) do\n_p(' ', premake.esc(v))\nend\n_p(' ')\nflags = premake.esc(table.join(premake.gcc.getldflags(cfg), cfg.linkoptions))\n_p(' ', table.concat(flags, \";\"))\nfor _,v in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\n_p(' ', premake.esc(v))\nend\nfor _,v in ipairs(premake.getlinks(cfg, \"all\", \"basename\")) do\n_p(' ', premake.esc(v))\nend\n_p(' ')\nif premake.findfile(cfg, \".rc\") then\nlocal defines = table.implode(table.join(cfg.defines, cfg.resdefines), \"-D\", \";\", \"\")\nlocal options = table.concat(cfg.resoptions, \";\")\n_p(' '" - ", defines, options)\nfor _,v in ipairs(table.join(cfg.includedirs, cfg.resincludedirs)) do\n_p(' ', premake.esc(v))\nend\n_p(' ')\nelse\n_p(' ')\nend\nif #cfg.prebuildcommands > 0 then\n_p(' ')\nfor _,v in ipairs(cfg.prebuildcommands) do\n_p(' %s', premake.esc(v))\nend\n_p(' ')\nend\nif #cfg.postbuildcommands > 0 then\n_p(' ')\nfor _,v in ipairs(cfg.postbuildcommands) do\n_p(' %s', premake.esc(v))\nend\n_p(' ')\nend\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' None')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\nend\nend\n_p(' ')\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\n_p(' ', cfg.longname:gsub(\"|\",\"_\"))\nfor _,dep in ipairs(premake.getdependencies(prj)) do\n_p(' ', dep.name)\nend\n_p(' ')\nend\nend\n_p('')\nend\n", + "then\ntable.remove(platforms, i)\nend\nend \nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nlocal name = premake.esc(cfg.longname):gsub(\"|\",\"_\")\nlocal compiler = iif(cfg.language == \"C\", \"gcc\", \"g++\")\n_p(' ', name, compiler, types[cfg.kind])\nlocal fname = premake.esc(cfg.buildtarget.fullpath)\nlocal objdir = premake.esc(cfg.objectsdir)\nlocal runcmd = cfg.buildtarget.name\nlocal rundir = cfg.debugdir or cfg.buildtarget.directory\nlocal runargs = table.concat(cfg.debugargs, \" \")\nlocal pause = iif(cfg.kind == \"WindowedApp\", \"no\", \"yes\")\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\n_p(' ', fname, objdir, runcmd, runargs, rundir, pause)\nlocal flags = premake.esc(ta" + "ble.join(premake.gcc.getcflags(cfg), premake.gcc.getcxxflags(cfg), cfg.buildoptions))\n_p(' ', table.concat(flags, \";\"))\nfor _,v in ipairs(includedirs) do\n_p(' ', premake.esc(v))\nend\nfor _,v in ipairs(cfg.defines) do\n_p(' ', premake.esc(v))\nend\n_p(' ')\nflags = premake.esc(table.join(premake.gcc.getldflags(cfg), cfg.linkoptions))\n_p(' ', table.concat(flags, \";\"))\nfor _,v in ipairs(premake.getlinks(cfg, \"all\", \"directory\")) do\n_p(' ', premake.esc(v))\nend\nfor _,v in ipairs(premake.getlinks(cfg, \"all\", \"basename\")) do\n_p(' ', premake.esc(v))\nend\n_p(' ')\nif premake.findfile(cfg, \".rc\") then\nlocal defines = table.implode(table.join(cfg.defines, cfg.resdefines), \"-D\", \";\", \"\")\nlocal options = table.concat(cfg.resoptions, \";\"" + ")\n_p(' ', defines, options)\nfor _,v in ipairs(table.join(cfg.includedirs, cfg.resincludedirs)) do\n_p(' ', premake.esc(v))\nend\n_p(' ')\nelse\n_p(' ')\nend\nif #cfg.prebuildcommands > 0 then\n_p(' ')\nfor _,v in ipairs(cfg.prebuildcommands) do\n_p(' %s', premake.esc(v))\nend\n_p(' ')\nend\nif #cfg.postbuildcommands > 0 then\n_p(' ')\nfor _,v in ipairs(cfg.postbuildcommands) do\n_p(' %s', premake.esc(v))\nend\n_p(' ')\nend\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' None')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\n_p(' ')\nend\nend\n_p(' ')\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\n_p(' ', cfg.longname:gsub(\"|\",\"_\"))\nfor _,dep in ipairs(premake.getdependencies(prj)) do\n_p(' ', dep.name)\nend\n_p(' ')\nend\nend\n_p('')\nend\n", /* actions/cmake/_cmake.lua */ "premake.cmake = { }\nnewaction {\ntrigger = \"cmake\",\nshortname = \"CMake\",\ndescription = \"Generate CMake project files\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\" },\nvalid_languages = { \"C\", \"C++\" },\nvalid_tools = {\ncc = { \"gcc\" },\n},\nonsolution = function(sln)\npremake.generate(sln, \"CMakeLists.txt\", premake.cmake.workspace)\nend,\nonproject = function(prj)\npremake.generate(prj, \"%%/CMakeLists.txt\", premake.cmake.project)\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, \"CMakeLists.txt\")\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, \"%%/CMakeLists.txt\")\nend\n}\n", @@ -204,27 +215,27 @@ const char* builtin_scripts[] = { /* actions/make/_make.lua */ "_MAKE = { }\npremake.make = { }\nlocal make = premake.make\nfunction _MAKE.esc(value)\nlocal result\nif (type(value) == \"table\") then\nresult = { }\nfor _,v in ipairs(value) do\ntable.insert(result, _MAKE.esc(v))\nend\nreturn result\nelse\nresult = value:gsub(\"\\\\\", \"\\\\\\\\\")\nresult = result:gsub(\" \", \"\\\\ \")\nresult = result:gsub(\"%%(\", \"\\\\%(\")\nresult = result:gsub(\"%%)\", \"\\\\%)\")\nresult = result:gsub(\"$\\\\%((.-)\\\\%)\", \"$%(%1%)\")\nreturn result\nend\nend\nfunction premake.make_copyrule(source, target)\n_p('%s: %s', target, source)\n_p('\\t@echo Copying $(notdir %s)', target)\n_p('\\t-$(call COPY,%s,%s)', source, target)\nend\nfunction premake.make_mkdirrule(var)\n_p('\\t@echo Creating %s', var)\n_p('\\t-$(call MKDIR,%s)', var)\n_p('')\nend\nfunction make.list(value)\nif #value > 0 then\nreturn \" \" .. table.concat(value, \" \")\nelse\nreturn \"\"\nend\nend\nfunction _MAKE.getmakefilename(this, searchprjs)\nlocal count = 0\nfor sln in premake.solution.each() do\nif (sln.loca" - "tion == this.location) then count = count + 1 end\nif (searchprjs) then\nfor _,prj in ipairs(sln.projects) do\nif (prj.location == this.location) then count = count + 1 end\nend\nend\nend\nif (count == 1) then\nreturn \"Makefile\"\nelse\nreturn this.name .. \".make\"\nend\nend\nfunction _MAKE.getnames(tbl)\nlocal result = table.extract(tbl, \"name\")\nfor k,v in pairs(result) do\nresult[k] = _MAKE.esc(v)\nend\nreturn result\nend\nfunction make.settings(cfg, cc)\nif #cfg.makesettings > 0 then\nfor _, value in ipairs(cfg.makesettings) do\n_p(value)\nend\nend\nlocal toolsettings = cc.platforms[cfg.platform].cfgsettings\nif toolsettings then\n_p(toolsettings)\nend\nend\nnewaction {\ntrigger = \"gmake\",\nshortname = \"GNU Make\",\ndescription = \"Generate GNU makefiles for POSIX, MinGW, and Cygwin\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\" },\nvalid_languages = { \"C\", \"C++\", \"C#\" },\nvalid_tools = {\ncc = { \"gcc\", \"ghs\" },\ndotnet = { " - "\"mono\", \"msnet\", \"pnet\" },\n},\nonsolution = function(sln)\npremake.generate(sln, _MAKE.getmakefilename(sln, false), premake.make_solution)\nend,\nonproject = function(prj)\nlocal makefile = _MAKE.getmakefilename(prj, true)\nif premake.isdotnetproject(prj) then\npremake.generate(prj, makefile, premake.make_csharp)\nelse\npremake.generate(prj, makefile, premake.make_cpp)\nend\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, _MAKE.getmakefilename(sln, false))\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, _MAKE.getmakefilename(prj, true))\nend\n}\n", + "tion == this.location) then count = count + 1 end\nif (searchprjs) then\nfor _,prj in ipairs(sln.projects) do\nif (prj.location == this.location) then count = count + 1 end\nend\nend\nend\nif (count == 1) then\nreturn \"Makefile\"\nelse\nreturn this.name .. \".make\"\nend\nend\nfunction _MAKE.getnames(tbl)\nlocal result = table.extract(tbl, \"name\")\nfor k,v in pairs(result) do\nresult[k] = _MAKE.esc(v)\nend\nreturn result\nend\nfunction make.settings(cfg, cc)\nif #cfg.makesettings > 0 then\nfor _, value in ipairs(cfg.makesettings) do\n_p(value)\nend\nend\nlocal toolsettings = cc.platforms[cfg.platform].cfgsettings\nif toolsettings then\n_p(toolsettings)\nend\nend\nnewaction {\ntrigger = \"gmake\",\nshortname = \"GNU Make\",\ndescription = \"Generate GNU makefiles for POSIX, MinGW, and Cygwin\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\" },\nvalid_languages = { \"C\", \"C++\", \"C#\", \"Vala\" },\nvalid_tools = {\ncc = { \"gcc\", \"ghs\" },\ndo" + "tnet = { \"mono\", \"msnet\", \"pnet\" },\nvalac = { \"valac\" },\n},\nonsolution = function(sln)\npremake.generate(sln, _MAKE.getmakefilename(sln, false), premake.make_solution)\nend,\nonproject = function(prj)\nlocal makefile = _MAKE.getmakefilename(prj, true)\nif premake.isdotnetproject(prj) then\npremake.generate(prj, makefile, premake.make_csharp)\nelseif premake.iscppproject(prj) then\npremake.generate(prj, makefile, premake.make_cpp)\nelse\npremake.generate(prj, makefile, premake.make_vala)\nend\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, _MAKE.getmakefilename(sln, false))\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, _MAKE.getmakefilename(prj, true))\nend\n}\n", /* actions/make/make_solution.lua */ - "function premake.make_solution(sln)\nlocal cc = premake[_OPTIONS.cc]\nlocal platforms = premake.filterplatforms(sln, cc.platforms, \"Native\")\n_p('# %s solution makefile autogenerated by GENie', premake.action.current().shortname)\n_p('# Type \"make help\" for usage help')\n_p('')\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(sln.configurations[1], platforms[1], true)))\n_p('endif')\n_p('export config')\n_p('')\n_p('PROJECTS := %s', table.concat(_MAKE.esc(table.extract(sln.projects, \"name\")), \" \"))\n_p('')\n_p('.PHONY: all clean help $(PROJECTS)')\n_p('')\n_p('all: $(PROJECTS)')\n_p('')\nfor _, prj in ipairs(sln.projects) do\n_p('%s: %s', _MAKE.esc(prj.name), table.concat(_MAKE.esc(table.extract(premake.getdependencies(prj), \"name\")), \" \"))\nif (not sln.messageskip) or (not table.contains(sln.messageskip, \"SkipBuildingMessage\")) then\n_p('\\t@echo \"==== Building %s ($(config)) ====\"', prj.name)\nend\n_p('\\t@${MAKE} --no-print-directory -C %s -f %s', _MAKE.esc(path.getrel" - "ative(sln.location, prj.location)), _MAKE.esc(_MAKE.getmakefilename(prj, true)))\n_p('')\nend\n_p('clean:')\nfor _ ,prj in ipairs(sln.projects) do\n_p('\\t@${MAKE} --no-print-directory -C %s -f %s clean', _MAKE.esc(path.getrelative(sln.location, prj.location)), _MAKE.esc(_MAKE.getmakefilename(prj, true)))\nend\n_p('')\n_p('help:')\n_p(1,'@echo \"Usage: make [config=name] [target]\"')\n_p(1,'@echo \"\"')\n_p(1,'@echo \"CONFIGURATIONS:\"')\nlocal cfgpairs = { }\nfor _, platform in ipairs(platforms) do\nfor _, cfgname in ipairs(sln.configurations) do\n_p(1,'@echo \" %s\"', premake.getconfigname(cfgname, platform, true))\nend\nend\n_p(1,'@echo \"\"')\n_p(1,'@echo \"TARGETS:\"')\n_p(1,'@echo \" all (default)\"')\n_p(1,'@echo \" clean\"')\nfor _, prj in ipairs(sln.projects) do\n_p(1,'@echo \" %s\"', prj.name)\nend\n_p(1,'@echo \"\"')\n_p(1,'@echo \"For more information, see https://github.com/bkaradzic/genie\"')\nend\n", + "function premake.make_solution(sln)\nlocal cc = premake[_OPTIONS.cc]\nlocal platforms = premake.filterplatforms(sln, cc.platforms, \"Native\")\n_p('# %s solution makefile autogenerated by GENie', premake.action.current().shortname)\n_p('# Type \"make help\" for usage help')\n_p('')\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(sln.configurations[1], platforms[1], true)))\n_p('endif')\n_p('export config')\n_p('')\nlocal projects = table.extract(sln.projects, \"name\")\ntable.sort(projects)\n_p('PROJECTS := %s', table.concat(_MAKE.esc(projects), \" \"))\n_p('')\n_p('.PHONY: all clean help $(PROJECTS)')\n_p('')\n_p('all: $(PROJECTS)')\n_p('')\nfor _, prj in ipairs(sln.projects) do\n_p('%s: %s', _MAKE.esc(prj.name), table.concat(_MAKE.esc(table.extract(premake.getdependencies(prj), \"name\")), \" \"))\nif (not sln.messageskip) or (not table.contains(sln.messageskip, \"SkipBuildingMessage\")) then\n_p('\\t@echo \"==== Building %s ($(config)) ====\"', prj.name)\nend\n_p('\\t@${MAKE} --no-pr" + "int-directory -C %s -f %s', _MAKE.esc(path.getrelative(sln.location, prj.location)), _MAKE.esc(_MAKE.getmakefilename(prj, true)))\n_p('')\nend\n_p('clean:')\nfor _ ,prj in ipairs(sln.projects) do\n_p('\\t@${MAKE} --no-print-directory -C %s -f %s clean', _MAKE.esc(path.getrelative(sln.location, prj.location)), _MAKE.esc(_MAKE.getmakefilename(prj, true)))\nend\n_p('')\n_p('help:')\n_p(1,'@echo \"Usage: make [config=name] [target]\"')\n_p(1,'@echo \"\"')\n_p(1,'@echo \"CONFIGURATIONS:\"')\nlocal cfgpairs = { }\nfor _, platform in ipairs(platforms) do\nfor _, cfgname in ipairs(sln.configurations) do\n_p(1,'@echo \" %s\"', premake.getconfigname(cfgname, platform, true))\nend\nend\n_p(1,'@echo \"\"')\n_p(1,'@echo \"TARGETS:\"')\n_p(1,'@echo \" all (default)\"')\n_p(1,'@echo \" clean\"')\nfor _, prj in ipairs(sln.projects) do\n_p(1,'@echo \" %s\"', prj.name)\nend\n_p(1,'@echo \"\"')\n_p(1,'@echo \"For more information, see https://github.com/bkaradzic/genie\"')\nend\n", /* actions/make/make_cpp.lua */ - "premake.make.cpp = { }\npremake.make.override = { }\nlocal cpp = premake.make.cpp\nlocal make = premake.make\nfunction premake.make_cpp(prj)\nlocal cc = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\npremake.gmake_cpp_header(prj, cc, platforms)\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\npremake.gmake_cpp_config(prj, cfg, cc)\nend\nend\nlocal objdirs = {}\nlocal additionalobjdirs = {}\nfor _, file in ipairs(prj.files) do\nif path.isSourceFile(file) then\nobjdirs[_MAKE.esc(path.getdirectory(path.trimdots(file)))] = 1\nend\nend\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nadditionalobjdirs[_MAKE.esc(path.getdirectory(path.getrelative(prj.location,buildtask[2])))] = 1\nend\nend\n_p('OBJDIRS := \\\\')\n_p('\\t$(OBJDIR) \\\\')\nfor dir, _ in pairs(objdirs) do\n_p('\\t$(OBJDIR)/%s \\\\', dir)\nend\nfor dir, _ in pairs(additionalobjdirs) do" - "\n_p('\\t%s \\\\', dir)\nend\n_p('')\n_p('RESOURCES := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.isresourcefile(file) then\n_p('\\t$(OBJDIR)/%s.res \\\\', _MAKE.esc(path.getbasename(file)))\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('all: $(OBJDIRS) prebuild prelink $(TARGET) $(dir $(TARGETDIR))PkgInfo $(dir $(TARGETDIR))Info.plist | $(TARGETDIR)')\nelse\n_p('all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)')\nend\n_p('\\t@:')\n_p('')\nif (prj.kind == \"StaticLib\" and prj.options.ArchiveSplit) then\n_p('define max_args')\n_p('\\t$(eval _args:=)')\n_p('\\t$(foreach obj,$3,$(eval _args+=$(obj))$(if $(word $2,$(_args)),$1$(_args)$(EOL)$(eval _args:=)))')\n_p('\\t$(if $(_args),$1$(_args))')\n_p('endef')\n_p('')\n_p('define EOL')\n_p('')\n_p('')\n_p('endef')\n_p('')\nend\n_p('$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)')\nif prj.kind == \"StaticLib\" then\nif pr" - "j.msgarchiving then\n_p('\\t@echo ' .. prj.msgarchiving)\nelse\n_p('\\t@echo Archiving %s', prj.name)\nend\nif (not prj.archivesplit_size) then\nprj.archivesplit_size=200\nend\nif (not prj.options.ArchiveSplit) then\n_p('\\t$(SILENT) $(LINKCMD) $(OBJECTS)' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\nelse\n_p('\\t$(call RM,$(TARGET))')\n_p('\\t@$(call max_args,$(LINKCMD),'.. prj.archivesplit_size ..',$(OBJECTS))' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\n_p('\\t$(SILENT) $(LINKCMD_NDX)')\nend\nelse\nif prj.msglinking then\n_p('\\t@echo ' .. prj.msglinking)\nelse\n_p('\\t@echo Linking %s', prj.name)\nend\n_p('\\t$(SILENT) $(LINKCMD)')\nend\n_p('\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('$(OBJDIRS):')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCreatingMessage\")) then\n_p('\\t@echo Creating $(@)')\nend\n_p('\\t-$" - "(call MKDIR,$@)')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('$(dir $(TARGETDIR))PkgInfo:')\n_p('$(dir $(TARGETDIR))Info.plist:')\n_p('')\nend\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleaning %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('\\t$(SILENT) rm -rf $(OBJDIR)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(OBJDIR)) rmdir /s /q $(subst /,\\\\\\\\,$(OBJDIR))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\ncpp.pchrules(prj)\ncpp.fileRules(prj)\ncpp.dependencyRules(prj)\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal deps = string.format(\"%s \",path.getrelative(prj.locatio" - "n,buildtask[1]))\nfor _, depdata in ipairs(buildtask[3] or {}) do\ndeps = deps .. string.format(\"%s \",path.getrelative(prj.location,depdata))\nend\n_p('%s: %s | $(TARGETDIR) $(OBJDIRS)'\n,path.getrelative(prj.location,buildtask[2])\n, deps\n)\nfor _, cmdline in ipairs(buildtask[4] or {}) do\nlocal cmd = cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", \"$<\")\ncmd = string.gsub(cmd, \"%$%(@%)\", \"$@\")\n_p('\\t$(SILENT) %s',cmd)\nend\n_p('')\nend\nend\n_p('-include $(OBJECTS:%%.o=%%.d)')\n_p('ifneq (,$(PCH))')\n_p(' -include $(OBJDIR)/$(notdir $(PCH)).d')\n_p('endif')\nend\nfunction premake.gmake_cpp_header(prj, cc, platforms)\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], pl" - "atforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(' RM= $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('CC = %s', cc.cc)\n_p('CXX = %s', cc.cxx)\n_p('AR = %s', cc.ar)\n_p('')\n_p('ifndef RESCOMP')\n_p(' ifdef WINDRES')\n_p(' RESCOMP = $(WINDRES)')\n_p(' else')\n_p(' " - " RESCOMP = windres')\n_p(' endif')\n_p('endif')\n_p('')\nend\nfunction premake.gmake_cpp_config(prj, cfg, cc)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\ncpp.platformtools(cfg, cc)\n_p(' ' .. (table.contains(premake.make.override,\"OBJDIR\") and \"override \" or \"\") .. 'OBJDIR = %s', _MAKE.esc(cfg.objectsdir))\n_p(' ' .. (table.contains(premake.make.override,\"TARGETDIR\") and \"override \" or \"\") .. 'TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' ' .. (table.contains(premake.make.override,\"TARGET\") and \"override \" or \"\") .. 'TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(cc.getdefines(cfg.defines)))\n_p(' INCLUDES +=%s', make.list(cc.getincludedirs(cfg.includedirs)))\ncpp.pchconfig(cfg)\ncpp.flags(cfg, cc)\ncpp.linker(prj, cfg, cc)\n_p(' OBJECTS := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.isSourceFile(file) then\nif not table.icontains(cfg.excludes, file) then\n_p('\\t$(OBJDIR)/%s.o \\\\'\n, _MAK" - "E.esc(path.trimdots(path.removeext(file)))\n)\nend\nend\nend\n_p('')\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\nmake.settings(cfg, cc)\n_p('endif')\n_p('')\nend\nfunction cpp.platformtools(cfg, cc)\nlocal platform = cc.platforms[cfg.platform]\nif platform.cc then\n_p(' CC = %s', platform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cf" - "g, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\nend\nif #cfg.forcedincludes > 0 then\n_p(' FORCE_INCLUDE += -include %s'\n,_MAKE.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n_p(' ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resdefines),\n cc.getincludedi" - "rs(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(prj, cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\n_p(' EXTERNAL_LIBS +=%s', make.list(cc.getlibfiles(cfg)))\nif cfg.kind == \"StaticLib\" then\nif (not prj.options.ArchiveSplit) then\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\nelse\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\n_p(' LINKCMD_NDX= $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, true)))\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPC" - "H then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = path.getabsolute(path.join(cfg.project.location, incdir))\nlocal testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nlocal cmd = iif(prj.language == \"C\", \"$(CC) $(ALL_CFLAGS) -x c-header\", \"$(CXX) $(ALL_CXXFLAGS) -x c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cpp.fileRules(prj)\nfor _, file in ipairs(prj.files or {}) do\nif path.isSourceFile(file) then\n_p('$(OBJDIR)/%s.o: %s $(GCH)'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nif (pat" - "h.isobjcfile(file) and prj.msgcompile_objc) then\n_p('\\t@echo ' .. prj.msgcompile_objc)\nelseif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nif (path.isobjcfile(file)) then\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCFLAGS) $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"')\nelse\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\nend\nfor _, task in ipairs(prj.postcompiletasks or {}) do\n_p('\\t$(SILENT) %s', task)\n_p('')\nend\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p('')\nend\nend\nend\nfunction cpp.dependencyRules(prj)\nfor _, dependency in ipairs(prj.dependency or {}) do\nfor _, dep in ipairs(dependency or {}) do\nif (dep[3]==nil or dep[3]==false) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.es" - "c(path.trimdots(path.removeext(path.getrelative(prj.location, dep[1]))))\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nelse\n_p('%s: %s'\n, _MAKE.esc(dep[1])\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nend\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"', flags, objext)\nend\n", + "premake.make.cpp = { }\npremake.make.override = { }\nlocal cpp = premake.make.cpp\nlocal make = premake.make\nfunction premake.make_cpp(prj)\nlocal cc = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, cc.platforms, \"Native\")\npremake.gmake_cpp_header(prj, cc, platforms)\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\npremake.gmake_cpp_config(prj, cfg, cc)\nend\nend\ntable.sort(prj.files)\nlocal objdirs = {}\nlocal additionalobjdirs = {}\nfor _, file in ipairs(prj.files) do\nif path.isSourceFile(file) then\nobjdirs[_MAKE.esc(path.getdirectory(path.trimdots(file)))] = 1\nend\nend\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nadditionalobjdirs[_MAKE.esc(path.getdirectory(path.getrelative(prj.location,buildtask[2])))] = 1\nend\nend\n_p('OBJDIRS := \\\\')\n_p('\\t$(OBJDIR) \\\\')\nfor dir, _ in iter.sortByKeys(objdirs) do\n_p('\\t$(OBJDIR)/%s \\\\', dir)\nend\nfor dir, " + "_ in iter.sortByKeys(additionalobjdirs) do\n_p('\\t%s \\\\', dir)\nend\n_p('')\n_p('RESOURCES := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.isresourcefile(file) then\n_p('\\t$(OBJDIR)/%s.res \\\\', _MAKE.esc(path.getbasename(file)))\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('all: $(OBJDIRS) prebuild prelink $(TARGET) $(dir $(TARGETDIR))PkgInfo $(dir $(TARGETDIR))Info.plist | $(TARGETDIR)')\nelse\n_p('all: $(OBJDIRS) prebuild prelink $(TARGET) | $(TARGETDIR)')\nend\n_p('\\t@:')\n_p('')\nif (prj.kind == \"StaticLib\" and prj.options.ArchiveSplit) then\n_p('define max_args')\n_p('\\t$(eval _args:=)')\n_p('\\t$(foreach obj,$3,$(eval _args+=$(obj))$(if $(word $2,$(_args)),$1$(_args)$(EOL)$(eval _args:=)))')\n_p('\\t$(if $(_args),$1$(_args))')\n_p('endef')\n_p('')\n_p('define EOL')\n_p('')\n_p('')\n_p('endef')\n_p('')\nend\n_p('$(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(EXTERNAL_LIBS) $(RESOURCES) | $(TARGETDIR) $(OBJDIRS)')" + "\nif prj.kind == \"StaticLib\" then\nif prj.msgarchiving then\n_p('\\t@echo ' .. prj.msgarchiving)\nelse\n_p('\\t@echo Archiving %s', prj.name)\nend\nif (not prj.archivesplit_size) then\nprj.archivesplit_size=200\nend\nif (not prj.options.ArchiveSplit) then\n_p('\\t$(SILENT) $(LINKCMD) $(OBJECTS)' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\nelse\n_p('\\t$(call RM,$(TARGET))')\n_p('\\t@$(call max_args,$(LINKCMD),'.. prj.archivesplit_size ..',$(OBJECTS))' .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\n_p('\\t$(SILENT) $(LINKCMD_NDX)')\nend\nelse\nif prj.msglinking then\n_p('\\t@echo ' .. prj.msglinking)\nelse\n_p('\\t@echo Linking %s', prj.name)\nend\n_p('\\t$(SILENT) $(LINKCMD)')\nend\n_p('\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('$(OBJDIRS):')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCreatingMessage\")) then\n_p" + "('\\t@echo Creating $(@)')\nend\n_p('\\t-$(call MKDIR,$@)')\n_p('')\nif os.is(\"MacOSX\") and prj.kind == \"WindowedApp\" then\n_p('$(dir $(TARGETDIR))PkgInfo:')\n_p('$(dir $(TARGETDIR))Info.plist:')\n_p('')\nend\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleaning %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('\\t$(SILENT) rm -rf $(OBJDIR)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(OBJDIR)) rmdir /s /q $(subst /,\\\\\\\\,$(OBJDIR))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\ncpp.pchrules(prj)\ncpp.fileRules(prj)\ncpp.dependencyRules(prj)\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal deps = string.f" + "ormat(\"%s \",path.getrelative(prj.location,buildtask[1]))\nfor _, depdata in ipairs(buildtask[3] or {}) do\ndeps = deps .. string.format(\"%s \",path.getrelative(prj.location,depdata))\nend\n_p('%s: %s | $(TARGETDIR) $(OBJDIRS)'\n,path.getrelative(prj.location,buildtask[2])\n, deps\n)\nfor _, cmdline in ipairs(buildtask[4] or {}) do\nlocal cmd = cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", \"$<\")\ncmd = string.gsub(cmd, \"%$%(@%)\", \"$@\")\n_p('\\t$(SILENT) %s',cmd)\nend\n_p('')\nend\nend\n_p('-include $(OBJECTS:%%.o=%%.d)')\n_p('ifneq (,$(PCH))')\n_p(' -include $(OBJDIR)/$(notdir $(PCH)).d')\n_p('endif')\nend\nfunction premake.gmake_cpp_header(prj, cc, platforms)\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getcon" + "figname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(' RM = $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('CC = %s', cc.cc)\n_p('CXX = %s', cc.cxx)\n_p('AR = %s', cc.ar)\n_p('')\n_p('ifndef RESCOMP')\n_p(' ifdef WINDRES')\n_p(' " + " RESCOMP = $(WINDRES)')\n_p(' else')\n_p(' RESCOMP = windres')\n_p(' endif')\n_p('endif')\n_p('')\nend\nfunction premake.gmake_cpp_config(prj, cfg, cc)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\ncpp.platformtools(cfg, cc)\n_p(' ' .. (table.contains(premake.make.override,\"OBJDIR\") and \"override \" or \"\") .. 'OBJDIR = %s', _MAKE.esc(cfg.objectsdir))\n_p(' ' .. (table.contains(premake.make.override,\"TARGETDIR\") and \"override \" or \"\") .. 'TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' ' .. (table.contains(premake.make.override,\"TARGET\") and \"override \" or \"\") .. 'TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(cc.getdefines(cfg.defines)))\n_p(' INCLUDES +=%s', make.list(cc.getincludedirs(cfg.includedirs)))\n_p(' INCLUDES +=%s', make.list(cc.getquoteincludedirs(cfg.userincludedirs)))\ncpp.pchconfig(cfg)\ncpp.flags(cfg, cc)\ncpp.linker(prj, cfg, cc)\ntable.sort(prj.files)\n_p(' " + "OBJECTS := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.isSourceFile(file) then\nif not table.icontains(cfg.excludes, file) then\n_p('\\t$(OBJDIR)/%s.o \\\\'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n)\nend\nend\nend\n_p('')\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\nmake.settings(cfg, cc)\n_p('endif')\n_p('')\nend\nfunction cpp.platformtools(cfg, cc)\nlocal platform = cc.platforms[cfg.platform]\nif platform.cc then\n_p(' CC = %s', pl" + "atform.cc)\nend\nif platform.cxx then\n_p(' CXX = %s', platform.cxx)\nend\nif platform.ar then\n_p(' AR = %s', platform.ar)\nend\nend\nfunction cpp.flags(cfg, cc)\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(' FORCE_INCLUDE += -include $(OBJDIR)/$(notdir $(PCH))')\nend\nif #cfg.forcedincludes > 0 then\n_p(' FORCE_INCLUDE += -include %s'\n,_MAKE.esc(table.concat(cfg.forcedincludes, \";\")))\nend\n_p(' ALL_CPPFLAGS += $(CPPFLAGS) %s $(DEFINES) $(INCLUDES)', table.concat(cc.getcppflags(cfg), \" \"))\n_p(' ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cfg.buildoptions, cfg.buildoptions_c)))\n_p(' ALL_CXXFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)))\n_p(' ALL_OBJCFLAGS += $(CXXFLAGS) $(CFLAGS) $(ALL_CPPFLAGS) $(ARCH)%s', make.list(table.join(cc.getcflags(cfg), cc.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)))" + "\n_p(' ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES)%s',\n make.list(table.join(cc.getdefines(cfg.resdefines),\n cc.getincludedirs(cfg.resincludedirs), cfg.resoptions)))\nend\nfunction cpp.linker(prj, cfg, cc)\n_p(' ALL_LDFLAGS += $(LDFLAGS)%s', make.list(table.join(cc.getlibdirflags(cfg), cc.getldflags(cfg), cfg.linkoptions)))\n_p(' LDDEPS +=%s', make.list(_MAKE.esc(premake.getlinks(cfg, \"siblings\", \"fullpath\"))))\n_p(' LIBS += $(LDDEPS)%s', make.list(cc.getlinkflags(cfg)))\n_p(' EXTERNAL_LIBS +=%s', make.list(cc.getlibfiles(cfg)))\nif cfg.kind == \"StaticLib\" then\nif (not prj.options.ArchiveSplit) then\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\nelse\n_p(' LINKCMD = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, false)))\n_p(' LINKCMD_NDX = $(AR) %s $(TARGET)', make.list(cc.getarchiveflags(prj, cfg, true)))\nend\nelse\nlocal tool = iif(cfg.language == \"C\", \"CC" + "\", \"CXX\")\n_p(' LINKCMD = $(%s) -o $(TARGET) $(OBJECTS) $(RESOURCES) $(ARCH) $(ALL_LDFLAGS) $(LIBS)', tool)\nend\nend\nfunction cpp.pchconfig(cfg)\nif not cfg.pchheader or cfg.flags.NoPCH then\nreturn\nend\nlocal pch = cfg.pchheader\nfor _, incdir in ipairs(cfg.includedirs) do\nlocal abspath = path.getabsolute(path.join(cfg.project.location, incdir))\nlocal testname = path.join(abspath, pch)\nif os.isfile(testname) then\npch = path.getrelative(cfg.location, testname)\nbreak\nend\nend\n_p(' PCH = %s', _MAKE.esc(pch))\n_p(' GCH = $(OBJDIR)/$(notdir $(PCH)).gch')\nend\nfunction cpp.pchrules(prj)\n_p('ifneq (,$(PCH))')\n_p('$(GCH): $(PCH) | $(OBJDIR)')\nif prj.msgprecompile then\n_p('\\t@echo ' .. prj.msgprecompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nlocal cmd = iif(prj.language == \"C\", \"$(CC) $(ALL_CFLAGS) -x c-header\", \"$(CXX) $(ALL_CXXFLAGS) -x c++-header\")\n_p('\\t$(SILENT) %s $(DEFINES) $(INCLUDES) -o \"$@\" -c \"$<\"', cmd)\n_p('endif')\n_p('')\nend\nfunction cp" + "p.fileRules(prj)\ntable.sort(prj.files)\nfor _, file in ipairs(prj.files or {}) do\nif path.isSourceFile(file) then\n_p('$(OBJDIR)/%s.o: %s $(GCH)'\n, _MAKE.esc(path.trimdots(path.removeext(file)))\n, _MAKE.esc(file)\n)\nif (path.isobjcfile(file) and prj.msgcompile_objc) then\n_p('\\t@echo ' .. prj.msgcompile_objc)\nelseif prj.msgcompile then\n_p('\\t@echo ' .. prj.msgcompile)\nelse\n_p('\\t@echo $(notdir $<)')\nend\nif (path.isobjcfile(file)) then\n_p('\\t$(SILENT) $(CXX) $(ALL_OBJCFLAGS) $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"')\nelse\ncpp.buildcommand(path.iscfile(file) and not prj.options.ForceCPP, \"o\")\nend\nfor _, task in ipairs(prj.postcompiletasks or {}) do\n_p('\\t$(SILENT) %s', task)\n_p('')\nend\n_p('')\nelseif (path.getextension(file) == \".rc\") then\n_p('$(OBJDIR)/%s.res: %s', _MAKE.esc(path.getbasename(file)), _MAKE.esc(file))\nif prj.msgresource then\n_p('\\t@echo ' .. prj.msgresource)\nelse\n_p('\\t@echo $(notdir $<)')\nend\n_p('\\t$(SILENT) $(RESCOMP) $< -O coff -o \"$@\" $(ALL_RESFLAGS)')\n_p" + "('')\nend\nend\nend\nfunction cpp.dependencyRules(prj)\nfor _, dependency in ipairs(prj.dependency or {}) do\nfor _, dep in ipairs(dependency or {}) do\nif (dep[3]==nil or dep[3]==false) then\n_p('$(OBJDIR)/%s.o: %s'\n, _MAKE.esc(path.trimdots(path.removeext(path.getrelative(prj.location, dep[1]))))\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nelse\n_p('%s: %s'\n, _MAKE.esc(dep[1])\n, _MAKE.esc(path.getrelative(prj.location, dep[2]))\n)\nend\n_p('')\nend\nend\nend\nfunction cpp.buildcommand(iscfile, objext)\nlocal flags = iif(iscfile, '$(CC) $(ALL_CFLAGS)', '$(CXX) $(ALL_CXXFLAGS)')\n_p('\\t$(SILENT) %s $(FORCE_INCLUDE) -o \"$@\" -c \"$<\"', flags, objext)\nend\n", /* actions/make/make_csharp.lua */ "local function getresourcefilename(cfg, fname)\nif path.getextension(fname) == \".resx\" then\n local name = cfg.buildtarget.basename .. \".\"\n local dir = path.getdirectory(fname)\n if dir ~= \".\" then \nname = name .. path.translate(dir, \".\") .. \".\"\nend\nreturn \"$(OBJDIR)/\" .. _MAKE.esc(name .. path.getbasename(fname)) .. \".resources\"\nelse\nreturn fname\nend\nend\nfunction premake.make_csharp(prj)\nlocal csc = premake.dotnet\nlocal cfglibs = { }\nlocal cfgpairs = { }\nlocal anycfg\nfor cfg in premake.eachconfig(prj) do\nanycfg = cfg\ncfglibs[cfg] = premake.getlinks(cfg, \"siblings\", \"fullpath\")\ncfgpairs[cfg] = { }\nfor _, fname in ipairs(cfglibs[cfg]) do\nif path.getdirectory(fname) ~= cfg.buildtarget.directory then\ncfgpairs[cfg][\"$(TARGETDIR)/\" .. _MAKE.esc(path.getname(fname))] = _MAKE.esc(fname)\nend\nend\nend\nlocal sources = {}\nlocal embedded = { }\nlocal copypairs = { }\nfor fcfg in premake.project.eachfile(prj) do\nlocal action = csc.getbuildaction(fcfg)\nif action == \"Co" @@ -236,6 +247,12 @@ const char* builtin_scripts[] = { "\n_p('%s: %s', getresourcefilename(prj, fname), _MAKE.esc(fname))\n_p('\\t$(SILENT) $(RESGEN) $^ $@')\nend\n_p('')\nend\nend\nfunction premake.gmake_cs_config(cfg, csc, cfglibs)\n_p('ifneq (,$(findstring %s,$(config)))', _MAKE.esc(cfg.name:lower()))\n_p(' TARGETDIR := %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' OBJDIR := %s', _MAKE.esc(cfg.objectsdir))\n_p(' DEPENDS := %s', table.concat(_MAKE.esc(premake.getlinks(cfg, \"dependencies\", \"fullpath\")), \" \"))\n_p(' REFERENCES := %s', table.implode(_MAKE.esc(cfglibs[cfg]), \"/r:\", \"\", \" \"))\n_p(' FLAGS += %s %s', table.implode(cfg.defines, \"/d:\", \"\", \" \"), table.concat(table.join(csc.getflags(cfg), cfg.buildoptions), \" \"))\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p" "('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p('endif')\n_p('')\nend\n", + /* actions/make/make_vala.lua */ + "local make = premake.make\nfunction premake.make_vala(prj)\nlocal valac = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, valac.platforms, \"Native\")\n_p('# %s project makefile autogenerated by GENie', premake.action.current().shortname)\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(prj.solution.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\n_p('ifndef verbose')\n_p(' SILENT = @')\n_p('endif')\n_p('')\n_p('SHELLTYPE := msdos')\n_p('ifeq (,$(ComSpec)$(COMSPEC))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(SHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('ifeq (/bin,$(findstring /bin,$(MAKESHELL)))')\n_p(' SHELLTYPE := posix')\n_p('endif')\n_p('')\n_p('ifeq (posix,$(SHELLTYPE))')\n_p(' MKDIR = $(SILENT) mkdir -p \"$(1)\"')\n_p(' COPY = $(SILENT) cp -fR \"$(1)\" \"$(2)\"')\n_p(' RM = $(SILENT) rm -f \"$(1)\"')\n_p('else')\n_p(' MKDIR = $(SILENT) mkdir \"$(subst /,\\\\\\\\,$(1))\" 2> nul || e" + "xit 0')\n_p(' COPY = $(SILENT) copy /Y \"$(subst /,\\\\\\\\,$(1))\" \"$(subst /,\\\\\\\\,$(2))\"')\n_p(' RM = $(SILENT) del /F \"$(subst /,\\\\\\\\,$(1))\" 2> nul || exit 0')\n_p('endif')\n_p('')\n_p('VALAC = %s', valac.valac)\n_p('CC = %s', valac.cc)\n_p('')\nfor _, platform in ipairs(platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\npremake.gmake_valac_config(prj, cfg, valac)\nend\nend\n_p('SOURCES := \\\\')\nfor _, file in ipairs(prj.files) do\nif path.isSourceFile(file) then\nif not table.icontains(prj.excludes, file) then\n_p('\\t%s \\\\', _MAKE.esc(file))\nend\nend\nend\n_p('')\n_p('.PHONY: clean prebuild prelink')\n_p('')\n_p('$(TARGET): $(SOURCES) | $(TARGETDIR)')\n_p('\\t$(SILENT) $(VALAC) -o $(TARGET) --cc=$(CC) $(FLAGS) $(SOURCES)')\n_p('\\t$(POSTBUILDCMDS)')\n_p('')\n_p('$(TARGETDIR):')\npremake.make_mkdirrule(\"$(TARGETDIR)\")\n_p('clean:')\nif (not prj.solution.messageskip) or (not table.contains(prj.solution.messageskip, \"SkipCleaningMessage\")) then\n_p('\\t@echo Cleanin" + "g %s', prj.name)\nend\n_p('ifeq (posix,$(SHELLTYPE))')\n_p('\\t$(SILENT) rm -f $(TARGET)')\n_p('else')\n_p('\\t$(SILENT) if exist $(subst /,\\\\\\\\,$(TARGET)) del $(subst /,\\\\\\\\,$(TARGET))')\n_p('endif')\n_p('')\n_p('prebuild:')\n_p('\\t$(PREBUILDCMDS)')\n_p('')\n_p('prelink:')\n_p('\\t$(PRELINKCMDS)')\n_p('')\nend\nfunction premake.gmake_valac_config(prj, cfg, valac)\n_p('ifeq ($(config),%s)', _MAKE.esc(cfg.shortname))\n_p(' TARGETDIR = %s', _MAKE.esc(cfg.buildtarget.directory))\n_p(' TARGET = $(TARGETDIR)/%s', _MAKE.esc(cfg.buildtarget.name))\n_p(' DEFINES +=%s', make.list(valac.getdefines(cfg.defines)))\n_p(' PKGS +=%s', make.list(valac.getlinks(cfg.links)))\n_p(' FLAGS += $(DEFINES) $(PKGS)%s', make.list(table.join(valac.getvalaflags(cfg), valac.getbuildoptions(cfg.buildoptions), valac.getbuildoptions(cfg.buildoptions_c))))\n_p(' define PREBUILDCMDS')\nif #cfg.prebuildcommands > 0 then\n_p('\\t@echo Running pre-build commands')\n_p('\\t%s', table.implode(cfg.prebuildcommands," + " \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define PRELINKCMDS')\nif #cfg.prelinkcommands > 0 then\n_p('\\t@echo Running pre-link commands')\n_p('\\t%s', table.implode(cfg.prelinkcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p(' define POSTBUILDCMDS')\nif #cfg.postbuildcommands > 0 then\n_p('\\t@echo Running post-build commands')\n_p('\\t%s', table.implode(cfg.postbuildcommands, \"\", \"\", \"\\n\\t\"))\nend\n_p(' endef')\n_p('endif')\n_p('')\nend\n", + /* actions/vstudio/_vstudio.lua */ "premake.vstudio = { }\nlocal toolsets = {\nvs2010 = \"v100\",\nvs2012 = \"v110\",\nvs2013 = \"v120\",\nvs2015 = \"v140\",\nvs15 = \"v140\",\n}\npremake.vstudio.toolset = toolsets[_ACTION] or \"unknown?\"\npremake.vstudio.splashpath = ''\nlocal vstudio = premake.vstudio\nvstudio.platforms = {\nany = \"Any CPU\",\nmixed = \"Mixed Platforms\",\nNative = \"Win32\",\nx86 = \"x86\",\nx32 = \"Win32\",\nx64 = \"x64\",\nPS3 = \"PS3\",\nXbox360 = \"Xbox 360\",\nARM = \"ARM\",\nOrbis= \"Orbis\",\nDurango = \"Durango\",\n}\nfunction vstudio.arch(prj)\nif (prj.language == \"C#\") then\nreturn \"Any CPU\"\nelse\nreturn \"Win32\"\nend\nend\nfunction vstudio.iswinrt()\nreturn vstudio.storeapp ~= nil and vstudio.storeapp ~= ''\nend\nfunction vstudio.buildconfigs(sln)\nlocal cfgs = { }\nlocal platforms = premake.filterplatforms(sln, vstudio.platforms, \"Native\")\nlocal hascpp = premake.hascppproject(sln)\nlocal hasdotnet = premake.hasdotnetproject(sln)\nif hasdotnet and (_ACTION > \"vs2008\" or " "hascpp) then\ntable.insert(platforms, 1, \"mixed\")\nend\nif hasdotnet and (_ACTION < \"vs2010\" or not hascpp) then\ntable.insert(platforms, 1, \"any\")\nend\nif _ACTION > \"vs2008\" then\nlocal platforms2010 = { }\nfor _, platform in ipairs(platforms) do\nif vstudio.platforms[platform] == \"Win32\" then\nif hascpp then\ntable.insert(platforms2010, platform)\nend\nif hasdotnet then\ntable.insert(platforms2010, \"x86\")\nend\nelse\ntable.insert(platforms2010, platform)\nend\nend\nplatforms = platforms2010\nend\nfor _, buildcfg in ipairs(sln.configurations) do\nfor _, platform in ipairs(platforms) do\nlocal entry = { }\nentry.src_buildcfg = buildcfg\nentry.src_platform = platform\nif platform ~= \"PS3\" or _ACTION > \"vs2008\" then\nentry.buildcfg = buildcfg\nentry.platform = vstudio.platforms[platform]\nelse\nentry.buildcfg = platform .. \" \" .. buildcfg\nentry.platform = \"Win32\"\nend\nentry.name = entry.buildcfg .. \"|\" .. entry.platform\nentry.isreal = (platform ~= \"any\" and platform ~= \"mixed\")\ntab" @@ -249,24 +266,24 @@ const char* builtin_scripts[] = { "d\n_p(3,'ConfigurationType=\"%s\"', cfgtype)\nif (cfg.flags.MFC) then\n_p(3, 'UseOfMFC=\"%d\"', iif(cfg.flags.StaticRuntime, 1, 2))\nend\nif (cfg.flags.ATL or cfg.flags.StaticATL) then\n_p(3, 'UseOfATL=\"%d\"', iif(cfg.flags.StaticATL, 1, 2))\nend\n_p(3,'CharacterSet=\"%s\"', iif(cfg.flags.Unicode, 1, 2))\nif cfg.flags.Managed then\n_p(3,'ManagedExtensions=\"1\"')\nend\n_p(3,'>')\nend\nfunction vc200x.Files(prj)\nlocal tr = premake.project.buildsourcetree(prj)\ntree.traverse(tr, {\nonbranchenter = function(node, depth)\n_p(depth, '')\nend,\nonbranchexit = function(node, depth)\n_p(depth, '')\nend,\nonleaf = function(node, depth)\nlocal fname = node.cfg.name\n_p(depth, '')\ndepth = depth + 1\nlocal excluded = table.icontains(prj.excludes, fname)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nif cfginfo.i" "sreal then\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nlocal usePCH = (not prj.flags.NoPCH and prj.pchsource == node.cfg.name)\nlocal isSourceCode = path.isSourceFile(fname)\nlocal needsCompileAs = (path.iscfile(fname) ~= premake.project.iscproject(prj))\nif usePCH or isSourceCode then\n_p(depth, '')\n_p(depth, '\\t')\n_p(depth, '')\nend\nend\nend\ndepth = depth - 1\n_p(depth, '')\nend,\n}, false, 2)\nend\nfunction vc200x.Platforms(prj)\nlocal used = { }\n_p(1,'')\nfor _, cfg in ipairs(prj.solution.vstudio_configs) do\nif cfg.isreal and not table.contains(used, cfg.platform) then\ntable.insert(used, cfg.platform)\n_p(2,'')\nend\nend\n_p(1,'')\nend\nfunction vc200x.Symbols(cfg)\nif (not cfg.flags.Symbols) then\nreturn 0\nelse\nif cfg.flags.NoEditAndContinue or\n vc200x.optimization(cfg) ~= 0 or\n cfg.flags.Managed or\n cfg.platform == \"x64\" then\nreturn 3\nelse\nreturn 4\nend\nend\nend\nfun" - "ction vc200x.VCCLCompilerTool(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s /MP\"', table.concat(premake.esc(cfg.buildoptions), \" \"))\nend\n_p(4,'Optimization=\"%s\"', vc200x.optimization(cfg))\nif cfg.flags.NoFramePointer then\n_p(4,'OmitFramePointers=\"%s\"', bool(true))\nend\nif #cfg.includedirs > 0 then\n_p(4,'AdditionalIncludeDirectories=\"%s\"', premake.esc(path.translate(table.concat(cfg.includedirs, \";\"), '\\\\')))\nend\nif #cfg.defines > 0 then\n_p(4,'PreprocessorDefinitions=\"%s\"', premake.esc(table.concat(cfg.defines, \";\")))\nend\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild and not cfg.flags.Managed then\n_p(4,'MinimalRebuild=\"%s\"', bool(true))\nend\nif cfg.flags.NoExceptions then\n_p(4,'ExceptionHandling=\"0\"')\nelseif cfg.flags.SEH then\n_p(4,'Exceptio" - "nHandling=\"2\"')\nend\nif vc200x.optimization(cfg) == 0 and not cfg.flags.Managed then\n_p(4,'BasicRuntimeChecks=\"3\"')\nend\nif vc200x.optimization(cfg) ~= 0 then\n_p(4,'StringPooling=\"%s\"', bool(true))\nend\nlocal runtime\nif premake.config.isdebugbuild(cfg) then\nruntime = iif(cfg.flags.StaticRuntime, 1, 3)\nelse\nruntime = iif(cfg.flags.StaticRuntime, 0, 2)\nend\n_p(4,'RuntimeLibrary=\"%s\"', runtime)\n_p(4,'EnableFunctionLevelLinking=\"%s\"', bool(true))\nif cfg.platform ~= \"Xbox360\" and cfg.platform ~= \"x64\" and cfg.platform ~= \"Durango\" then\nif cfg.flags.EnableSSE then\n_p(4,'EnableEnhancedInstructionSet=\"1\"')\nelseif cfg.flags.EnableSSE2 then\n_p(4,'EnableEnhancedInstructionSet=\"2\"')\nend\nend\nif cfg.flags.FloatFast then\n_p(4,'FloatingPointModel=\"2\"')\nelseif cfg.flags.FloatStrict then\n_p(4,'FloatingPointModel=\"1\"')\nend\nif cfg.flags.NoRTTI and not cfg.flags.Managed then\n_p(4,'RuntimeTypeInfo=\"%s\"', bool(false))\nend\nif cfg.flags.FastCall then\n_p(4,'CallingConvention=\"1\"')" - "\nelseif cfg.flags.StdCall then\n_p(4,'CallingConvention=\"2\"')\nend\nif cfg.flags.NativeWChar then\n_p(4,'TreatWChar_tAsBuiltInType=\"%s\"', bool(true))\nelseif cfg.flags.NoNativeWChar then\n_p(4,'TreatWChar_tAsBuiltInType=\"%s\"', bool(false))\nend\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(4,'UsePrecompiledHeader=\"2\"')\n_p(4,'PrecompiledHeaderThrough=\"%s\"', cfg.pchheader)\nelse\n_p(4,'UsePrecompiledHeader=\"%s\"', iif(cfg.flags.NoPCH, 0, 2))\nend\nif cfg.flags.ExtraWarnings then\n_p(4,'WarningLevel=\"%s\"', 4)\nelseif cfg.flags.MinimumWarnings then\n_p(4,'WarningLevel=\"%s\"', 1)\nelse\n_p(4,'WarningLevel=\"%s\"', 3)\nend\nif cfg.flags.FatalWarnings then\n_p(4,'WarnAsError=\"%s\"', bool(true))\nend\nif _ACTION < \"vs2008\" and not cfg.flags.Managed then\n_p(4,'Detect64BitPortabilityProblems=\"%s\"', bool(not cfg.flags.No64BitChecks))\nend\n_p(4,'ProgramDataBaseFileName=\"$(OutDir)\\\\%s.pdb\"', path.getbasename(cfg.buildtarget.name))\n_p(4,'DebugInformationFormat=\"%s\"', vc200x.Symbols(cfg))\n" - "if cfg.language == \"C\" then\n_p(4, 'CompileAs=\"1\"')\nend\n_p(3,'/>')\nend\nfunction vc200x.VCLinkerTool(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\n_p(4,'LinkIncremental=\"%s\"',\niif(premake.config.isincrementallink(cfg) , 2, 1))\n_p(4,'AdditionalLibraryDirectories=\"%s\"', table.concat(premake.esc(path.translate(cfg.libdirs, '\\\\')) , \";\"))\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(4,'ModuleDefinitionFile=\"%s\"', deffile)\nend\nif cfg.flags.NoManifest then\n_p(4,'GenerateMan" - "ifest=\"%s\"', bool(false))\nend\n_p(4,'GenerateDebugInformation=\"%s\"', bool(vc200x.Symbols(cfg) ~= 0))\nif vc200x.Symbols(cfg) ~= 0 then\n_p(4,'ProgramDataBaseFileName=\"$(OutDir)\\\\%s.pdb\"', path.getbasename(cfg.buildtarget.name))\nend\n_p(4,'SubSystem=\"%s\"', iif(cfg.kind == \"ConsoleApp\", 1, 2))\nif vc200x.optimization(cfg) ~= 0 then\n_p(4,'OptimizeReferences=\"2\"')\n_p(4,'EnableCOMDATFolding=\"2\"')\nend\nif (cfg.kind == \"ConsoleApp\" or cfg.kind == \"WindowedApp\") and not cfg.flags.WinMain then\n_p(4,'EntryPointSymbol=\"mainCRTStartup\"')\nend\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(4,'ImportLibrary=\"%s\"', iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\n_p(4,'TargetMachine=\"%d\"', iif(cfg.platform == \"x64\", 17, 1))\nelse\n_p(4,'Name=\"VCLibrarianTool\"')\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'O" - "utputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(4,'AdditionalLibraryDirectories=\"%s\"', premake.esc(path.translate(table.concat(cfg.libdirs , \";\"))))\nend\nlocal addlOptions = {}\nif cfg.platform == \"x32\" then\ntable.insert(addlOptions, \"/MACHINE:X86\")\nelseif cfg.platform == \"x64\" then\ntable.insert(addlOptions, \"/MACHINE:X64\")\nend\naddlOptions = table.join(addlOptions, cfg.linkoptions)\nif #addlOptions > 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(addlOptions), \" \"))\nend\nend\n_p(3,'/>')\nend\nfunction vc200x.VCCLCompilerTool_PS3(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalIncludeDirectories=\"%s\"', premake.esc(path.translate(table.concat(cfg.includedirs, \";\"), '\\\\')))\nend\nif #cfg.defines > 0 then\n_p(4,'PreprocessorDefinitions=\"%s\"', table.concat(premake.esc(cfg.defines), \";\"))\nend\n_p(4,'ProgramDataBaseFileName=\"$(OutDir)\\\\%s.pdb\"', path.getbasename(cfg.buildtarget.name))\n_p(4,'DebugInformationFormat=\"0\"')\n_p(4,'CompileAs=\"0\"')\n_p(3,'/>')\nend\nfunction vc200x.VCLinkerTool_PS3(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', premake.esc(table.concat(buildoptions, \" \")))\nend\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \")" - ")\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\n_p(4,'LinkIncremental=\"0\"')\n_p(4,'AdditionalLibraryDirectories=\"%s\"', table.concat(premake.esc(path.translate(cfg.libdirs, '\\\\')) , \";\"))\n_p(4,'GenerateManifest=\"%s\"', bool(false))\n_p(4,'ProgramDatabaseFile=\"\"')\n_p(4,'RandomizedBaseAddress=\"1\"')\n_p(4,'DataExecutionPrevention=\"0\"')\nelse\n_p(4,'Name=\"VCLibrarianTool\"')\nlocal buildoptions = table.join(premake.snc.getldflags(cfg), cfg.linkoptions)\nif #buildoptions > 0 then\n_p(4,'AdditionalOptions=\"%s\"', premake.esc(table.concat(buildoptions, \" \")))\nend\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(4,'AdditionalLibraryDirectories=\"%s\"', premake.esc(path.translate(table.concat(cfg.libdirs , \";\"))))\nend\nend\n_p(3,'/>')\nend\nfunction vc200x.VCResourceCompilerTool(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.resoptions), \" \"))\nend\nif #cfg.defines > 0 or #cfg.resdefines > 0 then\n_p(4,'PreprocessorDefinitions=\"%s\"', table.concat(premake.esc(table.join(cfg.defines, cfg.resdefines)), \";\"))\nend\nif #cfg.includedirs > 0 or #cfg.resincludedirs > 0 then\nlocal dirs = table.join(cfg.includedirs, cfg.resincludedirs)\n_p(4,'AdditionalIncludeDirectories=\"%s\"', premake.esc(path.translate(table.concat(dirs, \";\"), '\\\\')))\nend\n_p(3,'/>')\nend\nfunction vc200x.VCManifestTool(cfg)\nlocal manifests = { }\nfor _, fname in ipairs(cfg.files) do\nif path.getextension(fname) == \".manifest\" then\ntable.insert(manifests, fname)\nend\nend\n_p(3,' 0 then\n_p(4,'AdditionalManifestFiles=\"%s\"', premake.esc(table.concat(manifests, \";\")))\nend\n_p(3,'/>')\nend\nfunction vc200x.VCMIDLTool(cfg)\n_p(3,'')\nend\nfunction vc200x.buildstepsblock(name, steps)\n_p(3,' 0 then\n_p(4,'CommandLine=\"%s\"', premake.esc(table.implode(steps, \"\", \"\", \"\\r\\n\")))\nend\n_p(3,'/>')\nend\nlocal blockmap =\n{\nVCCLCompilerTool = vc200x.VCCLCompilerTool,\nVCCLCompilerTool_PS3 = vc200x.VCCLCompilerTool_PS3,\nVCLinkerTool = vc200x.VCLinkerTool,\nVCLinkerTool_PS3 = vc200x.VCLinkerTool_PS3,\nVCManifestTool = vc200x.VCManifestTool,\nVCMIDLTool = vc200x.VCMIDLTool,\nVCResourceCompilerTool = vc200x.VCResourceCompilerTool,\n}\nlocal function getsections(version, platform)\nif platform == \"Xbox360\" then\nreturn {\n\"VCPreBuildEventTool\",\n\"VCCustomBuildTool\",\n\"VCXMLDataGeneratorTool\",\n\"VCWebServiceProxyGeneratorTool\",\n\"VCMIDLTool\",\n\"VCCLCompilerTool\",\n\"VCManagedResourceCompilerTool\",\n\"VCResourceCompilerTool\",\n\"VCPreLinkEventTool\",\n\"V" - "CLinkerTool\",\n\"VCALinkTool\",\n\"VCX360ImageTool\",\n\"VCBscMakeTool\",\n\"VCX360DeploymentTool\",\n\"VCPostBuildEventTool\",\n\"DebuggerTool\",\n}\nend\nif platform == \"PS3\" then\nreturn {\n\"VCPreBuildEventTool\",\n\"VCCustomBuildTool\",\n\"VCXMLDataGeneratorTool\",\n\"VCWebServiceProxyGeneratorTool\",\n\"VCMIDLTool\",\n\"VCCLCompilerTool_PS3\",\n\"VCManagedResourceCompilerTool\",\n\"VCResourceCompilerTool\",\n\"VCPreLinkEventTool\",\n\"VCLinkerTool_PS3\",\n\"VCALinkTool\",\n\"VCManifestTool\",\n\"VCXDCMakeTool\",\n\"VCBscMakeTool\",\n\"VCFxCopTool\",\n\"VCAppVerifierTool\",\n\"VCWebDeploymentTool\",\n\"VCPostBuildEventTool\"\n}\nend\nreturn {\n\"VCPreBuildEventTool\",\n\"VCCustomBuildTool\",\n\"VCXMLDataGeneratorTool\",\n\"VCWebServiceProxyGeneratorTool\",\n\"VCMIDLTool\",\n\"VCCLCompilerTool\",\n\"VCManagedResourceCompilerTool\",\n\"VCResourceCompilerTool\",\n\"VCPreLinkEventTool\",\n\"VCLinkerTool\",\n\"VCALinkTool\",\n\"VCManifestTool\",\n\"VCXDCMakeTool\",\n\"VCBscMakeTool\",\n\"VCFxCopTool\",\n\"V" - "CAppVerifierTool\",\n\"VCWebDeploymentTool\",\n\"VCPostBuildEventTool\"\n}\nend\nfunction vc200x.generate(prj)\nvc200x.header('VisualStudioProject')\n_p(1,'Name=\"%s\"', premake.esc(prj.name))\n_p(1,'ProjectGUID=\"{%s}\"', prj.uuid)\n_p(1,'RootNamespace=\"%s\"', prj.name)\n_p(1,'Keyword=\"%s\"', iif(prj.flags.Managed, \"ManagedCProj\", \"Win32Proj\"))\n_p(1,'>')\nvc200x.Platforms(prj)\n_p(1,'')\n_p(1,'')\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nif cfginfo.isreal then\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc200x.Configuration(cfginfo.name, cfg)\nfor _, block in ipairs(getsections(_ACTION, cfginfo.src_platform)) do\nif blockmap[block] then\nblockmap[block](cfg)\nelseif block == \"VCPreBuildEventTool\" then\nvc200x.buildstepsblock(\"VCPreBuildEventTool\", cfg.prebuildcommands)\nelseif block == \"VCPreLinkEventTool\" then\nvc200x.buildstepsblock(\"VCPreLinkEventTool\", cfg.prelinkcommands)\nelseif block =" - "= \"VCPostBuildEventTool\" then\nvc200x.buildstepsblock(\"VCPostBuildEventTool\", cfg.postbuildcommands)\nelseif block == \"VCX360DeploymentTool\" then\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.deploymentoptions), \" \"))\nend\n_p(3,'/>')\nelseif block == \"VCX360ImageTool\" then\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.imageoptions), \" \"))\nend\nif cfg.imagepath ~= nil then\n_p(4,'OutputFileName=\"%s\"', premake.esc(path.translate(cfg.imagepath)))\nend\n_p(3,'/>')\nelseif block == \"DebuggerTool\" then\n_p(3,'')\nelse\n_p(3,'')\nend\nend\n_p(2,'')\nend\nend\n_p(1,'')\n_p(1,'')\n_p(1,'')\n_p(1,'')\nvc200x.Files(prj)\n_p(1,'')\n_p" - "(1,'')\n_p(1,'')\n_p('')\nend\n", + "ction vc200x.VCCLCompilerTool(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s /MP\"', table.concat(premake.esc(cfg.buildoptions), \" \"))\nend\n_p(4,'Optimization=\"%s\"', vc200x.optimization(cfg))\nif cfg.flags.NoFramePointer then\n_p(4,'OmitFramePointers=\"%s\"', bool(true))\nend\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs > 0 then\n_p(4,'AdditionalIncludeDirectories=\"%s\"', premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\nif #cfg.defines > 0 then\n_p(4,'PreprocessorDefinitions=\"%s\"', premake.esc(table.concat(cfg.defines, \";\")))\nend\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild and not cfg.flags.Managed then\n_p(4,'MinimalRebuild=\"%s\"', bool(true))\nend\nif cfg.flags.NoExceptions then\n_p(4,'Except" + "ionHandling=\"0\"')\nelseif cfg.flags.SEH then\n_p(4,'ExceptionHandling=\"2\"')\nend\nif vc200x.optimization(cfg) == 0 and not cfg.flags.Managed then\n_p(4,'BasicRuntimeChecks=\"3\"')\nend\nif vc200x.optimization(cfg) ~= 0 then\n_p(4,'StringPooling=\"%s\"', bool(true))\nend\nlocal runtime\nif premake.config.isdebugbuild(cfg) then\nruntime = iif(cfg.flags.StaticRuntime, 1, 3)\nelse\nruntime = iif(cfg.flags.StaticRuntime, 0, 2)\nend\n_p(4,'RuntimeLibrary=\"%s\"', runtime)\n_p(4,'EnableFunctionLevelLinking=\"%s\"', bool(true))\nif cfg.platform ~= \"Xbox360\" and cfg.platform ~= \"x64\" and cfg.platform ~= \"Durango\" then\nif cfg.flags.EnableSSE then\n_p(4,'EnableEnhancedInstructionSet=\"1\"')\nelseif cfg.flags.EnableSSE2 then\n_p(4,'EnableEnhancedInstructionSet=\"2\"')\nend\nend\nif cfg.flags.FloatFast then\n_p(4,'FloatingPointModel=\"2\"')\nelseif cfg.flags.FloatStrict then\n_p(4,'FloatingPointModel=\"1\"')\nend\nif cfg.flags.NoRTTI and not cfg.flags.Managed then\n_p(4,'RuntimeTypeInfo=\"%s\"', bool(false))\nen" + "d\nif cfg.flags.FastCall then\n_p(4,'CallingConvention=\"1\"')\nelseif cfg.flags.StdCall then\n_p(4,'CallingConvention=\"2\"')\nend\nif cfg.flags.NativeWChar then\n_p(4,'TreatWChar_tAsBuiltInType=\"%s\"', bool(true))\nelseif cfg.flags.NoNativeWChar then\n_p(4,'TreatWChar_tAsBuiltInType=\"%s\"', bool(false))\nend\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(4,'UsePrecompiledHeader=\"2\"')\n_p(4,'PrecompiledHeaderThrough=\"%s\"', cfg.pchheader)\nelse\n_p(4,'UsePrecompiledHeader=\"%s\"', iif(cfg.flags.NoPCH, 0, 2))\nend\nif cfg.flags.ExtraWarnings then\n_p(4,'WarningLevel=\"%s\"', 4)\nelseif cfg.flags.MinimumWarnings then\n_p(4,'WarningLevel=\"%s\"', 1)\nelse\n_p(4,'WarningLevel=\"%s\"', 3)\nend\nif cfg.flags.FatalWarnings then\n_p(4,'WarnAsError=\"%s\"', bool(true))\nend\nif _ACTION < \"vs2008\" and not cfg.flags.Managed then\n_p(4,'Detect64BitPortabilityProblems=\"%s\"', bool(not cfg.flags.No64BitChecks))\nend\n_p(4,'ProgramDataBaseFileName=\"$(OutDir)\\\\%s.pdb\"', path.getbasename(cfg.buildtarget.name))" + "\n_p(4,'DebugInformationFormat=\"%s\"', vc200x.Symbols(cfg))\nif cfg.language == \"C\" then\n_p(4, 'CompileAs=\"1\"')\nend\n_p(3,'/>')\nend\nfunction vc200x.VCLinkerTool(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\n_p(4,'LinkIncremental=\"%s\"',\niif(premake.config.isincrementallink(cfg) , 2, 1))\n_p(4,'AdditionalLibraryDirectories=\"%s\"', table.concat(premake.esc(path.translate(cfg.libdirs, '\\\\')) , \";\"))\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(4,'ModuleDefinitionFile=\"%s\"', " + "deffile)\nend\nif cfg.flags.NoManifest then\n_p(4,'GenerateManifest=\"%s\"', bool(false))\nend\n_p(4,'GenerateDebugInformation=\"%s\"', bool(vc200x.Symbols(cfg) ~= 0))\nif vc200x.Symbols(cfg) ~= 0 then\n_p(4,'ProgramDataBaseFileName=\"$(OutDir)\\\\%s.pdb\"', path.getbasename(cfg.buildtarget.name))\nend\n_p(4,'SubSystem=\"%s\"', iif(cfg.kind == \"ConsoleApp\", 1, 2))\nif vc200x.optimization(cfg) ~= 0 then\n_p(4,'OptimizeReferences=\"2\"')\n_p(4,'EnableCOMDATFolding=\"2\"')\nend\nif (cfg.kind == \"ConsoleApp\" or cfg.kind == \"WindowedApp\") and not cfg.flags.WinMain then\n_p(4,'EntryPointSymbol=\"mainCRTStartup\"')\nend\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(4,'ImportLibrary=\"%s\"', iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\n_p(4,'TargetMachine=\"%d\"', iif(cfg.platform == \"x64\", 17, 1))\nelse\n_p(4,'Name=\"VCLibrarianTool\"')\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(prema" + "ke.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(4,'AdditionalLibraryDirectories=\"%s\"', premake.esc(path.translate(table.concat(cfg.libdirs , \";\"))))\nend\nlocal addlOptions = {}\nif cfg.platform == \"x32\" then\ntable.insert(addlOptions, \"/MACHINE:X86\")\nelseif cfg.platform == \"x64\" then\ntable.insert(addlOptions, \"/MACHINE:X64\")\nend\naddlOptions = table.join(addlOptions, cfg.linkoptions)\nif #addlOptions > 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(addlOptions), \" \"))\nend\nend\n_p(3,'/>')\nend\nfunction vc200x.VCCLCompilerTool_PS3(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalIncludeDirectories=\"%s\"', premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\nif #cfg.defines > 0 then\n_p(4,'PreprocessorDefinitions=\"%s\"', table.concat(premake.esc(cfg.defines), \";\"))\nend\n_p(4,'ProgramDataBaseFileName=\"$(OutDir)\\\\%s.pdb\"', path.getbasename(cfg.buildtarget.name))\n_p(4,'DebugInformationFormat=\"0\"')\n_p(4,'CompileAs=\"0\"')\n_p(3,'/>')\nend\nfunction vc200x.VCLinkerTool_PS3(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', premake.esc(table.concat(buildoptions, \" \")))\nend\nif " + "#cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\n_p(4,'LinkIncremental=\"0\"')\n_p(4,'AdditionalLibraryDirectories=\"%s\"', table.concat(premake.esc(path.translate(cfg.libdirs, '\\\\')) , \";\"))\n_p(4,'GenerateManifest=\"%s\"', bool(false))\n_p(4,'ProgramDatabaseFile=\"\"')\n_p(4,'RandomizedBaseAddress=\"1\"')\n_p(4,'DataExecutionPrevention=\"0\"')\nelse\n_p(4,'Name=\"VCLibrarianTool\"')\nlocal buildoptions = table.join(premake.snc.getldflags(cfg), cfg.linkoptions)\nif #buildoptions > 0 then\n_p(4,'AdditionalOptions=\"%s\"', premake.esc(table.concat(buildoptions, \" \")))\nend\nif #cfg.links > 0 then\n_p(4,'AdditionalDependencies=\"%s\"', table.concat(premake.getlinks(cfg, \"all\", \"fullpath\"), \" \"))\nend\n_p(4,'OutputFile=\"$(OutDir)\\\\%s\"', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(4,'AdditionalLibraryDirectories=\"%s\"', premake.esc(path.translate(" + "table.concat(cfg.libdirs , \";\"))))\nend\nend\n_p(3,'/>')\nend\nfunction vc200x.VCResourceCompilerTool(cfg)\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.resoptions), \" \"))\nend\nif #cfg.defines > 0 or #cfg.resdefines > 0 then\n_p(4,'PreprocessorDefinitions=\"%s\"', table.concat(premake.esc(table.join(cfg.defines, cfg.resdefines)), \";\"))\nend\nlocal includedirs = table.join(cfg.userincludedir, cfg.includedirs, cfg.resincludedirs)\nif #includedirs > 0 then\n_p(4,'AdditionalIncludeDirectories=\"%s\"', premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\n_p(3,'/>')\nend\nfunction vc200x.VCManifestTool(cfg)\nlocal manifests = { }\nfor _, fname in ipairs(cfg.files) do\nif path.getextension(fname) == \".manifest\" then\ntable.insert(manifests, fname)\nend\nend\n_p(3,' 0 then\n_p(4,'AdditionalManifestFiles=\"%s\"', premake.esc(table" + ".concat(manifests, \";\")))\nend\n_p(3,'/>')\nend\nfunction vc200x.VCMIDLTool(cfg)\n_p(3,'')\nend\nfunction vc200x.buildstepsblock(name, steps)\n_p(3,' 0 then\n_p(4,'CommandLine=\"%s\"', premake.esc(table.implode(steps, \"\", \"\", \"\\r\\n\")))\nend\n_p(3,'/>')\nend\nlocal blockmap =\n{\nVCCLCompilerTool = vc200x.VCCLCompilerTool,\nVCCLCompilerTool_PS3 = vc200x.VCCLCompilerTool_PS3,\nVCLinkerTool = vc200x.VCLinkerTool,\nVCLinkerTool_PS3 = vc200x.VCLinkerTool_PS3,\nVCManifestTool = vc200x.VCManifestTool,\nVCMIDLTool = vc200x.VCMIDLTool,\nVCResourceCompilerTool = vc200x.VCResourceCompilerTool,\n}\nlocal function getsections(version, platform)\nif platform == \"Xbox360\" then\nreturn {\n\"VCPreBuildEventTool\",\n\"VCCustomBuildTool\",\n\"VCXMLDataGeneratorTool\",\n\"VCWebServiceProxyGeneratorTool\",\n\"VCMID" + "LTool\",\n\"VCCLCompilerTool\",\n\"VCManagedResourceCompilerTool\",\n\"VCResourceCompilerTool\",\n\"VCPreLinkEventTool\",\n\"VCLinkerTool\",\n\"VCALinkTool\",\n\"VCX360ImageTool\",\n\"VCBscMakeTool\",\n\"VCX360DeploymentTool\",\n\"VCPostBuildEventTool\",\n\"DebuggerTool\",\n}\nend\nif platform == \"PS3\" then\nreturn {\n\"VCPreBuildEventTool\",\n\"VCCustomBuildTool\",\n\"VCXMLDataGeneratorTool\",\n\"VCWebServiceProxyGeneratorTool\",\n\"VCMIDLTool\",\n\"VCCLCompilerTool_PS3\",\n\"VCManagedResourceCompilerTool\",\n\"VCResourceCompilerTool\",\n\"VCPreLinkEventTool\",\n\"VCLinkerTool_PS3\",\n\"VCALinkTool\",\n\"VCManifestTool\",\n\"VCXDCMakeTool\",\n\"VCBscMakeTool\",\n\"VCFxCopTool\",\n\"VCAppVerifierTool\",\n\"VCWebDeploymentTool\",\n\"VCPostBuildEventTool\"\n}\nend\nreturn {\n\"VCPreBuildEventTool\",\n\"VCCustomBuildTool\",\n\"VCXMLDataGeneratorTool\",\n\"VCWebServiceProxyGeneratorTool\",\n\"VCMIDLTool\",\n\"VCCLCompilerTool\",\n\"VCManagedResourceCompilerTool\",\n\"VCResourceCompilerTool\",\n\"VCPreLinkEventTo" + "ol\",\n\"VCLinkerTool\",\n\"VCALinkTool\",\n\"VCManifestTool\",\n\"VCXDCMakeTool\",\n\"VCBscMakeTool\",\n\"VCFxCopTool\",\n\"VCAppVerifierTool\",\n\"VCWebDeploymentTool\",\n\"VCPostBuildEventTool\"\n}\nend\nfunction vc200x.generate(prj)\nvc200x.header('VisualStudioProject')\n_p(1,'Name=\"%s\"', premake.esc(prj.name))\n_p(1,'ProjectGUID=\"{%s}\"', prj.uuid)\n_p(1,'RootNamespace=\"%s\"', prj.name)\n_p(1,'Keyword=\"%s\"', iif(prj.flags.Managed, \"ManagedCProj\", \"Win32Proj\"))\n_p(1,'>')\nvc200x.Platforms(prj)\n_p(1,'')\n_p(1,'')\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nif cfginfo.isreal then\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc200x.Configuration(cfginfo.name, cfg)\nfor _, block in ipairs(getsections(_ACTION, cfginfo.src_platform)) do\nif blockmap[block] then\nblockmap[block](cfg)\nelseif block == \"VCPreBuildEventTool\" then\nvc200x.buildstepsblock(\"VCPreBuildEventTool\", cfg.prebuildcommands)\nel" + "seif block == \"VCPreLinkEventTool\" then\nvc200x.buildstepsblock(\"VCPreLinkEventTool\", cfg.prelinkcommands)\nelseif block == \"VCPostBuildEventTool\" then\nvc200x.buildstepsblock(\"VCPostBuildEventTool\", cfg.postbuildcommands)\nelseif block == \"VCX360DeploymentTool\" then\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.deploymentoptions), \" \"))\nend\n_p(3,'/>')\nelseif block == \"VCX360ImageTool\" then\n_p(3,' 0 then\n_p(4,'AdditionalOptions=\"%s\"', table.concat(premake.esc(cfg.imageoptions), \" \"))\nend\nif cfg.imagepath ~= nil then\n_p(4,'OutputFileName=\"%s\"', premake.esc(path.translate(cfg.imagepath)))\nend\n_p(3,'/>')\nelseif block == \"DebuggerTool\" then\n_p(3,'')\nelse\n_p(3,'')\nend\nend\n_p(2,'')\nend\nend\n_p" + "(1,'')\n_p(1,'')\n_p(1,'')\n_p(1,'')\nvc200x.Files(prj)\n_p(1,'')\n_p(1,'')\n_p(1,'')\n_p('')\nend\n", /* actions/vstudio/vs200x_vcproj_user.lua */ - "local vc200x = premake.vstudio.vc200x\nfunction vc200x.generate_user(prj)\nvc200x.header('VisualStudioUserFile')\n_p(1,'ShowAllFiles=\"false\"')\n_p(1,'>')\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nif cfginfo.isreal then\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(2,'')\nvc200x.debugdir(cfg)\n_p(2,'')\nend\nend\n_p(1,'')\n_p('')\nend\nfunction vc200x.environmentargs(cfg)\nif cfg.environmentargs and #cfg.environmentargs > 0 then\n_p(4,'Environment=\"%s\"', string.gsub(table.concat(cfg.environmentargs, \" \"),'\"','"'))\nif cfg.flags.EnvironmentArgsDontMerge then\n_p(4,'EnvironmentMerge=\"false\"')\nend\nend\nend\nfunction vc200x.debugdir(cfg)\n_p(3,' 0 then\n_p(4,'CommandArguments=\"%s\"', table.concat(cfg.debugargs, \" \"))\nend\nvc200x.environmentargs(cfg)\n_p(3,'/>')\nend\n", + "local vc200x = premake.vstudio.vc200x\nfunction vc200x.generate_user(prj)\nvc200x.header('VisualStudioUserFile')\n_p(1,'ShowAllFiles=\"false\"')\n_p(1,'>')\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nif cfginfo.isreal then\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(2,'')\nvc200x.debugdir(cfg)\n_p(2,'')\nend\nend\n_p(1,'')\n_p('')\nend\nfunction vc200x.environmentargs(cfg)\nif cfg.environmentargs and #cfg.environmentargs > 0 then\n_p(4,'Environment=\"%s\"', string.gsub(table.concat(cfg.environmentargs, \" \"),'\"','"'))\nif cfg.flags.EnvironmentArgsDontMerge then\n_p(4,'EnvironmentMerge=\"false\"')\nend\nend\nend\nfunction vc200x.debugdir(cfg)\n_p(3,' 0 then\n_" + "p(4,'CommandArguments=\"%s\"', table.concat(cfg.debugargs, \" \"))\nend\nvc200x.environmentargs(cfg)\n_p(3,'/>')\nend\n", /* actions/vstudio/vs2005_solution.lua */ "premake.vstudio.sln2005 = { }\nlocal vstudio = premake.vstudio\nlocal sln2005 = premake.vstudio.sln2005\nfunction sln2005.generate(sln)\nio.eol = '\\r\\n'\nsln.vstudio_configs = premake.vstudio.buildconfigs(sln)\n_p('\\239\\187\\191')\nsln2005.reorderProjects(sln)\nsln2005.header(sln)\nfor grp in premake.solution.eachgroup(sln) do\nsln2005.group(grp)\nend\nfor prj in premake.solution.eachproject(sln) do\nsln2005.project(prj)\nend\n_p('Global')\nsln2005.platforms(sln)\nsln2005.project_platforms(sln)\nsln2005.properties(sln)\nsln2005.project_groups(sln)\n_p('EndGlobal')\nend\nfunction sln2005.reorderProjects(sln)\nif sln.startproject then\nfor i, prj in ipairs(sln.projects) do\nif sln.startproject == prj.name then\nlocal cur = prj.group\nwhile cur ~= nil do\nfor j, group in ipairs(sln.groups) do\nif group == cur then\ntable.remove(sln.groups, j)\nbreak\nend\nend\ntable.insert(sln.groups, 1, cur)\ncur = cur.parent\nend\ntable.remove(sln.projects, i)\ntable.insert(sln.projects, 1, prj)\nbreak\nend\nend\nend\nend\n" @@ -290,40 +307,42 @@ const char* builtin_scripts[] = { "premake.vstudio.vc2010 = { }\nlocal vc2010 = premake.vstudio.vc2010\nlocal vstudio = premake.vstudio\nlocal function vs2010_config(prj)\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\n_p(2,'', premake.esc(cfginfo.name))\n_p(3,'%s',cfginfo.buildcfg)\n_p(3,'%s',cfginfo.platform)\n_p(2,'')\nend\n_p(1,'')\nend\nlocal function vs2010_globals(prj)\nlocal action = premake.action.current()\n_p(1,'')\n_p(2, '{%s}',prj.uuid)\n_p(2, '%s',prj.name)\nif vstudio.storeapp ~= \"durango\" then\nlocal windowsTargetPlatformVersion = prj.windowstargetplatformversion or action.vstudio.windowsTargetPlatformVersion\nif windowsTargetPlatformVersion ~= nil then\n_p(2,'%s',windowsTargetPlatformVersion" ")\nif windowsTargetPlatformVersion and string.startswith(windowsTargetPlatformVersion, \"10.\") then\n_p(2,'%s', prj.windowstargetplatformminversion or \"10.0.10240.0\")\nend\nend\nend\nif prj.flags and prj.flags.Managed then\n_p(2, 'v4.0')\n_p(2, 'ManagedCProj')\nelseif vstudio.iswinrt() then\n_p(2, 'en-US')\nif vstudio.storeapp == \"durango\" then\n_p(2, 'Win32Proj')\n_p(2, 'title')\n_p(2, '14.0')\n_p(2, 'Native')\nelse\n_p(2, 'true')\n_p(2, '12.0')\nif vstudio.toolset == \"v120_wp81\" then\n_p(2, 'Windows Phone')\nelse\n_p(2, 'Win" "dows Store')\nend\n_p(2, '%s', vstudio.storeapp)\nend\nelse\n_p(2, 'Win32Proj')\nend\n_p(1,'')\nend\nfunction vc2010.config_type(config)\nlocal t =\n{\nSharedLib = \"DynamicLibrary\",\nStaticLib = \"StaticLibrary\",\nConsoleApp = \"Application\",\nWindowedApp = \"Application\"\n}\nreturn t[config.kind]\nend\nlocal function if_config_and_platform()\nreturn 'Condition=\"\\'$(Configuration)|$(Platform)\\'==\\'%s\\'\"'\nend\nlocal function optimisation(cfg)\nlocal result = \"Disabled\"\nfor _, value in ipairs(cfg.flags) do\nif (value == \"Optimize\") then\nresult = \"Full\"\nelseif (value == \"OptimizeSize\") then\nresult = \"MinSpace\"\nelseif (value == \"OptimizeSpeed\") then\nresult = \"MaxSpeed\"\nend\nend\nreturn result\nend\nfunction vc2010.configurationPropertyGroup(cfg, cfginfo)\n_p(1,''\n, premake.esc(cfginfo.name))\n_p(2,'%s',vc2010.config_type(cfg))\n_p(2,'%s', iif(optimisation(cfg) == \"Disabled\",\"true\",\"false\"))\n_p(2,'%s', premake.vstudio.toolset)\nif cfg.flags.MFC then\n_p(2,'%s', iif(cfg.flags.StaticRuntime, \"Static\", \"Dynamic\"))\nend\nif cfg.flags.ATL or cfg.flags.StaticATL then\n_p(2,'%s', iif(cfg.flags.StaticATL, \"Static\", \"Dynamic\"))\nend\nif cfg.flags.Managed then\n_p(2,'true')\nend\n_p(1,'')\nend\nlocal function import_props(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,''\n,premake.esc(cfginfo.name))\n_p(2,'')\n_p(1,'')\nend\nend\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nfunction vc2010.outputProperties(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nlocal target = cfg.buildtarget\nlocal outdir = add_trailing_backslash(target.directory)\nlocal intdir = add_trailing_backslash(cfg.objectsdir)\n_p(1,'', premake.esc(cfginfo.name))\n_p(2,'%s', premake.esc(outdir))\nif cfg.platform == \"Xbox360\" then\n_p(2,'$(OutDir)%s', premake.esc(target.name))\nend\n_p(2,'%s', premake.esc(intdir))\n_p(2,'%s', premake.esc(path.getbasename(target.name)))\n_p(2,'%s', premake.esc(path.getextension(target.name)))\nif cfg.kind == \"Sha" - "redLib\" then\nlocal ignore = (cfg.flags.NoImportLib ~= nil)\n_p(2,'%s', tostring(ignore))\nend\nif cfg.platform == \"Durango\" then\n_p(2, '$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)')\n_p(2, '$(Console_SdkLibPath)')\n_p(2, '$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)')\n_p(2, '$(Console_SdkIncludeRoot)')\n_p(2, '$(Console_SdkRoot)bin;$(VCInstallDir)bin\\\\x86_amd64;$(VCInstallDir)bin;$(WindowsSDK_ExecutablePath_x86);$(VSInstallDir)Common7\\\\Tools\\\\bin;$(VSInstallDir)Common7\\\\tools;$(VSInstallDir)Common7\\\\ide;$(ProgramFiles)\\\\HTML Help Workshop;$(MSBuildToolsPath32);$(FxCopDir);$(PATH);')\n_p(2, '%s', prj.name)\n_p(2, '*.pdb;*.ilk;*.exp;*.lib;*.winmd;*.appxrecipe;*.pri;*.idb')\n_p(2, 'true<" - "/IsolateConfigurationsOnDeploy>')\nend\nif cfg.kind ~= \"StaticLib\" then\n_p(2,'%s', tostring(premake.config.isincrementallink(cfg)))\nend\nif cfg.flags.NoManifest then\n_p(2,'false')\nend\n_p(1,'')\nend\nend\nlocal function runtime(cfg)\nlocal runtime\nlocal flags = cfg.flags\nif premake.config.isdebugbuild(cfg) then\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreadedDebug\", \"MultiThreadedDebugDLL\")\nelse\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreaded\", \"MultiThreadedDLL\")\nend\nreturn runtime\nend\nlocal function precompiled_header(cfg)\n if not cfg.flags.NoPCH and cfg.pchheader then\n_p(3,'Use')\n_p(3,'%s', cfg.pchheader)\nelse\n_p(3,'')\nend\nend\nlocal function preprocessor(indent,cfg)\nif #cfg.defines > 0 then\n_p(indent,'%s;%%(PreprocessorDefinitions)'\n,premake.esc(table.concat(cfg.defines, \";\")))\nelse\n_p(indent,'')\nend\nend\nlocal function include_dirs(indent,cfg)\nif #cfg.includedirs > 0 then\n_p(indent,'%s;%%(AdditionalIncludeDirectories)'\n,premake.esc(path.translate(table.concat(cfg.includedirs, \";\"), '\\\\')))\nend\nend\nlocal function resource_compile(cfg)\n_p(2,'')\npreprocessor(3,cfg)\ninclude_dirs(3,cfg)\n_p(2,'')\nend\nlocal function exceptions(cfg)\nif cfg.flags.NoExceptions then\n_p(3, 'false')\nelseif cfg.flags.SEH then\n_p(3, 'Async')\nend\nend\nlocal function rtti(cfg)\nif cfg.flags.NoRTTI and not cfg.flags.Managed then\n_p(3,'false')\nend\nend\nlocal function calling_convention(cfg)\nif cfg.flags.FastCall then" - "\n_p(3,'FastCall')\nelseif cfg.flags.StdCall then\n_p(3,'StdCall')\nend\nend\nlocal function wchar_t_builtin(cfg)\nif cfg.flags.NativeWChar then\n_p(3,'true')\nelseif cfg.flags.NoNativeWChar then\n_p(3,'false')\nend\nend\nlocal function sse(cfg)\nif cfg.flags.EnableSSE then\n_p(3, 'StreamingSIMDExtensions')\nelseif cfg.flags.EnableSSE2 then\n_p(3, 'StreamingSIMDExtensions2')\nelseif cfg.flags.EnableAVX then\n_p(3, 'AdvancedVectorExtensions')\nelseif cfg.flags.EnableAVX2 then\n_p(3, 'AdvancedVectorExtensions2')\nend\nend\nlocal function floating_point(cfg)\n if cfg.flags.FloatFast th" - "en\n_p(3,'Fast')\nelseif cfg.flags.FloatStrict and not cfg.flags.Managed then\n_p(3,'Strict')\nend\nend\nlocal function debug_info(cfg)\nlocal debug_info = ''\nif cfg.flags.Symbols then\nif (action.vstudio.supports64bitEditContinue == false and cfg.platform == \"x64\")\nor cfg.flags.Managed\nor premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue\nthen\ndebug_info = \"ProgramDatabase\"\nelse\ndebug_info = \"EditAndContinue\"\nend\nend\n_p(3,'%s',debug_info)\nend\nlocal function minimal_build(cfg)\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild then\n_p(3,'true')\nelse\n_p(3,'false')\nend\nend\nlocal function compile_language(cfg)\nif cfg.options.ForceCPP then\n_p(3,'CompileAsCpp')\nelse\nif cfg.language == \"C\" then\n_p(3,'CompileAsC')\nend\nend\nend\nlocal function forcedinclude_files(indent,cfg)\nif #cfg.forcedincludes > 0 then\n_p(indent,'%s'\n,premake.esc(path.translate(table.concat(cfg.forcedincludes, \";\"), '\\\\')))\nend\nend\nlocal function vs10_clcompile(cfg)\n_p(2,'')\n_p(3,'%s %s%%(AdditionalOptions)'\n, table.concat(premake.esc(cfg.buildoptions), \" \")\n, iif(cfg.flags.UnsignedChar, \"/J \", \" \")\n)\n_p(3,'%s',optimisation(cfg))\ninclude_dirs(3, cfg)\npreprocessor(3, cfg)\nminimal_build(cfg)\nif not premake.config.isoptimizedbuild(cfg.flags) then\nif not cfg.flags.Managed then\n_p(3,'EnableFastChecks')\nend\nif cfg.flags.ExtraWarnings then\nend\nelse\n_p(3,'true')\nend\nif cfg.platform == \"Durango\" or cfg.flags.NoWinRT then\n_p(3, 'false')\nend\nif cfg.platform ~= \"Durango\" then\n_p(3,'%s', runtime(cfg))\nend\nif cfg.flags.NoBufferSecurityCheck then\n_p(3,'false')\nend\n_p(3,'true')\nif not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then\n_p(3,'true')\nelse\n_p(3,'false')\nend\nprecompiled_header(cfg)\nif cfg.flags.ExtraWarnings then\n_p(3,'Level4')\nelseif cfg.flags.MinimumWarnings then\n_p(3,'Level1')\nelse\n_p(3,'Level3')\nend\nif cfg.flags.FatalWarnings then\n_p(3,'true')\nend\nexceptions(cfg)\nrtti(cfg)\ncalling_convention(cfg)\nwchar_t_builtin(cfg)\nsse(cfg)\nfloating_point(cfg)\ndebug_info(cfg)\nif cfg.flags.Symbols then\n_p(3,'$(OutDir)%s.pdb'\n, pa" - "th.getbasename(cfg.buildtarget.name))\nend\nif cfg.flags.NoFramePointer then\n_p(3,'true')\nend\ncompile_language(cfg)\nforcedinclude_files(3,cfg);\n_p(2,'')\nend\nlocal function event_hooks(cfg)\nif #cfg.postbuildcommands> 0 then\n _p(2,'')\n_p(3,'%s',premake.esc(table.implode(cfg.postbuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'')\nend\nif #cfg.prebuildcommands> 0 then\n _p(2,'')\n_p(3,'%s',premake.esc(table.implode(cfg.prebuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'')\nend\nif #cfg.prelinkcommands> 0 then\n _p(2,'')\n_p(3,'%s',premake.esc(table.implode(cfg.prelinkcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'')\nend\nend\nlocal function additional_options(indent,cfg)\nif #cfg.linkoptions > 0 then\n_p(indent,'%s %%(AdditionalOptions)',\ntable.concat(premake.es" - "c(cfg.linkoptions), \" \"))\nend\nend\nlocal function link_target_machine(index,cfg)\nlocal platforms = {x32 = 'MachineX86', x64 = 'MachineX64'}\nif platforms[cfg.platform] then\n_p(index,'%s', platforms[cfg.platform])\nend\nend\nlocal function item_def_lib(cfg)\n -- The Xbox360 project files are stored in another place in the project file.\nif cfg.kind == 'StaticLib' and cfg.platform ~= \"Xbox360\" then\n_p(1,'')\n_p(2,'$(OutDir)%s',cfg.buildtarget.name)\nadditional_options(2,cfg)\nlink_target_machine(2,cfg)\n_p(1,'')\nend\nend\nlocal function import_lib(cfg)\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(3,'%s',iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\nend\nfunction vc2010.link(cfg)\n_p(2,'')\n_p(3,'%s', iif(cfg.kind == \"ConsoleApp\", \"Console\", \"Windows\"))\n_p(3,'%s', tostring(cfg.flags.Symbols ~= nil))\nif premake.config.isoptimizedbuild(cfg.flags) then\n_p(3,'true')\n_p(3,'true')\nend\nif cfg.kind ~= 'StaticLib' then\nvc2010.additionalDependencies(cfg)\n_p(3,'$(OutDir)%s', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(3,'%s;%%(AdditionalLibraryDirectories)'\n, premake.esc(path.translate(table.concat(cfg.libdirs, ';'), '\\\\'))\n)\nend\nif vc2010.config_type(cfg) == 'Application' and not cfg.flags.WinMain and not cfg.flags.Managed then\nif cfg.flags.Unicode then\n_p(3,'wmainCRTStartup')\nelse\n_p(3,'mainCRTStartup')\nend\nend\nimport_lib(cfg)\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(3,'%s', deffile)\nend\nlink_t" - "arget_machine(3,cfg)\nadditional_options(3,cfg)\n if cfg.flags.NoWinMD and vstudio.iswinrt() and prj.kind == \"WindowedApp\" then\n_p(3,'false' )\n end\nend\n_p(2,'')\nend\nfunction vc2010.additionalDependencies(cfg)\nlocal links = premake.getlinks(cfg, \"system\", \"fullpath\")\nif #links > 0 then\n_p(3,'%s;%s'\n, table.concat(links, \";\")\n, iif(cfg.platform == \"Durango\"\n, '$(XboxExtensionsDependencies)'\n, '%(AdditionalDependencies)'\n)\n)\nend\nend\nlocal function item_definitions(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,''\n,premake.esc(cfginfo.name))\nvs10_clcompile(cfg)\nresource_compile(cfg)\nitem_def_lib(cfg)\nvc2010.link(cfg)\nevent_hooks(cfg)\n_p(1,'')\nend\nend\nfunction vc2010.getfileg" - "roup(prj, group)\nlocal sortedfiles = prj.vc2010sortedfiles\nif not sortedfiles then\nsortedfiles = {\nClCompile = {},\nClInclude = {},\nNone = {},\nResourceCompile = {},\nAppxManifest = {},\nImage = {},\nDeploymentContent = {}\n}\nlocal foundAppxManifest = false\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFileVS(file.name) then\ntable.insert(sortedfiles.ClCompile, file)\nelseif path.iscppheader(file.name) then\nif not table.icontains(prj.removefiles, file) then\ntable.insert(sortedfiles.ClInclude, file)\nend\nelseif path.isresourcefile(file.name) then\ntable.insert(sortedfiles.ResourceCompile, file)\nelseif path.isappxmanifest(file.name) then\nfoundAppxManifest = true\ntable.insert(sortedfiles.AppxManifest, file)\nelseif file.flags and table.icontains(file.flags, \"DeploymentContent\") then\ntable.insert(sortedfiles.DeploymentContent, file)\nelse\ntable.insert(sortedfiles.None, file)\nend\nend\nif vstudio.iswinrt() and prj.kind == \"WindowedApp\" and not foundAppxManifest then\nvstudio.need" - "AppxManifest = true\nlocal fcfg = {}\nfcfg.name = prj.name .. \"/Package.appxmanifest\"\nfcfg.vpath = premake.project.getvpath(prj, fcfg.name)\ntable.insert(sortedfiles.AppxManifest, fcfg)\nlocal logo = {}\nlogo.name = prj.name .. \"/Logo.png\"\nlogo.vpath = logo.name\ntable.insert(sortedfiles.Image, logo)\nlocal smallLogo = {}\nsmallLogo.name = prj.name .. \"/SmallLogo.png\"\nsmallLogo.vpath = smallLogo.name\ntable.insert(sortedfiles.Image, smallLogo)\nlocal storeLogo = {}\nstoreLogo.name = prj.name .. \"/StoreLogo.png\"\nstoreLogo.vpath = storeLogo.name\ntable.insert(sortedfiles.Image, storeLogo)\nlocal splashScreen = {}\nsplashScreen.name = prj.name .. \"/SplashScreen.png\"\nsplashScreen.vpath = splashScreen.name\ntable.insert(sortedfiles.Image, splashScreen)\nend\nprj.vc2010sortedfiles = sortedfiles\nend\nreturn sortedfiles[group]\nend\nfunction vc2010.files(prj)\nvc2010.simplefilesgroup(prj, \"ClInclude\")\nvc2010.compilerfilesgroup(prj)\nvc2010.simplefilesgroup(prj, \"None\")\nvc2010.customtaskgroup(" - "prj)\nvc2010.simplefilesgroup(prj, \"ResourceCompile\")\nvc2010.simplefilesgroup(prj, \"AppxManifest\")\nvc2010.deploymentcontentgroup(prj, \"Image\")\nvc2010.deploymentcontentgroup(prj, \"DeploymentContent\", \"None\")\nend\nfunction vc2010.customtaskgroup(prj)\nlocal files = { }\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path.getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend\nend\nif #files > 0 then\n_p(1,'')\nlocal groupedBuildTasks = {}\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nif (groupedBuildTasks[buildtask[1]] == nil) then\ngroupedBuildTasks[buildtask[1]] = {}\nend\ntable.insert(groupedBuildTasks[buildtask[1]], buildtask)\nend\nend\nfor name, custombuildtask in pairs(groupedBuildTasks or {}) do\n_p(2,'', path.translate(pa" - "th.getrelative(prj.location,name), \"\\\\\"))\n_p(3,'Text')\nlocal cmd = \"\"\nlocal outputs = \"\"\nfor _, buildtask in ipairs(custombuildtask or {}) do\nfor _, cmdline in ipairs(buildtask[4] or {}) do\ncmd = cmd .. cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[1])))\ncmd = string.gsub(cmd, \"%$%(@%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[2])))\ncmd = cmd .. \"\\r\\n\"\nend\noutputs = outputs .. path.getrelative(prj.location,buildtask[2]) .. \";\"\nend\n_p(3,'%s',cmd)\n_p(3,'%s%%(Outputs)',outputs)\n_p(3,'Designer')\n_p(3,'')\n_p(2,'')\nend\n_p(1,'')\nend\nend\nfunction vc2010.simplefilesgroup(prj, section, sub" - "type)\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'')\nfor _, file in ipairs(files) do\nif subtype then\n_p(2,'<%s Include=\\\"%s\\\">', section, path.translate(file.name, \"\\\\\"))\n_p(3,'%s', subtype)\n_p(2,'', section)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', section, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'')\nend\nend\nfunction vc2010.deploymentcontentgroup(prj, section, filetype)\nif filetype == nil then\nfiletype = section\nend\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'')\nfor _, file in ipairs(files) do\n_p(2,'<%s Include=\\\"%s\\\">', filetype, path.translate(file.name, \"\\\\\"))\n_p(3,'true')\n_p(3,'%s', path.translate(file.vpath, \"\\\\\"))\n_p(2,'', filetype)\nend\n_p(1,'')\nend\nend\nfunction vc2010.compilerfilesgroup(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.g" - "etfilegroup(prj, \"ClCompile\")\nif #files > 0 then\nlocal config_mappings = {}\nfor _, cfginfo in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nif cfg.pchheader and cfg.pchsource and not cfg.flags.NoPCH then\nconfig_mappings[cfginfo] = path.translate(cfg.pchsource, \"\\\\\")\nend\nend\n_p(1,'')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '', translatedpath)\n_p(3, '$(IntDir)%s\\\\'\n, premake.esc(path.translate(path.trimdots(path.getdirectory(file.name))))\n)\nif path.iscxfile(file.name) then\n_p(3, 'true')\n_p(3, 'true')\n_p(3, 'NotUsing')\nend\nif vstudio.iswinrt() and string.len(file.name) > 2 and string.sub(file.name, -2) == \".c\" then\n_p(3,'FALSE')\nend\nfor _, cfginfo in ipairs(conf" - "igs) do\nif config_mappings[cfginfo] and translatedpath == config_mappings[cfginfo] then\n_p(3,'Create', premake.esc(cfginfo.name))\nconfig_mappings[cfginfo] = nil --only one source file per pch\nend\nend\nlocal nopch = table.icontains(prj.nopch, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif nopch or table.icontains(cfg.nopch, file.name) then\n_p(3,'NotUsing', premake.esc(vsconfig.name))\nend\nend\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif excluded or table.icontains(cfg.excludes, file.name) then\n_p(3, 'true'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2,'')\nend\n_p(1,'')\nend\nend\nfunction vc2010.header(targets)\nio.eol = \"\\r\\n\"\n_p('')\nlocal t = \"\"\nif targets then\nt = ' DefaultTargets=\"' .. targets .. '\"'\nend\n_p('', t, action.vstudio.toolsVersion)\nend\nfunction premake.vs2010_vcxproj(prj)\nio.indent = \" \"\nvc2010.header(\"Build\")\nvs2010_config(prj)\nvs2010_globals(prj)\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc2010.configurationPropertyGroup(cfg, cfginfo)\nend\n_p(1,'')\n_p(1,'')\n_p(1,'')\nimport_props(prj)\n_p(1,'')\nvc2010.outputProperties(prj)\nitem_defin" - "itions(prj)\nvc2010.files(prj)\nvc2010.projectReferences(prj)\n_p(1,'')\n_p(1,'')\n_p(1,'')\n_p('')\nend\nfunction vc2010.projectReferences(prj)\nlocal deps = premake.getdependencies(prj)\nif #deps > 0 then\n_p(1,'')\nfor _, dep in ipairs(deps) do\nlocal deppath = path.getrelative(prj.location, vstudio.projectfile(dep))\n_p(2,'', path.translate(deppath, \"\\\\\"))\n_p(3,'{%s}', dep.uuid)\nif vstudio.iswinrt() then\n_p(3,'false')\nend\n_p(2,'')\nend\n_p(1,'')\nend\nend\nfunction vc2010.debugdir(cfg)\nif cfg.debugdir and not vstudio.iswinrt() then\n_p(' %s', path.translate(cfg.debugdir, '\\\\'))\n_p(' WindowsLocalDebugger')\nend\nif cfg.deb" - "ugabsolutedir and not vstudio.iswinrt() then\n_p(' %s', path.translate(cfg.debugabsolutedir, '\\\\'))\n_p(' WindowsLocalDebugger')\nend\nif cfg.debugargs then\n_p(' %s', table.concat(cfg.debugargs, \" \"))\nend\nend\nfunction vc2010.debugenvs(cfg)\nif cfg.debugenvs and #cfg.debugenvs > 0 then\n_p(2,'%s%s',table.concat(cfg.debugenvs, \"\\n\")\n,iif(cfg.flags.DebugEnvsInherit,'\\n$(LocalDebuggerEnvironment)','')\n)\nif cfg.flags.DebugEnvsDontMerge then\n_p(2,'false')\nend\nend\nend\nfunction premake.vs2010_vcxproj_user(prj)\nio.indent = \" \"\nvc2010.header()\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(' ', premake.esc(cfginfo.name))\nvc2010.debugdir(cfg)\nvc2010.debugenvs(cfg)\n_p(' ')\nend\n_p('')\nend\nlocal png1x1data = {\n0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, -- .PNG........IHDR\n0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25, 0xdb, 0x56, -- .............%.V\n0xca, 0x00, 0x00, 0x00, 0x03, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x3d, 0xda, -- .....PLTE....z=.\n0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, -- ....tRNS.@..f...\n0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xe2, -- .IDAT..c`.......\n0x21, 0xbc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, -- !.3....IEND.B`.\n}\nfunction png1x1(obj, filename)\nfilename = premake.project.getfilename(obj, filename)\nlocal f, err = io.open(filename, \"wb\")\nif f then\nfor _, byte" - " in ipairs(png1x1data) do\nf:write(string.char(byte))\nend\nf:close()\nend\nend\nfunction premake.vs2010_appxmanifest(prj)\nio.indent = \" \"\nio.eol = \"\\r\\n\"\n_p('')\nif vstudio.toolset == \"v120_wp81\" then\n_p('')\nelseif vstudio.storeapp == \"8.1\" then\n_p('')\nelseif vstudio.storeapp == \"durango\" then\n_p('')\nelse\n_p('')\nend\n_p(1,'')\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(1,'')\nend\n_p(1, '')\n_p(2, '' .. prj.name .. '')\n_p(2, 'PublisherDisplayName')\n_p(2, '' .. prj.name .. '\\\\StoreLogo.png')\npng1x1(prj, \"%%/StoreLogo.png\")\n_p(2, '' .. prj.name .. '')\n_p(1,'')\nif vstudio.storeapp == \"8.2\" then\n_p(1, '')\n_p(2, '')\n_p(1, '')\nelseif vstudio.storeapp == \"durango\" then" - "\n_p(1, '')\n_p(2, '6.2')\n_p(2, '6.2')\n_p(1, '')\nelse\n_p(1, '')\n_p(2, '6.3.0')\n_p(2, '6.3.0')\n_p(1, '')\nend\n_p(1,'')\n_p(2,'')\n_p(1,'')\n_p(1,'')\n_p(2,'')\nif vstudio.storeapp == \"durango\" then\n_p(3, '')\n_p(5, '')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '')\n_p(3, '')\n_p(4, '')\n_p(4, '')\n_p(4, '')\n_p(3, '')\nelse\n_p(3, '')\n_p(4, '')\nend\n_p(2,'')\n_p(1,'')\n_p('')\nend\n", + "tionType>%s',vc2010.config_type(cfg))\n_p(2,'%s', iif(optimisation(cfg) == \"Disabled\",\"true\",\"false\"))\n_p(2,'%s', premake.vstudio.toolset)\nif cfg.flags.MFC then\n_p(2,'%s', iif(cfg.flags.StaticRuntime, \"Static\", \"Dynamic\"))\nend\nif cfg.flags.ATL or cfg.flags.StaticATL then\n_p(2,'%s', iif(cfg.flags.StaticATL, \"Static\", \"Dynamic\"))\nend\nif cfg.flags.Unicode then\n_p(2,'Unicode')\nend\nif cfg.flags.Managed then\n_p(2,'true')\nend\n_p(1,'')\nend\nlocal function import_props(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,''\n,premake.esc(cfginfo.name))\n_p(2,'')\n_p(1,'')\nend\nend\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nfunction vc2010.outputProperties(prj)\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nlocal target = cfg.buildtarget\nlocal outdir = add_trailing_backslash(target.directory)\nlocal intdir = add_trailing_backslash(cfg.objectsdir)\n_p(1,'', premake.esc(cfginfo.name))\n_p(2,'%s', premake.esc(outdir))\nif cfg.platform == \"Xbox360\" then\n_p(2,'$(OutDir)%s', premake.esc(target.name))\nend\n_p(2,'%s', premake.esc(intdir))\n_p(2,'%s', premake.esc(path.getbasename(target.name)))\n_p(2,'%s', premake.esc(path.getextension(target.name)))\nif cfg.kind == \"SharedLib\" then\nlocal ignore = (cfg.flags.NoImportLib ~= nil)\n_p(2,'%s', tostring(ignore))\nend\nif cfg.platform == \"Durango\" then\n_p(2, '$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)')\n_p(2, '$(Console_SdkLibPath)')\n_p(2, '$(Console_SdkLibPath);$(Console_SdkWindowsMetadataPath)')\n_p(2, '$(Console_SdkIncludeRoot)')\n_p(2, '$(Console_SdkRoot)bin;$(VCInstallDir)bin\\\\x86_amd64;$(VCInstallDir)bin;$(WindowsSDK_ExecutablePath_x86);$(VSInstallDir)Common7\\\\Tools\\\\bin;$(VSInstallDir)Common7\\\\tools;$(VSInstallDir)Common7\\\\ide;$(ProgramFiles)\\\\HTML Help Workshop;$(MSBuildToolsPath32);$(FxCopDir);$(PATH);')\n_p(2, '%s', prj.name)\n_p(2, '*.pdb;*.ilk;*.exp;*.lib;*.winmd;*.appxrecipe;*.pr" + "i;*.idb')\n_p(2, 'true')\nend\nif cfg.kind ~= \"StaticLib\" then\n_p(2,'%s', tostring(premake.config.isincrementallink(cfg)))\nend\nif cfg.flags.NoManifest then\n_p(2,'false')\nend\n_p(1,'')\nend\nend\nlocal function runtime(cfg)\nlocal runtime\nlocal flags = cfg.flags\nif premake.config.isdebugbuild(cfg) then\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreadedDebug\", \"MultiThreadedDebugDLL\")\nelse\nruntime = iif(flags.StaticRuntime and not flags.Managed, \"MultiThreaded\", \"MultiThreadedDLL\")\nend\nreturn runtime\nend\nlocal function precompiled_header(cfg)\n if not cfg.flags.NoPCH and cfg.pchheader then\n_p(3,'Use')\n_p(3,'%s', cfg.pchheader)\nelse\n_p(3,'')\nend\nend\nlocal functio" + "n preprocessor(indent,cfg)\nif #cfg.defines > 0 then\n_p(indent,'%s;%%(PreprocessorDefinitions)'\n,premake.esc(table.concat(cfg.defines, \";\")))\nelse\n_p(indent,'')\nend\nend\nlocal function include_dirs(indent,cfg)\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs> 0 then\n_p(indent,'%s;%%(AdditionalIncludeDirectories)'\n,premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\')))\nend\nend\nlocal function resource_compile(cfg)\n_p(2,'')\npreprocessor(3,cfg)\ninclude_dirs(3,cfg)\n_p(2,'')\nend\nlocal function exceptions(cfg)\nif cfg.flags.NoExceptions then\n_p(3, 'false')\nelseif cfg.flags.SEH then\n_p(3, 'Async')\nend\nend\nlocal function rtti(cfg)\nif cfg.flags.NoRTTI and not cfg.flags.M" + "anaged then\n_p(3,'false')\nend\nend\nlocal function calling_convention(cfg)\nif cfg.flags.FastCall then\n_p(3,'FastCall')\nelseif cfg.flags.StdCall then\n_p(3,'StdCall')\nend\nend\nlocal function wchar_t_builtin(cfg)\nif cfg.flags.NativeWChar then\n_p(3,'true')\nelseif cfg.flags.NoNativeWChar then\n_p(3,'false')\nend\nend\nlocal function sse(cfg)\nif cfg.flags.EnableSSE then\n_p(3, 'StreamingSIMDExtensions')\nelseif cfg.flags.EnableSSE2 then\n_p(3, 'StreamingSIMDExtensions2')\nelseif cfg.flags.EnableAVX then\n_p(3, 'AdvancedVectorExtensions')\nelseif cfg.flags.EnableAVX2 then\n_p(3, 'AdvancedVectorExtensions2')\nend\nend\nlocal function floating_point(cfg)\n if cfg.flags.FloatFast then\n_p(3,'Fast')\nelseif cfg.flags.FloatStrict and not cfg.flags.Managed then\n_p(3,'Strict')\nend\nend\nlocal function debug_info(cfg)\nlocal debug_info = ''\nif cfg.flags.Symbols then\nif cfg.flags.C7DebugInfo then\ndebug_info = \"OldStyle\"\nelseif (action.vstudio.supports64bitEditContinue == false and cfg.platform == \"x64\")\nor cfg.flags.Managed\nor premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue\nthen\ndebug_info = \"ProgramDatabase\"\nelse\ndebug_info = \"EditAndContinue\"\nend\nend\n_p(3,'%s',debug_info)\nend\nlocal function minimal_build(cfg)\nif premake.config.isdebugbuild(cfg) and cfg.flags.EnableMinimalRebuild then\n_p(3,'true')\nelse\n_p(3,'false')\nend\nend\nlocal function compile_language(cfg)\nif cfg.options.ForceCPP then\n_p(3,'CompileAsCpp')\nelse\nif cfg.language == \"C\" then\n_p(3,'CompileAsC')\nend\nend\nend\nlocal function forcedinclude_files(indent,cfg)\nif #cfg.forcedincludes > 0 then\n_p(indent,'%s'\n,premake.esc(path.translate(table.concat(cfg.forcedincludes, \";\"), '\\\\')))\nend\nend\nlocal function vs10_clcompile(cfg)\n_p(2,'')\n_p(3,'%s %s%%(AdditionalOptions)'\n, table.concat(premake.esc(cfg.buildoptions), \" \")\n, iif(cfg.flags.UnsignedChar, \"/J \", \" \")\n)\n_p(3,'%s',optimisation(cfg))\ninclude_dirs(3, cfg)\npreprocessor(3, cfg)\nminimal_build(cfg)\nif not premake.config.isoptimizedbuild(cfg.flags) then\nif not cfg.flags.Managed then\n_p(3,'EnableFastChecks')\nend\nif cfg.flags.ExtraWarnings then\nend\nelse\n_p(3,'<" + "StringPooling>true')\nend\nif cfg.platform == \"Durango\" or cfg.flags.NoWinRT then\n_p(3, 'false')\nend\nif cfg.platform ~= \"Durango\" then\n_p(3,'%s', runtime(cfg))\nend\nif cfg.flags.NoBufferSecurityCheck then\n_p(3,'false')\nend\n_p(3,'true')\nif not cfg.flags.NoMultiProcessorCompilation and not cfg.flags.EnableMinimalRebuild then\n_p(3,'true')\nelse\n_p(3,'false')\nend\nprecompiled_header(cfg)\nif cfg.flags.ExtraWarnings then\n_p(3,'Level4')\nelseif cfg.flags.MinimumWarnings then\n_p(3,'Level1')\nelse\n_p(3,'Level3')\nend\nif cfg.flags.FatalWarnings then\n_p(3,'true')\nend\nexceptions(cfg)\nrtti(cfg)\n" + "calling_convention(cfg)\nwchar_t_builtin(cfg)\nsse(cfg)\nfloating_point(cfg)\ndebug_info(cfg)\nif cfg.flags.Symbols then\n_p(3,'$(OutDir)%s.pdb'\n, path.getbasename(cfg.buildtarget.name))\nend\nif cfg.flags.NoFramePointer then\n_p(3,'true')\nend\nif cfg.flags.UseFullPaths then\n_p(3, 'true')\nend\ncompile_language(cfg)\nforcedinclude_files(3,cfg);\n_p(2,'')\nend\nlocal function event_hooks(cfg)\nif #cfg.postbuildcommands> 0 then\n _p(2,'')\n_p(3,'%s',premake.esc(table.implode(cfg.postbuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'')\nend\nif #cfg.prebuildcommands> 0 then\n _p(2,'')\n_p(3,'%s',premake.esc(table.implode(cfg.prebuildcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'')\nend\nif #cfg.prelinkcommands> 0 then\n _p(2,'')\n_p(3,'%s',prema" + "ke.esc(table.implode(cfg.prelinkcommands, \"\", \"\", \"\\r\\n\")))\n_p(2,'')\nend\nend\nlocal function additional_options(indent,cfg)\nif #cfg.linkoptions > 0 then\n_p(indent,'%s %%(AdditionalOptions)',\ntable.concat(premake.esc(cfg.linkoptions), \" \"))\nend\nend\nlocal function link_target_machine(index,cfg)\nlocal platforms = {x32 = 'MachineX86', x64 = 'MachineX64'}\nif platforms[cfg.platform] then\n_p(index,'%s', platforms[cfg.platform])\nend\nend\nlocal function item_def_lib(cfg)\n -- The Xbox360 project files are stored in another place in the project file.\nif cfg.kind == 'StaticLib' and cfg.platform ~= \"Xbox360\" then\n_p(1,'')\n_p(2,'$(OutDir)%s',cfg.buildtarget.name)\nadditional_options(2,cfg)\nlink_target_machine(2,cfg)\n_p(1,'')\nend\nend\nlocal function import_lib(cfg)\nif cfg.kind == \"SharedLib\" then\nlocal implibname = cfg.linktarget.fullpath\n_p(3,'%s" + "',iif(cfg.flags.NoImportLib, cfg.objectsdir .. \"\\\\\" .. path.getname(implibname), implibname))\nend\nend\nlocal function hasmasmfiles(prj)\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nreturn #files > 0\nend\nlocal function vs10_masm(prj, cfg)\nif hasmasmfiles(prj) then\n_p(2, '')\nlocal includedirs = table.join(cfg.userincludedirs, cfg.includedirs)\nif #includedirs > 0 then\n_p(3, '%s;%%(IncludePaths)'\n, premake.esc(path.translate(table.concat(includedirs, \";\"), '\\\\'))\n)\nend\nlocal defines = table.join(cfg.defines)\ntable.insertflat(defines, iif(premake.config.isdebugbuild(cfg), \"_DEBUG\", {}))\ntable.insert(defines, iif(cfg.platform == \"x64\", \"_WIN64\", \"_WIN32\"))\ntable.insert(defines, iif(prj.kind == \"SharedLib\", \"_EXPORT=EXPORT\", \"_EXPORT=\"))\n_p(3, '%s;%%(PreprocessorDefinitions)'\n, premake.esc(table.concat(defines, \";\"))\n)\nif cfg.flags.FatalWarnings then\n_p(3,'true')\nend\nif cfg.flags.MinimumWarnings then\n_p(3,'0')\nelse\n_p(3,'3')\nend\n_p(2, '')\nend\nend\nfunction vc2010.link(cfg)\n_p(2,'')\n_p(3,'%s', iif(cfg.kind == \"ConsoleApp\", \"Console\", \"Windows\"))\n_p(3,'%s', tostring(cfg.flags.Symbols ~= nil))\nif premake.config.isoptimizedbuild(cfg.flags) then\n_p(3,'true')\n_p(3,'true')\nend\nif cfg.kind ~= 'StaticLib' then\nvc2010.additionalDependencies(3,cfg)\n_p(3,'$(OutDir)%s', cfg.buildtarget.name)\nif #cfg.libdirs > 0 then\n_p(3,'%s;%%(AdditionalLibraryDirectories)'\n, premake.esc(path.translate(table.concat(cfg.libdirs, ';'), '\\\\'))\n)\nend\nif vc2010.config_type(cfg) == 'Application' and not cfg.flags.Win" + "Main and not cfg.flags.Managed then\nif cfg.flags.Unicode then\n_p(3,'wmainCRTStartup')\nelse\n_p(3,'mainCRTStartup')\nend\nend\nimport_lib(cfg)\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\n_p(3,'%s', deffile)\nend\nlink_target_machine(3,cfg)\nadditional_options(3,cfg)\n if cfg.flags.NoWinMD and vstudio.iswinrt() and prj.kind == \"WindowedApp\" then\n_p(3,'false' )\n end\nend\n_p(2,'')\nend\nfunction vc2010.additionalDependencies(tab,cfg)\nlocal links = premake.getlinks(cfg, \"system\", \"fullpath\")\nif #links > 0 then\n_p(tab,'%s;%s'\n, table.concat(links, \";\")\n, iif(cfg.platform == \"Durango\"\n, '$(XboxExtensionsDependencies)'\n, '%(AdditionalDependencies)'\n)\n)\nend\nend\nlocal function item_definitions(prj)\nfor _, cfginfo in ipairs(pr" + "j.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(1,''\n,premake.esc(cfginfo.name))\nvs10_clcompile(cfg)\nresource_compile(cfg)\nitem_def_lib(cfg)\nvc2010.link(cfg)\nevent_hooks(cfg)\nvs10_masm(prj, cfg)\n_p(1,'')\nend\nend\nfunction vc2010.getfilegroup(prj, group)\nlocal sortedfiles = prj.vc2010sortedfiles\nif not sortedfiles then\nsortedfiles = {\nClCompile = {},\nClInclude = {},\nMASM = {},\nNone = {},\nResourceCompile = {},\nAppxManifest = {},\nImage = {},\nDeploymentContent = {}\n}\nlocal foundAppxManifest = false\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFileVS(file.name) then\ntable.insert(sortedfiles.ClCompile, file)\nelseif path.iscppheader(file.name) then\nif not table.icontains(prj.removefiles, file) then\ntable.insert(sortedfiles.ClInclude, file)\nend\nelseif path.isresourcefile(file.name) then\ntable.insert(sortedfiles.ResourceCompile, fi" + "le)\nelseif path.isappxmanifest(file.name) then\nfoundAppxManifest = true\ntable.insert(sortedfiles.AppxManifest, file)\nelseif path.isasmfile(file.name) then\ntable.insert(sortedfiles.MASM, file)\nelseif file.flags and table.icontains(file.flags, \"DeploymentContent\") then\ntable.insert(sortedfiles.DeploymentContent, file)\nelse\ntable.insert(sortedfiles.None, file)\nend\nend\nif vstudio.iswinrt() and prj.kind == \"WindowedApp\" and not foundAppxManifest then\nvstudio.needAppxManifest = true\nlocal fcfg = {}\nfcfg.name = prj.name .. \"/Package.appxmanifest\"\nfcfg.vpath = premake.project.getvpath(prj, fcfg.name)\ntable.insert(sortedfiles.AppxManifest, fcfg)\nlocal logo = {}\nlogo.name = prj.name .. \"/Logo.png\"\nlogo.vpath = logo.name\ntable.insert(sortedfiles.Image, logo)\nlocal smallLogo = {}\nsmallLogo.name = prj.name .. \"/SmallLogo.png\"\nsmallLogo.vpath = smallLogo.name\ntable.insert(sortedfiles.Image, smallLogo)\nlocal storeLogo = {}\nstoreLogo.name = prj.name .. \"/StoreLogo.png\"\nstoreLogo.vpat" + "h = storeLogo.name\ntable.insert(sortedfiles.Image, storeLogo)\nlocal splashScreen = {}\nsplashScreen.name = prj.name .. \"/SplashScreen.png\"\nsplashScreen.vpath = splashScreen.name\ntable.insert(sortedfiles.Image, splashScreen)\nend\nprj.vc2010sortedfiles = sortedfiles\nend\nreturn sortedfiles[group]\nend\nfunction vc2010.files(prj)\nvc2010.simplefilesgroup(prj, \"ClInclude\")\nvc2010.compilerfilesgroup(prj)\nvc2010.simplefilesgroup(prj, \"None\")\nvc2010.customtaskgroup(prj)\nvc2010.simplefilesgroup(prj, \"ResourceCompile\")\nvc2010.simplefilesgroup(prj, \"AppxManifest\")\nvc2010.deploymentcontentgroup(prj, \"Image\")\nvc2010.deploymentcontentgroup(prj, \"DeploymentContent\", \"None\")\nend\nfunction vc2010.customtaskgroup(prj)\nlocal files = { }\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path.getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend" + "\nend\nif #files > 0 then\n_p(1,'')\nlocal groupedBuildTasks = {}\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nif (groupedBuildTasks[buildtask[1]] == nil) then\ngroupedBuildTasks[buildtask[1]] = {}\nend\ntable.insert(groupedBuildTasks[buildtask[1]], buildtask)\nend\nend\nfor name, custombuildtask in pairs(groupedBuildTasks or {}) do\n_p(2,'', path.translate(path.getrelative(prj.location,name), \"\\\\\"))\n_p(3,'Text')\nlocal cmd = \"\"\nlocal outputs = \"\"\nfor _, buildtask in ipairs(custombuildtask or {}) do\nfor _, cmdline in ipairs(buildtask[4] or {}) do\ncmd = cmd .. cmdline\nlocal num = 1\nfor _, depdata in ipairs(buildtask[3] or {}) do\ncmd = string.gsub(cmd,\"%$%(\" .. num ..\"%)\", string.format(\"%s \",path.getrelative(prj.location,depdata)))\nnum = num + 1\nend\ncmd = string.gsub(cmd, \"%$%(<%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[1]))" + ")\ncmd = string.gsub(cmd, \"%$%(@%)\", string.format(\"%s \",path.getrelative(prj.location,buildtask[2])))\ncmd = cmd .. \"\\r\\n\"\nend\noutputs = outputs .. path.getrelative(prj.location,buildtask[2]) .. \";\"\nend\n_p(3,'%s',cmd)\n_p(3,'%s%%(Outputs)',outputs)\n_p(3,'Designer')\n_p(3,'')\n_p(2,'')\nend\n_p(1,'')\nend\nend\nfunction vc2010.simplefilesgroup(prj, section, subtype)\nlocal files = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'')\nfor _, file in ipairs(files) do\nif subtype then\n_p(2,'<%s Include=\\\"%s\\\">', section, path.translate(file.name, \"\\\\\"))\n_p(3,'%s', subtype)\n_p(2,'', section)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', section, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'')\nend\nend\nfunction vc2010.deploymentcontentgroup(prj, section, filetype)\nif filetype == nil then\nfiletype = section\nend\nlocal files" + " = vc2010.getfilegroup(prj, section)\nif #files > 0 then\n_p(1,'')\nfor _, file in ipairs(files) do\n_p(2,'<%s Include=\\\"%s\\\">', filetype, path.translate(file.name, \"\\\\\"))\n_p(3,'true')\n_p(3,'%s', path.translate(file.vpath, \"\\\\\"))\n_p(2,'', filetype)\nend\n_p(1,'')\nend\nend\nfunction vc2010.compilerfilesgroup(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"ClCompile\")\nif #files > 0 then\nlocal config_mappings = {}\nfor _, cfginfo in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nif cfg.pchheader and cfg.pchsource and not cfg.flags.NoPCH then\nconfig_mappings[cfginfo] = path.translate(cfg.pchsource, \"\\\\\")\nend\nend\n_p(1,'')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '', translatedpath)\n_p(3, '$(IntDir" + ")%s\\\\'\n, premake.esc(path.translate(path.trimdots(path.getdirectory(file.name))))\n)\nif path.iscxfile(file.name) then\n_p(3, 'true')\n_p(3, 'true')\n_p(3, 'NotUsing')\nend\nif vstudio.iswinrt() and string.len(file.name) > 2 and string.sub(file.name, -2) == \".c\" then\n_p(3,'FALSE')\nend\nfor _, cfginfo in ipairs(configs) do\nif config_mappings[cfginfo] and translatedpath == config_mappings[cfginfo] then\n_p(3,'Create', premake.esc(cfginfo.name))\nconfig_mappings[cfginfo] = nil --only one source file per pch\nend\nend\nlocal nopch = table.icontains(prj.nopch, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif nopch or table.icontains(cfg.nopch, file.name) then\n_p(3,'NotUsing', premake.esc(vsconfig.name))\nend\nend\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif excluded or table.icontains(cfg.excludes, file.name) then\n_p(3, 'true'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2,'')\nend\n_p(1,'')\nend\nend\nfunction vc2010.masmfiles(prj)\nlocal configs = prj.solution.vstudio_configs\nlocal files = vc2010.getfilegroup(prj, \"MASM\")\nif #files > 0 then\n_p(1, '')\nfor _, file in ipairs(files) do\nlocal translatedpath = path.translate(file.name, \"\\\\\")\n_p(2, '', translatedpath)\nlocal excluded = table.icontains(prj.excludes, file.name)\nfor _, vsconfig in ipairs(configs) do\nlocal cfg = premake.getconfig(prj, vsconfig.src_buildcfg, vsconfig.src_platform)\nif exc" + "luded or table.icontains(cfg.excludes, file.name) then\n_p(3, 'true'\n, premake.esc(vsconfig.name)\n)\nend\nend\n_p(2, '')\nend\n_p(1, '')\nend\nend\nfunction vc2010.header(targets)\nio.eol = \"\\r\\n\"\n_p('')\nlocal t = \"\"\nif targets then\nt = ' DefaultTargets=\"' .. targets .. '\"'\nend\n_p('', t, action.vstudio.toolsVersion)\nend\nfunction premake.vs2010_vcxproj(prj)\nlocal usemasm = hasmasmfiles(prj)\nio.indent = \" \"\nvc2010.header(\"Build\")\nvs2010_config(prj)\nvs2010_globals(prj)\n_p(1,'')\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\nvc2010.configurationPropertyGroup(cfg, cfginfo)\nend\n_p(1,'')\n_p(1,'')\nif usemasm then\n_p(2, '')\nend\n_p(1,'')\nimport_props(prj)\n_p(1,'')\nvc2010.outputProperties(prj)\nitem_definitions(prj)\nvc2010.files(prj)\nvc2010.projectReferences(prj)\nvc2010.masmfiles(prj)\n_p(1,'')\n_p(1,'')\nif usemasm then\n_p(2, '')\nend\n_p(1,'')\n_p('')\nend\nfunction vc2010.projectReferences(prj)\nlocal deps = premake.getdependencies(prj)\nif #deps > 0 then\n_p(1,'')\nfor _, dep in ipairs(deps) do\nlocal deppath = path.getrelative(prj.location, vstudio.projectfile(dep))\n_p(2,'', path.translate(deppath, \"\\\\\"))\n_p(3,'{%s}', dep.uuid)\nif vstudio.iswinrt() then\n_p(3,'false')\nend\n_p(2,'')\nend\n_p(1,'')\nend\nend\nfunction vc2010.debugdir(cfg)\nif cfg.debugdir and not vstudio.iswinrt() then\n_p(' %s', path.translate(cfg.debugdir, '\\\\'))\n_p(' WindowsLocalDebugger')\nend\nif cfg.debugargs then\n_p(' %s', table.concat(cfg.debugargs, \" \"))\nend\nend\nfunction vc2010.debugenvs(cfg)\nif cfg.debugenvs and #cfg.debugenvs > 0 then\n_p(2,'%s%s',table.concat(cfg.debugenvs, \"\\n\")\n,iif(cfg.flags.DebugEnvsInherit,'\\n$(LocalDebuggerEnvironment)','')\n)\nif cfg.flags.DebugEnvsDontMerge then\n_p(2,'false')\nend\nend\nend\nfunction premake.vs2010_vcxproj" + "_user(prj)\nio.indent = \" \"\nvc2010.header()\nfor _, cfginfo in ipairs(prj.solution.vstudio_configs) do\nlocal cfg = premake.getconfig(prj, cfginfo.src_buildcfg, cfginfo.src_platform)\n_p(' ', premake.esc(cfginfo.name))\nvc2010.debugdir(cfg)\nvc2010.debugenvs(cfg)\n_p(' ')\nend\n_p('')\nend\nlocal png1x1data = {\n0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, -- .PNG........IHDR\n0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x25, 0xdb, 0x56, -- .............%.V\n0xca, 0x00, 0x00, 0x00, 0x03, 0x50, 0x4c, 0x54, 0x45, 0x00, 0x00, 0x00, 0xa7, 0x7a, 0x3d, 0xda, -- .....PLTE....z=.\n0x00, 0x00, 0x00, 0x01, 0x74, 0x52, 0x4e, 0x53, 0x00, 0x40, 0xe6, 0xd8, 0x66, 0x00, 0x00, 0x00, -- ....tRNS.@..f...\n0x0a, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xe2, -- .IDAT..c`.......\n0x21, 0xbc, 0x33, 0x00, 0x00, 0x00, 0x00, 0x49" + ", 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, -- !.3....IEND.B`.\n}\nfunction png1x1(obj, filename)\nfilename = premake.project.getfilename(obj, filename)\nlocal f, err = io.open(filename, \"wb\")\nif f then\nfor _, byte in ipairs(png1x1data) do\nf:write(string.char(byte))\nend\nf:close()\nend\nend\nfunction premake.vs2010_appxmanifest(prj)\nio.indent = \" \"\nio.eol = \"\\r\\n\"\n_p('')\nif vstudio.toolset == \"v120_wp81\" then\n_p('')\nelseif vstudio.storeapp == \"8.1\" then\n_p('')\nelseif vstudio.storeapp == \"durango\" then\n_p('')\nelse\n_p('')\nend\n_p(1,'')\nif vstudio.toolset == \"v120_wp81\" or vstudio.storeapp == \"8.2\" then\n_p(1,'')\nend\n_p(1, '')\n_p(2, '' .. prj.name .. '')\n_p(2, 'PublisherDisplayName')\n_p(2, '' .. prj.name .. '\\\\StoreLogo.png')\npng1x1(prj, \"%%/StoreLogo.png\")\n_p(2, '' .. prj.name .. '')\n_p(1,'')\nif vstudio.storeapp == \"8.2\"" + " then\n_p(1, '')\n_p(2, '')\n_p(1, '')\nelseif vstudio.storeapp == \"durango\" then\n_p(1, '')\n_p(2, '6.2')\n_p(2, '6.2')\n_p(1, '')\nelse\n_p(1, '')\n_p(2, '6.3.0')\n_p(2, '6.3.0')\n_p(1, '')\nend\n_p(1,'')\n_p(2,'')\n_p(1,'')\n_p(1,'')\n_p(2,'')\nif vstudio.storeapp == \"durango\" then\n_p(3, '')\n_p(5, '')\npng1x1(prj, \"%%/SplashScreen.png\")\n_p(3, '')\n_p(3, '')\n_p(4, '')\n_p(4, '')\n_p(4, '')\n_p(3, '')\nelse\n_p(3, '')\n_p(4, '')\nend\n_p(2,'')\n_p(1,'')\n_p('')\nend\n", /* actions/vstudio/vs2010_vcxproj_filters.lua */ "local vc2010 = premake.vstudio.vc2010\nlocal project = premake.project\nfunction vc2010.filteridgroup(prj)\nlocal filters = { }\nlocal filterfound = false\nfor file in project.eachfile(prj) do\nlocal folders = string.explode(file.vpath, \"/\", true)\nlocal path = \"\"\nfor i = 1, #folders - 1 do\nif not filterfound then\nfilterfound = true\n_p(1,'')\nend\npath = path .. folders[i]\nif not filters[path] then\nfilters[path] = true\n_p(2, '', path)\n_p(3, '{%s}', os.uuid(path))\n_p(2, '')\nend\npath = path .. \"\\\\\"\nend\nend\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal folders = string.explode(path.trimdots(path.getrelative(prj.location,buildtask[1])), \"/\", true)\nlocal path = \"\"\nfor i = 1, #folders - 1 do\nif not filterfound then\nfilterfound = true\n_p(1,'')\nend\npath = path .. folders[i]\nif not filters[path] then\nfilters[path] = tr" "ue\n_p(2, '', path)\n_p(3, '{%s}', os.uuid(path))\n_p(2, '')\nend\npath = path .. \"\\\\\"\nend\nend\nend\nif filterfound then\n_p(1,'')\nend\nend\nfunction vc2010.filefiltergroup(prj, section, kind)\nlocal files = vc2010.getfilegroup(prj, section) or {}\nif kind == nill then\nkind = section\nend\nif (section == \"CustomBuild\") then\nfor _, custombuildtask in ipairs(prj.custombuildtask or {}) do\nfor _, buildtask in ipairs(custombuildtask or {}) do\nlocal fcfg = { }\nfcfg.name = path.getrelative(prj.location,buildtask[1])\nfcfg.vpath = path.trimdots(fcfg.name)\ntable.insert(files, fcfg)\nend\nend\nend\nif #files > 0 then\n_p(1,'')\nfor _, file in ipairs(files) do\nlocal filter\nif file.name ~= file.vpath then\nfilter = path.getdirectory(file.vpath)\nelse\nfilter = path.getdirectory(file.name)\nend\nif filter ~= \".\" then\n_p(2,'<%s Include=\\\"%s\\\">', kind, path.translate(file.name, \"\\\\\"))\n_p(3,'%s', path.translate(filter, \"\\\\\"))\n_p(2,'', kind)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', kind, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'')\nend\nend\nfunction vc2010.generate_filters(prj)\nio.indent = \" \"\nvc2010.header()\nvc2010.filteridgroup(prj)\nvc2010.filefiltergroup(prj, \"None\")\nvc2010.filefiltergroup(prj, \"ClInclude\")\nvc2010.filefiltergroup(prj, \"ClCompile\")\nvc2010.filefiltergroup(prj, \"ResourceCompile\")\nvc2010.filefiltergroup(prj, \"CustomBuild\")\nvc2010.filefiltergroup(prj, \"AppxManifest\")\nvc2010.filefiltergroup(prj, \"Image\")\nvc2010.filefiltergroup(prj, \"DeploymentContent\", \"None\")\n_p('')\nend\n", + "ter>', path.translate(filter, \"\\\\\"))\n_p(2,'', kind)\nelse\n_p(2,'<%s Include=\\\"%s\\\" />', kind, path.translate(file.name, \"\\\\\"))\nend\nend\n_p(1,'')\nend\nend\nfunction vc2010.generate_filters(prj)\nio.indent = \" \"\nvc2010.header()\nvc2010.filteridgroup(prj)\nvc2010.filefiltergroup(prj, \"None\")\nvc2010.filefiltergroup(prj, \"ClInclude\")\nvc2010.filefiltergroup(prj, \"ClCompile\")\nvc2010.filefiltergroup(prj, \"ResourceCompile\")\nvc2010.filefiltergroup(prj, \"CustomBuild\")\nvc2010.filefiltergroup(prj, \"AppxManifest\")\nvc2010.filefiltergroup(prj, \"Image\")\nvc2010.filefiltergroup(prj, \"DeploymentContent\", \"None\")\nvc2010.filefiltergroup(prj, \"MASM\")\n_p('')\nend\n", /* actions/vstudio/vs2012.lua */ "premake.vstudio.vc2012 = {}\nlocal vc2012 = premake.vstudio.vc2012\nlocal vstudio = premake.vstudio\nnewaction\n{\ntrigger = \"vs2012\",\nshortname = \"Visual Studio 2012\",\ndescription = \"Generate Microsoft Visual Studio 2012 project files\",\nos = \"windows\",\nvalid_kinds = { \"ConsoleApp\", \"WindowedApp\", \"StaticLib\", \"SharedLib\" },\nvalid_languages = { \"C\", \"C++\", \"C#\"},\nvalid_tools = {\ncc = { \"msc\" },\ndotnet = { \"msnet\" },\n},\nonsolution = function(sln)\npremake.generate(sln, \"%%.sln\", vstudio.sln2005.generate)\nend,\nonproject = function(prj)\nif premake.isdotnetproject(prj) then\npremake.generate(prj, \"%%.csproj\", vstudio.cs2005.generate)\npremake.generate(prj, \"%%.csproj.user\", vstudio.cs2005.generate_user)\nelse\npremake.generate(prj, \"%%.vcxproj\", premake.vs2010_vcxproj)\npremake.generate(prj, \"%%.vcxproj.user\", premake.vs2010_vcxproj_user)\npremake.generate(prj, \"%%.vcxproj.filters\", vstudio.vc2010.generate_filters)\nend" @@ -347,35 +366,35 @@ const char* builtin_scripts[] = { "nction(prj)\npremake.clean.directory(prj, \"%%.xcodeproj\")\npremake.clean.directory(prj, \"%%.xcworkspace\")\nend,\noncheckproject = function(prj)\nlocal last\nfor cfg in premake.eachconfig(prj) do\nif last and last ~= cfg.kind then\nerror(\"Project '\" .. prj.name .. \"' uses more than one target kind; not supported by Xcode\", 0)\nend\nlast = cfg.kind\nend\nend,\n}\n", /* actions/xcode/xcode_common.lua */ - "premake.xcode.parameters = { }\nlocal xcode = premake.xcode\nlocal tree = premake.tree\nfunction xcode.getbuildcategory(node)\nlocal categories = {\n[\".a\"] = \"Frameworks\",\n[\".c\"] = \"Sources\",\n[\".cc\"] = \"Sources\",\n[\".cpp\"] = \"Sources\",\n[\".cxx\"] = \"Sources\",\n[\".dylib\"] = \"Frameworks\",\n[\".framework\"] = \"Frameworks\",\n[\".m\"] = \"Sources\",\n[\".mm\"] = \"Sources\",\n[\".strings\"] = \"Resources\",\n[\".nib\"] = \"Resources\",\n[\".xib\"] = \"Resources\",\n[\".icns\"] = \"Resources\",\n[\".bmp\"] = \"Resources\",\n[\".wav\"] = \"Resources\",\n}\nreturn categories[path.getextension(node.name)]\nend\nfunction xcode.getconfigname(cfg)\nlocal name = cfg.name\nif #cfg.project.solution.xcode.platforms > 1 then\nname = name .. \" \" .. premake.action.current().valid_platforms[cfg.platform]\nend\nreturn name\nend\nfunction xcode.getfiletype(node)\nlocal types = {\n[\".c\"] = \"sourcecode.c.c\",\n[\".cc\"] = \"sourcecode.cpp.cpp\",\n[\".cpp\"] = \"sourcecode.cpp.cpp" - "\",\n[\".css\"] = \"text.css\",\n[\".cxx\"] = \"sourcecode.cpp.cpp\",\n[\".framework\"] = \"wrapper.framework\",\n[\".gif\"] = \"image.gif\",\n[\".h\"] = \"sourcecode.c.h\",\n[\".html\"] = \"text.html\",\n[\".lua\"] = \"sourcecode.lua\",\n[\".m\"] = \"sourcecode.c.objc\",\n[\".mm\"] = \"sourcecode.cpp.objcpp\",\n[\".nib\"] = \"wrapper.nib\",\n[\".pch\"] = \"sourcecode.c.h\",\n[\".plist\"] = \"text.plist.xml\",\n[\".strings\"] = \"text.plist.strings\",\n[\".xib\"] = \"file.xib\",\n[\".icns\"] = \"image.icns\",\n[\".bmp\"] = \"image.bmp\",\n[\".wav\"] = \"audio.wav\",\n}\nreturn types[path.getextension(node.path)] or \"text\"\nend\nfunction xcode.getfiletypeForced(node)\nlocal types = {\n[\".c\"] = \"sourcecode.cpp.cpp\",\n[\".cc\"] = \"sourcecode.cpp.cpp\",\n[\".cpp\"] = \"sourcecode.cpp.cpp\",\n[\".css\"] = \"text.css\",\n[\".cxx\"] = \"sourcecode.cpp.cpp\",\n[\".framework\"] = \"wrappe" - "r.framework\",\n[\".gif\"] = \"image.gif\",\n[\".h\"] = \"sourcecode.cpp.h\",\n[\".html\"] = \"text.html\",\n[\".lua\"] = \"sourcecode.lua\",\n[\".m\"] = \"sourcecode.cpp.objcpp\",\n[\".mm\"] = \"sourcecode.cpp.objcpp\",\n[\".nib\"] = \"wrapper.nib\",\n[\".pch\"] = \"sourcecode.cpp.h\",\n[\".plist\"] = \"text.plist.xml\",\n[\".strings\"] = \"text.plist.strings\",\n[\".xib\"] = \"file.xib\",\n[\".icns\"] = \"image.icns\",\n[\".bmp\"] = \"image.bmp\",\n[\".wav\"] = \"audio.wav\",\n}\nreturn types[path.getextension(node.path)] or \"text\"\nend\nfunction xcode.getproducttype(node)\nlocal types = {\nConsoleApp = \"com.apple.product-type.tool\",\nWindowedApp = \"com.apple.product-type.application\",\nStaticLib = \"com.apple.product-type.library.static\",\nSharedLib = \"com.apple.product-type.library.dynamic\",\n}\nreturn types[node.cfg.kind]\nend\nfunction xcode.gettargettype(node)\nlocal types = {\nConsoleApp = \"\\\"compiled.mac" - "h-o.executable\\\"\",\nWindowedApp = \"wrapper.application\",\nStaticLib = \"archive.ar\",\nSharedLib = \"\\\"compiled.mach-o.dylib\\\"\",\n}\nreturn types[node.cfg.kind]\nend\nfunction xcode.getxcodeprojname(prj)\nlocal fname = premake.project.getfilename(prj, \"%%.xcodeproj\")\nreturn fname\nend\nfunction xcode.isframework(fname)\nreturn (path.getextension(fname) == \".framework\")\nend\nfunction xcode.newid()\nreturn string.format(\"%04X%04X%04X%04X%04X%04X\",\nmath.random(0, 32767),\nmath.random(0, 32767),\nmath.random(0, 32767),\nmath.random(0, 32767),\nmath.random(0, 32767),\nmath.random(0, 32767))\nend\nfunction xcode.preparesolution(sln)\nsln.xcode = { }\nsln.xcode.platforms = premake.filterplatforms(sln, premake.action.current().valid_platforms, \"Universal\")\nfor prj in premake.solution.eachproject(sln) do\nlocal cfg = premake.getconfig(prj, prj.configurations[1], sln.xcode.platforms[1])\nlocal node = premake.tree.new(path.getname(cfg.buildtarget.bundlepath))\nnode.cfg = cfg\nnode.id = premake.x" - "code.newid(node, \"product\")\nnode.targetid = premake.xcode.newid(node, \"target\")\nprj.xcode = {}\nprj.xcode.projectnode = node\nend\nend\nfunction xcode.printlist(list, tag)\nif #list > 0 then\n_p(4,'%s = (', tag)\nfor _, item in ipairs(list) do\nlocal escaped_item = item:gsub(\"\\\"\", \"\\\\\\\"\")\n_p(5, '\"%s\",', escaped_item)\nend\n_p(4,');')\nend\nend\nfunction xcode.Header()\n_p('// !$*UTF8*$!')\n_p('{')\n_p(1,'archiveVersion = 1;')\n_p(1,'classes = {')\n_p(1,'};')\n_p(1,'objectVersion = 45;')\n_p(1,'objects = {')\n_p('')\nend\nfunction xcode.PBXBuildFile(tr)\n_p('/* Begin PBXBuildFile section */')\ntree.traverse(tr, {\nonnode = function(node)\nif node.buildid then\n_p(2,'%s /* %s in %s */ = {isa = PBXBuildFile; fileRef = %s /* %s */; };', \nnode.buildid, node.name, xcode.getbuildcategory(node), node.id, node.name)\nend\nend\n})\n_p('/* End PBXBuildFile section */')\n_p('')\nend\nfunction xcode.PBXContainerItemProxy(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXContainerItemProxy section " - "*/')\nfor _, node in ipairs(tr.projects.children) do\n_p(2,'%s /* PBXContainerItemProxy */ = {', node.productproxyid)\n_p(3,'isa = PBXContainerItemProxy;')\n_p(3,'containerPortal = %s /* %s */;', node.id, path.getname(node.path))\n_p(3,'proxyType = 2;')\n_p(3,'remoteGlobalIDString = %s;', node.project.xcode.projectnode.id)\n_p(3,'remoteInfo = \"%s\";', node.project.xcode.projectnode.name)\n_p(2,'};')\n_p(2,'%s /* PBXContainerItemProxy */ = {', node.targetproxyid)\n_p(3,'isa = PBXContainerItemProxy;')\n_p(3,'containerPortal = %s /* %s */;', node.id, path.getname(node.path))\n_p(3,'proxyType = 1;')\n_p(3,'remoteGlobalIDString = %s;', node.project.xcode.projectnode.targetid)\n_p(3,'remoteInfo = \"%s\";', node.project.xcode.projectnode.name)\n_p(2,'};')\nend\n_p('/* End PBXContainerItemProxy section */')\n_p('')\nend\nend\nfunction xcode.PBXFileReference(tr,prj)\n_p('/* Begin PBXFileReference section */')\ntree.traverse(tr, {\nonleaf = function(node)\nif not node.path then\nreturn\nend\nif node.kind == \"product\"" - " then\n_p(2,'%s /* %s */ = {isa = PBXFileReference; explicitFileType = %s; includeInIndex = 0; name = \"%s\"; path = \"%s\"; sourceTree = BUILT_PRODUCTS_DIR; };',\nnode.id, node.name, xcode.gettargettype(node), node.name, path.getname(node.cfg.buildtarget.bundlepath))\nelseif node.parent.parent == tr.projects then\nlocal relpath = path.getrelative(tr.project.location, node.parent.project.location)\n_p(2,'%s /* %s */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = \"%s\"; path = \"%s\"; sourceTree = SOURCE_ROOT; };',\nnode.parent.id, node.parent.name, node.parent.name, path.join(relpath, node.parent.name))\nelse\nlocal pth, src\nif xcode.isframework(node.path) then\nlocal nodePath = node.path\nlocal _, matchEnd, variable = string.find(nodePath, \"^%$%((.+)%)/\")\nif variable then\nnodePath = string.sub(nodePath, matchEnd + 1)\nend\nif string.find(nodePath,'/') then\nif string.find(nodePath,'^%.')then\nerror('relative paths are not currently supported for frameworks')\nend\npth = n" - "odePath\nelse\npth = \"/System/Library/Frameworks/\" .. nodePath\nend\nif variable then\nsrc = variable\nif string.find(pth, '^/') then\npth = string.sub(pth, 2)\nend\nelse\nsrc = \"\"\nend\nelse\nsrc = \"\"\nif node.parent.isvpath then\npth = node.cfg.name\nelse\npth = tree.getlocalpath(node)\nend\nend\nif (not prj.options.ForceCPP) then\n_p(2,'%s /* %s */ = {isa = PBXFileReference; lastKnownFileType = %s; name = \"%s\"; path = \"%s\"; sourceTree = \"%s\"; };',\nnode.id, node.name, xcode.getfiletype(node), node.name, pth, src)\nelse\n_p(2,'%s /* %s */ = {isa = PBXFileReference; explicitFileType = %s; name = \"%s\"; path = \"%s\"; sourceTree = \"%s\"; };',\nnode.id, node.name, xcode.getfiletypeForced(node), node.name, pth, src)\nend\nend\nend\n})\n_p('/* End PBXFileReference section */')\n_p('')\nend\nfunction xcode.PBXFrameworksBuildPhase(tr)\n_p('/* Begin PBXFrameworksBuildPhase section */')\n_p(2,'%s /* Frameworks */ = {', tr.products.children[1].fxstageid)\n_p(3,'isa = PBXFrameworksBuildPh" - "ase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr.frameworks, {\nonleaf = function(node)\n_p(4,'%s /* %s in Frameworks */,', node.buildid, node.name)\nend\n})\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(4,'%s /* %s in Frameworks */,', node.buildid, node.name)\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\n_p('/* End PBXFrameworksBuildPhase section */')\n_p('')\nend\nfunction xcode.PBXGroup(tr)\n_p('/* Begin PBXGroup section */')\ntree.traverse(tr, {\nonnode = function(node)\nif (node.path and #node.children == 0) or node.kind == \"vgroup\" then\nreturn\nend\nif node.parent == tr.projects then\n_p(2,'%s /* Products */ = {', node.productgroupid)\nelse\n_p(2,'%s /* %s */ = {', node.id, node.name)\nend\n_p(3,'isa = PBXGroup;')\n_p(3,'children = (')\nfor _, childnode in ipairs(node.children) do\n_p(4,'%s /* %s */,', childnode.id, childnode.name)\nend\n_p(3,');')\nif node.parent == tr.projects then\n_p(3,'name = Products;')\nelse\n_p" - "(3,'name = \"%s\";', node.name)\nif node.path and not node.isvpath then\nlocal p = node.path\nif node.parent.path then\np = path.getrelative(node.parent.path, node.path)\nend\n_p(3,'path = \"%s\";', p)\nend\nend\n_p(3,'sourceTree = \"\";')\n_p(2,'};')\nend\n}, true)\n_p('/* End PBXGroup section */')\n_p('')\nend\nfunction xcode.PBXNativeTarget(tr)\n_p('/* Begin PBXNativeTarget section */')\nfor _, node in ipairs(tr.products.children) do\nlocal name = tr.project.name\nlocal function hasBuildCommands(which)\nif #tr.project[which] > 0 then\nreturn true\nend\nfor _, cfg in ipairs(tr.configs) do\nif #cfg[which] > 0 then\nreturn true\nend\nend\nend\n_p(2,'%s /* %s */ = {', node.targetid, name)\n_p(3,'isa = PBXNativeTarget;')\n_p(3,'buildConfigurationList = %s /* Build configuration list for PBXNativeTarget \"%s\" */;', node.cfgsection, name)\n_p(3,'buildPhases = (')\nif hasBuildCommands('prebuildcommands') then\n_p(4,'9607AE1010C857E500CD1376 /* Prebuild */,')\nend\n_p(4,'%s /* Resources */,', node.resstageid" - ")\n_p(4,'%s /* Sources */,', node.sourcesid)\nif hasBuildCommands('prelinkcommands') then\n_p(4,'9607AE3510C85E7E00CD1376 /* Prelink */,')\nend\n_p(4,'%s /* Frameworks */,', node.fxstageid)\nif hasBuildCommands('postbuildcommands') then\n_p(4,'9607AE3710C85E8F00CD1376 /* Postbuild */,')\nend\n_p(3,');')\n_p(3,'buildRules = (')\n_p(3,');')\n_p(3,'dependencies = (')\nfor _, node in ipairs(tr.projects.children) do\n_p(4,'%s /* PBXTargetDependency */,', node.targetdependid)\nend\n_p(3,');')\n_p(3,'name = \"%s\";', name)\nlocal p\nif node.cfg.kind == \"ConsoleApp\" then\np = \"$(HOME)/bin\"\nelseif node.cfg.kind == \"WindowedApp\" then\np = \"$(HOME)/Applications\"\nend\nif p then\n_p(3,'productInstallPath = \"%s\";', p)\nend\n_p(3,'productName = \"%s\";', name)\n_p(3,'productReference = %s /* %s */;', node.id, node.name)\n_p(3,'productType = \"%s\";', xcode.getproducttype(node))\n_p(2,'};')\nend\n_p('/* End PBXNativeTarget section */')\n_p('')\nend\nfunction xcode.PBXProject(tr)\n_p('/* Begin PBXProject section */" - "')\n_p(2,'08FB7793FE84155DC02AAC07 /* Project object */ = {')\n_p(3,'isa = PBXProject;')\n_p(3,'buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */;', tr.name)\n_p(3,'compatibilityVersion = \"Xcode 3.2\";')\n_p(3,'hasScannedForEncodings = 1;')\n_p(3,'mainGroup = %s /* %s */;', tr.id, tr.name)\n_p(3,'projectDirPath = \"\";')\nif #tr.projects.children > 0 then\n_p(3,'projectReferences = (')\nfor _, node in ipairs(tr.projects.children) do\n_p(4,'{')\n_p(5,'ProductGroup = %s /* Products */;', node.productgroupid)\n_p(5,'ProjectRef = %s /* %s */;', node.id, path.getname(node.path))\n_p(4,'},')\nend\n_p(3,');')\nend\n_p(3,'projectRoot = \"\";')\n_p(3,'targets = (')\nfor _, node in ipairs(tr.products.children) do\n_p(4,'%s /* %s */,', node.targetid, node.name)\nend\n_p(3,');')\n_p(2,'};')\n_p('/* End PBXProject section */')\n_p('')\nend\nfunction xcode.PBXReferenceProxy(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXReferenceProxy section */')\ntree.traverse" - "(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* %s */ = {', node.id, node.name)\n_p(3,'isa = PBXReferenceProxy;')\n_p(3,'fileType = %s;', xcode.gettargettype(node))\n_p(3,'path = \"%s\";', node.path)\n_p(3,'remoteRef = %s /* PBXContainerItemProxy */;', node.parent.productproxyid)\n_p(3,'sourceTree = BUILT_PRODUCTS_DIR;')\n_p(2,'};')\nend\n})\n_p('/* End PBXReferenceProxy section */')\n_p('')\nend\nend\nfunction xcode.PBXResourcesBuildPhase(tr)\n_p('/* Begin PBXResourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Resources */ = {', target.resstageid)\n_p(3,'isa = PBXResourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonnode = function(node)\nif xcode.getbuildcategory(node) == \"Resources\" then\n_p(4,'%s /* %s in Resources */,', node.buildid, node.name)\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXResourcesBuildPhase section */')\n_p('')\nend\nfunction" - " xcode.PBXShellScriptBuildPhase(tr)\nlocal wrapperWritten = false\nlocal function doblock(id, name, which)\nlocal prjcmds = tr.project[which]\nlocal commands = table.join(prjcmds, {})\nfor _, cfg in ipairs(tr.configs) do\nlocal cfgcmds = cfg[which]\nif #cfgcmds > #prjcmds then\ntable.insert(commands, 'if [ \"${CONFIGURATION}\" = \"' .. xcode.getconfigname(cfg) .. '\" ]; then')\nfor i = #prjcmds + 1, #cfgcmds do\ntable.insert(commands, cfgcmds[i])\nend\ntable.insert(commands, 'fi')\nend\nend\nif #commands > 0 then\nif not wrapperWritten then\n_p('/* Begin PBXShellScriptBuildPhase section */')\nwrapperWritten = true\nend\n_p(2,'%s /* %s */ = {', id, name)\n_p(3,'isa = PBXShellScriptBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\n_p(3,');')\n_p(3,'inputPaths = (');\n_p(3,');');\n_p(3,'name = %s;', name);\n_p(3,'outputPaths = (');\n_p(3,');');\n_p(3,'runOnlyForDeploymentPostprocessing = 0;');\n_p(3,'shellPath = /bin/sh;');\n_p(3,'shellScript = \"%s\";', table.concat(commands, \"\\\\n\"):gs" - "ub('\"', '\\\\\"'))\n_p(2,'};')\nend\nend\ndoblock(\"9607AE1010C857E500CD1376\", \"Prebuild\", \"prebuildcommands\")\ndoblock(\"9607AE3510C85E7E00CD1376\", \"Prelink\", \"prelinkcommands\")\ndoblock(\"9607AE3710C85E8F00CD1376\", \"Postbuild\", \"postbuildcommands\")\nif wrapperWritten then\n_p('/* End PBXShellScriptBuildPhase section */')\nend\nend\nfunction xcode.PBXSourcesBuildPhase(tr,prj)\n_p('/* Begin PBXSourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Sources */ = {', target.sourcesid)\n_p(3,'isa = PBXSourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonleaf = function(node)\nif xcode.getbuildcategory(node) == \"Sources\" then\n if not table.icontains(prj.excludes, node.cfg.name) then -- if not excluded\n_p(4,'%s /* %s in Sources */,', node.buildid, node.name)\n end\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXSourcesBui" - "ldPhase section */')\n_p('')\nend\nfunction xcode.PBXVariantGroup(tr)\n_p('/* Begin PBXVariantGroup section */')\ntree.traverse(tr, {\nonbranch = function(node)\nif node.kind == \"vgroup\" then\n_p(2,'%s /* %s */ = {', node.id, node.name)\n_p(3,'isa = PBXVariantGroup;')\n_p(3,'children = (')\nfor _, lang in ipairs(node.children) do\n_p(4,'%s /* %s */,', lang.id, lang.name)\nend\n_p(3,');')\n_p(3,'name = %s;', node.name)\n_p(3,'sourceTree = \"\";')\n_p(2,'};')\nend\nend\n})\n_p('/* End PBXVariantGroup section */')\n_p('')\nend\nfunction xcode.PBXTargetDependency(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXTargetDependency section */')\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* PBXTargetDependency */ = {', node.parent.targetdependid)\n_p(3,'isa = PBXTargetDependency;')\n_p(3,'name = \"%s\";', node.name)\n_p(3,'targetProxy = %s /* PBXContainerItemProxy */;', node.parent.targetproxyid)\n_p(2,'};')\nend\n})\n_p('/* End PBXTargetDependency section */')\n_p('')\nend\nend\nf" - "unction xcode.XCBuildConfiguration_Target(tr, target, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.targetid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p(3,'buildSettings = {')\n_p(4,'ALWAYS_SEARCH_USER_PATHS = NO;')\nif not cfg.flags.Symbols then\n_p(4,'DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";')\nend\nif cfg.kind ~= \"StaticLib\" and cfg.buildtarget.prefix ~= \"\" then\n_p(4,'EXECUTABLE_PREFIX = %s;', cfg.buildtarget.prefix)\nend\nif cfg.targetextension then\nlocal ext = cfg.targetextension\next = iif(ext:startswith(\".\"), ext:sub(2), ext)\n_p(4,'EXECUTABLE_EXTENSION = %s;', ext)\nend\nlocal outdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif outdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = %s;', outdir)\nend\n_p(4,'GCC_DYNAMIC_NO_PIC = NO;')\n_p(4,'GCC_MODEL_TUNING = G5;')\nif tr.infoplist then\n_p(4,'INFOPLIST_FILE = \"%s\";', tr.infoplist.cfg.name)\nend\ninstallpaths = {\nConsoleApp = '/usr/local/bin',\nWindowedApp = '\"$(HOME)/Applications\"'," - "\nSharedLib = '/usr/local/lib',\nStaticLib = '/usr/local/lib',\n}\n_p(4,'INSTALL_PATH = %s;', installpaths[cfg.kind])\nlocal infoplist_file = nil\nfor _, v in ipairs(cfg.files) do\nif (string.find (string.lower (v), 'info.plist') ~= nil) then\ninfoplist_file = string.format('$(SRCROOT)/%s', v)\nend\nend\nif infoplist_file ~= nil then\n_p(4,'INFOPLIST_FILE = \"%s\";', infoplist_file)\nend\n_p(4,'PRODUCT_NAME = \"%s\";', cfg.buildtarget.basename)\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nfunction xcode.XCBuildConfiguration_Project(tr, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.projectid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p(3,'buildSettings = {')\nlocal archs = {\nNative = \"$(NATIVE_ARCH_ACTUAL)\",\nx32 = \"i386\",\nx64 = \"x86_64\",\nUniversal32 = \"$(ARCHS_STANDARD_32_BIT)\",\nUniversal64 = \"$(ARCHS_STANDARD_64_BIT)\",\nUniversal = \"$(ARCHS_STANDARD_32_64_BIT)\",\n}\n_p(4,'ARCHS = \"%s\";', archs[cfg.platform])\n_p(4,'SDKROOT = " - "\"%s\";', xcode.toolset)\nlocal targetdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif targetdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = \"$(SYMROOT)\";');\nend\n_p(4,'CONFIGURATION_TEMP_DIR = \"$(OBJROOT)\";')\nif cfg.flags.Symbols then\n_p(4,'COPY_PHASE_STRIP = NO;')\nend\n_p(4,'GCC_C_LANGUAGE_STANDARD = gnu99;')\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_CPP_EXCEPTIONS = NO;')\nend\nif cfg.flags.NoRTTI then\n_p(4,'GCC_ENABLE_CPP_RTTI = NO;')\nend\nif _ACTION ~= \"xcode4\" and cfg.flags.Symbols and not cfg.flags.NoEditAndContinue then\n_p(4,'GCC_ENABLE_FIX_AND_CONTINUE = YES;')\nend\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_OBJC_EXCEPTIONS = NO;')\nend\nif cfg.flags.Optimize or cfg.flags.OptimizeSize then\n_p(4,'GCC_OPTIMIZATION_LEVEL = s;')\nelseif cfg.flags.OptimizeSpeed then\n_p(4,'GCC_OPTIMIZATION_LEVEL = 3;')\nelse\n_p(4,'GCC_OPTIMIZATION_LEVEL = 0;')\nend\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(4,'GCC_PRECOMPILE_PREFIX_HEADER = YES;')\n_p(4,'GCC_PREFIX_HEADER = " - "\"%s\";', cfg.pchheader)\nend\nxcode.printlist(cfg.defines, 'GCC_PREPROCESSOR_DEFINITIONS')\n_p(4,'GCC_SYMBOLS_PRIVATE_EXTERN = NO;')\nif cfg.flags.FatalWarnings then\n_p(4,'GCC_TREAT_WARNINGS_AS_ERRORS = YES;')\nend\n_p(4,'GCC_WARN_ABOUT_RETURN_TYPE = YES;')\n_p(4,'GCC_WARN_UNUSED_VARIABLE = YES;')\nxcode.printlist(cfg.includedirs, 'HEADER_SEARCH_PATHS')\nxcode.printlist(cfg.libdirs, 'LIBRARY_SEARCH_PATHS')\n_p(4,'OBJROOT = \"%s\";', cfg.objectsdir)\n_p(4,'ONLY_ACTIVE_ARCH = %s;',iif(premake.config.isdebugbuild(cfg),'YES','NO'))\nlocal checks = {\n[\"-ffast-math\"] = cfg.flags.FloatFast,\n[\"-ffloat-store\"] = cfg.flags.FloatStrict,\n[\"-fomit-frame-pointer\"] = cfg.flags.NoFramePointer,\n}\nlocal flags = { }\nfor flag, check in pairs(checks) do\nif check then\ntable.insert(flags, flag)\nend\nend\nfor _, val in ipairs(premake.xcode.parameters) do\n_p(4, val ..';')\nend\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_c), 'OTHER_CFLAGS')\nxcode.printlist(table.join(flags, c" - "fg.buildoptions, cfg.buildoptions_cpp), 'OTHER_CPLUSPLUSFLAGS')\nflags = { }\nfor _, lib in ipairs(premake.getlinks(cfg, \"system\")) do\nif not xcode.isframework(lib) then\ntable.insert(flags, \"-l\" .. lib)\nend\nend\nflags = table.join(flags, cfg.linkoptions)\nxcode.printlist(flags, 'OTHER_LDFLAGS')\nif cfg.flags.StaticRuntime then\n_p(4,'STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;')\nend\nif targetdir ~= \".\" then\n_p(4,'SYMROOT = \"%s\";', targetdir)\nend\nif cfg.flags.ExtraWarnings then\n_p(4,'WARNING_CFLAGS = \"-Wall\";')\nend\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nfunction xcode.XCBuildConfiguration(tr)\n_p('/* Begin XCBuildConfiguration section */')\nfor _, target in ipairs(tr.products.children) do\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Target(tr, target, cfg)\nend\nend\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Project(tr, cfg)\nend\n_p('/* End XCBuildConfiguration section */')\n_p('')\nend\nfunction xcode.XCBuildConfigurationLi" - "st(tr)\nlocal sln = tr.project.solution\n_p('/* Begin XCConfigurationList section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Build configuration list for PBXNativeTarget \"%s\" */ = {', target.cfgsection, target.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.targetid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\nend\n_p(2,'1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */ = {', tr.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.projectid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\n_p('/* End XCConfigur" - "ationList section */')\n_p('')\nend\nfunction xcode.Footer()\n_p(1,'};')\n_p('\\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;')\n_p('}')\nend\n", + "premake.xcode.parameters = { }\nlocal xcode = premake.xcode\nlocal tree = premake.tree\nfunction xcode.getbuildcategory(node)\nlocal categories = {\n[\".a\"] = \"Frameworks\",\n[\".c\"] = \"Sources\",\n[\".cc\"] = \"Sources\",\n[\".cpp\"] = \"Sources\",\n[\".cxx\"] = \"Sources\",\n[\".dylib\"] = \"Frameworks\",\n[\".framework\"] = \"Frameworks\",\n[\".tbd\"] = \"Frameworks\",\n[\".m\"] = \"Sources\",\n[\".mm\"] = \"Sources\",\n[\".strings\"] = \"Resources\",\n[\".nib\"] = \"Resources\",\n[\".xib\"] = \"Resources\",\n[\".icns\"] = \"Resources\",\n[\".bmp\"] = \"Resources\",\n[\".wav\"] = \"Resources\",\n[\".xcassets\"] = \"Resources\",\n[\".xcdatamodeld\"] = \"Sources\",\n}\nreturn categories[path.getextension(node.name)]\nend\nfunction xcode.getconfigname(cfg)\nlocal name = cfg.name\nif #cfg.project.solution.xcode.platforms > 1 then\nname = name .. \" \" .. premake.action.current().valid_platforms[cfg.platform]\nend\nreturn name\nend\nfunction xcode.getfiletype(node)\nlocal types = {\n[\".c\"] = \"so" + "urcecode.c.c\",\n[\".cc\"] = \"sourcecode.cpp.cpp\",\n[\".cpp\"] = \"sourcecode.cpp.cpp\",\n[\".css\"] = \"text.css\",\n[\".cxx\"] = \"sourcecode.cpp.cpp\",\n[\".entitlements\"] = \"text.xml\",\n[\".framework\"] = \"wrapper.framework\",\n[\".tbd\"] = \"sourcecode.text-based-dylib-definition\",\n[\".gif\"] = \"image.gif\",\n[\".h\"] = \"sourcecode.c.h\",\n[\".html\"] = \"text.html\",\n[\".lua\"] = \"sourcecode.lua\",\n[\".m\"] = \"sourcecode.c.objc\",\n[\".mm\"] = \"sourcecode.cpp.objcpp\",\n[\".nib\"] = \"wrapper.nib\",\n[\".pch\"] = \"sourcecode.c.h\",\n[\".plist\"] = \"text.plist.xml\",\n[\".strings\"] = \"text.plist.strings\",\n[\".xib\"] = \"file.xib\",\n[\".icns\"] = \"image.icns\",\n[\".bmp\"] = \"image.bmp\",\n[\".wav\"] = \"audio.wav\",\n[\".xcassets\"] = \"folder.assetcatalog\",\n[\".xcdatamodeld\"] = \"wrapper.xcdatamodeld\",\n}\nreturn types[path.getextension(node.path)] or \"text\"\nend" + "\nfunction xcode.getfiletypeForced(node)\nlocal types = {\n[\".c\"] = \"sourcecode.cpp.cpp\",\n[\".cc\"] = \"sourcecode.cpp.cpp\",\n[\".cpp\"] = \"sourcecode.cpp.cpp\",\n[\".css\"] = \"text.css\",\n[\".cxx\"] = \"sourcecode.cpp.cpp\",\n[\".entitlements\"] = \"text.xml\",\n[\".framework\"] = \"wrapper.framework\",\n[\".tbd\"] = \"wrapper.framework\",\n[\".gif\"] = \"image.gif\",\n[\".h\"] = \"sourcecode.cpp.h\",\n[\".html\"] = \"text.html\",\n[\".lua\"] = \"sourcecode.lua\",\n[\".m\"] = \"sourcecode.cpp.objcpp\",\n[\".mm\"] = \"sourcecode.cpp.objcpp\",\n[\".nib\"] = \"wrapper.nib\",\n[\".pch\"] = \"sourcecode.cpp.h\",\n[\".plist\"] = \"text.plist.xml\",\n[\".strings\"] = \"text.plist.strings\",\n[\".xib\"] = \"file.xib\",\n[\".icns\"] = \"image.icns\",\n[\".bmp\"] = \"image.bmp\",\n[\".wav\"] = \"audio.wav\",\n[\".xcassets\"] = \"folder.assetcatalog\",\n[\".xcdatamodeld\"] = \"wrapper.xcdatam" + "odeld\",\n}\nreturn types[path.getextension(node.path)] or \"text\"\nend\nfunction xcode.getproducttype(node)\nlocal types = {\nConsoleApp = \"com.apple.product-type.tool\",\nWindowedApp = \"com.apple.product-type.application\",\nStaticLib = \"com.apple.product-type.library.static\",\nSharedLib = \"com.apple.product-type.library.dynamic\",\n}\nreturn types[node.cfg.kind]\nend\nfunction xcode.gettargettype(node)\nlocal types = {\nConsoleApp = \"\\\"compiled.mach-o.executable\\\"\",\nWindowedApp = \"wrapper.application\",\nStaticLib = \"archive.ar\",\nSharedLib = \"\\\"compiled.mach-o.dylib\\\"\",\n}\nreturn types[node.cfg.kind]\nend\nfunction xcode.getxcodeprojname(prj)\nlocal fname = premake.project.getfilename(prj, \"%%.xcodeproj\")\nreturn fname\nend\nfunction xcode.isframework(fname)\nreturn (path.getextension(fname) == \".framework\" or path.getextension(fname) == \".tbd\")\nend\nfunction xcode.newid()\nreturn string.format(\"%04X%04X%04X%04X%04X%04X\",\nmath.random(0, 32767),\nmath.random(0, 327" + "67),\nmath.random(0, 32767),\nmath.random(0, 32767),\nmath.random(0, 32767),\nmath.random(0, 32767))\nend\nfunction xcode.preparesolution(sln)\nsln.xcode = { }\nsln.xcode.platforms = premake.filterplatforms(sln, premake.action.current().valid_platforms, \"Universal\")\nfor prj in premake.solution.eachproject(sln) do\nlocal cfg = premake.getconfig(prj, prj.configurations[1], sln.xcode.platforms[1])\nlocal node = premake.tree.new(path.getname(cfg.buildtarget.bundlepath))\nnode.cfg = cfg\nnode.id = premake.xcode.newid(node, \"product\")\nnode.targetid = premake.xcode.newid(node, \"target\")\nprj.xcode = {}\nprj.xcode.projectnode = node\nend\nend\nfunction xcode.printlist(list, tag)\nif #list > 0 then\n_p(4,'%s = (', tag)\nfor _, item in ipairs(list) do\nlocal escaped_item = item:gsub(\"\\\"\", \"\\\\\\\"\")\n_p(5, '\"%s\",', escaped_item)\nend\n_p(4,');')\nend\nend\nfunction xcode.Header()\n_p('// !$*UTF8*$!')\n_p('{')\n_p(1,'archiveVersion = 1;')\n_p(1,'classes = {')\n_p(1,'};')\n_p(1,'objectVersion = 45;')\n_p(" + "1,'objects = {')\n_p('')\nend\nfunction xcode.PBXBuildFile(tr)\n_p('/* Begin PBXBuildFile section */')\ntree.traverse(tr, {\nonnode = function(node)\nif node.buildid then\n_p(2,'%s /* %s in %s */ = {isa = PBXBuildFile; fileRef = %s /* %s */; };', \nnode.buildid, node.name, xcode.getbuildcategory(node), node.id, node.name)\nend\nend\n})\n_p('/* End PBXBuildFile section */')\n_p('')\nend\nfunction xcode.PBXContainerItemProxy(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXContainerItemProxy section */')\nfor _, node in ipairs(tr.projects.children) do\n_p(2,'%s /* PBXContainerItemProxy */ = {', node.productproxyid)\n_p(3,'isa = PBXContainerItemProxy;')\n_p(3,'containerPortal = %s /* %s */;', node.id, path.getname(node.path))\n_p(3,'proxyType = 2;')\n_p(3,'remoteGlobalIDString = %s;', node.project.xcode.projectnode.id)\n_p(3,'remoteInfo = \"%s\";', node.project.xcode.projectnode.name)\n_p(2,'};')\n_p(2,'%s /* PBXContainerItemProxy */ = {', node.targetproxyid)\n_p(3,'isa = PBXContainerItemProxy;')\n_p(3,'co" + "ntainerPortal = %s /* %s */;', node.id, path.getname(node.path))\n_p(3,'proxyType = 1;')\n_p(3,'remoteGlobalIDString = %s;', node.project.xcode.projectnode.targetid)\n_p(3,'remoteInfo = \"%s\";', node.project.xcode.projectnode.name)\n_p(2,'};')\nend\n_p('/* End PBXContainerItemProxy section */')\n_p('')\nend\nend\nfunction xcode.PBXFileReference(tr,prj)\n_p('/* Begin PBXFileReference section */')\ntree.traverse(tr, {\nonleaf = function(node)\nif not node.path then\nreturn\nend\nif node.kind == \"product\" then\n_p(2,'%s /* %s */ = {isa = PBXFileReference; explicitFileType = %s; includeInIndex = 0; name = \"%s\"; path = \"%s\"; sourceTree = BUILT_PRODUCTS_DIR; };',\nnode.id, node.name, xcode.gettargettype(node), node.name, path.getname(node.cfg.buildtarget.bundlepath))\nelseif node.parent.parent == tr.projects then\nlocal relpath = path.getrelative(tr.project.location, node.parent.project.location)\n_p(2,'%s /* %s */ = {isa = PBXFileReference; lastKnownFileType = \"wrapper.pb-project\"; name = \"%s\"; path = \"" + "%s\"; sourceTree = SOURCE_ROOT; };',\nnode.parent.id, node.parent.name, node.parent.name, path.join(relpath, node.parent.name))\nelse\nlocal pth, src\nif xcode.isframework(node.path) then\nlocal nodePath = node.path\nlocal _, matchEnd, variable = string.find(nodePath, \"^%$%((.+)%)/\")\nif variable then\nnodePath = string.sub(nodePath, matchEnd + 1)\nend\nif string.find(nodePath,'/') then\nif string.find(nodePath,'^%.')then\nerror('relative paths are not currently supported for frameworks')\nend\npth = nodePath\nelseif path.getextension(nodePath)=='.tbd' then\npth = \"/usr/lib/\" .. nodePath\nelse\npth = \"/System/Library/Frameworks/\" .. nodePath\nend\nif variable then\nsrc = variable\nif string.find(pth, '^/') then\npth = string.sub(pth, 2)\nend\nelse\nsrc = \"\"\nend\nelse\nsrc = \"\"\nif node.parent.isvpath then\npth = node.cfg.name\nelse\npth = tree.getlocalpath(node)\nend\nend\nif (not prj.options.ForceCPP) then\n_p(2,'%s /* %s */ = {isa = PBXFileReference; lastKnownFileType = %s; name " + "= \"%s\"; path = \"%s\"; sourceTree = \"%s\"; };',\nnode.id, node.name, xcode.getfiletype(node), node.name, pth, src)\nelse\n_p(2,'%s /* %s */ = {isa = PBXFileReference; explicitFileType = %s; name = \"%s\"; path = \"%s\"; sourceTree = \"%s\"; };',\nnode.id, node.name, xcode.getfiletypeForced(node), node.name, pth, src)\nend\nend\nend\n})\n_p('/* End PBXFileReference section */')\n_p('')\nend\nfunction xcode.PBXFrameworksBuildPhase(tr)\n_p('/* Begin PBXFrameworksBuildPhase section */')\n_p(2,'%s /* Frameworks */ = {', tr.products.children[1].fxstageid)\n_p(3,'isa = PBXFrameworksBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr.frameworks, {\nonleaf = function(node)\n_p(4,'%s /* %s in Frameworks */,', node.buildid, node.name)\nend\n})\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(4,'%s /* %s in Frameworks */,', node.buildid, node.name)\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\n_p('/* End PBXFrameworksBuildPhase section" + " */')\n_p('')\nend\nfunction xcode.PBXGroup(tr)\n_p('/* Begin PBXGroup section */')\ntree.traverse(tr, {\nonnode = function(node)\nif (node.path and #node.children == 0) or node.kind == \"vgroup\" then\nreturn\nend\nif node.parent == tr.projects then\n_p(2,'%s /* Products */ = {', node.productgroupid)\nelse\n_p(2,'%s /* %s */ = {', node.id, node.name)\nend\n_p(3,'isa = PBXGroup;')\n_p(3,'children = (')\nfor _, childnode in ipairs(node.children) do\n_p(4,'%s /* %s */,', childnode.id, childnode.name)\nend\n_p(3,');')\nif node.parent == tr.projects then\n_p(3,'name = Products;')\nelse\n_p(3,'name = \"%s\";', node.name)\nif node.path and not node.isvpath then\nlocal p = node.path\nif node.parent.path then\np = path.getrelative(node.parent.path, node.path)\nend\n_p(3,'path = \"%s\";', p)\nend\nend\n_p(3,'sourceTree = \"\";')\n_p(2,'};')\nend\n}, true)\n_p('/* End PBXGroup section */')\n_p('')\nend\nfunction xcode.PBXNativeTarget(tr)\n_p('/* Begin PBXNativeTarget section */')\nfor _, node in ipairs(tr.product" + "s.children) do\nlocal name = tr.project.name\nlocal function hasBuildCommands(which)\nif #tr.project[which] > 0 then\nreturn true\nend\nfor _, cfg in ipairs(tr.configs) do\nif #cfg[which] > 0 then\nreturn true\nend\nend\nend\n_p(2,'%s /* %s */ = {', node.targetid, name)\n_p(3,'isa = PBXNativeTarget;')\n_p(3,'buildConfigurationList = %s /* Build configuration list for PBXNativeTarget \"%s\" */;', node.cfgsection, name)\n_p(3,'buildPhases = (')\nif hasBuildCommands('prebuildcommands') then\n_p(4,'9607AE1010C857E500CD1376 /* Prebuild */,')\nend\n_p(4,'%s /* Resources */,', node.resstageid)\n_p(4,'%s /* Sources */,', node.sourcesid)\nif hasBuildCommands('prelinkcommands') then\n_p(4,'9607AE3510C85E7E00CD1376 /* Prelink */,')\nend\n_p(4,'%s /* Frameworks */,', node.fxstageid)\nif hasBuildCommands('postbuildcommands') then\n_p(4,'9607AE3710C85E8F00CD1376 /* Postbuild */,')\nend\n_p(3,');')\n_p(3,'buildRules = (')\n_p(3,');')\n_p(3,'dependencies = (')\nfor _, node in ipairs(tr.projects.children) do\n_p(4,'%s /* PBXTa" + "rgetDependency */,', node.targetdependid)\nend\n_p(3,');')\n_p(3,'name = \"%s\";', name)\nlocal p\nif node.cfg.kind == \"ConsoleApp\" then\np = \"$(HOME)/bin\"\nelseif node.cfg.kind == \"WindowedApp\" then\np = \"$(HOME)/Applications\"\nend\nif p then\n_p(3,'productInstallPath = \"%s\";', p)\nend\n_p(3,'productName = \"%s\";', name)\n_p(3,'productReference = %s /* %s */;', node.id, node.name)\n_p(3,'productType = \"%s\";', xcode.getproducttype(node))\n_p(2,'};')\nend\n_p('/* End PBXNativeTarget section */')\n_p('')\nend\nfunction xcode.PBXProject(tr)\n_p('/* Begin PBXProject section */')\n_p(2,'08FB7793FE84155DC02AAC07 /* Project object */ = {')\n_p(3,'isa = PBXProject;')\n_p(3,'buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */;', tr.name)\n_p(3,'compatibilityVersion = \"Xcode 3.2\";')\n_p(3,'hasScannedForEncodings = 1;')\n_p(3,'mainGroup = %s /* %s */;', tr.id, tr.name)\n_p(3,'projectDirPath = \"\";')\nif #tr.projects.children > 0 then\n_p(3,'projectReferen" + "ces = (')\nfor _, node in ipairs(tr.projects.children) do\n_p(4,'{')\n_p(5,'ProductGroup = %s /* Products */;', node.productgroupid)\n_p(5,'ProjectRef = %s /* %s */;', node.id, path.getname(node.path))\n_p(4,'},')\nend\n_p(3,');')\nend\n_p(3,'projectRoot = \"\";')\n_p(3,'targets = (')\nfor _, node in ipairs(tr.products.children) do\n_p(4,'%s /* %s */,', node.targetid, node.name)\nend\n_p(3,');')\n_p(2,'};')\n_p('/* End PBXProject section */')\n_p('')\nend\nfunction xcode.PBXReferenceProxy(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXReferenceProxy section */')\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* %s */ = {', node.id, node.name)\n_p(3,'isa = PBXReferenceProxy;')\n_p(3,'fileType = %s;', xcode.gettargettype(node))\n_p(3,'path = \"%s\";', node.path)\n_p(3,'remoteRef = %s /* PBXContainerItemProxy */;', node.parent.productproxyid)\n_p(3,'sourceTree = BUILT_PRODUCTS_DIR;')\n_p(2,'};')\nend\n})\n_p('/* End PBXReferenceProxy section */')\n_p('')\nend\nend\nfunction xcode.PBXRes" + "ourcesBuildPhase(tr)\n_p('/* Begin PBXResourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Resources */ = {', target.resstageid)\n_p(3,'isa = PBXResourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonnode = function(node)\nif xcode.getbuildcategory(node) == \"Resources\" then\n_p(4,'%s /* %s in Resources */,', node.buildid, node.name)\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXResourcesBuildPhase section */')\n_p('')\nend\nfunction xcode.PBXShellScriptBuildPhase(tr)\nlocal wrapperWritten = false\nlocal function doblock(id, name, which)\nlocal prjcmds = tr.project[which]\nlocal commands = table.join(prjcmds, {})\nfor _, cfg in ipairs(tr.configs) do\nlocal cfgcmds = cfg[which]\nif #cfgcmds > #prjcmds then\ntable.insert(commands, 'if [ \"${CONFIGURATION}\" = \"' .. xcode.getconfigname(cfg) .. '\" ]; then')\nfor i = #prjcmds + 1, #cfgcmds do\nlocal cmd = cfgcm" + "ds[i]\ncmd = cmd:gsub('\\\\','\\\\\\\\')\ntable.insert(commands, cmd)\nend\ntable.insert(commands, 'fi')\nend\nend\nif #commands > 0 then\nif not wrapperWritten then\n_p('/* Begin PBXShellScriptBuildPhase section */')\nwrapperWritten = true\nend\n_p(2,'%s /* %s */ = {', id, name)\n_p(3,'isa = PBXShellScriptBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\n_p(3,');')\n_p(3,'inputPaths = (');\n_p(3,');');\n_p(3,'name = %s;', name);\n_p(3,'outputPaths = (');\n_p(3,');');\n_p(3,'runOnlyForDeploymentPostprocessing = 0;');\n_p(3,'shellPath = /bin/sh;');\n_p(3,'shellScript = \"%s\";', table.concat(commands, \"\\\\n\"):gsub('\"', '\\\\\"'))\n_p(2,'};')\nend\nend\ndoblock(\"9607AE1010C857E500CD1376\", \"Prebuild\", \"prebuildcommands\")\ndoblock(\"9607AE3510C85E7E00CD1376\", \"Prelink\", \"prelinkcommands\")\ndoblock(\"9607AE3710C85E8F00CD1376\", \"Postbuild\", \"postbuildcommands\")\nif wrapperWritten then\n_p('/* End PBXShellScriptBuildPhase section */')\nend\nend\nfunction xcode.PBXSourcesBuil" + "dPhase(tr,prj)\n_p('/* Begin PBXSourcesBuildPhase section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Sources */ = {', target.sourcesid)\n_p(3,'isa = PBXSourcesBuildPhase;')\n_p(3,'buildActionMask = 2147483647;')\n_p(3,'files = (')\ntree.traverse(tr, {\nonleaf = function(node)\nif xcode.getbuildcategory(node) == \"Sources\" then\n if not table.icontains(prj.excludes, node.cfg.name) then -- if not excluded\n_p(4,'%s /* %s in Sources */,', node.buildid, node.name)\n end\nend\nend\n})\n_p(3,');')\n_p(3,'runOnlyForDeploymentPostprocessing = 0;')\n_p(2,'};')\nend\n_p('/* End PBXSourcesBuildPhase section */')\n_p('')\nend\nfunction xcode.PBXVariantGroup(tr)\n_p('/* Begin PBXVariantGroup section */')\ntree.traverse(tr, {\nonbranch = function(node)\nif node.kind == \"vgroup\" then\n_p(2,'%s /* %s */ = {', node.id, node.name)\n_p(3,'isa = PBXVariantGroup;')\n_p(3,'children = (')\nfor _, lang in ipairs(node.children) do\n_p(4,'%s /* %s */,', lang.id, lang.name)\nend" + "\n_p(3,');')\n_p(3,'name = %s;', node.name)\n_p(3,'sourceTree = \"\";')\n_p(2,'};')\nend\nend\n})\n_p('/* End PBXVariantGroup section */')\n_p('')\nend\nfunction xcode.PBXTargetDependency(tr)\nif #tr.projects.children > 0 then\n_p('/* Begin PBXTargetDependency section */')\ntree.traverse(tr.projects, {\nonleaf = function(node)\n_p(2,'%s /* PBXTargetDependency */ = {', node.parent.targetdependid)\n_p(3,'isa = PBXTargetDependency;')\n_p(3,'name = \"%s\";', node.name)\n_p(3,'targetProxy = %s /* PBXContainerItemProxy */;', node.parent.targetproxyid)\n_p(2,'};')\nend\n})\n_p('/* End PBXTargetDependency section */')\n_p('')\nend\nend\nfunction xcode.XCBuildConfiguration_Target(tr, target, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.targetid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p(3,'buildSettings = {')\n_p(4,'ALWAYS_SEARCH_USER_PATHS = NO;')\nif not cfg.flags.Symbols then\n_p(4,'DEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";')\nend\nif cfg.kind ~= \"StaticLib" + "\" and cfg.buildtarget.prefix ~= \"\" then\n_p(4,'EXECUTABLE_PREFIX = %s;', cfg.buildtarget.prefix)\nend\nif cfg.targetextension then\nlocal ext = cfg.targetextension\next = iif(ext:startswith(\".\"), ext:sub(2), ext)\n_p(4,'EXECUTABLE_EXTENSION = %s;', ext)\nend\nlocal outdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif outdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = %s;', outdir)\nend\n_p(4,'GCC_DYNAMIC_NO_PIC = NO;')\n_p(4,'GCC_MODEL_TUNING = G5;')\nif tr.infoplist then\n_p(4,'INFOPLIST_FILE = \"%s\";', tr.infoplist.cfg.name)\nend\ninstallpaths = {\nConsoleApp = '/usr/local/bin',\nWindowedApp = '\"$(HOME)/Applications\"',\nSharedLib = '/usr/local/lib',\nStaticLib = '/usr/local/lib',\n}\n_p(4,'INSTALL_PATH = %s;', installpaths[cfg.kind])\nlocal infoplist_file = nil\nfor _, v in ipairs(cfg.files) do\nif (string.find (string.lower (v), 'info.plist') ~= nil) then\ninfoplist_file = string.format('$(SRCROOT)/%s', v)\nend\nend\nif infoplist_file ~= nil then\n_p(4,'INFOPLIST_FILE = \"%s\";', infoplist_" + "file)\nend\n_p(4,'PRODUCT_NAME = \"%s\";', cfg.buildtarget.basename)\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nfunction xcode.XCBuildConfiguration_Project(tr, cfg)\nlocal cfgname = xcode.getconfigname(cfg)\n_p(2,'%s /* %s */ = {', cfg.xcode.projectid, cfgname)\n_p(3,'isa = XCBuildConfiguration;')\n_p(3,'buildSettings = {')\nlocal archs = {\nNative = \"$(NATIVE_ARCH_ACTUAL)\",\nx32 = \"i386\",\nx64 = \"x86_64\",\nUniversal32 = \"$(ARCHS_STANDARD_32_BIT)\",\nUniversal64 = \"$(ARCHS_STANDARD_64_BIT)\",\nUniversal = \"$(ARCHS_STANDARD_32_64_BIT)\",\n}\n_p(4,'ARCHS = \"%s\";', archs[cfg.platform])\n_p(4,'SDKROOT = \"%s\";', xcode.toolset)\nif tr.entitlements then\n_p(4,'CODE_SIGN_ENTITLEMENTS = \"%s\";', tr.entitlements.cfg.name)\nend\nlocal targetdir = path.getdirectory(cfg.buildtarget.bundlepath)\nif targetdir ~= \".\" then\n_p(4,'CONFIGURATION_BUILD_DIR = \"$(SYMROOT)\";');\nend\n_p(4,'CONFIGURATION_TEMP_DIR = \"$(OBJROOT)\";')\nif cfg.flags.Symbols then\n_p(4,'COPY_PHASE_STRIP = NO;')" + "\nend\n_p(4,'GCC_C_LANGUAGE_STANDARD = gnu99;')\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_CPP_EXCEPTIONS = NO;')\nend\nif cfg.flags.NoRTTI then\n_p(4,'GCC_ENABLE_CPP_RTTI = NO;')\nend\nif _ACTION ~= \"xcode4\" and cfg.flags.Symbols and not cfg.flags.NoEditAndContinue then\n_p(4,'GCC_ENABLE_FIX_AND_CONTINUE = YES;')\nend\nif cfg.flags.NoExceptions then\n_p(4,'GCC_ENABLE_OBJC_EXCEPTIONS = NO;')\nend\nif cfg.flags.Optimize or cfg.flags.OptimizeSize then\n_p(4,'GCC_OPTIMIZATION_LEVEL = s;')\nelseif cfg.flags.OptimizeSpeed then\n_p(4,'GCC_OPTIMIZATION_LEVEL = 3;')\nelse\n_p(4,'GCC_OPTIMIZATION_LEVEL = 0;')\nend\nif cfg.pchheader and not cfg.flags.NoPCH then\n_p(4,'GCC_PRECOMPILE_PREFIX_HEADER = YES;')\n_p(4,'GCC_PREFIX_HEADER = \"%s\";', cfg.pchheader)\nend\nxcode.printlist(cfg.defines, 'GCC_PREPROCESSOR_DEFINITIONS')\n_p(4,'GCC_SYMBOLS_PRIVATE_EXTERN = NO;')\nif cfg.flags.FatalWarnings then\n_p(4,'GCC_TREAT_WARNINGS_AS_ERRORS = YES;')\nend\n_p(4,'GCC_WARN_ABOUT_RETURN_TYPE = YES;')\n_p(4,'GCC_WARN_UNUSED_V" + "ARIABLE = YES;')\nxcode.printlist(cfg.includedirs, 'HEADER_SEARCH_PATHS')\nxcode.printlist(cfg.userincludedirs, 'USER_HEADER_SEARCH_PATHS')\nxcode.printlist(cfg.libdirs, 'LIBRARY_SEARCH_PATHS')\n_p(4,'OBJROOT = \"%s\";', cfg.objectsdir)\n_p(4,'ONLY_ACTIVE_ARCH = %s;',iif(premake.config.isdebugbuild(cfg),'YES','NO'))\nlocal checks = {\n[\"-ffast-math\"] = cfg.flags.FloatFast,\n[\"-ffloat-store\"] = cfg.flags.FloatStrict,\n[\"-fomit-frame-pointer\"] = cfg.flags.NoFramePointer,\n}\nlocal flags = { }\nfor flag, check in pairs(checks) do\nif check then\ntable.insert(flags, flag)\nend\nend\nfor _, val in ipairs(premake.xcode.parameters) do\n_p(4, val ..';')\nend\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_c), 'OTHER_CFLAGS')\nxcode.printlist(table.join(flags, cfg.buildoptions, cfg.buildoptions_cpp), 'OTHER_CPLUSPLUSFLAGS')\nflags = { }\nfor _, lib in ipairs(premake.getlinks(cfg, \"system\")) do\nif not xcode.isframework(lib) then\ntable.insert(flags, \"-l\" .. lib)\nend\nend" + "\nflags = table.join(flags, cfg.linkoptions)\nxcode.printlist(flags, 'OTHER_LDFLAGS')\nif cfg.flags.StaticRuntime then\n_p(4,'STANDARD_C_PLUS_PLUS_LIBRARY_TYPE = static;')\nend\nif targetdir ~= \".\" then\n_p(4,'SYMROOT = \"%s\";', targetdir)\nend\nif cfg.flags.ExtraWarnings then\n_p(4,'WARNING_CFLAGS = \"-Wall\";')\nend\n_p(3,'};')\n_p(3,'name = \"%s\";', cfgname)\n_p(2,'};')\nend\nfunction xcode.XCBuildConfiguration(tr)\n_p('/* Begin XCBuildConfiguration section */')\nfor _, target in ipairs(tr.products.children) do\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Target(tr, target, cfg)\nend\nend\nfor _, cfg in ipairs(tr.configs) do\nxcode.XCBuildConfiguration_Project(tr, cfg)\nend\n_p('/* End XCBuildConfiguration section */')\n_p('')\nend\nfunction xcode.XCBuildConfigurationList(tr)\nlocal sln = tr.project.solution\n_p('/* Begin XCConfigurationList section */')\nfor _, target in ipairs(tr.products.children) do\n_p(2,'%s /* Build configuration list for PBXNativeTarget \"%s\" */ = {', target." + "cfgsection, target.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.targetid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\nend\n_p(2,'1DEB928908733DD80010E9CD /* Build configuration list for PBXProject \"%s\" */ = {', tr.name)\n_p(3,'isa = XCConfigurationList;')\n_p(3,'buildConfigurations = (')\nfor _, cfg in ipairs(tr.configs) do\n_p(4,'%s /* %s */,', cfg.xcode.projectid, xcode.getconfigname(cfg))\nend\n_p(3,');')\n_p(3,'defaultConfigurationIsVisible = 0;')\n_p(3,'defaultConfigurationName = \"%s\";', xcode.getconfigname(tr.configs[1]))\n_p(2,'};')\n_p('/* End XCConfigurationList section */')\n_p('')\nend\nfunction xcode.Footer()\n_p(1,'};')\n_p('\\trootObject = 08FB7793FE84155DC02AAC07 /* Project object */;')\n_p('}')\nend\n", /* actions/xcode/xcode_project.lua */ - "local xcode = premake.xcode\nlocal tree = premake.tree\nfunction xcode.buildprjtree(prj)\nlocal tr = premake.project.buildsourcetree(prj)\ntr.configs = {}\nfor _, cfgname in ipairs(prj.solution.configurations) do\nfor _, platform in ipairs(prj.solution.xcode.platforms) do\nlocal cfg = premake.getconfig(prj, cfgname, platform)\ncfg.xcode = {}\ncfg.xcode.targetid = xcode.newid(prj.xcode.projectnode, cfgname)\ncfg.xcode.projectid = xcode.newid(tr, cfgname)\ntable.insert(tr.configs, cfg)\nend\nend\ntree.traverse(tr, {\nonbranch = function(node)\nif path.getextension(node.name) == \".lproj\" then\nlocal lang = path.getbasename(node.name) -- \"English\", \"French\", etc.\nfor _, filenode in ipairs(node.children) do\nlocal grpnode = node.parent.children[filenode.name]\nif not grpnode then\ngrpnode = tree.insert(node.parent, tree.new(filenode.name))\ngrpnode.kind = \"vgroup\"\nend\nfilenode.name = path.getbasename(lang)\ntree.insert(grpnode, filenode)\nend\ntree.remove(node)\nend\nend\n})\ntr.frameworks = tree.new(\"" - "Frameworks\")\nfor cfg in premake.eachconfig(prj) do\nfor _, link in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nlocal name = path.getname(link)\nif xcode.isframework(name) and not tr.frameworks.children[name] then\nnode = tree.insert(tr.frameworks, tree.new(name))\nnode.path = link\nend\nend\nend\nif #tr.frameworks.children > 0 then \ntree.insert(tr, tr.frameworks)\nend\ntr.products = tree.insert(tr, tree.new(\"Products\"))\ntr.projects = tree.new(\"Projects\")\nfor _, dep in ipairs(premake.getdependencies(prj, \"sibling\", \"object\")) do\nlocal xcpath = xcode.getxcodeprojname(dep)\nlocal xcnode = tree.insert(tr.projects, tree.new(path.getname(xcpath)))\nxcnode.path = xcpath\nxcnode.project = dep\nxcnode.productgroupid = xcode.newid(xcnode, \"prodgrp\")\nxcnode.productproxyid = xcode.newid(xcnode, \"prodprox\")\nxcnode.targetproxyid = xcode.newid(xcnode, \"targprox\")\nxcnode.targetdependid = xcode.newid(xcnode, \"targdep\")\nlocal cfg = premake.getconfig(dep, prj.configurations[1])\nnode = " - "tree.insert(xcnode, tree.new(cfg.linktarget.name))\nnode.path = cfg.linktarget.fullpath\nnode.cfg = cfg\nend\nif #tr.projects.children > 0 then\ntree.insert(tr, tr.projects)\nend\ntree.traverse(tr, {\nonnode = function(node)\nnode.id = xcode.newid(node)\nif xcode.getbuildcategory(node) then\nnode.buildid = xcode.newid(node, \"build\")\nend\nif string.endswith(node.name, \"Info.plist\") then\ntr.infoplist = node\nend\nend\n}, true)\nnode = tree.insert(tr.products, prj.xcode.projectnode)\nnode.kind = \"product\"\nnode.path = node.cfg.buildtarget.fullpath\nnode.cfgsection = xcode.newid(node, \"cfg\")\nnode.resstageid = xcode.newid(node, \"rez\")\nnode.sourcesid = xcode.newid(node, \"src\")\nnode.fxstageid = xcode.newid(node, \"fxs\")\nreturn tr\nend\nfunction premake.xcode.project(prj)\nlocal tr = xcode.buildprjtree(prj)\nxcode.Header(tr)\nxcode.PBXBuildFile(tr)\nxcode.PBXContainerItemProxy(tr)\nxcode.PBXFileReference(tr,prj)\nxcode.PBXFrameworksBuildPhase(tr)\nxcode.PBXGroup(tr)\nxcode.PBXNativeTarget(tr)\nxco" - "de.PBXProject(tr)\nxcode.PBXReferenceProxy(tr)\nxcode.PBXResourcesBuildPhase(tr)\nxcode.PBXShellScriptBuildPhase(tr)\nxcode.PBXSourcesBuildPhase(tr,prj)\nxcode.PBXVariantGroup(tr)\nxcode.PBXTargetDependency(tr)\nxcode.XCBuildConfiguration(tr)\nxcode.XCBuildConfigurationList(tr)\nxcode.Footer(tr)\nend\n", + "local xcode = premake.xcode\nlocal tree = premake.tree\nfunction xcode.buildprjtree(prj)\nlocal tr = premake.project.buildsourcetree(prj)\ntr.configs = {}\nfor _, cfgname in ipairs(prj.solution.configurations) do\nfor _, platform in ipairs(prj.solution.xcode.platforms) do\nlocal cfg = premake.getconfig(prj, cfgname, platform)\ncfg.xcode = {}\ncfg.xcode.targetid = xcode.newid(prj.xcode.projectnode, cfgname)\ncfg.xcode.projectid = xcode.newid(tr, cfgname)\ntable.insert(tr.configs, cfg)\nend\nend\ntree.traverse(tr, {\nonbranch = function(node)\nif path.getextension(node.name) == \".lproj\" then\nlocal lang = path.getbasename(node.name) -- \"English\", \"French\", etc.\nfor _, filenode in ipairs(node.children) do\nlocal grpnode = node.parent.children[filenode.name]\nif not grpnode then\ngrpnode = tree.insert(node.parent, tree.new(filenode.name))\ngrpnode.kind = \"vgroup\"\nend\nfilenode.name = path.getbasename(lang)\ntree.insert(grpnode, filenode)\nend\ntree.remove(node)\nend\nend\n})\ntree.traverse(tr, {\nonbran" + "ch = function(node)\nif path.getextension(node.name) == \".xcassets\" then\nnode.children = {}\nend\nend\n})\ntr.frameworks = tree.new(\"Frameworks\")\nfor cfg in premake.eachconfig(prj) do\nfor _, link in ipairs(premake.getlinks(cfg, \"system\", \"fullpath\")) do\nlocal name = path.getname(link)\nif xcode.isframework(name) and not tr.frameworks.children[name] then\nnode = tree.insert(tr.frameworks, tree.new(name))\nnode.path = link\nend\nend\nend\nif #tr.frameworks.children > 0 then \ntree.insert(tr, tr.frameworks)\nend\ntr.products = tree.insert(tr, tree.new(\"Products\"))\ntr.projects = tree.new(\"Projects\")\nfor _, dep in ipairs(premake.getdependencies(prj, \"sibling\", \"object\")) do\nlocal xcpath = xcode.getxcodeprojname(dep)\nlocal xcnode = tree.insert(tr.projects, tree.new(path.getname(xcpath)))\nxcnode.path = xcpath\nxcnode.project = dep\nxcnode.productgroupid = xcode.newid(xcnode, \"prodgrp\")\nxcnode.productproxyid = xcode.newid(xcnode, \"prodprox\")\nxcnode.targetproxyid = xcode.newid(xcnode, \"" + "targprox\")\nxcnode.targetdependid = xcode.newid(xcnode, \"targdep\")\nlocal cfg = premake.getconfig(dep, prj.configurations[1])\nnode = tree.insert(xcnode, tree.new(cfg.linktarget.name))\nnode.path = cfg.linktarget.fullpath\nnode.cfg = cfg\nend\nif #tr.projects.children > 0 then\ntree.insert(tr, tr.projects)\nend\ntree.traverse(tr, {\nonnode = function(node)\nnode.id = xcode.newid(node)\nif xcode.getbuildcategory(node) then\nnode.buildid = xcode.newid(node, \"build\")\nend\nif string.endswith(node.name, \"Info.plist\") then\ntr.infoplist = node\nend\nif string.endswith(node.name, \".entitlements\") then\ntr.entitlements = node\nend\nend\n}, true)\nnode = tree.insert(tr.products, prj.xcode.projectnode)\nnode.kind = \"product\"\nnode.path = node.cfg.buildtarget.fullpath\nnode.cfgsection = xcode.newid(node, \"cfg\")\nnode.resstageid = xcode.newid(node, \"rez\")\nnode.sourcesid = xcode.newid(node, \"src\")\nnode.fxstageid = xcode.newid(node, \"fxs\")\nreturn tr\nend\nfunction premake.xcode.project(prj)\nlocal t" + "r = xcode.buildprjtree(prj)\nxcode.Header(tr)\nxcode.PBXBuildFile(tr)\nxcode.PBXContainerItemProxy(tr)\nxcode.PBXFileReference(tr,prj)\nxcode.PBXFrameworksBuildPhase(tr)\nxcode.PBXGroup(tr)\nxcode.PBXNativeTarget(tr)\nxcode.PBXProject(tr)\nxcode.PBXReferenceProxy(tr)\nxcode.PBXResourcesBuildPhase(tr)\nxcode.PBXShellScriptBuildPhase(tr)\nxcode.PBXSourcesBuildPhase(tr,prj)\nxcode.PBXVariantGroup(tr)\nxcode.PBXTargetDependency(tr)\nxcode.XCBuildConfiguration(tr)\nxcode.XCBuildConfigurationList(tr)\nxcode.Footer(tr)\nend\n", /* actions/xcode/xcode4_workspace.lua */ "premake.xcode4 = {}\nlocal xcode4 = premake.xcode4\nfunction xcode4.workspace_head()\n_p('')\n_p('')\nend\nfunction xcode4.workspace_tail()\n_p('')\nend\nfunction xcode4.workspace_file_ref(prj)\nlocal projpath = path.getrelative(prj.solution.location, prj.location)\nif projpath == '.' then projpath = '' \nelse projpath = projpath ..'/' \nend\n_p(1,'',projpath .. prj.name .. '.xcodeproj')\n_p(1,'')\nend\nfunction xcode4.workspace_generate(sln)\npremake.xcode.preparesolution(sln)\nxcode4.workspace_head()\nxcode4.reorderProjects(sln)\nfor prj in premake.solution.eachproject(sln) do\nxcode4.workspace_file_ref(prj)\nend\nxcode4.workspace_tail()\nend\nfunction xcode4.reorderProjects(sln)\nif sln.startproject then\nfor i, prj in ipairs(sln.projects) do\nif sln.startproject == prj.name then\nlocal cur = prj.group\nwhile cur ~= nil do\nfor j, group in ipairs(sln.groups) do\nif " @@ -390,23 +409,46 @@ const char* builtin_scripts[] = { "premake.fastbuild = { }\nlocal fastbuild = premake.fastbuild\nnewaction\n{\ntrigger = \"vs2015-fastbuild\",\nshortname = \"FASTBuild VS2015\",\ndescription = \"Generate FASTBuild configuration files for Visual Studio 2015.\",\nvalid_kinds = {\n\"ConsoleApp\",\n\"WindowedApp\",\n\"SharedLib\",\n\"StaticLib\"\n},\nvalid_languages = {\n\"C\",\n\"C++\"\n},\nvalid_tools = {\ncc = {\n\"msc\"\n},\n},\nonsolution = function(sln)\npremake.generate(sln, \"fbuild.bff\", premake.fastbuild.solution)\nend,\nonproject = function(prj)\npremake.generate(prj, \"%%.bff\", premake.fastbuild.project)\nend,\noncleansolution = function(sln)\npremake.clean.file(sln, \"fbuild.bff\")\nend,\noncleanproject = function(prj)\npremake.clean.file(prj, \"%%.bff\")\nend,\n}\n", /* actions/fastbuild/fastbuild_project.lua */ - "-- Generates a FastBuild config file for a project\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nlocal function compile(indentlevel, prj, cfg)\nlocal firstflag = true\nfor _, cfgexclude in ipairs(cfg.excludes) do\nif path.iscppfile(cfgexclude) then\nif firstflag then\n_p(indentlevel, '// Excluded files:')\nfirstflag = false\nend\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfgexclude)\nend\nend\nif not firstflag then\n_p('')\nend\n_p(indentlevel, \".CompilerOutputPath = '%s'\", add_trailing_backslash(cfg.objectsdir))\n_p(indentlevel, \".Defines = ''\")\nfor _, define in ipairs(cfg.defines) do\n_p(indentlevel, \" + ' /D%s'\", define)\nend\nif cfg.kind == 'SharedLib' then\n_p(indentlevel, \" + ' /D_WINDLL'\")\nend\n_p(indentlevel, \".IncludeDirs = ''\")\nfor _, includedir in ipairs(cfg.includedirs) do\n_p(indentlevel, \" + ' /I\\\"%s\\\"'\", includedir)\nend\n_p(indentlevel, \" " - " + .MSVCIncludes\")\nlocal compileroptions = {\n'\"%1\"',\n'/nologo',\n'/c',\n'/Gy',\n'/Gm-',\n'/Zc:inline',\n'/errorReport:prompt',\n'/FS',\n}\nif cfg.flags.ExtraWarnings then\ntable.insert(compileroptions, '/W4')\nend\nif (cfg.flags.NativeWChar == false or\ncfg.flags.NoNativeWChar) then\ntable.insert(compileroptions, '/Zc:wchar_t-')\nend\nif (cfg.flags.EnableMinimalRebuild or\ncfg.flags.NoMultiProcessorCompilation) then\nos.exit(1) -- Not compatible with FastBuild\nend\nif cfg.flags.FloatFast then\ntable.insert(compileroptions, '/fp:fast')\nelseif cfg.flags.FloatStrict then\ntable.insert(compileroptions, '/fp:strict')\nelse\ntable.insert(compileroptions, '/fp:precise')\nend\nif cfg.flags.FastCall then\ntable.insert(compileroptions, '/Gr')\nelseif cfg.flags.StdCall then\ntable.insert(compileroptions, '/Gd')\nend\nif cfg.flags.UnsignedChar then\ntable.insert(compileroptions, '/J')\nend\nif premake.config.isdebugbuild(cfg) then\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MTd')\nelse\nta" - "ble.insert(compileroptions, '/MDd')\nend\nelse\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MT')\nelse\ntable.insert(compileroptions, '/MD')\nend\nend\nif cfg.flags.Symbols then\nif (premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue) then\ntable.insert(compileroptions, '/Zi')\nelse\ntable.insert(compileroptions, '/ZI')\nend\nlocal targetdir = add_trailing_backslash(cfg.buildtarget.directory)\ntable.insert(compileroptions, string.format(\"/Fd\\\"%s%s.pdb\\\"\", targetdir, cfg.buildtarget.basename))\nend\nlocal isoptimised = true\nif (cfg.flags.Optimize) then\ntable.insert(compileroptions, '/Ox')\nelseif (cfg.flags.OptimizeSize) then\ntable.insert(compileroptions, '/O1')\nelseif (cfg.flags.OptimizeSpeed) then\ntable.insert(compileroptions, '/O2')\nelse\nisoptimised = false\nend\nif isoptimised then\ntable.insert(compileroptions, '/GF')\nelse\ntable.insert(compileroptions, '/Od')\ntable.insert(compileroptions, '/RTC1')\nend\nif cfg.flags.FatalWarnings then\ntable.inse" - "rt(compileroptions, '/WX')\nelse\ntable.insert(compileroptions, '/WX-')\nend\nif cfg.platform == 'x32' then\nif cfg.flags.EnableSSE2 then\ntable.insert(compileroptions, '/arch:SSE2')\nelseif cfg.flags.EnableSSE then\ntable.insert(compileroptions, '/arch:SSE')\nend\nend\nfor _, addloption in ipairs(cfg.buildoptions) do\ntable.insert(compileroptions, addloption)\nend\n_p(indentlevel, \".CompilerOptions = ''\")\nfor _, option in ipairs(compileroptions) do\n_p(indentlevel, \" + ' %s'\", option)\nend\n_p(indentlevel, \" + .IncludeDirs\")\n_p(indentlevel, \" + .Defines\")\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHInputFile = '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHOutputFile = .CompilerOutputPath + '%s.pch'\", prj.name)\n_p(indentlevel, \".CompilerOptions + ' /Fp\\\"' + .CompilerOutputPath + '%s.pch\\\"'\", prj.name)\n_p(indentlevel, \".PCHOptions = .CompilerOptions\")\n_p" - "(indentlevel, \" + ' /Yc\\\"%s\\\"'\", cfg.pchheader)\n_p(indentlevel, \" + ' /Fo\\\"%%3\\\"'\")\n_p(indentlevel, \".CompilerOptions + ' /Yu\\\"%s\\\"'\", cfg.pchheader)\nend\n_p(indentlevel, \" + ' /Fo\\\"%%2\\\"'\") -- make sure the previous property is .CompilerOptions\nend\nlocal function library(prj, cfg, useconfig)\n_p(1, \"Library('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg)\nlocal librarianoptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n}\nif cfg.platform == 'x64' then\ntable.insert(librarianoptions, '/MACHINE:X64')\nelse\ntable.insert(librarianoptions, '/MACHINE:X86')\nend\n_p(2, \".LibrarianOptions = ''\")\nfor _, option in ipairs(librarianoptions) do\n_p(2, \" + ' %s'\", option)\nend\n_p(2, \".LibrarianOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function binary(prj, cfg, useconfig, bintype)\n_p(1, \"ObjectList('%s_obj-%s-%s')\", prj.name, cfg.name, cfg.platfor" - "m)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg)\n_p(1, '}')\n_p('')\n_p(1, \"%s('%s-%s-%s')\", bintype, prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\n_p(2, '.Libraries = {')\n_p(3, \"'%s_obj-%s-%s',\", prj.name, cfg.name, cfg.platform) -- Refer to the ObjectList\nfor _, deplib in ipairs(premake.getlinks(cfg, \"dependencies\", \"basename\")) do\n_p(3, \"'%s-%s-%s',\", deplib, cfg.name, cfg.platform)\nend\n_p(3, '}')\n_p(2, '.LinkerLinkObjects = false')\nlocal linkeroptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n'/errorReport:prompt',\n}\nlocal subsystemversion = '\",5.02\"'\nif cfg.platform == 'x32' then\nsubsystemversion = '\",5.01\"'\nend\nif cfg.kind == 'ConsoleApp' then\ntable.insert(linkeroptions, '/SUBSYSTEM:CONSOLE'..subsystemversion)\nelse\ntable.insert(linkeroptions, '/SUBSYSTEM:WINDOWS'..subsystemversion)\nend\nif cfg.kind == 'SharedLib' then\ntable.insert(linkeroptions, '/DLL')\nend\nif cfg.platform == 'x64' then\ntable.insert(linkeroptions, '/MACHINE:X64')\nelse\ntable.insert(" - "linkeroptions, '/MACHINE:X86')\nend\nfor _, libdir in ipairs(cfg.libdirs) do\ntable.insert(linkeroptions, string.format('/LIBPATH:%s', path.translate(libdir, '\\\\')))\nend\nif not cfg.flags.WinMain and (cfg.kind == 'ConsoleApp' or cfg.kind == 'WindowedApp') then\nif cfg.flags.Unicode then\ntable.insert(linkeroptions, '/ENTRY:wmainCRTStartup')\nelse\ntable.insert(linkeroptions, '/ENTRY:mainCRTStartup')\nend\nend\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\ntable.insert(linkeroptions, '/DEF:%s', deffile)\nend\nif premake.config.isoptimizedbuild(cfg.flags) then\ntable.insert(linkeroptions, '/OPT:REF')\ntable.insert(linkeroptions, '/OPT:ICF')\nend\ntable.insert(linkeroptions, '/INCREMENTAL'..((premake.config.isincrementallink(cfg) and '') or ':NO'))\nfor _, addloption in ipairs(cfg.linkoptions) do\ntable.insert(linkeroptions, addloption)\nend\nlocal linklibs = premake.getlinks(cfg, \"all\", \"fullpath\")\nfor _, linklib in ipairs(linklibs) do\ntable.insert(linkeroptions, path.getname(linklib" - "))\nend\n_p(2, \".LinkerOptions = ''\")\nfor _, option in ipairs(linkeroptions) do\n_p(2, \" + ' %s'\", option)\nend\n_p(2, \" + .MSVCLibPaths\")\n_p(2, \".LinkerOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function executable(prj, cfg, useconfig)\nbinary(prj, cfg, useconfig, 'Executable')\nend\nlocal function dll(prj, cfg, useconfig)\nbinary(prj, cfg, useconfig, 'DLL')\nend\nlocal function alias(prj, cfg, target)\n_p(1, \"Alias('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\n_p(2, \".Targets = '%s'\", target)\n_p(1, '}')\n_p('')\nend\nfunction premake.fastbuild.project(prj)\nio.indent = ' '\n_p('// FastBuild project configuration file. Generated by GENie.')\n_p('//------------------------------------------------------------------------------------')\n_p('// %s', prj.name)\n_p('//------------------------------------------------------------------------------------')\n_p('')\n_p('{')\nlocal cppfiles = {}\nfor file in premake.project.each" - "file(prj) do\nif path.iscppfile(file.name) then\ntable.insert(cppfiles, file.name)\nend\nend\nlocal commonbasepath = cppfiles[1]\nfor _, file in ipairs(cppfiles) do\ncommonbasepath = path.getcommonbasedir(commonbasepath..'/', file)\nend\n_p(1, \".CompilerInputPath = '%s/'\", commonbasepath)\n_p(1, \".CompilerInputPattern = 'ignoreall'\")\n_p(1, '.CompilerInputFiles = {')\nfor _, file in ipairs(cppfiles) do\n_p(2, \"'%s',\", file)\nend\n_p(2, '}')\n_p('')\nlocal targetkindmap = {\nConsoleApp = executable,\nWindowedApp = executable,\nSharedLib = dll,\nStaticLib = library,\n}\nlocal useconfigmap = {\nx32 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx86Config)')\n_p('')\nend,\nx64 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx64Config)')\n_p('')\nend,\n}\nlocal nativeplatform = (os.is64bit() and 'x64') or 'x32'\nfor _, platform in ipairs(prj.solution.platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform == 'Native' then\nalias(prj, cfg, string.format('%s-%s-%s', prj.name, " - "cfg.name, nativeplatform))\nelse\ntargetkindmap[prj.kind](prj, cfg, useconfigmap[cfg.platform])\nend\nend\nend\n_p('}')\nend\n", + "-- Generates a FASTBuild config file for a project.\nlocal function add_trailing_backslash(dir)\nif dir:len() > 0 and dir:sub(-1) ~= \"\\\\\" then\nreturn dir..\"\\\\\"\nend\nreturn dir\nend\nlocal function compile(indentlevel, prj, cfg, commonbasepath)\nlocal firstflag = true\nfor _, cfgexclude in ipairs(cfg.excludes) do\nif path.isSourceFile(cfgexclude) then\nif firstflag then\n_p(indentlevel, '// Excluded files:')\nfirstflag = false\nend\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfgexclude)\nend\nend\nif not firstflag then\n_p('')\nend\n_p(indentlevel, \".CompilerOutputPath = '%s'\", add_trailing_backslash(cfg.objectsdir))\n_p(indentlevel, \".Defines = ''\")\nfor _, define in ipairs(cfg.defines) do\n_p(indentlevel+1, \"+ ' /D%s'\", define)\nend\nif cfg.kind == 'SharedLib' then\n_p(indentlevel+1, \"+ ' /D_WINDLL'\")\nend\n_p(indentlevel, \".IncludeDirs = ''\")\nlocal sortedincdirs = {}\nfor _, includedir in ipairs(cfg.userincludedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, included" + "ir)\nend\nend\nfor _, includedir in ipairs(cfg.includedirs) do\nif includedir ~= nil then\ntable.insert(sortedincdirs, includedir)\nend\nend\nlocal function getpathnodecount(p)\nlocal nodefinder = string.gmatch(p, \"[^\\\\/]+\")\nlocal result = 0\nlocal node = nodefinder()\nwhile node do\nresult = result + ((node ~= '.' and 1) or 0)\nnode = nodefinder()\nend\nreturn result\nend\nlocal stepsfrombase = {}\nfor _, includedir in ipairs(sortedincdirs) do\nstepsfrombase[includedir] = getpathnodecount(path.getrelative(commonbasepath, includedir))\nend\nlocal function includesort(a, b)\nif stepsfrombase[a] == stepsfrombase[b] then\nreturn a < b\nelse\nreturn stepsfrombase[a] < stepsfrombase[b]\nend\nend\ntable.sort(sortedincdirs, includesort)\nfor _, includedir in ipairs(sortedincdirs) do\n_p(indentlevel+1, \"+ ' /I\\\"%s\\\"'\", includedir)\nend\n_p(indentlevel+1, \"+ .MSVCIncludes\")\nlocal compileroptions = {\n'\"%1\"',\n'/nologo',\n'/c',\n'/Gy',\n'/Gm-',\n'/Zc:inline',\n'/errorReport:prompt',\n'/FS',\n}\nif cfg.fl" + "ags.ExtraWarnings then\ntable.insert(compileroptions, '/W4')\nend\nif (cfg.flags.NativeWChar == false or\ncfg.flags.NoNativeWChar) then\ntable.insert(compileroptions, '/Zc:wchar_t-')\nend\nif (cfg.flags.EnableMinimalRebuild or\ncfg.flags.NoMultiProcessorCompilation) then\nend\nif cfg.flags.FloatFast then\ntable.insert(compileroptions, '/fp:fast')\nelseif cfg.flags.FloatStrict then\ntable.insert(compileroptions, '/fp:strict')\nelse\ntable.insert(compileroptions, '/fp:precise')\nend\nif cfg.flags.FastCall then\ntable.insert(compileroptions, '/Gr')\nelseif cfg.flags.StdCall then\ntable.insert(compileroptions, '/Gd')\nend\nif cfg.flags.UnsignedChar then\ntable.insert(compileroptions, '/J')\nend\nif premake.config.isdebugbuild(cfg) then\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MTd')\nelse\ntable.insert(compileroptions, '/MDd')\nend\nelse\nif cfg.flags.StaticRuntime then\ntable.insert(compileroptions, '/MT')\nelse\ntable.insert(compileroptions, '/MD')\nend\nend\nif cfg.flags.Symbols then\nif" + " (cfg.flags.C7DebugInfo) then\ntable.insert(compileroptions, '/Z7')\nelse\nif (premake.config.isoptimizedbuild(cfg.flags)\nor cfg.flags.NoEditAndContinue) then\ntable.insert(compileroptions, '/Zi')\nelse\ntable.insert(compileroptions, '/ZI')\nend\nlocal targetdir = add_trailing_backslash(cfg.buildtarget.directory)\ntable.insert(compileroptions, string.format(\"/Fd\\\"%s%s.pdb\\\"\", targetdir, cfg.buildtarget.basename))\nend\nend\nlocal isoptimised = true\nif (cfg.flags.Optimize) then\ntable.insert(compileroptions, '/Ox')\nelseif (cfg.flags.OptimizeSize) then\ntable.insert(compileroptions, '/O1')\nelseif (cfg.flags.OptimizeSpeed) then\ntable.insert(compileroptions, '/O2')\nelse\nisoptimised = false\nend\nif isoptimised then\ntable.insert(compileroptions, '/GF')\nelse\ntable.insert(compileroptions, '/Od')\ntable.insert(compileroptions, '/RTC1')\nend\nif cfg.flags.FatalWarnings then\ntable.insert(compileroptions, '/WX')\nelse\ntable.insert(compileroptions, '/WX-')\nend\nif cfg.platform == 'x32' then\nif cfg.flag" + "s.EnableSSE2 then\ntable.insert(compileroptions, '/arch:SSE2')\nelseif cfg.flags.EnableSSE then\ntable.insert(compileroptions, '/arch:SSE')\nend\nend\nif cfg.flags.NoExceptions then\nelse\nif cfg.flags.SEH then\ntable.insert(compileroptions, '/EHa')\nelse\ntable.insert(compileroptions, '/EHsc')\nend\nend\nif cfg.flags.NoRTTI then\ntable.insert(compileroptions, '/GR-')\nelse\ntable.insert(compileroptions, '/GR')\nend\nif cfg.flags.NoFramePointer then\ntable.insert(compileroptions, '/Oy-')\nelse\ntable.insert(compileroptions, '/Oy')\nend\nfor _, addloption in ipairs(cfg.buildoptions) do\ntable.insert(compileroptions, addloption)\nend\n_p(indentlevel, \".CompilerOptions = ''\")\nfor _, option in ipairs(compileroptions) do\n_p(indentlevel+1, \"+ ' %s'\", option)\nend\n_p(indentlevel+1, \"+ .IncludeDirs\")\n_p(indentlevel+1, \"+ .Defines\")\nif not cfg.flags.NoPCH and cfg.pchheader then\n_p(indentlevel, \".CompilerInputFiles - '%s'\", cfg.pchsource)\n_p(indentlevel, \".PCHInputFile = '%s'\", cfg.pchsource)\n_p(inde" + "ntlevel, \".PCHOutputFile = .CompilerOutputPath + '%s.pch'\", prj.name)\n_p(indentlevel, \".CompilerOptions + ' /Fp\\\"' + .CompilerOutputPath + '%s.pch\\\"'\", prj.name)\n_p(indentlevel, \".PCHOptions = .CompilerOptions\")\n_p(indentlevel+1, \"+ ' /Yc\\\"%s\\\"'\", cfg.pchheader)\n_p(indentlevel+1, \"+ ' /Fo\\\"%%3\\\"'\")\n_p(indentlevel, \".CompilerOptions + ' /Yu\\\"%s\\\"'\", cfg.pchheader)\nend\n_p(indentlevel+1, \"+ ' /Fo\\\"%%2\\\"'\") -- make sure the previous property is .CompilerOptions\nend\nlocal function library(prj, cfg, useconfig, commonbasepath)\n_p(1, \"Library('%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\nlocal librarianoptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n}\nif cfg.platform == 'x64' then\ntable.insert(librarianoptions, '/MACHINE:X64')\nelse\ntable.insert(librarianoptions, '/MACHINE:X86')\nend\n_p(2, \".LibrarianOptions = ''\")\nfor _, option in ipairs(librarianoptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(" + "2, \".LibrarianOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function binary(prj, cfg, useconfig, bintype, commonbasepath)\n_p(1, \"ObjectList('%s_obj-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\ncompile(2, prj, cfg, commonbasepath)\n_p(1, '}')\n_p('')\n_p(1, \"%s('%s-%s-%s')\", bintype, prj.name, cfg.name, cfg.platform)\n_p(1, '{')\nuseconfig(2)\n_p(2, '.Libraries = {')\n_p(3, \"'%s_obj-%s-%s',\", prj.name, cfg.name, cfg.platform) -- Refer to the ObjectList\nlocal sorteddeplibs = {}\nfor _, deplib in ipairs(premake.getlinks(cfg, \"dependencies\", \"basename\")) do\ntable.insert(sorteddeplibs, string.format(\"'%s-%s-%s',\", deplib, cfg.name, cfg.platform))\nend\ntable.sort(sorteddeplibs)\nfor _, deplib in ipairs(sorteddeplibs) do\n_p(3, deplib)\nend\n_p(3, '}')\n_p(2, '.LinkerLinkObjects = false')\nlocal linkeroptions = {\n'\"%1\"',\n'/OUT:\"%2\"',\n'/NOLOGO',\n'/errorReport:prompt',\n}\nlocal subsystemversion = '\",5.02\"'\nif cfg.platform == 'x32' then" + "\nsubsystemversion = '\",5.01\"'\nend\nif cfg.kind == 'ConsoleApp' then\ntable.insert(linkeroptions, '/SUBSYSTEM:CONSOLE'..subsystemversion)\nelse\ntable.insert(linkeroptions, '/SUBSYSTEM:WINDOWS'..subsystemversion)\nend\nif cfg.kind == 'SharedLib' then\ntable.insert(linkeroptions, '/DLL')\nend\nif cfg.platform == 'x64' then\ntable.insert(linkeroptions, '/MACHINE:X64')\nelse\ntable.insert(linkeroptions, '/MACHINE:X86')\nend\nfor _, libdir in ipairs(cfg.libdirs) do\ntable.insert(linkeroptions, string.format('/LIBPATH:%s', path.translate(libdir, '\\\\')))\nend\nif not cfg.flags.WinMain and (cfg.kind == 'ConsoleApp' or cfg.kind == 'WindowedApp') then\nif cfg.flags.Unicode then\ntable.insert(linkeroptions, '/ENTRY:wmainCRTStartup')\nelse\ntable.insert(linkeroptions, '/ENTRY:mainCRTStartup')\nend\nend\nlocal deffile = premake.findfile(cfg, \".def\")\nif deffile then\ntable.insert(linkeroptions, '/DEF:%s', deffile)\nend\nif (cfg.flags.Symbols ~= nil) then\ntable.insert(linkeroptions, '/DEBUG')\nend\nif premake.confi" + "g.isoptimizedbuild(cfg.flags) then\ntable.insert(linkeroptions, '/OPT:REF')\ntable.insert(linkeroptions, '/OPT:ICF')\nend\ntable.insert(linkeroptions, '/INCREMENTAL'..((premake.config.isincrementallink(cfg) and '') or ':NO'))\nfor _, addloption in ipairs(cfg.linkoptions) do\ntable.insert(linkeroptions, addloption)\nend\nlocal linklibs = premake.getlinks(cfg, \"all\", \"fullpath\")\nfor _, linklib in ipairs(linklibs) do\ntable.insert(linkeroptions, path.getname(linklib))\nend\ntable.sort(linkeroptions)\n_p(2, \".LinkerOptions = ''\")\nfor _, option in ipairs(linkeroptions) do\n_p(3, \"+ ' %s'\", option)\nend\n_p(3, \"+ .MSVCLibPaths\")\n_p(2, \".LinkerOutput = '%s'\", cfg.buildtarget.fullpath)\n_p(1, '}')\n_p('')\nend\nlocal function executable(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'Executable', commonbasepath)\nend\nlocal function dll(prj, cfg, useconfig, commonbasepath)\nbinary(prj, cfg, useconfig, 'DLL', commonbasepath)\nend\nlocal function alias(prj, cfg, target)\n_p(1, \"Alias('" + "%s-%s-%s')\", prj.name, cfg.name, cfg.platform)\n_p(1, '{')\n_p(2, \".Targets = '%s'\", target)\n_p(1, '}')\n_p('')\nend\nfunction premake.fastbuild.project(prj)\nio.indent = ' '\n_p('// FASTBuild project configuration file autogenerated by GENie.')\n_p('')\n_p('{')\nlocal cppfiles = {}\nfor file in premake.project.eachfile(prj) do\nif path.isSourceFile(file.name) then\ntable.insert(cppfiles, file.name)\nend\nend\nlocal commonbasepath = cppfiles[1]\nfor _, file in ipairs(cppfiles) do\ncommonbasepath = path.getcommonbasedir(commonbasepath..'/', file)\nend\n_p(1, \".CompilerInputPath = '%s/'\", commonbasepath)\n_p(1, \".CompilerInputPattern = 'ignoreall'\")\n_p(1, '.CompilerInputFiles = {')\nfor _, file in ipairs(cppfiles) do\n_p(2, \"'%s',\", file)\nend\n_p(1, '}')\n_p('')\nlocal targetkindmap = {\nConsoleApp = executable,\nWindowedApp = executable,\nSharedLib = dll,\nStaticLib = library,\n}\nlocal useconfigmap = {\nx32 = function(indentlevel)\n_p(indentlevel, 'Using(.MSVCx86Config)')\n_p('')\nend,\nx64 = fu" + "nction(indentlevel)\n_p(indentlevel, 'Using(.MSVCx64Config)')\n_p('')\nend,\n}\nlocal nativeplatform = (os.is64bit() and 'x64') or 'x32'\nfor _, platform in ipairs(prj.solution.platforms) do\nfor cfg in premake.eachconfig(prj, platform) do\nif cfg.platform == 'Native' then\nalias(prj, cfg, string.format('%s-%s-%s', prj.name, cfg.name, nativeplatform))\nelse\ntargetkindmap[prj.kind](prj, cfg, useconfigmap[cfg.platform], commonbasepath)\nend\nend\nend\n_p('}')\nend\n", /* actions/fastbuild/fastbuild_solution.lua */ - "function premake.fastbuild.solution(sln)\nio.indent = ' '\n_p('// FastBuild solution configuration file. Generated by GENie.')\n_p('//------------------------------------------------------------------------------------')\n_p('// %s', sln.name)\n_p('//------------------------------------------------------------------------------------')\n_p('#import VS140COMNTOOLS')\nlocal is64bit = os.is64bit()\nlocal target64 = (is64bit and ' amd64') or ' x86_amd64'\nlocal target32 = (is64bit and ' amd64_x86') or ''\nlocal vstoolspath = os.getenv('VS140COMNTOOLS')\nlocal getvcvarspatt = 'call \"%s..\\\\..\\\\VC\\\\vcvarsall.bat\"%s & cmd /c echo %%INCLUDE%% & cmd /c echo %%LIB%%'\nlocal includeslibsrawx64 = os.outputof(string.format(getvcvarspatt, vstoolspath, target64))\nlocal msvcvars = {}\nmsvcvars.x64 = {}\nlocal includeslibssplitter = string.gmatch(includeslibsrawx64, \"[^\\n]+\")\nmsvcvars.x64.includesraw = includeslibssplitter()\nmsvcvars.x64.libpathsraw = includeslibssplitter()\nlocal includeslibsrawx86 = os.outpu" - "tof(string.format(getvcvarspatt, vstoolspath, target32))\nmsvcvars.x32 = {}\nincludeslibssplitter = string.gmatch(includeslibsrawx86, \"[^\\n]+\")\nmsvcvars.x32.includesraw = includeslibssplitter()\nmsvcvars.x32.libpathsraw = includeslibssplitter()\nif is64bit then\n_p('.MSVCx64Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64\\\\link.exe'\")\n_p(1, \".MSVCIncludes = ''\")\nfor i in string.gmatch(msvcvars.x64.includesraw, \"[^;]+\") do\n_p(1, \" + ' /I\\\"%s\\\"'\", i)\nend\n_p(1, \".MSVCLibPaths = ''\")\nfor i in string.gmatch(msvcvars.x64.libpathsraw, \"[^;]+\") do\n_p(1, \" + ' /LIBPATH:\\\"%s\\\"'\", i)\nend\n_p(']')\n_p('')\n_p('.MSVCx86Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64_x86\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOL" - "S$..\\\\..\\\\VC\\\\bin\\\\amd64_x86\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64_x86\\\\link.exe'\")\n_p(1, \".MSVCIncludes = ''\")\nfor i in string.gmatch(msvcvars.x32.includesraw, \"[^;]+\") do\n_p(1, \" + ' /I\\\"%s\\\"'\", i)\nend\n_p(1, \".MSVCLibPaths = ''\")\nfor i in string.gmatch(msvcvars.x32.libpathsraw, \"[^;]+\") do\n_p(1, \" + ' /LIBPATH:\\\"%s\\\"'\", i)\nend\n_p(']')\n_p('')\nelse\n_p('.MSVCx64Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\x86_amd64\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\x86_amd64\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\x86_amd64\\\\link.exe'\")\n_p(1, \".MSVCIncludes = ''\")\nfor i in string.gmatch(msvcvars.x64.includesraw, \"[^;]+\") do\n_p(1, \" + ' /I\\\"%s\\\"'\", i)\nend\n_p(1, \".MSVCLibPaths = ''\")\nfor i in string.gmatch(msvcvars.x64.libpathsraw, \"[^;]+\") do\n_p(1, \" +" - " ' /LIBPATH:\\\"%s\\\"'\", i)\nend\n_p(']')\n_p('')\n_p('.MSVCx86Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\link.exe'\")\n_p(1, \".MSVCIncludes = ''\")\nfor i in string.gmatch(msvcvars.x32.includesraw, \"[^;]+\") do\n_p(1, \" + ' /I\\\"%s\\\"'\", i)\nend\n_p(1, \".MSVCLibPaths = ''\")\nfor i in string.gmatch(msvcvars.x32.libpathsraw, \"[^;]+\") do\n_p(1, \" + ' /LIBPATH:\\\"%s\\\"'\", i)\nend\n_p(']')\n_p('')\nend\nlocal function projkindsort(a, b)\nlocal projvaluemap = {\nConsoleApp = 3,\nWindowedApp = 3,\nSharedLib = 2,\nStaticLib = 1,\n}\nreturn projvaluemap[a.kind] < projvaluemap[b.kind]\nend\nlocal sortedprojs = {}\nfor prj in premake.solution.eachproject(sln) do\ntable.insert(sortedprojs, prj)\nend\ntable.sort(sortedprojs, projkindsort)\nfor _, prj in ipairs(sortedprojs) do\nlocal fname = prema" - "ke.project.getbasename(prj.name, '%%.bff')\nfname = path.join(prj.location, fname)\nfname = path.getrelative(sln.location, fname)\n_p('#include \"%s\"', fname)\nend\n_p('')\n_p('.ProjectVariants = {')\nfor _, plat in ipairs(sln.platforms) do\nfor _, cfg in ipairs(sln.configurations) do\n_p(1, \"'%s-%s',\", cfg, plat)\nend\nend\n_p(1, '}')\n_p('')\n_p('ForEach(.Variant in .ProjectVariants)')\n_p('{')\n_p(1, \"Alias('all-$Variant$')\")\n_p(1, '{')\n_p(2, '.Targets = {')\nfor prj in premake.solution.eachproject(sln) do\n_p(3, \"'%s-$Variant$',\", prj.name)\nend\n_p(3, '}')\n_p(1, '}')\n_p('}')\nend\n", + "-- Generates a FASTBuild config file for a solution.\nfunction premake.fastbuild.solution(sln)\nio.indent = ' '\n_p('// FastBuild solution configuration file. Generated by GENie.')\n_p('//------------------------------------------------------------------------------------')\n_p('// %s', sln.name)\n_p('//------------------------------------------------------------------------------------')\n_p('#import VS140COMNTOOLS')\nlocal is64bit = os.is64bit()\nlocal target64 = (is64bit and ' amd64') or ' x86_amd64'\nlocal target32 = (is64bit and ' amd64_x86') or ''\nlocal getvcvarscontent = [[\n@set INCLUDE=\n@set LIB=\n@set CommandPromptType=\n@set PreferredToolArchitecture=\n@set Platform=\n@set Path=%SystemRoot%\\System32;%SystemRoot%;%SystemRoot%\\System32\\wbem\n@call \"%VS140COMNTOOLS%..\\..\\VC\\vcvarsall.bat\" %1\n@echo %INCLUDE%\n@echo %LIB%\n@echo %CommandPromptType%\n@echo %PreferredToolArchitecture%\n@echo %Platform%\n@echo %Path%\n]]\nlocal getvcvarsfilepath = os.getenv('TEMP')..'\\\\getvcvars.bat'\nlocal" + " getvcvarsfile = assert(io.open(getvcvarsfilepath, 'w'))\ngetvcvarsfile:write(getvcvarscontent)\ngetvcvarsfile:close()\nlocal vcvarsrawx86 = os.outputof(string.format('call \"%s\"%s', getvcvarsfilepath, target32))\nlocal vcvarsrawx64 = os.outputof(string.format('call \"%s\"%s', getvcvarsfilepath, target64))\nos.remove(getvcvarsfilepath)\nlocal msvcvars = {}\nmsvcvars.x32 = {}\nmsvcvars.x64 = {}\nlocal includeslibssplitter = string.gmatch(vcvarsrawx64, \"[^\\n]+\")\nmsvcvars.x64.includesraw = includeslibssplitter()\nmsvcvars.x64.libpathsraw = includeslibssplitter()\nmsvcvars.x64.commandprompttype = includeslibssplitter()\nmsvcvars.x64.preferredtoolarchitecture = includeslibssplitter()\nmsvcvars.x64.platform = includeslibssplitter()\nmsvcvars.x64.pathraw = includeslibssplitter()\nincludeslibssplitter = string.gmatch(vcvarsrawx86, \"[^\\n]+\")\nmsvcvars.x32.includesraw = includeslibssplitter()\nmsvcvars.x32.libpathsraw = includeslibssplitter()\nmsvcvars.x32.commandprompttype = includeslibssplitter()\nmsvcvars.x32" + ".preferredtoolarchitecture = includeslibssplitter()\nmsvcvars.x32.platform = includeslibssplitter()\nmsvcvars.x32.pathraw = includeslibssplitter()\nlocal function printincludes(includesraw)\n_p(1, \".MSVCIncludes = ''\")\nfor i in string.gmatch(includesraw, \"[^;]+\") do\n_p(2, \"+ ' /I\\\"%s\\\"'\", i)\nend\nend\nlocal function printlibpaths(libpathsraw)\n_p(1, \".MSVCLibPaths = ''\")\nfor i in string.gmatch(libpathsraw, \"[^;]+\") do\n_p(2, \"+ ' /LIBPATH:\\\"%s\\\"'\", i)\nend\nend\nif is64bit then\n_p('.MSVCx64Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64\\\\link.exe'\")\nprintincludes(msvcvars.x64.includesraw)\nprintlibpaths(msvcvars.x64.libpathsraw)\n_p(']')\n_p('')\n_p('.MSVCx86Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64_x86\\\\cl.exe'\")\n_p(1, \"." + "Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64_x86\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\amd64_x86\\\\link.exe'\")\nprintincludes(msvcvars.x32.includesraw)\nprintlibpaths(msvcvars.x32.libpathsraw)\n_p(']')\n_p('')\nelse\n_p('.MSVCx64Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\x86_amd64\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\x86_amd64\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\x86_amd64\\\\link.exe'\")\nprintincludes(msvcvars.x64.includesraw)\nprintlibpaths(msvcvars.x64.libpathsraw)\n_p(']')\n_p('')\n_p('.MSVCx86Config =')\n_p('[')\n_p(1, \".Compiler = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\cl.exe'\")\n_p(1, \".Librarian = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\lib.exe'\")\n_p(1, \".Linker = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin\\\\link.exe'\")\nprintincludes(msvcvars.x32.includesraw)\nprintlibpaths(msvcvars.x32.libpathsraw)\n_p(']')" + "\n_p('')\nend\nlocal msvcbin = '$VS140COMNTOOLS$..\\\\..\\\\VC\\\\bin' .. ((is64bit and '\\\\amd64') or '')\n_p('#import Path')\n_p('#import TMP')\n_p('#import SystemRoot')\n_p('')\n_p('Settings')\n_p('{')\n_p(1, '.Environment = {')\n_p(2, \"'Path=%s;$Path$',\", msvcbin)\n_p(2, \"'TMP=$TMP$',\")\n_p(2, \"'SystemRoot=$SystemRoot$',\")\n_p(2, '}')\n_p('}')\n_p('')\nlocal function projkindsort(a, b)\nlocal projvaluemap = {\nConsoleApp = 3,\nWindowedApp = 3,\nSharedLib = 2,\nStaticLib = 1,\n}\nif projvaluemap[a.kind] == projvaluemap[b.kind] then\nreturn a.name < b.name\nelse\nreturn projvaluemap[a.kind] < projvaluemap[b.kind]\nend\nend\nlocal sortedprojs = {}\nfor prj in premake.solution.eachproject(sln) do\ntable.insert(sortedprojs, prj)\nend\ntable.sort(sortedprojs, projkindsort)\nfor _, prj in ipairs(sortedprojs) do\nlocal fname = premake.project.getbasename(prj.name, '%%.bff')\nfname = path.join(prj.location, fname)\nfname = path.getrelative(sln.location, fname)\n_p('#include \"%s\"', fname)\nend\n_p('')" + "\n_p('.ProjectVariants = {')\nfor _, plat in ipairs(sln.platforms) do\nfor _, cfg in ipairs(sln.configurations) do\n_p(1, \"'%s-%s',\", cfg, plat)\nend\nend\n_p('}')\n_p('')\n_p('ForEach(.Variant in .ProjectVariants)')\n_p('{')\n_p(1, \"Alias('all-$Variant$')\")\n_p(1, '{')\n_p(2, '.Targets = {')\nfor _, prj in ipairs(sortedprojs) do\n_p(3, \"'%s-$Variant$',\", prj.name)\nend\n_p(2, '}')\n_p(1, '}')\n_p('}')\nend\n", + + /* actions/ninja/_ninja.lua */ + "premake.ninja = { }\nlocal p = premake\nnewaction\n{\ntrigger = \"ninja\",\nshortname = \"ninja\",\ndescription = \"Ninja is a small build system with a focus on speed\",\nmodule = \"ninja\",\nvalid_kinds = {\"ConsoleApp\", \"WindowedApp\", \"SharedLib\", \"StaticLib\"},\nvalid_languages = {\"C\", \"C++\"},\nvalid_tools = {\ncc = { \"gcc\" }\n},\nonsolution = function(sln)\nio.eol = \"\\r\\n\"\nio.indent = \"\\t\"\nio.escaper(p.ninja.esc)\np.generate(sln, \"Makefile\", p.ninja.generate_solution)\nio.indent = \" \"\np.ninja.generate_ninja_builds(sln)\nend,\nonproject = function(prj)\nio.eol = \"\\r\\n\"\nio.indent = \" \"\nio.escaper(p.ninja.esc)\np.ninja.generate_project(prj)\nend,\noncleansolution = function(sln)\nfor _,name in ipairs(sln.configurations) do\npremake.clean.file(sln, p.ninja.get_solution_name(sln, name))\nend\nend,\noncleanproject = function(prj)\nend,\noncleantarget = function(prj)\nend,\n}", + + /* actions/ninja/ninja_base.lua */ + "local ninja = premake.ninja\nfunction ninja.esc(value)\nvalue = value:gsub(\"%$\", \"$$\") -- TODO maybe there is better way\nvalue = value:gsub(\":\", \"$:\")\nvalue = value:gsub(\"\\n\", \"$\\n\")\nvalue = value:gsub(\" \", \"$ \")\nreturn value\nend\nfunction ninja.shesc(value)\nif type(value) == \"table\" then\nlocal result = {}\nlocal n = #value\nfor i = 1, n do\ntable.insert(result, ninja.shesc(value[i]))\nend\nreturn result\nend\nif value:find(\" \") then\nreturn \"\\\"\" .. value .. \"\\\"\"\nend\nreturn value\nend\nfunction ninja.list(value)\nif #value > 0 then\nreturn \" \" .. table.concat(value, \" \")\nelse\nreturn \"\"\nend\nend\nfunction ninja.generate_project(prj)\nninja.generate_cpp(prj)\nend\nlocal function innerget(self, key)\nreturn rawget(getmetatable(self), key) or self.__inner[key]\nend\nlocal prj_proxy = { __index = innerget }\nlocal cfg_proxy = { __index = innerget }\nfunction new_prj_proxy(prj)\nprj = prj.project or prj\nlocal v = { __inner = prj }\nlocal __configs = {}\nfor key, cfg i" + "n pairs(prj.__configs) do\nif key ~= \"\" then\n__configs[key] = ninja.get_proxy(\"cfg\", cfg)\nelse\n__configs[key] = cfg\nend\nend\nv.__configs = __configs\nreturn setmetatable(v, prj_proxy)\nend\nlocal function rebasekeys(t, keys, old, new)\nfor _,key in ipairs(keys) do\nt[key] = path.rebase(t[key], old, new)\nend\nreturn t\nend\nlocal function rebasearray(t, old, new)\nlocal res = { }\nfor _,f in ipairs(t) do\ntable.insert(res, path.rebase(f, old, new))\nend\nreturn res\nend\nfunction new_cfg_proxy(cfg)\nlocal keys = { \"directory\", \"fullpath\", \"bundlepath\" }\nlocal old = cfg.location\nlocal new = path.join(cfg.location, cfg.shortname)\nlocal v = {\n__inner = cfg,\nlocation = new,\nobjectsdir = path.rebase(cfg.objectsdir, old, new),\nbuildtarget = rebasekeys(table.deepcopy(cfg.buildtarget), keys, old, new),\nlinktarget = rebasekeys(table.deepcopy(cfg.buildtarget), keys, old, new),\n}\nv.files = rebasearray(cfg.files, old, new)\nv.includedirs = rebasearray(cfg.includedirs, old, n" + "ew)\nv.userincludedirs = rebasearray(cfg.userincludedirs, old, new)\nreturn setmetatable(v, cfg_proxy)\nend\nfunction cfg_proxy:getprojectfilename(fullpath)\nlocal name = self.project.name .. \".ninja\"\nif fullpath ~= nil then\nreturn path.join(self.location, name)\nend\nreturn name\nend\nfunction cfg_proxy:getoutputfilename()\nreturn path.join(self.buildtarget.directory, self.buildtarget.name)\nend\nlocal proxy_cache = { \nprj = { new = new_prj_proxy }, \ncfg = { new = new_cfg_proxy },\n}\nfunction get_proxy(cache, obj)\nif not cache[obj] then\ncache[obj] = cache.new(obj)\nend\nreturn cache[obj]\nend\nfunction ninja.get_proxy(typ, obj)\nif not proxy_cache[typ] then\nerror(\"invalid proxy type\")\nend\nreturn get_proxy(proxy_cache[typ], obj)\nend\n", + + /* actions/ninja/ninja_solution.lua */ + "local ninja = premake.ninja\nlocal p = premake\nlocal solution = p.solution\nfunction ninja.generate_solution(sln)\nlocal cc = premake[_OPTIONS.cc]\nlocal platforms = premake.filterplatforms(sln, cc.platforms, \"Native\")\n_p('# %s solution makefile autogenerated by GENie', premake.action.current().shortname)\n_p('# Type \"make help\" for usage help')\n_p('')\n_p('NINJA=ninja')\n_p('ifndef config')\n_p(' config=%s', _MAKE.esc(premake.getconfigname(sln.configurations[1], platforms[1], true)))\n_p('endif')\n_p('')\nlocal projects = table.extract(sln.projects, \"name\")\ntable.sort(projects)\n_p('')\n_p('.PHONY: all clean help $(PROJECTS)')\n_p('')\n_p('all:')\nif (not sln.messageskip) or (not table.contains(sln.messageskip, \"SkipBuildingMessage\")) then\n_p(1, '@echo \"==== Building all ($(config)) ====\"')\nend\n_p(1, '@${NINJA} -C ${config} all')\n_p('')\nfor _, prj in ipairs(sln.projects) do\nlocal prjx = ninja.get_proxy(\"prj\", prj)\n_p('%s:', _MAKE.esc(prj.name))\nif (not sln.messageskip) or (not table.c" + "ontains(sln.messageskip, \"SkipBuildingMessage\")) then\n_p(1, '@echo \"==== Building %s ($(config)) ====\"', prj.name)\nend\n_p(1, '@${NINJA} -C ${config} %s', prj.name)\n_p('')\nend\n_p('clean:')\n_p(1, '@${NINJA} -C ${config} -t clean')\n_p('')\n_p('help:')\n_p(1,'@echo \"Usage: make [config=name] [target]\"')\n_p(1,'@echo \"\"')\n_p(1,'@echo \"CONFIGURATIONS:\"')\nlocal cfgpairs = { }\nfor _, platform in ipairs(platforms) do\nfor _, cfgname in ipairs(sln.configurations) do\n_p(1,'@echo \" %s\"', premake.getconfigname(cfgname, platform, true))\nend\nend\n_p(1,'@echo \"\"')\n_p(1,'@echo \"TARGETS:\"')\n_p(1,'@echo \" all (default)\"')\n_p(1,'@echo \" clean\"')\nfor _, prj in ipairs(sln.projects) do\n_p(1,'@echo \" %s\"', prj.name)\nend\n_p(1,'@echo \"\"')\n_p(1,'@echo \"For more information, see https://github.com/bkaradzic/genie\"')\nend\nlocal generate\nlocal function getconfigs(sln, name, plat)\nlocal cfgs = {}\nfor prj in solution.eachproject(sln) do\nprj = ninja.get_proxy(\"prj\", prj)\nfor cfg " + "in p.eachconfig(prj, plat) do\nif cfg.name == name then\ntable.insert(cfgs, cfg)\nend\nend\nend\nreturn cfgs\nend\nfunction ninja.generate_ninja_builds(sln)\nlocal cc = premake[_OPTIONS.cc]\nsln.getlocation = function(cfg, plat)\nreturn path.join(sln.location, premake.getconfigname(cfg, plat, true))\nend\nlocal platforms = premake.filterplatforms(sln, cc.platforms, \"Native\")\nfor _,plat in ipairs(platforms) do\nfor _,name in ipairs(sln.configurations) do\np.generate(sln, ninja.get_solution_name(sln, name, plat), function(sln)\ngenerate(getconfigs(sln, name, plat))\nend)\nend\nend\nend\nfunction ninja.get_solution_name(sln, cfg, plat)\nreturn path.join(sln.getlocation(cfg, plat), \"build.ninja\")\nend\nfunction generate(prjcfgs)\nlocal cfgs = {}\nlocal cfg_first = nil\nlocal cfg_first_lib = nil\n_p(\"# solution build file\")\n_p(\"# generated with GENie ninja\")\n_p(\"\")\n_p(\"# build projects\")\nfor _,cfg in ipairs(prjcfgs) do\nlocal key = cfg.project.name\nif not cfgs[key] then cfgs[key] = " + "\"\" end\ncfgs[key] = cfg:getoutputfilename() .. \" \"\nif not cfgs[\"all\"] then cfgs[\"all\"] = \"\" end\ncfgs[\"all\"] = cfgs[\"all\"] .. cfg:getoutputfilename() .. \" \"\nif (cfg_first == nil) and (cfg.kind == \"ConsoleApp\" or cfg.kind == \"WindowedApp\") then\ncfg_first = key\nend\nif (cfg_first_lib == nil) and (cfg.kind == \"StaticLib\" or cfg.kind == \"SharedLib\") then\ncfg_first_lib = key\nend\n_p(\"subninja \" .. cfg:getprojectfilename())\nend\n_p(\"\")\n_p(\"# targets\")\nfor cfg, outputs in iter.sortByKeys(cfgs) do\n_p(\"build \" .. cfg .. \": phony \" .. outputs)\nend\n_p(\"\")\n_p(\"# default target\")\n_p(\"default \" .. (cfg_first or cfg_first_lib))\n_p(\"\")\nend\n", + + /* actions/ninja/ninja_cpp.lua */ + "premake.ninja.cpp = { }\nlocal ninja = premake.ninja\nlocal cpp = premake.ninja.cpp\nlocal p = premake\nlocal tree = p.tree\nfunction ninja.generate_cpp(prj)\nlocal pxy = ninja.get_proxy(\"prj\", prj)\nlocal tool = premake.gettool(prj)\nlocal platforms = premake.filterplatforms(prj.solution, tool.platforms, \"Native\")\nfor _, platform in ipairs(platforms) do\nfor cfg in p.eachconfig(pxy, platform) do\np.generate(cfg, cfg:getprojectfilename(), function() cpp.generate_config(prj, cfg) end)\nend\nend\nend\nfunction cpp.generate_config(prj, cfg)\nlocal tool = premake.gettool(prj)\n_p(\"# project build file\")\n_p(\"# generated with GENie ninja\")\n_p(\"\")\n_p(\"ninja_required_version = 1.7\")\n_p(\"\")\nlocal flags = {\ndefines = ninja.list(tool.getdefines(cfg.defines)),\nincludes = ninja.list(table.join(tool.getincludedirs(cfg.includedirs), tool.getquoteincludedirs(cfg.userincludedirs))),\ncppflags = ninja.list(tool.getcppflags(cfg)),\ncflags = ninja.list(table.join(tool.getcflags(cfg), cfg.buildo" + "ptions, cfg.buildoptions_c)),\ncxxflags = ninja.list(table.join(tool.getcflags(cfg), tool.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_cpp)),\nobjcflags = ninja.list(table.join(tool.getcflags(cfg), tool.getcxxflags(cfg), cfg.buildoptions, cfg.buildoptions_objc)),\n}\n_p(\"\")\n_p(\"# core rules for \" .. cfg.name)\n_p(\"rule cc\")\n_p(\" command = \" .. tool.cc .. \" $defines $includes $flags -MMD -MF $out.d -c -o $out $in\")\n_p(\" description = cc $out\")\n_p(\" depfile = $out.d\")\n_p(\" deps = gcc\")\n_p(\"\")\n_p(\"rule cxx\")\n_p(\" command = \" .. tool.cxx .. \" $defines $includes $flags -MMD -MF $out.d -c -o $out $in\")\n_p(\" description = cxx $out\")\n_p(\" depfile = $out.d\")\n_p(\" deps = gcc\")\n_p(\"\")\n_p(\"rule ar\")\n_p(\" command = \" .. tool.ar .. \" $flags $out $in $libs \" .. (os.is(\"MacOSX\") and \" 2>&1 > /dev/null | sed -e '/.o) has no symbols$$/d'\" or \"\"))\n_p(\" description = ar $out\")\n_p(\"\")\nlocal link = iif(cfg.language == \"C\", tool.cc, tool.cxx)\n_p(" + "\"rule link\")\n_p(\" command = \" .. link .. \" -o $out $in $all_ldflags $libs\")\n_p(\" description = link $out\")\n_p(\"\")\ncpp.file_rules(cfg, flags)\nlocal objfiles = {}\nfor _, file in ipairs(cfg.files) do\nif path.isSourceFile(file) then\ntable.insert(objfiles, cpp.objectname(cfg, file))\nend\nend\n_p('')\ncpp.linker(prj, cfg, objfiles, tool, flags)\n_p(\"\")\nend\nfunction cpp.objectname(cfg, file)\nreturn path.join(cfg.objectsdir, path.trimdots(path.removeext(file)) .. \".o\")\nend\nfunction cpp.file_rules(cfg, flags)\n_p(\"# build files\")\nfor _, file in ipairs(cfg.files) do\nif path.isSourceFile(file) then\nlocal objfilename = cpp.objectname(cfg, file)\nlocal cflags = \"cflags\"\nif path.isobjcfile(file) then\n_p(\"build \" .. objfilename .. \": cxx \" .. file)\ncflags = \"objcflags\"\nelseif path.iscfile(file) and not cfg.options.ForceCPP then\n_p(\"build \" .. objfilename .. \": cc \" .. file)\nelse\n_p(\"build \" .. objfilename .. \": cxx \" .. file)\ncflags = \"cxxflags\"\nend\n_p(1, \"flags" + " = \" .. flags[cflags])\n_p(1, \"includes = \" .. flags.includes)\n_p(1, \"defines = \" .. flags.defines)\nelseif path.isresourcefile(file) then\nend\nend\n_p(\"\")\nend\nfunction cpp.linker(prj, cfg, objfiles, tool)\nlocal all_ldflags = ninja.list(table.join(tool.getlibdirflags(cfg), tool.getldflags(cfg), cfg.linkoptions))\nlocal lddeps = ninja.list(premake.getlinks(cfg, \"siblings\", \"fullpath\")) \nlocal libs = lddeps .. \" \" .. ninja.list(tool.getlinkflags(cfg))\nlocal function writevars()\n_p(1, \"all_ldflags = \" .. all_ldflags)\n_p(1, \"libs = \" .. libs)\nend\nif cfg.kind == \"StaticLib\" then\nlocal ar_flags = ninja.list(tool.getarchiveflags(cfg, cfg, false))\n_p(\"# link static lib\")\n_p(\"build \" .. cfg:getoutputfilename() .. \": ar \" .. table.concat(objfiles, \" \") .. \" | \" .. lddeps)\n_p(1, \"flags = \" .. ninja.list(tool.getarchiveflags(cfg, cfg, false)))\nelseif cfg.kind == \"SharedLib\" then\nlocal output = cfg:getoutputfilename()\n_p(\"# link shared lib\")\n_p(\"" + "build \" .. output .. \": link \" .. table.concat(objfiles, \" \") .. \" | \" .. libs)\nwritevars()\nelseif (cfg.kind == \"ConsoleApp\") or (cfg.kind == \"WindowedApp\") then\n_p(\"# link executable\")\n_p(\"build \" .. cfg:getoutputfilename() .. \": link \" .. table.concat(objfiles, \" \") .. \" | \" .. lddeps)\nwritevars()\nelse\np.error(\"ninja action doesn't support this kind of target \" .. cfg.kind)\nend\nend\n", /* _premake_main.lua */ "_WORKING_DIR = os.getcwd()\nlocal function injectplatform(platform)\nif not platform then return true end\nplatform = premake.checkvalue(platform, premake.fields.platforms.allowed)\nfor sln in premake.solution.each() do\nlocal platforms = sln.platforms or { }\nif #platforms == 0 then\ntable.insert(platforms, \"Native\")\nend\nif not table.contains(platforms, \"Native\") then\nreturn false, sln.name .. \" does not target native platform\\nNative platform settings are required for the --platform feature.\"\nend\nif not table.contains(platforms, platform) then\ntable.insert(platforms, platform)\nend\nsln.platforms = platforms\nend\nreturn true\nend\nfunction _premake_main(scriptpath)\nif (scriptpath) then\nlocal scripts = dofile(scriptpath .. \"/_manifest.lua\")\nfor _,v in ipairs(scripts) do\ndofile(scriptpath .. \"/\" .. v)\nend\nend\n_PREMAKE_COMMAND = path.getabsolute(_PREMAKE_COMMAND)\npremake.action.set(_ACTION)\nmath.randomseed(os.time())\nif (nil ~= _OPTIONS[\"file\"]) then\nlocal fname = _OPTIONS" diff --git a/3rdparty/genie/src/tools/gcc.lua b/3rdparty/genie/src/tools/gcc.lua index 58ea8a19b50..78cc7744b30 100644 --- a/3rdparty/genie/src/tools/gcc.lua +++ b/3rdparty/genie/src/tools/gcc.lua @@ -312,6 +312,17 @@ return result end +-- +-- Decorate user include file search paths for the GCC command line. +-- + + function premake.gcc.getquoteincludedirs(includedirs) + local result = { } + for _,dir in ipairs(includedirs) do + table.insert(result, "-iquote " .. _MAKE.esc(dir)) + end + return result + end -- -- Return platform specific project and configuration level diff --git a/3rdparty/genie/src/tools/valac.lua b/3rdparty/genie/src/tools/valac.lua new file mode 100644 index 00000000000..f888a426ac2 --- /dev/null +++ b/3rdparty/genie/src/tools/valac.lua @@ -0,0 +1,93 @@ +-- +-- valac.lua +-- Provides valac-specific configuration strings. +-- + + + premake.valac = { } + + +-- +-- Set default tools +-- + + premake.valac.valac = "valac" + premake.valac.cc = "gcc" + + +-- +-- Translation of Premake flags into GCC flags +-- + + local valaflags = + { + DisableAssert = "--disable-assert", -- Disable assertions + DisableSinceCheck = "--disable-since-check", -- Do not check whether used symbols exist in local packages + DisableWarnings = "--disable-warnings", -- Disable warnings + EnableChecking = "--enable-checking", -- Enable additional run-time checks + EnableDeprecated = "--enable-deprecated", -- Enable deprecated features + EnableExperimental = "--enable-experimental", -- Enable experimental features + EnableExperimentalNonNull = "--enable-experimental-non-null", -- Enable experimental enhancements for non-null types + EnableGObjectTracing = "--enable-gobject-tracing", -- Enable GObject creation tracing + EnableMemProfiler = "--enable-mem-profiler", -- Enable GLib memory profiler + EnableThreading = "--thread", -- Enable multithreading support + FatalWarnings = "--fatal-warnings", -- Treat warnings as fatal + HideInternal = "--hide-internal", -- Hide symbols marked as internal + NoStdPkg = "--nostdpkg", -- Do not include standard packages + Optimize = "-X -O2", + OptimizeSize = "-X -Os", + OptimizeSpeed = "-X -O3", + Symbols = "-g", -- Produce debug information + } + + premake.valac.platforms = {} + +-- +-- Returns a list of compiler flags, based on the supplied configuration. +-- + + function premake.valac.getvalaflags(cfg) + return table.translate(cfg.flags, valaflags) + end + + + +-- +-- Decorate pkgs for the Vala command line. +-- + + function premake.valac.getlinks(links) + local result = { } + for _, pkg in ipairs(links) do + table.insert(result, '--pkg ' .. pkg) + end + return result + end + + + +-- +-- Decorate defines for the Vala command line. +-- + + function premake.valac.getdefines(defines) + local result = { } + for _, def in ipairs(defines) do + table.insert(result, '-D ' .. def) + end + return result + end + + + +-- +-- Decorate C flags for the Vala command line. +-- + + function premake.valac.getbuildoptions(buildoptions) + local result = { } + for _, def in ipairs(buildoptions) do + table.insert(result, '-X ' .. def) + end + return result + end diff --git a/README.md b/README.md index b4552b2f9d9..829c042ac7a 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ make SUBTARGET=mess for MESS build. -For Linux users we have provided you with all the [prerequisites](http://forums.bannister.org/ubbthreads.php?ubb=showflat&Number=35138). +See the [Compiling MAME](http://docs.mamedev.org/initialsetup/compilingmame.html) page on our documentation site for more information, including prerequisites for Mac OS X and popular Linux distributions. For recent versions of OSX you need to install [Xcode](https://developer.apple.com/xcode/) including command-line tools and [SDL 2.0](https://www.libsdl.org/download-2.0.php). diff --git a/bgfx/chains/hqx/hq3x.json b/bgfx/chains/hqx/hq3x.json index 5d735f40f02..8932515362d 100644 --- a/bgfx/chains/hqx/hq3x.json +++ b/bgfx/chains/hqx/hq3x.json @@ -30,7 +30,7 @@ { "name": "scaled_out", "mode": "guest", - "scale": 2, + "scale": 3, "doublebuffer": true }, { diff --git a/bgfx/chains/hqx/hq4x.json b/bgfx/chains/hqx/hq4x.json index 499fa23ac6a..720f229952d 100644 --- a/bgfx/chains/hqx/hq4x.json +++ b/bgfx/chains/hqx/hq4x.json @@ -30,7 +30,7 @@ { "name": "scaled_out", "mode": "guest", - "scale": 2, + "scale": 4, "doublebuffer": true }, { diff --git a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin index 740cea66bf5..3aa4cd21700 100644 Binary files a/bgfx/shaders/dx11/chains/hlsl/fs_post.bin and b/bgfx/shaders/dx11/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin index cc98415c59f..4cbc9b2fb7b 100644 Binary files a/bgfx/shaders/dx9/chains/hlsl/fs_post.bin and b/bgfx/shaders/dx9/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/gles/chains/hlsl/fs_post.bin b/bgfx/shaders/gles/chains/hlsl/fs_post.bin index 3969bd47936..185b92fa882 100644 Binary files a/bgfx/shaders/gles/chains/hlsl/fs_post.bin and b/bgfx/shaders/gles/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin index 60cc2675a22..eda1c602e9f 100644 Binary files a/bgfx/shaders/glsl/chains/hlsl/fs_post.bin and b/bgfx/shaders/glsl/chains/hlsl/fs_post.bin differ diff --git a/bgfx/shaders/metal/chains/hlsl/fs_post.bin b/bgfx/shaders/metal/chains/hlsl/fs_post.bin index 2be5d0aaa6e..e261b0e6431 100644 Binary files a/bgfx/shaders/metal/chains/hlsl/fs_post.bin and b/bgfx/shaders/metal/chains/hlsl/fs_post.bin differ diff --git a/hash/bbca_cass.xml b/hash/bbca_cass.xml index 7f4c30586e5..a463cf8c40d 100644 --- a/hash/bbca_cass.xml +++ b/hash/bbca_cass.xml @@ -16,6 +16,17 @@ + + Adventure + 1983 + Micro Power + + + + + + + Airline 1983 @@ -50,14 +61,14 @@ - + Beebtrek - 1983 - Software For All + 1982 + Epsilon - - + + @@ -73,6 +84,17 @@ + + Cascade 50 + 1983 + Cascade + + + + + + + Cat and Mouse 1982 @@ -200,6 +222,17 @@ + + Micro Budget + 1983 + Micro Power + + + + + + + Munchyman 1981 @@ -267,7 +300,7 @@ - Reversi (Micro Power) + Reversi 1 (Micro Power) 1982 Micro Power @@ -277,6 +310,28 @@ + + Savage Pond (Bug Byte) + 1983 + Bug Byte + + + + + + + + + Savage Pond (ASP Software) + 198? + ASP Software + + + + + + + Seek 1982 @@ -288,6 +343,17 @@ + + Signals and Magic + 1982 + H&H Software + + + + + + + Space Invaders 16K 1982 @@ -386,7 +452,7 @@ Word Sequencing 1983 - Acornsoft + Acornsoft/ESM @@ -398,7 +464,7 @@ Missing Signs 1983 - Acornsoft + Acornsoft/ESM diff --git a/hash/bbcb_cass.xml b/hash/bbcb_cass.xml index 7cce513ba03..d9eedfe691c 100644 --- a/hash/bbcb_cass.xml +++ b/hash/bbcb_cass.xml @@ -34,8 +34,8 @@ 1984 Incentive - - + + @@ -75,7 +75,7 @@ 3D Dotty - 198? + 1987 Blue Ribbon @@ -101,7 +101,7 @@ Software Invasion - + @@ -118,7 +118,7 @@ - 3D Munchy (Blue Ribbon Games 1) + 3D Munchy (Blue Ribbon) 1985 Blue Ribbon @@ -235,15 +235,15 @@ 1983 Doctor Soft - - - + + + - - - + + + @@ -261,7 +261,7 @@ 9 Classic Card and Board Games Vol.2 - 198? + 1986 Database @@ -304,7 +304,7 @@ - Adventure 1 - AdventureLand + Adventure 1: AdventureLand 198? Adventure Soft @@ -315,8 +315,8 @@ - Adventure 10 - Savage Island pt.1 - 198? + Adventure 10: Savage Island Part I + 1984 Adventure Soft @@ -326,8 +326,8 @@ - Adventure 11 - Savage Island pt.2 - 198? + Adventure 11: Savage Island Part II + 1984 Adventure Soft @@ -337,7 +337,7 @@ - Adventure 13 - Sorceror Claymorgue Castle + Adventure 13: Sorceror of Claymorgue Castle 198? Adventure Soft @@ -348,7 +348,7 @@ - Adventure 2 - Pirate Adventure + Adventure 2: Pirate Adventure 198? Adventure Soft @@ -359,7 +359,7 @@ - Adventure 3 - Secret Mission + Adventure 3: Secret Mission 198? Adventure Soft @@ -370,7 +370,7 @@ - Adventure 4 - Voodoo Castle + Adventure 4: Voodoo Castle 198? Adventure Soft @@ -381,7 +381,7 @@ - Adventure 5 - The Count + Adventure 5: The Count 198? Adventure Soft @@ -392,7 +392,7 @@ - Adventure 6 - Strange Odyssey + Adventure 6: Strange Odyssey 198? Adventure Soft @@ -403,7 +403,7 @@ - Adventure 7 - Mystery Funhouse + Adventure 7: Mystery Funhouse 198? Adventure Soft @@ -414,7 +414,7 @@ - Adventure 8 - Pyramid of Doom + Adventure 8: Pyramid of Doom 198? Adventure Soft @@ -425,7 +425,7 @@ - Adventure 9 - Ghost Town + Adventure 9: Ghost Town 198? Adventure Soft @@ -435,25 +435,14 @@ - - Adventure - 1983 - Micro Power - - - - - - - Adventure Quest - 1983 + 1982 Level 9 Computing - + @@ -538,12 +527,12 @@ Alien 8 - 1985 + 1984 Ultimate - + @@ -584,7 +573,7 @@ Alien From Outta Space - 198? + 1984 Incentive @@ -607,7 +596,7 @@ Alphatron - 198? + 1984 Tynesoft @@ -659,11 +648,11 @@ Android Attack - 1983 + 1982 Computer Concepts - + @@ -733,7 +722,7 @@ Antix - 19?? + 1984 Voyager @@ -769,15 +758,26 @@ 1983 Software Invasion + + + + + + - - - - + + + + Apple Pie + 1984 + Visions + + + @@ -810,15 +810,15 @@ Acornsoft - - + + Area Radar Controller - 198? + 1983 Software For All @@ -918,12 +918,12 @@ Atic Atac - 1983 + 1984 Ultimate - + @@ -1008,7 +1008,7 @@ Awari - 1983 + 1982 CSL Microdata @@ -1061,7 +1061,7 @@ Ballistix 1989 - Superior Software + Superior Software/Acornsoft @@ -1092,7 +1092,7 @@ - Banana Man (Blue Ribbon Games 1) + Banana Man (Blue Ribbon) 1985 Blue Ribbon @@ -1103,7 +1103,7 @@ - Banana Man (MRM Software) + Banana Man 1983 MRM Software @@ -1138,7 +1138,7 @@ Barbarian 2 1989 - Superior Software + Superior Software/Acornsoft @@ -1148,8 +1148,8 @@ Barbarian - 1987 - Superior Software + 1988 + Superior Software/Acornsoft @@ -1178,7 +1178,7 @@ Baron 1989 - Superior Software + Superior Software/Acornsoft @@ -1210,7 +1210,7 @@ Battlefields - 198? + 1985 BBC Soft @@ -1268,8 +1268,8 @@ 1983 Lothlorien - - + + @@ -1290,8 +1290,8 @@ 1984 Mirrorsoft-Ivan Berg - - + + @@ -1312,8 +1312,8 @@ 1984 U.S. Gold - - + + @@ -1364,11 +1364,11 @@ Beebtrek - 1982 - Epsilon + 1983 + Software For All - - + + @@ -1458,13 +1458,13 @@ - + - + @@ -1581,6 +1581,30 @@ + + Boffin + 1985 + Addictive + + + + + + + + + + Boffin 2 + 1985 + Addictive + + + + + + + + Bomber Baron 198? @@ -1606,7 +1630,7 @@ Bone Cruncher (Play It Again Sam 7) 1989 - Superior Software + Superior Software/Acornsoft @@ -1620,7 +1644,7 @@ Superior Software - + @@ -1670,6 +1694,17 @@ + + Bouncer (A&F) + 1983 + A&F Software + + + + + + + Bounty Bob Strikes Back 1986 @@ -1687,15 +1722,15 @@ Acornsoft - - + + Bozo the Brave - 198? + 1985 Tynesoft @@ -1717,7 +1752,7 @@ Brainstorm - 198? + 1984 Virgin Games @@ -1743,8 +1778,8 @@ 1987 CDS - - + + @@ -1803,8 +1838,8 @@ - Broadway Boogie and Classics - 19?? + The Broadway Boogie and Classics + 1983 Broadway Electronics @@ -1830,7 +1865,7 @@ Tynesoft - + @@ -1849,7 +1884,7 @@ Bug Blaster (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -1858,7 +1893,7 @@ - Bug Blaster (Alligata) + Bug Blaster 1983 Alligata @@ -1879,6 +1914,17 @@ + + Bug Eyes + 1985 + Icon + + + + + + + Bullseye 1984 @@ -1926,7 +1972,7 @@ Camelot 1989 - Superior Software + Superior Software/Acornsoft @@ -1951,8 +1997,8 @@ Acornsoft - - + + @@ -1970,19 +2016,8 @@ - - Cascade 50 - 198? - Cascade - - - - - - - - Castle Assault (Blue Ribbon Games 1) + Castle Assault (Blue Ribbon) 1985 Blue Ribbon @@ -2060,8 +2095,8 @@ Acornsoft - - + + @@ -2084,7 +2119,7 @@ Micro Power - + @@ -2117,7 +2152,7 @@ Icon - + @@ -2337,12 +2372,12 @@ Chess (Micro Power) - 198? + 1983 Micro Power - - + + @@ -2383,18 +2418,18 @@ Chip Buster - 198? + 1985 Software Invasion - + Christmas Crackers - 198? + 1983 Database @@ -2450,7 +2485,7 @@ Citadel (Play It Again Sam 1) 1987 - Superior Software + Superior Software/Acornsoft @@ -2464,7 +2499,7 @@ Superior Software - + @@ -2526,6 +2561,17 @@ + + Classic Compendium + 1984 + Database + + + + + + + Clogger 1988 @@ -2584,18 +2630,18 @@ Colossal Adventure - 1983 + 1982 Level 9 Computing - + - Colossus 4 Bridge + Colossus Bridge 4 1988 CDS @@ -2606,8 +2652,8 @@ - Colossus 4 Chess - 1988 + Colossus Chess 4 + 1986 CDS @@ -2622,8 +2668,8 @@ Durell - - + + @@ -2650,6 +2696,102 @@ + + The Complete BBC + 1986 + Audiogenic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Complete BBC (alt) + 1986 + Audiogenic + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 Computer Hits + 1985 + Beau Jolly + + + + + + + + + + + + + + Complete Home Entertainment Centre 198? @@ -2711,8 +2853,9 @@ Concentration - 198? + 1983 ASP Software + @@ -2766,7 +2909,7 @@ Conquering Everest - 198? + 1983 ASP Software @@ -2799,11 +2942,11 @@ Contraption - 198? + 1985 Icon - + @@ -2863,10 +3006,28 @@ + + Cosmic Battlezones + 1986 + Ultimate + + + + + + + + + + + + + + Cosmic Camouflage 1988 - Superior Software + Superior Software/Acornsoft @@ -2960,7 +3121,7 @@ - Cowboy Shootout + Cowboy Shoot-Out 1983 Micro Power @@ -3032,8 +3193,8 @@ Acornsoft - - + + @@ -3051,12 +3212,23 @@ Cribbage - 198? + 1982 Superior Software - + + + + + + + Cricket + 1986 + Bug Byte + + + @@ -3064,7 +3236,8 @@ Crime & Detection Quiz 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -3086,7 +3259,7 @@ CroakIt - 19?? + 1983 Kerian @@ -3120,11 +3293,11 @@ Crystal Castles - 1983 - Atarisoft + 1986 + U.S. Gold - - + + @@ -3135,8 +3308,8 @@ Acornsoft - - + + @@ -3161,7 +3334,7 @@ Cutter - 19?? + 198? Voyager @@ -3184,7 +3357,7 @@ Cyborg Warriors 1991 - Superior Software + Superior Software/Acornsoft @@ -3205,18 +3378,18 @@ Cylon Attack (A&F Software) - 1985 + 1983 A&F Software - + Cylon Invasion - 19?? + 1985 Tynesoft @@ -3278,17 +3451,17 @@ Daredevil Denis - 1984 + 1983 Visions - + - Darts (Blue Ribbon Games 2) + Darts (Blue Ribbon) 1985 Blue Ribbon @@ -3300,7 +3473,7 @@ Darts (MRM Software) - 198? + 1984 MRM Software @@ -3323,7 +3496,8 @@ The Dating Game 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -3376,12 +3550,12 @@ - Death Star (Superior Software) + Death Star 1985 Superior Software - + @@ -3392,8 +3566,8 @@ Acornsoft - - + + @@ -3471,7 +3645,7 @@ Denis Through the Drinking Glass - 198? + 1984 ASS @@ -3482,7 +3656,7 @@ Depot Master Finsbury Park - 198? + 1989 Ashley Greenup @@ -3493,7 +3667,7 @@ Depot Master Old Oak Common - 198? + 1989 Ashley Greenup @@ -3536,7 +3710,7 @@ - Diamond Mine (Blue Ribbon Games 2) + Diamond Mine (Blue Ribbon) 1985 Blue Ribbon @@ -3571,8 +3745,8 @@ Dictator - 198? - DK Tronics + 1983 + DK'Tronics @@ -3642,7 +3816,7 @@ Doctor Who The First Adventure - 198? + 1983 BBC Soft @@ -3730,7 +3904,7 @@ Dragon Rider - 198? + 1982 Salamander @@ -3741,7 +3915,7 @@ Dragons Tooth - 198? + 1984 Incentive @@ -3764,7 +3938,7 @@ Draughts (Computer Concepts) - 198? + 1983 Computer Concepts @@ -3775,7 +3949,7 @@ Draughts (Logic Systems) - 198? + 1982 Logic Systems @@ -3834,8 +4008,8 @@ Acornsoft - - + + @@ -3862,13 +4036,24 @@ + + Dune Rider + 1984 + Micro Power + + + + + + + Dungeon Adventure - 1983 + 1982 Level 9 Computing - + @@ -3917,6 +4102,17 @@ + + Early Learning + 1982 + BBC Soft + + + + + + + Eastwood Manor 19?? @@ -4009,7 +4205,7 @@ Elixir (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -4020,7 +4216,7 @@ Elixir 1987 - Superior Software + Superior Software/Acornsoft @@ -4067,7 +4263,7 @@ Domark - + @@ -4120,9 +4316,16 @@ Estra 198? Firebird - + + - + + + + + + + @@ -4185,7 +4388,7 @@ Exile 1988 - Superior Software + Superior Software/Acornsoft @@ -4205,8 +4408,8 @@ - Eye of Zolton - 198? + The Eye of Zolton + 1983 Softek @@ -4215,6 +4418,24 @@ + + Fab Four Vol.1 + 1989 + Audiogenic + + + + + + + + + + + + + + Factfile 500 - Junior General Knowledge 1985 @@ -4262,7 +4483,7 @@ Fall of Rome - 198? + 1984 ASP Software @@ -4288,7 +4509,7 @@ Firebird - + @@ -4309,8 +4530,8 @@ 1983 Micro Power - - + + @@ -4416,9 +4637,9 @@ - Fire Track + FireTrack 1987 - Aardvark + Electric Dreams @@ -4451,7 +4672,7 @@ Fistful of Fun - 198? + 1985 Alligata @@ -4493,6 +4714,24 @@ + + Five Star Games III + 198? + Beau Jolly + + + + + + + + + + + + + + Five Stones of Anadon 1983 @@ -4597,7 +4836,7 @@ Fortress (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -4610,8 +4849,8 @@ 1984 Pace - - + + @@ -4629,7 +4868,7 @@ Frankenstein 2000 (Atlantis) - 198? + 1987 Atlantis @@ -4639,7 +4878,7 @@ - Frankenstein 2000 (Icon) + Frankenstein 2000 1985 Icon @@ -4892,7 +5131,7 @@ Tynesoft - + @@ -4980,7 +5219,7 @@ Galaforce 2 1988 - Superior Software + Superior Software/Acornsoft @@ -5171,8 +5410,8 @@ 1984 Micro Power - - + + @@ -5217,8 +5456,8 @@ Acornsoft - - + + @@ -5258,7 +5497,7 @@ Firebird - + @@ -5330,8 +5569,8 @@ - Grab It - 198? + Grabit + 1984 Voyager @@ -5363,8 +5602,8 @@ - - The Graphic Adventure Creator + + The Adventure Creator 1986 Incentive @@ -5381,8 +5620,8 @@ - - Graphic Adventure Creator (Alt) + + The Graphic Adventure Creator 1986 Incentive @@ -5393,9 +5632,9 @@ - Great Britain Ltd + Great Britain Limited 1983 - Hessel + Simon W. Hessel @@ -5430,8 +5669,8 @@ 1985 Imagine - - + + @@ -5547,7 +5786,7 @@ - Guy in the Hat (Blue Ribbon Games 2) + Guy in the Hat (Blue Ribbon) 1985 Blue Ribbon @@ -5580,8 +5819,8 @@ - Hacker2000 - 198? + Hacker 2000 + 1984 Micrograf @@ -5593,7 +5832,7 @@ Halleys Comet 19?? - Basil Blackwell + Basil Blackwell Ltd @@ -5614,7 +5853,7 @@ Hangman - 198? + 1985 Blue Ribbon @@ -5623,20 +5862,9 @@ - - Happy Numbers - 198? - Bourne Educational Software - - - - - - - - Hareraiser Finale - 198? + Hareraiser (Finale) + 1984 Haresoft @@ -5646,8 +5874,8 @@ - Hareraiser - 198? + Hareraiser (Prelude) + 1984 Haresoft @@ -5659,7 +5887,7 @@ Harlequin 1984 - Haresoft + Kansas @@ -5667,6 +5895,17 @@ + + Haunted Abbey + 1984 + A&F Software + + + + + + + Heathrow ATC 1984 @@ -5772,7 +6011,8 @@ History Quiz 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -5793,7 +6033,7 @@ Hobgoblin 2 - 19?? + 1990 Atlantis @@ -5804,7 +6044,7 @@ Hobgoblin - 19?? + 1989 Atlantis @@ -5826,7 +6066,7 @@ Holed Out Extra Courses Vol.1 - 1990 + 1989 4th Dimension @@ -5837,7 +6077,7 @@ Holed Out Extra Courses Vol.2 - 1990 + 1989 4th Dimension @@ -5885,8 +6125,8 @@ Acornsoft - - + + @@ -5897,15 +6137,15 @@ Acornsoft - - + + Horror Castle - 198? + 1983 A&F Software @@ -5915,12 +6155,12 @@ - Horse Lord - 198? + The Horse Lord + 1984 Century - + @@ -5949,7 +6189,7 @@ Howzat - 198? + 1983 A&F Software @@ -5993,12 +6233,12 @@ - Hunchback Mk.2 + Hunchback (Re-issue) 1984 Superior Software - - + + @@ -6088,6 +6328,18 @@ + + ..I Do + 1983 + Acornsoft/Ivan Berg + + + + + + + + Identify Europe 198? @@ -6125,7 +6377,7 @@ Imogen (Play It Again Sam 5) 1987 - Superior Software + Superior Software/Acornsoft @@ -6157,7 +6409,7 @@ Impossible Mission - 1985 + 1986 U.S. Gold @@ -6224,7 +6476,7 @@ Inheritance 1983 - Hessel + Simon W. Hessel @@ -6285,7 +6537,7 @@ Intruders - 198? + 1983 Interceptor @@ -6422,8 +6674,8 @@ Acornsoft - - + + @@ -6451,19 +6703,19 @@ - Jetpac + Jet-Pac 1984 Ultimate - - + + - Jet Power Jack + Jet-Power Jack 1984 Micro Power @@ -6490,7 +6742,7 @@ Tynesoft - + @@ -6531,23 +6783,23 @@ Johnny Reb - 1984 + 1983 Lothlorien - + Joust - 198? + 1984 Aardvark - + @@ -6733,8 +6985,8 @@ 1984 Micro Power - - + + @@ -6745,8 +6997,8 @@ Acornsoft - - + + @@ -6813,7 +7065,19 @@ - + + + + + + + Knight Lore (Ricochet) + 198? + Ricochet + + + + @@ -6879,8 +7143,8 @@ Acornsoft - - + + @@ -6897,8 +7161,8 @@ - Lander - 198? + Asteroid Lander + 1982 ASP Software @@ -6920,7 +7184,7 @@ Land of Tezrel - 19?? + 1984 Omen @@ -6943,7 +7207,7 @@ Laser Reflex - 198? + 1984 Talent @@ -6956,7 +7220,7 @@ The Last Ninja 2 1988 - Superior Software + Superior Software/Acornsoft @@ -6967,7 +7231,7 @@ The Last Ninja 1988 - Superior Software + Superior Software/Acornsoft @@ -6976,7 +7240,7 @@ - Last of the Free + The Last of the Free 1986 Audiogenic @@ -7143,7 +7407,7 @@ Locks of Luck - 19?? + 1986 Magus @@ -7176,7 +7440,7 @@ Logic1 - 19?? + 1983 Shiva @@ -7248,7 +7512,7 @@ - The Lord of the Rings + Lord of the Rings 1986 Melbourne House @@ -7313,7 +7577,7 @@ Lunar Lander - 1983 + 1982 A&F Software @@ -7383,8 +7647,8 @@ Acornsoft - - + + @@ -7415,7 +7679,7 @@ Making the Most of the Micro - 198? + 1983 BBC Soft @@ -7426,7 +7690,7 @@ Manage - 198? + 1983 CCS @@ -7452,18 +7716,7 @@ Software Projects - - - - - - - Map Rally - 198? - Bourne Educational Software - - - + @@ -7514,12 +7767,12 @@ Match Day - 1984 + 1985 Ocean - + @@ -7630,8 +7883,8 @@ Acornsoft - - + + @@ -7653,8 +7906,8 @@ Acornsoft - - + + @@ -7664,17 +7917,17 @@ 1986 Qualsoft - - - - - - + + + + + + @@ -7700,24 +7953,13 @@ - - Micro Budget - 1983 - Micro Power - - - - - - - Microcosm - 1984 + 1985 Firebird - + @@ -7801,8 +8043,8 @@ - Mined Out - 198? + Mined-Out + 1983 Quicksilva @@ -7817,13 +8059,13 @@ Alternative - + - Mineshaft (Durell) + Mineshaft 1984 Durell @@ -7846,13 +8088,13 @@ - Missile Base v2.0 + Missile Base 1982 Acornsoft - - + + @@ -7948,7 +8190,7 @@ Monsters (Play It Again Sam 11) 1989 - Superior Software + Superior Software/Acornsoft @@ -8041,8 +8283,8 @@ 1983 Micro Power - - + + @@ -8093,7 +8335,7 @@ Firebird - + @@ -8123,7 +8365,7 @@ Mr Wiz (Play It Again Sam 8) 1988 - Superior Software + Superior Software/Acornsoft @@ -8223,7 +8465,7 @@ Music Tools - 19?? + 1986 Duckworth @@ -8328,8 +8570,8 @@ - Mystery of the Lost Sheep - 19?? + The Mystery of the Lost Sheep + 198? Central Computing @@ -8350,8 +8592,8 @@ 1984 Alligata - - + + @@ -8370,7 +8612,7 @@ Network (Play It Again Sam 15) 1991 - Superior Software + Superior Software/Acornsoft @@ -8424,7 +8666,7 @@ - Nightmare Maze (Blue Ribbon Games 1) + Nightmare Maze (Blue Ribbon) 1985 Blue Ribbon @@ -8440,7 +8682,7 @@ MRM Software - + @@ -8514,8 +8756,8 @@ Ogles - 19?? - The Games Master + 1983 + Games Machine @@ -8536,7 +8778,7 @@ Omega Orb - 1986 + 1987 Audiogenic @@ -8558,7 +8800,7 @@ Orpheus - 198? + 1985 A&F Software @@ -8670,7 +8912,7 @@ Palace of Magic 1987 - Superior Software + Superior Software/Acornsoft @@ -8681,7 +8923,7 @@ Pandemonium (Play It Again Sam 13) 1990 - Superior Software + Superior Software/Acornsoft @@ -8736,11 +8978,11 @@ Paras - 1984 + 1983 Lothlorien - + @@ -8813,11 +9055,11 @@ Pengwyn - 1984 + 1983 Postern - - + + @@ -8836,7 +9078,7 @@ Percy Penguin (Play It Again Sam 13) 1990 - Superior Software + Superior Software/Acornsoft @@ -8858,7 +9100,7 @@ Perplexity 1989 - Superior Software + Superior Software/Acornsoft @@ -8905,8 +9147,8 @@ Acornsoft - - + + @@ -8980,7 +9222,7 @@ Pipeline 1989 - Superior Software + Superior Software/Acornsoft @@ -9019,7 +9261,7 @@ - Plan B 2 + Plan B2 1987 Bug Byte @@ -9075,7 +9317,7 @@ Planetfall - 198? + 1983 ASP Software @@ -9101,8 +9343,8 @@ Acornsoft - - + + @@ -9144,7 +9386,7 @@ Plegaron People Eaters - 198? + 1983 RH Software @@ -9272,8 +9514,8 @@ - Pools Winner 2 - 198? + Pools Winner II + 1987 Selec @@ -9284,7 +9526,7 @@ Pools Winner - 198? + 1985 Selec @@ -9305,8 +9547,8 @@ - Postman - 198? + Pete the Plastered Postman + 1982 ASP Software @@ -9329,7 +9571,7 @@ Predator 1988 - Superior Software + Superior Software/Acornsoft @@ -9354,7 +9596,7 @@ Codemasters - + @@ -9405,8 +9647,8 @@ Proteanse - 198? - DK Tronics + 1983 + DK'Tronics @@ -9438,7 +9680,7 @@ - Psycastria 2 (Audiogenic) + Psycastria 2 1989 Audiogenic @@ -9454,7 +9696,7 @@ Audiogenic - + @@ -9473,7 +9715,7 @@ Pyramid Painter - 198? + 1984 Thor @@ -9495,7 +9737,7 @@ - Q Man (Blue Ribbon Games 1) + Q Man (Blue Ribbon) 1985 Blue Ribbon @@ -9517,7 +9759,7 @@ - Q Man's Brother (Blue Ribbon Games 2) + Q Man's Brother (Blue Ribbon) 1985 Blue Ribbon @@ -9541,7 +9783,7 @@ Quest (Superior Software) 1988 - Superior Software + Superior Software/Acornsoft @@ -9550,7 +9792,7 @@ - Quest for the Holy Grail + The Quest for the Holy Grail 198? Epic @@ -9597,7 +9839,7 @@ Qwak 1989 - Superior Software + Superior Software/Acornsoft @@ -9640,7 +9882,7 @@ Ravenskull - 1987 + 1986 Superior Software @@ -9660,13 +9902,24 @@ + + Red Arrows + 1985 + Database + + + + + + + Red Coats - 1985 + 1984 Lothlorien - - + + @@ -9711,6 +9964,17 @@ + + Repton + 1985 + Superior Software + + + + + + + Repton (Blue Ribbon) 198? @@ -9766,17 +10030,6 @@ - - Repton - 1985 - Superior Software - - - - - - - Repton Around the World in 40 Screens 1987 @@ -9791,7 +10044,7 @@ Repton Infinity 1988 - Superior Software + Superior Software/Acornsoft @@ -9802,7 +10055,7 @@ Repton Thru Time 1988 - Superior Software + Superior Software/Acornsoft @@ -9854,6 +10107,17 @@ + + Reversi/Gomoku + 1982 + Pro Software + + + + + + + Reversi (Superior Software) 1983 @@ -9884,7 +10148,7 @@ - + @@ -9916,7 +10180,7 @@ Ricochet 1989 - Superior Software + Superior Software/Acornsoft @@ -10137,8 +10401,8 @@ 1983 Lothlorien - - + + @@ -10189,7 +10453,7 @@ RTC Birmingham - 198? + 1987 Dee-Kay @@ -10243,8 +10507,8 @@ - RTC Limestreet - 198? + RTC Lime Street + 1985 Dee-Kay @@ -10333,8 +10597,8 @@ Ultimate - - + + @@ -10374,11 +10638,11 @@ Saloon Sally - 198? + 1983 Psion - - + + @@ -10396,7 +10660,7 @@ Savage Island Part One - 19?? + 198? Tynesoft @@ -10407,7 +10671,7 @@ Savage Island Part Two - 19?? + 198? Tynesoft @@ -10416,32 +10680,11 @@ - - Savage Pond (Bug Byte) - 1983 - Bug Byte - - - - - - - - - Savage Pond (ASP Software) - 198? - ASP Software - - - - - - - Science Fiction Quiz 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -10473,7 +10716,7 @@ - Screwball (Blue Ribbon Games 2) + Screwball (Blue Ribbon) 1985 Blue Ribbon @@ -10518,7 +10761,7 @@ Sea Queen - 19?? + 1988 Unreleased @@ -10551,7 +10794,7 @@ Secret Sam 1 (Blue Ribbon) - 198? + 1985 Blue Ribbon @@ -10561,7 +10804,7 @@ - Secret Sam 1 (MRM Software) + Secret Sam 1 1983 MRM Software @@ -10572,8 +10815,8 @@ - Secret Sam 2 - 198? + Secret Sam 2 (Blue Ribbon) + 1985 Blue Ribbon @@ -10610,8 +10853,8 @@ Acornsoft - - + + @@ -10661,7 +10904,7 @@ - Shedmaster Bounds Greene + Shedmaster Bounds Green 1987 Dee-Kay @@ -10716,20 +10959,9 @@ - - Signals and Magic - 198? - H&H Software - - - - - - - Sim - 198? + 1984 Viper @@ -10741,7 +10973,7 @@ Sim City 1990 - Superior Software + Superior Software/Acornsoft @@ -10766,7 +10998,7 @@ Godax - + @@ -10807,7 +11039,7 @@ Slicker Puzzle 198? - DK Tronics + DK'Tronics @@ -10816,7 +11048,7 @@ - Sliding Block Puzzles v1.0 + Sliding-Block Puzzles v1.0 1982 Acornsoft @@ -10828,7 +11060,7 @@ - Sliding Block Puzzles v2.3 + Sliding-Block Puzzles v2.3 1982 Acornsoft @@ -10953,7 +11185,7 @@ Snapper (Play It Again Sam 7) 1989 - Superior Software + Superior Software/Acornsoft @@ -10967,8 +11199,8 @@ Acornsoft - - + + @@ -10979,8 +11211,8 @@ Acornsoft - - + + @@ -11003,8 +11235,8 @@ Acornsoft - - + + @@ -11024,7 +11256,7 @@ Snorter 198? - Beebug) + Beebug @@ -11056,7 +11288,7 @@ Soccer Supremo - 198? + 1984 Qualsoft @@ -11113,7 +11345,7 @@ Space Adventure (Pro) - 1982 + 1983 Pro Software @@ -11123,9 +11355,9 @@ - Space Adventure - 198? - Virgin + Space Adventure (Virgin) + 1983 + Virgin Games @@ -11135,7 +11367,7 @@ Space Adventure 1 - 198? + 1983 First Byte @@ -11175,8 +11407,8 @@ MP Software - - + + @@ -11199,7 +11431,7 @@ Amcom - + @@ -11364,7 +11596,7 @@ Spellbinder 1987 - Superior Software + Superior Software/Acornsoft @@ -11374,8 +11606,8 @@ Spellbound Beseiged - 198? - Sullis + 1983 + Sulis Software @@ -11403,11 +11635,11 @@ Sphere of Destiny - 1986 + 1987 Audiogenic - + @@ -11418,8 +11650,8 @@ Acornsoft - - + + @@ -11459,7 +11691,7 @@ Spitfire Flight Simulator - 198? + 1983 Alligata @@ -11529,7 +11761,7 @@ Spycat 1988 - Superior Software + Superior Software/Acornsoft @@ -11554,7 +11786,7 @@ Tynesoft - + @@ -11587,7 +11819,7 @@ Software Invasion - + @@ -11620,7 +11852,7 @@ Firebird - + @@ -11660,7 +11892,7 @@ Starforce Lander - 198? + 1983 First Byte @@ -11717,7 +11949,7 @@ Star Port 1990 - Superior Software + Superior Software/Acornsoft @@ -11731,7 +11963,7 @@ Bubble Bus - + @@ -11753,8 +11985,8 @@ Acornsoft - - + + @@ -11810,15 +12042,15 @@ 1984 Superior Software - - + + Star Trader - 198? + 1983 First Byte @@ -11830,7 +12062,7 @@ Startrek - 198? + 1982 Logic Systems @@ -11885,7 +12117,7 @@ - Steve Davis Snooker (CDS) + Steve Davis Snooker 1986 CDS @@ -11897,8 +12129,9 @@ Stix - 198? + 1984 Supersoft + @@ -12069,7 +12302,7 @@ Sub Killer 198? - DK Tronics + DK'Tronics @@ -12129,6 +12362,17 @@ + + Summer Olympiad + 1988 + Tynesoft + + + + + + + Super-7 1983 @@ -12143,7 +12387,7 @@ Super Fruits 198? - DK Tronics + DK'Tronics @@ -12152,8 +12396,8 @@ - Supergolf - 198? + Super Golf + 1984 Squirrel Soft @@ -12175,7 +12419,7 @@ Super Hangman - 198? + 1982 I.J.K. @@ -12199,7 +12443,7 @@ Superior Soccer 1989 - Superior Software + Superior Software/Acornsoft @@ -12207,7 +12451,18 @@ - + + Superlife + 1982 + Golem + + + + + + + + Superman: The Game 1988 First Star @@ -12218,13 +12473,24 @@ + + Superman: The Man of Steel + 1989 + Tynesoft + + + + + + + Super Pool 1984 Software Invasion - + @@ -12286,6 +12552,17 @@ + + Swarm + 1982 + Computer Concepts + + + + + + + Swoop 1982 @@ -12345,7 +12622,7 @@ Tales of the Arabian Nights - 1983 + 1985 Interceptor @@ -12356,7 +12633,7 @@ Tank Attack (Gem) - 198? + 1983 Gem @@ -12378,7 +12655,7 @@ Tanks! - 1983 + 1982 Salamander @@ -12510,7 +12787,7 @@ Test Match v2 - 198? + 1983 CRL @@ -12528,7 +12805,7 @@ Test Match - 198? + 1983 CRL @@ -12600,24 +12877,6 @@ - - The Art Studio - 1989 - Impact - - - - - - - - - - - - - - The Atlantic Coast Express 198? @@ -12726,13 +12985,43 @@ + + The Gold Collection + 1987 + U.S. Gold + + + + + + + + + + + + + + + + + + + + + + + + + + The Hacker 198? Firebird - + @@ -12786,7 +13075,7 @@ The Magic Sword 1984 - Database + Database Software @@ -12807,11 +13096,11 @@ The Mine - 1984 + 1983 Micro Power - - + + @@ -12878,7 +13167,7 @@ Firebird - + @@ -12943,8 +13232,8 @@ 1986 Superior Software - - + + @@ -12960,18 +13249,6 @@ - - Thunderstruck 2: Mind Master - 1986 - Audiogenic - - - - - - - - Thunderstruck 1985 @@ -12984,6 +13261,17 @@ + + Thunderstruck 2: Mind Master + 1986 + Audiogenic + + + + + + + Time Lords 198? @@ -13177,7 +13465,7 @@ - + @@ -13404,8 +13692,8 @@ 1983 Bug Byte - - + + @@ -13450,8 +13738,8 @@ 1984 Icon - - + + @@ -13556,7 +13844,7 @@ Valley of the Pharaohs - 198? + 1983 First Byte @@ -13605,7 +13893,7 @@ Firebird - + @@ -13621,9 +13909,20 @@ + + Video's Revenge + 1985 + Budgie + + + + + + + Village of Lost Souls (Original) - 1987 + 1985 Magus @@ -13660,8 +13959,8 @@ Acornsoft - - + + @@ -13671,15 +13970,15 @@ 1983 Software Invasion - - + + Wall - 198? + 1983 Micro Power @@ -13777,25 +14076,25 @@ Melbourne House - + - The Way of the Exploding Fist v2 + The Way of the Exploding Fist (Richochet) 1985 - Melbourne House + Richochet - + Web Runner - 198? + 1983 Alligata @@ -13816,7 +14115,7 @@ - Weetabix Versus The Titchies + Weetabix versus The Titchies 1984 Romik @@ -13839,8 +14138,9 @@ West - 19?? + 198? Talent + @@ -13850,8 +14150,8 @@ Wet Zone - 19?? - Everise + 1985 + Everiss @@ -13861,7 +14161,7 @@ What's Eeyore's - 19?? + 1986 Magus @@ -13872,7 +14172,7 @@ Wheeler Dealer - 19?? + 1983 OIC @@ -13936,6 +14236,17 @@ + + Wizzy's Mansion + 1986 + Audiogenic + + + + + + + Whoopsy 1985 @@ -14010,7 +14321,7 @@ - + @@ -14131,7 +14442,7 @@ World Travel Game 1983 - Hessel + Simon W. Hessel @@ -14165,7 +14476,7 @@ Xadomy 1984 - Brassington + Brassington Enterprises @@ -14217,8 +14528,26 @@ + + Yes, Prime Minister + 1987 + Mosaic + + + + + + + + + + + + + + - Yie Ar Kung Fu 2 + Yie Ar Kung-Fu 2 198? Imagine @@ -14229,12 +14558,12 @@ - Yie Ar Kung Fu - 1984 + Yie Ar Kung-Fu + 1985 Imagine - + @@ -14462,8 +14791,8 @@ - Stock Market - 198? + Stockmarket + 1983 ASP Software @@ -14474,7 +14803,7 @@ Tax Calc - 198? + 1983 BBC Soft @@ -14531,6 +14860,17 @@ + + Amazing Ollie + 1983 + Storm Software + + + + + + + Animal, Vegetable, Mineral 1983 @@ -14545,7 +14885,7 @@ Basic Adventures in Space: The Alien Planet 198? - Glentop + Glentop Publishers @@ -14581,7 +14921,7 @@ Bert Boot 1984 - H.S.Software + Highlight Software @@ -14620,9 +14960,10 @@ - Biology + Revise GCE/CSE Biology 1983 - Ivan Berg + Acornsoft/Ivan Berg + @@ -14630,9 +14971,20 @@ + + Biology 'O' Level + 1983 + Calisto + + + + + + + - Bird Watch - 198? + Birdwatch + 1984 Macdonald @@ -14641,6 +14993,17 @@ + + British Isles Geography Quiz + 1984 + Computer Market + + + + + + + Castles and Clowns 198? @@ -14887,6 +15250,17 @@ + + French Tutor + 1983 + Salamander + + + + + + + Fun School 2 (For 6-8 year olds) 1989 @@ -14931,6 +15305,17 @@ + + Happy Numbers + 198? + Bourne Educational Software + + + + + + + Hi Bouncer 198? @@ -14944,8 +15329,8 @@ Honey Logo - 198? - Glentop + 1985 + Glentop Publishers @@ -14966,8 +15351,8 @@ - Junior Maths Part1 - 198? + Junior Maths - Part 1 + 1986 Tynesoft @@ -14977,8 +15362,8 @@ - Junior Maths Part2 - 198? + Junior Maths - Part 2 + 1986 Tynesoft @@ -15021,9 +15406,42 @@ + + Letterbugs + 1983 + Highlight Software + + + + + + + + + Shakespeare Macbeth + 198? + Penguin Study Software + + + + + + + + + Map Rally + 198? + Bourne Educational Software + + + + + + + Maths Invaders - 198? + 1984 Stell @@ -15043,6 +15461,24 @@ + + First Steps with the Mr.Men + 1983 + Mirrorsoft + + + + + + + + + + + + + + Mr Men: Here and There 1985 @@ -15079,7 +15515,7 @@ Numeracy 2 - 198? + 1983 Shiva @@ -15113,7 +15549,7 @@ Quest - 198? + 1983 AUCBE @@ -15136,7 +15572,7 @@ Roadcraft 1 1984 - H.S.Software + Highlight Software @@ -15167,6 +15603,17 @@ + + Sortout + 1983 + Highlight Software + + + + + + + Spanish Gold 1983 @@ -15246,7 +15693,7 @@ Tops and Tails - 198? + 1985 Macmillian @@ -15262,6 +15709,17 @@ + + TownTest + 1983 + Silverlind + + + + + + + Tree Of Knowledge 1983 @@ -15277,7 +15735,7 @@ Twelfth Night 198? - Penguin + Penguin Study Software @@ -15285,6 +15743,19 @@ + + Viking England + 1984 + Fernleaf + + + + + + + + + Where 1982 @@ -15320,8 +15791,8 @@ Word Power - 198? - Sullis + 1983 + Sulis Software @@ -15420,7 +15891,7 @@ Assembly Language Programming Made Easy - 198? + 1983 Century @@ -15510,7 +15981,7 @@ - Artist (Blue Ribbon Games 3) + Artist (Blue Ribbon) 1985 Blue Ribbon @@ -15531,6 +16002,24 @@ + + The Art Studio + 1989 + Impact + + + + + + + + + + + + + + BBC Music Synthesizer 1983 @@ -15542,6 +16031,17 @@ + + Beeb-Art + 1982 + Quicksilva + + + + + + + Beeb Plot 198? @@ -15604,6 +16104,17 @@ + + Interactive 3D + 198? + Design Dynamics + + + + + + + Picture Maker 1983 @@ -15641,7 +16152,7 @@ - Paul Daniel's Magic Show + Paul Daniels' Magic Show 1984 Acornsoft @@ -15652,6 +16163,25 @@ + + LINKWORD Italian + 1983 + Acornsoft + + + + + + + + + + + + + + + LINKWORD Spanish 1984 @@ -16357,7 +16887,7 @@ Model B Computing Issue 10 - 198? + 1985 Argus Press Software diff --git a/hash/cdi.xml b/hash/cdi.xml index bdbe439b7e6..18243f3c8b7 100644 --- a/hash/cdi.xml +++ b/hash/cdi.xml @@ -2,19 +2,17 @@ - - Frog Feast (Demo) - 2000 - Rastersoft - - - - - - - + + 3rd Degree (USA) 1993 Philips @@ -26,6 +24,19 @@ + The 7th Guest (Euro)[DVC][8110033V113 50404169 02] 1994 Philips @@ -45,6 +56,19 @@ + The 7th Guest (Euro)[DVC][8111033V113 50404169 01] 1994 Philips @@ -64,6 +88,19 @@ + The 7th Guest (Ger)[DVC] 1994 Philips @@ -83,6 +120,19 @@ + The 7th Guest (Fra)[DVC] 1994 Philips @@ -102,6 +152,11 @@ + A Great Day at the Races (Euro) 1993 Philips @@ -113,6 +168,11 @@ + A Great Day at the Races (USA) 1993 Philips @@ -125,6 +185,11 @@ + L'Affaire Morlov (Euro)[CD-i-PC] 1996 Titus @@ -136,6 +201,11 @@ + Alice in Wonderland (USA) 1992 Philips @@ -147,6 +217,11 @@ + Alice in Wonderland (Ned) 1993 Philips @@ -158,6 +233,11 @@ + Alice au Pays des Merveilles (Fra) 1992 Philips @@ -169,6 +249,11 @@ + Arcade Classics (Euro) 1996 Namco ~ Philips @@ -180,6 +265,11 @@ + Archeon CD-i Quiz (Ned) 1994 Dutch Electronic Publishers @@ -191,6 +281,11 @@ + Asterix - Caesar's Challenge v3.9 (Euro) 1995 Pathe ~ Philips @@ -202,6 +297,11 @@ + Asterix - De Uitdaging Van Caesar v3.9 (Ned) 1995 Pathe ~ Philips @@ -213,6 +313,11 @@ + Asterix - Die Grosse Reise v3.9 (Ger) 1995 Pathe ~ Philips @@ -224,6 +329,11 @@ + Asterix - El Desafio de Cesar v3.9 (Spa) 1995 Pathe ~ Philips @@ -235,6 +345,11 @@ + Asterix - La Sfida di Cesare v3.9 (Ita) 1995 Pathe ~ Philips @@ -246,6 +361,11 @@ + Asterix - Le Defi de Cesar v3.9 (Fra) 1995 Pathe ~ Philips @@ -257,6 +377,11 @@ + Atlantis - The Last Resort v1.11 (Euro)[DVC] 1996 Philips @@ -269,6 +394,11 @@ + Axis and Allies (USA) 1994 Philips @@ -280,6 +410,11 @@ + Backgammon (Euro, USA) 1992 Philips @@ -291,6 +426,11 @@ + Battleship (Euro, USA) 1991 Philips @@ -302,6 +442,11 @@ + Brain Dead 13 v1.07 (Euro)[DVC] 1997 Philips @@ -314,6 +459,11 @@ + BURN-CYCLE (Euro) 1994 Philips @@ -325,6 +475,11 @@ + BURN-CYCLE (Spa) 1994 Philips @@ -336,6 +491,11 @@ + BURN-CYCLE (Ger) 1995 Philips @@ -347,6 +507,11 @@ + BURN-CYCLE (Ita) 1995 Philips @@ -358,6 +523,11 @@ + BURN-CYCLE (Fra, Demo) 1995 Philips @@ -369,6 +539,11 @@ + Caesars World of Boxing (Euro)[DVC] 1993 Philips @@ -381,6 +556,11 @@ + Caesars World of Boxing (USA)[18621209 01] 1993 Philips @@ -392,6 +572,11 @@ + Caesars World of Boxing (USA)[18621217 03] 1993 Philips @@ -403,6 +588,11 @@ + Caesars World of Gambling (Euro, USA) 1992 Philips @@ -414,6 +604,11 @@ + CD Shoot (Euro) 1992 Philips @@ -425,6 +620,11 @@ + CD Shoot (USA) 1992 Philips @@ -436,6 +636,11 @@ + Centurion (Ned)[DVC] 1995 Philips @@ -448,6 +653,11 @@ + Chaos Control v1.15 (Euro)[DVC] 1995 Philips @@ -460,6 +670,11 @@ + Chaos Control v1.15 (Fra)[DVC] 1995 Philips @@ -472,6 +687,11 @@ + Chaos Control v1.15 (Ger)[DVC] 1995 Philips @@ -484,6 +704,11 @@ + Chaos Control v1.15 (USA)[DVC] 1995 Philips @@ -496,6 +721,11 @@ + Christmas Country (Euro)[DVC] 1996 Creative Media @@ -508,6 +738,11 @@ + Christmas Crisis (Euro)[DVC] 1995 DIMA ~ Philips @@ -520,6 +755,11 @@ + Cluedo (Euro)[DVC] 1994 Philips @@ -532,6 +772,11 @@ + Clue (USA)[DVC] 1994 Philips @@ -544,6 +789,11 @@ + Cluedo - The Mysteries Continue (Euro)[DVC] 1995 Philips @@ -556,6 +806,11 @@ + Connect Four v1 (Euro, USA) 1991 Philips @@ -567,6 +822,13 @@ + Creature Shock (Euro)[DVC] 1996 Philips ~ Virgin @@ -584,6 +846,11 @@ + Dark Castle (Euro, USA) 1992 Philips @@ -595,6 +862,11 @@ + Defender of the Crown (Euro, USA) 1992 Philips @@ -606,6 +878,11 @@ + Do you Remember the '60's (Euro) 1996 Philips @@ -617,6 +894,11 @@ + Domino - Het Oudste Spel, Het Nieuwste Medium (Ned) 1997 Haarlems Uitgeef Bedrijf @@ -628,6 +910,11 @@ + Dragon's Lair (Euro)[DVC] 1994 Philips @@ -640,6 +927,11 @@ + Dragon's Lair (USA)[DVC] 1994 Philips @@ -652,6 +944,11 @@ + Dragon's Lair II - Time Warp (Euro) 1994 Philips @@ -663,6 +960,11 @@ + Dragon's Lair II - Time Warp (USA)[DVC][13920805 02] 1994 Philips @@ -675,6 +977,11 @@ + Dragon's Lair II - Time Warp (USA)[DVC][13920805 01] 1994 Philips @@ -687,6 +994,11 @@ + Drug Wars (Euro)[DVC] 1996 Philips @@ -699,6 +1011,11 @@ + Earth Command - The Future of Our World is in Your Hands v1.05 (Euro) 1994 Philips @@ -710,6 +1027,11 @@ + Earth Command - De Toekomst van de Wereld Ligt in Jouw Handen v1.05 (Ned) 1994 Philips @@ -721,6 +1043,11 @@ + Earth Command - Die Zukunft Unserer welt Liegt in Ihrer Hand v1.05 (Ger) 1994 Philips @@ -732,6 +1059,11 @@ + Earth Command - The Future of Our World is in Your Hands v1.05 (USA) 1994 Philips @@ -743,6 +1075,11 @@ + Earth Command v1.05 (Fra) 1994 Philips @@ -754,6 +1091,11 @@ + Effacer - Hangman of the 25th Century (USA) 1994 Philips @@ -765,6 +1107,11 @@ + Escape from CyberCity (Euro, USA) 1992 Philips @@ -776,6 +1123,11 @@ + Family Games I (Euro) 1995 Philips @@ -787,6 +1139,11 @@ + Family Games II - Junk Food Jive (Euro) 1995 Philips @@ -798,6 +1155,11 @@ + Flashback (Euro) 1995 Philips @@ -809,6 +1171,11 @@ + Girl's Club - The Fantasy Dating Game (USA) 1993 Philips @@ -820,6 +1187,11 @@ + Golden Oldies I (Euro) 1997 SPC Vision @@ -831,6 +1203,11 @@ + Golden Oldies II (Euro) 1997 SPC Vision @@ -842,6 +1219,11 @@ + Les Guignols de l'Info - Le Jeu! (Fra)[DVC] 1996 CANAL+ ~ Philips @@ -854,6 +1236,11 @@ + Hieroglyph (Ger) 1994 ZYX-Music @@ -865,6 +1252,11 @@ + Hotel Mario (Euro) 1994 Philips @@ -876,6 +1268,11 @@ + Hotel Mario (USA) 1994 Philips @@ -887,6 +1284,11 @@ + Inca (Euro)[8100126 50341 698 01] 1993 Coktel Vision ~ Philips @@ -898,6 +1300,11 @@ + Inca (Euro)[FPD Testing - Phase 1] 1993 Coktel Vision ~ Philips @@ -909,6 +1316,11 @@ + Inca (Euro)[8100126V206 50399445 01] 1994 Coktel Vision ~ Philips @@ -920,6 +1332,11 @@ + Inca (Euro) 1994 Coktel Vision ~ Philips @@ -931,6 +1348,11 @@ + International Tennis Open (Euro, USA) 1993 Pathe ~ Philips @@ -942,6 +1364,11 @@ + International Tennis Open v2.01 (Spa) 1993 Pathe ~ Philips @@ -953,6 +1380,11 @@ + International Tennis Open v3.01 (Ger) 1993 Pathe ~ Philips @@ -964,6 +1396,11 @@ + International Tennis Open v3.01 (Ger)[2 players] 1994 Pathe ~ Philips @@ -975,6 +1412,11 @@ + International Tennis Open v1.01 (Ita)[2 players] 1994 Pathe ~ Philips @@ -986,6 +1428,11 @@ + International Tennis Open v3.03 (Euro)[2 players] 1994 Pathe ~ Philips @@ -997,6 +1444,11 @@ + International Tennis Open v3.03 (USA)[2 players] 1994 Philips @@ -1008,6 +1460,11 @@ + Jeopardy! (USA) 1994 Philips @@ -1019,6 +1476,11 @@ + Jigsaw - The Ultimate Electronic Challenge (USA) 1992 Philips @@ -1030,6 +1492,11 @@ + The Joker's Wild! Jr. (USA) 1994 Philips @@ -1041,6 +1508,11 @@ + The Joker's Wild! (USA) 1994 Philips @@ -1052,6 +1524,11 @@ + Kether v3.11 (Euro) 1994 Philips @@ -1063,6 +1540,11 @@ + Kether v3.09 (Euro) 1993 Philips @@ -1074,6 +1556,11 @@ + Kether v3.09 (Euro, Alt) 1993 Philips @@ -1085,6 +1572,11 @@ + Kether v3.12 (Ned) 1994 Philips @@ -1096,6 +1588,11 @@ + Kether v3.08 (Ger) 1993 Philips @@ -1107,6 +1604,11 @@ + Kether v3.11 (Ger) 1994 Philips @@ -1118,6 +1620,11 @@ + Kether v3.11 (USA) 1994 Philips @@ -1129,6 +1636,11 @@ + Kingdom - Shadoan (Euro)[DVC] 1996 Philips @@ -1141,6 +1653,11 @@ + Kingdom - The Far Reaches (USA)[DVC] 1995 Philips @@ -1153,6 +1670,11 @@ + L'Ange et le Demon (Fra) 1993 Philips @@ -1164,6 +1686,11 @@ + Labyrinth of Crete (Euro)[DVC] 1995 Philips @@ -1176,6 +1703,11 @@ + Laser Lords (USA)[07420911 01] 1992 Philips @@ -1187,6 +1719,11 @@ + Laser Lords (USA)[3106900742 50273 097 01] 1992 Philips @@ -1198,6 +1735,11 @@ + The Last Bounty Hunter (Euro) 1996 Philips @@ -1209,6 +1751,11 @@ + Lemmings (Euro) 1994 Philips @@ -1220,6 +1767,11 @@ + Lingo v1.07 (Ned) 1995 Philips @@ -1231,6 +1783,11 @@ + Link - The Faces of Evil (Euro) 1993 Philips @@ -1242,6 +1799,11 @@ + Link - The Faces of Evil (Fra) 1993 Philips @@ -1253,6 +1815,11 @@ + Link - De Gezichten Van Het Kwaad (Ned) 1993 Philips @@ -1264,6 +1831,11 @@ + Link - Die Fratzen des Boesen (Ger) 1993 Philips @@ -1275,6 +1847,11 @@ + Litil Divil (Euro)[DVC] 1994 Philips @@ -1287,6 +1864,11 @@ + Litil Divil (USA)[DVC] 1994 Philips @@ -1299,6 +1881,11 @@ + Lords of the Rising Sun (USA) 1992 Philips @@ -1310,6 +1897,11 @@ + Lost Eden (Euro)[DVC] 1995 Philips @@ -1322,6 +1914,11 @@ + Lost Eden (Ger)[DVC] 1995 Philips @@ -1334,6 +1931,11 @@ + Lost Eden (Ned)[DVC] 1995 Philips @@ -1346,6 +1948,11 @@ + The Lost Ride (Euro)[DVC] 1998 Philips @@ -1358,6 +1965,11 @@ + Mad Dog II - The Lost Gold (Euro)[DVC] 1995 Philips @@ -1370,6 +1982,11 @@ + Mad Dog 2 - Le Tresor Perdu (Fra)[DVC] 1996 Philips @@ -1382,6 +1999,11 @@ + Mad Dog McCree (Euro)[DVC] 1994 Philips @@ -1394,6 +2016,11 @@ + Mad Dog McCree (USA)[DVC][05820818 N01] 1994 Philips @@ -1406,6 +2033,11 @@ + Mad Dog McCree (USA)[DVC][05820826 01] 1994 Philips @@ -1418,6 +2050,11 @@ + Magic Eraser (Ger) 1994 ZYX-Music @@ -1429,6 +2066,11 @@ + Making the Grade v0.90 (Euro, Pre-Release)[DVC] 1994 Philips @@ -1441,6 +2083,13 @@ + Marco Polo (Euro) 1995 Philips @@ -1459,6 +2108,13 @@ + Marco Polo (Fra) 1995 Philips @@ -1477,6 +2133,11 @@ + Master Labyrinth v1.06 (Euro)[DVC] 1995 Pack-In Video @@ -1489,6 +2150,11 @@ + Mega Maze v1.06 (Euro) 1994 Philips @@ -1500,6 +2166,11 @@ + Mega Maze v1.06 (USA) 1994 Philips @@ -1511,6 +2182,11 @@ + Merlin's Apprentice v1.1 (Euro) 1995 Philips @@ -1522,6 +2198,11 @@ + Merlin's Apprentice v1.2 (USA) 1995 Philips @@ -1533,6 +2214,11 @@ + Micro Machines (Euro) 1995 Philips @@ -1544,6 +2230,11 @@ + Micro Machines (Euro, Demo) 1995 Philips @@ -1555,6 +2246,11 @@ + Mutant Rampage - Bodyslam (Euro)[DVC] 1994 Philips @@ -1567,6 +2263,11 @@ + Mutant Rampage - Bodyslam (USA)[DVC] 1994 Philips @@ -1579,6 +2280,11 @@ + Myst (Euro) 1996 Philips @@ -1590,6 +2296,11 @@ + Mystic Midway - Phantom Express (Euro) 1993 Philips @@ -1601,6 +2312,11 @@ + Mystic Midway - Rest in Pieces (Euro, USA) 1992 Philips @@ -1612,6 +2328,11 @@ + Mystic Midway - Rest in Pieces (JP) 1992 Philips @@ -1623,6 +2344,11 @@ + NFL Football Trivia Challenge '94-'95 Edition (Euro) 1994 Philips @@ -1634,6 +2360,11 @@ + NFL Football Trivia Challenge (USA) 1993 Philips @@ -1645,6 +2376,11 @@ + NFL Hall of Fame Football (Euro)[DVC] 1994 Philips @@ -1657,6 +2393,11 @@ + Othello (Euro) 1993 Philips @@ -1668,6 +2409,11 @@ + Pac-Panic (Euro) 1995 Namco ~ Philips @@ -1679,6 +2425,11 @@ + The Palm Springs Open (Euro, USA) 1991 Philips @@ -1690,6 +2441,11 @@ + Die Palm Springs Open (Ger) 1992 Philips @@ -1701,6 +2457,11 @@ + L'Open de Palm Springs (Fra) 1992 Philips @@ -1712,6 +2473,11 @@ + The Palm Springs Open (Ita) 1992 Philips @@ -1723,6 +2489,11 @@ + The Palm Springs Open (USA) 1991 Philips @@ -1734,6 +2505,11 @@ + Pinball (USA)[3106900342 50238 037 03] 1992 Philips @@ -1745,6 +2521,11 @@ + Pinball (USA)[3106900342 50238 037 04] 1992 Philips @@ -1756,6 +2537,11 @@ + Power Hitter (Euro) 1992 Philips @@ -1767,6 +2553,11 @@ + Power Hitter (USA)[08120804 01] 1993 Philips @@ -1778,6 +2569,11 @@ + Power Hitter (USA)[08120908 01] 1993 Philips @@ -1789,6 +2585,11 @@ + Rise of the Robots (Euro)[DVC] 1995 Philips @@ -1801,6 +2602,11 @@ + Sargon Chess (USA)[690 030-2 50253 278 01] 1992 Philips @@ -1812,6 +2618,11 @@ + Sargon Chess (USA)[03020320 01] 1992 Philips @@ -1823,6 +2634,11 @@ + Scotland Yard - Interactive v1.03 (Euro) 1994 Philips @@ -1834,6 +2650,11 @@ + Scotland Yard - Interactif v1.04 (Fra) 1994 Philips @@ -1845,6 +2666,11 @@ + Scotland Yard - Interactive v1.09 (Ger) 1993 Philips @@ -1856,6 +2682,11 @@ + Secret Mission v1.03 (Euro) 1996 Philips @@ -1867,6 +2698,11 @@ + Secret Mission v1.03 (Ger) 1996 Philips @@ -1878,6 +2714,11 @@ + Secret Mission v1.03 (Ned) 1996 Philips @@ -1889,6 +2730,11 @@ + Shaolin's Road (Euro) 1995 Philips @@ -1900,6 +2746,11 @@ + Space Ace (Euro)[DVC] 1994 Philips @@ -1912,6 +2763,11 @@ + Space Ace (USA)[DVC] 1994 Philips @@ -1924,6 +2780,11 @@ + Sport Freaks (Ned) 1996 Philips @@ -1935,6 +2796,11 @@ + Striker Pro (Euro) 1994 Philips @@ -1946,6 +2812,11 @@ + Striker Pro (USA) 1994 Philips @@ -1957,6 +2828,11 @@ + Strip Poker Live (Euro) 1995 Green Pig Production @@ -1968,6 +2844,11 @@ + Strip-Poker Pro (Fra) 1994 Hot Stage @@ -1979,6 +2860,11 @@ + Tangram - The Ultimate Chinese Game (Euro) 1992 Philips @@ -1990,6 +2876,11 @@ + Tetris (Euro, USA) 1992 Philips @@ -2001,6 +2892,11 @@ + Tetsuo Gaiden (Euro)[DVC] 1997 New Frontier @@ -2013,6 +2909,11 @@ + TextTiles v1 (USA) 1992 Philips @@ -2024,6 +2925,16 @@ + Thunder in Paradise (Euro)[DVC] 1995 Philips @@ -2043,6 +2954,16 @@ + Thunder in Paradise (USA)[DVC] 1995 Philips @@ -2062,6 +2983,16 @@ + Thunder in Paradise (Ger)[DVC] 1995 Philips @@ -2082,6 +3013,11 @@ + The Ultimate Noah's Ark (Euro) 1994 Philips @@ -2093,6 +3029,11 @@ + The Ultimate Noah's Ark (USA) 1994 Philips @@ -2104,6 +3045,11 @@ + Ultra CD-i Soccer (Euro)[DVC] 1997 Philips @@ -2116,9 +3062,15 @@ - Vegas Girls (Euro)[access code 1234] + + Vegas Girls (Euro) 1995 Status + @@ -2127,6 +3079,11 @@ + Video Grand Prix Speedway (Fra) 1993 Philips @@ -2138,6 +3095,11 @@ + Video Speedway - The Ultimate Racing Experience (Euro) 1993 Philips @@ -2149,6 +3111,11 @@ + Video Speedway - The Ultimate Racing Experience (USA) 1993 Philips @@ -2160,6 +3127,11 @@ + Voetbal v1.04 (Ned)[DVC] 1994 Philips @@ -2172,9 +3144,15 @@ - Voyeur ...Don't Get Caught (Euro)[access code 3333] + + Voyeur ...Don't Get Caught (Euro) 1993 Philips + @@ -2183,9 +3161,15 @@ - Voyeur ...Don't Get Caught (USA)[access code 3333][11220909 01] + + Voyeur ...Don't Get Caught (USA)[11220909 01] 1993 Philips + @@ -2194,9 +3178,15 @@ - Voyeur ...Don't Get Caught (USA)[access code 3333][11220928 03] + + Voyeur ...Don't Get Caught (USA)[11220928 03] 1993 Philips + @@ -2205,9 +3195,15 @@ - Voyeur ...Lass Dich Nicht Erwischen! (Ger)[access code 3333] + + Voyeur ...Lass Dich Nicht Erwischen! (Ger) 1995 Philips + @@ -2216,9 +3212,15 @@ - Voyeur ...Soyez Prudent (Fra)[access code 3333] + + Voyeur ...Soyez Prudent (Fra) 1995 Philips + @@ -2227,6 +3229,11 @@ + The Wacky World of Minature Golf - With Eugene Levy (Euro) 1993 Philips @@ -2238,6 +3245,11 @@ + The Wacky World of Minature Golf - With Eugene Levy (USA) 1993 Philips @@ -2249,6 +3261,11 @@ + Whack a Bubble (Euro) 1997 New Frontier @@ -2260,6 +3277,11 @@ + Who Shot Johnny Rock (Euro)[DVC] 1995 Philips @@ -2272,6 +3294,11 @@ + Who Shot Johnny Rock (USA)[DVC] 1995 Philips @@ -2284,6 +3311,11 @@ + Wimbledon Challenge - The Official Wimbledon Quiz Game (Euro) 1993 Philips @@ -2295,6 +3327,11 @@ + Wordplay (Euro) 1994 Philips @@ -2306,6 +3343,11 @@ + World Cup Golf (Euro)[DVC] 1995 Philips @@ -2318,6 +3360,11 @@ + De Zaak van Sam - Interactieve Detective (Ned)[DVC] 1997 NOB-Interactive @@ -2330,6 +3377,11 @@ + Zelda - The Wand of Gamelon (Euro) 1993 Philips @@ -2341,6 +3393,11 @@ + Zelda - De toverstaf van Gamelon (Ned) 1993 Philips @@ -2352,6 +3409,11 @@ + Zelda - Der Zauberstab von Gamelon (Ger) 1993 Philips @@ -2363,6 +3425,11 @@ + Zelda - The Wand of Gamelon (Fra) 1993 Philips @@ -2374,6 +3441,11 @@ + Zelda - The Wand of Gamelon (USA) 1993 Philips @@ -2385,6 +3457,11 @@ + Zelda's Adventure (Euro) 1995 Philips @@ -2396,6 +3473,11 @@ + Zenith (Euro) 1997 Philips @@ -2407,6 +3489,11 @@ + Zombie Dinos from Planet Zeltoid (Euro) 1992 Philips @@ -2418,6 +3505,11 @@ + Zombie Dinos de la Planete Zeltoide (Fra) 1993 Philips @@ -2429,6 +3521,11 @@ + Zombie Dinos from Planet Zeltoid (USA) 1992 Philips @@ -2440,6 +3537,11 @@ + Zombie Dinos van de Planeet Zeltoid (Ned) 1993 Philips @@ -2451,6 +3553,11 @@ + Zombie Dinos vom Planeten Zeltoid (Ger) 1994 Philips @@ -2465,6 +3572,11 @@ + 1995 - All the News and Views (Euro)[DVC] 1995 Philips @@ -2477,6 +3589,11 @@ + A Child is Born v1.0 (Euro) 1993 Philips @@ -2488,6 +3605,11 @@ + A Child is Born v1.0 (USA) 1994 Philips @@ -2499,6 +3621,12 @@ + A National Parks Tour (USA) 1992 Philips @@ -2510,6 +3638,11 @@ + A Night in Nylon City (Euro)[DVC] 1995 ICDI ~ Sofidoc @@ -2522,6 +3655,11 @@ + A Visit To Sesame Street - Letters (Euro, USA) 1992 Philips @@ -2533,6 +3671,11 @@ + A Visit To Sesame Street - Numbers (USA)[3106900632 01] 1991 Philips @@ -2544,6 +3687,11 @@ + A Visit To Sesame Street - Numbers (USA)[3106900192 50239 141 01] 1992 Philips @@ -2555,6 +3703,11 @@ + A Visit to the Valley of Puebla and the Amparo Museum (USA) 1992 Philips @@ -2566,6 +3719,11 @@ + Accent Health - Information for Healthy Living - January 2004 - General CDi 1-04 (USA)[DVC] 2004 CNN @@ -2578,6 +3736,11 @@ + Accent Health - Information for Healthy Living - November 2004 - 50 + Silver CDi 1104 (USA)[DVC] 2004 CNN @@ -2590,6 +3753,11 @@ + Accent Health - Information for Healthy Living - November 2004 - General CDi 11-04 (USA)[DVC] 2004 CNN @@ -2602,6 +3770,11 @@ + Accent Health - Information for Healthy Living - October 2004 - General CDi 10-04 (USA)[DVC] 2004 CNN @@ -2614,6 +3787,11 @@ + ACT College Search (USA) 1992 Philips @@ -2625,6 +3803,11 @@ + ADI Accompagnement Scolaire - Français-Maths CE1 (Fra) 1994 Coktel Vision @@ -2636,6 +3819,11 @@ + ADI Accompagnement Scolaire - Français-Maths CE2 (Fra) 1994 Coktel Vision @@ -2647,6 +3835,11 @@ + ADI Accompagnement Scolaire - Français-Maths CM1 (Fra) 1994 Coktel Vision @@ -2658,6 +3851,11 @@ + ADI Accompagnement Scolaire - Français-Maths CM2 (Fra) 1994 Coktel Vision @@ -2669,6 +3867,11 @@ + AIDS Awareness (USA) 1994 Multimedia Software @@ -2680,6 +3883,11 @@ + AIMS - A First Look at Birds [DVC] 1995 AIMS Multimedia @@ -2692,6 +3900,11 @@ + AIMS - A First Look at Mammals (USA)[DVC] 1995 AIMS Multimedia @@ -2704,6 +3917,11 @@ + AIMS - A First Look at Trees (USA)[DVC] 1995 AIMS Multimedia @@ -2716,6 +3934,11 @@ + AIMS - Animal Communities (USA)[DVC] 1995 AIMS Multimedia @@ -2728,6 +3951,11 @@ + AIMS - Animal Life in a Tidepool (USA)[DVC] 1995 AIMS Multimedia @@ -2740,6 +3968,11 @@ + AIMS - Beavers and How they Live (USA)[DVC] 1995 AIMS Multimedia @@ -2752,6 +3985,11 @@ + AIMS - Bees and How they Live (USA)[DVC] 1995 AIMS Multimedia @@ -2764,6 +4002,11 @@ + AIMS - Ecosystems - Nature in Balance (USA)[DVC] 1995 AIMS Multimedia @@ -2776,6 +4019,11 @@ + AIMS - Evolution - Change Through Natural Selection (USA)[DVC] 1995 AIMS Multimedia @@ -2788,6 +4036,11 @@ + AIMS - Exploring our Solar System (USA)[DVC] 1995 AIMS Multimedia @@ -2800,6 +4053,11 @@ + AIMS - Frogs and How they Live (USA)[DVC] 1995 AIMS Multimedia @@ -2812,6 +4070,11 @@ + AIMS - How Animals Survive (USA)[DVC] 1995 AIMS Multimedia @@ -2824,6 +4087,11 @@ + AIMS - How we Classify Animals (USA)[DVC] 1995 AIMS Multimedia @@ -2836,6 +4104,11 @@ + AIMS - Insects Reproduction and Metamorphosis (USA)[DVC] 1995 AIMS Multimedia @@ -2848,6 +4121,11 @@ + AIMS - Learning About Ecology (USA)[DVC] 1995 AIMS Multimedia @@ -2860,6 +4138,11 @@ + AIMS - Temperature, Pressure and Humidity (USA)[DVC] 1995 AIMS Multimedia @@ -2872,6 +4155,11 @@ + AIMS - The Civil War - Four Years of War and its Aftermath (USA)[DVC] 1995 AIMS Multimedia @@ -2884,6 +4172,11 @@ + AIMS - The Civil War - The South Secedes and War Begins (USA)[DVC] 1995 AIMS Multimedia @@ -2896,6 +4189,11 @@ + AIMS - Winds, Fronts and Storms (USA)[DVC] 1995 AIMS Multimedia @@ -2908,6 +4206,11 @@ + All the Fun of the Fair - Engels voor kinderen (Ned) 1993 Philips @@ -2919,6 +4222,11 @@ + Alles over CD-i - Apr-Mei 1995 (Ned) 1995 Philips @@ -2930,6 +4238,11 @@ + Alles over CD-i - Aug-Sep 1994 (Ned) 1994 Philips @@ -2941,6 +4254,11 @@ + De Amsterdamse Effectenbeurs Interactief (Ned) 1996 Philips @@ -2952,6 +4270,11 @@ + Andrew Lloyd Webber - The Premiere Collection Encore (Euro)[DVC] 1993 Philips ~ PolyGram @@ -2964,6 +4287,11 @@ + Andrew Lloyd Webber - The Premiere Collection Encore (USA)[DVC] 1993 Philips ~ PolyGram @@ -2976,6 +4304,11 @@ + Anne Willan presents The Food of France (Euro) 1992 Philips @@ -2987,6 +4320,11 @@ + Anne Willan presents The Food of France (USA) 1992 Philips @@ -2998,6 +4336,11 @@ + Around Atlanta - The Olympic City (Euro)[DVC] 1996 Philips @@ -3010,6 +4353,11 @@ + Around Hollywood - auf den spuren der stars (Ger) 1995 Philips @@ -3021,6 +4369,11 @@ + The Art of the Czars - St. Petersburg and the Treasures of the Hermitage (Euro, USA) 1992 Philips @@ -3032,6 +4385,11 @@ + Astronomie Flammarion - Etoiles et Galaxies (Fra) 1994 Philips @@ -3043,6 +4401,11 @@ + Audio-Video Products '92-'93 on CD-Interactive v2 (Euro) 1992 Philips @@ -3054,6 +4417,11 @@ + La Bande Annonce - Automne-Hiver 95-96 (Fra) 1996 Philips @@ -3065,6 +4433,11 @@ + El Barrio Mas Divertido de Richard Scarry (Spa) 1992 Philips @@ -3076,6 +4449,11 @@ + Beauty and the Beast (USA) 1992 Philips @@ -3087,6 +4465,11 @@ + Die Schöne und das Tier (Ger) 1993 Philips @@ -3098,6 +4481,11 @@ + The Berenstain Bears - On Their Own and You On Your Own (USA) 1993 Philips @@ -3109,6 +4497,11 @@ + The Berenstain Bears - Les Ours Berenstain Comme des Grands (Fra) 1994 Philips @@ -3120,6 +4513,11 @@ + Die Berenstain-Baren - Selbst ist der bar - mach mit - ist gar nicht schwer! (Ger) 1993 Philips @@ -3131,6 +4529,11 @@ + Thuis Bij de Berenstain Beren - Thuis en bij jou (Ned) 1993 Philips @@ -3142,6 +4545,11 @@ + Bertelsmann Universal Lexikon (Ger) 1995 Pathe ~ Philips @@ -3153,6 +4561,11 @@ + Bertelsmann Universal Lexikon (Ger)[DVC] 1995 Pathe ~ Philips @@ -3165,6 +4578,11 @@ + Bertelsmann Universal Lexikon - Demo-Disk (Ger) 1994 Pathe ~ Philips @@ -3176,6 +4594,11 @@ + The Best of Baby Songs - Featuring the Songs of Hop Palmer (USA)[DVC] 1993 Philips @@ -3188,6 +4611,11 @@ + The Best of Draw-50 with Lee Ames (USA) 1993 Philips @@ -3199,6 +4627,11 @@ + The Best Of Manfred Deix Vol. 1 (Aut)[DVC] 1994 Philips @@ -3211,6 +4644,11 @@ + Breast Self-Examination - Auto-examen Del Seno (USA) 1994 Media Inc @@ -3222,6 +4660,11 @@ + Brer Rabbit and the Wonderful Tar Baby (USA) 1991 Philips @@ -3233,6 +4676,11 @@ + Bryan Adams - Waking up the Neighbours (Euro) 1992 Philips @@ -3244,6 +4692,21 @@ + BURN-CYCLE - The Music (Euro)[BURN-CYCLE, 810 0114, 813 0118, 815 0102, 816 0056][CD-Audio] 1994 Philips @@ -3255,6 +4718,11 @@ + El Camino de Santiago - La milenaria ruta de las estrellas (Spa) 1995 ANAYAtouring - Philips @@ -3266,6 +4734,11 @@ + El Camino de Santiago - La milenaria ruta de las estrellas (Compilation Cultura) (Spa) 1995 ANAYAtouring - Philips @@ -3277,6 +4750,11 @@ + Cartoon Carnival (Euro, USA)[DVC enhanced] 1994 Philips @@ -3289,6 +4767,11 @@ + Cartoon Jukebox (USA)[310690001-2 50228 730 01] 1991 Philips @@ -3300,6 +4783,11 @@ + Cartoon Jukebox (USA)[3106900012 01!] 1991 Philips @@ -3311,6 +4799,11 @@ + Cartoon Jukebox (Ger) 1992 Philips @@ -3322,6 +4815,29 @@ + CD-i Demonstratie Disc - Fall 1996 - Spring 1997 (Ned)[DVC] 1996 Philips @@ -3334,6 +4850,11 @@ + CD-I Full Motion Video Update (USA) 1993 Philips @@ -3345,6 +4866,11 @@ + CD-i im gewerblichen Einsatz... (Ger) 1997 Philips @@ -3356,6 +4882,11 @@ + Die CD-i mit der Maus - Auf dem Bauernhof (Ger) 1995 Philips @@ -3367,6 +4898,11 @@ + CD-i Title Sampler - Fall '94 (USA) 1994 Philips @@ -3378,6 +4914,11 @@ + CD-i Title Sampler - Summer '94 (USA) 1994 Philips @@ -3389,6 +4930,11 @@ + CD-i Title Sampler - Winter '94 (USA) 1994 Philips @@ -3400,6 +4946,11 @@ + CD-I World - Erste europaische Ausgabe - Demo Disc (Ger) 1994 Hinweise @@ -3411,6 +4962,11 @@ + CD-Online - Issue 01 - Internet on TV (Euro)[DVC] 1995 CD-Online @@ -3423,6 +4979,11 @@ + CD-Online - Issue 02 - The Internet Game Issue (Euro)[DVC] 1996 CD-Online @@ -3435,6 +4996,11 @@ + CD-Online Disc 97-10 (Euro)[DVC] 1997 CD-Online @@ -3447,6 +5013,11 @@ + CDI 450 - Tutorial Disc (Euro) 1994 Philips @@ -3458,6 +5029,11 @@ + CDI 470 - Tutorial Disc (Euro) 1995 Philips @@ -3469,6 +5045,11 @@ + Children's Musical Theatre (USA)[00821015 01] 1992 Philips @@ -3480,6 +5061,11 @@ + Children's Musical Theatre (USA)[0082914 01] 1992 Philips @@ -3491,6 +5077,11 @@ + Children's Musical Theatre (USA)[3106900082 50268 090 01] 1992 Philips @@ -3502,6 +5093,11 @@ + Cistercian Architecture (Euro) 1994 Philips @@ -3513,6 +5109,11 @@ + Classical Jukebox (Euro, USA) 1991 Philips @@ -3524,6 +5125,11 @@ + Comprendre le CD-I - Understanding CD-I (Euro) 1995 Philips @@ -3535,6 +5141,11 @@ + Compton's Interactive Encyclopedia (Euro)[DVC enhanced] 1995 Compton's NewMedia @@ -3547,6 +5158,11 @@ + Compton's Interactive Encyclopedia - CD-Interactive (Euro) 1992 Compton's NewMedia @@ -3558,6 +5174,11 @@ + Compton's Interactive Encyclopedia - CD-Interactive (USA) 1992 Compton's NewMedia @@ -3569,6 +5190,11 @@ + The Concise Oxford Dictionary & Oxford Thesaurus (Euro) 1995 Oxford University Press ~ Philips @@ -3580,6 +5206,11 @@ + Cool Oldies Jukebox (USA) 1991 Mercury ~ Philips @@ -3591,6 +5222,55 @@ + Cosmopolitan Interactive - Tonetics (USA)[DVC] 1995 Philips @@ -3603,6 +5283,11 @@ + The Crayon Factory (Euro) 1995 Philips @@ -3614,6 +5299,11 @@ + The Crayon Factory (USA) 1994 Philips @@ -3625,6 +5315,11 @@ + Create your own Caricature with Spitting Image (Euro)[8110001 50274 188 01] 1992 Philips @@ -3636,6 +5331,11 @@ + Create your own Caricature with Spitting Image (Euro)[8110001 50274 188 02] 1992 Philips @@ -3647,6 +5347,11 @@ + Cruise Directory (UK) 1994 Barclays ~ Philips @@ -3658,6 +5363,11 @@ + Dansen! (Ned)[DVC] 1996 Philips @@ -3670,6 +5380,11 @@ + Dave Grusin - The Gershwin Connection (USA) 1993 Philips @@ -3681,6 +5396,11 @@ + Destination Great Britain - Central and Northern England (USA)[DVC] 1994 World of Wonders @@ -3693,6 +5413,11 @@ + Destination Great Britain - England's West Country (USA)[DVC] 1994 World of Wonders @@ -3705,6 +5430,11 @@ + Destination Great Britain - London & Southern England (USA)[DVC] 1995 World of Wonders @@ -3717,6 +5447,11 @@ + Destination Great Britain - Wales (USA)[DVC] 1994 World of Wonders @@ -3729,6 +5464,11 @@ + Discover Sports Fishing - Northern Edition (USA) 1995 World of Wonders @@ -3740,6 +5480,11 @@ + Discovery - Your Place in the World (USA) 1997 Educational Management Group @@ -3751,6 +5496,11 @@ + Dit Was 1994 - Wereldnieuws Overzicht (Ned)[DVC] 1994 Philips @@ -3763,6 +5513,11 @@ + Dit Was 1995 - Wereldnieuws Overzicht (Ned)[DVC] 1996 Philips @@ -3775,6 +5530,11 @@ + Der Dom zu St. Stephan in Wien (Aut) 1995 Philips @@ -3786,6 +5546,11 @@ + The Downhome Blues (USA) 1994 Philips @@ -3797,6 +5562,11 @@ + Dutch Masters of the Seventeenth Century (Euro) 1992 Philips @@ -3808,6 +5578,11 @@ + Dutch Masters of the Seventeenth Century (USA) 1992 Philips @@ -3819,6 +5594,11 @@ + E-Z Play Today Keyboard - Now Anyone Can Learn To Play Keyboard! (Euro) 1994 Philips @@ -3830,6 +5610,11 @@ + Earth - The Changing Environment (USA) 1995 World of Wonders @@ -3841,6 +5626,11 @@ + Ein Kind Entsteht (Ger) 1994 Philips @@ -3852,6 +5642,11 @@ + The Emperor's New Clothes (USA) 1992 Philips @@ -3864,6 +5659,11 @@ + Encyclopaedia Hachette (Euro) 1994 Philips @@ -3875,6 +5675,11 @@ + Enkhuizer Almanak 1997 - 402 Jaargang (Ned) 1996 Philips @@ -3886,6 +5691,13 @@ + Eric Clapton - The Cream Of Eric Clapton (Euro)[DVC] 1994 Philips ~ PolyGram @@ -3903,6 +5715,11 @@ + Essentials - The New Shape of Home Shopping by Freemans (UK) 1994 Barclays ~ Philips @@ -3914,6 +5731,11 @@ + European Party (Euro) 1994 Giunti Multimedia ~ Philips @@ -3925,6 +5747,11 @@ + Exploration - The World Around You (USA) 1997 Educational Management Group @@ -3936,6 +5763,11 @@ + Explorations of Space (USA) 1994 Educational Management Group @@ -3947,6 +5779,11 @@ + Face Kitchen (Euro) 1992 Philips @@ -3958,6 +5795,11 @@ + La Famille Papyrus (Fra) 1994 Hachette Livre @@ -3969,6 +5811,12 @@ + De Filmmaand - Highlights-Previews-Filmclips (Ned, Alt)[DVC] 1995 Philips @@ -3981,6 +5829,12 @@ + De Filmmaand - Highlights-Previews-Filmclips (Ned)[DVC] 1995 Philips @@ -3993,6 +5847,17 @@ + Fish TV - Living Screens (Euro) 1997 Daedalus @@ -4004,6 +5869,11 @@ + Flintstones & Jetsons - Timewarp (Euro) 1994 Philips @@ -4015,6 +5885,11 @@ + Flintstones & Jetsons - Timewarp (USA) 1994 Philips @@ -4026,6 +5901,12 @@ + The Flowers of Robert Mapplethorpe (USA)[Photo CD] 1992 Philips @@ -4037,6 +5918,11 @@ + Football - L'histoire, les regles, les vedettes, le jeu de penalties v1.04 (Fra)[DVC] 1994 Philips @@ -4049,6 +5935,11 @@ + The French Impressionists (USA) 1992 Philips @@ -4060,6 +5951,11 @@ + De Franse Impressionisten (Ned) 1991 Philips @@ -4071,6 +5967,11 @@ + Les Impressionnistes Français (Fra) 1992 Philips @@ -4082,6 +5983,11 @@ + The Full Swing (Euro) 1993 Xdra @@ -4093,6 +5999,11 @@ + Gardening by Choice - Flowers & Foliage (USA) 1992 Philips @@ -4104,6 +6015,11 @@ + Gateshead 1900 - A Guide to Tyneside 100 Years Ago (Euro) 1995 Xdra @@ -4115,6 +6031,12 @@ + Getting Ahead - Making Time (Euro)[CD-i-PC] 1994 Temple Millar Multimedia ~ Xdra @@ -4126,6 +6048,11 @@ + Gnomes v2.10 (USA) 1995 Philips @@ -4137,6 +6064,11 @@ + Golden Oldies Jukebox (USA)[310690006-2 50240 109 01] 1991 Philips @@ -4148,6 +6080,11 @@ + Golden Oldies Jukebox (USA)[0062919 01] 1991 Philips @@ -4159,6 +6096,19 @@ + Golf My Way (USA) 1994 Philips @@ -4190,6 +6140,11 @@ + Golf Tips - Customised Golf Instruction (Euro) 1993 Xdra @@ -4201,6 +6156,11 @@ + Goya Grabador - Luces y Sombras (Spa) 1995 Philips @@ -4212,6 +6172,12 @@ + Grand Prix Special (Euro) 1994 Xdra @@ -4223,6 +6189,11 @@ + Great American Golf 2 (Euro)[DVC] 1994 Xdra @@ -4235,6 +6206,11 @@ + Great British Golf - Middle Ages - 1940 (Euro) 1992 Philips @@ -4246,6 +6222,11 @@ + Harvest of the Sun - Vincent Van Gogh Revisited (USA)[028294 01] 1991 Philips @@ -4257,6 +6238,11 @@ + Harvest of the Sun - Vincent Van Gogh Revisited (USA)[310690028-2 50239 148 01] 1992 Philips @@ -4268,6 +6254,11 @@ + Harvest of the Sun - Vincent Van Gogh Revisited (USA)[310690028-2 50239 148 02] 1992 Philips @@ -4279,6 +6270,11 @@ + Harvest of the Sun - Van Gogh - Une Moisson de soleils (Fra) 1992 Philips @@ -4290,6 +6286,11 @@ + Oogst van de Zon - leven en kunst van Vincent van Gogh (Ned) 1992 Philips @@ -4301,6 +6302,11 @@ + Ernte der Sonne - Vincent Van Gogh (Ger) 1992 Philips @@ -4312,6 +6318,11 @@ + La Cosecha del Sol - Vincent Van Gogh Revivido (Spa) 1992 Philips @@ -4323,6 +6334,11 @@ + Haunted House (Euro) 1996 Philips @@ -4335,6 +6351,15 @@ + Help! Opleiding Bedrijfshulpverlener voor de Supermarkt (Ned) 1996 <unknown> @@ -4359,6 +6384,11 @@ + Henri Des - Les Betises (Fra)[DVC] 1993 Philips @@ -4371,6 +6401,11 @@ + Het staat in de Sterren (Ned) 1996 Philips @@ -4382,6 +6417,11 @@ + Hieperdepiep, ik lees! - 10 leesspelletjes (Ned) 1996 Philips @@ -4393,6 +6433,17 @@ + Historia Universal del ARTE - La aventura de la expresion humana (Spa) 1996 Salvat Multimedia @@ -4419,6 +6470,11 @@ + Hit Karaoke Volume 1 - Nostalgie (Fra) 1996 Philips @@ -4430,6 +6486,11 @@ + Hit Karaoke Volume 2 - Annees 80-90 (Fra) 1996 Philips @@ -4441,6 +6502,11 @@ + Hit Karaoke Volume 3 - Gold's (Fra) 1996 Philips @@ -4452,6 +6518,11 @@ + Hit Karaoke Volume 5 - Top Club (Fra) 1996 Philips @@ -4463,6 +6534,11 @@ + Hollandse Meesters uit de Zeventiende Eeuw (Ned) 1992 Philips @@ -4474,6 +6550,11 @@ + Hondenliefde (Ned)[DVC] 1995 AVRO @@ -4486,6 +6567,11 @@ + How the Camel got its Hump (USA) 1992 Philips @@ -4497,6 +6583,11 @@ + How the Rhinoceros Got His Skin (USA)[3106900232 02!] 1992 Philips @@ -4508,6 +6599,11 @@ + Wie das Rhinozeros zu seiner Haut kam (Ger) 1993 Philips @@ -4519,6 +6615,11 @@ + How the Rhinoceros got his Skin (USA)[3106900232 50237 962 01] 1992 Philips @@ -4530,6 +6631,12 @@ + How to Photograph Nature (USA)[CD-i-Photo CD] 1993 Philips @@ -4541,6 +6648,11 @@ + Ik, Mik, Letterland - een leesavontuur met maan roos vis (Ned)[DVC] 1996 Philips @@ -4553,6 +6665,14 @@ + Imagination in Motion - A New Era in 3D Chill Out Video (Euro)[DVC] 1996 AIMS Multimedia @@ -4565,6 +6685,11 @@ + Interactive Math - Decimals v1.0 (USA)[DVC] 1994 Gulliver Ritchie Associates @@ -4577,6 +6702,11 @@ + Interactive Math - Percentages v1.0 (USA) 1994 Gulliver Ritchie Associates @@ -4588,6 +6718,11 @@ + Internetten op je TV! - Demo Disc (Ned)[DVC][8140154] 1996 Philips @@ -4600,6 +6735,11 @@ + Internetten op je TV! - Demo Disc (Ned)[DVC][8100330] 1996 Philips @@ -4612,6 +6752,11 @@ + J'invente mes histoires 2 - Rêves d'étoiles (Fra) 1992 Philips @@ -4623,6 +6768,11 @@ + Jazz Giants - From Big Band to Bossa Nova (USA) 1992 Philips @@ -4634,6 +6784,11 @@ + Jazz - Les Geants de Big Band à la Bossa Nova (Fra) 1993 Philips @@ -4645,6 +6800,13 @@ + Le Journal Interactif '94 et Le Jeu des Stars de l'info (Fra)[DVC] 1995 Philips @@ -4664,6 +6826,13 @@ + Le Journal interactif 1995 et Le Jeu des Stars de l'info (Fra)[DVC] 1995 Philips @@ -4683,6 +6852,11 @@ + The Joy of Sex v3.01 (USA)[DVC] 1994 Philips @@ -4695,6 +6869,11 @@ + The Joy of Sex v3.03 (Euro)[DVC] 1993 Philips @@ -4707,6 +6886,11 @@ + Karaoke Collection Nr. 5 (Ita) 1993 Giunti Multimedia @@ -4718,6 +6902,11 @@ + Karaoke Klassics 1 - Family Favorites (Euro) 1993 Philips @@ -4729,6 +6918,11 @@ + Karaoke Klassics 2 - Greatest Love Duets Volume 1 (Euro) 1993 Philips @@ -4740,6 +6934,11 @@ + Karaoke Klassics 3 - Male Standards Volume 1 (Euro) 1993 Philips @@ -4751,6 +6950,11 @@ + Karaoke Klassics 4 - Contemporary Pop Female Volume 1 (Euro) 1993 Philips @@ -4762,6 +6966,11 @@ + Karaoke Klassics 5 - Special Occasions (Euro) 1994 Philips @@ -4773,6 +6982,11 @@ + Kathy Smith - Personal Trainer (Euro)[DVC] 1995 Philips @@ -4785,6 +6999,11 @@ + Kathy Smith - Personal Trainer (USA)[DVC] 1995 Philips @@ -4797,6 +7016,13 @@ + Keep The Faith - An Evening with Bon Jovi (Euro)[DVC] 1993 Philips ~ PolyGram @@ -4814,6 +7040,24 @@ + De Kinderdisc met het complete verhaal ijsbeer in de tropen (Ned)[DVC] 1995 Philips @@ -4826,6 +7070,11 @@ + De Kinderdisc met het complete verhaal ijsbeer in de tropen (Ned, Alt)[DVC] 1995 Philips @@ -4838,6 +7087,11 @@ + Kiss v1.07 (Euro) 1994 Philips @@ -4849,6 +7103,11 @@ + Kulturberg Naturtal - Eine Tirolreise auf cd-i (Aut) 1994 Philips @@ -4860,6 +7119,11 @@ + Die Kunstschaetze der Russischen Zaren - St. Petersburg und die sammlungen der eremitage (Ger) 1993 Philips @@ -4871,6 +7135,11 @@ + De Kunstschatten Van Rusluand - St. Petersburg en de Collectie van de Hermitage (Ned) 1993 Philips @@ -4882,6 +7151,11 @@ + Kursbuch Gesundheit (Ger) 1995 Philips @@ -4893,6 +7167,15 @@ + Language Director - Deutsch Level 1 (Euro) 1993 Philips @@ -4915,6 +7198,15 @@ + Language Director - Deutsch Level 2 (Euro) 1993 Philips @@ -4937,6 +7229,15 @@ + Language Director - Deutsch Level 3 (Euro) 1994 Philips @@ -4959,6 +7260,15 @@ + Language Director - English Level 1 (Euro) 1993 Philips @@ -4981,6 +7291,15 @@ + Language Director - English Level 2 (Euro) 1993 Philips @@ -5003,6 +7322,15 @@ + Language Director - Espanol Level 1 (Euro) 1994 Philips @@ -5025,6 +7353,15 @@ + Language Director - Français Level 1 (Euro) 1993 Philips @@ -5047,6 +7384,15 @@ + Language Director - Français Level 2 (Euro) 1993 Philips @@ -5069,6 +7415,15 @@ + Language Director - Français Level 3 (Euro) 1994 Philips @@ -5091,6 +7446,11 @@ + Live Without Monty Python (Euro)[DVC] 1994 Philips @@ -5103,6 +7463,11 @@ + Live Without Monty Python (USA)[DVC] 1994 Philips @@ -5115,6 +7480,13 @@ + Loving for a Lifetime (Euro)[DVC] 1994 Extraware ~ Interlance ~ Meteor Film @@ -5132,6 +7504,13 @@ + Loving for a Lifetime - Sex, Lust und Leben (Ger) 1994 Extraware ~ Interlance ~ Meteor Film @@ -5148,6 +7527,11 @@ + La Machine à Remonter le Temps (Fra) 1994 Philips @@ -5159,6 +7543,11 @@ + I Maestri Olandesi del Seicento (Ita) 1995 Philips @@ -5170,6 +7559,11 @@ + Malschule 1 (Ger) ~ Escuela de Pintura I (Spa) ~ Schilderschool I (Ned) 1992 Philips @@ -5181,6 +7575,11 @@ + Die Malstiftfabrik (Ger) 1995 Philips @@ -5192,6 +7591,11 @@ + Mathtrak K1 (USA)[DVC] 1994 InterROM @@ -5204,6 +7608,11 @@ + Mathtrak K2 (USA)[DVC] 1994 InterROM @@ -5216,6 +7625,11 @@ + Max Magic (Euro) 1994 Philips @@ -5227,6 +7641,11 @@ + Max Magic (Euro, Alt) 1994 Philips @@ -5238,6 +7657,11 @@ + Max Magic (USA) 1994 Philips @@ -5249,6 +7673,11 @@ + The Memory Works - For Names and Faces (USA) 1997 Compact Disc Incorporated @@ -5260,6 +7689,11 @@ + Mercer Mayer's Little Monster at School (Euro) 1994 Philips @@ -5271,6 +7705,11 @@ + Mercer Mayer's Little Monster at School (USA) 1994 Philips @@ -5282,6 +7721,11 @@ + La Methode de Langues Multimedia - Je parle l'Allemand (Fra) 1996 Infogrames @@ -5293,6 +7737,11 @@ + Mondriaan (Ned)[CD-i-PC] 1995 Zoutewelle Multimedia @@ -5304,6 +7753,11 @@ + Monty Python's Invasion from the Planet Skyron (Euro)[DVC] 1995 Philips @@ -5316,6 +7770,11 @@ + Monty Python's More Naughty Bits (Euro)[DVC] 1994 Philips @@ -5328,6 +7787,11 @@ + Monty Python's More Naughty Bits (USA)[DVC] 1995 Philips @@ -5340,6 +7804,11 @@ + Moses - The Exodus (USA) 1992 Philips @@ -5351,6 +7820,11 @@ + Mother Goose - Hidden Pictures (USA)[0152911 01] 1991 Philips @@ -5362,6 +7836,11 @@ + Mother Goose - Hidden Pictures (USA)[3106900152 50228 843 03] 1991 Philips @@ -5373,6 +7852,11 @@ + Mother Goose - Rhymes to Color (USA)[3106900162 50228 839 01] 1991 Philips @@ -5384,6 +7868,11 @@ + Mother Goose - Rhymes to Color (USA)[MGRTC392 03!] 1991 Philips @@ -5395,6 +7884,11 @@ + Muzzy - Learn French the Fun Way (Euro)[DVC] 1994 Philips @@ -5407,6 +7901,11 @@ + Muzzy - Learn French the Fun Way (USA)[DVC] 1994 Philips @@ -5419,6 +7918,11 @@ + Name That Tune (USA) 1993 Philips @@ -5430,6 +7934,11 @@ + Nederlands Elftal Compleet - Alles over de Europese Kampioenschappen (Ned)[DVC] 1996 Philips @@ -5442,6 +7951,11 @@ + Nederlands Film Festival '95 - 15 Jaar Gouden Kalf (Ned)[DVC] 1995 Philips @@ -5454,6 +7968,11 @@ + NFL 100 Greatest Touchdowns (Euro) 1996 Philips @@ -5465,6 +7984,11 @@ + NFL 100 Greatest Touchdowns (USA) 1996 Philips @@ -5476,6 +8000,11 @@ + Die Niederlaendischen Meister - Des 17. Jahrhunderts (Ger) 1993 Philips @@ -5487,6 +8016,11 @@ + Noah's Ark (USA) 1992 Philips @@ -5498,6 +8032,11 @@ + Number Factory (Euro) 1995 Philips @@ -5509,6 +8048,11 @@ + Odyssey - The Journey to Your Future (USA) 1997 Educational Management Group @@ -5520,6 +8064,11 @@ + Ontdek het onbekende Nederland - Nederland-Waterland v1.0 (Ned)[DVC] 1995 Philips @@ -5532,6 +8081,24 @@ + Opera Imaginaire (Euro) 1995 Pascavision @@ -5543,6 +8110,11 @@ + Origami (Euro) 1993 Philips @@ -5554,6 +8126,11 @@ + P.A.W.S. - Personal Automated Wagging System (Euro) 1998 Philips @@ -5565,6 +8142,11 @@ + Paint School I v1.0 (USA) 1991 Philips @@ -5576,6 +8158,11 @@ + Paint School II v1.0 (USA) 1991 Philips @@ -5587,6 +8174,11 @@ + Pathways - Interactive Reading for 4-7 Year Old's (Euro) 1996 Philips @@ -5598,6 +8190,11 @@ + Pecos Bill (USA) 1992 Philips @@ -5609,6 +8206,11 @@ + Pegasus (Euro, USA) 1992 Philips @@ -5620,6 +8222,11 @@ + Philips Demo CD (Ned)[DVC] 1995 Philips @@ -5632,6 +8239,11 @@ + Philips Hondred - 1891 1991 (Ned) 1992 Philips @@ -5644,6 +8256,11 @@ + Philips Media Interactieve Encyclopedie (Ned)[DVC] 1995 Philips @@ -5656,6 +8273,11 @@ + Philips Media Interactieve Encyclopedie - Demonstratie - Exemplaar (Ned)[DVC] 1995 Philips @@ -5668,6 +8290,11 @@ + Philips Media Medische Encyclopedie (Ned)[DVC] 1996 Philips @@ -5680,6 +8307,11 @@ + Photo CD Demo Disc v3.0 (Euro)[1993-03] 1993 Philips @@ -5691,6 +8323,11 @@ + Photo CD Demo Disc v3.2 (Euro)[1995-11] 1995 Philips @@ -5702,6 +8339,11 @@ + Playboy - I Segreti Del Massaggio (Ita)[DVC] 1994 Philips @@ -5714,6 +8356,11 @@ + Playboy's Complete Massage (USA)[DVC] 1993 Philips @@ -5726,6 +8373,11 @@ + The Pleasure of Sex - The Interactive Encyclopedia of Sex (USA) 1995 Telstar Electronic Studios @@ -5737,6 +8389,11 @@ + Portrait of a City - Venice (Euro) 1992 Philips @@ -5748,6 +8405,11 @@ + Ritratto di Città - Venezia (Ita) 1993 Philips @@ -5759,6 +8421,11 @@ + Private Lesson Series - Classical Guitar - A Beginner's Guide (Euro, USA) 1992 Philips @@ -5770,6 +8437,11 @@ + Private Lesson Series - Jazz Guitar (USA) 1992 Philips @@ -5781,6 +8453,11 @@ + Private Lesson Series - Rock Guitar - A Beginner's Guide (Euro) 1992 Philips @@ -5792,6 +8469,11 @@ + Private Lesson Series - Rock Guitar - A Beginner's Guide (USA) 1992 Philips @@ -5803,6 +8485,11 @@ + Pyramid Adventures - Episode 1 - Treasures of the Lost Pyramid (USA)[DVC] 1995 Compact Disc Incorporated @@ -5815,6 +8502,47 @@ + Queen - Greatest Flix I & II (Euro)[DVC] 1994 Queen Films @@ -5833,6 +8561,11 @@ + Quel est donc cet Oiseau - Nature on CDI (Fra) ~ What's that Bird (Euro) 1992 Philips @@ -5844,6 +8577,11 @@ + Rand McNally's America - United States Atlas (USA)[01420320 03] 1991 Philips @@ -5855,6 +8593,11 @@ + Rand McNally's America - United States Atlas (USA)[3106900142 50239 896 01] 1991 Philips @@ -5866,6 +8609,11 @@ + Reihe Privatunterricht - Die Klassische Gitarre (Ger) 1992 Philips @@ -5877,6 +8625,11 @@ + Reihe Privatunterricht - Rockgitarre (Ger) 1994 Philips @@ -5888,6 +8641,11 @@ + The Renaissance Gallery (USA)[0362911 01] 1991 Philips @@ -5899,6 +8657,11 @@ + The Renaissance Gallery (USA)[310690 0442 50260 353 01] 1992 Philips @@ -5910,6 +8673,11 @@ + The Renaissance of Florence (USA)[0442397 01, 0442397 02] 1991 Philips @@ -5921,6 +8689,11 @@ + The Renaissance of Florence (USA)[310690036-2 50239 145 01] 1992 Philips @@ -5932,6 +8705,11 @@ + El Renacimiento de Florencia (Spa) 1992 Philips @@ -5943,6 +8721,11 @@ + El Renacimiento de Florencia (Compilation Cultura) (Spa) 1992 Philips @@ -5954,6 +8737,11 @@ + Le Renaissance à Florence (Fra) 1992 Philips @@ -5965,6 +8753,11 @@ + Die Renaissance in Florenz (Ger) 1992 Philips @@ -5976,6 +8769,11 @@ + Il Rinascimento a Firenze (Ita) 1992 Philips @@ -5987,6 +8785,11 @@ + De Renaissance van Florence (Ned) 1991 Philips @@ -5998,6 +8801,11 @@ + Rhythm Maker (USA)[17220326 01] 1993 Philips @@ -6009,6 +8817,11 @@ + Rhythm Maker (USA)[17220409 02] 1993 Philips @@ -6020,6 +8833,11 @@ + Richard Scarry's Allerbeste Buurt Disc! (Ned) 1992 Philips @@ -6031,6 +8849,11 @@ + Richard Scarry's Allerdrukste Buurt Disc! (Ned) 1992 Philips @@ -6042,6 +8865,11 @@ + Richard Scarry's Allerwitzigste Geschichten aus Schaffenau (Ger) 1992 Philips @@ -6053,6 +8881,11 @@ + Richard Scarry's Best Neighborhood Disc Ever! (USA) 1992 Philips @@ -6064,6 +8897,11 @@ + Richard Scarry's Busiest Neighborhood Disc Ever! (USA)[0382911 01] 1991 Philips @@ -6075,6 +8913,11 @@ + Richard Scarry's Busiest Neighborhood Disc Ever! (USA)[03820201 01] 1992 Philips @@ -6086,6 +8929,11 @@ + Richard Scarry's Busiest Neighborhood Disc Ever! (USA)[3106900382 50257 831 01] 1992 Philips @@ -6097,6 +8945,11 @@ + Richard Scarry's Wunderbarste Geschichten aus Schaffenau (Ger) 1992 Philips @@ -6108,6 +8961,11 @@ + The Riches of Coins (USA) 1992 Philips @@ -6119,6 +8977,13 @@ + Rio '88 - Tina Turner (Euro)[DVC] 19?? Philips ~ PolyGram @@ -6136,6 +9001,11 @@ + Rock - Metoode de Guitare avec Paul Personne (Fra) 1994 Philips @@ -6147,6 +9017,11 @@ + Routes to Reading (Euro) 1995 Philips @@ -6158,6 +9033,11 @@ + The Rules of Golf (Ned) 1991 Telecity CD-I @@ -6169,6 +9049,11 @@ + Sailing (USA) 1993 Philips @@ -6180,6 +9065,11 @@ + Salvat Enciclopedia Interactiva (Spa) 1996 Salvat Multimedia @@ -6191,6 +9081,11 @@ + Sandy's Circus Adventure (USA) 1991 Philips @@ -6202,6 +9097,11 @@ + Les Aventures de Sandy au Cirque (Fra) 1993 Philips @@ -6213,6 +9113,11 @@ + Sandy's Circus Avontuur (Ned)[814 0008 50260 053 01] 1992 Philips @@ -6224,6 +9129,11 @@ + Sandy's Circus Avontuur (Ned)[8140008 50260 053 02] 1992 Philips @@ -6235,6 +9145,11 @@ + Sandy's Zirkus Abenteuer (Ger) 1992 Philips @@ -6247,6 +9162,11 @@ + Santa Claus' Mice (Euro) 1992 Philips @@ -6258,6 +9178,11 @@ + Die Schonsten Hotels der Welt - von Burba Holiday (Ger)[Photo CD] 1992 Philips @@ -6269,6 +9194,11 @@ + Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Euro)[DVC][8100236V103 50461390 01] 1994 Philips @@ -6281,6 +9211,11 @@ + Sciamo con Alberto Tomba - Let's Go Skiing With Alberto Tomba (Euro)[DVC][991953100049 1445-A] 1994 Philips @@ -6293,6 +9228,11 @@ + Shari Lewis - Lamb Chop's Play-Along! - Action Songs (USA)[DVC] 1993 Philips @@ -6305,6 +9245,11 @@ + Shark Alert (USA) 1993 Philips @@ -6316,6 +9261,11 @@ + Shipwreck v3.03 (Euro) 1993 Philips @@ -6327,6 +9277,11 @@ + Shorelines (USA) 1994 Educational Management Group @@ -6338,6 +9293,11 @@ + Site Seeing in Digitaal Eindhoven (Ned) 1997 TV-Tokyo @@ -6349,6 +9309,11 @@ + Solar System (Euro) 1995 Philips @@ -6360,6 +9325,11 @@ + Soundtrap v3.04 (Euro) 1994 Philips @@ -6371,6 +9341,11 @@ + Space Safari (Euro) 1995 Philips @@ -6382,6 +9357,11 @@ + Stamps - Windows on the World (USA) 1991 Philips @@ -6393,6 +9373,11 @@ + Stickybear Family Fun Games (Euro) 1995 Philips @@ -6404,6 +9389,11 @@ + Stickybear Family Fun Games (USA) 1995 Philips @@ -6415,6 +9405,11 @@ + Stickybear Math (USA) 1994 Philips @@ -6426,6 +9421,11 @@ + Stickybear Preschool (Euro) 1994 Philips @@ -6437,6 +9437,11 @@ + Stickybear Reading (USA) 1993 Philips @@ -6448,6 +9453,11 @@ + Stickybear Leyendo (Spa) 1994 Philips @@ -6459,6 +9469,11 @@ + Sting - Ten Summoner's Tales (Euro)[DVC] 1994 Philips @@ -6471,6 +9486,11 @@ + Story Machine - Magic Tales v1.0 (USA) 1992 Philips @@ -6482,6 +9502,11 @@ + Story Machine - Marchenzauber v1.0 (Ger) 1992 Philips @@ -6493,6 +9518,11 @@ + Story Machine - Star Dreams v1.0 (USA) 1992 Philips @@ -6504,6 +9534,11 @@ + Story Maschine - Galaxis v1.0 (Ger) 1992 Philips @@ -6515,6 +9550,11 @@ + SuperTEST (Ita) 1995 Philips @@ -6526,6 +9566,11 @@ + Surf City (Euro) 1994 Philips @@ -6537,6 +9582,11 @@ + Surf City (USA) 1994 Philips @@ -6548,6 +9598,11 @@ + Tell Me Why One (USA) 1991 Philips @@ -6559,6 +9614,11 @@ + Tell Me Why Two (USA) 1991 Philips @@ -6570,6 +9630,15 @@ + Tennis Our Way (USA)[DVC] 1994 Philips @@ -6592,6 +9661,11 @@ + Thumbelina (Euro)[DVC] 1995 Philips @@ -6604,6 +9678,11 @@ + Tim & Baer - Beim Film (Ger) 1995 Philips @@ -6615,6 +9694,11 @@ + Tim & Baer auf dem Flughafen (Ger) 1995 Philips @@ -6626,6 +9710,11 @@ + Tim & Baer im Hafen (Ger) 1995 Philips @@ -6637,6 +9726,11 @@ + Tim & Baer im Krankenhaus (Ger) 1994 Philips @@ -6648,6 +9742,11 @@ + Tim & Bear at the Airport (Euro) 1995 Philips @@ -6659,6 +9758,11 @@ + Tim & Bear at the Movies (Euro) 1995 Philips @@ -6670,6 +9774,11 @@ + Tim & Beer in de Haven (Ned) 1995 Philips @@ -6681,6 +9790,11 @@ + Tim & Beer in het Ziekenhuis (Ned) 1994 Philips @@ -6692,6 +9806,11 @@ + Tim et Ted a l'Aeroport (Fra) 1995 Philips @@ -6703,6 +9822,11 @@ + Tim et Ted au Cinema (Fra) 1995 Philips @@ -6714,6 +9838,11 @@ + Time-Life - 35mm Photography (USA)[310690017-2 50240 104 01] 1991 Philips @@ -6725,6 +9854,11 @@ + Time-Life - 35mm Photography (USA)[3106900642 01] 1991 Philips @@ -6736,6 +9870,11 @@ + Time-Life - Astrology (Euro, USA) 1993 Philips @@ -6747,6 +9886,11 @@ + Time-Life - Kleinbeeld Fotografie (Ned) 1992 Philips @@ -6758,6 +9902,11 @@ + Time-Life - Kleinbildfotografie (Ger) 1992 Philips @@ -6769,6 +9918,11 @@ + Time-Life - La Fotografia In 35 mm (Ita) 1992 Philips @@ -6780,6 +9934,11 @@ + Time-Life - La Photographie - 24 x 36 mm (Fra) 1992 Philips @@ -6791,6 +9950,11 @@ + Titanic - An interactive exploration (USA)[DVC enhanced] 1994 Philips @@ -6803,6 +9967,11 @@ + Tom der Maximagier (Ger) 1993 Philips @@ -6814,6 +9983,11 @@ + Tom le Maximagier v1.0 (Fra)[8120021 50262 231 03] 1992 Philips @@ -6825,6 +9999,11 @@ + Tom le Maximagier v1.0 (Fra)[8120021V203 50262231 05] 1992 Philips @@ -6836,6 +10015,11 @@ + Total Euro 96 (Euro)[DVC] 1996 Philips @@ -6848,6 +10032,11 @@ + TR-I - No World Order (USA)[26720805 01] 1993 Philips @@ -6859,6 +10048,11 @@ + TR-I - No World Order (USA)[6902672 50378963 01] 1993 Philips @@ -6870,6 +10064,11 @@ + Treasures of the Smithsonian (USA) 1991 Philips @@ -6881,6 +10080,11 @@ + Le Tresor de l'Ile aux Jeux (Fra) 1993 Philips @@ -6892,6 +10096,11 @@ + UEFA Champions League (Ger)[DVC] 1995 Philips @@ -6904,6 +10113,11 @@ + UEFA Champions League (Ned)[DVC] 1995 Philips @@ -6916,6 +10130,11 @@ + The Uptown Blues (USA) 1994 Philips @@ -6927,6 +10146,11 @@ + USA '94 - World Cup (Euro, German / French / Dutch)[DVC enhanced][8100101V104 50404061 01] 1994 Philips @@ -6939,6 +10163,11 @@ + USA '94 - World Cup (Euro, English / Spanish / Italian, Alt)[DVC enhanced][8100103V105 50404055 01] 1994 Philips @@ -6951,6 +10180,11 @@ + USA '94 - World Cup (Euro, English / Spanish / Italian)[DVC enhanced][8100103V105 50404055 01] 1994 Philips @@ -6963,6 +10197,11 @@ + L'Usine aux Crayons (Fra) 1995 Philips @@ -6974,6 +10213,11 @@ + Verhalen Toverdoos - Magische Vertellingen v1.0 (Ned) 1992 Philips @@ -6985,6 +10229,11 @@ + Verhalen Toverdoos - Sterrendromen v1.0 (Ned) 1992 Philips @@ -6996,6 +10245,12 @@ + Video CD - Music Sampler (Euro)[DVC] 1995 Philips ~ PolyGram @@ -7008,6 +10263,11 @@ + De Vliegende Hollander (Ned) 1994 Philips @@ -7019,6 +10279,11 @@ + Was ist das fur ein vogel (Ger) 1992 Philips @@ -7030,6 +10295,11 @@ + WEB-i (USA) 1996 Philips @@ -7041,6 +10311,11 @@ + Why CD-I 1991 Philips @@ -7052,6 +10327,11 @@ + Windows on Chinese Civilization - The Forbidden City (Euro) 1995 Philips @@ -7063,6 +10343,11 @@ + Wines of France (Euro) 1995 Philips @@ -7074,6 +10359,11 @@ + Les Vins de France (Fra) 1994 Philips @@ -7085,6 +10375,11 @@ + The World Below - Literature Explorers (USA) 1993 Educational Management Group @@ -7096,6 +10391,11 @@ + The World of Impressionism (Euro, USA) 1992 Philips @@ -7107,6 +10407,11 @@ + The World of Impressionism (USA) 1991 Philips @@ -7118,6 +10423,11 @@ + World Tours - Egypt (USA)[DVC] 1996 Educational Management Group @@ -7130,6 +10440,11 @@ + World Tours - Hong Kong (USA)[DVC] 1995 Educational Management Group @@ -7142,6 +10457,11 @@ + World Tours - New Zealand (USA)[DVC] 1995 Educational Management Group @@ -7154,6 +10474,11 @@ + World Tours - Pacific Islands (USA)[DVC] 1996 Educational Management Group @@ -7166,6 +10491,11 @@ + World Tours - The Amazon Rainforest (USA)[DVC] 1995 Educational Management Group @@ -7178,6 +10508,11 @@ + World Tours - West Africa (USA)[DVC] 1994 Educational Management Group @@ -7190,6 +10525,11 @@ + Xplora 1 - Peter Gabriel's Secret World (Euro)[DVC] 1995 Philips @@ -7202,6 +10542,11 @@ + Yearn 2 Learn - Peanuts (Euro) 1994 Philips @@ -7213,6 +10558,11 @@ + You Can Do It All With Philips CD-i - A Title Sampler v1.0 (Euro)[Oct 1992] 1992 Philips @@ -7224,6 +10574,11 @@ + Zoo ...eenvoudig! (Ned) 1993 Philips @@ -7234,7 +10589,90 @@ - + + + + + + Frog Feast (Demo) + 2000 + Rastersoft + + + + + + + + + + Super Mario's Wacky Worlds (Prototype v0.11, 19930303) + 1993 + Phillips + + + + + + + + + + Riddle of the Maze (Prototype v2.01, 19940127) + 1994 + Philips + + + + + + + + + + Voyeur II (Prototype v1.04, 19960611)[DVC] + 1996 + Philips + + + + + + + + + + + + + + + + + + + + Towns Hyakunin Isshu 1989 - Fujitsu + 富士通 (Fujitsu) @@ -27,9 +317,15 @@ User/save disks that can be created from the game itself are not included. - 3x3 Eyes: Sanjiyan Henjou + + 3x3 Eyes - Sanjiyan Henjou 1993 - Nihon Create + 日本クリエイト (Nihon Create) + @@ -38,9 +334,15 @@ User/save disks that can be created from the game itself are not included. + 4D Boxing 1992 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -48,11 +350,31 @@ User/save disks that can be created from the game itself are not included. - + 4D Driving 1993 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -61,9 +383,17 @@ User/save disks that can be created from the game itself are not included. + 4D Tennis 1993 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -72,9 +402,17 @@ User/save disks that can be created from the game itself are not included. - The 4th Unit 1-2 Towns: Linkage + + The 4th Unit 1-2 Towns - Linkage 1989 - Data West + データウエスト (Data West) + @@ -83,9 +421,17 @@ User/save disks that can be created from the game itself are not included. - The 4th Unit 3: Dual Targets + + The 4th Unit 3 - Dual Targets 1989 - Data West + データウエスト (Data West) + @@ -94,9 +440,17 @@ User/save disks that can be created from the game itself are not included. - The 4th Unit 4: Zero + + The 4th Unit 4 - Zero 1989 - Data West + データウエスト (Data West) + @@ -105,9 +459,17 @@ User/save disks that can be created from the game itself are not included. - The 4th Unit 5: D-Again + + The 4th Unit 5 - D-Again 1990 - Data West + データウエスト (Data West) + @@ -116,9 +478,17 @@ User/save disks that can be created from the game itself are not included. - The 4th Unit 6: Merry-Go-Round + + The 4th Unit 6 - Merry-Go-Round 1990 - Data West + データウエスト (Data West) + @@ -127,10 +497,19 @@ User/save disks that can be created from the game itself are not included. - The 4th Unit 7: Wyatt + + The 4th Unit 7 - Wyatt 1992 - Data West + データウエスト (Data West) + + @@ -143,10 +522,50 @@ User/save disks that can be created from the game itself are not included. + 38-man Kilo no Kokuu 1989 - System Sacom + システムサコム (System Sacom) + + @@ -159,9 +578,17 @@ User/save disks that can be created from the game itself are not included. + A Ressha de Ikou III 1991 - Artdink + アートディンク (Artdink) + @@ -170,10 +597,19 @@ User/save disks that can be created from the game itself are not included. + A Ressha de Ikou IV - 1992 - Artdink + 1993 + アートディンク (Artdink) + + @@ -186,9 +622,17 @@ User/save disks that can be created from the game itself are not included. - Abel: Shin Mokushiroku Taisen + + Abel - Shin Mokushiroku Taisen 1995 - Family Soft + ファミリーソフト (Family Soft) + @@ -197,9 +641,17 @@ User/save disks that can be created from the game itself are not included. + Advantage Tennis 1992 - Fujitsu + 富士通 (Fujitsu) + @@ -208,9 +660,17 @@ User/save disks that can be created from the game itself are not included. + Aeternam - 1992 - Fujitsu + 1993 + 富士通 (Fujitsu) + @@ -219,9 +679,17 @@ User/save disks that can be created from the game itself are not included. + After Burner 1989 CRI + @@ -230,9 +698,15 @@ User/save disks that can be created from the game itself are not included. + After Burner III 1992 CRI + @@ -241,9 +715,20 @@ User/save disks that can be created from the game itself are not included. + Air Combat II Special 1993 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -253,9 +738,16 @@ User/save disks that can be created from the game itself are not included. + Air Warrior 1992 - Fujitsu + 富士通 (Fujitsu) @@ -264,9 +756,17 @@ User/save disks that can be created from the game itself are not included. + Alice no Yakata CD - 1992 - Alice Soft + 1991 + アリスソフト (AliceSoft) + @@ -275,9 +775,17 @@ User/save disks that can be created from the game itself are not included. + Alice no Yakata II 1992 - Alice Soft + アリスソフト (AliceSoft) + @@ -285,22 +793,37 @@ User/save disks that can be created from the game itself are not included. - + + Alice no Yakata III 1995 - Alice Soft + アリスソフト (AliceSoft) + + - + + Alone in the Dark 1993 - Arrow Micro-Techs + アローマイクロテックス (Arrow Micro-Techs) + @@ -309,9 +832,17 @@ User/save disks that can be created from the game itself are not included. + Alone in the Dark 2 1994 - Arrow Micro-Techs + アローマイクロテックス (Arrow Micro-Techs) + @@ -321,9 +852,17 @@ User/save disks that can be created from the game itself are not included. + Alshark 1993 - Right Stuff + ライトスタッフ (Right Stuff) + @@ -332,9 +871,15 @@ User/save disks that can be created from the game itself are not included. + Amaranth III 1994 - Fuga System + 風雅システム (Fuga System) + @@ -343,10 +888,19 @@ User/save disks that can be created from the game itself are not included. + Ambivalenz 1994 - Alice Soft + アリスソフト (AliceSoft) + + @@ -359,9 +913,17 @@ User/save disks that can be created from the game itself are not included. + America Oudan Ultra Quiz 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -370,9 +932,30 @@ User/save disks that can be created from the game itself are not included. + Angel 1993 - Cocktail Soft + カクテル・ソフト (Cocktail Soft) + @@ -381,9 +964,17 @@ User/save disks that can be created from the game itself are not included. + Angel Halo 1996 - Active + アクティブ (Active) + @@ -392,9 +983,17 @@ User/save disks that can be created from the game itself are not included. - Aoki Ookami to Shiroki Mejika: Genchou Hishi + + Aoki Ookami to Shiroki Mejika - Genchou Hishi 1993 - Koei + 光栄 (Koei) + @@ -403,9 +1002,17 @@ User/save disks that can be created from the game itself are not included. + Arabesque 1994 - Fairytale + フェアリーテール (Fairytale) + @@ -414,6 +1021,13 @@ User/save disks that can be created from the game itself are not included. + Aska Towns 1989 Algo Software @@ -425,10 +1039,17 @@ User/save disks that can be created from the game itself are not included. + Asuka 120% Burning Fest. Excellent 1994 - Family Soft + ファミリーソフト (Family Soft) + + @@ -441,9 +1062,16 @@ User/save disks that can be created from the game itself are not included. + The Atlas 1991 - Artdink + アートディンク (Artdink) @@ -452,10 +1080,19 @@ User/save disks that can be created from the game itself are not included. + The Atlas 2 1993 - Artdink + アートディンク (Artdink) + + @@ -468,9 +1105,17 @@ User/save disks that can be created from the game itself are not included. + Awesome 1992 - Fujitsu + 富士通 (Fujitsu) + @@ -479,21 +1124,39 @@ User/save disks that can be created from the game itself are not included. + Hatchake Ayayo-san 1-2-3 1993 - Hard + ãƒãƒ¼ãƒ‰ (Hard) - + + Ayumi-chan Monogatari 1993 - Alice Soft + アリスソフト (AliceSoft) + + @@ -506,9 +1169,17 @@ User/save disks that can be created from the game itself are not included. + Ayumi-chan Monogatari Jissha-ban 1995 Core Magazine + @@ -517,9 +1188,30 @@ User/save disks that can be created from the game itself are not included. + Azure 1993 - Family Soft + ファミリーソフト (Family Soft) + @@ -528,9 +1220,17 @@ User/save disks that can be created from the game itself are not included. + Bacta 1 & 2 + Voice 1996 - Himeya Soft + 姫屋ソフト (Himeya Soft) + @@ -539,10 +1239,19 @@ User/save disks that can be created from the game itself are not included. + Ballade for Maria / Maria ni Sasageru Ballade 1995 - Fairytale + フェアリーテール (Fairytale) + + @@ -555,9 +1264,17 @@ User/save disks that can be created from the game itself are not included. + Beast 3 1994 - Birdy Soft + ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft) + @@ -566,10 +1283,19 @@ User/save disks that can be created from the game itself are not included. + Bible Master 1993 - Glodia + グローディア (Glodia) + + @@ -582,9 +1308,15 @@ User/save disks that can be created from the game itself are not included. + Blandia Plus 1994 - Ving + ビング (Ving) + @@ -593,9 +1325,17 @@ User/save disks that can be created from the game itself are not included. - Blue: Will to Power + + Blue - Will to Power 1992 Sofcom + @@ -604,9 +1344,15 @@ User/save disks that can be created from the game itself are not included. - Bomberman: Panic Bomber + + Bomberman - Panic Bomber 1995 - ASCII + アスキー (ASCII) + @@ -615,9 +1361,17 @@ User/save disks that can be created from the game itself are not included. + The Best Play Baseball 1992 - ASCII + アスキー (ASCII) + @@ -626,9 +1380,17 @@ User/save disks that can be created from the game itself are not included. + Branmarker 1991 - D.O. + ディー・オー (D.O.) + @@ -637,20 +1399,36 @@ User/save disks that can be created from the game itself are not included. + Branmarker 2 1995 - D.O. + ディー・オー (D.O.) + + Bubble Bobble 1990 - Ving + ビング (Ving) + @@ -659,9 +1437,17 @@ User/save disks that can be created from the game itself are not included. + Burai Joukan 1990 - Riverhill Soft + リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft) + @@ -670,9 +1456,17 @@ User/save disks that can be created from the game itself are not included. + Burai Kanketsu-hen 1991 - Riverhill Soft + リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft) + @@ -681,9 +1475,17 @@ User/save disks that can be created from the game itself are not included. + Cal Towns 1992 - Birdy Soft + ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft) + @@ -692,9 +1494,17 @@ User/save disks that can be created from the game itself are not included. - Cal Gaiden: Tiny Steps Behind the Cal + + Cal Gaiden - Tiny Steps Behind the Cal 1993 - Birdy Soft + ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft) + @@ -703,9 +1513,17 @@ User/save disks that can be created from the game itself are not included. + Can Can Bunny Extra 1993 - Cocktail Soft + カクテル・ソフト (Cocktail Soft) + @@ -714,9 +1532,17 @@ User/save disks that can be created from the game itself are not included. + Castles 1992 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -725,9 +1551,17 @@ User/save disks that can be created from the game itself are not included. + Centurion 1993 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -736,9 +1570,17 @@ User/save disks that can be created from the game itself are not included. + Taito Chase H. Q. 1991 - Ving + ビング (Ving) + @@ -747,9 +1589,17 @@ User/save disks that can be created from the game itself are not included. + Classic Road 1994 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -758,9 +1608,16 @@ User/save disks that can be created from the game itself are not included. + The Case of the Cautious Condor 1989 - Toshiba EMI + æ±èŠEMI (Toshiba EMI) @@ -769,9 +1626,17 @@ User/save disks that can be created from the game itself are not included. + Crystal Rinal 1994 - D.O. + ディー・オー (D.O.) + @@ -780,10 +1645,19 @@ User/save disks that can be created from the game itself are not included. + Custom Mate 2 & Itsuka dokoka de 1995 - Cocktail Soft + カクテル・ソフト (Cocktail Soft) + + @@ -796,10 +1670,17 @@ User/save disks that can be created from the game itself are not included. + Cybercity 1989 - Nihon Telenet + 日本テレãƒãƒƒãƒˆ (Nihon Telenet) + + @@ -812,9 +1693,17 @@ User/save disks that can be created from the game itself are not included. + Cyberia 1995 - Fujitsu + 富士通 (Fujitsu) + @@ -824,9 +1713,15 @@ User/save disks that can be created from the game itself are not included. - D.O. Kanshuu Premium Box: Touch My Heart + + D.O. Kanshuu Premium Box - Touch My Heart 1995 - D.O. + ディー・オー (D.O.) + @@ -835,9 +1730,16 @@ User/save disks that can be created from the game itself are not included. + D.P.S. Zenbu 1995 - Alice Soft + アリスソフト (AliceSoft) @@ -846,10 +1748,19 @@ User/save disks that can be created from the game itself are not included. + Daikoukai Jidai 1990 - Koei + 光栄 (Koei) + + @@ -862,10 +1773,19 @@ User/save disks that can be created from the game itself are not included. + Daikoukai Jidai II 1993 - Koei + 光栄 (Koei) + + @@ -878,10 +1798,19 @@ User/save disks that can be created from the game itself are not included. + Daisenryaku III '90 - 1990 - Pegasus Japan + 1991 + ペガサスジャパン (Pegasus Japan) + + @@ -906,10 +1835,19 @@ User/save disks that can be created from the game itself are not included. more "correct" one, and thus the one included in this list. --> + Dalk 1993 - Alice Soft + アリスソフト (AliceSoft) + + @@ -922,9 +1860,15 @@ User/save disks that can be created from the game itself are not included. + Dangel 1996 - Mink + ミンク (Mink) + @@ -933,9 +1877,17 @@ User/save disks that can be created from the game itself are not included. + De.FaNa 1995 - Himeya Soft + 姫屋ソフト (Himeya Soft) + @@ -944,9 +1896,17 @@ User/save disks that can be created from the game itself are not included. + Dead Force 1995 - Fuga System + 風雅システム (Fuga System) + @@ -955,9 +1915,17 @@ User/save disks that can be created from the game itself are not included. + Dead of the Brain 1993 - Fairytale + フェアリーテール (Fairytale) + @@ -966,9 +1934,17 @@ User/save disks that can be created from the game itself are not included. + Death Brade 1992 KID + @@ -977,12 +1953,21 @@ User/save disks that can be created from the game itself are not included. + Deep 1995 - JAST + ジャスト (Jast) + + - + @@ -993,9 +1978,17 @@ User/save disks that can be created from the game itself are not included. + De-Ja II 1992 - Elf + エルフ (Elf) + @@ -1004,9 +1997,15 @@ User/save disks that can be created from the game itself are not included. + Dengeki Nurse 1992 - Cocktail Soft + カクテル・ソフト (Cocktail Soft) + @@ -1015,9 +2014,17 @@ User/save disks that can be created from the game itself are not included. + Derby Stallion 1993 - ASCII + アスキー (ASCII) + @@ -1026,9 +2033,17 @@ User/save disks that can be created from the game itself are not included. - Desire: Haitoku no Rasen + + Desire - Haitoku no Rasen 1994 - C's Ware + シーズウェア (C's Ware) + @@ -1037,9 +2052,34 @@ User/save disks that can be created from the game itself are not included. + Die Gekirin 1995 - Nihon Application + 日本アプリケーション (Nihon Application) + @@ -1048,6 +2088,13 @@ User/save disks that can be created from the game itself are not included. + Digital Pinup Girls Vol. 1 1993 Transpegasus @@ -1059,9 +2106,16 @@ User/save disks that can be created from the game itself are not included. + Doki Doki Disk CD-ban Dai-1-kan: Club D.O. Jimukyoku 1994 - D.O. + ディー・オー (D.O.) @@ -1070,9 +2124,21 @@ User/save disks that can be created from the game itself are not included. + DOR Best Selection Joukan 1993 - D.O. + ディー・オー (D.O.) @@ -1086,9 +2152,17 @@ User/save disks that can be created from the game itself are not included. + DOR Special Edition '93 1993 - D.O. + ディー・オー (D.O.) + @@ -1097,9 +2171,17 @@ User/save disks that can be created from the game itself are not included. + DOR Special Edition Sakigake 1993 - D.O. + ディー・オー (D.O.) + @@ -1108,9 +2190,17 @@ User/save disks that can be created from the game itself are not included. + Doukyuusei 1992 - Elf + エルフ (Elf) + @@ -1119,9 +2209,17 @@ User/save disks that can be created from the game itself are not included. + Doukyuusei 2 1995 - Elf + エルフ (Elf) + @@ -1130,9 +2228,17 @@ User/save disks that can be created from the game itself are not included. + Dragon Half 1994 - Micro Cabin + マイクロキャビン (Micro Cabin) + @@ -1141,9 +2247,15 @@ User/save disks that can be created from the game itself are not included. + Dragon Knight III - 1991 - Elf + 1992 + エルフ (Elf) + @@ -1152,9 +2264,17 @@ User/save disks that can be created from the game itself are not included. + Dragon Knight 4 1994 - Elf + エルフ (Elf) + @@ -1163,9 +2283,17 @@ User/save disks that can be created from the game itself are not included. + Dragons of Flame 1992 - Pony Canyon + ãƒãƒ‹ãƒ¼ã‚­ãƒ£ãƒ‹ã‚ªãƒ³ (Pony Canyon) + @@ -1174,9 +2302,17 @@ User/save disks that can be created from the game itself are not included. + Drakkhen 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -1185,9 +2321,15 @@ User/save disks that can be created from the game itself are not included. + Dungeon Master 1989 - Fujitsu + 富士通 (Fujitsu) + @@ -1196,9 +2338,17 @@ User/save disks that can be created from the game itself are not included. - Dungeon Master II: Skullkeep + + Dungeon Master II - Skullkeep 1994 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -1207,9 +2357,17 @@ User/save disks that can be created from the game itself are not included. + Eimmy to Yobanaide 1995 - C's Ware + シーズウェア (C's Ware) + @@ -1218,9 +2376,17 @@ User/save disks that can be created from the game itself are not included. + Elfish 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -1230,9 +2396,17 @@ User/save disks that can be created from the game itself are not included. + Elfish Lite 1993 - Fujitsu + 富士通 (Fujitsu) + @@ -1241,9 +2415,17 @@ User/save disks that can be created from the game itself are not included. + Elm Knight 1992 - Micro Cabin + マイクロキャビン (Micro Cabin) + @@ -1252,10 +2434,19 @@ User/save disks that can be created from the game itself are not included. + Emerald Dragon 1992 - Glodia + グローディア (Glodia) + + @@ -1268,9 +2459,17 @@ User/save disks that can be created from the game itself are not included. + Etsuraku no Gakuen 1994 - C's Ware + シーズウェア (C's Ware) + @@ -1279,9 +2478,17 @@ User/save disks that can be created from the game itself are not included. + Evolution 1989 - System Sacom + システムサコム (System Sacom) + @@ -1290,9 +2497,15 @@ User/save disks that can be created from the game itself are not included. + Excellent 10 1990 - Amorphous + アモルファス (Amorphous) + @@ -1301,9 +2514,21 @@ User/save disks that can be created from the game itself are not included. + Exciting CD 1994 - Fujitsu + 富士通 (Fujitsu) @@ -1317,9 +2542,21 @@ User/save disks that can be created from the game itself are not included. + Exciting CD '94 Summer 1994 - Fujitsu + 富士通 (Fujitsu) @@ -1333,9 +2570,17 @@ User/save disks that can be created from the game itself are not included. - Eye of the Beholder II: The Legend of Darkmoon + + Eye of the Beholder II - The Legend of Darkmoon 1993 - Arrow Micro-Techs / Cybelle + サイベル (Cybelle) + @@ -1344,9 +2589,24 @@ User/save disks that can be created from the game itself are not included. + F-BASIC386 v1.1 L20 1989 - Fujitsu + 富士通 (Fujitsu) @@ -1355,9 +2615,16 @@ User/save disks that can be created from the game itself are not included. + F-BASIC386 v2.1 L10 1992 - Fujitsu + 富士通 (Fujitsu) @@ -1366,9 +2633,17 @@ User/save disks that can be created from the game itself are not included. + F29 Retaliator 1993 - Imagineer + イマジニア (Imagineer) + @@ -1377,9 +2652,17 @@ User/save disks that can be created from the game itself are not included. + Final Blow 1990 - Ving + ビング (Ving) + @@ -1388,9 +2671,17 @@ User/save disks that can be created from the game itself are not included. + Flashback 1994 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -1400,9 +2691,14 @@ User/save disks that can be created from the game itself are not included. + FM Towns Hyper CD Demo Futoppara No. 1 1989 - Softbank + SoftBank @@ -1411,9 +2707,16 @@ User/save disks that can be created from the game itself are not included. + FM Towns Super Technology Demo 1993 1993 - Fujitsu + 富士通 (Fujitsu) @@ -1422,9 +2725,16 @@ User/save disks that can be created from the game itself are not included. + Fractal Engine Demo 1991 - Fujitsu + 富士通 (Fujitsu) @@ -1433,9 +2743,17 @@ User/save disks that can be created from the game itself are not included. + Free Will: Knight of Argent 1992 Sofcom + @@ -1444,6 +2762,11 @@ User/save disks that can be created from the game itself are not included. + Frog Feast Demo 2005 Rastersoft @@ -1455,9 +2778,21 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 4 1991 - Fujitsu + 富士通 (Fujitsu) @@ -1471,9 +2806,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 5 1992 - Fujitsu + 富士通 (Fujitsu) @@ -1482,9 +2824,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 6 1993 - Fujitsu + 富士通 (Fujitsu) @@ -1493,9 +2842,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 7 1993 - Fujitsu + 富士通 (Fujitsu) @@ -1504,9 +2860,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 8 1994 - Fujitsu + 富士通 (Fujitsu) @@ -1515,9 +2878,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 9 1994 - Fujitsu + 富士通 (Fujitsu) @@ -1526,9 +2896,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 10 1995 - Fujitsu + 富士通 (Fujitsu) @@ -1537,9 +2914,16 @@ User/save disks that can be created from the game itself are not included. + Free Software Collection 11 1995 - Fujitsu + 富士通 (Fujitsu) @@ -1548,9 +2932,17 @@ User/save disks that can be created from the game itself are not included. + Hishouzame / Flying Shark 1993 - Ving + ビング (Ving) + @@ -1559,9 +2951,17 @@ User/save disks that can be created from the game itself are not included. + Uchuu Kaitou Funny Bee 1994 - Alice Soft + アリスソフト (AliceSoft) + @@ -1575,9 +2975,16 @@ User/save disks that can be created from the game itself are not included. + Freeware Collection 1 1989 - Fujitsu + 富士通 (Fujitsu) @@ -1586,9 +2993,16 @@ User/save disks that can be created from the game itself are not included. + Freeware Collection 2 1990 - Fujitsu + 富士通 (Fujitsu) @@ -1597,9 +3011,16 @@ User/save disks that can be created from the game itself are not included. + Freeware Collection 3 1991 - Fujitsu + 富士通 (Fujitsu) @@ -1608,9 +3029,17 @@ User/save disks that can be created from the game itself are not included. + Gakuen King: Hidehiko Gakkou wo Tsukuru 1996 - Alice Soft + アリスソフト (AliceSoft) + @@ -1620,9 +3049,24 @@ User/save disks that can be created from the game itself are not included. + Galaxy Force II 1991 CRI + @@ -1631,9 +3075,16 @@ User/save disks that can be created from the game itself are not included. + Game Technopolis Super Collection 1 1992 - Tokuma Shoten + 徳間書店 (Tokuma Shoten) @@ -1642,9 +3093,14 @@ User/save disks that can be created from the game itself are not included. + Game Technopolis Super Collection 2 1993 - Tokuma Shoten + 徳間書店 (Tokuma Shoten) @@ -1653,9 +3109,26 @@ User/save disks that can be created from the game itself are not included. - Gekirin: Ushinawareshi Houken + + Gekirin - Ushinawareshi Houken 1994 - Nihon Application + 日本アプリケーション (Nihon Application) + @@ -1664,9 +3137,38 @@ User/save disks that can be created from the game itself are not included. + Gendai Daisenryaku EX Special 1994 - Ving + ビング (Ving) + @@ -1675,9 +3177,17 @@ User/save disks that can be created from the game itself are not included. + Genocide Square 1993 Zoom + @@ -1686,9 +3196,17 @@ User/save disks that can be created from the game itself are not included. + Giga Mortion 1995 - Interheart + インターãƒãƒ¼ãƒˆ (Interheart) + @@ -1697,6 +3215,13 @@ User/save disks that can be created from the game itself are not included. + GNU for Towns Release 2 1991 FM Users Group @@ -1708,10 +3233,19 @@ User/save disks that can be created from the game itself are not included. + Goh II Towns Special 1993 - Wolfteam + ウルフãƒãƒ¼ãƒ  (WolfTeam) + + @@ -1724,9 +3258,17 @@ User/save disks that can be created from the game itself are not included. + Gunblaze 1994 - Active + アクティブ (Active) + @@ -1735,9 +3277,17 @@ User/save disks that can be created from the game itself are not included. - Mobile Suit Gundam: Hyper Classic Operation + + Mobile Suit Gundam - Hyper Classic Operation 1992 - Family Soft + ファミリーソフト (Family Soft) + @@ -1746,9 +3296,17 @@ User/save disks that can be created from the game itself are not included. - Mobile Suit Gundam: Hyper Desert Operation + + Mobile Suit Gundam - Hyper Desert Operation 1992 - Family Soft + ファミリーソフト (Family Soft) + @@ -1757,9 +3315,15 @@ User/save disks that can be created from the game itself are not included. - Gunship: The Helicopter Simulation + + Gunship - The Helicopter Simulation 1990 - MicroProse Japan + マイクロプローズジャパン (MicroProse Japan) + @@ -1768,9 +3332,17 @@ User/save disks that can be created from the game itself are not included. + Hana no Kioku 1995 - Foster + フォスター (Foster) + @@ -1779,10 +3351,19 @@ User/save disks that can be created from the game itself are not included. + Hanafuda de Pon! 1996 - Active + アクティブ (Active) + + @@ -1795,9 +3376,17 @@ User/save disks that can be created from the game itself are not included. + Heart de Ron!! 1995 - D.O. + ディー・オー (D.O.) + @@ -1806,9 +3395,16 @@ User/save disks that can be created from the game itself are not included. + High C Compiler Multimedia Development Kit v1.7 L13 1995 - Fujitsu + 富士通 (Fujitsu) @@ -1817,9 +3413,21 @@ User/save disks that can be created from the game itself are not included. + Highlight CD 20 1993 - Fujitsu + 富士通 (Fujitsu) @@ -1833,9 +3441,17 @@ User/save disks that can be created from the game itself are not included. + Hoshi no Suna Monogatari 1992 - D.O. + ディー・オー (D.O.) + @@ -1844,9 +3460,17 @@ User/save disks that can be created from the game itself are not included. + Hoshi no Suna Monogatari 2 1992 - D.O. + ディー・オー (D.O.) + @@ -1855,9 +3479,17 @@ User/save disks that can be created from the game itself are not included. + Hoshi no Suna Monogatari 3 1995 - D.O. + ディー・オー (D.O.) + @@ -1866,10 +3498,18 @@ User/save disks that can be created from the game itself are not included. + Hyper Address 1990 - Datt Japan + ダットジャパン (Datt Japan) + @@ -1882,9 +3522,18 @@ User/save disks that can be created from the game itself are not included. + Hyper Ocean 1993 - Datt Japan + ダットジャパン (Datt Japan) @@ -1893,10 +3542,19 @@ User/save disks that can be created from the game itself are not included. + Idol Project 1995 - KSS + ケイエスエス (KSS) + + @@ -1909,9 +3567,16 @@ User/save disks that can be created from the game itself are not included. + Igo II 1989 - ASCII + アスキー (ASCII) @@ -1922,11 +3587,19 @@ User/save disks that can be created from the game itself are not included. - Igo Doujou: Honkakuha Yose Tsumego Shinan + + Igo Doujou - Honkakuha Yose Tsumego Shinan 1989 - Fujitsu + 富士通 (Fujitsu) + @@ -1935,9 +3608,15 @@ User/save disks that can be created from the game itself are not included. + Image Fight 1990 - Ving + ビング (Ving) + @@ -1946,9 +3625,17 @@ User/save disks that can be created from the game itself are not included. + The Incredible Machine 1994 - Cybelle + サイベル (Cybelle) + @@ -1957,9 +3644,35 @@ User/save disks that can be created from the game itself are not included. + Indiana Jones and the Last Crusade 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -1968,9 +3681,19 @@ User/save disks that can be created from the game itself are not included. + Indiana Jones and the Fate of Atlantis 1993 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -1979,9 +3702,15 @@ User/save disks that can be created from the game itself are not included. - Infestation: Chinmoku no Wakusei + + Infestation - Chinmoku no Wakusei 1992 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -1990,9 +3719,17 @@ User/save disks that can be created from the game itself are not included. - Injuu Gakuen: La Blue Girl + + Injuu Gakuen - La Blue Girl 1994 DEZ + @@ -2001,9 +3738,17 @@ User/save disks that can be created from the game itself are not included. + Ishidou 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -2012,9 +3757,17 @@ User/save disks that can be created from the game itself are not included. + Jan Jaka Jan 1992 - Elf + エルフ (Elf) + @@ -2023,9 +3776,17 @@ User/save disks that can be created from the game itself are not included. + Jango 4 1994 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -2034,9 +3795,17 @@ User/save disks that can be created from the game itself are not included. + Jankirou 1994 - Fairytale + フェアリーテール (Fairytale) + @@ -2045,9 +3814,17 @@ User/save disks that can be created from the game itself are not included. + Jealousy 1995 - Interheart + インターãƒãƒ¼ãƒˆ (Interheart) + @@ -2056,9 +3833,17 @@ User/save disks that can be created from the game itself are not included. + Joshikousei Shoujo Hatsunetsu 1993 Byakuya-Shobo + @@ -2067,9 +3852,17 @@ User/save disks that can be created from the game itself are not included. + Joshua 1992 - Panther Software + パンサーソフトウェア (Panther Software) + @@ -2078,9 +3871,16 @@ User/save disks that can be created from the game itself are not included. + Kid Pix 1992 - Fujitsu + 富士通 (Fujitsu) @@ -2089,9 +3889,15 @@ User/save disks that can be created from the game itself are not included. - Kigen: Kagayaki no Hasha + + Kigen - Kagayaki no Hasha 1992 - Riverhill Soft + リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft) + @@ -2100,9 +3906,17 @@ User/save disks that can be created from the game itself are not included. + Kindan no Ketsuzoku 1993 - C's Ware + シーズウェア (C's Ware) + @@ -2111,9 +3925,17 @@ User/save disks that can be created from the game itself are not included. + King's Bounty 1994 - Starcraft + スタークラフト (Starcraft) + @@ -2122,9 +3944,19 @@ User/save disks that can be created from the game itself are not included. - King's Quest V: Absence Makes the Heart Go Yonder + + King's Quest V - Absence Makes the Heart Go Yonder 1991 - Sierra On-Line Japan + シエラオンラインジャパン (Sierra On-Line Japan) + @@ -2133,9 +3965,17 @@ User/save disks that can be created from the game itself are not included. + Kiwame 1992 - Log + ログ (Log) + @@ -2144,9 +3984,17 @@ User/save disks that can be created from the game itself are not included. + Kiwame II 1994 - Log + ログ (Log) + @@ -2155,9 +4003,17 @@ User/save disks that can be created from the game itself are not included. + Koko wa Rakuensou 1996 - Foster + フォスター (Foster) + @@ -2166,9 +4022,15 @@ User/save disks that can be created from the game itself are not included. + Koko wa Rakuensou 2 1996 - Foster + フォスター (Foster) + @@ -2177,9 +4039,17 @@ User/save disks that can be created from the game itself are not included. + Kyan Kyan Collection 1989 I-Cell + @@ -2188,10 +4058,19 @@ User/save disks that can be created from the game itself are not included. + The Legend of Kyrandia 1993 - Starcraft + スタークラフト (Starcraft) + + @@ -2204,9 +4083,14 @@ User/save disks that can be created from the game itself are not included. - Kyrandia II: The Hand of Fate + + Kyrandia II - The Hand of Fate 1995 - Starcraft + スタークラフト (Starcraft) @@ -2214,22 +4098,37 @@ User/save disks that can be created from the game itself are not included. - + Kyuukyoku Tiger 1994 - Ving + ビング (Ving) + - + - Lands of Lore: The Throne of Chaos + + Lands of Lore - The Throne of Chaos 1993 - Starcraft + スタークラフト (Starcraft) + @@ -2238,9 +4137,27 @@ User/save disks that can be created from the game itself are not included. + Last Armageddon CD Special 1989 - Brain Grey + ブレイングレイ (Brain Grey) + @@ -2259,9 +4176,17 @@ User/save disks that can be created from the game itself are not included. + Last Survivor 1990 CRI + @@ -2270,10 +4195,19 @@ User/save disks that can be created from the game itself are not included. + Lunatic Dawn II 1994 - Artdink + アートディンク (Artdink) + + @@ -2286,9 +4220,17 @@ User/save disks that can be created from the game itself are not included. + Lemmings 1992 - Imagineer + イマジニア (Imagineer) + @@ -2301,9 +4243,14 @@ User/save disks that can be created from the game itself are not included. very little information available about this release. --> - Lemmings 2: The Tribes (English) + + Lemmings 2 - The Tribes (English) 1994 - Fujitsu + 富士通 (Fujitsu) @@ -2312,9 +4259,17 @@ User/save disks that can be created from the game itself are not included. - Lemmings 2: The Tribes (Japanese) + + Lemmings 2 - The Tribes (Japanese) 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -2323,9 +4278,17 @@ User/save disks that can be created from the game itself are not included. + Lesser Mern 1992 - Panther Software + パンサーソフトウェア (Panther Software) + @@ -2335,6 +4298,13 @@ User/save disks that can be created from the game itself are not included. + Lettuce Cooking 1989 Seibu Time @@ -2351,9 +4321,17 @@ User/save disks that can be created from the game itself are not included. + Libido7 1994 - Libido + リビドー (Libido) + @@ -2362,9 +4340,17 @@ User/save disks that can be created from the game itself are not included. + Life & Death 1992 - Ving + ビング (Ving) + @@ -2373,9 +4359,17 @@ User/save disks that can be created from the game itself are not included. - Life & Death II: The Brain + + Life & Death II - The Brain 1992 - Ving + ビング (Ving) + @@ -2384,9 +4378,15 @@ User/save disks that can be created from the game itself are not included. + Golf Links 386 Pro 1995 - Cybelle + サイベル (Cybelle) + @@ -2396,6 +4396,15 @@ User/save disks that can be created from the game itself are not included. + Linux + JE3 1994 Laser 5 @@ -2407,6 +4416,23 @@ User/save disks that can be created from the game itself are not included. + Linux + JE4 1995/12 1995 Laser 5 @@ -2428,10 +4454,19 @@ User/save disks that can be created from the game itself are not included. - Record of Lodoss War: Haiiro no Majo + + Record of Lodoss War - Haiiro no Majo 1994 - Humming Bird Soft + ãƒãƒŸãƒ³ã‚°ãƒãƒ¼ãƒ‰ (HummingBird) + + @@ -2444,9 +4479,48 @@ User/save disks that can be created from the game itself are not included. + Loom 1991 - Fujitsu + 富士通 (Fujitsu) + @@ -2460,9 +4534,17 @@ User/save disks that can be created from the game itself are not included. + Libble Rabble 1994 - Dempa + 電波新èžç¤¾ (Dempa Shinbunsha) + @@ -2471,9 +4553,17 @@ User/save disks that can be created from the game itself are not included. - Lupin Sansei: Hong Kong no Mashu: Fukushuu wa Meikyuu no Hate ni + + Lupin Sansei - Hong Kong no Mashu - Fukushuu wa Meikyuu no Hate ni 1990 CRI + @@ -2482,9 +4572,21 @@ User/save disks that can be created from the game itself are not included. + Legends of Valour 1994 - Ving + ビング (Ving) + @@ -2493,9 +4595,17 @@ User/save disks that can be created from the game itself are not included. + Mad Paradox 1994 - Queen Soft + クィーンソフト (Queensoft) + @@ -2504,9 +4614,32 @@ User/save disks that can be created from the game itself are not included. + Mad Paradox (unofficial English translation by Demoniac) 1994 - Queen Soft + クィーンソフト (Queensoft) @@ -2515,9 +4648,17 @@ User/save disks that can be created from the game itself are not included. + Mad Stalker 1994 - Family Soft + ファミリーソフト (Family Soft) + @@ -2526,9 +4667,17 @@ User/save disks that can be created from the game itself are not included. + Madou Gakuin R 1994 - Foresight + フォーサイト (Foresight) + @@ -2537,9 +4686,17 @@ User/save disks that can be created from the game itself are not included. + Mahjong de Pon! 1994 - Active + アクティブ (Active) + @@ -2548,9 +4705,16 @@ User/save disks that can be created from the game itself are not included. + Mahjong Houteiraoyui 1995 - Queen Soft + クィーンソフト (Queensoft) @@ -2559,9 +4723,15 @@ User/save disks that can be created from the game itself are not included. + Mahou Daisakusen 1995 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -2570,9 +4740,17 @@ User/save disks that can be created from the game itself are not included. + Mandarake Ichizoku 1995 - Foresight + フォーサイト (Foresight) + @@ -2581,9 +4759,16 @@ User/save disks that can be created from the game itself are not included. + Many Colors 1993 - Amorphous + アモルファス (Amorphous) @@ -2592,9 +4777,15 @@ User/save disks that can be created from the game itself are not included. + Marble Madness 1991 - Home Data + ホームデータ (Home Data) + @@ -2603,9 +4794,15 @@ User/save disks that can be created from the game itself are not included. + Marine Philt 1993 - Fairytale + フェアリーテール (Fairytale) + @@ -2614,9 +4811,17 @@ User/save disks that can be created from the game itself are not included. + The Manhole 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -2625,9 +4830,15 @@ User/save disks that can be created from the game itself are not included. - Muscle Bomber: The Body Explosion + + Muscle Bomber - The Body Explosion 1993 - Capcom + カプコン (Capcom) + @@ -2636,9 +4847,17 @@ User/save disks that can be created from the game itself are not included. + Microcosm 1993 - Fujitsu + 富士通 (Fujitsu) + @@ -2647,9 +4866,19 @@ User/save disks that can be created from the game itself are not included. + Menzoberranzan - 1995 - KSS + 1996 + ケイエスエス (KSS) + @@ -2659,9 +4888,17 @@ User/save disks that can be created from the game itself are not included. + Metal Eye 1993 - Elf + エルフ (Elf) + @@ -2670,9 +4907,17 @@ User/save disks that can be created from the game itself are not included. + Metal Eye 2 1994 - Elf + エルフ (Elf) + @@ -2681,7 +4926,14 @@ User/save disks that can be created from the game itself are not included. - My Fair Lady CAN II: Elementary + + My Fair Lady CAN II - Elementary 1990 CRI @@ -2692,9 +4944,16 @@ User/save disks that can be created from the game itself are not included. + Mugen Houyou 1995 - Alice Soft + アリスソフト (AliceSoft) @@ -2704,9 +4963,17 @@ User/save disks that can be created from the game itself are not included. + Mirage 1992 - Discovery + ディスカãƒãƒªãƒ¼ (Discovery) + @@ -2715,9 +4982,17 @@ User/save disks that can be created from the game itself are not included. + Mirrors 1992 Apros + @@ -2726,9 +5001,16 @@ User/save disks that can be created from the game itself are not included. + Misty - 1989 - Data West + 1991 + データウエスト (Data West) @@ -2736,10 +5018,36 @@ User/save disks that can be created from the game itself are not included. + + + Might and Magic III - Isles of Terra + 1992 + スタークラフト (Starcraft) + + + + + + + + - Might and Magic: Clouds of Xeen + + Might and Magic - Clouds of Xeen 1993 - Starcraft + スタークラフト (Starcraft) + @@ -2748,9 +5056,15 @@ User/save disks that can be created from the game itself are not included. - Might and Magic: Darkside of Xeen + + Might and Magic - Darkside of Xeen 1994 - Starcraft + スタークラフト (Starcraft) + @@ -2759,9 +5073,17 @@ User/save disks that can be created from the game itself are not included. + Megamorph 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -2770,6 +5092,11 @@ User/save disks that can be created from the game itself are not included. + Mode 7 Demo 2008 Rastersoft @@ -2781,9 +5108,43 @@ User/save disks that can be created from the game itself are not included. + The Secret of Monkey Island 1992 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -2792,9 +5153,19 @@ User/save disks that can be created from the game itself are not included. - Monkey Island 2: LeChuck's Revenge + + Monkey Island 2 - LeChuck's Revenge 1994 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -2803,9 +5174,17 @@ User/save disks that can be created from the game itself are not included. + Moonlight-chan Rinshan 1993 - D.O. + ディー・オー (D.O.) + @@ -2814,9 +5193,17 @@ User/save disks that can be created from the game itself are not included. + Morita Shougi II 1989 - Enix + エニックス (Enix) + @@ -2825,9 +5212,22 @@ User/save disks that can be created from the game itself are not included. - Ms. Detective File #1: Iwami Ginzan Satsujin Jiken + + Ms. Detective File #1 - Iwami Ginzan Satsujin Jiken 1992 - Data West + データウエスト (Data West) + @@ -2842,9 +5242,17 @@ User/save disks that can be created from the game itself are not included. - Ms. Detective File #2: Sugata-naki Irainin + + Ms. Detective File #2 - Sugata-naki Irainin 1993 - Data West + データウエスト (Data West) + @@ -2853,9 +5261,17 @@ User/save disks that can be created from the game itself are not included. + Megaspectre 1993 - Fujitsu + 富士通 (Fujitsu) + @@ -2864,9 +5280,17 @@ User/save disks that can be created from the game itself are not included. + Mujintou Monogatari 1995 - KSS + ケイエスエス (KSS) + @@ -2876,9 +5300,17 @@ User/save disks that can be created from the game itself are not included. + Murder Club DX 1992 - Riverhill Soft + リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft) + @@ -2887,9 +5319,17 @@ User/save disks that can be created from the game itself are not included. + Mixed-Up Mother Goose 1991 - Sierra On-Line Japan + シエラオンラインジャパン (Sierra On-Line Japan) + @@ -2898,9 +5338,16 @@ User/save disks that can be created from the game itself are not included. + Musium Towns 1993 - Victor + ビクター音楽産業 (Victor Musical Industries) @@ -2909,9 +5356,17 @@ User/save disks that can be created from the game itself are not included. + My Eyes! 1992 - Birdy Soft + ãƒãƒ¼ãƒ‡ã‚£ãƒ¼ã‚½ãƒ•ト (Birdy Soft) + @@ -2920,9 +5375,27 @@ User/save disks that can be created from the game itself are not included. + Fushigi no Umi no Nadia 1993 - Gainax + ガイナックス (Gainax) + @@ -2941,9 +5414,17 @@ User/save disks that can be created from the game itself are not included. + Necronomicon 1994 - Fairytale + フェアリーテール (Fairytale) + @@ -2952,7 +5433,14 @@ User/save disks that can be created from the game itself are not included. - Nihon no Rekishi: Kizoku-hen + + Nihon no Rekishi - Kizoku-hen 1990 CRI @@ -2963,7 +5451,14 @@ User/save disks that can be created from the game itself are not included. - Nihon no Rekishi: Kodai-hen + + Nihon no Rekishi - Kodai-hen 1990 CRI @@ -2974,9 +5469,16 @@ User/save disks that can be created from the game itself are not included. + Nihon no Yachou 1990 - Fujitsu + 富士通 (Fujitsu) @@ -2985,9 +5487,19 @@ User/save disks that can be created from the game itself are not included. + Ningyou Tsukai 1993 - Forest + フォレスト (Forest) + @@ -2996,9 +5508,17 @@ User/save disks that can be created from the game itself are not included. - Nobunaga no Yabou: Haouden + + Nobunaga no Yabou - Haouden 1993 - Koei + 光栄 (Koei) + @@ -3013,20 +5533,34 @@ User/save disks that can be created from the game itself are not included. - Nobunaga no Yabou: Tenshouki + + Nobunaga no Yabou - Tenshouki 1995 - Koei + 光栄 (Koei) + - + + Nova 1993 - Cat's Pro + Cat's Pro. + @@ -3035,9 +5569,14 @@ User/save disks that can be created from the game itself are not included. + OASYS/Win v2.0 1994 - Fujitsu + 富士通 (Fujitsu) @@ -3046,6 +5585,13 @@ User/save disks that can be created from the game itself are not included. + Okiraku TownsGEAR 1994 Softbank @@ -3057,9 +5603,17 @@ User/save disks that can be created from the game itself are not included. + Operation Wolf 1990 - Ving + ビング (Ving) + @@ -3068,6 +5622,13 @@ User/save disks that can be created from the game itself are not included. + Oshare Cooking 1989 Misawa Home @@ -3079,9 +5640,15 @@ User/save disks that can be created from the game itself are not included. + Ougon no Rashinban - 1990 - Riverhill Soft + 1991 + リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft) + @@ -3090,9 +5657,17 @@ User/save disks that can be created from the game itself are not included. + Panzer Division / Kikou Shidan 1990 - Artdink + アートディンク (Artdink) + @@ -3101,9 +5676,16 @@ User/save disks that can be created from the game itself are not included. + Pegasus 1995 - Fujitsu + 富士通 (Fujitsu) @@ -3112,9 +5694,45 @@ User/save disks that can be created from the game itself are not included. + Planet's Edge 1993 - Ving + ビング (Ving) + @@ -3123,9 +5741,17 @@ User/save disks that can be created from the game itself are not included. + Princess Maker 2 1994 - Gainax + ガイナックス (Gainax) + @@ -3134,9 +5760,17 @@ User/save disks that can be created from the game itself are not included. + Ponkan 1994 - Ponytail Soft + ãƒãƒ‹ãƒ¼ãƒ†ãƒ¼ãƒ«ã‚½ãƒ•ト (PonyTale Soft) + @@ -3145,9 +5779,17 @@ User/save disks that can be created from the game itself are not included. + Populous & The Promised Lands 1990 - Imagineer + イマジニア (Imagineer) + @@ -3155,23 +5797,33 @@ User/save disks that can be created from the game itself are not included. - + --> + Power Dolls 1994 - Kogado + 工画堂 (Kogado) + + + @@ -3184,9 +5836,17 @@ User/save disks that can be created from the game itself are not included. + Power Dolls 2 1995 - Kogado + 工画堂 (Kogado) + @@ -3195,15 +5855,25 @@ User/save disks that can be created from the game itself are not included. + Powermonger 1992 - Imagineer + イマジニア (Imagineer) + + + @@ -3216,9 +5886,17 @@ User/save disks that can be created from the game itself are not included. + Prince of Persia 1992 - Riverhill Soft + リãƒãƒ¼ãƒ’ルソフト (Riverhill Soft) + @@ -3227,9 +5905,15 @@ User/save disks that can be created from the game itself are not included. - Prince of Persia 2: The Shadow and the Flame + + Prince of Persia 2 - The Shadow and the Flame 1994 - Interprog + インタープログ (Interprog) + @@ -3238,10 +5922,19 @@ User/save disks that can be created from the game itself are not included. + Pro Student G 1993 - Alice Soft + アリスソフト (AliceSoft) + + @@ -3254,9 +5947,17 @@ User/save disks that can be created from the game itself are not included. - Provvidenza: Legenda la Spada di Alfa + + Provvidenza - Legenda la Spada di Alfa 1991 Sofcom + @@ -3265,9 +5966,18 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Vol. 1: Invitation + + Psychic Detective Series Vol. 1 - Invitation 1989 - Data West + データウエスト (Data West) + @@ -3276,9 +5986,31 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Vol. 2: Memories + + Psychic Detective Series Vol. 2 - Memories 1989 - Data West + データウエスト (Data West) @@ -3287,9 +6019,22 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Vol. 3: Aya + + Psychic Detective Series Vol. 3 - Aya 1990 - Data West + データウエスト (Data West) + @@ -3298,9 +6043,22 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Vol. 4: Orgel + + Psychic Detective Series Vol. 4 - Orgel 1991 - Data West + データウエスト (Data West) + @@ -3314,10 +6072,19 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Vol. 5: Nightmare + + Psychic Detective Series Vol. 5 - Nightmare 1991 - Data West + データウエスト (Data West) + + @@ -3330,9 +6097,21 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Final: Solitude Joukan + + Psychic Detective Series Final - Solitude Joukan 1992 - Data West + データウエスト (Data West) + @@ -3346,9 +6125,19 @@ User/save disks that can be created from the game itself are not included. - Psychic Detective Series Final: Solitude Gekan + + Psychic Detective Series Final - Solitude Gekan 1993 - Data West + データウエスト (Data West) + @@ -3362,9 +6151,42 @@ User/save disks that can be created from the game itself are not included. + Pu-Li-Ru-La 1994 - Ving + ビング (Ving) + @@ -3373,9 +6195,17 @@ User/save disks that can be created from the game itself are not included. + Puyo Puyo 1994 CRI + @@ -3384,9 +6214,14 @@ User/save disks that can be created from the game itself are not included. + Puzznic 1990 - Ving + ビング (Ving) + @@ -3395,9 +6230,17 @@ User/save disks that can be created from the game itself are not included. + RAC Rally 1995 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -3407,9 +6250,17 @@ User/save disks that can be created from the game itself are not included. + Raiden Densetsu / Raiden Trad 1991 - Kid Corp / Seibu + KID + @@ -3418,9 +6269,16 @@ User/save disks that can be created from the game itself are not included. + Ikazuchi no Senshi Raidy 1994 - ZyX + ジックス (ZyX) @@ -3429,9 +6287,26 @@ User/save disks that can be created from the game itself are not included. + Ikazuchi no Senshi Raidy 2 1996 - ZyX + ジックス (ZyX) + @@ -3441,9 +6316,17 @@ User/save disks that can be created from the game itself are not included. + Railroad Tycoon 1993 - MicroProse Japan + マイクロプローズジャパン (MicroProse Japan) + @@ -3452,9 +6335,17 @@ User/save disks that can be created from the game itself are not included. - Rance III: Leazas Kanraku + + Rance III - Leazas Kanraku 1992 - Alice Soft + アリスソフト (AliceSoft) + @@ -3463,10 +6354,19 @@ User/save disks that can be created from the game itself are not included. - Rance IV: Kyoudan no Isan + + Rance IV - Kyoudan no Isan 1994 - Alice Soft + アリスソフト (AliceSoft) + + @@ -3479,9 +6379,17 @@ User/save disks that can be created from the game itself are not included. - Rance 4.1: Okusuri Koujou wo Sukue! + + Rance 4.1 - Okusuri Koujou wo Sukue! 1995 - Alice Soft + アリスソフト (AliceSoft) + @@ -3491,9 +6399,17 @@ User/save disks that can be created from the game itself are not included. - Rance 4.2: Angel-gumi + + Rance 4.2 - Angel-gumi 1995 - Alice Soft + アリスソフト (AliceSoft) + @@ -3503,9 +6419,17 @@ User/save disks that can be created from the game itself are not included. + Ravenloft 1995 - Ving + ビング (Ving) + @@ -3514,9 +6438,17 @@ User/save disks that can be created from the game itself are not included. + Rayxanber 1990 - Data West + データウエスト (Data West) + @@ -3529,20 +6461,36 @@ User/save disks that can be created from the game itself are not included. manually from TownsOS, but it should be considered a bad dump. --> + Rainbow Islands Extra 1992 - Ving + ビング (Ving) + - + - + + Regional Power II 1992 - Cosmos + コスモス・コンピュータ (Cosmos Computer) + @@ -3555,9 +6503,17 @@ User/save disks that can be created from the game itself are not included. the title screen spells it as "Den-no Senshi" for whatever reason. --> - Rejection: Den-no Senshi + + Rejection - Den-no Senshi 1992 - Sur de Wave + シュールド・ウェーブ (Sur De Wave) + @@ -3566,9 +6522,17 @@ User/save disks that can be created from the game itself are not included. + Return to Zork 1994 - Data West + データウエスト (Data West) + @@ -3578,9 +6542,17 @@ User/save disks that can be created from the game itself are not included. + Ring Out!! 1995 - ZyX + ジックス (ZyX) + @@ -3589,9 +6561,14 @@ User/save disks that can be created from the game itself are not included. + Rocket Ranger 1990 - Pony Canyon + ãƒãƒ‹ãƒ¼ã‚­ãƒ£ãƒ‹ã‚ªãƒ³ (Pony Canyon) @@ -3600,9 +6577,17 @@ User/save disks that can be created from the game itself are not included. + Ryuutouden 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -3611,9 +6596,36 @@ User/save disks that can be created from the game itself are not included. + Sayaka & Miho 1994 - Fairytale + フェアリーテール (Fairytale) + @@ -3622,9 +6634,14 @@ User/save disks that can be created from the game itself are not included. + Scavenger 4 Demo Disc 1993 - Fujitsu + 富士通 (Fujitsu) @@ -3633,9 +6650,17 @@ User/save disks that can be created from the game itself are not included. + Scavenger 4 1993 - Fujitsu + 富士通 (Fujitsu) + @@ -3644,10 +6669,18 @@ User/save disks that can be created from the game itself are not included. + Scholar Movie Magazine 1994 King Records + @@ -3660,10 +6693,19 @@ User/save disks that can be created from the game itself are not included. + Schwarzschild 1991 - Kogado + 工画堂 (Kogado) + + @@ -3676,9 +6718,17 @@ User/save disks that can be created from the game itself are not included. + Schwarzschild IV 1993 - Kogado + 工画堂 (Kogado) + @@ -3687,9 +6737,16 @@ User/save disks that can be created from the game itself are not included. + Shangrlia 2 1993 - Elf + エルフ (Elf) @@ -3698,9 +6755,17 @@ User/save disks that can be created from the game itself are not included. - Sherlock Holmes: Consulting Detective + + Sherlock Holmes - Consulting Detective 1991 - Fujitsu + 富士通 (Fujitsu) + @@ -3709,9 +6774,17 @@ User/save disks that can be created from the game itself are not included. + Shinc 1993 - Libido + リビドー (Libido) + @@ -3720,9 +6793,16 @@ User/save disks that can be created from the game itself are not included. + Shounen Magazine History 1992 - Datt Japan + ダットジャパン (Datt Japan) @@ -3731,9 +6811,15 @@ User/save disks that can be created from the game itself are not included. + SimAnt 1993 - Imagineer + イマジニア (Imagineer) + @@ -3742,9 +6828,17 @@ User/save disks that can be created from the game itself are not included. + SimCity 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -3753,9 +6847,19 @@ User/save disks that can be created from the game itself are not included. + SimCity 2000 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -3764,9 +6868,17 @@ User/save disks that can be created from the game itself are not included. + SimEarth 1991 - Imagineer + イマジニア (Imagineer) + @@ -3775,9 +6887,17 @@ User/save disks that can be created from the game itself are not included. + SimFarm 1994 - Fujitsu + 富士通 (Fujitsu) + @@ -3786,9 +6906,17 @@ User/save disks that can be created from the game itself are not included. - Silent Mobius + + Silent Möbius 1991 - Gainax + ガイナックス (Gainax) + @@ -3797,10 +6925,19 @@ User/save disks that can be created from the game itself are not included. - Sotsugyou '93: Graduation + + Sotsugyou '93 - Graduation 1993 JHV + + @@ -3813,9 +6950,17 @@ User/save disks that can be created from the game itself are not included. + Splatterhouse 1992 - Ving + ビング (Ving) + @@ -3824,9 +6969,37 @@ User/save disks that can be created from the game itself are not included. + Super Odyssey 1989 - Wave Train + ウェーブトレイン (Wave Train) + @@ -3835,9 +7008,15 @@ User/save disks that can be created from the game itself are not included. - Shadow of the Beast: Mashou no Okite + + Shadow of the Beast - Mashou no Okite 1991 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -3845,11 +7024,29 @@ User/save disks that can be created from the game itself are not included. - - Shadow of the Beast II: Juushin no Jubaku + + Shadow of the Beast II - Juushin no Jubaku 1993 - Victor + ビクター音楽産業 (Victor Musical Industries) + @@ -3858,9 +7055,17 @@ User/save disks that can be created from the game itself are not included. + Super Real Mahjong PII & PIII 1992 - Ving + ビング (Ving) + @@ -3869,9 +7074,17 @@ User/save disks that can be created from the game itself are not included. + Super Real Mahjong PIV 1994 - Ving + ビング (Ving) + @@ -3880,9 +7093,15 @@ User/save disks that can be created from the game itself are not included. + Space Rogue 1990 - Wave Train + ウェーブトレイン (Wave Train) + @@ -3890,14 +7109,20 @@ User/save disks that can be created from the game itself are not included. - + Space Rogue (no disc check) 1990 - Wave Train + ウェーブトレイン (Wave Train) + @@ -3906,9 +7131,17 @@ User/save disks that can be created from the game itself are not included. - Super Street Fighter II: The New Challengers + + Super Street Fighter II - The New Challengers 1994 - Capcom + カプコン (Capcom) + @@ -3917,9 +7150,14 @@ User/save disks that can be created from the game itself are not included. - Super Street Fighter II: The New Challengers (Sample Disc) + + Super Street Fighter II - The New Challengers (Sample Disc) 1994 - Capcom + カプコン (Capcom) @@ -3928,9 +7166,17 @@ User/save disks that can be created from the game itself are not included. - Super Shanghai: Dragon's Eye + + Super Shanghai - Dragon's Eye 1991 - Hot-B + HOT・B + @@ -3943,25 +7189,40 @@ User/save disks that can be created from the game itself are not included. Also, the floppy disk seems to be an overdump. --> + Samurai Spirits 1995 JHV + + - + + Super Shooting Towns 1991 - Amorphous + アモルファス (Amorphous) + @@ -3970,10 +7231,19 @@ User/save disks that can be created from the game itself are not included. - Star Cruiser II: The Odysseus Project + + Star Cruiser II - The Odysseus Project 1994 JHV + + @@ -3986,9 +7256,17 @@ User/save disks that can be created from the game itself are not included. + Strike Commander 1994 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -3997,9 +7275,17 @@ User/save disks that can be created from the game itself are not included. + Strike Commander Plus 1995 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -4008,9 +7294,17 @@ User/save disks that can be created from the game itself are not included. + Stronghold 1994 - Ving + ビング (Ving) + @@ -4019,9 +7313,19 @@ User/save disks that can be created from the game itself are not included. + Syndicate 1994 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -4030,9 +7334,16 @@ User/save disks that can be created from the game itself are not included. + Towns Taikenban CD '93 1993 - Fujitsu + 富士通 (Fujitsu) @@ -4041,9 +7352,17 @@ User/save disks that can be created from the game itself are not included. + Taikou Risshinden 1992 - Koei + 光栄 (Koei) + @@ -4052,9 +7371,17 @@ User/save disks that can be created from the game itself are not included. - Takamizawa Kyosuke: Nekketsu!! Kyouiku Kenshuu + + Takamizawa Kyosuke - Nekketsu!! Kyouiku Kenshuu 1995 - ZyX + ジックス (ZyX) + @@ -4063,10 +7390,19 @@ User/save disks that can be created from the game itself are not included. - Tanjou: Debut + + Tanjou - Debut 1994 - Data West + データウエスト (Data West) + + @@ -4079,9 +7415,17 @@ User/save disks that can be created from the game itself are not included. + Tatsujin Ou 1993 - Ving + ビング (Ving) + @@ -4090,9 +7434,17 @@ User/save disks that can be created from the game itself are not included. - TDF: Terrestrial Defense Force + + TDF - Terrestrial Defense Force 1990 - Data West + データウエスト (Data West) + @@ -4101,10 +7453,19 @@ User/save disks that can be created from the game itself are not included. + Tenka Gomen 1994 - Artdink + アートディンク (Artdink) + + @@ -4117,6 +7478,13 @@ User/save disks that can be created from the game itself are not included. + The Date 1990 JAMP @@ -4128,9 +7496,17 @@ User/save disks that can be created from the game itself are not included. + The Horde 1995 - Arrow Micro-Techs + アローマイクロテックス (Arrow Micro-Techs) + @@ -4140,9 +7516,26 @@ User/save disks that can be created from the game itself are not included. + Titan 1989 - Fujitsu + 富士通 (Fujitsu) + @@ -4151,9 +7544,17 @@ User/save disks that can be created from the game itself are not included. - The NewZealand Story + + The New Zealand Story 1989 - Ving + ビング (Ving) + @@ -4162,10 +7563,19 @@ User/save disks that can be created from the game itself are not included. + Tokio 1992 - Artdink + アートディンク (Artdink) + + @@ -4178,9 +7588,17 @@ User/save disks that can be created from the game itself are not included. - Toushin Toshi II: Soshite, Sorekara... + + Toushin Toshi II - Soshite, Sorekara... 1995 - Alice Soft + アリスソフト (AliceSoft) + @@ -4190,10 +7608,17 @@ User/save disks that can be created from the game itself are not included. + The Queen of Duellist 1993 - Agumix + アグミックス (Agumix) + + @@ -4206,9 +7631,15 @@ User/save disks that can be created from the game itself are not included. + Turbo Out Run 1989 CRI + @@ -4217,9 +7648,14 @@ User/save disks that can be created from the game itself are not included. + Towns Magazine Vol. 1 1994 - Fujitsu + 富士通 (Fujitsu) @@ -4228,9 +7664,21 @@ User/save disks that can be created from the game itself are not included. + Towns Magazine Vol. 2 1994 - Fujitsu + 富士通 (Fujitsu) @@ -4244,9 +7692,17 @@ User/save disks that can be created from the game itself are not included. + Trigger 1994 - ZyX + ジックス (ZyX) + @@ -4255,9 +7711,14 @@ User/save disks that can be created from the game itself are not included. + Towns System Software v1.1 L10 1989 - Fujitsu + 富士通 (Fujitsu) @@ -4266,9 +7727,34 @@ User/save disks that can be created from the game itself are not included. + Towns System Software v1.1 L20 1989 - Fujitsu + 富士通 (Fujitsu) @@ -4277,9 +7763,14 @@ User/save disks that can be created from the game itself are not included. + Towns System Software v1.1 L30 1990 - Fujitsu + 富士通 (Fujitsu) @@ -4288,9 +7779,24 @@ User/save disks that can be created from the game itself are not included. + Towns System Software v2.1 L10A 1991 - Fujitsu + 富士通 (Fujitsu) @@ -4299,9 +7805,16 @@ User/save disks that can be created from the game itself are not included. + Towns System Software v2.1 L51 1995 - Fujitsu + 富士通 (Fujitsu) @@ -4310,9 +7823,31 @@ User/save disks that can be created from the game itself are not included. + Tunnels and Trolls 1990 - Starcraft + スタークラフト (Starcraft) + @@ -4321,9 +7856,15 @@ User/save disks that can be created from the game itself are not included. - Ultima IV: Quest of the Avatar + + Ultima IV - Quest of the Avatar 1992 - Fujitsu + 富士通 (Fujitsu) + @@ -4332,9 +7873,17 @@ User/save disks that can be created from the game itself are not included. - Ultima V: Warriors of Destiny + + Ultima V - Warriors of Destiny 1992 - Fujitsu + 富士通 (Fujitsu) + @@ -4343,9 +7892,17 @@ User/save disks that can be created from the game itself are not included. - Ultima VI: The False Prophet + + Ultima VI - The False Prophet 1991 - Fujitsu + 富士通 (Fujitsu) + @@ -4354,9 +7911,17 @@ User/save disks that can be created from the game itself are not included. + Ultima Trilogy I-II-III 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -4365,9 +7930,17 @@ User/save disks that can be created from the game itself are not included. - Ultima Underworld: The Stygian Abyss + + Ultima Underworld - The Stygian Abyss 1993 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -4376,9 +7949,19 @@ User/save disks that can be created from the game itself are not included. - Ultima Underworld II: Labyrinth of Worlds + + Ultima Underworld II - Labyrinth of Worlds 1995 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -4387,10 +7970,19 @@ User/save disks that can be created from the game itself are not included. + Uwaki na Anata 1994 HOP + + @@ -4402,10 +7994,194 @@ User/save disks that can be created from the game itself are not included. + + + Vain Dream + 1993 + グローディア (Glodia) + + + + + + + + + + + + + + + + + Vain Dream II + 1993 + グローディア (Glodia) + + + + + + + + + + + + + + + + + Vastness - Kuukyo no Ikenie-tachi + 1993 + CD Bros. + + + + + + + + + + + Veil of Darkness + 1994 + ビング (Ving) + + + + + + + + + + + Viewpoint + 1993 + ビング (Ving) + + + + + + + + + + + Viper V6 Turbo RS + 1995 + ソニア (Sogna) + + + + + + + + + + + Viper V10 Turbo RS + 1995 + ソニア (Sogna) + + + + + + + + + + + + Virtuacall + 1995 + フェアリーテール (Fairytale) + + + + + + + + + + + + + + + Volfied 1991 - Ving + ビング (Ving) + @@ -4413,8 +8189,39 @@ User/save disks that can be created from the game itself are not included. + + + Wakoku Seiha Den + 1994 + Mic + + + + + + + + + Windows 3.1 L11 1994 Microsoft @@ -4426,6 +8233,11 @@ User/save disks that can be created from the game itself are not included. + Windows 95 1996 Microsoft @@ -4437,9 +8249,16 @@ User/save disks that can be created from the game itself are not included. + Wing Commander Armada 1995 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + + @@ -4448,9 +8267,17 @@ User/save disks that can be created from the game itself are not included. + Wing Commander 1992 - Fujitsu + 富士通 (Fujitsu) + @@ -4459,9 +8286,16 @@ User/save disks that can be created from the game itself are not included. - Wing Commander: Secret Missions + + Wing Commander - Secret Missions 1994 - Fujitsu + 富士通 (Fujitsu) + + @@ -4470,9 +8304,15 @@ User/save disks that can be created from the game itself are not included. + Wing Commander II and Special Operations 1995 - Electronic Arts Victor + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + @@ -4481,10 +8321,17 @@ User/save disks that can be created from the game itself are not included. - Wizardry V: Heart of the Maelstrom + + Wizardry V - Heart of the Maelstrom 1990 - Sir-Tech + アスキー (ASCII) + + @@ -4497,10 +8344,19 @@ User/save disks that can be created from the game itself are not included. - Wizardry VI: Bane of the Cosmic Forge + + Wizardry VI - Bane of the Cosmic Forge 1991 - ASCII + アスキー (ASCII) + + @@ -4513,9 +8369,15 @@ User/save disks that can be created from the game itself are not included. - Wizardry VII: Crusaders of the Dark Savant + + Wizardry VII - Crusaders of the Dark Savant 1994 - ASCII + アスキー (ASCII) + @@ -4523,10 +8385,73 @@ User/save disks that can be created from the game itself are not included. + + + + Wrestle Angels 3 + 1994 + グレイト (Great) + + + + + + + + + + + + + + + + + Wrestle Angels Special + 1994 + グレイト (Great) + + + + + + + + + + + + + + + Where in the World is Carmen Sandiego? 1993 - Fujitsu + 富士通 (Fujitsu) + @@ -4534,21 +8459,56 @@ User/save disks that can be created from the game itself are not included. - - Xak II: Rising of the Redmoon - 1991 - Micro Cabin + + + Words Worth + 1993 + エルフ (Elf) + - + + + + + + + + Xak II - Rising of the Redmoon + 1991 + マイクロキャビン (Micro Cabin) + + + + - Xak III: The Eternal Recurrence + + Xak III - The Eternal Recurrence 1993 - Micro Cabin + マイクロキャビン (Micro Cabin) + @@ -4557,9 +8517,17 @@ User/save disks that can be created from the game itself are not included. + Xenon 1995 - C's Ware + シーズウェア (C's Ware) + @@ -4567,10 +8535,104 @@ User/save disks that can be created from the game itself are not included. + + + Yami no Ketsuzoku Special + 1991 + システムサコム (System Sacom) + + + + + + + + + + + + + + + + + Yojuu Senki - A.D. 2048 + 1993 + ディー・オー (D.O.) + + + + + + + + + + + Yumimi Mix + 1993 + CRI + + + + + + + + + + + Yuuwaku + 1996 + ティーツー (T2) + + + + + + + + + + + + + + + Zak McKracken and The Alien Mindbenders 1990 - Fujitsu + 富士通 (Fujitsu) + @@ -4578,10 +8640,66 @@ User/save disks that can be created from the game itself are not included. + + + Zan II - Towns Special + 1992 + ウルフãƒãƒ¼ãƒ  (WolfTeam) + + + + + + + + + + + + + + + + + Zatsuon Ryouiki + 1995 + ディー・オー (D.O.) + + + + + + + + Zenith 1995 - Himeya Soft + 姫屋ソフト (Himeya Soft) + @@ -4590,9 +8708,17 @@ User/save disks that can be created from the game itself are not included. - Zoku Dungeon Master: Chaos no Gyakushuu + + Zoku Dungeon Master - Chaos no Gyakushuu 1990 - Victor + ビクター音楽産業 (Victor Musical Industries) + diff --git a/hash/fmtowns_flop.xml b/hash/fmtowns_flop.xml new file mode 100644 index 00000000000..237086c20cf --- /dev/null +++ b/hash/fmtowns_flop.xml @@ -0,0 +1,1646 @@ + + + + + + + + + + + + Towns System Software v1.1 L20 English + 199? + 富士通 (Fujitsu) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Towns System Software v1.1 L20 English (Alt Disk 2) + 199? + 富士通 (Fujitsu) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Towns System Software v2.1 L51 + 1995 + 富士通 (Fujitsu) + + + + + + + + + Towns System Software v2.1 L51 (Alt) + 1995 + 富士通 (Fujitsu) + + + + + + + + + MS-DOS 3.1 L24 + 1992 + 富士通 (Fujitsu) + + + + + + + + + + + + + + + + MS-DOS 6.2 L10 + 1994 + 富士通 (Fujitsu) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MS-DOS 6.2 L10 (Bad Disk 1?) + 1994 + 富士通 (Fujitsu) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Abunai Tengu Densetsu + 1990 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + Asuka 120% Burning Fest. + 1994 + ファミリーソフト (Family Soft) + + + + + + + + + + + + + + + + + + + + + + + Brandish + 1991 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + + + + + + + + + + + Columns + 1990 + 日本テレãƒãƒƒãƒˆ (Nihon Telenet) + + + + + + + + + + D.P.S - Dream Program System + 1990 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + D.P.S SG - Dream Program System SG + 1990 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D.P.S SG 2 - Dream Program System SG Set 2 + 1991 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D.P.S SG 3 - Dream Program System SG Set 3 + 1991 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Dinosaur + 1991 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + + + + + + + + + + Dr. Stop! + 1990 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + Futoppara FD Heisei #02 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #03 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #04 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #05 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #06 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #07 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #08 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #09 + 199? + SoftBank + + + + + + + + + Futoppara FD Heisei #10 + 199? + SoftBank + + + + + + + + + Houma Hunter Lime Vol. 01 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 02 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 03 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 04 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 05 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 06 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 07 + 1993 + タケル (Takeru) + + + + + + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 08 + 1994 + タケル (Takeru) + + + + + + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 09 + 1994 + タケル (Takeru) + + + + + + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 10 + 1994 + タケル (Takeru) + + + + + + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 11 + 1994 + タケル (Takeru) + + + + + + + + + + + + + + + + + + + + Houma Hunter Lime Vol. 12 + 1994 + タケル (Takeru) + + + + + + + + + + + + + + + + + + + + + + + + + Irium + 1993 + オレンジãƒã‚¦ã‚¹ (Orange House) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Kawarazaki-ke no Ichizoku + 1993 + シルキーズ (Silky's) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Music Pro-Towns + 1989 + Musical Plan + + + + + + + + + Premium 2 + 1993 + シルキーズ (Silky's) + + + + + + + + + + + + + + + + + + + + + + + + + Rance - Hikari o Motomete.hdm + 1990 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + Rance 2 - Hangyaku no Shoujotachi + 1990 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reira + 1994 + シルキーズ (Silky's) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reira (Alt Disk 1) + 1994 + シルキーズ (Silky's) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Shougi Seiten + 1992 + ホームデータ (Home Data) + + + + + + + + + + + + + + + + + + + + + + + Soreyuke Nanpa-kun + 1991 + ヴァージンãƒã‚¦ã‚¹ (Virgin House) + + + + + + + + + + + + + + + + + + + + + + + Super D.P.S. + 1992 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Toushin Toshi + 1991 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Toushin Toshi (Alt Disk 2) + 1991 + アリスソフト (AliceSoft) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Ushinawareta Rakuen + 1995 + シルキーズ (Silky's) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrestle Angels + 1993 + グレイト (Great) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrestle Angels 2 + 1993 + グレイト (Great) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wrestle Angels 2 (Alt) + 1993 + グレイト (Great) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AfterBurner 2 Again + 199? + <doujin> + + + + + + + + + + + Air Raider + 199? + <doujin> + + + + + + + + + + Bliss Collection #01 - Whips Ct. 1 + 199? + <doujin> + + + + + + + + + + Bliss Collection #02 - Vips + 199? + <doujin> + + + + + + + + + + Bliss Collection #02 - Vips (Alt) + 199? + <doujin> + + + + + + + + + + Bliss Collection #03 - Whips Ct. 2 Pro + 199? + <doujin> + + + + + + + + + + Bliss Collection #07 - Whips Ct. 4 + 199? + <doujin> + + + + + + + + + + Doushite Ii ka Wakaranai - Ayanami Rei Kannou Shashin-shuu + 199? + <doujin> + + + + + + + + + + + Exgmaze + 199? + <doujin> + + + + + + + + + + KISS - KISekae Set system + 199? + <doujin> + + + + + + + + + + Planet Attacker + 199? + <doujin> + + + + + + + + + + Realtime Kaigi Simulator + 199? + <doujin> + + + + + + + + + Sword Edge + 199? + <doujin> + + + + + + + + + + Sword Edge - Map Editor + 199? + <doujin> + + + + + + + + + + Sword Edge - Sprite Editor + 199? + <doujin> + + + + + + + + + + Tactical Air Wing + 199? + <doujin> + + + + + + + + + + VZ Editor 1.6 with ATOK 7 + 199? + <doujin> + + + + + + + + + \ No newline at end of file diff --git a/hash/gba.xml b/hash/gba.xml index b38bd4d18d3..e675da975de 100644 --- a/hash/gba.xml +++ b/hash/gba.xml @@ -1,4092 +1,31 @@ + - - - 2 Game Pack!: Hot Wheels - Stunt Track Challenge + Hot Wheels - World Race (Euro, USA) - 200? - DSI Games - - - - - - - - - + - - Ace Lightning (Euro) - 2002 - BBC Worldwide - - - - - - - - - - - - - - - Advance Wars (Euro) - 2001 - Nintendo - - - - - - - - - - - - - - - Bionicle - Matoran Adventures (Euro, USA) - 2002 - Electronic Arts - - - - - - - - - - - - - - - Bionicle Heroes (Euro) - 2006 - Amaze Entertainment - - - - - - - - - - - - - - - bit Generations - Boundish (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - bit Generations - Digidrive (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - bit Generations - Orbital (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - Bubble Bobble - Old & New (Euro) - 2002 - Empire Interactive - - - - - - - - - - - - - - - Calciobit (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - Carrera Power Slide (Euro) - 2002 - Stadlbauer - - - - - - - - - - - - - - - Charlotte's Web (USA) - 2006 - Sega - - - - - - - - - - - - - - - Classic NES Series - Super Mario Bros. (Euro, USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Curious George (Euro) - 2006 - Namco - - - - - - - - - - - - - - Bura Bura Donkey (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - Doom II (Euro) - 2002 - Activision - - - - - - - - - - - - - - - Dr. Muto (Euro) - 2002 - Midway - - - - - - - - - - - - - - - Dragon Ball Z - The Legacy of Goku (USA) - 2002 - Infogrames - - - - - - - - - - - - - - - Droopy's Tennis Open (Euro) - 2002 - L.S.P. - - - - - - - - - - - - - Eyeshield 21 Devilbats Devildays (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - F-Zero - Maximum Velocity (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - - - - FIFA 07 (Euro, USA) - 2006 - Electronic Arts - - - - - - - - - - - - - - - - Final Fight One (Euro) - 2001 - Ubi Soft - - - - - - - - - - - - - - - Fire Emblem (Euro, English / French / German) - 2004 - Nintendo - - - - - - - - - - - - - - - - Fortress (Euro, USA) - 2001 - Majesco - - - - - - - - - - - - - Ghost Rider (Euro, USA) - 2006 - Take-Two Interactive - - - - - - - - - - - - - - - Godzilla - Domination! (USA) - 2002 - Infogrames - - - - - - - - - - - - - Golden Nugget Casino (Euro, USA) - 2004 - Majesco - - - - - - - - - - - - - Golden Sun (Spa) - 2002 - Nintendo - - - - - - - - - - - - - - - Gunstar Future Heroes (Euro) - 2005 - Sega - - - - - - - - - - - - - - - Harry Potter and the Prisoner of Azkaban (Euro, USA) - 2004 - Electronic Arts - - - - - - - - - - - - - - - Harry Potter and the Sorcerer's Stone (Euro, USA) - 2001 - Electronic Arts - - - - - - - - - - - - - - - Harvest Moon - Friends of Mineral Town (Ger) - 2003 - Ubi Soft - - - - - - - - - - - - - - - - Hey Arnold! - The Movie (Euro) - 2002 - THQ - - - - - - - - - - - - - Hey Arnold! - The Movie (USA) - 2002 - THQ - - - - - - - - - - - - - The Hobbit (Euro) - 2003 - Sierra Entertainment - - - - - - - - - - - - - - - It's Mr. Pants (Euro, USA) - 2005 - THQ - - - - - - - - - - - - - - - Jet Set Radio (Euro) - 2004 - Sega - - - - - - - - - - - - - - - Kill.Switch (USA) - 2004 - DSI Games - - - - - - - - - - - - - - - The King of Fighters EX - NeoBlood (USA) - 2002 - Sammy - - - - - - - - - - - - - - - Lara Croft Tomb Raider - The Prophecy (Euro) - 2002 - Ubi Soft - - - - - - - - - - - - - The Legend of Zelda - The Minish Cap (Euro) - 2004 - Nintendo - - - - - - - - - - - - - - - Disney's Lilo & Stitch 2 (Euro) - 2004 - Disney Interactive - - - - - - - - - - - - - - - Looney Tunes - Back in Action (Euro, USA) + + 007 - Everything or Nothing (Euro, USA) 2003 Electronic Arts - + - - - - - + - - The Lost Vikings (Euro) - 2003 - Blizzard Entertainment - - - - - - - - - - - - - - - Mario Kart - Super Circuit (Euro) - 2001 - Nintendo - - - - - - - - - - - - - - - Mario Tennis Advance (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - Max Payne Advance (Euro) - 2004 - Rockstar Games - - - - - - - - - - - - - - - - Medal of Honor - Infiltrator (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - Mega Man & Bass (Euro) - 2003 - Capcom - - - - - - - - - - - - - - - Mega Man Battle Network 3 Blue (USA) - 2003 - Capcom - - - - - - - - - - - - - - - Mega Man Battle Network 6 Cybeast Falzar (USA) - 2006 - Capcom - - - - - - - - - - - - - - - - - Metroid Fusion (Euro) - 2002 - Nintendo - - - - - - - - - - - - - - - - - - Metroid Fusion (Euro, Prototype 20020911) - 2002 - Nintendo - - - - - - - - - - - Metroid Fusion (Euro, Prototype 20020916) - 2002 - Nintendo - - - - - - - - - - - MLB SlugFest 20-04 (USA) - 2003 - Midway - - - - - - - - - - - - - Monster Trucks (Euro, USA) - 2004 - Majesco - - - - - - - - - - - - - Mother 3 (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - Jim Henson's Muppets - On with the Show! (Euro, USA) - 2003 - TDK Mediactive - - - - - - - - - - - - - Need for Speed Carbon - Own the City (Euro, USA) - 2006 - Electronic Arts - - - - - - - - - - - - - - - No No No Puzzle Chailien (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - No Rules - Get Phat (Euro, USA) - 2001 - TDK Mediactive - - - - - - - - - - - - - Pinky and the Brain - The Masterplan (Euro) - 2002 - SWING! Entertainment - - - - - - - - - - - - - - Pocket Monsters - Fushigi no Dungeon Aka no Kyuujotai (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Pokémon - Edición Esmeralda (Spa) - 2004 - Nintendo - - - - - - - - - - - - - - - - - Pokémon - FireRed Version (USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Pokémon - Edición Rubí (Spa) - 2003 - Nintendo - - - - - - - - - - - - - - - - - Pocket Music (Euro) - 2002 - Rage Software - - - - - - - - - - - - - - - - - - Rayman - Raving Rabbids (Euro) - 2006 - Ubisoft - - - - - - - - - - - - - - - Rhythm Tengoku (Jpn) - 2006 - Nintendo - - - - - - - - - - - - - - - - - - Robot Wars - Extreme Destruction (Euro) - 2002 - BBC Multimedia - - - - - - - - - - - - - - - Scooby-Doo and the Cyber Chase (Euro, English / French / German) - 2001 - THQ - - - - - - - - - - - - - Screw Breaker - Goushin DoriRureRo (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - - Sennen Kazoku (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - - Shin Chan - Aventuras en Cineland (Spa) - 2005 - Atari - - - - - - - - - - - - - - - Shrek 2 (Euro, French / German / Italian / Spanish / Swedish) - 2004 - Activision - - - - - - - - - - - - - - - The Sims 2 (Euro, USA) - 2005 - Electronic Arts - - - - - - - - - - - - - - - The Sims - Bustin' Out (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - Sitting Ducks (Euro) - 2003 - L.S.P. - - - - - - - - - - - - - Sonic Advance (Euro) - 2002 - Infogrames - - - - - - - - - - - - - - - SpongeBob SquarePants - SuperSponge (Euro, USA) - 2001 - THQ - - - - - - - - - - - - - Spyro Fusion (Euro) - 2004 - Vivendi Universal - - - - - - - - - - - - - - - Super Donkey Kong 3 (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Super Mario Advance 3 - Yoshi's Island (Euro) - 2002 - Nintendo - - - - - - - - - - - - - - - Tales of Phantasia (USA, Aus) - 2006 - Nintendo - - - - - - - - - - - - - - - Teenage Mutant Ninja Turtles (Euro) - 2003 - Konami - - - - - - - - - - - - - - - Terminator 3 - Rise of the Machines (Euro) - 2003 - Atari - - - - - - - - - - - - - Tony Hawk's Downhill Jam (Euro) - 2006 - Activision - - - - - - - - - - - - - - - Tony Hawk's Downhill Jam (USA) - 2006 - Activision - - - - - - - - - - - - - - - Tony Hawk's Pro Skater 2 (Euro, USA) - 2001 - Activision - - - - - - - - - - - - - - - Top Gun - Firestorm Advance (Euro, USA) - 2002 - Titus - - - - - - - - - - - - - Welcome to The Tower SP (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Tsuukin Hitofude (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - Turok Evolution (Euro) - 2002 - Acclaim - - - - - - - - - - - - - The Urbz - Sims in the City (Euro, USA) - 2004 - Electronic Arts - - - - - - - - - - - - - - - WarioWare - Twisted! (USA) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - Wolfenstein 3D (Euro, USA) - 2002 - BAM! Entertainment - - - - - - - - - - - - - - - - Yu-Gi-Oh! - The Eternal Duelist Soul (USA) - 2002 - Konami - - - - - - - - - - - - - - - - - - Shonen Jump's Yu-Gi-Oh! - Ultimate Masters - World Championship Tournament 2006 (USA) - 2006 - Konami - - - - - - - - - - - - - - - - Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (USA) - 2003 - Konami - - - - - - - - - - - - - - - Yu-Gi-Oh! Duel Monsters International - Worldwide Edition (Jpn, Rev. 1) - 2003 - Konami - - - - - - - - - - - - - - - - - - - - Zooo (Euro) - 2005 - Ignition Entertainment - - - - - - - - - - - - - - - - Play-Yan (Jpn) - 2005 - Nintendo - - - - - - - - - - - - - - - - - - - - 007 - NightFire (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - Advance Wars 2 - Black Hole Rising (USA, Aus) - 2003 - Nintendo - - - - - - - - - - - - - - - Broken Sword - The Shadow of the Templars (Euro) - 2002 - BAM! Entertainment - - - - - - - - - - - - - - - Classic NES Series - The Legend of Zelda (Euro, USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Classic NES Series - Zelda II - The Adventure of Link (Euro, USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Contra Advance - The Alien Wars EX (USA) - 2002 - Konami - - - - - - - - - - - - - Doom (Euro, USA) - 2001 - Activision - - - - - - - - - - - - - - - Duke Nukem Advance (Euro) - 2002 - Take-Two Interactive - - - - - - - - - - - - - - - FIFA 2004 (Euro, USA) - 2003 - Electronic Arts - - - - - - - - - - - - - - - - Final Fantasy I & II - Dawn of Souls (USA, Aus) - 2004 - Square Enix - - - - - - - - - - - - - - - - Final Fantasy Tactics Advance (USA, Aus) - 2003 - Square Enix - - - - - - - - - - - - - - - Game Boy Advance Video - Dragon Ball GT - Volume 1 (USA) - 2004 - Majesco - - - - - - - - - - - - - Game Boy Advance Video - Sonic X - Volume 1 (USA) - 2004 - Majesco - - - - - - - - - - - - - Go! Go! Beckham! - Adventure on Soccer Island (Euro) - 2002 - Rage Software - - - - - - - - - - - - - - - Golden Sun (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - Golden Sun - The Lost Age (Euro, USA) - 2003 - Nintendo - - - - - - - - - - - - - - - Harry Potter and the Chamber of Secrets (Euro, USA) - 2002 - Electronic Arts - - - - - - - - - - - - - - - Harvest Moon - Friends of Mineral Town (Euro) - 2003 - Ubi Soft - - - - - - - - - - - - - - - - Disney's Kim Possible 2 - Drakken's Demise (Euro) - 2006 - Buena Vista Games - - - - - - - - - - - - - - - Disney's Kim Possible 2 - Drakken's Demise (USA) - 2004 - Disney Interactive - - - - - - - - - - - - - - - Lady Sia (Euro) - 2001 - TDK Mediactive - - - - - - - - - - - - - - - The Legend of Zelda - A Link to the Past & Four Swords (Euro) - 2003 - Nintendo - - - - - - - - - - - - - - - LEGO Island 2 - The Brickster's Revenge (Euro) - 2001 - Electronic Arts - - - - - - - - - - - - - - - - - - Metroid - Zero Mission (USA) - 2004 - Nintendo - - - - - - - - - - - - - - - - - - Metroid - Zero Mission (USA, Prototype) - 2004 - Nintendo - - - - - - - - - - Ougon no Taiyou - Hirakareshi Fuuin (Jpn) - 2001 - Nintendo - - - - - - - - - - - - - - - - - Pac-Man Collection (Euro) - 2001 - Infogrames - - - - - - - - - - - - - Pokémon - LeafGreen Version (USA) - 2004 - Nintendo - - - - - - - - - - - - - - - Pokémon - Ruby Version (Euro, Rev. 1) - 2003 - Nintendo - - - - - - - - - - - - - - - - - Pokémon - Sapphire Version (Euro, Rev. 1) - 2003 - Nintendo - - - - - - - - - - - - - - - - - Scrabble Scramble! (Euro) - 2005 - Zoo Digital Publishing - - - - - - - - - - - - Star Wars - Episode II - Attack of the Clones (Euro) - 2002 - THQ - - - - - - - - - - - - - Star Wars - Flight of the Falcon (USA) - 2003 - THQ - - - - - - - - - - - - - Star Wars - The New Droid Army (Euro) - 2002 - THQ - - - - - - - - - - - - - Starsky & Hutch (Euro) - 2003 - Empire Entertainment - - - - - - - - - - - - - - - Super Mario Advance (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - Super Mario Advance 4 - Super Mario Bros. 3 (USA, Aus, Rev. 1) - 2003 - Nintendo - - - - - - - - - - - - - - - - Superman Returns - Fortress of Solitude (Euro, USA) - 2006 - Electronic Arts - - - - - - - - - - - - - - - Tom Clancy's Rainbow Six - Rogue Spear (Euro) - 2002 - Ubi Soft - - - - - - - - - - - - - - - Disney's Treasure Planet (USA) - 2002 - Disney Interactive - - - - - - - - - - - - - Wario Land 4 (Euro, USA) - 2001 - Nintendo - - - - - - - - - - - - - - - - - - WarioWare, Inc. - Minigame Mania (Euro) - 2003 - Nintendo - - - - - - - - - - - - - - - Wing Commander - Prophecy (Euro) - 2003 - Destination Software - - - - - - - - - - - - - - - Zone of the Enders - The Fist of Mars (Euro) - 2002 - Konami - - - - - - - - - - - - - - - - - - 2 in 1: Astérix & Obélix - Bash Them All! + Astérix & Obélix XXL (Euro) - 2005 - Atari - - - - - - - - - - - Barbie Superpack: Groovy Games + Secret Agent (Euro) - 2005 - Vivendi Universal - - - - - - - - - - Barbie Superpack: Groovy Games + Secret Agent (USA) - 2005? - Vivendi Universal - - - - - - - - - - 2 Games in 1: Bionicle + Knights' Kingdom (Euro) - 200? - THQ - - - - - - - - - - Double Game!: Cartoon Network Block Party + Cartoon Network Speedway (Euro) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Cartoon Network Block Party + Cartoon Network Speedway (USA) - 2005 - Majesco - - - - - - - - - - Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (Euro) - 2006 - Konami - - - - - - - - - - - Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (USA) - 2006 - Konami - - - - - - - - - - - 2 Games in 1: Columns Crown + ChuChu Rocket! (Euro) - 2006? - Sega - - - - - - - - - - - Crash Superpack: Crash Bandicoot 2 - N-Tranced + Crash Nitro Kart (USA) - 2005? - Sierra Entertainment - - - - - - - - - - - 2 Games in 1: Disney Princess + Lizzie McGuire (Euro) - 200? - THQ - - - - - - - - - - 2 Games in 1: Disney Princesas + Lizzie McGuire (Spa) - 200? - THQ - - - - - - - - - - 2 Games in 1: Disney Princess + Disney's Brother Bear (Euro) - 2005 - THQ - - - - - - - - - - - 2 Games in 1: Disney Princesse + Disney's Frère des Ours (Fra) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disneys Prinzessinnen + Disneys Bärenbrüder (Ger) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disney Principesse + Disney's Koda, Fratello Orso (Ita) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disney Princesas + Disney's Hermano Oso (Spa) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Disney's The Lion King + Disney Princess (Euro) - 2004 - THQ - - - - - - - - - - - 2 Games in 1: Disney Princesse + Disney's Le Roi Lion (Fra) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disneys Prinzessinnen + Disneys Der Koenig der Loewen (Ger) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disney Principesse + Disney's Il Re Leone (Ita) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disney Princesas + Disney's El Rey Leon (Spa) - 2004 - THQ - - - - - - - - - - 2 Games in 1: Disney's Brother Bear + Disney's The Lion King (Euro) - 200? - THQ - - - - - - - - - - - 2 Disney Games: Disney Sports - Football + Disney Sports - Skateboarding (Euro) - 200? - Disney Interactive - - - - - - - - - - 2 Disney Games: Disney's Peter Pan - Return to Neverland + Disney's Lilo & Stitch 2 (Euro) - 200? - Disney Interactive - - - - - - - - - - 2 Games in One: Dora the Explorer Double Pack (USA) - 2007 - Global Star Software - - - - - - - - - - 2 Games in 1: Dragon Ball Z I & II (USA) - 2005 - Atari - - - - - - - - - - - - 2 Games in 1!: Dragon Ball Z - Buu's Fury + Dragon Ball GT - Transformation (USA) - 200? - Atari - - - - - - - - - - - 2 Games in 1: Finding Nemo - The Continuing Adventures + The Incredibles (USA) - 200? - THQ - - - - - - - - - - 2 Games in 1: Findet Nemo + Findet Nemo - Das Abenteuer Geht Weiter (Ger) - 200? - THQ - - - - - - - - - 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Euro) - 200? - THQ - - - - - - - - - - 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Ita?, Spa?) - 200? - THQ - - - - - - - - - 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Fra?, Ned?) - 200? - THQ - - - - - - - - - 2 Games in 1: Finding Nemo + The Incredibles (Euro) - 2007 - THQ - - - - - - - - - - 2 Games in 1: Finding Nemo + The Incredibles (Euro, French / Dutch) - 2007 - THQ - - - - - - - - - 2 Games in 1: Findet Nemo + Die Unglaublichen (Ger) - 2007 - THQ - - - - - - - - 2 Games in 1: Alla Ricerca di Nemo + Gli Incredibili - Una 'Normale' Famiglia di Supereroi (Ita) - 2007 - THQ - - - - - - - - - 2 Games in 1: Buscando a Nemo + Los Increibles (Spa) - 2007 - THQ - - - - - - - - - Double Game!: Golden Nugget Casino - Texas Hold 'em Poker (Euro) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Golden Nugget Casino - Texas Hold 'em Poker (USA) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (Euro) - 200? - THQ - - - - - - - - - - 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (USA) - 200? - THQ - - - - - - - - - Hugo 2 in 1 (Euro) - 2005 - ITE Media - - - - - - - - - - - 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (Euro) - 2006 - Zoo Digital Publishing - - - - - - - - - - 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (USA) - 2006 - DSI Games - - - - - - - - - - 2 Games in 1: Monsters, Inc. + Finding Nemo (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Monsters en Co. + Finding Nemo (Ned) - 2005 - THQ - - - - - - - - - 2 Games in 1: Monstres & Cie + Le Monde de Nemo (Fra) - 2005 - THQ - - - - - - - - - 2 Games in 1: Die Monster AG + Findet Nemo (Ger) - 2005 - THQ - - - - - - - - - 2 Games in 1: Monsters & Co. + Alla Ricerca di Nemo (Ita) - 2005 - THQ - - - - - - - - - 2 Games in 1: Monstruos, S.A. + Buscando a Nemo (Spa) - 2005 - THQ - - - - - - - - - 2 Games in 1 Double Pack: Monsters, Inc. + Finding Nemo (USA) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Moto GP + GT Advance 3 - Pro Concept Racing (Euro) - 200? - THQ - - - - - - - - - - - Pac-Man World & Ms. Pac-Man - Maze Madness (Euro) - 2005 - Zoo Digital Publishing - - - - - - - - - - 2 Great Games!: Pac-Man World + Ms. Pac-Man - Maze Madness (USA) - 2005 - Namco - - - - - - - - - - - Pferd & Pony 2 in 1: Pferd & Pony - Mein Pferdehof + Pferd & Pony - Lass Uns Reiten 2 (Ger) - 2006? - dtp Entertainment - - - - - - - - - - 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Euro) - 2005 - THQ - - - - - - - - - 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - La Force du Temps (Fra) - 2005 - THQ - - - - - - - - - 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Ger) - 2005 - THQ - - - - - - - - - 2 Games in 1 Double Pack: Power Rangers - Ninja Storm + Power Rangers - Time Force (USA) - 2005 - THQ - - - - - - - - - - Prince of Persia - The Sands of Time & Lara Croft Tomb Raider - The Prophecy (Euro) - 2006 - Ubisoft - - - - - - - - - - - Double Game!: Quad Desert Fury + Monster Trucks (Euro) - 2005 - Majesco - - - - - - - - - 2 Games in 1: Quad Desert Fury + Monster Trucks (USA) - 2005 - Majesco - - - - - - - - - - 2 Games in 1: Rugrats - Go Wild + SpongeBob SquarePants - SuperSponge (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1: Les Razmoket Rencontrent les Delajungle + SpongeBob SquarePants - SuperSponge (Fra) - 200? - THQ - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (Euro) - 2006 - THQ - - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Desatado (Spa) - 2006 - THQ - - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Les Monstres Se Dechainent (Fra) - 2006 - THQ - - - - - - - - - - 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (USA) - 2006 - THQ - - - - - - - - - - - 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (USA) - 2005 - THQ - - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar (Euro) - 2006? - Activision - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar (USA) - 2006? - Activision - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (Euro) - 2006 - Activision - - - - - - - - - - 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (USA) - 2006 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Shrek 2 + Shark Tale (Euro) - 2005 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Shrek 2 + Shark Tale (USA) - 2005 - Activision - - - - - - - - - - - 2 Games in 1: Sonic Advance + ChuChu Rocket! (Euro) - 2005 - THQ - - - - - - - - - - - Double Pack: Sonic Advance + ChuChu Rocket! (Jpn) - 2006 - Sega - - - - - - - - - - - - - - 2 Games in 1: Sonic Advance + Sonic Battle (Euro) - 2005 - THQ - - - - - - - - - - - Double Pack: Sonic Advance + Sonic Battle (Jpn) - 2006 - Sega - - - - - - - - - - - - - - 2 Games in 1: Sonic Advance + Sonic Pinball Party (Euro) - 2005 - Sega - - - - - - - - - - - Double Pack: Sonic Battle + Sonic Pinball Party (Jpn) - 2006 - Sega - - - - - - - - - - - - - Combo Pack - Sonic Advance + Sonic Pinball Party (USA) - 2005 - Sega - - - - - - - - - - - 2 Games in 1: Sonic Battle + ChuChu Rocket! (Euro) - 2006? - Sega - - - - - - - - - - 2 Games in 1: Sonic Battle + Sonic Pinball Party (Euro) - 2005 - Sega - - - - - - - - - - - 2 Games in 1: Sonic Pinball Party + Columns Crown (Euro) - 2006 - Sega - - - - - - - - - - - 2 in 1 Game Pack: Spider-Man & Spider-Man 2 (Euro) - 2005 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Spider-Man + Spider-Man 2 (USA) - 2005 - Activision - - - - - - - - - - - 2 in 1 Game Pack: Spider-Man - Mysterio's Menace + X2 - Wolverine's Revenge (Euro, USA) - 200? - Activision - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Jimmy Neutron Boy Genius (Euro) - 2005 - THQ - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Nicktoons - Freeze Frame Frenzy (USA) - 200? - THQ - - - - - - - - - - 2 Games in 1 Double Pack: SpongeBob SquarePants - Battle for Bikini Bottom + The Fairly OddParents! - Breakin' da Rules (USA) - 2005 - THQ - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (Euro) - 2004 - THQ - - - - - - - - - - 2 Games in 1 Double Pack: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (USA) - 2005 - THQ - - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro) - 200? - THQ - - - - - - - - - 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro, Alt) - 200? - THQ - - - - - - - - - 2 Games in 1: The SpongeBob SquarePants Movie + SpongeBob SquarePants and Friends in Freeze Frame Frenzy (Euro) - 2005 - THQ - - - - - - - - - - - Spyro - Season of Ice + Crash Bandicoot 2 - N-Tranced (Euro) - 2005 - Vivendi Universal - - - - - - - - - - - Spyro 2 - Season of Flame + Crash Nitro Kart (Euro) - 2005 - Vivendi Universal - - - - - - - - - - - Spyro - Fusion + Crash Bandicoot - Fusion (Euro) - 2005 - Vivendi Universal - - - - - - - - - - - Spyro - Season of Ice + Crash Bandicoot - The Huge Adventure (USA) - 2005? - Sierra Entertainment - - - - - - - - - - - Spyro Orange - The Cortex Conspiracy + Crash Bandicoot Purple - Ripto's Rampage (USA) - 2005? - Sierra Entertainment - - - - - - - - - - - - Spyro Superpack: Spyro - Season of Ice + Spyro - Season of Flame (USA) - 2005? - Vivendi Universal - - - - - - - - - - - Teenage Mutant Ninja Turtles Double Pack (Euro) - 2006 - Konami - - - - - - - - - - - Teenage Mutant Ninja Turtles Double Pack (USA) - 2006 - Konami - - - - - - - - - - - 2 Jeux en 1: Titeuf - Ze Gagmachine + Titeuf Méga Compet (Fra) - 2005 - Atari - - - - - - - - - - 2 in 1 Game Pack: Tony Hawk's Underground + Kelly Slater's Pro Surfer (Euro, USA) - 2006 - Activision - - - - - - - - - - 2 in 1: V-Rally 3 + Stuntman (Euro) - 2005 - Atari - - - - - - - - - - Winnie the Pooh's Rumbly Tumbly Adventure & Rayman 3 (Euro) - 2006 - Ubisoft - - - - - - - - - - - Yu-Gi-Oh! Double Pack (Euro) - 2006 - Konami - - - - - - - - - - - Yu-Gi-Oh! Double Pack (USA) - 2006 - Konami - - - - - - - - - - - Yu-Gi-Oh! Double Pack 2 (USA) - 2006 - Konami - - - - - - - - - - - Ignition Collection: Volume 1- 3 Games in 1: Animal Snap + World Tennis Stars + Super Dropzone (Euro) - 2007? - Ignition Entertainment - - - - - - - - - 3 Games in 1: Rugrats - I Gotta Go Party + SpongeBob SquarePants - SuperSponge + Tak and the Power of Juju (Euro) - 200? - THQ - - - - - - - - - - - 4 Games on One Game Pak (Nicktoons) (USA) - 2007 - THQ - - - - - - - - - - - 4 Games on One Game Pak (Racing) (USA) - 2007 - THQ - - - - - - - - - - - Twin Series 1 - Mezase Debut! - Fashion Designer Monogatari + Kawaii Pet Game Gallery 2 (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 2 - Oshare Princess 4 + Renai Uranai Daisakusen! + Renai Party Game - Sweet Heart (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 3 - Konchuu Monster - Ouja Ketteisen + Super Chinese Labyrinth (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 4 - Hamu Hamu Monster EX - Hamster Monogatari RPG + Fantasy Puzzle - Hamster Monogatari - Mahou no Meikyuu 1.2.3 (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 5 - Mahou no Kuni no Cake-ya-san Monogatari + Wanwan Meitantei EX (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 6 - Wannyan Idol Gakuen + Koinu to Issho Special (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - Twin Series 7 - Twin Puzzle - Kisekae Wanko EX + Nyaa to Chuu no Rainbow Magic 2 (Jpn) - 2004 - Culture Brain - - - - - - - - - - - - - - - 007 - Everything or Nothing (Jpn) 2003 @@ -4102,15 +41,18 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - - 007 - Everything or Nothing (Euro, USA) + + 007 - NightFire (Euro, USA) 2003 Electronic Arts - + + + + - + @@ -4408,6 +350,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Ace Lightning (Euro) + 2002 + BBC Worldwide + + + + + + + + + + + + Acrobat Kid (Jpn) 2002 @@ -4427,10 +385,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Action Man - Robot Atak (Euro) 2004 Atari - + + + - + @@ -4482,11 +442,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Advance Guardian Heroes (Euro) 2004 Sega - + + + + - + @@ -4534,6 +497,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Advance Wars (Euro) + 2001 + Nintendo + + + + + + + + + + + + Advance Wars (USA, Rev. 1) 2001 @@ -4564,11 +543,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Advance Wars 2 - Black Hole Rising (Euro) 2003 Nintendo - + + + + - + + + + + + + Advance Wars 2 - Black Hole Rising (USA, Aus) + 2003 + Nintendo + + + + + + + + @@ -4727,8 +725,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ITE Media + + - + @@ -4761,11 +761,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b L'Aigle de Guerre (Fra) 2001 Nintendo - + + + + + + + - + @@ -4834,9 +840,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney Interactive + + + - + @@ -5041,11 +1050,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's American Dragon Jake Long - Rise of the Huntsclan! (Euro, USA) 2006 Buena Vista Games - + + + + - + @@ -5407,10 +1419,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Astérix & Obélix - Bash Them All! (Euro) 2002 Infogrames - + + + - + @@ -5419,11 +1433,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Astérix & Obélix XXL (Euro) 2004 Atari - + + + + - + @@ -5508,10 +1525,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Atlantis - The Lost Empire (Euro, USA) 2001 THQ - + + + - + @@ -5941,11 +1960,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Baldur's Gate - Dark Alliance (Euro) 2003 DSI Games - + + + + - + @@ -5967,11 +1989,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Banjo-Pilot (Euro) 2005 THQ - + + + + - + @@ -6005,11 +2030,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Banjo-Kazooie - Grunty's Revenge (Euro) 2003 THQ - + + + + - + @@ -6304,10 +2332,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Batman - Vengeance (Euro) 2001 Ubi Soft - + + + - + @@ -6330,9 +2360,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Electronic Arts + + + - + @@ -6658,9 +2691,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Atari + + + - + @@ -6765,6 +2801,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bionicle - Matoran Adventures (Euro, USA) + 2002 + Electronic Arts + + + + + + + + + + + + Bionicle - Maze of Shadows (Euro, Rev. 1) 2005 @@ -6804,6 +2856,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bionicle Heroes (Euro) + 2006 + Amaze Entertainment + + + + + + + + + + + + Bionicle Heroes (USA) 2006 @@ -6817,6 +2885,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + bit Generations - Boundish (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + bit Generations - Coloris (Jpn) 2006 @@ -6847,6 +2934,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + bit Generations - Digidrive (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + bit Generations - Dotstream (Jpn) 2006 @@ -6862,6 +2968,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + bit Generations - Orbital (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + bit Generations - Soundvoyager (Jpn) 2006 @@ -7089,17 +3214,16 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + - - - + + + - - + - + @@ -7109,7 +3233,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Konami - + @@ -7122,7 +3246,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + @@ -7135,7 +3259,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + @@ -7148,7 +3272,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami - + @@ -7208,9 +3332,16 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + + + + + + - + @@ -7346,11 +3477,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Bomberman Tournament (Euro, USA) 2001 Activision - + + + + + + + - + @@ -7447,11 +3584,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Boulder Dash EX (Euro) 2002 First Star Software - + + + + - + @@ -7550,11 +3690,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Bratz - Forever Diamondz (Euro) 2006 THQ - + + + + - + @@ -7648,9 +3791,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Bratz - The Movie (Euro) 2007 THQ + + + - + @@ -7830,6 +3976,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Broken Sword - The Shadow of the Templars (Euro) + 2002 + BAM! Entertainment + + + + + + + + + + + + Broken Sword - The Shadow of the Templars (USA) 2002 @@ -7859,11 +4021,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Brother Bear (Euro) 2003 THQ - + + + + - + @@ -7907,6 +4072,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bubble Bobble - Old & New (Euro) + 2002 + Empire Interactive + + + + + + + + + + + + Bubble Bobble - Old & New (Jpn) 2002 @@ -7977,6 +4158,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Bura Bura Donkey (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Butt-Ugly Martians - B.K.M. Battles (Euro) 2002 @@ -8075,6 +4275,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Calciobit (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + Camp Lazlo - Leaky Lake Games (Euro) 2006 @@ -8221,6 +4439,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Carrera Power Slide (Euro) + 2002 + Stadlbauer + + + + + + + + + + + + Cars (Euro, Spanish / Portuguese) 2006 @@ -8360,10 +4594,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Casper (Euro) 2002 Microids - + + + - + @@ -8384,11 +4620,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Castlevania (Euro) 2001 Konami - + + + + + + + - + @@ -8412,11 +4654,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Castlevania - Aria of Sorrow (Euro) 2003 Konami - + + + + - + @@ -8466,11 +4711,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Castlevania - Harmony of Dissonance (Euro) 2002 Konami - + + + + + + + - + @@ -8613,6 +4864,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Charlotte's Web (USA) + 2006 + Sega + + + + + + + + + + + + The Cheetah Girls (USA) 2006 @@ -8696,11 +4963,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2005 Buena Vista Games - + + + + - + @@ -8985,11 +5255,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Classic NES Series - Bomberman (Euro, USA) 2004 Nintendo - + + + + - + @@ -9000,9 +5273,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -9024,11 +5300,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Classic NES Series - Donkey Kong (Euro, USA) 2004 Nintendo - + + + + - + @@ -9072,15 +5351,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Classic NES Series - The Legend of Zelda (Euro, USA) + 2004 + Nintendo + + + + + + + + + + + + Classic NES Series - Metroid (Euro, USA) 2004 Nintendo - + + + + - + @@ -9089,11 +5387,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Classic NES Series - Pac-Man (Euro, USA) 2004 Nintendo - + + + + - + + + + + + + Classic NES Series - Super Mario Bros. (Euro, USA) + 2004 + Nintendo + + + + + + + + @@ -9111,6 +5428,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Classic NES Series - Zelda II - The Adventure of Link (Euro, USA) + 2004 + Nintendo + + + + + + + + + + + + Cocoto - Kart Racer (Euro) 2005 @@ -9268,6 +5601,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Contra Advance - The Alien Wars EX (USA) + 2002 + Konami + + + + + + + + + + Contra Advance (Prototype) 2003 @@ -9434,11 +5781,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Crash Bandicoot XS (Euro) 2002 Universal Interactive - + + + + - + @@ -9868,13 +6218,28 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Curious George (Euro) + 2006 + Namco + + + + + + + + + + + Curious George (USA) 2006 Namco - + @@ -10804,11 +7169,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney Princess - Royal Adventure (Euro) 2006 Buena Vista Games - + + + + - + @@ -11052,9 +7420,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney Interactive + + + - + @@ -11397,11 +7768,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Donkey Kong Country (Euro) 2003 Nintendo - + + + + - + @@ -11423,11 +7797,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Donkey Kong Country 2 (Euro) 2004 Nintendo - + + + + - + @@ -11436,7 +7813,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Donkey Kong Country 2 (USA, Aus) 2004 Nintendo - + @@ -11471,14 +7848,47 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Doom (Euro, USA) + 2001 + Activision + + + + + + + + + + + + + + Doom II (Euro) + 2002 + Activision + + + + + + + + + Doom II (USA) 2002 Activision + + + + - + @@ -11683,6 +8093,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Dr. Muto (Euro) + 2002 + Midway + + + + + + + + + + + + Dr. Seuss' The Cat in the Hat (USA) 2003 @@ -11818,11 +8244,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - Supersonic Warriors (Euro) 2004 Bandai - + + + + - + @@ -11871,11 +8300,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - Taiketsu (Euro) 2003 Atari - + + + + - + @@ -11897,11 +8329,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - The Legacy of Goku (Euro) 2002 Infogrames - + + + + - + + + + + + + Dragon Ball Z - The Legacy of Goku (USA) + 2002 + Infogrames + + + + + + + + @@ -11910,11 +8361,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dragon Ball Z - The Legacy of Goku II (Euro) 2003 Atari - + + + + - + @@ -12050,7 +8504,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo - + @@ -12113,11 +8567,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Driver 2 Advance (Euro) 2002 Atari - + + + + - + @@ -12173,6 +8630,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Droopy's Tennis Open (Euro) + 2002 + L.S.P. + + + + + + + + + + Droopy's Tennis Open (Euro, Prototype) 2002 @@ -12276,11 +8747,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Duel Masters - Sempai Legends (Euro) 2004 Atari - + + + + - + @@ -12350,6 +8824,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Duke Nukem Advance (Euro) + 2002 + Take-Two Interactive + + + + + + + + + + + + Duke Nukem Advance (USA) 2002 @@ -12378,11 +8868,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Dungeons & Dragons - Eye of the Beholder (Euro) 2002 Infogrames - + + + + + + + - + @@ -12430,9 +8926,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b E.T. - The Extra-Terrestrial (Euro) 2001 Ubi Soft + + + - + @@ -12465,10 +8964,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Earthworm Jim 2 (Euro) 2002 Majesco - + + + - + @@ -12730,11 +9231,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Eragon (Euro) 2006 Vivendi Universal - + + + + - + @@ -12823,11 +9327,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ESPN International Winter Sports (Euro) 2002 Konami - + + + + - + @@ -12849,11 +9356,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ESPN Winter X-Games Snowboarding 2 (Euro) 2002 Konami - + + + + - + @@ -12986,10 +9496,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Extreme Ghostbusters - Code Ecto-1 (Euro) 2002 L.S.P. - + + + - + @@ -13045,6 +9557,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Eyeshield 21 Devilbats Devildays (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + EZ-Talk - Shokyuu Hen 1 (Jpn) 2001 @@ -13177,6 +9708,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + F-Zero - Maximum Velocity (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + + + + F-Zero - GP Legend (Euro) 2004 @@ -14012,9 +10562,29 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + + - + + + + + + + FIFA 07 (Euro, USA) + 2006 + Electronic Arts + + + + + + + + + @@ -14024,11 +10594,31 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2002 Electronic Arts - + + + + - + + + + + + + FIFA 2004 (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + @@ -14038,11 +10628,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Electronic Arts - + + + + - + @@ -14075,11 +10668,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b FILA Decathlon (Euro) 2002 THQ - + + + + - + @@ -14090,9 +10686,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Square Enix + + + + - + + + + + + + Final Fantasy I & II - Dawn of Souls (USA, Aus) + 2004 + Square Enix + + + + + + + + + @@ -14118,9 +10735,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + + - + @@ -14196,6 +10817,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Final Fantasy Tactics Advance (USA, Aus) + 2003 + Square Enix + + + + + + + + + + + + Final Fantasy V Advance (Euro) 2007 @@ -14278,6 +10915,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Final Fight One (Euro) + 2001 + Ubi Soft + + + + + + + + + + + + Final Fight One (Jpn) 2001 @@ -14325,10 +10978,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Finding Nemo (Euro, USA) 2003 THQ - + + + - + @@ -14422,9 +11077,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Finding Nemo - The Continuing Adventures (Euro, English / Italian / Spanish / Danish / Swedish) 2004 THQ + + + - + @@ -14451,6 +11109,23 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Fire Emblem (Euro, English / French / German) + 2004 + Nintendo + + + + + + + + + + + + + Fire Emblem (Euro, English / Italian / Spanish) 2004 @@ -14536,11 +11211,15 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Fire Emblem - The Sacred Stones (Euro) 2005 Nintendo - + + + + + - + @@ -14725,6 +11404,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Fortress (Euro, USA) + 2001 + Majesco + + + + + + + + + + Foster's Home for Imaginary Friends (Euro) 2006 @@ -14769,9 +11462,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Game Factory + + + - + @@ -15341,11 +12037,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Game & Watch Gallery Advance (Euro) 2002 Nintendo - + + + + + + + - + @@ -15528,6 +12230,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Game Boy Advance Video - Dragon Ball GT - Volume 1 (USA) + 2004 + Majesco + + + + + + + + + + Game Boy Advance Video - Nicktoons - Volume 3 (USA) 2005 @@ -15664,6 +12380,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Game Boy Advance Video - Sonic X - Volume 1 (USA) + 2004 + Majesco + + + + + + + + + + Game Boy Advance Video - SpongeBob SquarePants - Volume 1 (USA, Rev. 1) 2004 @@ -15866,9 +12596,11 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Game Factory + + - + @@ -15879,8 +12611,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Game Factory + + - + @@ -16164,6 +12898,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Ghost Rider (Euro, USA) + 2006 + Take-Two Interactive + + + + + + + + + + + + Ghost Trap (Jpn) 2002 @@ -16183,11 +12933,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Global Star - Sudoku Fever (Euro) 2006 Global Star Software - + + + + - + @@ -16218,14 +12971,46 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Go! Go! Beckham! - Adventure on Soccer Island (Euro) + 2002 + Rage Software + + + + + + + + + + + + Godzilla - Domination! (Euro) 2002 Infogrames - + + + - + + + + + + + Godzilla - Domination! (USA) + 2002 + Infogrames + + + + + + @@ -16259,14 +13044,48 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Golden Nugget Casino (Euro, USA) + 2004 + Majesco + + + + + + + + + + + + Golden Sun (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + Golden Sun (Fra) 2002 Nintendo + + + + - + @@ -16275,6 +13094,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Golden Sun (Ger) 2002 Nintendo + @@ -16295,6 +13115,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Golden Sun (Spa) + 2002 + Nintendo + + + + + + + + + + + + + + Golden Sun - The Lost Age (Euro, USA) + 2003 + Nintendo + + + + + + + + + + + + Golden Sun - Die Vergessene Epoche (Ger) 2003 @@ -16311,10 +13163,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Golden Sun - L'Age Perdu (Fra) 2003 Nintendo + + + + - + @@ -16716,6 +13572,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Gunstar Future Heroes (Euro) + 2005 + Sega + + + + + + + + + + + + Gunstar Super Heroes (Jpn) 2005 @@ -17035,9 +13907,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -17216,7 +14091,55 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + Harry Potter and the Chamber of Secrets (Euro, USA) + 2002 + Electronic Arts + + + + + + + + + + + + + + Harry Potter and the Prisoner of Azkaban (Euro, USA) + 2004 + Electronic Arts + + + + + + + + + + + + + + Harry Potter and the Philosopher's Stone (Euro) ~ Harry Potter and the Sorcerer's Stone (USA) + 2001 + Electronic Arts + + + + + + + + + + + + + Harry Potter to Kenja no Ishi (Jpn) 2001 Electronic Arts @@ -17250,11 +14173,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Harry Potter - Quidditch World Cup (Euro, USA) 2003 Electronic Arts - + + + + - + @@ -17327,6 +14253,41 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Harvest Moon - Friends of Mineral Town (Euro) + 2003 + Ubi Soft + + + + + + + + + + + + + + + + Harvest Moon - Friends of Mineral Town (Ger) + 2003 + Ubi Soft + + + + + + + + + + + + + Harvest Moon - Friends of Mineral Town (USA) 2003 @@ -17484,6 +14445,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Hey Arnold! - The Movie (Euro) + 2002 + THQ + + + + + + + + + + + + Hey Arnold! - The Movie (USA) + 2002 + THQ + + + + + + + + + + Hey Arnold! - The Movie (Euro, Prototype) 2002 @@ -17719,6 +14708,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Hobbit (Euro) + 2003 + Sierra Entertainment + + + + + + + + + + + + The Hobbit (USA) 2003 @@ -17751,10 +14756,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Home on the Range (Euro) 2004 Disney Interactive - + + + - + @@ -18079,8 +15086,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b ITE Media + + - + @@ -18196,11 +15205,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Ice Age 2 - The Meltdown (Euro) 2006 Sierra Entertainment - + + + + - + @@ -18211,9 +15223,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Sierra Entertainment + + + - + @@ -18235,11 +15250,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Incredible Hulk (Euro) 2003 Vivendi Universal - + + + + - + @@ -18261,10 +15279,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Incredibles (Euro, USA) 2004 THQ - + + + - + @@ -18317,10 +15337,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Incredibles - Rise of the Underminer (Euro, USA) 2005 THQ - + + + - + @@ -18427,11 +15449,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b International Superstar Soccer (Euro) 2001 Konami - + + + + - + @@ -18442,9 +15467,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Konami + + + - + @@ -18567,6 +15595,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + It's Mr. Pants (Euro, USA) + 2005 + THQ + + + + + + + + + + + + J.League Pocket (Jpn) 2001 @@ -18671,10 +15715,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b James Pond - Codename RoboCod (Euro) 2005 Play It - + + + - + @@ -18717,6 +15763,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Jet Set Radio (Euro) + 2004 + Sega + + + + + + + + + + + + JGTO Kounin Golf Master - Japan Golf Tour Game (Jpn) 2001 @@ -18886,10 +15948,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's The Jungle Book 2 (Euro) 2003 Ubi Soft - + + + + - + @@ -19099,11 +16164,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Justice League Heroes - The Flash (Euro) 2006 Warner Bros. Games - + + + + - + @@ -19605,6 +16673,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Kill.Switch (USA) + 2004 + DSI Games + + + + + + + + + + + + Killer 3D Pool (Euro) 2005 @@ -19633,6 +16717,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Kim Possible (Euro, Rev. 1) 2003 THQ + @@ -19645,10 +16730,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Kim Possible (Euro) 2003 THQ - + + + + - + @@ -19681,6 +16769,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Disney's Kim Possible 2 - Drakken's Demise (Euro) + 2006 + Buena Vista Games + + + + + + + + + + + + + + Disney's Kim Possible 2 - Drakken's Demise (USA) + 2004 + Disney Interactive + + + + + + + + + + + + Disney's Kim Possible III - Team Possible (USA) 2005 @@ -19761,14 +16881,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The King of Fighters EX - NeoBlood (USA) + 2002 + Sammy + + + + + + + + + + + + The King of Fighters EX2 - Howling Blood (Euro) 2003 Acclaim + + + + - + @@ -19807,9 +16947,13 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Square Enix + + + + - + @@ -19988,11 +17132,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Klonoa - Empire of Dreams (Euro) 2001 Namco - + + + + - + @@ -20410,7 +17557,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -20622,6 +17769,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Lady Sia (Euro) + 2001 + TDK Mediactive + + + + + + + + + + + + Lady Sia (USA) 2001 @@ -20711,6 +17874,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Lara Croft Tomb Raider - The Prophecy (Euro) + 2002 + Ubi Soft + + + + + + + + + + Lara Croft Tomb Raider - The Prophecy (Jpn) 2002 @@ -20827,6 +18004,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Legend of Zelda - A Link to the Past & Four Swords (Euro) + 2003 + Nintendo + + + + + + + + + + + + The Legend of Zelda - A Link to the Past & Four Swords (USA, Aus) 2002 @@ -20840,6 +18033,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Legend of Zelda - The Minish Cap (Euro) + 2004 + Nintendo + + + + + + + + + + + + The Legend of Zelda - The Minish Cap (USA, Demo Kiosk) 2005 @@ -20959,6 +18168,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + LEGO Island 2 - The Brickster's Revenge (Euro) + 2001 + Electronic Arts + + + + + + + + + + + + + + + LEGO Island 2 - The Brickster's Revenge (USA) 2001 @@ -21199,10 +18427,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney's Lilo & Stitch (Euro, Rev. 1) 2002 Ubi Soft - + + + - + @@ -21231,6 +18461,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Disney's Lilo & Stitch 2 (Euro) + 2004 + Disney Interactive + + + + + + + + + + + + Disney's Lilo & Stitch 2 - Hämsterviel Havoc (USA) 2004 @@ -21276,11 +18522,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Disney The Lion King (Euro) 2003 THQ - + + + + - + @@ -21432,6 +18681,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Looney Tunes - Back in Action (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + + + + Looney Tunes Double Pack (Euro) 2005 @@ -21537,9 +18802,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Electronic Arts + + + - + @@ -21548,11 +18816,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Lord of the Rings - The Third Age (Euro, USA) 2004 Electronic Arts - + + + + - + @@ -21561,11 +18832,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Lord of the Rings - The Two Towers (Euro, USA) 2002 Electronic Arts - + + + + - + + + + + + + The Lost Vikings (Euro) + 2003 + Blizzard Entertainment + + + + + + + + @@ -21604,8 +18894,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Infogrames + + - + @@ -21692,10 +18984,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Madagascar (Euro, French / German / Portuguese) 2005 Activision + + + + - + @@ -21970,9 +19266,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Capcom + + + - + @@ -22310,11 +19609,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mario & Luigi - Superstar Saga (Euro) 2003 Nintendo - + + + + - + @@ -22438,9 +19740,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -22460,15 +19765,34 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mario Kart - Super Circuit (Euro) + 2001 + Nintendo + + + + + + + + + + + + Mario Kart - Super Circuit (USA) 2001 Nintendo + + + - + @@ -22535,9 +19859,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -22555,6 +19882,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mario Tennis Advance (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Mario Tennis - Power Tour (USA, Aus) 2005 @@ -22625,11 +19971,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Marvel - Ultimate Alliance (Euro) 2006 Activision - + + + + - + @@ -22782,13 +20131,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + Max Payne Advance (Euro) + 2004 + Rockstar Games + + + + + + + + + + + + + Max Payne (USA) 2003 @@ -22870,10 +20236,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Medabots - Metabee Version (Euro) 2003 Natsume + + + + - + @@ -22907,10 +20277,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Medabots - Rokusho Version (Euro) 2003 Natsume + + + + - + @@ -22990,6 +20364,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Medal of Honor - Infiltrator (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + + + + Medal of Honor - Underground (Ubi Soft) (Euro) 2002 @@ -23156,6 +20546,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mega Man & Bass (Euro) + 2003 + Capcom + + + + + + + + + + + + Mega Man & Bass (USA) 2003 @@ -23173,11 +20579,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Battle Chip Challenge (Euro) 2004 Capcom - + + + + - + @@ -23199,11 +20608,17 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Battle Network (Euro) 2001 Ubi Soft - + + + + + + + - + @@ -23260,6 +20675,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mega Man Battle Network 3 Blue (USA) + 2003 + Capcom + + + + + + + + + + + + Mega Man Battle Network 3 White (Euro) 2003 @@ -23290,11 +20721,15 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Battle Network 4 Blue Moon (Euro) 2004 Capcom - + + + + + - + @@ -23403,6 +20838,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mega Man Battle Network 6 Cybeast Falzar (USA) + 2006 + Capcom + + + + + + + + + + + + + + Mega Man Battle Network 6 Cybeast Gregar (Euro) 2006 @@ -23446,11 +20899,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mega Man Zero 2 (Euro) 2003 Capcom - + + + + - + @@ -23580,8 +21036,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Ubi Soft + + - + @@ -23677,11 +21135,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Metal Slug Advance (Euro) 2004 Ignition Entertainment - + + + + - + @@ -23768,6 +21229,80 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Metroid - Zero Mission (USA) + 2004 + Nintendo + + + + + + + + + + + + + + + + + Metroid - Zero Mission (USA, Prototype) + 2004 + Nintendo + + + + + + + + + + Metroid Fusion (Euro) + 2002 + Nintendo + + + + + + + + + + + + + + + + + Metroid Fusion (Euro, Prototype 20020911) + 2002 + Nintendo + + + + + + + + + + Metroid Fusion (Euro, Prototype 20020916) + 2002 + Nintendo + + + + + + + + Metroid Fusion (Jpn) 2003 @@ -24285,11 +21820,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Mission Impossible - Operation Surma (Euro) 2003 Atari - + + + + - + @@ -24331,6 +21869,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + MLB SlugFest 20-04 (USA) + 2003 + Midway + + + + + + + + + + Mobile Pro Yakyuu - Kantoku no Saihai (Jpn) 2001 @@ -24676,6 +22228,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Monster Trucks (Euro, USA) + 2004 + Majesco + + + + + + + + + + Monster Trucks Mayhem (Euro) 2006 @@ -24728,10 +22294,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Monsters, Inc. (Euro, USA) 2001 THQ - + + + - + @@ -24762,9 +22330,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Die Monster AG (Ger) 2002 THQ + + + - + @@ -24899,6 +22470,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Mother 3 (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + Moto GP (Euro, Prototype) 2002 @@ -25187,6 +22776,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Jim Henson's Muppets - On with the Show! (Euro, USA) + 2003 + TDK Mediactive + + + + + + + + + + Muppet Pinball Mayhem (Euro) 2002 @@ -25387,10 +22990,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Namco Museum (Euro) 2001 Namco - + + + - + @@ -25675,11 +23280,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Need for Speed - Porsche Unleashed (Euro) 2004 Zoo Digital Publishing - + + + + - + @@ -25701,11 +23309,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Need for Speed - Underground (Euro, USA) 2003 Electronic Arts - + + + + - + @@ -25723,6 +23334,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Need for Speed Carbon - Own the City (Euro, USA) + 2006 + Electronic Arts + + + + + + + + + + + + Neoromance Game - Harukanaru Toki no Naka de (Jpn, Rev. 1) 2002 @@ -25944,6 +23571,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + No No No Puzzle Chailien (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + + No Rules - Get Phat (Euro, USA) + 2001 + TDK Mediactive + + + + + + + + + + Nobunaga Ibun (Jpn) 2002 @@ -25978,10 +23637,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Noddy - A Day in Toyland (Euro) 2006 The Game Factory - + + + - + @@ -26431,6 +24092,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Ougon no Taiyou - Hirakareshi Fuuin (Jpn) + 2001 + Nintendo + + + + + + + + + + + + + + Ougon no Taiyou - Ushinawareshi Toki (Jpn) 2002 @@ -26450,11 +24129,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Over the Hedge (Euro) 2006 Activision - + + + + - + @@ -26605,6 +24287,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Pac-Man Collection (Euro) + 2001 + Infogrames + + + + + + + + + + Pac-Man Collection (Jpn) 2002 @@ -26777,8 +24473,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Ubi Soft + + - + @@ -26811,10 +24509,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Peter Pan - The Motion Picture Event (Euro) 2004 Atari - + + + - + @@ -26957,11 +24657,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Phantasy Star Collection (Euro) 2003 Sega - + + + + - + @@ -27160,6 +24863,21 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Pinky and the Brain - The Masterplan (Euro) + 2002 + SWING! Entertainment + + + + + + + + + + + Pinky Monkey Town (Jpn) 2001 @@ -27426,7 +25144,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -27463,6 +25181,24 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Pocket Monsters - Fushigi no Dungeon Aka no Kyuujotai (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Pocket Monsters - Leaf Green (Jpn) 2004 @@ -27486,7 +25222,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -27501,9 +25237,33 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + + + + - + + + + + + + Pocket Music (Euro) + 2002 + Rage Software + + + + + + + + + + + @@ -27552,11 +25312,16 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Pokémon - Emerald Version (Euro, USA) 2004 Nintendo - + - + + + + + + - + @@ -27566,7 +25331,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Nintendo - + @@ -27578,7 +25343,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Nintendo - + @@ -27590,22 +25355,59 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2004 Nintendo - + + + Pokémon - Edición Esmeralda (Spa) + 2004 + Nintendo + + + + + + + + + + + + + + Pokémon - FireRed Version (Euro, USA, Rev. 1) 2004 Nintendo - + + + + - + + + + + + + Pokémon - FireRed Version (USA) + 2004 + Nintendo + + + + + + + + @@ -27662,23 +25464,26 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Pokémon - LeafGreen Version (Euro, Rev. 1) 2004 Nintendo - + + + + - + - - Pokémon - Edición Verde Hoja (Spa) + + Pokémon - Version Vert Feuille (Fra) 2004 Nintendo - + @@ -27707,14 +25512,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - - Pokémon - Version Vert Feuille (Fra) + + Pokémon - Edición Verde Hoja (Spa) 2004 Nintendo - + + + + + + + Pokémon - LeafGreen Version (USA) + 2004 + Nintendo + + + + + + + + @@ -27725,20 +25546,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo - + + + Pokémon - Ruby Version (Euro, Rev. 1) + 2003 + Nintendo + + + + + + + + + + + + + + Pokémon - Ruby Version (USA) 2003 Nintendo - + @@ -27750,7 +25589,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27762,7 +25601,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27774,7 +25613,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27786,19 +25625,37 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + + + Pokémon - Edición Rubí (Spa) + 2003 + Nintendo + + + + + + + + + + + + + + Pokémon - Version Rubis (Fra, Rev. 1) 2003 Nintendo - + @@ -27810,7 +25667,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27822,7 +25679,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27834,7 +25691,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27847,20 +25704,38 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo - + + + Pokémon - Sapphire Version (Euro, Rev. 1) + 2003 + Nintendo + + + + + + + + + + + + + + Pokémon - Sapphire Version (USA) 2003 Nintendo - + @@ -27872,7 +25747,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27884,7 +25759,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27896,7 +25771,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27908,7 +25783,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27920,7 +25795,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27932,7 +25807,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27944,7 +25819,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27956,7 +25831,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b 2003 Nintendo - + @@ -27967,11 +25842,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Pokémon Mystery Dungeon - Red Rescue Team (Euro) 2006 Nintendo - + + + + - + @@ -28006,9 +25884,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Nintendo + + + - + @@ -28807,11 +26688,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Puyo Pop (Euro) 2002 Sega - + + + + - + @@ -29119,6 +27003,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Rayman - Raving Rabbids (Euro) + 2006 + Ubisoft + + + + + + + + + + + + Rayman - Raving Rabbids (USA) 2006 @@ -29407,10 +27307,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b The Revenge of Shinobi (Euro) 2003 Sega - + + + - + @@ -29442,14 +27344,36 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Rhythm Tengoku (Jpn) + 2006 + Nintendo + + + + + + + + + + + + + + + The Ripping Friends (Euro, USA) 2002 THQ - + + + + - + @@ -29614,6 +27538,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Robot Wars - Extreme Destruction (Euro) + 2002 + BBC Multimedia + + + + + + + + + + + + Robotech - The Macross Saga (Euro, USA) 2002 @@ -29631,11 +27571,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Robots (Euro) 2005 Sierra Entertainment - + + + + - + @@ -29745,10 +27688,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Rocket Power - Dream Scheme (Euro, USA) 2001 THQ - + + + - + @@ -29844,7 +27789,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + @@ -30080,9 +28025,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b THQ + + + - + @@ -30487,6 +28435,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Scooby-Doo and the Cyber Chase (Euro, English / French / German) + 2001 + THQ + + + + + + + + + + Scooby-Doo! - Mystery Mayhem (Euro) 2003 @@ -30596,6 +28558,19 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Scrabble Scramble! (Euro) + 2005 + Zoo Digital Publishing + + + + + + + + + Scrabble Scramble! (Euro, English / French / German / Italian / Dutch / Spanish) 2005 @@ -30607,6 +28582,25 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Screw Breaker - Goushin DoriRureRo (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Scurge - Hive (Euro) 2006 @@ -30830,6 +28824,26 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Sennen Kazoku (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + + Sentouin Yamada Hajime (Jpn) 2004 @@ -31167,7 +29181,7 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + Shin Bokura no Taiyou - Gyakushuu no Sabata (Jpn) 2005 Konami @@ -31175,13 +29189,29 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - + + + Shin Chan - Aventuras en Cineland (Spa) + 2005 + Atari + + + + + + + + + + + + Shin Chan contra los Muñecos de Shock Gahn (Spa) 2006 @@ -31434,11 +29464,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Shining Soul (Euro) 2003 Infogrames - + + + + - + @@ -31625,11 +29658,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Shrek - Super Slam (Euro) 2005 Activision - + + + + - + @@ -31654,9 +29690,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b TDK Mediactive + + + - + @@ -31665,11 +29704,30 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Shrek 2 (Euro, USA) 2004 Activision - + + + + - + + + + + + + Shrek 2 (Euro, French / German / Italian / Spanish / Swedish) + 2004 + Activision + + + + + + + + @@ -31729,11 +29787,14 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Sigma Star Saga (Euro, USA) 2005 Namco - + + + + - + @@ -31813,9 +29874,12 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b Zoo Digital Publishing + + + - + @@ -31946,6 +30010,53 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + The Sims - Bustin' Out (Euro, USA) + 2003 + Electronic Arts + + + + + + + + + + + + + + The Sims (Jpn) + 2004 + Electronic Arts + + + + + + + + + + + + + The Sims 2 (Euro, USA) + 2005 + Electronic Arts + + + + + + + + + + + + The Sims 2 - Pets (Euro, English / French / German / Italian / Spanish / Dutch) 2006 @@ -31971,21 +30082,6 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b - - The Sims (Jpn) - 2004 - Electronic Arts - - - - - - - - - - - Sister Princess - RePure (Jpn) 2003 @@ -32001,6 +30097,20 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Sitting Ducks (Euro) + 2003 + L.S.P. + + + + + + + + + + Sitting Ducks (USA) 2004 @@ -32152,8 +30262,10 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + - + @@ -32233,6 +30345,22 @@ Note: In the AGB-E05-XX and AGB-E06-XX pcbs, the chip name is hidden under the b + + Sonic Advance (Euro) + 2002 + Infogrames + + + + + + + + + + + + Sonic Advance (Jpn, Rev. 1) 2001 @@ -32297,11 +30425,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Sonic Advance 2 (Euro) 2003 Infogrames - + + + + - + @@ -32365,9 +30496,12 @@ The cart also contained a non-empty SRAM save which we currently include in the THQ + + + - + @@ -32445,11 +30579,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Sonic Pinball Party (Euro) 2003 Sega - + + + + - + @@ -32473,7 +30610,7 @@ The cart also contained a non-empty SRAM save which we currently include in the Sonic Pinball Party (USA) 2003 Sega - + @@ -32641,11 +30778,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Spider-Man (Euro, USA) 2002 Activision - + + + + - + @@ -32731,11 +30871,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Spider-Man 2 (Euro, USA) 2004 Activision - + + + + - + @@ -32941,11 +31084,14 @@ The cart also contained a non-empty SRAM save which we currently include in the SpongeBob SquarePants - Lights, Camera, Pants! (Euro) 2005 THQ - + + + + - + @@ -32987,6 +31133,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + SpongeBob SquarePants - SuperSponge (Euro, USA) + 2001 + THQ + + + + + + + + + + SpongeBob SquarePants and Friends - Battle for Volcano Island (Euro) 2007 @@ -33307,6 +31467,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Spyro Fusion (Euro) + 2004 + Vivendi Universal + + + + + + + + + + + + Spyro Orange - The Cortex Conspiracy (USA, Rev. A) 2004 @@ -33383,6 +31559,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Star Wars - Episode II - Attack of the Clones (Euro) + 2002 + THQ + + + + + + + + + + Star Wars - Episode II - Attack of the Clones (USA) 2002 @@ -33433,6 +31623,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Star Wars - Flight of the Falcon (USA) + 2003 + THQ + + + + + + + + + + Star Wars - Jedi Power Battles (Euro) 2002 @@ -33457,6 +31661,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Star Wars - The New Droid Army (Euro) + 2002 + THQ + + + + + + + + + + Star Wars - The New Droid Army (USA) 2002 @@ -33519,14 +31737,18 @@ The cart also contained a non-empty SRAM save which we currently include in the - - Starsky & Hutch (USA, Prototype) + + Starsky & Hutch (Euro) 2003 Empire Entertainment + + + + - - + + @@ -33544,6 +31766,18 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Starsky & Hutch (USA, Prototype) + 2003 + Empire Entertainment + + + + + + + + Steel Empire (Euro) 2005 @@ -33611,11 +31845,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Street Fighter Alpha 3 (Euro) 2002 Ubi Soft - + + + + - + @@ -34069,6 +32306,24 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Donkey Kong 3 (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Archer Maclean's Dropzone (Euro) 2003 @@ -34133,6 +32388,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Mario Advance (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + Super Mario Advance (USA, Demo Kiosk) 2001 @@ -34164,11 +32435,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Mario Advance 2 - Super Mario World (Euro) 2002 Nintendo - + + + + - + @@ -34201,6 +32475,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Mario Advance 3 - Yoshi's Island (Euro) + 2002 + Nintendo + + + + + + + + + + + + Super Mario Advance 3 - Yoshi's Island (USA) 2002 @@ -34278,11 +32568,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Mario Advance 4 - Super Mario Bros. 3 (Euro, Rev. 1) 2003 Nintendo - + + + + - + @@ -34300,6 +32593,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Super Mario Advance 4 - Super Mario Bros. 3 (USA, Aus, Rev. 1) + 2003 + Nintendo + + + + + + + + + + + + Super Mario Advance 4 - Super Mario Bros. 3 (USA) 2003 @@ -34317,11 +32626,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Mario Ball (Euro) 2004 Nintendo - + + + + - + @@ -34565,10 +32877,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Super Street Fighter II Turbo - Revival (Euro) 2001 Ubi Soft + + + + - + @@ -34625,6 +32941,23 @@ The cart also contained a non-empty SRAM save which we currently include in the + + + Superman Returns - Fortress of Solitude (Euro, USA) + 2006 + Electronic Arts + + + + + + + + + + + + Surf's Up (Euro, English / French / German / Italian / Spanish) 2007 @@ -34885,10 +33218,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tak and the Power of Juju (Euro, English / French / German) 2004 THQ + + + + - + @@ -34946,6 +33283,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tales of Phantasia (USA, Aus) + 2006 + Nintendo + + + + + + + + + + + + Tales of the World - Narikiri Dungeon 2 (Jpn) 2002 @@ -35010,11 +33363,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tang Tang (Euro) 2001 Take-Two Interactive - + + + + - + @@ -35153,6 +33509,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Teenage Mutant Ninja Turtles (Euro) + 2003 + Konami + + + + + + + + + + + + Teenage Mutant Ninja Turtles (USA) 2003 @@ -35170,11 +33542,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Teenage Mutant Ninja Turtles 2 - Battle Nexus (Euro) 2004 Konami - + + + + - + @@ -35196,11 +33571,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tekken Advance (Euro) 2002 Infogrames - + + + + - + @@ -35347,6 +33725,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Terminator 3 - Rise of the Machines (Euro) + 2003 + Atari + + + + + + + + + + Terminator 3 - Rise of the Machines (USA) 2003 @@ -35837,8 +34229,10 @@ The cart also contained a non-empty SRAM save which we currently include in the Ubi Soft + + - + @@ -35859,10 +34253,12 @@ The cart also contained a non-empty SRAM save which we currently include in the Tom and Jerry in Infurnal Escape (Euro) 2003 Ubi Soft - + + + - + @@ -35903,6 +34299,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tom Clancy's Rainbow Six - Rogue Spear (Euro) + 2002 + Ubi Soft + + + + + + + + + + + + Tom Clancy's Rainbow Six - Rogue Spear (USA) 2002 @@ -35932,11 +34344,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tom Clancy's Splinter Cell (Euro) 2003 Ubi Soft - + + + + - + @@ -35958,11 +34373,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tom Clancy's Splinter Cell - Pandora Tomorrow (Euro) 2004 Ubisoft - + + + + - + @@ -36045,6 +34463,54 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tony Hawk's Downhill Jam (Euro) + 2006 + Activision + + + + + + + + + + + + + + Tony Hawk's Downhill Jam (USA) + 2006 + Activision + + + + + + + + + + + + + + Tony Hawk's Pro Skater 2 (Euro, USA) + 2001 + Activision + + + + + + + + + + + + Tony Hawk's Pro Skater 2 (Fra) 2001 @@ -36073,11 +34539,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Tony Hawk's Pro Skater 3 (Euro, USA) 2002 Activision - + + + + - + @@ -36186,10 +34655,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Top Gear Rally (Euro) 2003 Kemco + + + + - + @@ -36246,6 +34719,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Top Gun - Firestorm Advance (Euro, USA) + 2002 + Titus + + + + + + + + + + Top Spin 2 (Euro) 2006 @@ -36439,6 +34926,24 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Welcome to The Tower SP (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Toyrobo Force (Jpn) 2001 @@ -36478,6 +34983,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Disney's Treasure Planet (USA) + 2002 + Disney Interactive + + + + + + + + + + Trick Star (Euro) 2006 @@ -36593,6 +35112,24 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Tsuukin Hitofude (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + Turbo Turtle Adventure (USA) 2002 @@ -36606,6 +35143,20 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Turok Evolution (Euro) + 2002 + Acclaim + + + + + + + + + + Turok Evolution (USA) 2002 @@ -36658,9 +35209,15 @@ The cart also contained a non-empty SRAM save which we currently include in the Kemco + + + + + + - + @@ -36897,8 +35454,11 @@ The cart also contained a non-empty SRAM save which we currently include in the Ultimate Spider-Man (Euro) 2005 Activision - + + + + @@ -37054,6 +35614,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + The Urbz - Sims in the City (Euro, USA) + 2004 + Electronic Arts + + + + + + + + + + + + The Urbz - Sims in the City (Jpn) 2004 @@ -37088,11 +35664,14 @@ The cart also contained a non-empty SRAM save which we currently include in the V-Rally 3 (Euro) 2002 Atari - + + + + - + @@ -37247,9 +35826,12 @@ The cart also contained a non-empty SRAM save which we currently include in the Disney Interactive + + + - + @@ -37258,11 +35840,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Wade Hixton's Counter Punch (Euro, USA) 2004 DSI Games - + + + + - + @@ -37482,6 +36067,23 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Wario Land 4 (Euro, USA) + 2001 + Nintendo + + + + + + + + + + + + + Wario Land Advance (Jpn) 2001 @@ -37497,6 +36099,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + WarioWare, Inc. - Minigame Mania (Euro) + 2003 + Nintendo + + + + + + + + + + + + WarioWare, Inc. - Mega Microgame$! (USA, Prototype) 2003 @@ -37515,9 +36133,31 @@ The cart also contained a non-empty SRAM save which we currently include in the Nintendo + + + - + + + + + + + WarioWare - Twisted! (USA) + 2005 + Nintendo + + + + + + + + + + + @@ -37759,6 +36399,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Wing Commander - Prophecy (Euro) + 2003 + Destination Software + + + + + + + + + + + + Wing Commander - Prophecy (USA) 2003 @@ -37932,6 +36588,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Wolfenstein 3D (Euro, USA) + 2002 + BAM! Entertainment + + + + + + + + + + + + Woody Woodpecker - Crazy Castle 5 (Jpn) 2002 @@ -37951,11 +36623,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Woody Woodpecker in Crazy Castle 5 (Euro) 2002 Kemco - + + + + - + @@ -38104,8 +36779,10 @@ The cart also contained a non-empty SRAM save which we currently include in the Ubi Soft + + - + @@ -38377,20 +37054,20 @@ The cart also contained a non-empty SRAM save which we currently include in the - + Yoshi - Topsy-Turvy (USA) 2005 Nintendo - + - + Yoshi no Banyuuinryoku (Jpn) 2004 Nintendo @@ -38398,22 +37075,28 @@ The cart also contained a non-empty SRAM save which we currently include in the - + - + Yoshi's Universal Gravitation (Euro) 2005 Nintendo - + - + + + + + + + - + @@ -38519,9 +37202,12 @@ The cart also contained a non-empty SRAM save which we currently include in the Konami + + + - + @@ -38558,11 +37244,15 @@ The cart also contained a non-empty SRAM save which we currently include in the Yu-Gi-Oh! - Reshef of Destruction (Euro) 2004 Konami - + + + + + - + @@ -38584,11 +37274,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Yu-Gi-Oh! - The Sacred Cards (Euro) 2004 Konami - + + + + - + @@ -38658,6 +37351,27 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Yu-Gi-Oh! Duel Monsters International - Worldwide Edition (Jpn, Rev. 1) + 2003 + Konami + + + + + + + + + + + + + + + + + Yu-Gi-Oh! Duel Monsters International 2 (Jpn) 2004 @@ -38673,6 +37387,25 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Yu-Gi-Oh! - The Eternal Duelist Soul (USA) + 2002 + Konami + + + + + + + + + + + + + + + Shonen Jump's Yu-Gi-Oh! - Ultimate Masters Edition - World Championship Tournament 2006 (Euro) 2006 @@ -38686,15 +37419,51 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Shonen Jump's Yu-Gi-Oh! - Ultimate Masters - World Championship Tournament 2006 (USA) + 2006 + Konami + + + + + + + + + + + + + Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (Euro) 2003 Konami - + + + + - + + + + + + + Yu-Gi-Oh! - Worldwide Edition - Stairway to the Destined Duel (USA) + 2003 + Konami + + + + + + + + @@ -38909,11 +37678,14 @@ The cart also contained a non-empty SRAM save which we currently include in the Zapper (Euro) 2003 Infogrames - + + + + - + @@ -39200,7 +37972,7 @@ The cart also contained a non-empty SRAM save which we currently include in the - + @@ -39214,13 +37986,29 @@ The cart also contained a non-empty SRAM save which we currently include in the - + + + Zone of the Enders - The Fist of Mars (Euro) + 2002 + Konami + + + + + + + + + + + + Zone of the Enders - The Fist of Mars (USA) 2002 @@ -39274,6 +38062,22 @@ The cart also contained a non-empty SRAM save which we currently include in the + + Zooo (Euro) + 2005 + Ignition Entertainment + + + + + + + + + + + + DigimonAdventure (Chi) @@ -39359,6 +38163,1588 @@ The cart also contained a non-empty SRAM save which we currently include in the + + + + + 2 in 1: Astérix & Obélix - Bash Them All! + Astérix & Obélix XXL (Euro) + 2005 + Atari + + + + + + + + + + + Barbie Superpack: Groovy Games + Secret Agent (Euro) + 2005 + Vivendi Universal + + + + + + + + + + Barbie Superpack: Groovy Games + Secret Agent (USA) + 2005? + Vivendi Universal + + + + + + + + + + 2 Games in 1: Bionicle + Knights' Kingdom (Euro) + 200? + THQ + + + + + + + + + + Double Game!: Cartoon Network Block Party + Cartoon Network Speedway (Euro) + 2005 + Majesco + + + + + + + + + + 2 Games in 1: Cartoon Network Block Party + Cartoon Network Speedway (USA) + 2005 + Majesco + + + + + + + + + + Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (Euro) + 2006 + Konami + + + + + + + + + + + + + + + Castlevania Double Pack: Castlevania - Harmony of Dissonance + Castlevania - Aria of Sorrow (USA) + 2006 + Konami + + + + + + + + + + + 2 Games in 1: Columns Crown + ChuChu Rocket! (Euro) + 2006? + Sega + + + + + + + + + + + Crash Superpack: Crash Bandicoot 2 - N-Tranced + Crash Nitro Kart (USA) + 2005? + Sierra Entertainment + + + + + + + + + + + 2 Games in 1: Disney Princess + Lizzie McGuire (Euro) + 200? + THQ + + + + + + + + + + 2 Games in 1: Disney Princesas + Lizzie McGuire (Spa) + 200? + THQ + + + + + + + + + + 2 Games in 1: Disney Princess + Disney's Brother Bear (Euro) + 2005 + THQ + + + + + + + + + + + 2 Games in 1: Disney Princesse + Disney's Frère des Ours (Fra) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disneys Prinzessinnen + Disneys Bärenbrüder (Ger) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disney Principesse + Disney's Koda, Fratello Orso (Ita) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disney Princesas + Disney's Hermano Oso (Spa) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Disney's The Lion King + Disney Princess (Euro) + 2004 + THQ + + + + + + + + + + + 2 Games in 1: Disney Princesse + Disney's Le Roi Lion (Fra) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disneys Prinzessinnen + Disneys Der Koenig der Loewen (Ger) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disney Principesse + Disney's Il Re Leone (Ita) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disney Princesas + Disney's El Rey Leon (Spa) + 2004 + THQ + + + + + + + + + + 2 Games in 1: Disney's Brother Bear + Disney's The Lion King (Euro) + 200? + THQ + + + + + + + + + + + 2 Disney Games: Disney Sports - Football + Disney Sports - Skateboarding (Euro) + 200? + Disney Interactive + + + + + + + + + + 2 Disney Games: Disney's Peter Pan - Return to Neverland + Disney's Lilo & Stitch 2 (Euro) + 200? + Disney Interactive + + + + + + + + + + 2 Games in One: Dora the Explorer Double Pack (USA) + 2007 + Global Star Software + + + + + + + + + + 2 Games in 1: Dragon Ball Z I & II (USA) + 2005 + Atari + + + + + + + + + + + + 2 Games in 1!: Dragon Ball Z - Buu's Fury + Dragon Ball GT - Transformation (USA) + 200? + Atari + + + + + + + + + + + 2 Games in 1: Finding Nemo - The Continuing Adventures + The Incredibles (USA) + 200? + THQ + + + + + + + + + + 2 Games in 1: Findet Nemo + Findet Nemo - Das Abenteuer Geht Weiter (Ger) + 200? + THQ + + + + + + + + + 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Euro) + 200? + THQ + + + + + + + + + + 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Ita?, Spa?) + 200? + THQ + + + + + + + + + 2 Games in 1: Finding Nemo + Finding Nemo - The Continuing Adventures (Fra?, Ned?) + 200? + THQ + + + + + + + + + 2 Games in 1: Finding Nemo + The Incredibles (Euro) + 2007 + THQ + + + + + + + + + + 2 Games in 1: Finding Nemo + The Incredibles (Euro, French / Dutch) + 2007 + THQ + + + + + + + + + 2 Games in 1: Findet Nemo + Die Unglaublichen (Ger) + 2007 + THQ + + + + + + + + 2 Games in 1: Alla Ricerca di Nemo + Gli Incredibili - Una 'Normale' Famiglia di Supereroi (Ita) + 2007 + THQ + + + + + + + + + 2 Games in 1: Buscando a Nemo + Los Increibles (Spa) + 2007 + THQ + + + + + + + + + Double Game!: Golden Nugget Casino - Texas Hold 'em Poker (Euro) + 2005 + Majesco + + + + + + + + + + 2 Games in 1: Golden Nugget Casino - Texas Hold 'em Poker (USA) + 2005 + Majesco + + + + + + + + + + 2 Game Pack!: Hot Wheels - Stunt Track Challenge + Hot Wheels - World Race (Euro, USA) + 200? + DSI Games + + + + + + + + + + + + 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (Euro) + 200? + THQ + + + + + + + + + + 2 Games in 1: Hot Wheels - Velocity X + Hot Wheels - World Race (USA) + 200? + THQ + + + + + + + + + Hugo 2 in 1 (Euro) + 2005 + ITE Media + + + + + + + + + + + + + + 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (Euro) + 2006 + Zoo Digital Publishing + + + + + + + + + + 2 Game Pack! - Matchbox Missions: Emergency Response + Air, Land & Sea Rescue (USA) + 2006 + DSI Games + + + + + + + + + + 2 Games in 1: Monsters, Inc. + Finding Nemo (Euro) + 2005 + THQ + + + + + + + + + + + + 2 Games in 1: Monsters en Co. + Finding Nemo (Ned) + 2005 + THQ + + + + + + + + + 2 Games in 1: Monstres & Cie + Le Monde de Nemo (Fra) + 2005 + THQ + + + + + + + + + 2 Games in 1: Die Monster AG + Findet Nemo (Ger) + 2005 + THQ + + + + + + + + + 2 Games in 1: Monsters & Co. + Alla Ricerca di Nemo (Ita) + 2005 + THQ + + + + + + + + + 2 Games in 1: Monstruos, S.A. + Buscando a Nemo (Spa) + 2005 + THQ + + + + + + + + + 2 Games in 1 Double Pack: Monsters, Inc. + Finding Nemo (USA) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Moto GP + GT Advance 3 - Pro Concept Racing (Euro) + 200? + THQ + + + + + + + + + + + Pac-Man World & Ms. Pac-Man - Maze Madness (Euro) + 2005 + Zoo Digital Publishing + + + + + + + + + + 2 Great Games!: Pac-Man World + Ms. Pac-Man - Maze Madness (USA) + 2005 + Namco + + + + + + + + + + + Pferd & Pony 2 in 1: Pferd & Pony - Mein Pferdehof + Pferd & Pony - Lass Uns Reiten 2 (Ger) + 2006? + dtp Entertainment + + + + + + + + + + 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Euro) + 2005 + THQ + + + + + + + + + + + + 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - La Force du Temps (Fra) + 2005 + THQ + + + + + + + + + 2 Games in 1: Power Rangers - Ninja Storm + Power Rangers - Time Force (Ger) + 2005 + THQ + + + + + + + + + 2 Games in 1 Double Pack: Power Rangers - Ninja Storm + Power Rangers - Time Force (USA) + 2005 + THQ + + + + + + + + + + Prince of Persia - The Sands of Time & Lara Croft Tomb Raider - The Prophecy (Euro) + 2006 + Ubisoft + + + + + + + + + + + Double Game!: Quad Desert Fury + Monster Trucks (Euro) + 2005 + Majesco + + + + + + + + + 2 Games in 1: Quad Desert Fury + Monster Trucks (USA) + 2005 + Majesco + + + + + + + + + + 2 Games in 1: Rugrats - Go Wild + SpongeBob SquarePants - SuperSponge (Euro) + 2005 + THQ + + + + + + + + + + 2 Games in 1: Les Razmoket Rencontrent les Delajungle + SpongeBob SquarePants - SuperSponge (Fra) + 200? + THQ + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (Euro) + 2006 + THQ + + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Desatado (Spa) + 2006 + THQ + + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Les Monstres Se Dechainent (Fra) + 2006 + THQ + + + + + + + + + + 2 Games in 1: Scooby-Doo + Scooby-Doo 2 - Monsters Unleashed (USA) + 2006 + THQ + + + + + + + + + + + 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (Euro) + 2005 + THQ + + + + + + + + + + 2 Games in 1 Double Pack: Scooby-Doo! - Mystery Mayhem + Scooby-Doo and the Cyber Chase (USA) + 2005 + THQ + + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar (Euro) + 2006? + Activision + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar (USA) + 2006? + Activision + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (Euro) + 2006 + Activision + + + + + + + + + + 2-in-1 Fun Pack: Shrek 2 + Madagascar - Operation Penguin (USA) + 2006 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Shrek 2 + Shark Tale (Euro) + 2005 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Shrek 2 + Shark Tale (USA) + 2005 + Activision + + + + + + + + + + + 2 Games in 1: Sonic Advance + ChuChu Rocket! (Euro) + 2005 + THQ + + + + + + + + + + + Double Pack: Sonic Advance + ChuChu Rocket! (Jpn) + 2006 + Sega + + + + + + + + + + + + + + 2 Games in 1: Sonic Advance + Sonic Battle (Euro) + 2005 + THQ + + + + + + + + + + + Double Pack: Sonic Advance + Sonic Battle (Jpn) + 2006 + Sega + + + + + + + + + + + + + + 2 Games in 1: Sonic Advance + Sonic Pinball Party (Euro) + 2005 + Sega + + + + + + + + + + + Double Pack: Sonic Battle + Sonic Pinball Party (Jpn) + 2006 + Sega + + + + + + + + + + + + + Combo Pack - Sonic Advance + Sonic Pinball Party (USA) + 2005 + Sega + + + + + + + + + + + 2 Games in 1: Sonic Battle + ChuChu Rocket! (Euro) + 2006? + Sega + + + + + + + + + + 2 Games in 1: Sonic Battle + Sonic Pinball Party (Euro) + 2005 + Sega + + + + + + + + + + + 2 Games in 1: Sonic Pinball Party + Columns Crown (Euro) + 2006 + Sega + + + + + + + + + + + 2 in 1 Game Pack: Spider-Man & Spider-Man 2 (Euro) + 2005 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Spider-Man + Spider-Man 2 (USA) + 2005 + Activision + + + + + + + + + + + 2 in 1 Game Pack: Spider-Man - Mysterio's Menace + X2 - Wolverine's Revenge (Euro, USA) + 200? + Activision + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Jimmy Neutron Boy Genius (Euro) + 2005 + THQ + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - Battle for Bikini Bottom + Nicktoons - Freeze Frame Frenzy (USA) + 200? + THQ + + + + + + + + + + 2 Games in 1 Double Pack: SpongeBob SquarePants - Battle for Bikini Bottom + The Fairly OddParents! - Breakin' da Rules (USA) + 2005 + THQ + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (Euro) + 2004 + THQ + + + + + + + + + + 2 Games in 1 Double Pack: SpongeBob SquarePants - Revenge of the Flying Dutchman + SpongeBob SquarePants - SuperSponge (USA) + 2005 + THQ + + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro) + 200? + THQ + + + + + + + + + 2 Games in 1: SpongeBob SquarePants - SuperSponge & Battle for Bikini Bottom (Euro, Alt) + 200? + THQ + + + + + + + + + 2 Games in 1: The SpongeBob SquarePants Movie + SpongeBob SquarePants and Friends in Freeze Frame Frenzy (Euro) + 2005 + THQ + + + + + + + + + + + Spyro - Season of Ice + Crash Bandicoot 2 - N-Tranced (Euro) + 2005 + Vivendi Universal + + + + + + + + + + + + + + + Spyro 2 - Season of Flame + Crash Nitro Kart (Euro) + 2005 + Vivendi Universal + + + + + + + + + + + Spyro - Fusion + Crash Bandicoot - Fusion (Euro) + 2005 + Vivendi Universal + + + + + + + + + + + Spyro - Season of Ice + Crash Bandicoot - The Huge Adventure (USA) + 2005? + Sierra Entertainment + + + + + + + + + + + Spyro Orange - The Cortex Conspiracy + Crash Bandicoot Purple - Ripto's Rampage (USA) + 2005? + Sierra Entertainment + + + + + + + + + + + + Spyro Superpack: Spyro - Season of Ice + Spyro - Season of Flame (USA) + 2005? + Vivendi Universal + + + + + + + + + + + Teenage Mutant Ninja Turtles Double Pack (Euro) + 2006 + Konami + + + + + + + + + + + Teenage Mutant Ninja Turtles Double Pack (USA) + 2006 + Konami + + + + + + + + + + + 2 Jeux en 1: Titeuf - Ze Gagmachine + Titeuf Méga Compet (Fra) + 2005 + Atari + + + + + + + + + + 2 in 1 Game Pack: Tony Hawk's Underground + Kelly Slater's Pro Surfer (Euro, USA) + 2006 + Activision + + + + + + + + + + 2 in 1: V-Rally 3 + Stuntman (Euro) + 2005 + Atari + + + + + + + + + + Winnie the Pooh's Rumbly Tumbly Adventure & Rayman 3 (Euro) + 2006 + Ubisoft + + + + + + + + + + + Yu-Gi-Oh! Double Pack (Euro) + 2006 + Konami + + + + + + + + + + + + + + + Yu-Gi-Oh! Double Pack (USA) + 2006 + Konami + + + + + + + + + + + Yu-Gi-Oh! Double Pack 2 (USA) + 2006 + Konami + + + + + + + + + + + Ignition Collection: Volume 1- 3 Games in 1: Animal Snap + World Tennis Stars + Super Dropzone (Euro) + 2007? + Ignition Entertainment + + + + + + + + + 3 Games in 1: Rugrats - I Gotta Go Party + SpongeBob SquarePants - SuperSponge + Tak and the Power of Juju (Euro) + 200? + THQ + + + + + + + + + + + 4 Games on One Game Pak (Nicktoons) (USA) + 2007 + THQ + + + + + + + + + + + 4 Games on One Game Pak (Racing) (USA) + 2007 + THQ + + + + + + + + + + + Twin Series 1 - Mezase Debut! - Fashion Designer Monogatari + Kawaii Pet Game Gallery 2 (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 2 - Oshare Princess 4 + Renai Uranai Daisakusen! + Renai Party Game - Sweet Heart (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 3 - Konchuu Monster - Ouja Ketteisen + Super Chinese Labyrinth (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 4 - Hamu Hamu Monster EX - Hamster Monogatari RPG + Fantasy Puzzle - Hamster Monogatari - Mahou no Meikyuu 1.2.3 (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 5 - Mahou no Kuni no Cake-ya-san Monogatari + Wanwan Meitantei EX (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 6 - Wannyan Idol Gakuen + Koinu to Issho Special (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + Twin Series 7 - Twin Puzzle - Kisekae Wanko EX + Nyaa to Chuu no Rainbow Magic 2 (Jpn) + 2004 + Culture Brain + + + + + + + + + + + + + @@ -39467,6 +39853,26 @@ The cart also contained a non-empty SRAM save which we currently include in the + + + Play-Yan (Jpn) + 2005 + Nintendo + + + + + + + + + + + + + + + Play-Yan Micro (Jpn) 2005 diff --git a/hash/gbcolor.xml b/hash/gbcolor.xml index 299dd09134f..e6c174a7072 100644 --- a/hash/gbcolor.xml +++ b/hash/gbcolor.xml @@ -86,7 +86,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + 10-Pin Bowling (USA) 1999 Majesco @@ -177,7 +177,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + 3-D Ultra Pinball - Thrillride (USA) 2000 Sierra @@ -3051,7 +3051,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Chee-Chai Alien (Jpn) 2001 Creatures @@ -6698,7 +6698,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Get Chuu Club - Minna no Konchuu Daizukan (Jpn) 1999 Jaleco @@ -8057,7 +8056,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Hole In One Golf (USA) 1999 Natsume @@ -9197,7 +9195,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Kawa no Nushi Tsuri 4 (Jpn) 1999 Victor Interactive Software @@ -10446,7 +10444,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Disney's The Little Mermaid II - Pinball Frenzy (USA) 2000 Disney Interactive @@ -12538,7 +12536,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Missile Command (USA) 1999 Hasbro Interactive @@ -13556,7 +13554,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + NASCAR Challenge (USA) 1999 Hasbro Interactive @@ -14086,7 +14084,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Nushi Tsuri Adventure - Kite no Bouken (Jpn) 2000 Victor Interactive Software @@ -14477,7 +14475,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Perfect Dark (Euro, USA) 2000 Nintendo @@ -15502,7 +15500,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Pokémon Pinball (Euro) 1999 Nintendo @@ -15526,7 +15523,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Pokémon Pinball (Jpn) 1999 Nintendo @@ -15545,7 +15542,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Pokémon Pinball (Aus, USA) 1999 Nintendo @@ -15645,7 +15642,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Polaris SnoCross (USA) 2000 Vatical Entertainment @@ -17088,7 +17085,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Ready 2 Rumble Boxing (USA) 1999 Midway @@ -19194,7 +19191,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Star Wars Episode I - Racer (Euro, USA) 1999 Nintendo @@ -19304,7 +19301,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Super Black Bass - Real Fight (Jpn) 1999 Starfish @@ -19545,7 +19542,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Super Real Fishing (Jpn) 1999 Bottom Up @@ -20151,7 +20148,6 @@ Unreleased (music source code exists, possibly no prototypes exist) - Test Drive Off-Road 3 (USA) 1999 Infogrames @@ -20684,7 +20680,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Tonka Raceway (USA, Rumble Version) 1999 Hasbro Interactive @@ -20828,7 +20824,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Pocket (Jpn) 1999 Kemco @@ -20845,7 +20841,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Pocket (USA) 1999 Kemco @@ -20860,7 +20856,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Pocket 2 (Jpn) 1999 Kemco @@ -20895,7 +20891,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Top Gear Rally (Euro) 1999 Kemco @@ -21645,7 +21641,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Vigilante 8 (USA) 1999 Vatical Entertainment @@ -22909,7 +22905,7 @@ Unreleased (music source code exists, possibly no prototypes exist) - + Zebco Fishing! (USA) 1999 Vatical Entertainment diff --git a/hash/megadriv.xml b/hash/megadriv.xml index 95e4295fac9..aa1fb105e2d 100644 --- a/hash/megadriv.xml +++ b/hash/megadriv.xml @@ -57,7 +57,7 @@ Known undumped protos Known undumped pirates * Tec Toy Mega Drive 3 (with 86 built in games) - * Chinese Checkers (by RealTec) + * Chinese Checkers (by RealTec) - 中國象棋 ? * Shizen Mahjong / Competition Mahjong (by Sachen, apparently dumped but hoarded) * Magic 7 Block - ç™¾å¤‰ä¸ƒå·§æ¿ * Chinese Battle Chess (?) - 戦 棊 @@ -9717,10 +9717,10 @@ but dumps still have to be confirmed. --> - 13 Ma Jiang - 98 Mei Shao Nu Pian (Chi) + 13 Ma Jiang - 98 Mei Shao Nu (Chi) 1998 BBD - + @@ -9750,16 +9750,31 @@ but dumps still have to be confirmed. - - 16 Zhang Ma Jiang (Chi) + + Shi Liu Zhang Ma Jiang (Chi) 199? - <unlicensed> + City Man + + + + Shi Liu Zhang Ma Jiang II + 199? + City Man + + + + + + + + + 3 Ninjas Kick Back (USA) @@ -10095,9 +10110,10 @@ but dumps still have to be confirmed. - Adventurous Boy - Mao Xian Xiao Zi (Chi) + Adventurous Boy - Mao Xian Xiao Zi (Tw) 199? - <unlicensed> + Gamtec + @@ -10449,10 +10465,11 @@ but dumps still have to be confirmed. - - Aq Renkan Awa (Chi) + + A Q Lian Huan Pao (Tw) 1995 C&E + @@ -11076,9 +11093,10 @@ but dumps still have to be confirmed. - Barver Battle Saga - Tai Kong Zhan Shi (Chi) + Barver Battle Saga - Tai Kong Zhan Shi - Mo Fa Zhan Shi (Chi) 199? <unlicensed> + @@ -11616,7 +11634,7 @@ but dumps still have to be confirmed. - Bill's Tomato Adventure (Prototype) + Bill's Tomato Game (Prototype) 199? Psygnosis @@ -12284,6 +12302,7 @@ but dumps still have to be confirmed. Chao Ji Da Fu Weng (Chi) 199? Gametec? + @@ -12430,9 +12449,10 @@ but dumps still have to be confirmed. - Chinese Chess + Zhong Guo Xiang Qi - Chinese Chess (Tw) 199? <unlicensed> + @@ -13947,10 +13967,11 @@ but dumps still have to be confirmed. - - Dial Q o Mawase! (Jpn) + + Dial Q Mahjang Club (Jpn) 199? <unlicensed> + @@ -15400,7 +15421,8 @@ but dumps still have to be confirmed. Feng Kuang Tao Hua Yuan (Chi) 199? - <unlicensed> + Creaton + @@ -15412,7 +15434,8 @@ but dumps still have to be confirmed. Feng Kuang Tao Hua Yuan (Chi, Unprotected) 199? - <unlicensed> + Creaton + @@ -15424,6 +15447,7 @@ but dumps still have to be confirmed. Feng Shen Ying Jie Chuan (Chi) 1996 Chuanpu Technologies + @@ -15435,6 +15459,7 @@ but dumps still have to be confirmed. Feng Shen Ying Jie Zhuan (Chi, Alt?) 1996 Chuanpu Technologies + @@ -16507,10 +16532,12 @@ but dumps still have to be confirmed. - - Hei Tao 2 - Super Big 2 (Chi) + + Hei Tao 2 - Super Big 2 (Tw) 199? - <unlicensed> + King Tec + + @@ -18167,6 +18194,7 @@ but dumps still have to be confirmed. Ma Qiao E Mo Ta - Devilish Mahjong Tower (Chi) 1994 C&E + @@ -18816,7 +18844,9 @@ but dumps still have to be confirmed. Meng Huan Shui Guo Pan - 777 Casino (Chi) 199? - <unlicensed> + City Man + + @@ -22595,6 +22625,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Queen of Poker Club (Tw) 199? Sachen + @@ -23609,6 +23640,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i San Guo Zhi V (Chi) 199? SKOB + @@ -23895,9 +23927,10 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Shi Jie Zhi Bang Zheng Ba Zhan - World Pro Baseball 94 (Chi) + Jin Guan Jun Xiong Di Xiang - Shi Jie Zhi Bang Zheng Ba Zhan (Chi) 1994 C&E + @@ -24190,6 +24223,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Shui Hu - Feng Yun Zhuan (Chi) 1999 Never Ending Soft Team + @@ -24201,6 +24235,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Shui Hu Zhuan (Chi) 1996 Chuanpu Technologies + @@ -26723,6 +26758,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Taiwan Daheng (Chi) 1994 C&E + @@ -27828,9 +27864,10 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Tun Shi Tian Di III (China, Simple Chinese) + Tun Shi Tian Di III (Chi, Simple Chinese) 199? <unlicensed> + @@ -27842,6 +27879,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Tun Shi Tian Di III (Chi) 199? SKOB + @@ -29980,6 +30018,8 @@ Notice that these are not working on real hardware due to bugged code with VDP i Wu Kong Wai Zhuan (Chi) 1996 Ming + + @@ -29994,6 +30034,8 @@ Notice that these are not working on real hardware due to bugged code with VDP i Wu Kong Wai Zhuan (Chi, Unprotected) 1996 Ming + + @@ -30301,9 +30343,10 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Xiao Monv - Magic Girl (Chi) + Xiao Monv - Magic Girl (Tw) 199? - <unlicensed> + Gamtec + @@ -30323,10 +30366,24 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + Xin Qi Gai Wang Zi (Chi) + 1996 + C&E + + + + + + + + + Xin Qi Gai Wang Zi (Chi, Alt) 1996 C&E + @@ -30335,23 +30392,12 @@ Notice that these are not working on real hardware due to bugged code with VDP i - - Xin Qi Gai Wang Zi (Chi) - 1996 - C&E - - - - - - - - Ya Se Chuan Shuo (Chi) 1995 - Chuanpu Technologies - + Ming + + @@ -30364,6 +30410,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Yang Jia Jiang - Yang Warrior Family (Chi) 199? <unlicensed> + @@ -30523,7 +30570,8 @@ Notice that these are not working on real hardware due to bugged code with VDP i Zhuo Gui Da Shi - Ghost Hunter (Chi) 1994 - Shenchi Technology + Senchi Technology + @@ -30728,18 +30776,6 @@ Notice that these are not working on real hardware due to bugged code with VDP i - - 16 Tiles Mahjong II - 199? - Gamtec - - - - - - - - A Bug's Life 199? @@ -30827,7 +30863,9 @@ Notice that these are not working on real hardware due to bugged code with VDP i Huan Le Tao Qi Shu - Smart Mouse (Chi) 199? - <unlicensed> + Ming + + @@ -30874,9 +30912,11 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Linghuan Daoshi Super Magician (Chi) + Ling Huan Dao Shi - Super Magician (Chi) 199? - <unlicensed> + Ming + + @@ -30911,10 +30951,11 @@ Notice that these are not working on real hardware due to bugged code with VDP i - - Ma Jiang Qing Ren - Ji Ma Jiang Zhi (Chi) + + Ji Ma Jiang Zhi - Ma Jiang Qing Ren (Chi) 199? <unlicensed> + @@ -30923,10 +30964,11 @@ Notice that these are not working on real hardware due to bugged code with VDP i - + Ma Jiang Qing Ren - Ji Ma Jiang Zhi (Chi, Alt) 199? <unlicensed> + @@ -31056,10 +31098,11 @@ Notice that these are not working on real hardware due to bugged code with VDP i - - Super Mahjong Club - 199? - <unlicensed> + + Du Shen Zhi Meng Huan Puke + 1995 + Creaton + @@ -31105,9 +31148,10 @@ Notice that these are not working on real hardware due to bugged code with VDP i - The Battle of Red Cliffs - Romance of the Three Kingdoms + San Guo Yan Yi - Huo Shao Chi Bi (Tw) 199? <unlicensed> + @@ -31117,9 +31161,10 @@ Notice that these are not working on real hardware due to bugged code with VDP i - The Battle of Red Cliffs - Romance of the Three Kingdoms (Hacked out Protection?) + San Guo Yan Yi - Huo Shao Chi Bi (Tw, Hacked out Protection?) 199? <unlicensed> + @@ -31143,10 +31188,11 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Thunderbolt II (Unl) + Lei Dian II - Thunderbolt II (Unl) 199? Sun Green - + + @@ -31227,10 +31273,10 @@ Notice that these are not working on real hardware due to bugged code with VDP i - Super Poker (Chi) + Chaoji Puke (Tw) 199? <unlicensed> - + @@ -31299,6 +31345,19 @@ Notice that these are not working on real hardware due to bugged code with VDP i + + + Ju Ji Ma Jiang II + 199? + Sun Green + + + + + + + + Truco '96 (Arg) @@ -31374,6 +31433,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Magic Bubble 1993 C&E + @@ -31385,6 +31445,7 @@ Notice that these are not working on real hardware due to bugged code with VDP i Magic Bubble (Alt) 1993 C&E + diff --git a/hash/pc98.xml b/hash/pc98.xml index 3c2838d0363..2624fffdca1 100644 --- a/hash/pc98.xml +++ b/hash/pc98.xml @@ -21433,7 +21433,7 @@ only have some part of Windows file and a Video driver(CLGD?). - + Kikan Dismix Soukan-gou 1990 @@ -21486,7 +21486,7 @@ only have some part of Windows file and a Video driver(CLGD?). - + Kikan Dismix Dai-2-Gou 1990? @@ -27836,6 +27836,27 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) + + + + New 3D Golf Simulation - Harukanaru Augusta (Alt Format) + 1989 + ティーアンドイーソフト (T&E Soft) + + + + + + + + + + + + + + + New 3D Golf Simulation - Eight Lakes G.C. @@ -27851,6 +27872,22 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) + + + + New 3D Golf Simulation - Eight Lakes G.C. (Alt Format) + 1990 + ティーアンドイーソフト (T&E Soft) + + + + + + + + + + New 3D Golf Simulation - T&E Selection @@ -27880,6 +27917,21 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) + + + + New 3D Golf Simulation - Waialae no Kiseki (Alt Format) + 1991 + ティーアンドイーソフト (T&E Soft) + + + + + + + + + @@ -45742,7 +45794,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Daikairei - Nankai no Shitou (Alt Format) 1989 @@ -46268,7 +46320,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Fundation - Shinjuku Story (Alt Format) 1990 @@ -49227,7 +49279,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Puyo Puyo (Alt Format 2) 1993 @@ -49868,7 +49920,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Slayers (Alt Format) 1994 @@ -49971,7 +50023,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Slip Stream '93 Rev-LIMIT (Alt Format) 1994 @@ -50276,7 +50328,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Tenchi Muyo! - Ryououki (Alt Format) 1994 @@ -50583,7 +50635,7 @@ Requires MS-DOS 5.00H plus an unknown procedure (HDD install?) - + Trial of Fours 1992 @@ -55441,7 +55493,7 @@ SPACE EMPIRE - + Kawarazaki-ke no Ichizoku 1992 シルキーズ (Silky's) @@ -60617,7 +60669,7 @@ SPACE EMPIRE - + Bio 100% Free Games Collection (Alt Format) 199? diff --git a/hash/pc98_cd.xml b/hash/pc98_cd.xml new file mode 100644 index 00000000000..4ed77ab3d70 --- /dev/null +++ b/hash/pc98_cd.xml @@ -0,0 +1,883 @@ + + + + + + + + + Alone in the Dark 2 + 1994 + アローマイクロテックス (Arrow Micro-Techs) + + + + + + + + + + Branmarker 2 + 1995 + ディー・オー (D.O.) + + + + + + + + + + Brandish Renewal + 1995 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + Brandish VT + 1996 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + Cry Sweeper + 1996 + ディー・オー (D.O.) + + + + + + + + + + + Dangel + 1996 + ミンク (Mink) + + + + + + + + + + Disc Station Vol. 09 + 1995 + コンパイル (Compile) + + + + + + + + + + Disc Station Vol. 10 + 1996 + コンパイル (Compile) + + + + + + + + + + Disc Station Vol. 11 + 1996 + コンパイル (Compile) + + + + + + + + + + Doom + 1995 + イマジニア (Imagineer) + + + + + + + + + + Doom II + 1995 + イマジニア (Imagineer) + + + + + + + + + + Finish Hold 2 - Tag + 1996 + システムソフト (SystemSoft) + + + + + + + + + + Galpani + 1995 + Creo I + + + + + + + + + + Giten Megami Tensei - Tokyo Mokushiroku + 1997 + アスキー (ASCII) + + + + + + + + + + GuynaRock R + 1997 + ソニア (Sogna) + + + + + + + + + + Let's! Pirates + 1997 + ジックス (ZyX) + + + + + + + + + + Golf Links 386 Pro + 1995 + サイベル (Cybelle) + + + + + + + + + + Akai Shizuku - The Legend of Heroes IV + 1996 + 日本ファルコム (Nihon Falcom) + + + + + + + + + + Chou Jikuu Yousai Macross - SkullLeader Complete Pack + 1995 + ファミリーソフト (Family Soft) + + + + + + + + + + Might and Magic - Clouds of Xeen + 1993 + スタークラフト (Starcraft) + + + + + + + + + + + + + + + Panzer General + 1995 + AMT Savan + + + + + + + + + + Photo Genic + 1997 + サンソフト (Sunsoft) + + + + + + + + + + Policenauts + 1994 + コナミ (Konami) + + + + + + + + + + + + + + + Puyo Puyo Tsuu + 1995 + コンパイル (Compile) + + + + + + + + + + RPG Tkool Dante98 II + 1996 + アスキー (ASCII) + + + + + + + + + + Mahou Shoujo Pretty Samy - Zenpen + 1995 + AIC + + + + + + + + + + Strike Commander Plus + 1995 + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + + + + + + + + + + TFX - The Cutting Edge of Aerial Combat (Japan) + 1996 + イマジニア (Imagineer) + + + + + + + + + + Tokio 2 - Kaitaku Imin Boshuuchuu! + 1995 + アートディンク (Artdink) + + + + + + + + + + The Horde + 1995 + アローマイクロテックス (Arrow Micro-Techs) + + + + + + + + + + Theme Park + 1995 + エレクトロニック・アーツ・ビクター (Electronic Arts Victor) + + + + + + + + + + Viper F40 + 1997 + ソニア (Sogna) + + + + + + + + + + Windows 2000 Professional (W2PCCP) + 2000 + Microsoft + + + + + + + + + + Windows 2000 Professional (W2PFPP) + 2000 + Microsoft + + + + + + + + + + Windows 2000 Server (W2SSEL) + 2000 + Microsoft + + + + + + + + + + + Windows NT 4.0 Workstation + 1996 + Microsoft + + + + + + + + + + + + + + + Windows 95 + 1995 + Microsoft + + + + + + + + + + + Windows 98 + 1998 + Microsoft + + + + + + + + + + Kono Yo no Hate de Koi wo Utau Shoujo YU-NO + 1996 + エルフ (Elf) + + + + + + + + diff --git a/hash/pico.xml b/hash/pico.xml index 5853cc567b7..77e1808613f 100644 --- a/hash/pico.xml +++ b/hash/pico.xml @@ -2006,7 +2006,7 @@ Published by Others (T-yyy*** serial codes, for yyy depending on the publisher) - + diff --git a/hash/pofo.xml b/hash/pofo.xml new file mode 100644 index 00000000000..3255a1aaaba --- /dev/null +++ b/hash/pofo.xml @@ -0,0 +1,53 @@ + + + + + diff --git a/hash/psx.xml b/hash/psx.xml index 89a71ca0039..4fac905f8d8 100755 --- a/hash/psx.xml +++ b/hash/psx.xml @@ -2,29 +2,15 @@ - @@ -403,39 +389,63 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Area 51 (USA, v1.1) + Oddworld - Abe's Oddysee (USA, v1.1) 1997 - Atari Interactive - + GT Interactive Software + - + - - + + - Area 51 (USA, v1.0) - 1996 - Atari Interactive - + Oddworld - Abe's Oddysee (USA, v1.0) + 1997 + GT Interactive Software + - + - + + + + + Oddworld - Abe's Exoddus (USA) + 1998 + GT Interactive Software + + + + + + + + + + + + + - Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA) - 1996 - Acclaim Entertainment - - - - - - - - - - - - The Adventures of Lomax (USA) - 1996 - Psygnosis - - - - - - - - - - Alone in the Dark - One-Eyed Jack's Revenge (USA) - 1996 - Kokopeli Digital Studios - - - - - - - - - - - - Alone in the Dark - The New Nightmare (USA) - 2001 - Infogrames - - - - - - - - - - - - - - - Alexi Lalas International Soccer (USA) - 1999 - Take-Two Interactive Software - - - - - - - - - - Disney's Aladdin in Nasira's Revenge (USA) - 2001 - Sony Computer Entertainment America - + Alone in the Dark - One-Eyed Jack's Revenge (USA) + 1996 + Kokopeli Digital Studios + - + - + + + + Alone in the Dark - The New Nightmare (USA) + 2001 + Infogrames + + + + + + + + + + + + + + - Alundra (USA, v1.0) - 1997 - Working Designs - - - - - - - @@ -977,6 +878,179 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Alundra (USA, v1.0) + 1997 + Working Designs + + + + + + + + + + + + Army Men - Air Attack (USA) + 1999 + The 3DO Company + + + + + + + + + + + + Army Men - Air Attack 2 (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - World War - Final Front (USA) + 2001 + The 3DO Company + + + + + + + + + + + + Army Men - Green Rogue (USA) + 2001 + The 3DO Company + + + + + + + + + + + + Army Men - World War - Land, Sea, Air (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - Sarge's Heroes 2 (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - Sarge's Heroes (USA) + 2000 + The 3DO Company + + + + + + + + + + + + Army Men - World War - Team Assault (USA) + 2001 + The 3DO Company + + + + + + + + + + + + Army Men - World War (USA) + 2000 + The 3DO Company + + + + + + + + + + Austin Powers Pinball (USA) + 2002 + Gotham Games + + + + + + + + + + Arcade's Greatest Hits - The Atari Collection 2 (USA) + 1998 + Midway Home Entertainment + + + + + + + + + + + + Arcade's Greatest Hits - The Atari Collection 1 (USA) + 1996 + Midway Home Entertainment + + + + + + + + + + + + Arcade's Greatest Hits - The Midway Collection 2 (USA) + 1997 + Midway Home Entertainment + + + + + + + + + + + + Williams Arcade's Greatest Hits (USA) + 1996 + Williams Entertainment + + + + + + + + + + Arc the Lad Collection - Arc the Lad (USA) + 2002 + Working Designs + + + + + + + + + - Arc the Lad Collection - Arc the Lad (USA) - 2002 - Working Designs - - - - - - - - - + Area 51 (USA, v1.1) + 1997 + Atari Interactive + + + + + + + + + + + + Area 51 (USA, v1.0) + 1996 + Atari Interactive + + + + + + + + + + Armorines - Project S.W.A.R.M. (USA) + 2000 + Acclaim Entertainment + + + + + + + + - Army Men - Air Attack (USA) - 1999 - The 3DO Company - - - - - - - - - - - - Army Men - Air Attack 2 (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - World War - Final Front (USA) - 2001 - The 3DO Company - - - - - - - - - - - - Army Men - Green Rogue (USA) - 2001 - The 3DO Company - - - - - - - - - - - - Army Men - World War - Land, Sea, Air (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - Sarge's Heroes (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - Sarge's Heroes 2 (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Army Men - World War - Team Assault (USA) - 2001 - The 3DO Company - - - - - - - - - - - - Army Men - World War (USA) - 2000 - The 3DO Company - - - - - - - - - - All Star Racing (USA) - 2002 - Mud Duck Productions - - - - - - - - - + All Star Racing (USA) + 2002 + Mud Duck Productions + + + + + + + + + - Arcade's Greatest Hits - The Atari Collection 1 (USA) - 1996 - Midway Home Entertainment - - - - - - - - - - - - Arcade's Greatest Hits - The Atari Collection 2 (USA) - 1998 - Midway Home Entertainment - - - - - - - - - - Austin Powers Pinball (USA) - 2002 - Gotham Games - - - - - - - - - - Bugs Bunny - Lost in Time (USA) - 2000 - Infogrames - - - - - - - - - + Brain Dead 13 (USA) + 1996 + Crystal Dynamics + + + + + + + + + + + + + + + David Beckham Soccer (USA) + 2002 + Majesco Sales + + + + + + + + + - Broken Helix (USA) - 1997 - Konami of America - - - - - - - - - + Frank Thomas Big Hurt Baseball (USA) + 1996 + Acclaim Entertainment + + + + + + + + + + Billiards (USA) + 2001 + A1 Games + + + + + + + + + - Black Bass with Blue Marlin (USA) - 1999 - HOT-B USA - - - - - - - - - + NHL Blades of Steel 2000 (USA) + 2000 + Konami of America + + + + + + + + + - Billiards (USA) - 2001 - A1 Games - - - - - - - - - - - - Blaster Master - Blasting Again (USA) - 2001 - Crave Entertainment - - - - - - - - - - Blood Omen - Legacy of Kain (USA) - 1996 - Crystal Dynamics - - - - - - - - - + Black Bass with Blue Marlin (USA) + 1999 + HOT-B USA + + + + + + + + + + Blaster Master - Blasting Again (USA) + 2001 + Crave Entertainment + + + + + + + + + + Bomberman Fantasy Race (USA) + 1999 + Atlus Software + + + + + + + + + - Bomberman Fantasy Race (USA) - 1999 - Atlus Software - - - - - - - - - - Bottom of the 9th (USA) - 1996 - Konami of America - - - - - - - - - + Bottom of the 9th (USA) + 1996 + Konami of America + + + + + + + + + - Brain Dead 13 (USA) - 1996 - Crystal Dynamics - - - - - - - - - - - - - - + Broken Helix (USA) + 1997 + Konami of America + + + + + + + + + + Bugs Bunny - Lost in Time (USA) + 2000 + Infogrames + + + + + + + + + + Transformers - Beast Wars Transmetals (USA) + 2000 + BAM! Entertainment + + + + + + + + + - Castrol Honda Superbike Racing (USA) - 1999 - Electronic Arts - - - - - - - - - + Chrono Cross (USA) + 2000 + Square Electronic Arts + + + + + + + + + + + + + + + Championship Bass (USA) + 2000 + Electronic Arts + + + + + + + + + - Championship Bass (USA) - 2000 - Electronic Arts - - - - - - - - - - Chrono Cross (USA) - 2000 - Square Electronic Arts - - - - - - - - - - - - - - - Clock Tower II - The Struggle Within (USA) - 1999 - Agetec - - - - - - - - - Championship Motocross featuring Ricky Carmichael (USA) + Clock Tower II - The Struggle Within (USA) 1999 - THQ - + Agetec + - - - - - - - - Championship Motocross 2001 featuring Ricky Carmichael (USA) - 2001 - THQ - - - - - - - - - - - - Colin McRae Rally (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - Colin McRae Rally 2.0 (USA) - 2000 - Sony Computer Entertainment America - - - - - + @@ -4817,7 +4770,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + --> Command & Conquer - Red Alert (USA) 1997 @@ -4859,7 +4812,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + In Cold Blood (USA) + 2001 + DreamCatcher Interactive + + + + + + + + + + + + + - Crusaders of Might and Magic (USA) - 2000 - The 3DO Company - - - - - - - - - + Crusaders of Might and Magic (USA) + 2000 + The 3DO Company + + + + + + + + + + CyberSpeed (USA, v1.1) + 1995 + Mindscape + + + + + + + + + + D (USA) 1996 @@ -6088,23 +6094,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - David Beckham Soccer (USA) - 2002 - Majesco Sales - - - - - - - - - - Disney's Donald Duck - Goin' Quackers (USA) - 2000 - Ubi Soft Entertainment Software - - - - - - - - - Destrega (USA) - 1998 + 1998 Koei @@ -6589,30 +6561,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Dragon Warrior VII (USA) - 2001 - Enix America - - - - - - - - - - - - - - + Die Hard Trilogy 2 - Viva Las Vegas (USA) + 2000 + Fox Interactive + + + + + + + + + - Die Hard Trilogy 2 - Viva Las Vegas (USA) - 2000 - Fox Interactive - - - - - - - - + - Dave Mirra Freestyle BMX (USA) - 2000 - Acclaim Entertainment - - - - - - - - - - - - Dave Mirra Freestyle BMX - Maximum Remix (USA) - 2001 - Acclaim Entertainment - - - - - - - - - Dracula - The Resurrection (USA) 2001 @@ -7196,32 +7108,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Dragon Valor (USA) - 2000 - Namco Hometek - - - - - - - - - - - - - - - Driver - You Are the Wheelman (USA, v1.0) - 1999 - GT Interactive Software - - - - - - - @@ -7296,7 +7165,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + Driver - You Are the Wheelman (USA, v1.0) + 1999 + GT Interactive Software + + + + + + + + + Duke Nukem - Time to Kill (USA) + 1998 + GT Interactive Software + + + + + + + + + - Duke Nukem - Time to Kill (USA) - 1998 - GT Interactive Software - - - - - - - - - - - - The Dukes of Hazzard - Racing for Home (USA) - 1999 - SouthPeak Interactive - - - - - - - - - - - - The Dukes of Hazzard II - Daisy Dukes It Out (USA) - 2000 - SouthPeak Interactive - - - - - - - - - - - - The Dukes of Hazzard - Racing for Home (USA, Alt) - 1999 - SouthPeak Interactive - - - - - - - - - + Dragon Valor (USA) + 2000 + Namco Hometek + + + + + + + + + + + + + + + + + Dragon Warrior VII (USA) + 2001 + Enix America + + + + + + + + + + + + + + + Sesame Street - Elmo's Letter Adventure (USA) + 1999 + NewKidCo + + + + + + + + + + + + Sesame Street - Elmo's Number Journey (USA) + 1999 + NewKidCo + + + + + + + + + + Formula 1 (USA, v1.1) + 1996 + Psygnosis + + + + + + + + + + + + Formula 1 (USA, v1.0) + 1996 + Psygnosis + + + + + + + + + + + + F1 2000 (USA) + 2000 + Electronic Arts + + + + + + + + + + + + Formula 1 98 (USA) + 1998 + Psygnosis + + + + + + + + + - Formula 1 (USA, v1.1) - 1996 - Psygnosis - - - - - - - - - - - - Formula 1 (USA, v1.0) - 1996 - Psygnosis - - - - - - - - - - - - F1 2000 (USA) - 2000 - Electronic Arts - - - - - - - - - - - - Formula 1 98 (USA) - 1998 - Psygnosis - - - - - - - - - + Fisherman's Bait - A Bass Challenge (USA) + 1999 + Konami of America + + + + + + + + + + + + Fisherman's Bait 2 - Big Ol' Bass (USA) + 1999 + Konami of America + + + + + + + + + + Final Fantasy Tactics (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + - Final Fantasy Tactics (USA) - 1998 - Sony Computer Entertainment America - - - - - - - @@ -9127,6 +9080,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + 2002 FIFA World Cup (USA) + 2002 + Electronic Arts + + + + + + + + + - 2002 FIFA World Cup (USA) - 2002 - Electronic Arts - - - - - - - - - - Fisherman's Bait 2 - Big Ol' Bass (USA) - 1999 - Konami of America - - - - - - - - - - - - Fisherman's Bait - A Bass Challenge (USA) - 1999 - Konami of America - - - - - - - - - - Frank Thomas Big Hurt Baseball (USA) - 1996 - Acclaim Entertainment - - - - - - - - - - Geom Cube (USA) - 1995 - American Technos - - - - - - - - - + Geom Cube (USA) + 1995 + American Technos + + + + + + + + + - Golden Nugget (USA) - 1997 - Virgin Interactive Entertainment - - - - - - - - - - - - @@ -10075,7 +9951,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + Disney's Donald Duck - Goin' Quackers (USA) + 2000 + Ubi Soft Entertainment Software + + + + + + + + + + Golden Nugget (USA) + 1997 + Virgin Interactive Entertainment + + + + + + + + + + + + + + + + + --> Gran Turismo (USA, v1.0) 1998 Sony Computer Entertainment America @@ -10409,12 +10326,12 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + @@ -10490,7 +10407,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Harry Potter and the Chamber of Secrets (USA) - 2002 - Electronic Arts - - - - - - - - - - - - Harry Potter and the Sorcerer's Stone (USA) - 2001 - Electronic Arts - - - - - - - - - + The Dukes of Hazzard - Racing for Home (USA) + 1999 + SouthPeak Interactive + + + + + + + + + + + + The Dukes of Hazzard II - Daisy Dukes It Out (USA) + 2000 + SouthPeak Interactive + + + + + + + + + + + + The Dukes of Hazzard - Racing for Home (USA, Alt) + 1999 + SouthPeak Interactive + + + + + + + + + + Sammy Sosa High Heat Baseball 2001 (USA) + 2000 + The 3DO Company + + + + + + + + + + Mat Hoffman's Pro BMX (USA) + 2001 + Activision + + + + + + + + + + Castrol Honda Superbike Racing (USA) + 1999 + Electronic Arts + + + + + + + + + + Hot Wheels - Turbo Racing (USA) + 1999 + Electronic Arts + + + + + + + + + - Hot Wheels - Turbo Racing (USA) - 1999 + Harry Potter and the Chamber of Secrets (USA) + 2002 Electronic Arts - + - + + + + + + + + Harry Potter and the Sorcerer's Stone (USA) + 2001 + Electronic Arts + + + + + @@ -11244,6 +11270,36 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + The Incredible Hulk - The Pantheon Saga (USA) + 1996 + Eidos Interactive + + + + + + + + + - In Cold Blood (USA) - 2001 - DreamCatcher Interactive - - - - - - - - - - - - - - - The Incredible Hulk - The Pantheon Saga (USA) - 1996 - Eidos Interactive - - - - - - - - - + Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA) + 1996 + Acclaim Entertainment + + + + + + + + + - Jackie Chan Stuntmaster (USA) - 2000 - Midway Home Entertainment - - - - - - - - - - Walt Disney's The Jungle Book - Rhythm n' Groove (USA) + Jackie Chan Stuntmaster (USA) 2000 - Ubi Soft Entertainment Software - + Midway Home Entertainment + - + @@ -12217,6 +12219,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Walt Disney's The Jungle Book - Rhythm n' Groove (USA) + 2000 + Ubi Soft Entertainment Software + + + + + + + + + + Blood Omen - Legacy of Kain (USA) + 1996 + Crystal Dynamics + + + + + + + + + + + + Legacy of Kain - Soul Reaver (USA) + 1999 + Eidos Interactive + + + + + + + + + - Kickboxing (USA) - 2002 - Agetec / A1 Games - + Virtual Kasparov (USA) + 2001 + Titus Software Corporation + - + @@ -12419,6 +12476,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Kickboxing (USA) + 2002 + Agetec / A1 Games + + + + + + + + + + Killer Loop (USA) + 1999 + Crave Entertainment + + + + + + + + + - Killer Loop (USA) - 1999 - Crave Entertainment - - - - - - - - - - Largo Winch - Commando SAR (USA) - 2002 - Ubi Soft Entertainment Software - + Alexi Lalas International Soccer (USA) + 1999 + Take-Two Interactive Software + - + @@ -12887,6 +12961,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + The Land Before Time - Return to the Great Valley (USA) + 2000 + Universal Interactive + + + + + + + + + - The Land Before Time - Return to the Great Valley (USA) - 2000 - Universal Interactive - + Largo Winch - Commando SAR (USA) + 2002 + Ubi Soft Entertainment Software + - + @@ -12962,7 +13053,56 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + + + Lode Runner (USA) + 1998 + Natsume + + + + + + + + + - Legend of Mana (USA) - 2000 - Square Electronic Arts - - - - - - - @@ -13148,23 +13271,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Disney's The Little Mermaid II (USA) - 2000 - THQ - - - - - - - - - - Lode Runner (USA) - 1998 - Natsume - + The Adventures of Lomax (USA) + 1996 + Psygnosis + - + @@ -13277,6 +13375,61 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Norse by Norsewest - The Return of the Lost Vikings (USA) + 1997 + Interplay Productions + + + + + + + + + + + + The Lost World - Jurassic Park (USA) + 1997 + Electronic Arts + + + + + + + + + + + + The Lost World - Jurassic Park - Special Edition (USA) + 1998 + Electronic Arts + + + + + + + + + - The Lost World - Jurassic Park (USA) - 1997 - Electronic Arts - - - - - - - - - - - - The Lost World - Jurassic Park - Special Edition (USA) - 1998 - Electronic Arts - - - - - - - - - - Madden NFL 97 (USA) - 1996 - Electronic Arts - - - - - - - - - - - - Madden NFL 98 (USA) - 1997 - Electronic Arts - - - - - - - - - - - - Madden NFL 98 (USA, Alt) - 1997 - Electronic Arts - - - - - - - - - - - - Madden NFL 99 (USA) - 1998 - Electronic Arts - - - - - - - - - - Magic Carpet (USA) + Madden NFL 97 (USA) 1996 Electronic Arts - + - + + + + + + + + Madden NFL 98 (USA) + 1997 + Electronic Arts + + + + + + + + + + + + Madden NFL 98 (USA, Alt) + 1997 + Electronic Arts + + + + + + + + + + + + Madden NFL 99 (USA) + 1998 + Electronic Arts + + + + + @@ -13753,6 +13843,31 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Magic Carpet (USA) + 1996 + Electronic Arts + + + + + + + + + + Legend of Mana (USA) + 2000 + Square Electronic Arts + + + + + + + + + - Mobile Armor (USA) - 2002 - Tommo - + Rosco McQueen Firefighter Extreme (USA) + 1998 + Psygnosis + - + - + - Motocross Mania (USA) - 2001 - Take-Two Interactive Software - + Colin McRae Rally (USA) + 2000 + Sony Computer Entertainment America + - + - + - Motocross Mania 2 (USA) - 2003 - Take-Two Interactive Software - + Colin McRae Rally 2.0 (USA) + 2000 + Sony Computer Entertainment America + - + @@ -14030,6 +14145,110 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Mega Man 8 (USA) + 1997 + Capcom Entertainment + + + + + + + + + + + + Mega Man X4 (USA) + 1997 + Capcom Entertainment + + + + + + + + + + + + Mega Man X5 (USA) + 2001 + Capcom Entertainment + + + + + + + + + + + + Mega Man X6 (USA, v1.1) + 2001 + Capcom Entertainment + + + + + + + + + + + + Mega Man X6 (USA, v1.0) + 2001 + Capcom Entertainment + + + + + + + + + + + + Disney's The Little Mermaid II (USA) + 2000 + THQ + + + + + + + + + - Mat Hoffman's Pro BMX (USA) - 2001 - Activision - + Medal of Honor (USA) + 1999 + Electronic Arts + - + + + + + + + + Medal of Honor - Underground (USA) + 2000 + Electronic Arts + + + + + @@ -14147,6 +14383,24 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + FoxKids.com - Micro Maniacs Racing (USA) + 2000 + The Codemasters Software Company + + + + + + + + + - Arcade's Greatest Hits - The Midway Collection 2 (USA) - 1997 - Midway Home Entertainment - - - - - - - - - + Dave Mirra Freestyle BMX (USA) + 2000 + Acclaim Entertainment + + + + + + + + + + + + Dave Mirra Freestyle BMX - Maximum Remix (USA) + 2001 + Acclaim Entertainment + + + + + + + + + - Mary-Kate and Ashley - Crush Course (USA) - 2001 - Acclaim Entertainment - - - - - - - - - - - - Mary-Kate and Ashley - Magical Mystery Mall (USA) - 2000 - Acclaim Entertainment - - - - - - - - - - - - Mary-Kate and Ashley - Winners Circle (USA) - 2001 - Acclaim Entertainment - - - - - - - - - - - - Mortal Kombat Mythologies - Sub-Zero (USA) - 1997 - Midway Home Entertainment - - - - - - - - - - Mega Man 8 (USA) - 1997 - Capcom Entertainment - - - - - - - - - - FoxKids.com - Micro Maniacs Racing (USA) - 2000 - The Codemasters Software Company - - - - - - - - - - Mega Man X4 (USA) - 1997 - Capcom Entertainment - - - - - - - - - - - - Mega Man X5 (USA) + Mary-Kate and Ashley - Winners Circle (USA) 2001 - Capcom Entertainment - + Acclaim Entertainment + - + - + - Mega Man X6 (USA, v1.1) + Mary-Kate and Ashley - Crush Course (USA) 2001 - Capcom Entertainment - + Acclaim Entertainment + - - - - - - - - Mega Man X6 (USA, v1.0) - 2001 - Capcom Entertainment - - - - - - - - - - - - Monkey Magic (USA) - 1999 - Sunsoft - - - - - + - + - MonsterSeed (USA) - 1999 - Sunsoft - + Mary-Kate and Ashley - Magical Mystery Mall (USA) + 2000 + Acclaim Entertainment + - + @@ -14944,36 +15061,30 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Medal of Honor (USA) - 1999 - Electronic Arts - + Mobile Armor (USA) + 2002 + Tommo + - - - - - - - - Medal of Honor - Underground (USA) - 2000 - Electronic Arts - - - - - + @@ -14995,6 +15106,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Monkey Magic (USA) + 1999 + Sunsoft + + + + + + + + + + MonsterSeed (USA) + 1999 + Sunsoft + + + + + + + + + + Championship Motocross featuring Ricky Carmichael (USA) + 1999 + THQ + + + + + + + + + + + + Championship Motocross 2001 featuring Ricky Carmichael (USA) + 2001 + THQ + + + + + + + + + + Motocross Mania (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + + + + Motocross Mania 2 (USA) + 2003 + Take-Two Interactive Software + + + + + + + + + + NASCAR 98 Collector's Edition (USA) + 1998 + Electronic Arts + + + + + + + + + + + + NASCAR 99 Legacy (USA) + 1999 + Electronic Arts + + + + + + + + + + NASCAR 98 (USA) + 1997 + Electronic Arts + + + + + + + + + + + + NASCAR 99 (USA) + 1998 + Electronic Arts + + + + + + + + + + + + NASCAR Racing (USA) + 1996 + Sierra On-Line + + + + + + + + + + + + NASCAR Rumble (USA) + 2000 + Electronic Arts + + + + + + + + + + + + NASCAR Heat (USA) + 2000 + Hasbro Interactive + + + + + + + + + - NASCAR 98 (USA) - 1997 - Electronic Arts - + Disney's Aladdin in Nasira's Revenge (USA) + 2001 + Sony Computer Entertainment America + - - - - - - - - NASCAR 98 Collector's Edition (USA) - 1998 - Electronic Arts - - - - - - - - - - - - NASCAR 99 (USA) - 1998 - Electronic Arts - - - - - - - - - - - - NASCAR 99 Legacy (USA) - 1999 - Electronic Arts - - - - - - - - - - - - NASCAR Heat (USA) - 2000 - Hasbro Interactive - - - - - - - - - - - - NASCAR Racing (USA) - 1996 - Sierra On-Line - - - - - - - - - - - - NASCAR Rumble (USA) - 2000 - Electronic Arts - - - - - + @@ -16243,112 +16493,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - NBA in the Zone 2000 (USA) - 2000 - Konami of America - - - - - - - - - - - - NBA in the Zone '98 (USA, v1.1) - 1998 - Konami of America - - - - - - - - - - - - NBA in the Zone '98 (USA, v1.0) - 1998 - Konami of America - - - - - - - - - - - - NBA in the Zone '99 (USA) - 1999 - Konami of America - - - - - - - - - - - - NBA in the Zone (USA) - 1995 - Konami of America - - - - - - - - - - - - NBA in the Zone 2 (USA) - 1996 - Konami of America - - - - - - - - - - NBA Live 2001 (USA) - 2000 - Electronic Arts - - - - - - - - - - - - NBA Live 2002 (USA) - 2001 - Electronic Arts - - - - - - - - - - - - NBA Live 2003 (USA) - 2002 - Electronic Arts - - - - - - - - - + NBA Live 2001 (USA) + 2000 + Electronic Arts + + + + + + + + + + + + NBA Live 2002 (USA) + 2001 + Electronic Arts + + + + + + + + + + + + NBA Live 2003 (USA) + 2002 + Electronic Arts + + + + + + + + + - Norse by Norsewest - The Return of the Lost Vikings (USA) - 1997 - Interplay Productions - + NBA in the Zone 2000 (USA) + 2000 + Konami of America + - + + + + + + + + NBA in the Zone '98 (USA, v1.1) + 1998 + Konami of America + + + + + + + + + + + + NBA in the Zone '98 (USA, v1.0) + 1998 + Konami of America + + + + + + + + + + + + NBA in the Zone '99 (USA) + 1999 + Konami of America + + + + + + + + + + + + NBA in the Zone (USA) + 1995 + Konami of America + + + + + + + + + + + + NBA in the Zone 2 (USA) + 1996 + Konami of America + + + + + @@ -16734,7 +16967,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + Nightmare Creatures II (USA) + 2000 + Konami of America + + + + + + + + + + + + Nightmare Creatures (USA) + 1997 + Activision + + + + + + + + + - The Next Tetris (USA) - 1999 - Hasbro Interactive - + Newman Haas Racing (USA) + 1998 + Psygnosis + - - - - - - - - No Fear Downhill Mountain Bike Racing (USA) - 1999 - The Codemasters Software Company - - - - - + @@ -17108,96 +17375,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - NFL GameDay 97 (USA) - 1996 - Sony Computer Entertainment America - - - - - - - - - - - - NFL GameDay 98 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - NFL GameDay 99 (USA, v1.1) - 1998 - 989 Sports - - - - - - - - - - - - NFL GameDay 99 (USA, v1.0) - 1998 - 989 Sports - - - - - - - - - - - - NFL GameDay (USA) - 1996 - Sony Computer Entertainment America - - - - - - - - - + NFL GameDay 97 (USA) + 1996 + Sony Computer Entertainment America + + + + + + + + + + + + NFL GameDay 98 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + NFL GameDay 99 (USA, v1.1) + 1998 + 989 Sports + + + + + + + + + + + + NFL GameDay 99 (USA, v1.0) + 1998 + 989 Sports + + + + + + + + + + + + NFL GameDay (USA) + 1996 + Sony Computer Entertainment America + + + + + + + + + - Nightmare Creatures II (USA) - 2000 - Konami of America - - - - - - - - - - - - Nightmare Creatures (USA) - 1997 - Activision - - - - - - - - - - NHL Blades of Steel 2000 (USA) - 2000 - Konami of America - - - - - - - - - - NHL Face Off '97 + NHL Face Off '97 (USA) 1996 Sony Computer Entertainment America @@ -17932,20 +18122,19 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Newman Haas Racing (USA) - 1998 - Psygnosis - + No Fear Downhill Mountain Bike Racing (USA) + 1999 + The Codemasters Software Company + - + @@ -17992,64 +18181,33 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Oddworld - Abe's Exoddus (USA) - 1998 - GT Interactive Software - + The Next Tetris (USA) + 1999 + Hasbro Interactive + - + - - - - - - + - - - Oddworld - Abe's Oddysee (USA, v1.1) - 1997 - GT Interactive Software - - - - - - - - - - - - Oddworld - Abe's Oddysee (USA, v1.0) - 1997 - GT Interactive Software - - - - - - - - - - Pandemonium! (USA) - 1996 - Crystal Dynamics - - - - - - - - - - Parasite Eve (USA) - 1998 - Square Electronic Arts - + Pandemonium! (USA) + 1996 + Crystal Dynamics + - + - + - + + + + + PaRappa the Rapper (USA) + 1997 + Sony Computer Entertainment America + + + - + @@ -18361,19 +18512,26 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - PaRappa the Rapper (USA) - 1997 - Sony Computer Entertainment America - + Parasite Eve (USA) + 1998 + Square Electronic Arts + - + - + + + + + + @@ -18458,7 +18616,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + Pink Panther - Pinkadelic Pursuit (USA) + 2002 + DreamCatcher Interactive / Wanadoo Edition + + + + + + + + + - Pitfall 3D - Beyond the Jungle (USA) - 1998 - Activision - - - - - - - - - + Pitfall 3D - Beyond the Jungle (USA) + 1998 + Activision + + + + + + + + + - Armorines - Project S.W.A.R.M. (USA) - 2000 - Acclaim Entertainment - - - - - - - - - - Pink Panther - Pinkadelic Pursuit (USA) - 2002 - DreamCatcher Interactive / Wanadoo Edition - - - - - - - - - - Saban's Power Rangers - Lightspeed Rescue (USA) - 2000 - THQ - - - - - - - - - - - - Saban's Power Rangers - Time Force (USA) - 2001 - THQ - - - - - - - - - - Saban's Power Rangers Zeo - Full Tilt Battle Pinball (USA) - 1996 - Bandai America - - - - - - - - - + Saban's Power Rangers - Lightspeed Rescue (USA) + 2000 + THQ + + + + + + + + + + Professional Underground League of Pain (USA) + 1997 + Psygnosis + + + + + + + + + + + + Saban's Power Rangers - Time Force (USA) + 2001 + THQ + + + + + + + + + + + + Saban's Power Rangers Zeo - Full Tilt Battle Pinball (USA) + 1996 + Bandai America + + + + + + + + + + Power Spike - Pro Beach Volleyball (USA) + 2000 + Infogrames + + + + + + + + + - Professional Underground League of Pain (USA) - 1997 - Psygnosis - - - - - - - - - - Power Spike - Pro Beach Volleyball (USA) - 2000 - Infogrames - - - - - - - - - - Ready 2 Rumble Boxing (USA) - 1999 - Midway Home Entertainment - - - - - - - - - + Ready 2 Rumble Boxing (USA) + 1999 + Midway Home Entertainment + + + + + + + + + + Railroad Tycoon II (USA) + 2000 + Take-Two Interactive Software + + + + + + + + + + Rampage - World Tour (USA) + 1997 + Midway Home Entertainment + + + + + + + + + + Rampage - Through Time (USA) + 2000 + Midway Home Entertainment + + + + + + + + + + Razor Freestyle Scooter (USA) + 2000 + Crave Entertainment + + + + + + + + + + Nickelodeon Rocket Power - Team Rocket Rescue (USA) + 2001 + THQ + + + + + + + + + - Resident Evil (USA) - 1996 - Capcom Entertainment - - - - - - - - - - - - Resident Evil 2 (USA) - 1998 - Capcom Entertainment - - - - - - - - - - - - - - - - - Resident Evil 2 - Dual Shock Ver. (USA) - 1998 - Capcom Entertainment - - - - - - - - - - - - - - - - - Resident Evil 3 - Nemesis (USA) - 1999 - Capcom Entertainment - - - - - - - - - - Resident Evil - Director's Cut (USA) - 1997 - Capcom Entertainment - - - - - - - - - - - - Resident Evil - Director's Cut - Dual Shock Ver. (USA) - 1998 - Capcom Entertainment - - - - - - - - - - Resident Evil - Survivor (USA) - 2000 - Capcom Entertainment - - - - - - - - - + Resident Evil (USA) + 1996 + Capcom Entertainment + + + + + + + + + + + + Resident Evil 2 (USA) + 1998 + Capcom Entertainment + + + + + + + + + + + + + + + + + Resident Evil 2 - Dual Shock Ver. (USA) + 1998 + Capcom Entertainment + + + + + + + + + + + + + + + + + Resident Evil 3 - Nemesis (USA) + 1999 + Capcom Entertainment + + + + + + + + + + + + Resident Evil - Director's Cut (USA) + 1997 + Capcom Entertainment + + + + + + + + + + + + Resident Evil - Director's Cut - Dual Shock Ver. (USA) + 1998 + Capcom Entertainment + + + + + + + + + + + + Resident Evil - Survivor (USA) + 2000 + Capcom Entertainment + + + + + + + + + + Rising Zan - The Samurai Gunman (USA) + 1999 + Agetec + + + + + + + + + - Rampage - Through Time (USA) - 2000 - Midway Home Entertainment - - - - - - - - - - - - Rampage - World Tour (USA) - 1997 - Midway Home Entertainment - - - - - - - - - - - - Rosco McQueen Firefighter Extreme (USA) - 1998 - Psygnosis - - - - - - - - - - Nickelodeon Rocket Power - Team Rocket Rescue (USA) - 2001 - THQ - - - - - - - - - - Roswell Conspiracies - Aliens, Myths & Legends (USA) - 2001 - Ubi Soft Entertainment Software - - - - - - - - - + Roswell Conspiracies - Aliens, Myths & Legends (USA) + 2001 + Ubi Soft Entertainment Software + + + + + + + + + - Railroad Tycoon II (USA) - 2000 - Take-Two Interactive Software - - - - - - - - - - Nickelodeon Rugrats - Totally Angelica (USA) - 2001 - THQ - - - - - - - - - + Nickelodeon Rugrats - Totally Angelica (USA) + 2001 + THQ + + + + + + + + + - Rising Zan - The Samurai Gunman (USA) - 1999 - Agetec - - - - - - - - - - Razor Freestyle Scooter (USA) - 2000 - Crave Entertainment - - - - - - - - - + Saltwater Sportfishing (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + - Speedball 2100 (USA) - 2000 - Empire Interactive Entertainment - - - - - - - - - - - - Nickelodeon SpongeBob SquarePants - SuperSponge (USA) - 2001 - THQ - - - - - - - - - + Sesame Steet Sports (USA) + 2001 + NewKidCo + + + + + + + + + + Street Fighter Collection (USA, v1.1) + 1997 + Capcom Entertainment + + + + + + + + + + + + + + + + + Street Fighter Collection (USA, v1.0) + 1997 + Capcom Entertainment + + + + + + + + + + + + + + + Sim City 2000 (USA) + 1996 + Maxis + + + + + + + + + - Sim City 2000 (USA) - 1996 - Maxis - - - - - - - - - + Sammy Sosa Softball Slam (USA) + 2000 + The 3DO Company + + + + + + + + + - Legacy of Kain - Soul Reaver (USA) - 1999 - Eidos Interactive - - - - - - - @@ -23532,42 +23849,6 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - - Soviet Strike (USA) - 1996 - Electronic Arts - - - - - - - - - - - - Space Hulk - Vengeance of the Blood Angels (USA) - 1996 - Electronic Arts - - - - - - - - - - Spawn - The Eternal (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - Sports Car GT (USA) - 1999 - Electronic Arts - - - - - - - - - - - - Spec Ops - Airborne Commando (USA) - 2002 - Gotham Games - - - - - - - - - - - - Spec Ops - Covert Assault (USA) - 2001 - Take-Two Interactive Software - - - - - - - - - - - - Spec Ops - Ranger Elite (USA) - 2001 - Take-Two Interactive Software - - - - - - - - - - - - Spec Ops - Stealth Patrol (USA) - 2000 - Take-Two Interactive Software - - - - - - - - - - - - Speed Punks (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - Speed Racer (USA) - 1998 - Jaleco USA - - - - - - - - - - - - Super Puzzle Fighter II Turbo (USA) - 1996 - Capcom Entertainment - - - - - - - - - - - - Spice World (USA) - 1998 - Psygnosis - - - - - - - - - - - - Spider - The Video Game (USA) - 1997 - BMG Interactive Entertainment - - - - - - - - - - - - Spider-Man 2 - Enter - Electro (USA) - 2001 - Activision - - - - - - - - - - - - Spider-Man (USA) - 2000 - Activision - - - - - - - - - - - - Spin Jam (USA) - 2000 - Empire Interactive Entertainment - - - - - - - - - - - - Spot Goes to Hollywood (USA) - 1996 - Virgin Interactive Entertainment - - - - - - - - - - Striker Pro 2000 (USA) - 2000 - Infogrames - + Spawn - The Eternal (USA) + 1997 + Sony Computer Entertainment America + - + + + + + + + + Sports Car GT (USA) + 1999 + Electronic Arts + + + + + + + + + + + + Space Hulk - Vengeance of the Blood Angels (USA) + 1996 + Electronic Arts + + + + + + + + + + + + Speedball 2100 (USA) + 2000 + Empire Interactive Entertainment + + + + + + + + + + + + Speed Punks (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + Speed Racer (USA) + 1998 + Jaleco USA + + + + + + + + + + + + Spec Ops - Airborne Commando (USA) + 2002 + Gotham Games + + + + + + + + + + + + Spec Ops - Covert Assault (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + + + + Spec Ops - Ranger Elite (USA) + 2001 + Take-Two Interactive Software + + + + + + + + + + + + Spec Ops - Stealth Patrol (USA) + 2000 + Take-Two Interactive Software + + + + + + + + + + + + Super Puzzle Fighter II Turbo (USA) + 1996 + Capcom Entertainment + + + + + + + + + + + + Spice World (USA) + 1998 + Psygnosis + + + + + + + + + + + + Spider - The Video Game (USA) + 1997 + BMG Interactive Entertainment + + + + + + + + + + + + Spider-Man (USA) + 2000 + Activision + + + + + + + + + + + + Spider-Man 2 - Enter - Electro (USA) + 2001 + Activision + + + + + + + + + + + + Spin Jam (USA) + 2000 + Empire Interactive Entertainment + + + + + + + + + + + + Nickelodeon SpongeBob SquarePants - SuperSponge (USA) + 2001 + THQ + + + + + @@ -24056,7 +24348,46 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + + + + Spot Goes to Hollywood (USA) + 1996 + Virgin Interactive Entertainment + + + + + + + + + + Street Racer (USA) + 1996 + Ubi Soft Entertainment Software + + + + + + + + + + + + Street Racquetball (USA) + 2002 + Agetec + + + + + + + + + + Sports Superbike 2 (USA) + 2002 + Mud Duck Productions + + + + + + + + + - Sammy Sosa High Heat Baseball 2001 (USA) - 2000 - The 3DO Company - - - - - - - - - - Sesame Street - Elmo's Letter Adventure (USA) - 1999 - NewKidCo - + Soviet Strike (USA) + 1996 + Electronic Arts + - - - - - - - - Sesame Street - Elmo's Number Journey (USA) - 1999 - NewKidCo - - - - - - - - - - - - Sammy Sosa Softball Slam (USA) - 2000 - The 3DO Company - - - - - - - - - - - - Sesame Steet Sports (USA) - 2001 - NewKidCo - - - - - - - - - - - - Sports Superbike 2 (USA) - 2002 - Mud Duck Productions - - - - - + @@ -24374,7 +24692,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + --> Star Ocean - The Second Story (USA) 1999 @@ -24461,6 +24779,23 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Striker Pro 2000 (USA) + 2000 + Infogrames + + + + + + + + + - Street Racer (USA) - 1996 - Ubi Soft Entertainment Software - - - - - - - - - - Street Racquetball (USA) - 2002 - Agetec - - - - - - - - - + Mortal Kombat Mythologies - Sub-Zero (USA) + 1997 + Midway Home Entertainment + + + + + + + + + - Star Wars - Episode I - Jedi Power Battles (USA) - 2000 - LucasArts Entertainment Company - - - - - - - - - - Saltwater Sportfishing (USA) - 2001 - Take-Two Interactive Software - + Star Wars - Episode I - Jedi Power Battles (USA) + 2000 + LucasArts Entertainment Company + - + @@ -25058,7 +25324,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - Tales of Destiny II (USA) - 2001 - Namco Hometek - - - - - - - - - - - - - - - - - - - - - - Tales of Destiny (USA) - 1998 - Namco Hometek - - - - - - - - - + Test Drive 4 (USA) + 1997 + Accolade + + + + + + + + + + + + Test Drive 5 (USA) + 1998 + Accolade + + + + + + + + + + + + Test Drive 6 (USA) + 1999 + Infogrames + + + + + + + + + + + + Test Drive Le Mans (USA) + 2000 + Infogrames + + + + + + + + + + + + Test Drive Off-Road (USA) + 1997 + Accolade + + + + + + + + + + + + Test Drive Off-Road 2 (USA) + 1998 + Accolade + + + + + + + + + + + + Test Drive Off-Road 3 (USA) + 1999 + Infogrames + + + + + + + + - Test Drive 4 (USA) - 1997 - Accolade - - - - - - - - - - - - Test Drive 5 (USA) - 1998 - Accolade - - - - - - - - - - - - Test Drive 6 (USA) - 1999 - Infogrames - - - - - - - - - - - - Test Drive Le Mans (USA) - 2000 - Infogrames - - - - - - - - - - - - Test Drive Off-Road (USA) - 1997 - Accolade - - - - - - - - - - - - Test Drive Off-Road 2 (USA) - 1998 - Accolade - - - - - - - - - - - - Test Drive Off-Road 3 (USA) - 1999 - Infogrames - - - - - - - - - + Thunder Force V - Perfect System (USA) + 1998 + Working Designs + + + + + + + + + - Thunderstrike 2 (USA) - 1996 - U.S. Gold - - - - - - - - - - - - Thunder Force V - Perfect System (USA) - 1998 - Working Designs - - - - - - - - - + Tales of Destiny (USA) + 1998 + Namco Hometek + + + + + + + + + + + + Tales of Destiny II (USA) + 2001 + Namco Hometek + + + + + + + + + + + + + + + + + + + + Battle Arena Toshinden (USA) + 1995 + Sony Computer Entertainment America + + + + + + + + + + + + Battle Arena Toshinden 2 (USA) + 1996 + Playmates Interactive Entertainment + + + + + + + + + + + + Battle Arena Toshinden 3 (USA) + 1997 + Playmates Interactive Entertainment + + + + + + + + + + Triple Play Baseball (USA) + 2001 + Electronic Arts + + + + + + + + + + + + Triple Play 2000 (USA) + 1999 + Electronic Arts + + + + + + + + + + + + Triple Play 2001 (USA) + 2000 + Electronic Arts + + + + + + + + + + + + Triple Play 97 (USA) + 1996 + Electronic Arts + + + + + + + + + + + + Triple Play 98 (USA) + 1997 + Electronic Arts + + + + + + + + + + + + Triple Play 99 (USA) + 1998 + Electronic Arts + + + + + + + + + - Transformers - Beast Wars Transmetals (USA) - 2000 - BAM! Entertainment - - - - - - - - - - Tomb Raider (USA, v1.5) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.4) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.3) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.2) - 1998 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.1) - 1996 - Eidos Interactive - - - - - - - - - - - - Tomb Raider (USA, v1.0) - 1996 - Eidos Interactive - - - - - - - - + Tomb Raider (USA, v1.5) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.4) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.3) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.2) + 1998 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.1) + 1996 + Eidos Interactive + + + + + + + + + + + + Tomb Raider (USA, v1.0) + 1996 + Eidos Interactive + + + + + + + + - Treasures of the Deep (USA) - 1997 - Namco Hometek - - - - - - - - + Treasures of the Deep (USA) + 1997 + Namco Hometek + + + + + + + + + - Triple Play 2001 (USA) - 2000 - Electronic Arts - - - - - - - - - - - - Triple Play 2000 (USA) - 1999 - Electronic Arts - - - - - - - - - - - - Triple Play 97 (USA) - 1996 - Electronic Arts - - - - - - - - - - - - Triple Play 98 (USA) - 1997 - Electronic Arts - - - - - - - - - - - - Triple Play 99 (USA) - 1998 - Electronic Arts - - - - - - - - - - - - Triple Play Baseball (USA) - 2001 - Electronic Arts - - - - - - - - - - Battle Arena Toshinden 2 (USA) + Thunderstrike 2 (USA) 1996 - Playmates Interactive Entertainment - + U.S. Gold + - - - - - - - - Battle Arena Toshinden 3 (USA) - 1997 - Playmates Interactive Entertainment - - - - - - - - - - - - Battle Arena Toshinden (USA) - 1995 - Sony Computer Entertainment America - - - - - + @@ -28220,8 +28469,8 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - + + - Vigilante 8 (USA, v1.1) - 1998 - Activision - - - - - - - - - + + Vigilante 8 (USA, v1.1) + 1998 + Activision + + + + + + + + + - Virtual Kasparov (USA) - 2001 - Titus Software Corporation - - - - - - - - - + Virtual Pool (USA) + 1997 + Interplay Productions + + + + + + + + + + + + Virtual Pool 3 (USA) + 2003 + XS Games + + + + + + + + + - Virtual Pool (USA) - 1997 - Interplay Productions - - - - - - - - - - - - Virtual Pool 3 (USA) - 2003 - XS Games - - - - - - - - - + Who Wants to Be a Millionaire - 2nd Edition (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + Who Wants to Be a Millionaire - 3rd Edition (USA) + 2001 + Sony Computer Entertainment America + + + + + + + + + - Williams Arcade's Greatest Hits (USA) - 1996 - Williams Entertainment - - - - - - - - - + Wipeout XL (USA, Prototype) + 1996 + Psygnosis + + + + + + + + + + WWF In Your House (USA, v1.0) + 1996 + Acclaim Entertainment + + + + + + + + - Who Wants to Be a Millionaire - 2nd Edition (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - Who Wants to Be a Millionaire - 3rd Edition (USA) - 2001 - Sony Computer Entertainment America - - - - - - - - - - - - Wipeout XL (USA, Prototype) - 1996 - Psygnosis - - - - - - - @@ -30324,6 +30552,30 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + + Xenogears (USA) + 1998 + Square Electronic Arts + + + + + + + + + + + + + + - Xenogears (USA) - 1998 - Square Electronic Arts - - - - - - - - - - - - - - You Don't Know Jack (USA) 1999 @@ -30755,6 +30983,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added + + GameShark Lite (USA) + 2000 + <unlicensed> + + + + + + + + - 16 Tales 2 + 16 Tales 2 (USA) 1996 The Lightspan Partnership @@ -31345,7 +31590,7 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - + - - - Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA, Demo) - 1996 - Acclaim Entertainment - - - - - - - - - + + + Advanced Dungeons & Dragons - Iron & Blood - Warriors of Ravenloft (USA, Demo) + 1996 + Acclaim Entertainment + + + + + + + + + + Um Jammer Lammy (USA, Demo) + 1999 + Sony Computer Entertainment America + + + + + + + + + + MLB 2001 (USA, Demo) + 2000 + Sony Computer Entertainment America + + + + + + + + + + Ms. Pac-Man Maze Madness (USA, Demo) + 2000 + Namco Hometek + + + + + + + + + + + + NFL Xtreme (USA, Demo) + 1998 + 989 Sports + + + + + + + + + + Rayman (USA, Playable Game Preview) + 1995 + Ubi Soft Entertainment Software + + + + + + + + - Um Jammer Lammy (USA, Demo) + Tomba! 2 - The Evil Swine Return (USA, Demo) 1999 Sony Computer Entertainment America - + - + @@ -32800,8 +33160,8 @@ Furthermore, for an overview of US PS1 discs that have not been dumped and added - - + + + You Don't Know Jack (USA, Demo) + 1999 + Sierra On-Line + + + + + + + + + + + - PlayStation Underground Number 1 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Number 2 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2 Issue 1 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2 Issue 2 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2.3 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Volume 2 Issue 4 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Number 3 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.1 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.2 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.3 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 3.4 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground Number 4 (USA) - 1997 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.1 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.2 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.3 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - - - - - - PlayStation Underground 4.4 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Fall 2001 (USA) - 2001 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Summer 2K (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Summer '99 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Winter 2000 (USA) - 2000 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Winter '98 (USA) - 1998 - Sony Computer Entertainment America - - - - - - - - - - - - PlayStation Underground Jampack - Winter '99 (USA) - 1999 - Sony Computer Entertainment America - - - - - - - - - + + PlayStation Underground Number 1 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Number 2 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2 Issue 1 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2 Issue 2 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2.3 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Volume 2 Issue 4 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Number 3 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.1 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.2 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.3 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 3.4 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground Number 4 (USA) + 1997 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.1 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.2 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.3 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + + + + + + PlayStation Underground 4.4 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Fall 2001 (USA) + 2001 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Summer 2K (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Summer '99 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Winter 2000 (USA) + 2000 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Winter '98 (USA) + 1998 + Sony Computer Entertainment America + + + + + + + + + + + + PlayStation Underground Jampack - Winter '99 (USA) + 1999 + Sony Computer Entertainment America + + + + + + + + + + - - - - - - - - Dance Dance Revolution - Disney Mix (Pirate) - 2001 - <pirate> - - - - - - - - - - - - - Bubble Bobble II (Prototype) - 1995 - Taito - - - - - - - - - - Baldur's Gate (USA, Prototype) - 19?? - Interplay - - - - - - - - - - - - - - - - - - - - - - - BioHazard (Jpn, Prototype 19950804) - 1995 - Capcom - - - - - - - - - - BioHazard (Jpn, Prototype 19951004) - 1995 - Capcom - - - - - - - - - - BioHazard (Jpn, Prototype 19960131) - 1996 - Capcom - - - - - - - - - - BioHazard 2 (Prototype) - 1998 - Capcom - - - - - - - - - - BioHazard 2 (Prototype, Alt) - 1998 - Capcom - - - - - - - - - - Breakneck (Prototype) - 19?? - Radical - - - - - - - - - - Crash Bandicoot (Prototype, 19960408) - 1996 - SCEA - - - - - - - - - - Deuce (USA, Prototype) - 2000 - Midway - - - - - - - - - - Diablo (Prototype) - 1997 - Electronic Arts - - - - - - - - - - Driver (Prototype Demo) - 19?? - GT Interactive - - - - - - - - - - Duke Nukem Time to Kill (USA, Prototype) - 1998 - GT Interactive - - - - - - - - - - Global Domination (USA, Prototype) - 1998? - Psygnosis - - - - - - - - - - Legacy of Kain - Soul Reaver (USA, Prototype 19990628) - 1999 - Eidos - - - - - - - - - - Legacy of Kain - Soul Reaver (USA, Prototype 19990512) - 1999 - Eidos - - - - - - - - - - Madden NFL 96 (USA, Prototype) - 1995 - Electronic Arts - - - - - - - - - - Metal Gear Solid (Pilot Disk) - 1998 - Konami - - - - - - - - - - - - Persona 2 - Eternal Punishment (Prototype? Debug) - 2000 - Atlus - - - - - - - - - - Rockman 8 (Jpn, Prototype v1) - 1996 - Capcom - - - - - - - - - - Rockman 8 (Jpn, Prototype 1) - 1996 - Capcom - - - - - - - - - - Rockman 8 (Jpn, Prototype 2) - 1996 - Capcom - - - - - - - - - - Rockman Dash (Capcom Friendly Club Demo) - 1997 - Capcom - - - - - - - - - - - Rockman X6 (Jpn, Prototype 20010928) - 2001 - Capcom - - - - - - - - - - Silent Hill (USA, Prototype) - 1999 - Konami - - - - - - - - - - Spirit Master (USA, Prototype) - 19?? - Acclaim - - - - - - - - - - StarCon (Prototype) - 1998 - Accolade - - - - - - - - - - Thrill Kill (USA, Prototype) - 1998 - Virgin Interactive - - - - - - - - - - Thrill Kill (USA, Prototype Earlier?) - 1998 - Virgin Interactive - - - - - - - - - - Tomb Raider (Prototype, 19960722) - 1996 - Core Design - - - - - - - - - - Tomb Raider II (USA, Prototype) - 1997 - Core Design - - - - - - - - - - Tony Hawk's Pro Skater (USA, Prototype) - 1999 - Activision - - - - - - - - - - Torc - Legend of the Ogre Crown (Prototype) - 19?? - Head Games - - - - - - - - - - Virtuoso (Prototype, 19960514) - 1996 - Data East? - - - - - - - - - - WWF Smackdown! (USA, Prototype 20000106) - 2000 - THQ - - - - - - - - - - - - - Resident Evil 2 Preview (Euro, CD Consoles No.38) - 1997 - Capcom - - - - - - - - - - - Resident Evil 3 (Euro, Demo) - 1999 - Capcom - - - - - - - - - - - Bounty Arms Demo (Jpn, Demo Demo No.5?, 199504) - 1995 - Data West - - - - - - - - - - Castlevania - Symphony of the Night (E3 Demo, 1997) - 1997 - Konami - - - - - - - - - - Tomb Raider (E3 Demo, 19960520) - 1996 - SCEI - - - - - - + - - - 1-on-1 - Single Basketball (Jpn) - 1998 - Jorudan - - - - - - - - - - - + 1-on-1 - Single Basketball (Jpn) + 1998 + Jorudan + + + + + + + + + + + + + + First Kiss Monogatari (Jpn) + 1998 + HuneX + + + + + + + + + + + + + + + + - 70's Robot Anime - Geppy-X - The Super Boosted Armor (Jpn) - 1999 - Aroma - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A Ressha de Ikou Z - Mezase! Tairiku Oudan (Jpn) - 1999 - Artdink - - - - - - - - - - - - - - - A5 - A Ressha de Ikou 5 (Jpn, Playstation the Best) - 1999 - Artdink - - - - - - - - - - - - - - Action Puzzle - Prism Land (Jpn, Honkakuha de 1300Yen Series) - 2000 - HECT - - - - - - - - - - - - + - Advanced V.G. 2 (Jpn, SuperLite 1500 Series) - 2003 - TGL - - - + Afraid Gear Another (Jpn) + 2001 + Office Create + + + - - - - - - - - Advanced V.G. (Jpn) - 1996 - TGL - - - - - - - + @@ -36567,44 +36141,6 @@ A few comments on these: - - - Afraid Gear Another (Jpn) - 2001 - Office Create - - - - - - - - - - - - - - Agent Armstrong - Himitsu Shirei Daisakusen (Jpn) - 1997 - WENet - - - - - - - - - - - + Akagawa Jirou - Yasoukyoku 2 (Jpn) 2001 Victor Interactive Software @@ -36799,6 +36339,26 @@ A few comments on these: + + + Albalea no Otome - Uruwashi no Seishikitachi (Jpn) + 1998 + Masaya + + + + + + + + + + + + Gensou no Altemis - Actress School Mystery Adventure (Jpn) + 2000 + Shoeisha + + + + + + + + + + + + Another Memories (Jpn) + 1998 + Hearty Robin + + + + + + + + + + + + Angelique Duet (Jpn) + 1998 + Koei + + + + + + + + + + + - Angelique Duet (Jpn) - 1998 - Koei - - - + Angolmois '99 (Jpn, SuperLite 1500 Series) + 1999 + Success + + + - + @@ -37037,42 +36656,48 @@ A few comments on these: - + - Angolmois '99 (Jpn, SuperLite 1500 Series) - 1999 - Success - - - + Ayakashi Ninden Kunoichiban (Jpn) + 1997 + Shoeisha + + + - + - + + + + + + - + - Another Memories (Jpn) - 1998 - Hearty Robin - - - + Kids Station - Soreike! Anpanman 2 - Anpanman to Daibouken! (Jpn) + 2001 + Bandai + + + - + @@ -37123,40 +36748,21 @@ A few comments on these: - + - Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn) - 1998 - Koei - - - + Saru! Get You! (Jpn) + 1999 + SCEI + + + - - - - - - - - Aqua Paradise - Boku no Suizokukan (Jpn) - 2000 - Victor Interactive Software - - - - - - - + @@ -37181,6 +36787,25 @@ A few comments on these: + + + Aqua Paradise - Boku no Suizokukan (Jpn) + 2000 + Victor Interactive Software + + + + + + + + + + + + - Arcade Hits - Crazy Climber (Jpn, Major Wave Series) - 2002 - Hamster - - - + A5 - A Ressha de Ikou 5 (Jpn, Playstation the Best) + 1999 + Artdink + + + - + - + - Arcade Hits - Frisky Tom (Jpn, Major Wave Serie) - 2002 - Hamster - - - + A Ressha de Ikou Z - Mezase! Tairiku Oudan (Jpn) + 1999 + Artdink + + + - + @@ -37299,21 +36938,21 @@ A few comments on these: - + - Soukou Kihei Votoms - Lightning Slash (Jpn) - 1999 - Takara - - - + Agent Armstrong - Himitsu Shirei Daisakusen (Jpn) + 1997 + WENet + + + - + @@ -37336,8 +36975,8 @@ A few comments on these: - - + + - Arthur to Astaroth no Nazo Maikamura - Incredible Toons (Jpn) - 1996 - Capcom - - - - - - - - - - - - - - Albalea no Otome - Uruwashi no Seishikitachi (Jpn) - 1998 - Masaya - - - - - - - - - - - - Aura Battler Dunbine - Seisenshi Densetsu (Jpn) - 2000 - Bandai - - - + Advanced V.G. (Jpn) + 1996 + TGL + + + - + - + + - Ayakashi Ninden Kunoichiban (Jpn) - 1997 - Shoeisha - - - + Advanced V.G. 2 (Jpn, SuperLite 1500 Series) + 2003 + TGL + + + - + - - - - - - + @@ -37719,25 +37315,6 @@ A few comments on these: - - - b.l.u.e. - Legend of Water (Jpn) - 1998 - Hudson - - - - - - - - - - - - + - Bakumatsu Roman - Gekka no Kenshi (Jpn) - 1999 - SNK - - - + Bakuretsu Hunter - Mahjong Special (Jpn) + 1996 + Banpresto + + + - + @@ -37813,21 +37388,23 @@ A few comments on these: - + + - Bakuretsu Hunter - Mahjong Special (Jpn) - 1996 - Banpresto - - - + Bakumatsu Roman - Gekka no Kenshi (Jpn) + 1999 + SNK + + + - + @@ -37852,26 +37429,6 @@ A few comments on these: - - - - Vermin Kids (Jpn) - 1996 - Electronic Arts - - - - - - - - - - - - Baroque - Yuganda Mousou (Jpn) - 1999 - Sting - - - - - - - - - - - - Baseball Simulation - ID Pro Yakyuu (Jpn) - 2001 - Konami - - - + Baroque - Yuganda Mousou (Jpn) + 1999 + Sting + + + - + - + - Bass Fisherman - Texas (Jpn) - 1998 - Sammy - - - + Fishing Freaks - BassRise (Jpn) + 1999 + Bandai + + + - + @@ -38065,159 +37603,6 @@ A few comments on these: - - - - Beatmania - Append 3rd Mix Mini (Jpn) - 1998 - Konami - - - - - - - - - - - - - - Beatmania - Append 5th Mix - Time to Get Down (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - Append Club Mix (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - Best Hits (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - featuring Dreams Come True (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania Append Gottamix 2 - Going Global (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Beatmania - The Sound of Tokyo! - Produced by Konishi Yasuharu (Jpn) - 2001 - Konami - - - - - - - - - - - - - - Beatmania Append 6th Mix + Core Remix (Jpn) - 2002 - Konami - - - - - - - - - - - + Susume! Kaizoku - Be Pirates! (Jpn) + 1998 + Artdink + + + + + + + + + + + + + + Soukou Kihei Votoms Gaiden - Ao no Kishi Berserga Monogatari (Jpn) + 1997 + Takara + + + + + + + + + + + + + + Bass Fisherman - Texas (Jpn) + 1998 + Sammy + + + + + + + + + + + - Bishoujo Senshi Sailormoon Super S - Shin Shuyaku Soudatsusen (Jpn, Genteiban) - 1996 - Angel - - - + Break Volley (Jpn) + 1999 + Aqua Rouge + + + - + + + + + + + + Black Jack vs. Matsuda Jun (Jpn) + 2000 + Pony Canyon + + + + + + + @@ -38368,25 +37845,6 @@ A few comments on these: - - - Black Jack vs. Matsuda Jun (Jpn) - 2000 - Pony Canyon - - - - - - - - - - - - Blaze & Blade - Eternal Quest (Jpn) - 1998 - T&E Soft - - - - - - - - - - - - - - Blaze & Blade - Busters (Jpn) - 1998 - T&E Soft - - - - - - - - - - - - - - Block Kuzushi 2 (Jpn) - 2000 - Marvelous Entertaiment - - - - - - - - - - - + + + Block Kuzushi 2 (Jpn) + 2000 + Marvelous Entertaiment + + + + + + + + + + + + b.l.u.e. - Legend of Water (Jpn) + 1998 + Hudson + + + + + + + + + + + - Soukou Kihei Votoms Gaiden - Ao no Kishi Berserga Monogatari (Jpn) - 1997 - Takara - - - - - - - - - - - + - Boku wa Koukuu Kanseikan (Jpn) - 1999 - Syscom - - - + Beatmania - Append 3rd Mix Mini (Jpn) + 1998 + Konami + + + - + + + + + + + + Beatmania - Append 5th Mix - Time to Get Down (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania Append 6th Mix + Core Remix (Jpn) + 2002 + Konami + + + + + + + + + + + + + + Beatmania - Best Hits (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania - Append Club Mix (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania - featuring Dreams Come True (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania Append Gottamix 2 - Going Global (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Beatmania - The Sound of Tokyo! - Produced by Konishi Yasuharu (Jpn) + 2001 + Konami + + + + + + + + + + + + + + Blaze & Blade - Busters (Jpn) + 1998 + T&E Soft + + + + + + + + + + + + + + Blaze & Blade - Eternal Quest (Jpn) + 1998 + T&E Soft + + + + + + + + + + + + + + Breath of Fire III (Jpn) + 1997 + Capcom + + + + + + + @@ -38670,21 +38267,21 @@ A few comments on these: - + - Bokujyou Keieiteki Board Game Umapoly (Jpn) + Boku wa Koukuu Kanseikan (Jpn) 1999 - Konami - - - + Syscom + + + - + @@ -38812,41 +38409,22 @@ A few comments on these: - + + - Break Volley (Jpn) - 1999 - Aqua Rouge - - - - - - - - - - - - - - Breath of Fire III (Jpn) + Burning Road (Jpn) 1997 - Capcom - - - + Vic Tokai + + + - + @@ -38911,26 +38489,6 @@ A few comments on these: - - - - Burning Road (Jpn) - 1997 - Vic Tokai - - - - - - - - - - - - Captain Tsubasa - Aratanaru Densetsu Joshou (Jpn) - 2002 - Konami - - - - - - - - - - - - - - Captain Tsubasa J - Get in the Tomorrow (Jpn) - 1996 - Bandai - - - - - - - - - - - + Crazy Climber 2000 (Jpn) + 2000 + Nihon Bussan + + + + + + + + + + + + + + Arcade Hits - Crazy Climber (Jpn, Major Wave Series) + 2002 + Hamster + + + + + + + + + + + - Chiisana Kyojin Microman (Jpn) - 1999 - Takara - - - + Chou Aniki - Kyuukyoku Muteki Ginga Saikyou Otoko (Jpn) + 1995 + NCS + + + - - - - - - - - Chiisana Oukoku Erutoria (Jpn) - 2000 - KSS - - - - - - - - - - - - - - Chiki Chiki Machine Mou Race - Wacky Races (Jpn) - 2001 - Infogrames Hudson - - - - - - - - - - - - - - Chippoke Ralph no Daibouken - The Adventure of Little Ralph (Jpn) - 1999 - New - - - - - - - + @@ -39258,83 +38760,6 @@ A few comments on these: - - - Chou Hatsumei Boy Kanipan - Hirameki Wonderland (Jpn) - 1999 - Taito - - - - - - - - - - - - - - Chou Aniki - Kyuukyoku Muteki Ginga Saikyou Otoko (Jpn) - 1995 - NCS - - - - - - - - - - - - - - Chou-Kousoku Grandoll (Jpn) - 1997 - Bandai - - - - - - - - - - - - - - Choujin Gakuen Gowcaizer (Jpn) - 1997 - Urban Plant - - - - - - - - - - - + Chiisana Kyojin Microman (Jpn) + 1999 + Takara + + + + + + + + + + + - Click Manga - Click Nohi (Jpn) - 1999 - Tokuma Shoten - - - + Clock Tower - Ghost Head (Jpn) + 1998 + Human + + + - + @@ -39451,21 +38895,21 @@ A few comments on these: - + - Clock Tower - Ghost Head (Jpn) - 1998 - Human - - - + Click Manga - Click Nohi (Jpn) + 1999 + Tokuma Shoten + + + - + @@ -39625,52 +39069,6 @@ A few comments on these: - - - Crazy Climber 2000 (Jpn) - 2000 - Nihon Bussan - - - - - - - - - - - - - - Creature Shock (Jpn) - 1996 - Data East - - - - - - - - - - - - - - - - + Creature Shock (Jpn) + 1996 + Data East + + + + + + + + + + + + + + + + + Captain Tsubasa - Aratanaru Densetsu Joshou (Jpn) + 2002 + Konami + + + + + + + + + + + + + + Captain Tsubasa J - Get in the Tomorrow (Jpn) + 1996 + Bandai + + + + + + + + + + + + Cybernetic Empire (Jpn) + 1999 + Telenet + + + + + + + + + + + + + + + + - Cybernetic Empire (Jpn) - 1999 - Telenet - - - - - - - - - - - - - - - - + Dancing Blade - Katteni Momotenshi! (Jpn) + 1998 + Konami + + + + + + + + + + + + + + + + + + + + + + + + Dancing Blade - Katteni Momotenshi II - Tears of Eden (Jpn) + 1999 + Konami + + + + + + + + + + + + + + + + + + + + + + + + Dangan (Jpn) + 2000 + KSS + + + + + + + + + + + + + + Darkseed II (Jpn) + 1997 + B-Factory + + + + + + + + + + + + + + Dark Tales from the Lost Soul (Jpn) + 1999 + Sammy + + + + + + + + + + + + + + Dynamite Boxing (Jpn) + 1998 + Victor Interactive Software + + + + + + + + + + + + + + Dragon Ball Z - Ultimate Battle 22 (Jpn) + 1995 + Bandai + + + + + + + + + + + + + + + Destruction Derby 2 (Jpn) + 1997 + SCEI + + + + + + + + + + + - Dancing Blade - Katteni Momotenshi II - Tears of Eden (Jpn) - 1999 - Konami - - - - - - - - - - - - - - - - - - - - - - - - Dancing Blade - Katteni Momotenshi! (Jpn) - 1998 - Konami - - - - - - - - - - - - - - - - - - - - - - - - Dancing Stage featuring Dreams Come True (Jpn) - 2000 - Konami - - - - - - - - - - - - - - Dancing Stage featuring TRUE KiSS DESTiNATiON (Jpn) - 1999 - Konami - - - - - - - - - - - - - - Dangan (Jpn) - 2000 - KSS - - - - - - - - - - - - - - Dark Hunter - Ge Youma No Mori (Jpn) - 1997 - Koei - - - - - - - - - - - - - - Dark Tales from the Lost Soul (Jpn) - 1999 - Sammy - - - - - - - - - - - - - - Darkseed II (Jpn) - 1997 - B-Factory - - - - - - - - - - - - Denpa Shounenteki Game (Jpn) - 1998 - Hudson - - - - - - - - - - - - - - Hole of the Legend Monster - Densetsu Kemono no Ana - Monster Complete World Ver.2 (Jpn) - 1999 - Idea Factory - - - - - - - - - - - + Gear Fighter Dendoh (Jpn) + 2001 + Bandai + + + + + + + + + + + + + + Denpa Shounenteki Game (Jpn) + 1998 + Hudson + + + + + + + + + + + - - - Destruction Derby 2 (Jpn) - 1997 - SCEI - - - - - - - - - - - + Dark Hunter - Ge Youma No Mori (Jpn) + 1997 + Koei + + + + + + + + + + + + Kids Station - Digimon Park (Jpn) + 2001 + Bandai + + + + + + + + + + + + Dragon Knight 4 (Jpn) + 1997 + Banpresto + + + + + + + + + + + + + + Dragon Knights Glorious (Jpn) + 1999 + Pandora + + + + + + + + + + + + Doukyuusei Mahjong (Jpn) + 1997 + Yumedia + + + + + + + + + + + + + + Doukyuusei 2 (Jpn) + 1997 + Banpresto + + + + + + + + + + + - Doukyuusei 2 (Jpn) - 1997 - Banpresto - - - - - - - - - - - - - - Doukyuusei Mahjong (Jpn) - 1997 - Yumedia - - - - - - - - - - - - - - Dr. Slump (Jpn) - 1999 - Bandai - - - - - - - - - - - - - - Dragon Ball Z - Ultimate Battle 22 (Jpn) - 1995 - Bandai - - - - - - - - - - - - Dragon Knight 4 (Jpn) - 1997 - Banpresto - - - - - - - - - - - - - - Dragon Knights Glorious (Jpn) - 1999 - Pandora - - - - - - - - - - - - Dragon Valor (Jpn) + Dr. Slump (Jpn) 1999 - Namco - - - + Bandai + + + - + - - - - - - + @@ -40976,6 +40401,141 @@ A few comments on these: + + + Dancing Stage featuring Dreams Come True (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Dancing Stage featuring TRUE KiSS DESTiNATiON (Jpn) + 1999 + Konami + + + + + + + + + + + + + + Dynamite Soccer 2002 (Jpn) + 2002 + A-Max + + + + + + + + + + + + + + + Dynamite Soccer 2004 Final (Jpn) + 2004 + A-Max + + + + + + + + + + + + + + Aura Battler Dunbine - Seisenshi Densetsu (Jpn) + 2000 + Bandai + + + + + + + + + + + + + + Dragon Valor (Jpn) + 1999 + Namco + + + + + + + + + + + + + + + + - Dynamite Boxing (Jpn) - 1998 - Victor Interactive Software - - - - - - - - - - - - - - Dynamite Soccer 2002 (Jpn) - 2002 - A-Max - - - - - - - - - - - - - - - Dynamite Soccer 2004 Final (Jpn) - 2004 - A-Max - - - - - - - - - - - - - - Hello Charlie!! (Jpn) - 1998 - Enix - - - - - - - - - - - - EVE - The Fatal Attraction (Jpn) - 2001 - Game Village - - - + Fuujin Ryouiki Eretzvaju (Jpn) + 1999 + Yuke's + + + - + - + - + + + + + Chiisana Oukoku Erutoria (Jpn) + 2000 + KSS + + + + + - + - + + + + + + The Vision of Escaflowne (Jpn, Limited Edition) + 1997 + Bandai + + + + + - + + + + + + + + + Weltorv Estleia (Jpn) + 1999 + Hudson + + + + + + + + + + + + + + + Yuukyuu no Eden - The Eternal Eden (Jpn) + 1999 + ASCII + + + + + + + @@ -41489,6 +41036,41 @@ A few comments on these: + + + EVE - The Fatal Attraction (Jpn) + 2001 + Game Village + + + + + + + + + + + + + + + + + + + + + - Extra Bright (Jpn) - 1996 - ASCII - - - - - - - - - - - - Farland Saga - Toki no Michishirube (Jpn) - 1999 - TGL - - - - - - - - - - - + Farland Saga - Toki no Michishirube (Jpn) + 1999 + TGL + + + + + + + + + + + + Formula Circus (Jpn) + 1997 + Nichibutsu + + + + + + + + + + + - Fighters' Impact (Jpn) - 1997 - Taito - - - - - - - - - - - - - - Fighting Illusion - K-1 Grand Prix '98 (Jpn) - 1998 - Xing - - - - - - - - - - - - - - - Final Doom (Jpn) - 1997 - Soft Bank - - - - - - - - - - - - Final Round (Jpn) - 1998 - Atlus - - - + Formula Grand Prix 1997 - Team Unei Simulation 2 (Jpn) + 1997 + Coconuts Japan + + + - + - + - Fire Woman Matoigumi (Jpn) - 1998 - Tokuma Shoten - - - + Forget me not - Palette (Jpn) + 2001 + Enterbrain + + + - + + + + + + + + + Final Doom (Jpn) + 1997 + Soft Bank + + + + + + + @@ -41852,48 +41396,21 @@ A few comments on these: - + - First Kiss Monogatari (Jpn) + Fire Woman Matoigumi (Jpn) 1998 - HuneX - - - - - - - - - - - - - - - - - - - First Queen IV - Varcia Senki (Jpn) - 1996 - KSK - - - + Tokuma Shoten + + + - + @@ -41936,25 +41453,6 @@ A few comments on these: - - - Fishing Freaks - BassRise (Jpn) - 1999 - Bandai - - - - - - - - - - - - Forget me not - Palette (Jpn) - 2001 - Enterbrain - - - - - - - - - - - - - - Formula Circus (Jpn) - 1997 - Nichibutsu - - - - - - - - - - - - - - Formula Grand Prix 1997 - Team Unei Simulation 2 (Jpn) - 1997 - Coconuts Japan - - - - - - - - - - - + First Queen IV - Varcia Senki (Jpn) + 1996 + KSK + + + + + + + + + + + + Arcade Hits - Frisky Tom (Jpn, Major Wave Serie) + 2002 + Hamster + + + + + + + + + + + + + + Final Round (Jpn) + 1998 + Atlus + + + + + + + + + + + + + + Fighters' Impact (Jpn) + 1997 + Taito + + + + + + + + + + + - Fuujin Ryouiki Eretzvaju (Jpn) - 1999 - Yuke's - - - - - - - - - - - - Fuuun Gokuu Ninden (Jpn) - 1996 - AiCOM - - - - - - - - - - - - - - G-Police (Jpn) - 1998 - SCEI - - - - - - - - - - - - - - - - - - - GI Jockey 2000 (Jpn) - 2000 - Koei - - - - - - - - - - - - Gakuen Sentai Solblast (Jpn) - 1999 - Creative Heads - - - + Hoshi no Oka Gakuen Monogatari - Gakuensai (Jpn) + 1998 + MediaWorks + + + - + + + + + + + + Matsumoto Leiji - Story of Galaxy Express 999 (Jpn) + 2001 + Banpresto + + + + + + + + + + + + @@ -42413,25 +41873,6 @@ A few comments on these: - - - Gallop Racer 2000 (Jpn) - 2000 - Tecmo - - - - - - - - - - - + Gunbare! Game Tengoku - The Game Paradise 2 (Jpn) + 1998 + Jaleco + + + + + + + + + + + + Gangway Monsters (Jpn) + 1998 + Sony Music Entertainment + + + + + + + + + + + + + + Yuusha-Ou GaoGaiGar - Blockaded Numbers (Japan) + 1999 + Takara + + + + + + + + + + + + + + Hyakujuu Sentai Gaoranger (Jpn) + 2001 + Bandai + + + + + + + + + + + + + + Tactical Armor Custom Gasaraki (Jpn) + 2000 + Bandai + + + + + + + + + + + + + + Gate Keepers (Jpn) + 1999 + Kadokawa Shoten + + + + + + + + + + + + + + + + + + + The Great Battle VI (Jpn) + 1997 + Banpresto + + + + + + + + + + + + + + GeGeGe no Kitarou (Jpn) + 1997 + Bandai + + + + + + + + + + + + + + GeGeGe no Kitarou - Gyakushuu! Youkai Daikessen (Jpn) + 2003 + Konami + + + + + + + + + + + + + + + Geki-Oh Shienryu (Jpn) + 1999 + Warashi + + + + + + + + + + + + + + Aoki Ookami to Shiroki Mejika - Genchou Hishi (Jpn) + 1998 + Koei + + + + + + + + + + + + + + Genei Tougi - Shadow Struggle (Jpn) + 1996 + Banpresto + + + + + + + + + + + + + + 70's Robot Anime - Geppy-X - The Super Boosted Armor (Jpn) + 1999 + Aroma + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GetBackers Dakkanya (Jpn) + 2001 + Konami + + + + + + + + + + + + + + + Guilty Gear (Jpn) + 1998 + Arc System Works + + + + + + + + + + + - Gangway Monsters (Jpn) - 1998 - Sony Music Entertainment - - - - - - - - - - - - - - Gate Keepers (Jpn) - 1999 - Kadokawa Shoten - - - - - - - - - - - - - - - - - - - Gear Fighter Dendoh (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - GeGeGe no Kitarou - Gyakushuu! Youkai Daikessen (Jpn) - 2003 - Konami - - - - - - - - - - - - - - GeGeGe no Kitarou (Jpn) - 1997 - Bandai - - - - - - - - - - - - - - - Geki-Oh Shienryu (Jpn) - 1999 - Warashi - - - - - - - - - - - - - - Gekisou Tomarunner (Jpn) - 1999 - SCEI - - - - - - - - - - - - - - Gekitotsu Toma L'Arc - Tomarunner vs. L'Arc~en~Ciel (Jpn) + GI Jockey 2000 (Jpn) 2000 - Sony - - - + Koei + + + - - - - - - - - Genei Tougi - Shadow Struggle (Jpn) - 1996 - Banpresto - - - - - - - - - - - - - - Gensou Maden Saiyuuki - Harukanaru Nishi e (Jpn) - 2002 - J-Wing - - - - - - - - - - - - - - Gensou no Altemis - Actress School Mystery Adventure (Jpn) - 2000 - Shoeisha - - - - - - - - - - - - - - GetBackers Dakkanya (Jpn) - 2001 - Konami - - - - - - - + @@ -42828,25 +42382,6 @@ A few comments on these: - - - Ginga Ojousama Densetsu Yuna - Final Edition (Jpn) - 1998 - Hudson - - - - - - - - - - - + Gallop Racer 2000 (Jpn) + 2000 + Tecmo + + + + + + + + + + + + + + Gensou Maden Saiyuuki - Harukanaru Nishi e (Jpn) + 2002 + J-Wing + + + + + + + + + + + + Goo! Goo! Soundy (Jpn) + 1999 + Konami + + + + + + + + + + + + + + Googootrops (Jpn) + 1999 + Enix + + + + + + + + + + + + + + Gokuu Densetsu - Magic Beast Warriors (Jpn) + 1995 + Allumer + + + + + + + + + + + + + + Fuuun Gokuu Ninden (Jpn) + 1996 + AiCOM + + + + + + + + + + + - Gokuu Densetsu - Magic Beast Warriors (Jpn) - 1995 - Allumer - - - - - - - - - - - - Goo! Goo! Soundy (Jpn) - 1999 - Konami - - - + Choujin Gakuen Gowcaizer (Jpn) + 1997 + Urban Plant + + + - + - + - The Great Battle VI (Jpn) + G-Police (Jpn) + 1998 + SCEI + + + + + + + + + + + + + + + + + + + Chou-Kousoku Grandoll (Jpn) 1997 - Banpresto - - - + Bandai + + + - + @@ -43030,45 +42675,6 @@ A few comments on these: - - - Groove Adventure Rave - Mikan no Hiseki (Jpn) - 2002 - Konami - - - - - - - - - - - - - - Groove Adventure Rave - Yuukyuu no Kizuna (Jpn) - 2002 - Konami - - - - - - - - - - - - Googootrops (Jpn) - 1999 - Enix - - - - - - - - - - - - - - - Guilty Gear (Jpn) - 1998 - Arc System Works - - - - - - - - - - - - Gunbare! Game Tengoku - The Game Paradise 2 (Jpn) - 1998 - Jaleco - - - - - - - - - - - + + + Ridegear Guybrave II (Jpn) + 1998 + Axela + + + + + + + + + + + + + + + + - Hakaioh - King of Crusher (Jpn) - 1998 - FAB Communications - - - - - - - - - - - @@ -43404,6 +42962,26 @@ A few comments on these: + + + Ninpu Sentai Harikenger (Jpn) + 2002 + Bandai + + + + + + + + + + + - Harukanaru Toki no Naka de (Jpn) - 2000 - Koei - - - - - - - - - - - + Harukanaru Toki no Naka de (Jpn) + 2000 + Koei + + + + + + + + + + + - Heaven's Gate (Jpn) - 1996 - Atlus - - - + Heiwa Parlor! Pro Dolphin Ring Special (Jpn) + 2000 + Nihon Telenet + + + - + + + + + + + + Heiwa Parlor! Pro Lupin Sansei Special (Jpn) + 2000 + Nihon Telenet + + + + + + + @@ -43576,44 +43173,6 @@ A few comments on these: - - - Heiwa Parlor! Pro Dolphin Ring Special (Jpn) - 2000 - Nihon Telenet - - - - - - - - - - - - - - Heiwa Parlor! Pro Lupin Sansei Special (Jpn) - 2000 - Nihon Telenet - - - - - - - - - - - + Hello Charlie!! (Jpn) + 1998 + Enix + + + + + + + + + + + + + + Hello Kitty's Cube De Cute (Jpn) + 1998 + Culture Publishing + + + + + + + + + + + - Hello Kitty's Cube De Cute (Jpn) - 1998 - Culture Publishing - - - - - - - - - - - - High School of Blitz (Jpn) - 1999 - MediaWorks - - - + Houma Hunter Lime - Special Collection Vol.1 (Jpn) + 1994 + Asmik + + + - + @@ -43851,33 +43429,6 @@ A few comments on these: - - - - Himitsu Sentai Metamor V Deluxe (Jpn, Disc 1 Only) - 1998 - Mycom - - - - - - - - - - - - - Hoshi no Oka Gakuen Monogatari - Gakuensai (Jpn) - 1998 - MediaWorks - - - - - - - - - - - - Houma Hunter Lime - Special Collection Vol.1 (Jpn) - 1994 - Asmik - - - + High School of Blitz (Jpn) + 1999 + MediaWorks + + + - + + + + + + + + Heaven's Gate (Jpn) + 1996 + Atlus + + + + + + + @@ -44125,25 +43676,6 @@ A few comments on these: - - - Hyakujuu Sentai Gaoranger (Jpn) - 2001 - Bandai - - - - - - - - - - - - Idol Janshi Suchie-Pai II Limited (Jpn) - 1996 - Jaleco - - - + Baseball Simulation - ID Pro Yakyuu (Jpn) + 2001 + Konami + + + - + - - - - - - - - - - - + - + - Idol Janshi Suchie-Pai Limited (Jpn) - 1995 - Jaleco - - - + Minna Atsumore! Igo Kyoushitsu (Jpn) + 2003 + I.Magic. + + + - + @@ -44409,6 +43925,26 @@ A few comments on these: + + + + Ucchannanchan no Honoo no Challenger - Denryu Iraira-Bou Returns (Jpn) + 1998 + Saurus + + + + + + + + + + + + Shiritsu Justice Gakuen - Legion of Heroes (Jpn) + 1998 + Capcom + + + + + + + + + + + + + + + + + + + Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Jpn) + 1999 + Capcom + + + + + + + + + + + - Assault Suits Valken 2 - Juusou Kihei Valken 2 (Jpn) - 1999 - Masaya - - - + Fighting Illusion - K-1 Grand Prix '98 (Jpn) + 1998 + Xing + + + - + @@ -44607,25 +44189,6 @@ A few comments on these: - - - Kaikan Phrase - Datenshi Kourin (Jpn) - 2000 - Enix - - - - - - - - - - - - Kaisoku Tenshi - The Rapid Angel (Jpn) - 1998 - Techno Soleil - - - + Kaikan Phrase - Datenshi Kourin (Jpn) + 2000 + Enix + + + - + @@ -44702,6 +44265,44 @@ A few comments on these: + + + Kids Station - Kamen Rider Heroes (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Kamen Rider Agito (Jpn) + 2001 + Bandai + + + + + + + + + + + - Kamen Rider Agito (Jpn) - 2001 - Bandai - - - - - - - - - - - - Kato Hifumi Kudan - Shogi Club (Jpn, Honkakuha de 1300Yen Series) + Chou Hatsumei Boy Kanipan - Hirameki Wonderland (Jpn) 1999 - Hect - - - + Taito + + + - + @@ -44991,6 +44573,26 @@ A few comments on these: + + + + Rami-Chan no Ooedo Surogoku - Keiou Yuugekitai Gaiden (Jpn) + 1998 + Victor Interactive Software + + + + + + + + + + + - Kidou Keisatsu Patlabor - Mobile Police Patlabor - Game Edition (Jpn) - 2000 - Bandai - - - - - - - - - - - - - - Kidou Senshi Z-Gundam (Jpn, Demo) - 1997 - Bandai - - - - - - - - - - - - Kids Station - Bishoujo Senshi Sailormoon World - Chibiusa to Tanoshii Mainichi (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Kids Station - Digimon Park (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Kids Station - Kamen Rider Heroes (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Kids Station - Motto! Oja Majo Dorami - MAHO-dou Smile Party (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Kids Station - Soreike! Anpanman 2 - Anpanman to Daibouken! (Jpn) - 2001 - Bandai - - - - - - - - - - - + Hakaioh - King of Crusher (Jpn) + 1998 + FAB Communications + + + + + + + + + + + + + + Muscle Ranking - Kinniku Banzuke Vol.2 - Aratanaru Genkai e no Chousen! (Jpn) + 2000 + Konami + + + + + + + + + + + + + + Kisya de Go! (Jpn) + 2000 + Taito + + + + + + + + + + + + + + Kitchen Panic (Jpn) + 1998 + Panther Software + + + + + + + + + + + + + + Kochira Katsushikaku Kameari Kouenzen Hashutsujo - High Tech Building Shinkou Soshi Sakusen! no Ma (Jpn) + 1997 + Bandai + + + + + + + + + + + + + + Knight & Baby (Jpn) + 1998 + Tamsoft + + + + + + + + + + + - Kisya de Go! (Jpn) - 2000 - Taito - - - - - - - - - - - - - - Kitchen Panic (Jpn) - 1998 - Panther Software - - - - - - - - - - - - - - Knight & Baby (Jpn) - 1998 - Tamsoft - - - - - - - - - - - - - - Kochira Katsushikaku Kameari Kouenzen Hashutsujo - High Tech Building Shinkou Soshi Sakusen! no Ma (Jpn) - 1997 - Bandai - - - - - - - - - - - - Konami Antiques - MSX Collection Vol.1 (Jpn) - 1997 - Konami - - - - - - - - - - - - - - Konami Antiques - MSX Collection Vol.2 (Jpn) - 1998 - Konami - - - - - - - - - - - - Kosodate Quiz Motto My Angel (Jpn) - 1999 - Namco - - - - - - - - - - - - - - Kotetsu Reiki - Steel Dom (Jpn) - 1996 - TecnoSoft - - - - - - - - - - - - - - KoukλoθεαtÏo - Yuukyuu no Hitomi (Jpn) - 1999 - Sunsoft - - - - - - - - - - - + KoukλoθεαtÏo - Yuukyuu no Hitomi (Jpn) + 1999 + Sunsoft + + + + + + + + + + + + Kuubo Senki (Jpn) + 1999 + Unbalance + + + + + + + + + + + - Ku-Ron Jo - Fukyuu Ban (Jpn) - 2000 - Media Rings - - - - - - - - - - - + Ku-Ron Jo - Fukyuu Ban (Jpn) + 2000 + Media Rings + + + + + + + + + + + - Kuubo Senki (Jpn) - 1999 - Unbalance - - - - - - - - - - - - Lagnacure (Jpn) - 1997 - Sony Music Entertainment - - - - - - - - - - - + Lagnacure (Jpn) + 1997 + Sony Music Entertainment + + + + + + + + + + + + Libero Grande 2 (Jpn) + 2000 + Namco + + + + + + + + + + + - Libero Grande 2 (Jpn) + Lode Runner 2 (Jpn, SuperLite 1500 Series) 2000 - Namco - - - + Success + + + - + - + - Linda³ Again (Jpn) + Lode Runner Extra (Jpn) 1997 - Sony - - - + Patra + + + - - - - - - - - Ling Rise (Jpn) - 1999 - Epoch - - - - - - - + @@ -46158,40 +45596,40 @@ A few comments on these: - + - Lode Runner 2 (Jpn, SuperLite 1500 Series) - 2000 - Success - - - + Linda³ Again (Jpn) + 1997 + Sony + + + - + - + - Lode Runner Extra (Jpn) - 1997 - Patra - - - + Ling Rise (Jpn) + 1999 + Epoch + + + - + @@ -46517,44 +45955,6 @@ A few comments on these: - - - The Maestro Music (Japan, with Baton Stick) - 2000 - Global A - - - - - - - - - - - - - - The Maestro Music - Merry Christmas - Append Disc (Jpn) - 2000 - Global A - - - - - - - - - - - - Magical Tetris Challenge featuring Mickey Mouse (Jpn) - 1999 - Capcom - - - - - - - - - - - - - - Mahjong Yarouze! (Jpn) - 1999 - Konami - - - - - - - - - - - + + + Rikujou Boueitai Mao-chan (Jpn, Deluxe Pack) + 2003 + Marvelous + + + + + + + + + + + - Marvel Super Heroes (Jpn) - 1997 - Capcom - - - - - - - - - - - - - - Marvel Super Heroes vs. Street Fighter - EX Edition (Jpn) - 1999 - Capcom - - - - - - - - - - - - - - Marvel vs. Capcom - Clash of Super Heroes - EX Edition (Jpn) - 1999 - Capcom - - - - - - - - - - - - - - Hiroki Matsukata Presents - World Fishing (Jpn, BPS The Choice) - 1999 - BPS - - - - - - - - - - - - - - Matsumoto Leiji - Story of Galaxy Express 999 (Jpn) - 2001 - Banpresto - - - - - - - - - - - - - - - - + Meitantei Conan - Saikou no Aibou (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Meitantei Conan - Trick Trick Vol.1 (Jpn) + 2003 + Bandai + + + + + + + + + + + + + + Medarot R - Parts Collection (Jpn) + 2000 + Imageneer + + + + + + + + + + + - Medarot R - Parts Collection (Jpn) - 2000 - Imageneer - - - + Shinseiden Megaseed Fukkatsu-Hen (Jpn) + 1997 + Banpresto + + + - + @@ -47038,44 +46373,6 @@ A few comments on these: - - - Meitantei Conan - Saikou no Aibou (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Meitantei Conan - Trick Trick Vol.1 (Jpn) - 2003 - Bandai - - - - - - - - - - - - Meta-Ph-List μ.χ.2297 (Jpn) - 1997 - A.D.M - - - - - - - - - - - - - - - - + + + Himitsu Sentai Metamor V Deluxe (Jpn, Disc 1 Only) + 1998 + Mycom + + + + + + + + + + + + + + + Meta-Ph-List μ.χ.2297 (Jpn) + 1997 + A.D.M + + + + + + + + + + + + + + + + + Monster Farm - Battle Card Professional (Jpn) + 2000 + Tecmo + + + + + + + + + + + - Mini Moni. Shaker & Tambourine! Dapyon! (Jpn) - 2002 - Sega - - - + Money Idol Exchanger (Jpn) + 1998 + Athena + + + - + @@ -47344,6 +46697,25 @@ A few comments on these: + + + Mini Moni. Shaker & Tambourine! Dapyon! (Jpn) + 2002 + Sega + + + + + + + + + + + - Minna Atsumore! Igo Kyoushitsu (Jpn) - 2003 - I.Magic. - - - - - - - - - - - + Pro Mahjong Kiwame Plus (Jpn) + 1996 + Athena + + + + + + + + + + + + + + Pro Mahjong Kiwame Tengensenhen (Jpn) + 1999 + Athena + + + + + + + + + + + + + + Mahjong Yarouze! (Jpn) + 1999 + Konami + + + + + + + + + + + + + + Kosodate Quiz Motto My Angel (Jpn) + 1999 + Namco + + + + + + + + + + + - Money Idol Exchanger (Jpn) - 1998 - Athena - - - - - - - - - - - - Monster Farm - Battle Card Professional (Jpn) - 2000 - Tecmo - - - - - - - - - - - - - - Kaibutsu Para-Dice (Jpn) - 1997 - Make Software - - - - - - - - - - - - - - Mori no Oukoku - Kingdom of Forest (Jpn) + Hole of the Legend Monster - Densetsu Kemono no Ana - Monster Complete World Ver.2 (Jpn) 1999 - Asmik Ace - - - + Idea Factory + + + - + @@ -47601,6 +46963,25 @@ A few comments on these: + + + Mori no Oukoku - Kingdom of Forest (Jpn) + 1999 + Asmik Ace + + + + + + + + + + + - Muscle Ranking - Kinniku Banzuke Vol.2 - Aratanaru Genkai e no Chousen! (Jpn) - 2000 - Konami - - - + Marvel Super Heroes (Jpn) + 1997 + Capcom + + + - + + + + + + + + Marvel Super Heroes vs. Street Fighter - EX Edition (Jpn) + 1999 + Capcom + + + + + + + + + + + + + + The Maestro Music (Japan, with Baton Stick) + 2000 + Global A + + + + + + + + + + + + + + The Maestro Music - Merry Christmas - Append Disc (Jpn) + 2000 + Global A + + + + + + + + + + + + + + Konami Antiques - MSX Collection Vol.1 (Jpn) + 1997 + Konami + + + + + + + + + + + + + + Konami Antiques - MSX Collection Vol.2 (Jpn) + 1998 + Konami + + + + + + + + + + + + + + Magical Tetris Challenge featuring Mickey Mouse (Jpn) + 1999 + Capcom + + + + + + + + + + + + + + Yagami Hiroki no Game-Taste - Munasawagi no Yokan (Jpn) + 1999 + Kodansha + + + + + + + + + + + + + + Marvel vs. Capcom - Clash of Super Heroes - EX Edition (Jpn) + 1999 + Capcom + + + + + + + @@ -47827,11 +47360,11 @@ A few comments on these: @@ -47887,6 +47420,43 @@ A few comments on these: + + + Arthur to Astaroth no Nazo Maikamura - Incredible Toons (Jpn) + 1996 + Capcom + + + + + + + + + + + - - - The Next Tetris - Deluxe DLX (Jpn) - 1999 - BPS - - - - - - - - - - - - - - - The Next Tetris (Jpn) - 1999 - Bullet Proof - - - - - - - - - - - - Ninpu Sentai Harikenger (Jpn) - 2002 - Bandai - - - - - - - - - - - + + + The Next Tetris (Jpn) + 1999 + Bullet Proof + + + + + + + + + + + + + + + The Next Tetris - Deluxe DLX (Jpn) + 1999 + BPS + + + + + + + + + + + - Olympia Yamasa - Virtua Pachi-Slot II - Jissen! Bishoujo Kouryaku Hou (Jpn) - 1997 - Map Japan - - - - - - - - - - - - One Two Smash - Tanoshii Tennis (Jpn, Honkakuha de 1300Yen Series) - 2000 - Hect - - - - - - - - - - - - Ore! Tomba (Jpn) - 1997 - Whoopee Camp - - - + Sougaku Toshi - Osaka (Jpn) + 1999 + King Records + + + - + - + + + + + + @@ -48605,6 +48125,25 @@ A few comments on these: + + + One Two Smash - Tanoshii Tennis (Jpn, Honkakuha de 1300Yen Series) + 2000 + Hect + + + + + + + + + + + - Oukyuu no Hihou - Tension (Jpn) - 1996 - VAP - - - - - - - - - - - - Pachi Pachi Saga (Jpn) - 1996 - TEN Institute - - - - - - - - - - - - - - Pachi-Slot Aruze Oukoku 5 (Jpn) - 2001 - Aruze - - - - - - - - - - - - - - Pachi-Slot Teiou - Battle Knight & Atlantis Doom (Jpn) - 2000 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Twist & Shimauta & Nankoku Monogatari (Jpn) - 2002 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 2 - Kagetsu & 2 Pair & Beaver X (Jpn) - 1999 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 3 - Sea Master X & Epsilon R & Wai Wai Pulsar 2 (Jpn) - 1999 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 6 - Kung Fu Lady & BangBang & Prelude 2 (Jpn) - 2000 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou 7 - Maker Suishou Manual 1 - Beat the Dragon 2 & Lupin Sansei & Hot Rod Queen (Jpn) - 2000 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Maker Suishou Manual 3 - I'm Angel White 2 & I'm Angel Blue 2 (Jpn) - 2001 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Maker Suishou Manual 5 - Race Queen 2 & Tomcat (Jpn) - 2001 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou Maker Suishou Manual 6 - Takarabune (Jpn) - 2001 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou - Maker Suishou Manual 7 - Trick Monster 2 (Jpn) - 2002 - Media Entertainment - - - - - - - - - - - - - - Pachi-Slot Teiou Mini - Dr. A7 (Jpn) - 1999 - Media Entertainment - - - - - - - - - - - + Shin Masoukishin - Panzer Warfare (Jpn) + 1999 + Banpresto + + + + + + + + + + + + + + Kaibutsu Para-Dice (Jpn) + 1997 + Make Software + + + + + + + + + + + + Kidou Keisatsu Patlabor - Mobile Police Patlabor - Game Edition (Jpn) + 2000 + Bandai + + + + + + + + + + + + + + + Puzzle Bobble 3 DX (Jpn) + 1997 + Taito + + + + + + + + + + + + + + + Puzzle Bobble 4 (Jpn) + 1998 + Taito + + + + + + + + + + + - Perfect Fishing - Rock Fishing (Jpn) - 2000 - Seta - - - + Pocket Fighter (Jpn) + 1998 + Capcom + + + - + @@ -49312,25 +48669,6 @@ A few comments on these: - - - Pocket Fighter (Jpn) - 1998 - Capcom - - - - - - - - - - - - Power Shovel ni Norou!! (Jpn) - 2000 - Taito - - - + Pachi Pachi Saga (Jpn) + 1996 + TEN Institute + + + - - - - - - - - Power Stakes (Jpn) - 1997 - Aques - - - - - - - - - - - - - - Power Stakes Grade 1 (Jpn) - 1997 - Aques - - - - - - - + @@ -49561,6 +48861,26 @@ A few comments on these: + + + + Action Puzzle - Prism Land (Jpn, Honkakuha de 1300Yen Series) + 2000 + HECT + + + + + + + + + + + - Pro Mahjong Kiwame Plus (Jpn) - 1996 - Athena - - - + Pachi-Slot Aruze Oukoku 5 (Jpn) + 2001 + Aruze + + + - + - + - Pro Mahjong Kiwame Tengensenhen (Jpn) + Pachi-Slot Teiou - Battle Knight & Atlantis Doom (Jpn) + 2000 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Maker Suishou Manual 3 - I'm Angel White 2 & I'm Angel Blue 2 (Jpn) + 2001 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Maker Suishou Manual 5 - Race Queen 2 & Tomcat (Jpn) + 2001 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou Maker Suishou Manual 6 - Takarabune (Jpn) + 2001 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Maker Suishou Manual 7 - Trick Monster 2 (Jpn) + 2002 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou Mini - Dr. A7 (Jpn) 1999 - Athena - - - + Media Entertainment + + + - + - + - Pro Wrestling Sengokuden - Hyper Tag Match (Jpn) - 1997 - KSS - - - + Pachi-Slot Teiou 2 - Kagetsu & 2 Pair & Beaver X (Jpn) + 1999 + Media Entertainment + + + - + + + + + + + + Pachi-Slot Teiou 3 - Sea Master X & Epsilon R & Wai Wai Pulsar 2 (Jpn) + 1999 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou 6 - Kung Fu Lady & BangBang & Prelude 2 (Jpn) + 2000 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou 7 - Maker Suishou Manual 1 - Beat the Dragon 2 & Lupin Sansei & Hot Rod Queen (Jpn) + 2000 + Media Entertainment + + + + + + + + + + + + + + Pachi-Slot Teiou - Twist & Shimauta & Nankoku Monogatari (Jpn) + 2002 + Media Entertainment + + + + + + + + + + + + + + Power Stakes (Jpn) + 1997 + Aques + + + + + + + + + + + + + + Power Stakes Grade 1 (Jpn) + 1997 + Aques + + + + + + + @@ -49756,42 +49298,40 @@ A few comments on these: - - + - Puzzle Bobble 3 DX (Jpn) + Pro Wrestling Sengokuden - Hyper Tag Match (Jpn) 1997 - Taito - - - + KSS + + + - + - - + - Puzzle Bobble 4 (Jpn) - 1998 + Power Shovel ni Norou!! (Jpn) + 2000 Taito - - - + + + - + @@ -49898,7 +49438,7 @@ A few comments on these: - + - Rami-Chan no Ooedo Surogoku - Keiou Yuugekitai Gaiden (Jpn) - 1998 - Victor Interactive Software - - - + Chippoke Ralph no Daibouken - The Adventure of Little Ralph (Jpn) + 1999 + New + + + - + @@ -50039,22 +49578,60 @@ A few comments on these: - - + - Ray Tracers (Jpn) - 1997 - Taito - - - + Kaisoku Tenshi - The Rapid Angel (Jpn) + 1998 + Techno Soleil + + + - + + + + + + + + Groove Adventure Rave - Mikan no Hiseki (Jpn) + 2002 + Konami + + + + + + + + + + + + + + Groove Adventure Rave - Yuukyuu no Kizuna (Jpn) + 2002 + Konami + + + + + + + @@ -50080,21 +49657,21 @@ A few comments on these: - + - Ready Maid (Jpn) - 2002 - Princess - - - + Ray Tracers (Jpn) + 1997 + Taito + + + - + @@ -50127,6 +49704,46 @@ A few comments on these: + + + + Recipro Heat 5000 (Jpn) + 1997 + Xing + + + + + + + + + + + + + + + Ready Maid (Jpn) + 2002 + Princess + + + + + + + + + + + - - - Recipro Heat 5000 (Jpn) - 1997 - Xing - - - - - - - - - - - - - - Ridegear Guybrave II (Jpn) - 1998 - Axela - - - - - - - - - - - - - - - - - - - - Rikujou Boueitai Mao-chan (Jpn, Deluxe Pack) - 2003 - Marvelous - - - - - - - - - - - + Roommate - Inoue Ryoko (Jpn) + 1999 + Datam Polystar + + + + + + + + + + + - Roommate - Inoue Ryoko (Jpn) - 1999 - Datam Polystar - - - + Perfect Fishing - Rock Fishing (Jpn) + 2000 + Seta + + + - + @@ -50395,21 +49961,40 @@ A few comments on these: - + - S.Q. - Sound Qube (Jpn) - 1998 - Human - - - + Bishoujo Senshi Sailormoon Super S - Shin Shuyaku Soudatsusen (Jpn, Genteiban) + 1996 + Angel + + + - + + + + + + + + Kids Station - Bishoujo Senshi Sailormoon World - Chibiusa to Tanoshii Mainichi (Jpn) + 2001 + Bandai + + + + + + + @@ -50528,6 +50113,27 @@ A few comments on these: + + + + + Samurai Spirits - Zankurou Musouken (Jpn, PlayStation the Best) + 1997 + SNK + + + + + + + + + + + - - + - Samurai Spirits - Zankurou Musouken (Jpn, PlayStation the Best) + Shinsetsu Samurai Spirits - Bushidou Retsuden (Jpn) 1997 SNK - - - + + + - + @@ -50645,25 +50252,6 @@ A few comments on these: - - - Sangokushi Returns (Jpn) - 1997 - Koei - - - - - - - - - - - + Sangokushi Returns (Jpn) + 1997 + Koei + + + + + + + + + + + - Saru! Get You! (Jpn) - 1999 - SCEI - - - + Super Adventure Rockman (Jpn) + 1998 + Capcom + + + - + - + + + + + + + + + + + @@ -50797,59 +50423,249 @@ A few comments on these: - + - SD Gundam Eiyuu Den Daikessen!! - Kishi vs. Musha (Jpn) + Simple Characters 2000 Series Vol.02 - Afro Ken - The Puzzle (Jpn) 2001 Bandai - - - + + + - + - + - SD Gundam G Generation-F (Jpn, Limited Edition) - 2000 + Simple Characters 2000 Series Vol.03 - Kamen Rider - The Bike Race (Jpn) + 2001 Bandai - - - + + + - + - + - + + + + + Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda (Jpn) + 2001 + Bandai + + + + + - + - + + + + + Simple Characters 2000 Series vol.05 - Highschool Kimengumi - The Table Hockey (Jpn) + 2001 + Bandai + + + + + - + + + + + + + + Simple Characters 2000 Series Vol.06 - Dokonjou Gaeru - The Mahjong (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Simple Characters 2000 Series vol.07 - Ikkyuu-san - The Quiz (Jpn) + 2002 + Bandai + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.09 - Tsuri Kichi Sanpei - The Tsuri (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku - The Dodgeball (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.12 - Kidou Butouden G Gundam - The Battle (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series vol.13 - Kidou Senki Gundam W - The Battle (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.14 - Nante Tantei Idol - The Jigsaw Puzzle (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series vol.15 - Cyborg 009 - The Block Kuzushi (Jpn) + 2002 + Bandai / D3 + + + + + + + + + + + + + + Simple Characters 2000 Series Vol.16 - Ganba no Bouken - The Puzzle Action (Jpn) + 2003 + Bandai / D3 + + + + + + + @@ -50908,6 +50724,63 @@ A few comments on these: + + + SD Gundam G Generation-F (Jpn, Limited Edition) + 2000 + Bandai + + + + + + + + + + + + + + + + + + + + + + + + SD Gundam Eiyuu Den Daikessen!! - Kishi vs. Musha (Jpn) + 2001 + Bandai + + + + + + + + + + + - Square's Preview 5 (Jpn, Seiken Densetsu Demo) - 1999 - Squaresoft - - - - - - - - - + Super Football Champ (Jpn) + 1996 + Taito + + + + + + + + + + + + + + Street Fighter Collection (Jpn) + 1997 + Capcom + + + + + + + + + + + + + + + + - Shin Masoukishin - Panzer Warfare (Jpn) - 1999 - Banpresto - - - - - - - - - - - - Shin SD Sengokuden - Kidou Musha Taisen (Jpn, Limited Edition) - 1996 - Bandai - - - - - - - - - - - - - - - Shin Theme Park (Jpn) - 1997 - Electronic Arts Victor - - - - - - - - - - - - Shinseiden Megaseed Fukkatsu-Hen (Jpn) - 1997 - Banpresto - - - + Shin SD Sengokuden - Kidou Musha Taisen (Jpn, Limited Edition) + 1996 + Bandai + + + - + - + - Shinsetsu Samurai Spirits - Bushidou Retsuden (Jpn) - 1997 - SNK - - - + Simple 1500 Series Hello Kitty vol.01 - Hello Kitty Bowling (Jpn) + 2001 + D3 Publisher + + + - + - + - Shiritsu Justice Gakuen - Legion of Heroes (Jpn) - 1998 - Capcom - - - + Simple 1500 Series Hello Kitty Vol.02 - Hello Kitty Illust Puzzle (Jpn) + 2001 + D3 Publisher + + + - + - - - - - - + - + - Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Jpn) + Simple 1500 Series Hello Kitty vol.03 - Hello Kitty Block Kuzushi (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + Simple 1500 Series Hello Kitty Vol.04 - Hello Kitty Trump (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + Kato Hifumi Kudan - Shogi Club (Jpn, Honkakuha de 1300Yen Series) 1999 - Capcom - - - + Hect + + + - + @@ -51414,11 +51357,11 @@ A few comments on these: @@ -51460,6 +51403,709 @@ A few comments on these: + + + Simulation Zoo - Sekaiichi no Doubutsuen o Tsukurou (Jpn) + 1996 + SoftBank + + + + + + + + + + + + + + Sister Princess - Pure Stories (Jpn) + 2001 + MediaWorks + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai -2000 Edition- (Jpn) + 2000 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.03 - Seimei Handan (Jpn) + 2000 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.04 - Ryouri (Jpn) + 2000 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.05 - Kusuri no Jiten - Pill Book 2001 Edition (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.06 - Cocktail no Recipe (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.07 - Tanoshiku Manabu Unten Menkyo (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.08 - 1-Jikan de Wakaru Kabushiki Toushi (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.09 - Watashi Style no Aromatherapy (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.10 - Tarot Uranai (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.11 - Katei de Dekiru Tsubo Shiatsu (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.12 - Katei no Igaku (Jpn) + 2001 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.13 - Shinri Game - Soreike X Kokoroji (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.14 - Kurashi no Manner (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata - Sekai no Inu Catalog (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata - Sekai no Neko Catalo (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.17 - Planetarium (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + + Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Keitei ni Challenge (Jpn) + 2002 + D3 Publisher + + + + + + + + + + + + + + Slap Happy Rhythm Busters (Jpn) + 2000 + ASK + + + + + + + + + + + + + + Super Live Stadium (Jpn) + 1998 + Aques + + + + + + + + + + + + + + Kids Station - Motto! Oja Majo Dorami - MAHO-dou Smile Party (Jpn) + 2001 + Bandai + + + + + + + + + + + + + + Snatcher (Jpn) + 1996 + Konami + + + + + + + + + + + + + + S.Q. - Sound Qube (Jpn) + 1998 + Human + + + + + + + + + + + + + + Snobow Kids Plus (Jpn) + 1999 + ASCII + + + + + + + + + + + + + + Soukyugurentai - Oubushustugeki (Jpn) + 1997 + Data East + + + + + + + + + + + + + + Gakuen Sentai Solblast (Jpn) + 1999 + Creative Heads + + + + + + + + + + + + + + Sonata (Jpn) + 1999 + T&E Soft + + + + + + + + + + + + + + + + + + + Sotsugyou Crossworld (Jpn) + 1996 + Hearty Robin + + + + + + + + + + + + + + Space Invaders X (Jpn) + 2000 + Taito + + + + + + + + + + + + + + Spectral Blade (Jpn) + 1999 + Idea Factory + + + + + + + + + + + + + + Speed King (Jpn) + 1996 + Konami + + + + + + + + + + + + + + Speed Power Gunbike (Jpn) + 1998 + Sony Music Entertainment + + + + + + + + + + + + + + Spider-Man (Jpn) + 2001 + Success + + + + + + + + + + + - - - Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai -2000 Edition- (Jpn) - 2000 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.03 - Seimei Handan (Jpn) - 2000 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.04 - Ryouri (Jpn) - 2000 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.05 - Kusuri no Jiten - Pill Book 2001 Edition (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.06 - Cocktail no Recipe (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.07 - Tanoshiku Manabu Unten Menkyo (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.08 - 1-Jikan de Wakaru Kabushiki Toushi (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.09 - Watashi Style no Aromatherapy (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.10 - Tarot Uranai (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.11 - Katei de Dekiru Tsubo Shiatsu (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.12 - Katei no Igaku (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.13 - Shinri Game - Soreike X Kokoroji (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.14 - Kurashi no Manner (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata - Sekai no Inu Catalog (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata - Sekai no Neko Catalo (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.17 - Planetarium (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - - Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Keitei ni Challenge (Jpn) - 2002 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty vol.01 - Hello Kitty Bowling (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty Vol.02 - Hello Kitty Illust Puzzle (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty vol.03 - Hello Kitty Block Kuzushi (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple 1500 Series Hello Kitty Vol.04 - Hello Kitty Trump (Jpn) - 2001 - D3 Publisher - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.02 - Afro Ken - The Puzzle (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.03 - Kamen Rider - The Bike Race (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series vol.05 - Highschool Kimengumi - The Table Hockey (Jpn) - 2001 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.06 - Dokonjou Gaeru - The Mahjong (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series vol.07 - Ikkyuu-san - The Quiz (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.09 - Tsuri Kichi Sanpei - The Tsuri (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku - The Dodgeball (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.12 - Kidou Butouden G Gundam - The Battle (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series vol.13 - Kidou Senki Gundam W - The Battle (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.14 - Nante Tantei Idol - The Jigsaw Puzzle (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series vol.15 - Cyborg 009 - The Block Kuzushi (Jpn) - 2002 - Bandai / D3 - - - - - - - - - - - - - - Simple Characters 2000 Series Vol.16 - Ganba no Bouken - The Puzzle Action (Jpn) - 2003 - Bandai / D3 - - - - - - - - - - - - - - Simulation Zoo - Sekaiichi no Doubutsuen o Tsukurou (Jpn) - 1996 - SoftBank - - - - - - - - - - - - - - Sister Princess - Pure Stories (Jpn) - 2001 - MediaWorks - - - - - - - - - - - - - - Slap Happy Rhythm Busters (Jpn) - 2000 - ASK - - - - - - - - - - - - - - Snatcher (Jpn) - 1996 - Konami - - - - - - - - - - - - - - Snobow Kids Plus (Jpn) - 1999 - ASCII - - - - - - - - - - - - - - Sonata (Jpn) - 1999 - T&E Soft - - - - - - - - - - - - - - - - - - - Sotsugyou Crossworld (Jpn) - 1996 - Hearty Robin - - - - - - - - - - - - - - Sougaku Toshi - Osaka (Jpn) - 1999 - King Records - - - - - - - - - - - - - - - - - - - Soukyugurentai - Oubushustugeki (Jpn) - 1997 - Data East - - - - - - - - - - - - - - Space Invaders X (Jpn) - 2000 - Taito - - - - - - - - - - - - - - Spectral Blade (Jpn) - 1999 - Idea Factory - - - - - - - - - - - - - - Speed King (Jpn) - 1996 - Konami - - - - - - - - - - - - - - Speed Power Gunbike (Jpn) - 1998 - Sony Music Entertainment - - - - - - - - - - - - - - Spider-Man (Jpn) - 2001 - Success - - - - - - - - - - - - Street Fighter Collection (Jpn) - 1997 - Capcom - - - + Kotetsu Reiki - Steel Dom (Jpn) + 1996 + TecnoSoft + + + - + - + - + + + + + + Shin Theme Park (Jpn) + 1997 + Electronic Arts Victor + + + + + - + @@ -53006,11 +52616,11 @@ A few comments on these: @@ -53019,6 +52629,60 @@ A few comments on these: + + + Idol Janshi Suchie-Pai II Limited (Jpn) + 1996 + Jaleco + + + + + + + + + + + + + + + + + + + + + + + + Idol Janshi Suchie-Pai Limited (Jpn) + 1995 + Jaleco + + + + + + + + + + + - Super Adventure Rockman (Jpn) - 1998 - Capcom - - - - - - - - - - - - - - - - - - - - - - - - Super Football Champ (Jpn) - 1996 - Taito - - - - - - - - - - - - - - Super Live Stadium (Jpn) - 1998 - Aques - - - - - - - - - - - - - - Susume! Kaizoku - Be Pirates! (Jpn) - 1998 - Artdink - - - - - - - - - - - - - - T Kara Hajimaru Monogatari (Jpn) - 1998 - Jaleco - - - - - - - - - - - - - - Tactical Armor Custom Gasaraki (Jpn) - 2000 - Bandai - - - - - - - - - - - - Taiho Shichauzo! - You're Under Arrest (Jpn) - 2001 - Pioneer - - - + Tatsunoko Fight (Jpn) + 2000 + Takara + + + - + - - - - - - + - + - Tales of Fandom Vol.1 (Jpn, Cless Version) - 2002 - Namco - - - + Tenant Wars (Jpn) + 1998 + KID + + + - + + + + + + + + Tenchi Muyou! Toukou Muyou (Jpn) + 1996 + Xing + + + + + + + + + + + + + + + + + + + Tenchi wo Kurau II - Sekiheki no Tatakai (Jpn) + 1996 + Capcom + + + + + + + + + + + + + + Ten Made Jack - Odoroki Manenoki Daitoubou!! (Jpn) + 2000 + Enix + + + + + + + + + + + + + + Tennis Arena (Jpn) + 1998 + Ubi Soft + + + + + + + + + + + + + + Tensen Nyannyan - Gekijou-ban (Jpn) + 1998 + Time Point + + + + + + + + + + + + + + Oukyuu no Hihou - Tension (Jpn) + 1996 + VAP + + + + + + + + + + + + + + Tetris X (Jpn) + 1996 + BPS + + + + + + + + + + + + + + Thunder Force V - Perfect System (Jpn) + 1998 + TechnoSoft + + + + + + + + + + + + + + TFX - Tactical Fighter Experiment (Jpn) + 1996 + Imageneer + + + + + + + + + + + + + Time Gal & Ninja Hayate (Jpn) + 1996 + Taito + + + + + + + + + + + + + + + + + + + + + That's QT (Jpn) + 2000 + Koei + + + + + + + + + + + + + + Theme Hospital (Jpn) + 1998 + Electronic Arts + + + + + + + + + + + + + + Tiny Bullets (Jpn) + 2000 + SCEI + + + + + + + @@ -53455,399 +53247,44 @@ A few comments on these: - + - Tatsunoko Fight (Jpn) - 2000 - Takara - - - - - - - - - - - - - - Ten Made Jack - Odoroki Manenoki Daitoubou!! (Jpn) - 2000 - Enix - - - - - - - - - - - - - - Tenant Wars (Jpn) + T Kara Hajimaru Monogatari (Jpn) 1998 - KID - - - + Jaleco + + + - + - + + - Tenchi Muyou! Toukou Muyou (Jpn) - 1996 - Xing - - - - - - - - - - - - - - - - - - - Tenchi wo Kurau II - Sekiheki no Tatakai (Jpn) - 1996 - Capcom - - - + Toukidenshou - Angel Eyes (Jpn) + 1997 + Tecmo + + + - - - - - - - - Tennis Arena (Jpn) - 1998 - Ubi Soft - - - - - - - - - - - - - - Tensen Nyannyan - Gekijou-ban (Jpn) - 1998 - Time Point - - - - - - - - - - - - - - Tenshi no Shippo (Jpn) - 2003 - Bandai - - - - - - - - - - - - - - Tetris X (Jpn) - 1996 - BPS - - - - - - - - - - - - - - TFX - Tactical Fighter Experiment (Jpn) - 1996 - Imageneer - - - - - - - - - - - - - That's QT (Jpn) - 2000 - Koei - - - - - - - - - - - - - - Theme Hospital (Jpn) - 1998 - Electronic Arts - - - - - - - - - - - - - - Thunder Force V - Perfect System (Jpn) - 1998 - TechnoSoft - - - - - - - - - - - - - - Time Gal & Ninja Hayate (Jpn) - 1996 - Taito - - - - - - - - - - - - - - - - - - - - - Tiny Bullets (Jpn) - 2000 - SCEI - - - - - - - - - - - - - - To Heart (Jpn) - 1999 - Aqua Plus - - - - - - - - - - - - - - - - - - - Toaplan Shooting Battle 1 (Jpn) - 1996 - Banpresto - - - - - - - - - - - - - - - Toca Touring Car Championship (Jpn) - 1998 - Upstar - - - - - - - + @@ -54013,6 +53450,135 @@ A few comments on these: + + + Tenshi no Shippo (Jpn) + 2003 + Bandai + + + + + + + + + + + + + + Tales of Fandom Vol.1 (Jpn, Cless Version) + 2002 + Namco + + + + + + + + + + + + + + To Heart (Jpn) + 1999 + Aqua Plus + + + + + + + + + + + + + + + + + + + Toaplan Shooting Battle 1 (Jpn) + 1996 + Banpresto + + + + + + + + + + + + + + + Toca Touring Car Championship (Jpn) + 1998 + Upstar + + + + + + + + + + + + Gekitotsu Toma L'Arc - Tomarunner vs. L'Arc~en~Ciel (Jpn) + 2000 + Sony + + + + + + + + + + + + + + Gekisou Tomarunner (Jpn) + 1999 + SCEI + + + + + + + + + + + + + + Ore! Tomba (Jpn) + 1997 + Whoopee Camp + + + + + + + + + + + - - - Toukidenshou - Angel Eyes (Jpn) - 1997 - Tecmo - - - - - - - - - - - @@ -54333,47 +53933,6 @@ A few comments on these: - - - - TV Animation X - Unmei no Tatakai (Jpn) - 2002 - Bandai - - - - - - - - - - - - - - - Twin Goddesses (Jpn) - 1994 - PolyGram - - - - - - - - - - - + + + Twin Goddesses (Jpn) + 1994 + PolyGram + + + + + + + + + + + - - - Ucchannanchan no Honoo no Challenger - Denryu Iraira-Bou Returns (Jpn) - 1998 - Saurus - - - - - - - - - - - + Bokujyou Keieiteki Board Game Umapoly (Jpn) + 1999 + Konami + + + + + + + + + + + + Taiho Shichauzo! - You're Under Arrest (Jpn) + 2001 + Pioneer + + + + + + + + + + + + + + + + - + - V-Tennis 2 (Jpn) - 1996 - Tonkin House - - - + Assault Suits Valken 2 - Juusou Kihei Valken 2 (Jpn) + 1999 + Masaya + + + - + @@ -54765,42 +54369,22 @@ A few comments on these: - - + + - Victory Spike (Jpn) + Vermin Kids (Jpn) 1996 - Imagineer - - - + Electronic Arts + + + - - - - - - - - - Victory Zone - Real Pachinko Simulator (Jpn) - 1995 - SCEI - - - - - - - + @@ -54825,42 +54409,22 @@ A few comments on these: - - + + - Virtual Kyoutei '98 (Jpn) - 1998 - Nihon Bussan - - - + Victory Zone - Real Pachinko Simulator (Jpn) + 1995 + SCEI + + + - - - - - - - - - Virtual Pro Wrestling (Jpn) - 1996 - Asmik Ace - - - - - - - + @@ -54886,22 +54450,21 @@ A few comments on these: - + - The Vision of Escaflowne (Jpn, Limited Edition) - 1997 - Bandai - - - + Virtual Kyoutei '98 (Jpn) + 1998 + Nihon Bussan + + + - + @@ -54926,6 +54489,123 @@ A few comments on these: + + + Soukou Kihei Votoms - Lightning Slash (Jpn) + 1999 + Takara + + + + + + + + + + + + + + Olympia Yamasa - Virtua Pachi-Slot II - Jissen! Bishoujo Kouryaku Hou (Jpn) + 1997 + Map Japan + + + + + + + + + + + + + + + Virtual Pro Wrestling (Jpn) + 1996 + Asmik Ace + + + + + + + + + + + + + + + Victory Spike (Jpn) + 1996 + Imagineer + + + + + + + + + + + + + + + V-Tennis 2 (Jpn) + 1996 + Tonkin House + + + + + + + + + + + + + + Chiki Chiki Machine Mou Race - Wacky Races (Jpn) + 2001 + Infogrames Hudson + + + + + + + + + + + - - - Weltorv Estleia (Jpn) - 1999 - Hudson - - - - - - - - - - - + + + + World League Soccer - Challenge Nippon! (Jpn, Family Price 1500) + 2000 + Coconuts Japan + + + + + + + + + + + - - - Arcade Gears - Wonder 3 (Jpn) - 1998 - Xing - - - - - - - - - - - + + + Arcade Gears - Wonder 3 (Jpn) + 1998 + Xing + + + + + + + + + + + - - + + - World League Soccer - Challenge Nippon! (Jpn, Family Price 1500) - 2000 - Coconuts Japan - - - + Hiroki Matsukata Presents - World Fishing (Jpn, BPS The Choice) + 1999 + BPS + + + - + @@ -55277,26 +54957,6 @@ A few comments on these: - - - - X. Racing (Jpn) - 1998 - Nichibutsu - - - - - - - - - - - - Yagami Hiroki no Game-Taste - Munasawagi no Yokan (Jpn) - 1999 - Kodansha - - - + Extra Bright (Jpn) + 1996 + ASCII + + + - + + + + + + + + + X. Racing (Jpn) + 1998 + Nichibutsu + + + + + + + + + + + + + + + TV Animation X - Unmei no Tatakai (Jpn) + 2002 + Bandai + + + + + + + @@ -55439,6 +55140,26 @@ A few comments on these: + + + + Youkai Hana Asobi (Jpn) + 2001 + Unbalance + + + + + + + + + + + - + + - Youkai Hana Asobi (Jpn) - 2001 - Unbalance - - - + Yuugen Kaisha Chikyuu Boueitai - Guard of Earth Organization (Jpn) + 1999 + Media Rings + + + - + @@ -55519,26 +55240,6 @@ A few comments on these: - - - - Yume no Tsubasa (Jpn) - 2000 - KID - - - - - - - - - - - - + + - Yuugen Kaisha Chikyuu Boueitai - Guard of Earth Organization (Jpn) - 1999 - Media Rings - - - + Yume no Tsubasa (Jpn) + 2000 + KID + + + - + - - + - Yuukyuu no Eden - The Eternal Eden (Jpn) - 1999 - ASCII - - - + Ginga Ojousama Densetsu Yuna - Final Edition (Jpn) + 1998 + Hudson + + + - - - - - - - - Yuusha-Ou GaoGaiGar - Blockaded Numbers (Japan) - 1999 - Takara - - - - - - - + @@ -55698,47 +55379,6 @@ A few comments on these: - - - - Zen-Nihon Joshi Pro Wrestling - Joou Densetsu Yume no Taikousen (Jpn) - 1998 - TEN - - - - - - - - - - - - - - - Zen-Nihon Pro Wrestling - Ouja no Kon (Jpn) - 1999 - Human - - - - - - - - - - - + Kidou Senshi Z-Gundam (Jpn, Demo) + 1997 + Bandai + + + + + + + + + - + + - Zoids - Battle Card Game - Seihou Tairiku Senki (Jpn) - 2001 - Tomy - - - + Zen-Nihon Joshi Pro Wrestling - Joou Densetsu Yume no Taikousen (Jpn) + 1998 + TEN + + + - + + + + + + + + + Zen-Nihon Pro Wrestling - Ouja no Kon (Jpn) + 1999 + Human + + + + + + + @@ -55859,6 +55537,26 @@ A few comments on these: + + + + Zoids - Battle Card Game - Seihou Tairiku Senki (Jpn) + 2001 + Tomy + + + + + + + + + + + + Square's Preview 5 (Jpn, Seiken Densetsu Demo) + 1999 + Squaresoft + + + + + + + + + + + + + + + + Dance Dance Revolution - Disney Mix (Pirate) + 2001 + <pirate> + + + + + + + + + + + + + Bubble Bobble II (Prototype) + 1995 + Taito + + + + + + + + + + Baldur's Gate (USA, Prototype) + 19?? + Interplay + + + + + + + + + + + + + + + + + + + + + + + BioHazard (Jpn, Prototype 19950804) + 1995 + Capcom + + + + + + + + + + BioHazard (Jpn, Prototype 19951004) + 1995 + Capcom + + + + + + + + + + BioHazard (Jpn, Prototype 19960131) + 1996 + Capcom + + + + + + + + + + BioHazard 2 (Prototype) + 1998 + Capcom + + + + + + + + + + BioHazard 2 (Prototype, Alt) + 1998 + Capcom + + + + + + + + + + Breakneck (Prototype) + 19?? + Radical + + + + + + + + + + Crash Bandicoot (Prototype, 19960408) + 1996 + SCEA + + + + + + + + + + Deuce (USA, Prototype) + 2000 + Midway + + + + + + + + + + Diablo (Prototype) + 1997 + Electronic Arts + + + + + + + + + + Driver (Prototype Demo) + 19?? + GT Interactive + + + + + + + + + + Duke Nukem Time to Kill (USA, Prototype) + 1998 + GT Interactive + + + + + + + + + + Global Domination (USA, Prototype) + 1998? + Psygnosis + + + + + + + + + + Legacy of Kain - Soul Reaver (USA, Prototype 19990628) + 1999 + Eidos + + + + + + + + + + Legacy of Kain - Soul Reaver (USA, Prototype 19990512) + 1999 + Eidos + + + + + + + + + + Madden NFL 96 (USA, Prototype) + 1995 + Electronic Arts + + + + + + + + + + Metal Gear Solid (Pilot Disk) + 1998 + Konami + + + + + + + + + + + + Persona 2 - Eternal Punishment (Prototype? Debug) + 2000 + Atlus + + + + + + + + + + Rockman 8 (Jpn, Prototype v1) + 1996 + Capcom + + + + + + + + + + Rockman 8 (Jpn, Prototype 1) + 1996 + Capcom + + + + + + + + + + Rockman 8 (Jpn, Prototype 2) + 1996 + Capcom + + + + + + + + + + Rockman Dash (Capcom Friendly Club Demo) + 1997 + Capcom + + + + + + + + + + + Rockman X6 (Jpn, Prototype 20010928) + 2001 + Capcom + + + + + + + + + + Silent Hill (USA, Prototype) + 1999 + Konami + + + + + + + + + + Spirit Master (USA, Prototype) + 19?? + Acclaim + + + + + + + + + + StarCon (Prototype) + 1998 + Accolade + + + + + + + + + + Thrill Kill (USA, Prototype) + 1998 + Virgin Interactive + + + + + + + + + + Thrill Kill (USA, Prototype Earlier?) + 1998 + Virgin Interactive + + + + + + + + + + Tomb Raider (Prototype, 19960722) + 1996 + Core Design + + + + + + + + + + Tomb Raider II (USA, Prototype) + 1997 + Core Design + + + + + + + + + + Tony Hawk's Pro Skater (USA, Prototype) + 1999 + Activision + + + + + + + + + + Torc - Legend of the Ogre Crown (Prototype) + 19?? + Head Games + + + + + + + + + + Virtuoso (Prototype, 19960514) + 1996 + Data East? + + + + + + + + + + WWF Smackdown! (USA, Prototype 20000106) + 2000 + THQ + + + + + + + + + + + + + Resident Evil 2 Preview (Euro, CD Consoles No.38) + 1997 + Capcom + + + + + + + + + + + Resident Evil 3 (Euro, Demo) + 1999 + Capcom + + + + + + + + + + + Bounty Arms Demo (Jpn, Demo Demo No.5?, 199504) + 1995 + Data West + + + + + + + + + + Castlevania - Symphony of the Night (E3 Demo, 1997) + 1997 + Konami + + + + + + + + + + Tomb Raider (E3 Demo, 19960520) + 1996 + SCEI + + + + + + + + diff --git a/hash/sorcerer_cass.xml b/hash/sorcerer_cass.xml index 533a506c17d..9dbbc9f78f9 100644 --- a/hash/sorcerer_cass.xml +++ b/hash/sorcerer_cass.xml @@ -120,6 +120,30 @@ + + Military Encounter + 1981 + Global Software Network + + + + + + + + + + Salvo + 1979 + <unknown> + + + + + + + + + + + + + - - + + The Amazing Spider-Man - Countdown to Doom (USA) 200? VTech @@ -90,7 +101,7 @@ Language: - + + Bratz - Fashion Pixiez - The Secret Necklace (USA) + 200? + VTech + + + + + + + + + + Disney Pixar Cars - In the Fast Lane (USA) + 200? + VTech + + + + + + + + + + Cars - Auf der Überholspur (Ger) + 200? + VTech + + + + + + + + + + + Disney Princess - The Crystal Ball Adventure (USA) + 200? + VTech + + + + + + + + + + Disney Princess - Das zauberhafte Märchen-Abenteuer (Ger) + 200? + VTech + + + + + + + - - + + The Incredibles - Mission Incredible (USA) 200? VTech @@ -121,7 +226,7 @@ Language: - + + Multisports (Ger) + 200? + VTech + + + + + + + - - + + Scooby-Doo! Ancient Adventure (USA) 200? VTech @@ -151,39 +279,26 @@ Language: - - - - - Wacky Race on Jumpin' Bean Island (USA) - 200? - VTech - - - - - - - - - + + - Cars - Auf der Überholspur (Ger) + Original files: + + + + + --> + Shrek the Third - The Search for Arthur (USA) 200? VTech - - + - - + + + SpongeBob Squarepants - Idea Sponge (USA) + 200? + VTech + + + + + + - - - Multisports (Ger) - 200? - VTech - - - - - - - - - - - Disney Princess - Das zauberhafte Märchen-Abenteuer (Ger) - 200? - VTech - - - - - - - - - + + + + Wacky Race on Jumpin' Bean Island (USA) + 200? + VTech + + + + + + + diff --git a/hash/x68k_flop.xml b/hash/x68k_flop.xml index 1ca90815df2..60604d60768 100644 --- a/hash/x68k_flop.xml +++ b/hash/x68k_flop.xml @@ -6407,7 +6407,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup - + Houma Hunter Lime Dai-1-wa 1993 ブラザー工業 (Brother Industries) @@ -6427,7 +6427,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup - + Houma Hunter Lime Dai-2-wa 1993 ブラザー工業 (Brother Industries) @@ -6447,7 +6447,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup - + Houma Hunter Lime Dai-3-wa 1993 ブラザー工業 (Brother Industries) @@ -6467,7 +6467,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup - + Houma Hunter Lime Dai-6-wa 1994 ブラザー工業 (Brother Industries) @@ -14678,7 +14678,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup - + Wrestle Angels 3 1994 エクシング (Xing) @@ -14722,7 +14722,7 @@ maybe the remaining disks are the supposedly undumped addons: Daikairei Powerup - + Wrestle Angels Special - Mouhitori no Top Eventer 1994 エクシング (Xing) diff --git a/hlsl/post.fx b/hlsl/post.fx index eddc4bb8da5..93a871a629a 100644 --- a/hlsl/post.fx +++ b/hlsl/post.fx @@ -98,7 +98,7 @@ VS_OUTPUT vs_main(VS_INPUT Input) Output.TexCoord = Input.TexCoord; Output.TexCoord += PrepareBloom - ? 0.0f / TargetDims // use half texel offset (DX9) to do the blur for first bloom layer + ? 0.0f // use half texel offset (DX9) to do the blur for first bloom layer : 0.5f / TargetDims; // fix half texel offset (DX9) Output.ScreenCoord = Input.Position.xy / ScreenDims; @@ -252,7 +252,13 @@ float4 ps_main(PS_INPUT Input) : COLOR float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b; - float ScanlineCoord = SourceCoord.y * SourceDims.y * ScanlineScale * PI; + float ScanlineCoord = SourceCoord.y; + ScanlineCoord += QuadDims.y <= SourceDims.y * 2.0f + ? 0.5f / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source + : 0.0f; + + ScanlineCoord *= SourceDims.y * ScanlineScale * PI; + float ScanlineCoordJitter = ScanlineOffset * PHI; float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter); float ScanlineWide = ScanlineHeight + ScanlineVariation * max(1.0f, ScanlineHeight) * (1.0f - ColorBrightness); diff --git a/language/Italian/strings.po b/language/Italian/strings.po index 6c11a9d09fe..e180e7d505b 100644 --- a/language/Italian/strings.po +++ b/language/Italian/strings.po @@ -698,7 +698,7 @@ msgstr "Configurazione Macchina" #: src/emu/ui/mainmenu.cpp:69 msgid "Bookkeeping Info" -msgstr "Info Crediti e Tempi d'Utilizzo" +msgstr "Info Crediti e Tempi di Utilizzo" #: src/emu/ui/mainmenu.cpp:72 msgid "Machine Information" @@ -861,12 +861,12 @@ msgstr "" #: src/emu/ui/miscmenu.cpp:258 msgid "Coin %1$c: NA%3$s\n" -msgstr "" +msgstr "Monete %1$c: NA%3$s\n" #: src/emu/ui/miscmenu.cpp:258 #, c-format msgid "Coin %1$c: %2$d%3$s\n" -msgstr "" +msgstr "Monete %1$c: %2$d%3$s\n" #: src/emu/ui/miscmenu.cpp:261 msgid " (locked)" @@ -1123,7 +1123,7 @@ msgstr "Sistema: %1$-.100s" #: src/emu/ui/selgame.cpp:900 src/emu/ui/selsoft.cpp:804 #, c-format msgid "Software is clone of: %1$-.100s" -msgstr "Il software è clone di: %1$-.100s" +msgstr "Il software è Clone di: %1$-.100s" #: src/emu/ui/selgame.cpp:902 src/emu/ui/selsoft.cpp:806 msgid "Software is parent" @@ -1316,12 +1316,12 @@ msgstr "" #: src/emu/ui/selsoft.cpp:683 #, c-format msgid "%1$s %2$s ( %3$d / %4$d software packages )" -msgstr "" +msgstr "%1$s %2$s ( %3$d / %4$d pacchetti software )" #: src/emu/ui/selsoft.cpp:684 #, c-format msgid "Driver: \"%1$s\" software list " -msgstr "" +msgstr "Driver: \"%1$s\" lista software " #: src/emu/ui/selsoft.cpp:687 #, c-format @@ -1487,7 +1487,7 @@ msgstr "Registra" #: src/emu/ui/tapectrl.cpp:103 msgid "Rewind" -msgstr "" +msgstr "Riavvolgi" #: src/emu/ui/tapectrl.cpp:106 msgid "Fast Forward" @@ -1607,7 +1607,7 @@ msgid "" msgstr "" "\n" "\n" -"Ci sono cloni funzionanti di questa macchina: " +"Ci sono Cloni funzionanti di questa macchina: " #: src/emu/ui/ui.cpp:1167 msgid "" diff --git a/makefile b/makefile index ca2b88c8495..ecb7995e7fa 100644 --- a/makefile +++ b/makefile @@ -15,6 +15,7 @@ # REGENIE = 1 # VERBOSE = 1 # NOWERROR = 1 +# IGNORE_GIT = 1 # TARGET = mame # SUBTARGET = tiny @@ -112,6 +113,11 @@ endif ################## END USER-CONFIGURABLE OPTIONS ###################### ########################################################################### + +ifndef MAKETYPE +MAKETYPE := gmake +endif + MAKEPARAMS := -R # @@ -162,19 +168,19 @@ GENIEOS := solaris endif ifeq ($(firstword $(filter FreeBSD,$(UNAME))),FreeBSD) OS := freebsd -GENIEOS := bsd +GENIEOS := freebsd endif ifeq ($(firstword $(filter GNU/kFreeBSD,$(UNAME))),GNU/kFreeBSD) OS := freebsd -GENIEOS := bsd +GENIEOS := freebsd endif ifeq ($(firstword $(filter NetBSD,$(UNAME))),NetBSD) OS := netbsd -GENIEOS := bsd +GENIEOS := freebsd endif ifeq ($(firstword $(filter OpenBSD,$(UNAME))),OpenBSD) OS := openbsd -GENIEOS := bsd +GENIEOS := freebsd endif ifeq ($(firstword $(filter Darwin,$(UNAME))),Darwin) OS := macosx @@ -888,26 +894,26 @@ $(error Python is not available in path) endif ifneq ($(GIT_AVAILABLE),git) -PARAMS += --IGNORE_GIT='1' + IGNORE_GIT := 1 endif ifeq ($(wildcard .git/*),) -PARAMS += --IGNORE_GIT='1' + IGNORE_GIT := 1 endif -ifeq ($(GIT_AVAILABLE),git) -NEW_GIT_VERSION := $(shell git describe) ifeq (posix,$(SHELLTYPE)) -OLD_GIT_VERSION := $(shell cat .mame_version 2> /dev/null) +OLD_GIT_VERSION := $(shell cat $(GENDIR)/git_desc 2> /dev/null) else -OLD_GIT_VERSION := $(shell cat .mame_version 2> NUL) +OLD_GIT_VERSION := $(shell cat $(GENDIR)/git_desc 2> NUL) endif -ifneq ($(NEW_GIT_VERSION),$(OLD_GIT_VERSION)) -$(shell git describe > .mame_version) -$(shell touch $(SRC)/version.cpp) +ifneq ($(IGNORE_GIT),1) +NEW_GIT_VERSION := $(shell git describe --dirty) +else +NEW_GIT_VERSION := unknown endif +ifeq ($(NEW_GIT_VERSION),) +NEW_GIT_VERSION := unknown endif - GENIE := 3rdparty/genie/bin/$(GENIEOS)/genie$(EXE) ifeq ($(TARGET),$(SUBTARGET_FULL)) @@ -927,19 +933,19 @@ regenie: # gmake-mingw64-gcc #------------------------------------------------- -$(PROJECTDIR)/gmake-mingw64-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MINGW64 $(error MINGW64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw64-gcc --gcc_version=$(GCC_VERSION) gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw64-gcc --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: windows_x64 -windows_x64: generate $(PROJECTDIR)/gmake-mingw64-gcc/Makefile +windows_x64: generate $(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc/Makefile ifndef MINGW64 $(error MINGW64 is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw64-gcc config=$(CONFIG)64 WINDRES=$(WINDRES) #------------------------------------------------- # gmake-mingw32-gcc @@ -948,36 +954,36 @@ endif .PHONY: windows windows: windows_x86 -$(PROJECTDIR)/gmake-mingw32-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MINGW32 $(error MINGW32 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw32-gcc --gcc_version=$(GCC_VERSION) gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw32-gcc --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: windows_x86 -windows_x86: generate $(PROJECTDIR)/gmake-mingw32-gcc/Makefile +windows_x86: generate $(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc/Makefile ifndef MINGW32 $(error MINGW32 is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw32-gcc config=$(CONFIG)32 WINDRES=$(WINDRES) #------------------------------------------------- # gmake-mingw-clang #------------------------------------------------- -$(PROJECTDIR)/gmake-mingw-clang/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw-clang --gcc_version=$(CLANG_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-mingw-clang/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=mingw-clang --gcc_version=$(CLANG_VERSION) $(MAKETYPE) .PHONY: windows_x64_clang -windows_x64_clang: generate $(PROJECTDIR)/gmake-mingw-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) +windows_x64_clang: generate $(PROJECTDIR)/$(MAKETYPE)-mingw-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)64 WINDRES=$(WINDRES) .PHONY: windows_x86_clang -windows_x86_clang: generate $(PROJECTDIR)/gmake-mingw-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) +windows_x86_clang: generate $(PROJECTDIR)/$(MAKETYPE)-mingw-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-mingw-clang config=$(CONFIG)32 WINDRES=$(WINDRES) #------------------------------------------------- # Visual Studio 2013 @@ -1060,185 +1066,185 @@ endif # android-arm #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_ARM $(error ANDROID_NDK_ARM is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-arm -android-arm: generate $(PROJECTDIR_SDL)/gmake-android-arm/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) +android-arm: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm config=$(CONFIG) #------------------------------------------------- # android-arm64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_ARM64 $(error ANDROID_NDK_ARM64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-arm64 -android-arm64: generate $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) +android-arm64: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-arm64 config=$(CONFIG) #------------------------------------------------- # android-mips #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_MIPS $(error ANDROID_NDK_MIPS is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-mips -android-mips: generate $(PROJECTDIR_SDL)/gmake-android-mips/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) +android-mips: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips config=$(CONFIG) #------------------------------------------------- # android-mips64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_MIPS64 $(error ANDROID_NDK_MIPS64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 $(MAKETYPE) .PHONY: android-mips64 -android-mips64: generate $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) +android-mips64: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-mips64 config=$(CONFIG) #------------------------------------------------- # android-x86 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_X86 $(error ANDROID_NDK_X86 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 $(MAKETYPE) .PHONY: android-x86 -android-x86: generate $(PROJECTDIR_SDL)/gmake-android-x86/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) +android-x86: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x86 config=$(CONFIG) #------------------------------------------------- # android-x64 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE) ifndef ANDROID_NDK_X64 $(error ANDROID_NDK_X64 is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 $(MAKETYPE) .PHONY: android-x64 -android-x64: generate $(PROJECTDIR_SDL)/gmake-android-x64/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) +android-x64: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-android-x64 config=$(CONFIG) #------------------------------------------------- # asmjs / Emscripten #------------------------------------------------- -$(PROJECTDIR)/gmake-asmjs/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-asmjs/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef EMSCRIPTEN $(error EMSCRIPTEN is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=asmjs --gcc_version=3.7.0 gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=asmjs --gcc_version=3.7.0 $(MAKETYPE) .PHONY: asmjs -asmjs: generate $(PROJECTDIR)/gmake-asmjs/Makefile +asmjs: generate $(PROJECTDIR)/$(MAKETYPE)-asmjs/Makefile ifndef EMSCRIPTEN $(error EMSCRIPTEN is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-asmjs config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-asmjs config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-asmjs config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-asmjs config=$(CONFIG) #------------------------------------------------- # gmake-linux #------------------------------------------------- -$(PROJECTDIR)/gmake-linux/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-gcc --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-linux/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-gcc --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: linux_x64 -linux_x64: generate $(PROJECTDIR)/gmake-linux/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)64 +linux_x64: generate $(PROJECTDIR)/$(MAKETYPE)-linux/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)64 .PHONY: linux_x86 -linux_x86: generate $(PROJECTDIR)/gmake-linux/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG)32 +linux_x86: generate $(PROJECTDIR)/$(MAKETYPE)-linux/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG)32 .PHONY: linux -linux: generate $(PROJECTDIR)/gmake-linux/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux config=$(CONFIG) +linux: generate $(PROJECTDIR)/$(MAKETYPE)-linux/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux config=$(CONFIG) #------------------------------------------------- # gmake-linux-clang #------------------------------------------------- -$(PROJECTDIR)/gmake-linux-clang/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-clang --gcc_version=$(CLANG_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-linux-clang/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=linux-clang --gcc_version=$(CLANG_VERSION) $(MAKETYPE) .PHONY: linux_x64_clang -linux_x64_clang: generate $(PROJECTDIR)/gmake-linux-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)64 +linux_x64_clang: generate $(PROJECTDIR)/$(MAKETYPE)-linux-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)64 .PHONY: linux_x86_clang -linux_x86_clang: generate $(PROJECTDIR)/gmake-linux-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-linux-clang config=$(CONFIG)32 +linux_x86_clang: generate $(PROJECTDIR)/$(MAKETYPE)-linux-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-linux-clang config=$(CONFIG)32 #------------------------------------------------- # gmake-osx #------------------------------------------------- -$(PROJECTDIR)/gmake-osx/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-osx/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: macosx_x64 -macosx_x64: generate $(PROJECTDIR)/gmake-osx/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)64 +macosx_x64: generate $(PROJECTDIR)/$(MAKETYPE)-osx/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)64 .PHONY: macosx macosx: macosx_x86 .PHONY: macosx_x86 -macosx_x86: generate $(PROJECTDIR)/gmake-osx/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx config=$(CONFIG)32 +macosx_x86: generate $(PROJECTDIR)/$(MAKETYPE)-osx/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx config=$(CONFIG)32 #------------------------------------------------- # gmake-osx-clang #------------------------------------------------- -$(PROJECTDIR)/gmake-osx-clang/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx-clang --gcc_version=$(CLANG_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-osx-clang/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=osx-clang --gcc_version=$(CLANG_VERSION) $(MAKETYPE) .PHONY: macosx_x64_clang -macosx_x64_clang: generate $(PROJECTDIR)/gmake-osx-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)64 +macosx_x64_clang: generate $(PROJECTDIR)/$(MAKETYPE)-osx-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)64 .PHONY: macosx_x86_clang -macosx_x86_clang: generate $(PROJECTDIR)/gmake-osx-clang/Makefile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-osx-clang config=$(CONFIG)32 +macosx_x86_clang: generate $(PROJECTDIR)/$(MAKETYPE)-osx-clang/Makefile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-osx-clang config=$(CONFIG)32 .PHONY: xcode4 xcode4: generate @@ -1253,154 +1259,154 @@ xcode4-ios: generate #------------------------------------------------- -$(PROJECTDIR)/gmake-solaris/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=solaris --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-solaris/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=solaris --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: solaris_x64 -solaris_x64: generate $(PROJECTDIR)/gmake-solaris/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)64 +solaris_x64: generate $(PROJECTDIR)/$(MAKETYPE)-solaris/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)64 .PHONY: solaris solaris: solaris_x86 .PHONY: solaris_x86 -solaris_x86: generate $(PROJECTDIR)/gmake-solaris/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-solaris config=$(CONFIG)32 +solaris_x86: generate $(PROJECTDIR)/$(MAKETYPE)-solaris/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-solaris config=$(CONFIG)32 #------------------------------------------------- # gmake-freebsd #------------------------------------------------- -$(PROJECTDIR)/gmake-freebsd/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=freebsd --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-freebsd/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=freebsd --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: freebsd_x64 -freebsd_x64: generate $(PROJECTDIR)/gmake-freebsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)64 +freebsd_x64: generate $(PROJECTDIR)/$(MAKETYPE)-freebsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)64 .PHONY: freebsd freebsd: freebsd_x86 .PHONY: freebsd_x86 -freebsd_x86: generate $(PROJECTDIR)/gmake-freebsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-freebsd config=$(CONFIG)32 +freebsd_x86: generate $(PROJECTDIR)/$(MAKETYPE)-freebsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-freebsd config=$(CONFIG)32 #------------------------------------------------- # gmake-netbsd #------------------------------------------------- -$(PROJECTDIR)/gmake-netbsd/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=netbsd --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-netbsd/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=netbsd --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: netbsd_x64 -netbsd_x64: generate $(PROJECTDIR)/gmake-netbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)64 +netbsd_x64: generate $(PROJECTDIR)/$(MAKETYPE)-netbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)64 .PHONY: netbsd netbsd: netbsd_x86 .PHONY: netbsd_x86 -netbsd_x86: generate $(PROJECTDIR)/gmake-netbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-netbsd config=$(CONFIG)32 +netbsd_x86: generate $(PROJECTDIR)/$(MAKETYPE)-netbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-netbsd config=$(CONFIG)32 #------------------------------------------------- # gmake-openbsd #------------------------------------------------- -$(PROJECTDIR)/gmake-openbsd/Makefile: makefile $(SCRIPTS) $(GENIE) - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=openbsd --gcc_version=$(GCC_VERSION) gmake +$(PROJECTDIR)/$(MAKETYPE)-openbsd/Makefile: makefile $(SCRIPTS) $(GENIE) + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=openbsd --gcc_version=$(GCC_VERSION) $(MAKETYPE) .PHONY: openbsd_x64 -openbsd_x64: generate $(PROJECTDIR)/gmake-openbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)64 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)64 +openbsd_x64: generate $(PROJECTDIR)/$(MAKETYPE)-openbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)64 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)64 .PHONY: openbsd openbsd: openbsd_x86 .PHONY: openbsd_x86 -openbsd_x86: generate $(PROJECTDIR)/gmake-openbsd/Makefile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)32 precompile - $(SILENT) $(MAKE) -C $(PROJECTDIR)/gmake-openbsd config=$(CONFIG)32 +openbsd_x86: generate $(PROJECTDIR)/$(MAKETYPE)-openbsd/Makefile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)32 precompile + $(SILENT) $(MAKE) -C $(PROJECTDIR)/$(MAKETYPE)-openbsd config=$(CONFIG)32 #------------------------------------------------- # gmake-steamlink #------------------------------------------------- -$(PROJECTDIR)/gmake-steamlink/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR)/$(MAKETYPE)-steamlink/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MARVELL_SDK_PATH $(error MARVELL_SDK_PATH is not set) endif ifndef MARVELL_ROOTFS $(error MARVELL_ROOTFS is not set) endif - $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=steamlink --gcc_version=$(GCC_VERSION) --NO_OPENGL=1 --NO_USE_MIDI=1 --NO_X11=1 --NOASM=1 --SDL_INSTALL_ROOT=$(MARVELL_ROOTFS)/usr gmake + $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) --gcc=steamlink --gcc_version=$(GCC_VERSION) --NO_OPENGL=1 --NO_USE_MIDI=1 --NO_X11=1 --NOASM=1 --SDL_INSTALL_ROOT=$(MARVELL_ROOTFS)/usr $(MAKETYPE) .PHONY: steamlink -steamlink: generate $(PROJECTDIR)/gmake-steamlink/Makefile +steamlink: generate $(PROJECTDIR)/$(MAKETYPE)-steamlink/Makefile ifndef MARVELL_SDK_PATH $(error MARVELL_SDK_PATH is not set) endif ifndef MARVELL_ROOTFS $(error MARVELL_ROOTFS is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-steamlink config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/gmake-steamlink config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-steamlink config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR)/$(MAKETYPE)-steamlink config=$(CONFIG) #------------------------------------------------- # gmake-rpi #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-rpi/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-rpi/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef RASPBERRY_SDK_PATH $(error RASPBERRY_SDK_PATH is not set) endif ifndef RASPBERRY_SYSROOT $(error RASPBERRY_SYSROOT is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=rpi --gcc_version=4.9.2 --osd=sdl --targetos=rpi --targetos=rpi --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=rpi --gcc_version=4.9.2 --osd=sdl --targetos=rpi --targetos=rpi --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr $(MAKETYPE) .PHONY: rpi -rpi: generate $(PROJECTDIR_SDL)/gmake-rpi/Makefile +rpi: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-rpi/Makefile ifndef RASPBERRY_SDK_PATH $(error RASPBERRY_SDK_PATH is not set) endif ifndef RASPBERRY_SYSROOT $(error RASPBERRY_SYSROOT is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-rpi config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-rpi config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-rpi config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-rpi config=$(CONFIG) #------------------------------------------------- # gmake-ci20 #------------------------------------------------- -$(PROJECTDIR_SDL)/gmake-ci20/Makefile: makefile $(SCRIPTS) $(GENIE) +$(PROJECTDIR_SDL)/$(MAKETYPE)-ci20/Makefile: makefile $(SCRIPTS) $(GENIE) ifndef MIPS_LINUXGNU_ROOT $(error MIPS_LINUXGNU_ROOT is not set) endif ifndef CI20_SYSROOT $(error CI20_SYSROOT is not set) endif - $(SILENT) $(GENIE) $(PARAMS) --gcc=ci20 --gcc_version=4.9.2 --osd=sdl --targetos=ci20 --targetos=ci20 --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr gmake + $(SILENT) $(GENIE) $(PARAMS) --gcc=ci20 --gcc_version=4.9.2 --osd=sdl --targetos=ci20 --targetos=ci20 --NO_USE_MIDI=1 --PLATFORM=arm --NOASM=1 --USE_QTDEBUG=0 --SDL_INSTALL_ROOT=$(RASPBERRY_SYSROOT)/usr $(MAKETYPE) .PHONY: ci20 -ci20: generate $(PROJECTDIR_SDL)/gmake-ci20/Makefile +ci20: generate $(PROJECTDIR_SDL)/$(MAKETYPE)-ci20/Makefile ifndef MIPS_LINUXGNU_ROOT $(error MIPS_LINUXGNU_ROOT is not set) endif ifndef CI20_SYSROOT $(error CI20_SYSROOT is not set) endif - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-ci20 config=$(CONFIG) precompile - $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-ci20 config=$(CONFIG) + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-ci20 config=$(CONFIG) precompile + $(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/$(MAKETYPE)-ci20 config=$(CONFIG) #------------------------------------------------- # cmake @@ -1408,7 +1414,7 @@ endif .PHONY: cmake cmake: generate $(SILENT) $(GENIE) $(PARAMS) $(TARGET_PARAMS) cmake -ifeq ($(OS),windows) +ifneq (posix,$(SHELLTYPE)) $(SILENT)echo cmake_minimum_required(VERSION 2.8.4) > CMakeLists.txt $(SILENT)echo add_subdirectory($(PROJECTDIR)/cmake) >> CMakeLists.txt else @@ -1458,6 +1464,7 @@ genie: $(GENIE) generate: \ genie \ $(GEN_FOLDERS) \ + $(GENDIR)/version.cpp \ $(patsubst %.po,%.mo,$(call rwildcard, language/, *.po)) \ $(patsubst $(SRC)/%.lay,$(GENDIR)/%.lh,$(LAYOUTS)) \ $(GENDIR)/mame/drivers/ymmu100.hxx \ @@ -1468,6 +1475,32 @@ $(GENDIR)/includes/SDL2: -$(call MKDIR,$@) -$(call COPY,3rdparty/SDL2/include/,$(GENDIR)/includes/SDL2) +ifneq ($(NEW_GIT_VERSION),$(OLD_GIT_VERSION)) +stale: + +.PHONY: stale + +$(GENDIR)/git_desc: stale | $(GEN_FOLDERS) + @echo $(NEW_GIT_VERSION) > $@ +endif + +ifeq (posix,$(SHELLTYPE)) +$(GENDIR)/version.cpp: $(GENDIR)/git_desc | $(GEN_FOLDERS) + @echo '#define BARE_BUILD_VERSION "0.174"' > $@ + @echo 'extern const char bare_build_version[];' >> $@ + @echo 'extern const char build_version[];' >> $@ + @echo 'const char bare_build_version[] = BARE_BUILD_VERSION;' >> $@ + @echo 'const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))";' >> $@ +else +$(GENDIR)/version.cpp: $(GENDIR)/git_desc + @echo #define BARE_BUILD_VERSION "0.174" > $@ + @echo extern const char bare_build_version[]; >> $@ + @echo extern const char build_version[]; >> $@ + @echo const char bare_build_version[] = BARE_BUILD_VERSION; >> $@ + @echo const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))"; >> $@ +endif + + $(GENDIR)/%.lh: $(SRC)/%.lay scripts/build/complay.py | $(GEN_FOLDERS) @echo Compressing $<... $(SILENT)$(PYTHON) scripts/build/complay.py $< $@ layout_$(basename $(notdir $<)) diff --git a/nl_examples/cdelay.c b/nl_examples/cdelay.c index 6f396e8ca07..927a7cfe0a4 100644 --- a/nl_examples/cdelay.c +++ b/nl_examples/cdelay.c @@ -7,6 +7,17 @@ #include "netlist/devices/net_lib.h" +NETLIST_START(perf) + + SOLVER(Solver, 48000) + PARAM(Solver.ACCURACY, 1e-20) + MAINCLOCK(clk, 50000000) + + TTL_7400_NAND(n1,clk,clk) + +NETLIST_END() + + NETLIST_START(7400_astable) /* diff --git a/plugins/cheatfind/init.lua b/plugins/cheatfind/init.lua index cce26177cfb..55ef7beb00e 100644 --- a/plugins/cheatfind/init.lua +++ b/plugins/cheatfind/init.lua @@ -588,7 +588,7 @@ function cheatfind.startplugin() if dev.space.shortname then cheat.ram = { ram = dev.tag } - cheat.script.on = "ram:write(" .. match.addr .. "," .. match.newval .. ")" + cheat.script.run = "ram:write(" .. match.addr .. "," .. match.newval .. ")" else cheat.space = { cpu = { tag = dev.tag, type = "program" } } cheat.script.run = "cpu:write_" .. wid .. "(" .. match.addr .. "," .. match.newval .. ")" diff --git a/scripts/genie.lua b/scripts/genie.lua index 95bb6dba6af..5eebe355e2c 100644 --- a/scripts/genie.lua +++ b/scripts/genie.lua @@ -349,15 +349,6 @@ newoption { } } -newoption { - trigger = "IGNORE_GIT", - description = "Ignore usage of git command in build process", - allowed = { - { "0", "Do not ignore" }, - { "1", "Ingore" }, - }, -} - newoption { trigger = "SOURCES", description = "List of sources to compile.", @@ -521,7 +512,7 @@ if (_OPTIONS["SOURCES"] == nil) then dofile (path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua")) end -configuration { "gmake" } +configuration { "gmake or ninja" } flags { "SingleOutputDir", } @@ -681,7 +672,7 @@ end "LUA_COMPAT_5_2", } - if _ACTION == "gmake" then + if _ACTION == "gmake" or _ACTION == "ninja" then --we compile C-only to C99 standard with GNU extensions @@ -714,7 +705,7 @@ end -- this speeds it up a bit by piping between the preprocessor/compiler/assembler if not ("pnacl" == _OPTIONS["gcc"]) then buildoptions { - "--pipe", + "-pipe", } end -- add -g if we need symbols, and ensure we have frame pointers diff --git a/scripts/src/3rdparty.lua b/scripts/src/3rdparty.lua index 484e13c1de0..d8e6c9e2fff 100644 --- a/scripts/src/3rdparty.lua +++ b/scripts/src/3rdparty.lua @@ -88,7 +88,7 @@ project "zlib" local version = str_to_version(_OPTIONS["gcc_version"]) if _OPTIONS["gcc"]~=nil and ((string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "asmjs") or string.find(_OPTIONS["gcc"], "android"))) then - configuration { "gmake" } + configuration { "gmake or ninja" } if (version >= 30700) then buildoptions { "-Wno-shift-negative-value", @@ -113,7 +113,7 @@ end "verbose=-1", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-strict-prototypes", } @@ -299,7 +299,7 @@ end "HAVE_CONFIG_H=1", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-unused-function", "-O0", @@ -352,7 +352,7 @@ project "7z" uuid "ad573d62-e76a-4b11-ae34-5110a6789a42" kind "StaticLib" - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-undef", "-Wno-strict-prototypes", @@ -446,7 +446,7 @@ project "lua" -- "ForceCPP", --} - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-bad-function-cast" } @@ -717,7 +717,7 @@ end MAME_DIR .. "3rdparty/bx/include/compat/freebsd", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions { "-Wno-uninitialized", "-Wno-unused-function", @@ -795,15 +795,12 @@ end MAME_DIR .. "3rdparty/bgfx/examples/common/font/utf8.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/imgui.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/ocornut_imgui.cpp", - MAME_DIR .. "3rdparty/bgfx/examples/common/imgui/scintilla.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/nanovg/nanovg.cpp", MAME_DIR .. "3rdparty/bgfx/examples/common/nanovg/nanovg_bgfx.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ib-compress/indexbuffercompression.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ib-compress/indexbufferdecompression.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui.cpp", - MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_demo.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_draw.cpp", - MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_node_graph_test.cpp", MAME_DIR .. "3rdparty/bgfx/3rdparty/ocornut-imgui/imgui_wm.cpp", } if _OPTIONS["targetos"]=="macosx" then @@ -845,7 +842,7 @@ end -- "/wd4456", -- warning C4456: declaration of 'xxx' hides previous local declaration -- } -- --- configuration { "gmake" } +-- configuration { "gmake or ninja" } -- buildoptions_c { -- "-Wno-strict-prototypes", -- "-Wno-bad-function-cast", @@ -982,7 +979,7 @@ project "uv" MAME_DIR .. "3rdparty/libuv/src/win", } - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions_c { "-Wno-strict-prototypes", "-Wno-bad-function-cast", diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 5b6cd19f659..571c75fd48b 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1090,6 +1090,23 @@ if (BUSES["PLUS4"]~=null) then end +--------------------------------------------------- +-- +--@src/devices/bus/pofo/exp.h,BUSES["POFO"] = true +--------------------------------------------------- + +if (BUSES["POFO"]~=null) then + files { + MAME_DIR .. "src/devices/bus/pofo/exp.cpp", + MAME_DIR .. "src/devices/bus/pofo/exp.h", + MAME_DIR .. "src/devices/bus/pofo/hpc101.cpp", + MAME_DIR .. "src/devices/bus/pofo/hpc101.h", + MAME_DIR .. "src/devices/bus/pofo/hpc102.cpp", + MAME_DIR .. "src/devices/bus/pofo/hpc102.h", + } +end + + --------------------------------------------------- -- --@src/devices/bus/s100/s100.h,BUSES["S100"] = true diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index b06797009ea..daec3987605 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -2370,3 +2370,19 @@ if (CPUS["ALTO2"]~=null or _OPTIONS["with-tools"]) then table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/alto2/alto2dsm.cpp") end +------------------------------------------ +-- Sun SPARC, Fujitus MB86901 implementation +--@src/devices/cpu/sparc/sparc.h,CPUS["MB86901"] = true +-------------------------------------------------- + +if (CPUS["MB86901"]~=null) then + files { + MAME_DIR .. "src/devices/cpu/sparc/mb86901.cpp", + MAME_DIR .. "src/devices/cpu/sparc/sparcdefs.h", + MAME_DIR .. "src/devices/cpu/sparc/sparc.h", + } +end + +if (CPUS["MB86901"]~=null or _OPTIONS["with-tools"]) then + table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/sparc/sparcdasm.cpp") +end diff --git a/scripts/src/emu.lua b/scripts/src/emu.lua index 2449faa0ae5..a446a6ccaae 100644 --- a/scripts/src/emu.lua +++ b/scripts/src/emu.lua @@ -33,6 +33,7 @@ includedirs { ext_includedir("lua"), ext_includedir("zlib"), ext_includedir("flac"), + ext_includedir("jpeg"), } files { diff --git a/scripts/src/lib.lua b/scripts/src/lib.lua index 77f6f4344dd..2352dd6a3a3 100644 --- a/scripts/src/lib.lua +++ b/scripts/src/lib.lua @@ -80,7 +80,6 @@ project "utils" MAME_DIR .. "src/lib/util/sha1.cpp", MAME_DIR .. "src/lib/util/sha1.h", MAME_DIR .. "src/lib/util/strformat.h", - MAME_DIR .. "src/lib/util/tagmap.h", MAME_DIR .. "src/lib/util/unicode.cpp", MAME_DIR .. "src/lib/util/unicode.h", MAME_DIR .. "src/lib/util/unzip.cpp", diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua index 1d061199208..7ddf031d76d 100644 --- a/scripts/src/machine.lua +++ b/scripts/src/machine.lua @@ -1176,6 +1176,18 @@ if (MACHINES["LDV1000"]~=null) then } end +--------------------------------------------------- +-- +--@src/devices/machine/ldp1000.h,MACHINES["LDP1000"] = true +--------------------------------------------------- + +if (MACHINES["LDP1000"]~=null) then + files { + MAME_DIR .. "src/devices/machine/ldp1000.cpp", + MAME_DIR .. "src/devices/machine/ldp1000.h", + } +end + --------------------------------------------------- -- --@src/devices/machine/ldvp931.h,MACHINES["LDVP931"] = true @@ -2032,6 +2044,18 @@ if (MACHINES["S3C2440"]~=null) then } end +--------------------------------------------------- +-- +--@src/devices/machine/scnxx562.h,MACHINES["DUSCC"] = true +--------------------------------------------------- + +if (MACHINES["DUSCC"]~=null) then + files { + MAME_DIR .. "src/devices/machine/scnxx562.cpp", + MAME_DIR .. "src/devices/machine/scnxx562.h", + } +end + --------------------------------------------------- -- --@src/devices/machine/serflash.h,MACHINES["SERFLASH"] = true @@ -2856,6 +2880,7 @@ if (MACHINES["APPLE_FDC"]~=null) then MAME_DIR .. "src/devices/machine/applefdc.h", } end + --------------------------------------------------- -- --@src/devices/machine/sonydriv.h,MACHINES["SONY_DRIVE"] = true @@ -2866,3 +2891,14 @@ if (MACHINES["SONY_DRIVE"]~=null) then MAME_DIR .. "src/devices/machine/sonydriv.h", } end + +--------------------------------------------------- +-- +--@src/devices/machine/scnxx562.h,MACHINES["SCNXX562"] = true +--------------------------------------------------- +if (MACHINES["SCNXX562"]~=null) then + files { + MAME_DIR .. "src/devices/machine/scnxx562.cpp", + MAME_DIR .. "src/devices/machine/scnxx562.h", + } +end diff --git a/scripts/src/main.lua b/scripts/src/main.lua index dd6cd80f2e2..42615bedebb 100644 --- a/scripts/src/main.lua +++ b/scripts/src/main.lua @@ -147,17 +147,7 @@ end end configuration { } - -if _OPTIONS["IGNORE_GIT"]~="1" then - GIT_VERSION = backtick( "git describe --dirty" ) - local p = string.find(GIT_VERSION, '-', 1) - if (p~=nil) then - defines { - "GIT_VERSION=" .. string.sub(GIT_VERSION,p+1) - } - end -end - + if _OPTIONS["targetos"]=="android" then includedirs { MAME_DIR .. "3rdparty/SDL2/include", @@ -277,7 +267,7 @@ if (STANDALONE~=true) then "-sectcreate __TEXT __info_plist " .. _MAKE.esc(GEN_DIR) .. "resource/" .. _subtarget .. "-Info.plist" } custombuildtask { - { MAME_DIR .. "src/version.cpp" , GEN_DIR .. "resource/" .. _subtarget .. "-Info.plist", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. _subtarget .. "-Info.plist" .. "...", PYTHON .. " $(1) -p -b " .. _subtarget .. " $(<) > $(@)" }}, + { GEN_DIR .. "version.cpp" , GEN_DIR .. "resource/" .. _subtarget .. "-Info.plist", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. _subtarget .. "-Info.plist" .. "...", PYTHON .. " $(1) -p -b " .. _subtarget .. " $(<) > $(@)" }}, } dependency { { "$(TARGET)" , GEN_DIR .. "resource/" .. _subtarget .. "-Info.plist", true }, @@ -312,7 +302,7 @@ if (STANDALONE~=true) then end files { mainfile, - MAME_DIR .. "src/version.cpp", + GEN_DIR .. "version.cpp", GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.cpp", } @@ -355,21 +345,21 @@ if (STANDALONE~=true) then configuration { "mingw*" } custombuildtask { - { MAME_DIR .. "src/version.cpp" , GEN_DIR .. "resource/" .. rctarget .. "vers.rc", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. rctarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. rctarget .. " $(<) > $(@)" }}, + { GEN_DIR .. "version.cpp" , GEN_DIR .. "resource/" .. rctarget .. "vers.rc", { MAME_DIR .. "scripts/build/verinfo.py" }, {"@echo Emitting " .. rctarget .. "vers.rc" .. "...", PYTHON .. " $(1) -r -b " .. rctarget .. " $(<) > $(@)" }}, } configuration { "vs*" } prebuildcommands { "mkdir " .. path.translate(GEN_DIR .. "resource/","\\") .. " 2>NUL", "@echo Emitting ".. rctarget .. "vers.rc...", - PYTHON .. " " .. path.translate(MAME_DIR .. "scripts/build/verinfo.py","\\") .. " -r -b " .. rctarget .. " " .. path.translate(MAME_DIR .. "src/version.cpp","\\") .. " > " .. path.translate(GEN_DIR .. "resource/" .. rctarget .. "vers.rc", "\\") , + PYTHON .. " " .. path.translate(MAME_DIR .. "scripts/build/verinfo.py","\\") .. " -r -b " .. rctarget .. " " .. path.translate(GEN_DIR .. "version.cpp","\\") .. " > " .. path.translate(GEN_DIR .. "resource/" .. rctarget .. "vers.rc", "\\") , } end configuration { } if _OPTIONS["DEBUG_DIR"]~=nil then - debugabsolutedir(_OPTIONS["DEBUG_DIR"]) + debugdir(_OPTIONS["DEBUG_DIR"]) else debugdir (MAME_DIR) end diff --git a/scripts/src/mame/frontend.lua b/scripts/src/mame/frontend.lua index ea9bb933cfc..e35bed2da07 100644 --- a/scripts/src/mame/frontend.lua +++ b/scripts/src/mame/frontend.lua @@ -75,6 +75,8 @@ files { MAME_DIR .. "src/frontend/mame/pluginopts.h", MAME_DIR .. "src/frontend/mame/ui/ui.cpp", MAME_DIR .. "src/frontend/mame/ui/ui.h", + MAME_DIR .. "src/frontend/mame/ui/text.cpp", + MAME_DIR .. "src/frontend/mame/ui/text.h", MAME_DIR .. "src/frontend/mame/ui/devctrl.h", MAME_DIR .. "src/frontend/mame/ui/menu.cpp", MAME_DIR .. "src/frontend/mame/ui/menu.h", diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index aa00ec2c194..c038f14a28e 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -27,7 +27,6 @@ project "netlist" MAME_DIR .. "src/lib/netlist/nl_dice_compat.h", MAME_DIR .. "src/lib/netlist/nl_lists.h", MAME_DIR .. "src/lib/netlist/nl_time.h", - MAME_DIR .. "src/lib/netlist/nl_util.h", MAME_DIR .. "src/lib/netlist/nl_base.cpp", MAME_DIR .. "src/lib/netlist/nl_base.h", MAME_DIR .. "src/lib/netlist/nl_parser.cpp", @@ -56,6 +55,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/plib/pstream.cpp", MAME_DIR .. "src/lib/netlist/plib/pstream.h", MAME_DIR .. "src/lib/netlist/plib/ptypes.h", + MAME_DIR .. "src/lib/netlist/plib/putil.cpp", + MAME_DIR .. "src/lib/netlist/plib/putil.h", MAME_DIR .. "src/lib/netlist/tools/nl_convert.cpp", MAME_DIR .. "src/lib/netlist/tools/nl_convert.h", MAME_DIR .. "src/lib/netlist/analog/nld_bjt.cpp", @@ -136,9 +137,10 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_log.h", MAME_DIR .. "src/lib/netlist/devices/nld_system.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_system.h", - MAME_DIR .. "src/lib/netlist/devices/nld_cmos.h", MAME_DIR .. "src/lib/netlist/devices/nld_truthtable.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_truthtable.h", + MAME_DIR .. "src/lib/netlist/devices/nlid_cmos.h", + MAME_DIR .. "src/lib/netlist/devices/nlid_system.h", MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx.cpp", MAME_DIR .. "src/lib/netlist/macro/nlm_ttl74xx.h", MAME_DIR .. "src/lib/netlist/macro/nlm_cd4xxx.cpp", diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index 5fb1d23c1bc..b8e5bb61b83 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -244,7 +244,7 @@ function qtdebuggerbuild() } local version = str_to_version(_OPTIONS["gcc_version"]) if _OPTIONS["gcc"]~=nil and (string.find(_OPTIONS["gcc"], "clang") or string.find(_OPTIONS["gcc"], "asmjs")) then - configuration { "gmake" } + configuration { "gmake or ninja" } if (version >= 30600) then buildoptions { "-Wno-inconsistent-missing-override", diff --git a/scripts/src/osd/windows.lua b/scripts/src/osd/windows.lua index 8b48b8f0771..9307c6dec71 100644 --- a/scripts/src/osd/windows.lua +++ b/scripts/src/osd/windows.lua @@ -154,8 +154,6 @@ project ("osd_" .. _OPTIONS["osd"]) } files { - MAME_DIR .. "src/osd/modules/render/d3d/d3d9intf.cpp", - MAME_DIR .. "src/osd/modules/render/d3d/d3dintf.h", MAME_DIR .. "src/osd/modules/render/d3d/d3dhlsl.cpp", MAME_DIR .. "src/osd/modules/render/d3d/d3dcomm.h", MAME_DIR .. "src/osd/modules/render/d3d/d3dhlsl.h", diff --git a/scripts/src/tests.lua b/scripts/src/tests.lua index b5bb5b37366..e0a8da88d75 100644 --- a/scripts/src/tests.lua +++ b/scripts/src/tests.lua @@ -16,7 +16,7 @@ project "gtest" uuid "fa306a8d-fb10-4d4a-9d2e-fdb9076407b4" kind "StaticLib" - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions { "-Wno-undef", "-Wno-unused-variable", @@ -52,7 +52,7 @@ project("mametests") targetdir(MAME_DIR) end - configuration { "gmake" } + configuration { "gmake or ninja" } buildoptions { "-Wno-undef", } diff --git a/scripts/src/tools.lua b/scripts/src/tools.lua index a2e5ad73496..87192f53d5b 100644 --- a/scripts/src/tools.lua +++ b/scripts/src/tools.lua @@ -87,7 +87,7 @@ includedirs { files { MAME_DIR .. "src/tools/chdman.cpp", MAME_DIR .. "src/emu/emucore.cpp", - MAME_DIR .. "src/version.cpp", + GEN_DIR .. "version.cpp", } configuration { "mingw*" or "vs*" } diff --git a/scripts/src/video.lua b/scripts/src/video.lua index 2220e65fff9..95cccd99bfe 100644 --- a/scripts/src/video.lua +++ b/scripts/src/video.lua @@ -804,6 +804,18 @@ if (VIDEOS["V9938"]~=null) then } end +-------------------------------------------------- +-- +--@src/devices/video/zeus2.h,VIDEOS["ZEUS2"] = true +-------------------------------------------------- + +if (VIDEOS["ZEUS2"]~=null) then + files { + MAME_DIR .. "src/devices/video/zeus2.cpp", + MAME_DIR .. "src/devices/video/zeus2.h", + } +end + -------------------------------------------------- -- --@src/devices/video/voodoo.h,VIDEOS["VOODOO"] = true diff --git a/scripts/target/mame/arcade.lua b/scripts/target/mame/arcade.lua index 4ff951f8eea..d5185f4fcf6 100644 --- a/scripts/target/mame/arcade.lua +++ b/scripts/target/mame/arcade.lua @@ -332,6 +332,7 @@ VIDEOS["V9938"] = true --VIDEOS["VIC4567"] = true VIDEOS["VOODOO"] = true VIDEOS["VOODOO_PCI"] = true +VIDEOS["ZEUS2"] = true -------------------------------------------------- -- specify available machine cores @@ -429,6 +430,7 @@ MACHINES["LC89510"] = true MACHINES["LDPR8210"] = true MACHINES["LDSTUB"] = true MACHINES["LDV1000"] = true +MACHINES["LDP1000"] = true MACHINES["LDVP931"] = true --MACHINES["LH5810"] = true MACHINES["LINFLASH"] = true @@ -1168,6 +1170,8 @@ files { MAME_DIR .. "src/mame/machine/mathbox.cpp", MAME_DIR .. "src/mame/machine/mathbox.h", MAME_DIR .. "src/mame/machine/slapstic.cpp", + MAME_DIR .. "src/mame/machine/atarixga.cpp", + MAME_DIR .. "src/mame/machine/atarixga.h", MAME_DIR .. "src/mame/audio/atarijsa.cpp", MAME_DIR .. "src/mame/audio/atarijsa.h", MAME_DIR .. "src/mame/audio/cage.cpp", @@ -2114,6 +2118,9 @@ files { MAME_DIR .. "src/mame/drivers/ddribble.cpp", MAME_DIR .. "src/mame/includes/ddribble.h", MAME_DIR .. "src/mame/video/ddribble.cpp", + MAME_DIR .. "src/mame/drivers/divebomb.cpp", + MAME_DIR .. "src/mame/includes/divebomb.h", + MAME_DIR .. "src/mame/video/divebomb.cpp", MAME_DIR .. "src/mame/drivers/djmain.cpp", MAME_DIR .. "src/mame/includes/djmain.h", MAME_DIR .. "src/mame/video/djmain.cpp", @@ -4222,6 +4229,11 @@ files { -------------------------------------------------- createMAMEProjects(_target, _subtarget, "misc") + +includedirs { + ext_includedir("jpeg"), +} + files { MAME_DIR .. "src/mame/drivers/1945kiii.cpp", MAME_DIR .. "src/mame/drivers/39in1.cpp", diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 1338d4038e7..76b52c9f669 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -132,6 +132,7 @@ CPUS["E0C6200"] = true CPUS["MELPS4"] = true CPUS["HPHYBRID"] = true CPUS["SM510"] = true +CPUS["MB86901"] = true -------------------------------------------------- -- specify available sound cores; some of these are @@ -583,6 +584,7 @@ MACHINES["SMARTMEDIA"] = true MACHINES["APPLE_DRIVE"] = true MACHINES["APPLE_FDC"] = true MACHINES["SONY_DRIVE"] = true +MACHINES["SCNXX562"] = true -------------------------------------------------- -- specify available bus cores @@ -654,6 +656,7 @@ BUSES["PC_JOY"] = true BUSES["PC_KBD"] = true BUSES["PET"] = true BUSES["PLUS4"] = true +BUSES["POFO"] = true BUSES["PSX_CONTROLLER"] = true BUSES["QL"] = true BUSES["RS232"] = true @@ -1305,8 +1308,7 @@ files { MAME_DIR .. "src/mame/audio/lynx.cpp", MAME_DIR .. "src/mame/audio/lynx.h", MAME_DIR .. "src/mame/machine/lynx.cpp", - MAME_DIR .. "src/mame/drivers/portfoli.cpp", - MAME_DIR .. "src/mame/includes/portfoli.h", + MAME_DIR .. "src/mame/drivers/pofo.cpp", } createMESSProjects(_target, _subtarget, "att") @@ -1726,6 +1728,7 @@ files { createMESSProjects(_target, _subtarget, "force") files { + MAME_DIR .. "src/mame/drivers/fccpu30.cpp", MAME_DIR .. "src/mame/drivers/force68k.cpp", } @@ -1860,6 +1863,8 @@ files { MAME_DIR .. "src/mame/drivers/ipc.cpp", MAME_DIR .. "src/mame/drivers/ipds.cpp", MAME_DIR .. "src/mame/drivers/isbc.cpp", + MAME_DIR .. "src/mame/drivers/isbc8010.cpp", + MAME_DIR .. "src/mame/drivers/isbc8030.cpp", MAME_DIR .. "src/mame/machine/isbc_215g.cpp", MAME_DIR .. "src/mame/machine/isbc_215g.h", MAME_DIR .. "src/mame/drivers/rex6000.cpp", @@ -2897,7 +2902,7 @@ files { createMESSProjects(_target, _subtarget, "usp") files { MAME_DIR .. "src/mame/drivers/patinho_feio.cpp", - MAME_DIR .. "src/mame/includes/patinho_feio.h", + MAME_DIR .. "src/mame/includes/patinhofeio.h", } createMESSProjects(_target, _subtarget, "veb") diff --git a/scripts/target/mame/tiny.lua b/scripts/target/mame/tiny.lua index 4e3d4167587..b9ed31261d5 100644 --- a/scripts/target/mame/tiny.lua +++ b/scripts/target/mame/tiny.lua @@ -61,6 +61,7 @@ MACHINES["PIT8253"] = true MACHINES["Z80CTC"] = true MACHINES["68681"] = true MACHINES["BANKDEV"] = true +MACHINES["GEN_LATCH"] = true MACHINES["WATCHDOG"] = true diff --git a/scripts/toolchain.lua b/scripts/toolchain.lua index 8536845c266..6046b4d97d8 100644 --- a/scripts/toolchain.lua +++ b/scripts/toolchain.lua @@ -109,7 +109,7 @@ function toolchain(_buildDir, _subDir) windowsPlatform = _OPTIONS["with-windows"] end - if _ACTION == "gmake" then + if _ACTION == "gmake" or _ACTION == "ninja" then if nil == _OPTIONS["gcc"] or nil == _OPTIONS["gcc_version"] then print("GCC flavor and version must be specified!") diff --git a/src/devices/bus/a1bus/a1bus.cpp b/src/devices/bus/a1bus/a1bus.cpp index 5b29e44049f..273452fd2c1 100644 --- a/src/devices/bus/a1bus/a1bus.cpp +++ b/src/devices/bus/a1bus/a1bus.cpp @@ -139,12 +139,12 @@ void a1bus_device::install_device(offs_t start, offs_t end, read8_delegate rhand m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler); } -void a1bus_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void a1bus_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { -// printf("install_bank: %s @ %x->%x mask %x mirror %x\n", tag, start, end, mask, mirror); +// printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, mask, mirror, tag ); + space.install_readwrite_bank(start, end, tag ); machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); } @@ -199,7 +199,7 @@ void device_a1bus_card_interface::install_device(offs_t start, offs_t end, read8 m_a1bus->install_device(start, end, rhandler, whandler); } -void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, char *tag, UINT8 *data) +void device_a1bus_card_interface::install_bank(offs_t start, offs_t end, char *tag, UINT8 *data) { - m_a1bus->install_bank(start, end, mask, mirror, tag, data); + m_a1bus->install_bank(start, end, tag, data); } diff --git a/src/devices/bus/a1bus/a1bus.h b/src/devices/bus/a1bus/a1bus.h index e9726073ddb..5bfe4b632a5 100644 --- a/src/devices/bus/a1bus/a1bus.h +++ b/src/devices/bus/a1bus/a1bus.h @@ -87,7 +87,7 @@ public: void set_nmi_line(int state); void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); DECLARE_WRITE_LINE_MEMBER( irq_w ); DECLARE_WRITE_LINE_MEMBER( nmi_w ); @@ -132,7 +132,7 @@ public: void lower_slot_nmi() { m_a1bus->set_nmi_line(CLEAR_LINE); } void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, char *tag, UINT8 *data); // inline configuration static void static_set_a1bus_tag(device_t &device, const char *tag, const char *slottag); diff --git a/src/devices/bus/a1bus/a1cassette.cpp b/src/devices/bus/a1bus/a1cassette.cpp index 7168133647c..94eab958858 100644 --- a/src/devices/bus/a1bus/a1cassette.cpp +++ b/src/devices/bus/a1bus/a1cassette.cpp @@ -81,7 +81,7 @@ void a1bus_cassette_device::device_start() m_rom = device().machine().root_device().memregion(this->subtag(CASSETTE_ROM_REGION).c_str())->base(); install_device(0xc000, 0xc0ff, read8_delegate(FUNC(a1bus_cassette_device::cassette_r), this), write8_delegate(FUNC(a1bus_cassette_device::cassette_w), this)); - install_bank(0xc100, 0xc1ff, 0, 0, (char *)"bank_a1cas", m_rom); + install_bank(0xc100, 0xc1ff, (char *)"bank_a1cas", m_rom); save_item(NAME(m_cassette_output_flipflop)); } diff --git a/src/devices/bus/a1bus/a1cffa.cpp b/src/devices/bus/a1bus/a1cffa.cpp index 912401a0642..fc0ff3da3a1 100644 --- a/src/devices/bus/a1bus/a1cffa.cpp +++ b/src/devices/bus/a1bus/a1cffa.cpp @@ -76,7 +76,7 @@ void a1bus_cffa_device::device_start() m_rom = device().machine().root_device().memregion(this->subtag(CFFA_ROM_REGION).c_str())->base(); install_device(0xafe0, 0xafff, read8_delegate(FUNC(a1bus_cffa_device::cffa_r), this), write8_delegate(FUNC(a1bus_cffa_device::cffa_w), this)); - install_bank(0x9000, 0xafdf, 0, 0, (char *)"bank_cffa1", m_rom); + install_bank(0x9000, 0xafdf, (char *)"bank_cffa1", m_rom); save_item(NAME(m_lastdata)); save_item(NAME(m_writeprotect)); diff --git a/src/devices/bus/abcbus/lux21046.cpp b/src/devices/bus/abcbus/lux21046.cpp index 5a7f693d275..1931cbad35a 100644 --- a/src/devices/bus/abcbus/lux21046.cpp +++ b/src/devices/bus/abcbus/lux21046.cpp @@ -108,12 +108,14 @@ const device_type ABC850_FLOPPY = &device_creator; ROM_START( luxor_55_21046 ) ROM_REGION( 0x4000, Z80_TAG, 0 ) ROM_DEFAULT_BIOS( "v107" ) - ROM_SYSTEM_BIOS( 0, "v107", "Luxor v1.07 (1985-07-03)" ) - ROMX_LOAD( "cntr 1.07 6490318-07.6cd", 0x0000, 0x4000, CRC(db8c1c0e) SHA1(8bccd5bc72124984de529ee058df779f06d2c1d5), ROM_BIOS(1) ) - ROM_SYSTEM_BIOS( 1, "v108", "Luxor v1.08 (1986-03-12)" ) - ROMX_LOAD( "cntr 108.6cd", 0x2000, 0x2000, CRC(229764cb) SHA1(a2e2f6f49c31b827efc62f894de9a770b65d109d), ROM_BIOS(2) ) - ROM_SYSTEM_BIOS( 2, "v207", "DiAB v2.07 (1987-06-24)" ) - ROMX_LOAD( "diab 207.6cd", 0x2000, 0x2000, CRC(86622f52) SHA1(61ad271de53152c1640c0b364fce46d1b0b4c7e2), ROM_BIOS(3) ) + ROM_SYSTEM_BIOS( 0, "v105", "Luxor v1.05 (1984-10-04)" ) + ROMX_LOAD( "cntr 105.6cd", 0x2000, 0x2000, CRC(44043025) SHA1(17487ca35b399bb49d4015bbeede0809db8e772f), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS( 1, "v107", "Luxor v1.07 (1985-07-03)" ) + ROMX_LOAD( "cntr 1.07 6490318-07.6cd", 0x0000, 0x4000, CRC(db8c1c0e) SHA1(8bccd5bc72124984de529ee058df779f06d2c1d5), ROM_BIOS(2) ) + ROM_SYSTEM_BIOS( 2, "v108", "Luxor v1.08 (1986-03-12)" ) + ROMX_LOAD( "cntr 108.6cd", 0x2000, 0x2000, CRC(229764cb) SHA1(a2e2f6f49c31b827efc62f894de9a770b65d109d), ROM_BIOS(3) ) + ROM_SYSTEM_BIOS( 3, "v207", "DiAB v2.07 (1987-06-24)" ) + ROMX_LOAD( "diab 207.6cd", 0x2000, 0x2000, CRC(86622f52) SHA1(61ad271de53152c1640c0b364fce46d1b0b4c7e2), ROM_BIOS(4) ) ROM_REGION( 0x104, "plds", 0 ) ROM_LOAD( "pal16r4.2a", 0x000, 0x104, NO_DUMP) @@ -153,7 +155,7 @@ static ADDRESS_MAP_START( luxor_55_21046_io, AS_IO, 8, luxor_55_21046_device ) AM_RANGE(0x2c, 0x2c) AM_MIRROR(0xff03) AM_WRITE(_4b_w) AM_RANGE(0x3c, 0x3c) AM_MIRROR(0xff03) AM_WRITE(_9b_w) AM_RANGE(0x4c, 0x4c) AM_MIRROR(0xff03) AM_WRITE(_8a_w) - AM_RANGE(0x5c, 0x5c) AM_MIRROR(0xff07) AM_MASK(0xff00) AM_READ(_9a_r) + AM_RANGE(0x58, 0x58) AM_MIRROR(0x0007) AM_SELECT(0xff00) AM_READ(_9a_r) AM_RANGE(0x68, 0x6b) AM_MIRROR(0xff00) AM_DEVREAD(SAB1793_TAG, fd1793_t, read) AM_RANGE(0x78, 0x7b) AM_MIRROR(0xff00) AM_DEVWRITE(SAB1793_TAG, fd1793_t, write) AM_RANGE(0x80, 0x80) AM_MIRROR(0xff77) AM_DEVREADWRITE(Z80DMA_TAG, z80dma_device, read, write) diff --git a/src/devices/bus/cpc/amdrum.cpp b/src/devices/bus/cpc/amdrum.cpp index 87e5af428ce..6f8453e3750 100644 --- a/src/devices/bus/cpc/amdrum.cpp +++ b/src/devices/bus/cpc/amdrum.cpp @@ -52,7 +52,7 @@ void cpc_amdrum_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_write_handler(0xff00,0xffff,0,0,write8_delegate(FUNC(cpc_amdrum_device::dac_w),this)); + space.install_write_handler(0xff00,0xffff,write8_delegate(FUNC(cpc_amdrum_device::dac_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/brunword4.cpp b/src/devices/bus/cpc/brunword4.cpp index c4cbc0b0b1f..278ef4ed183 100644 --- a/src/devices/bus/cpc/brunword4.cpp +++ b/src/devices/bus/cpc/brunword4.cpp @@ -74,7 +74,7 @@ void cpc_brunword4_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_write_handler(0xdf00,0xdfff,0,0,write8_delegate(FUNC(cpc_brunword4_device::rombank_w),this)); + space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_brunword4_device::rombank_w),this)); } void cpc_brunword4_device::device_reset() diff --git a/src/devices/bus/cpc/cpc_pds.cpp b/src/devices/bus/cpc/cpc_pds.cpp index 1bff1c869a0..292efd3f7cf 100644 --- a/src/devices/bus/cpc/cpc_pds.cpp +++ b/src/devices/bus/cpc/cpc_pds.cpp @@ -52,7 +52,7 @@ void cpc_pds_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_readwrite_handler(0xfbec,0xfbef,0,0,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); + space.install_readwrite_handler(0xfbec,0xfbef,read8_delegate(FUNC(cpc_pds_device::pio_r),this),write8_delegate(FUNC(cpc_pds_device::pio_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/cpc_rs232.cpp b/src/devices/bus/cpc/cpc_rs232.cpp index ccf4165edf1..42e4b83221f 100644 --- a/src/devices/bus/cpc/cpc_rs232.cpp +++ b/src/devices/bus/cpc/cpc_rs232.cpp @@ -114,8 +114,8 @@ void cpc_rs232_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_readwrite_handler(0xfadc,0xfadf,0,0,read8_delegate(FUNC(cpc_rs232_device::dart_r),this),write8_delegate(FUNC(cpc_rs232_device::dart_w),this)); - space.install_readwrite_handler(0xfbdc,0xfbdf,0,0,read8_delegate(FUNC(cpc_rs232_device::pit_r),this),write8_delegate(FUNC(cpc_rs232_device::pit_w),this)); + space.install_readwrite_handler(0xfadc,0xfadf,read8_delegate(FUNC(cpc_rs232_device::dart_r),this),write8_delegate(FUNC(cpc_rs232_device::dart_w),this)); + space.install_readwrite_handler(0xfbdc,0xfbdf,read8_delegate(FUNC(cpc_rs232_device::pit_r),this),write8_delegate(FUNC(cpc_rs232_device::pit_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/cpc_ssa1.cpp b/src/devices/bus/cpc/cpc_ssa1.cpp index a86847d100c..a4a0836dfc4 100644 --- a/src/devices/bus/cpc/cpc_ssa1.cpp +++ b/src/devices/bus/cpc/cpc_ssa1.cpp @@ -188,8 +188,8 @@ void cpc_ssa1_device::device_start() // m_sp0256_device = subdevice("sp0256"); - space.install_readwrite_handler(0xfaee,0xfaee,0,0,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); - space.install_readwrite_handler(0xfbee,0xfbee,0,0,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); + space.install_readwrite_handler(0xfaee,0xfaee,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); + space.install_readwrite_handler(0xfbee,0xfbee,read8_delegate(FUNC(cpc_ssa1_device::ssa1_r),this),write8_delegate(FUNC(cpc_ssa1_device::ssa1_w),this)); } void cpc_dkspeech_device::device_start() @@ -202,7 +202,7 @@ void cpc_dkspeech_device::device_start() // m_sp0256_device = subdevice("sp0256"); - space.install_readwrite_handler(0xfbfe,0xfbfe,0,0,read8_delegate(FUNC(cpc_dkspeech_device::dkspeech_r),this),write8_delegate(FUNC(cpc_dkspeech_device::dkspeech_w),this)); + space.install_readwrite_handler(0xfbfe,0xfbfe,read8_delegate(FUNC(cpc_dkspeech_device::dkspeech_r),this),write8_delegate(FUNC(cpc_dkspeech_device::dkspeech_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/ddi1.cpp b/src/devices/bus/cpc/ddi1.cpp index c9b4adb1a2d..de747473f7b 100644 --- a/src/devices/bus/cpc/ddi1.cpp +++ b/src/devices/bus/cpc/ddi1.cpp @@ -79,9 +79,9 @@ void cpc_ddi1_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_write_handler(0xfa7e,0xfa7f,0,0,write8_delegate(FUNC(cpc_ddi1_device::motor_w),this)); - space.install_readwrite_handler(0xfb7e,0xfb7f,0,0,read8_delegate(FUNC(cpc_ddi1_device::fdc_r),this),write8_delegate(FUNC(cpc_ddi1_device::fdc_w),this)); - space.install_write_handler(0xdf00,0xdfff,0,0,write8_delegate(FUNC(cpc_ddi1_device::rombank_w),this)); + space.install_write_handler(0xfa7e,0xfa7f,write8_delegate(FUNC(cpc_ddi1_device::motor_w),this)); + space.install_readwrite_handler(0xfb7e,0xfb7f,read8_delegate(FUNC(cpc_ddi1_device::fdc_r),this),write8_delegate(FUNC(cpc_ddi1_device::fdc_w),this)); + space.install_write_handler(0xdf00,0xdfff,write8_delegate(FUNC(cpc_ddi1_device::rombank_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/doubler.cpp b/src/devices/bus/cpc/doubler.cpp index 9876263c323..632130dc08f 100644 --- a/src/devices/bus/cpc/doubler.cpp +++ b/src/devices/bus/cpc/doubler.cpp @@ -53,7 +53,7 @@ void cpc_doubler_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_read_handler(0xf0e0,0xf0e0,0,0,read8_delegate(FUNC(cpc_doubler_device::ext_tape_r),this)); + space.install_read_handler(0xf0e0,0xf0e0,read8_delegate(FUNC(cpc_doubler_device::ext_tape_r),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/hd20.cpp b/src/devices/bus/cpc/hd20.cpp index 3e19640be8e..d10bf0cd828 100644 --- a/src/devices/bus/cpc/hd20.cpp +++ b/src/devices/bus/cpc/hd20.cpp @@ -65,8 +65,8 @@ void cpc_hd20_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_write_handler(0xfbe0,0xfbe4,0,0,write8_delegate(FUNC(cpc_hd20_device::hdc_w),this)); - space.install_read_handler(0xfbe0,0xfbe4,0,0,read8_delegate(FUNC(cpc_hd20_device::hdc_r),this)); + space.install_write_handler(0xfbe0,0xfbe4,write8_delegate(FUNC(cpc_hd20_device::hdc_w),this)); + space.install_read_handler(0xfbe0,0xfbe4,read8_delegate(FUNC(cpc_hd20_device::hdc_r),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/magicsound.cpp b/src/devices/bus/cpc/magicsound.cpp index c289db92ddd..6f9a6313a64 100644 --- a/src/devices/bus/cpc/magicsound.cpp +++ b/src/devices/bus/cpc/magicsound.cpp @@ -90,10 +90,10 @@ void al_magicsound_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_readwrite_handler(0xf8d0,0xf8df,0,0,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); - space.install_write_handler(0xf9d0,0xf9df,0,0,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); - space.install_write_handler(0xfad0,0xfadf,0,0,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); - space.install_write_handler(0xfbd0,0xfbdf,0,0,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); + space.install_readwrite_handler(0xf8d0,0xf8df,read8_delegate(FUNC(al_magicsound_device::dmac_r),this),write8_delegate(FUNC(al_magicsound_device::dmac_w),this)); + space.install_write_handler(0xf9d0,0xf9df,write8_delegate(FUNC(al_magicsound_device::timer_w),this)); + space.install_write_handler(0xfad0,0xfadf,write8_delegate(FUNC(al_magicsound_device::volume_w),this)); + space.install_write_handler(0xfbd0,0xfbdf,write8_delegate(FUNC(al_magicsound_device::mapper_w),this)); m_ramptr = machine().device(":" RAM_TAG); diff --git a/src/devices/bus/cpc/playcity.cpp b/src/devices/bus/cpc/playcity.cpp index 8d6fd109453..181a8fb3b0b 100644 --- a/src/devices/bus/cpc/playcity.cpp +++ b/src/devices/bus/cpc/playcity.cpp @@ -71,11 +71,11 @@ void cpc_playcity_device::device_start() address_space& space = cpu->memory().space(AS_IO); m_slot = dynamic_cast(owner()); - space.install_readwrite_handler(0xf880,0xf883,0,0,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this)); - space.install_readwrite_handler(0xf884,0xf884,0,0,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this)); - space.install_readwrite_handler(0xf888,0xf888,0,0,read8_delegate(FUNC(cpc_playcity_device::ymz2_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz2_data_w),this)); - space.install_write_handler(0xf984,0xf984,0,0,write8_delegate(FUNC(cpc_playcity_device::ymz1_address_w),this)); - space.install_write_handler(0xf988,0xf988,0,0,write8_delegate(FUNC(cpc_playcity_device::ymz2_address_w),this)); + space.install_readwrite_handler(0xf880,0xf883,read8_delegate(FUNC(cpc_playcity_device::ctc_r),this),write8_delegate(FUNC(cpc_playcity_device::ctc_w),this)); + space.install_readwrite_handler(0xf884,0xf884,read8_delegate(FUNC(cpc_playcity_device::ymz1_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz1_data_w),this)); + space.install_readwrite_handler(0xf888,0xf888,read8_delegate(FUNC(cpc_playcity_device::ymz2_data_r),this),write8_delegate(FUNC(cpc_playcity_device::ymz2_data_w),this)); + space.install_write_handler(0xf984,0xf984,write8_delegate(FUNC(cpc_playcity_device::ymz1_address_w),this)); + space.install_write_handler(0xf988,0xf988,write8_delegate(FUNC(cpc_playcity_device::ymz2_address_w),this)); } //------------------------------------------------- diff --git a/src/devices/bus/cpc/smartwatch.cpp b/src/devices/bus/cpc/smartwatch.cpp index e4304323932..4b5c1850fe2 100644 --- a/src/devices/bus/cpc/smartwatch.cpp +++ b/src/devices/bus/cpc/smartwatch.cpp @@ -69,8 +69,8 @@ void cpc_smartwatch_device::device_reset() { device_t* cpu = machine().device(":maincpu"); address_space& space = cpu->memory().space(AS_PROGRAM); - space.install_read_handler(0xc000,0xc001,0,0,read8_delegate(FUNC(cpc_smartwatch_device::rtc_w),this)); - space.install_read_handler(0xc004,0xc004,0,0,read8_delegate(FUNC(cpc_smartwatch_device::rtc_r),this)); + space.install_read_handler(0xc000,0xc001,read8_delegate(FUNC(cpc_smartwatch_device::rtc_w),this)); + space.install_read_handler(0xc004,0xc004,read8_delegate(FUNC(cpc_smartwatch_device::rtc_r),this)); m_bank = membank(":bank7"); } diff --git a/src/devices/bus/cpc/symbfac2.cpp b/src/devices/bus/cpc/symbfac2.cpp index f64b6cfa131..a1df95d48fd 100644 --- a/src/devices/bus/cpc/symbfac2.cpp +++ b/src/devices/bus/cpc/symbfac2.cpp @@ -94,11 +94,11 @@ void cpc_symbiface2_device::device_start() m_slot = dynamic_cast(owner()); - space.install_readwrite_handler(0xfd00,0xfd07,0,0,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this)); - space.install_readwrite_handler(0xfd08,0xfd0f,0,0,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this)); - space.install_read_handler(0xfd10,0xfd10,0,0,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this)); - space.install_readwrite_handler(0xfd14,0xfd15,0,0,read8_delegate(FUNC(cpc_symbiface2_device::rtc_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rtc_w),this)); - space.install_readwrite_handler(0xfd17,0xfd17,0,0,read8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_w),this)); + space.install_readwrite_handler(0xfd00,0xfd07,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs1_w),this)); + space.install_readwrite_handler(0xfd08,0xfd0f,read8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_r),this),write8_delegate(FUNC(cpc_symbiface2_device::ide_cs0_w),this)); + space.install_read_handler(0xfd10,0xfd10,read8_delegate(FUNC(cpc_symbiface2_device::mouse_r),this)); + space.install_readwrite_handler(0xfd14,0xfd15,read8_delegate(FUNC(cpc_symbiface2_device::rtc_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rtc_w),this)); + space.install_readwrite_handler(0xfd17,0xfd17,read8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_r),this),write8_delegate(FUNC(cpc_symbiface2_device::rom_rewrite_w),this)); // set up ROM space (these can be writable, when mapped to &4000, or completely disabled, allowing the built-in ROMs to be visible) // 32 banks of 16kB (512kB) diff --git a/src/devices/bus/cpc/transtape.cpp b/src/devices/bus/cpc/transtape.cpp index 680a40890d4..b1892f3a31e 100644 --- a/src/devices/bus/cpc/transtape.cpp +++ b/src/devices/bus/cpc/transtape.cpp @@ -63,8 +63,8 @@ void cpc_transtape_device::device_start() m_ram = make_unique_clear(0x2000); - m_space->install_write_handler(0xfbf0,0xfbf0,0,0,write8_delegate(FUNC(cpc_transtape_device::output_w),this)); - m_space->install_read_handler(0xfbff,0xfbff,0,0,read8_delegate(FUNC(cpc_transtape_device::input_r),this)); + m_space->install_write_handler(0xfbf0,0xfbf0,write8_delegate(FUNC(cpc_transtape_device::output_w),this)); + m_space->install_read_handler(0xfbff,0xfbff,read8_delegate(FUNC(cpc_transtape_device::input_r),this)); } //------------------------------------------------- diff --git a/src/devices/bus/dmv/k220.cpp b/src/devices/bus/dmv/k220.cpp index cd1c55a39a6..b753e7aa20c 100644 --- a/src/devices/bus/dmv/k220.cpp +++ b/src/devices/bus/dmv/k220.cpp @@ -149,8 +149,8 @@ dmv_k220_device::dmv_k220_device(const machine_config &mconfig, const char *tag, void dmv_k220_device::device_start() { address_space &space = machine().device("maincpu")->space(AS_IO); - space.install_readwrite_handler(0x08, 0x0b, 0, 0, read8_delegate(FUNC(pit8253_device::read), &(*m_pit)), write8_delegate(FUNC(pit8253_device::write), &(*m_pit)), 0); - space.install_readwrite_handler(0x0c, 0x0f, 0, 0, read8_delegate(FUNC(i8255_device::read), &(*m_ppi)), write8_delegate(FUNC(i8255_device::write), &(*m_ppi)), 0); + space.install_readwrite_handler(0x08, 0x0b, read8_delegate(FUNC(pit8253_device::read), &(*m_pit)), write8_delegate(FUNC(pit8253_device::write), &(*m_pit)), 0); + space.install_readwrite_handler(0x0c, 0x0f, read8_delegate(FUNC(i8255_device::read), &(*m_ppi)), write8_delegate(FUNC(i8255_device::write), &(*m_ppi)), 0); } //------------------------------------------------- diff --git a/src/devices/bus/dmv/k230.cpp b/src/devices/bus/dmv/k230.cpp index 33e2c917024..7ac9b984216 100644 --- a/src/devices/bus/dmv/k230.cpp +++ b/src/devices/bus/dmv/k230.cpp @@ -165,7 +165,7 @@ void dmv_k230_device::device_start() void dmv_k234_device::device_start() { dmv_k230_device::device_start(); - m_io->install_readwrite_handler(0xd8, 0xdf, 0, 0, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0); + m_io->install_readwrite_handler(0xd8, 0xdf, read8_delegate(FUNC(dmv_k234_device::snr_r), this), write8_delegate(FUNC(dmv_k234_device::snr_w), this), 0); } //------------------------------------------------- diff --git a/src/devices/bus/ep64/exdos.cpp b/src/devices/bus/ep64/exdos.cpp index d5910c07ee3..093499c401d 100644 --- a/src/devices/bus/ep64/exdos.cpp +++ b/src/devices/bus/ep64/exdos.cpp @@ -151,10 +151,10 @@ ep64_exdos_device::ep64_exdos_device(const machine_config &mconfig, const char * void ep64_exdos_device::device_start() { - m_slot->program().install_rom(0x080000, 0x087fff, 0, 0, m_rom->base()); + m_slot->program().install_rom(0x080000, 0x087fff, m_rom->base()); - m_slot->io().install_readwrite_handler(0x10, 0x13, 0, 0x04, READ8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, write)); - m_slot->io().install_readwrite_handler(0x18, 0x18, 0, 0x04, READ8_DELEGATE(ep64_exdos_device, read), WRITE8_DELEGATE(ep64_exdos_device, write)); + m_slot->io().install_readwrite_handler(0x10, 0x13, 0, 0x04, 0, READ8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, wd_fdc_t, write)); + m_slot->io().install_readwrite_handler(0x18, 0x18, 0, 0x04, 0, READ8_DELEGATE(ep64_exdos_device, read), WRITE8_DELEGATE(ep64_exdos_device, write)); } diff --git a/src/devices/bus/epson_sio/tf20.cpp b/src/devices/bus/epson_sio/tf20.cpp index 07fdf31e858..3acb7ba28a8 100644 --- a/src/devices/bus/epson_sio/tf20.cpp +++ b/src/devices/bus/epson_sio/tf20.cpp @@ -174,7 +174,7 @@ void epson_tf20_device::device_reset() m_mpsc->rxb_w(1); // enable rom - m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, 0, 0x7800, memregion("rom")->base()); + m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x07ff, 0x7800, memregion("rom")->base()); } //------------------------------------------------- diff --git a/src/devices/bus/gameboy/mbc.cpp b/src/devices/bus/gameboy/mbc.cpp index eab3f8ad5d1..3192bcda9ce 100644 --- a/src/devices/bus/gameboy/mbc.cpp +++ b/src/devices/bus/gameboy/mbc.cpp @@ -5,7 +5,7 @@ Game Boy carts with MBC (Memory Bank Controller) - TODO: add proper RTC and Rumble support + TODO: RTC runs too fast while in-game, in MBC-3 games... find the problem! ***********************************************************************************************************/ @@ -179,13 +179,15 @@ void gb_rom_mbc_device::shared_reset() void gb_rom_mbc3_device::device_start() { shared_start(); - save_item(NAME(m_rtc_map)); + save_item(NAME(m_rtc_regs)); + save_item(NAME(m_rtc_ready)); } void gb_rom_mbc3_device::device_reset() { shared_reset(); - memset(m_rtc_map, 0, sizeof(m_rtc_map)); + memset(m_rtc_regs, 0, sizeof(m_rtc_regs)); + m_rtc_ready = 0; } void gb_rom_mbc6_device::device_start() @@ -446,6 +448,18 @@ WRITE8_MEMBER(gb_rom_mbc2_device::write_ram) // MBC3 +void gb_rom_mbc3_device::update_rtc() +{ + system_time curtime; + machine().current_datetime(curtime); + + m_rtc_regs[0] = curtime.local_time.second; + m_rtc_regs[1] = curtime.local_time.minute; + m_rtc_regs[2] = curtime.local_time.hour; + m_rtc_regs[3] = curtime.local_time.day & 0xff; + m_rtc_regs[4] = (m_rtc_regs[4] & 0xf0) | (curtime.local_time.day >> 8); +} + READ8_MEMBER(gb_rom_mbc3_device::read_rom) { if (offset < 0x4000) @@ -472,16 +486,14 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank) { m_ram_bank = data; } - else + else if (has_timer) { - if (has_timer) + if (m_rtc_ready == 1 && data == 0) + m_rtc_ready = 0; + if (m_rtc_ready == 0 && data == 1) { - /* FIXME: RTC Latch goes here */ - m_rtc_map[0] = 50; /* Seconds */ - m_rtc_map[1] = 40; /* Minutes */ - m_rtc_map[2] = 15; /* Hours */ - m_rtc_map[3] = 25; /* Day counter lowest 8 bits */ - m_rtc_map[4] = 0x01; /* Day counter upper bit, timer off, no day overflow occurred (bit7) */ + m_rtc_ready = 1; + update_rtc(); } } } @@ -489,14 +501,16 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank) READ8_MEMBER(gb_rom_mbc3_device::read_ram) { if (m_ram_bank < 4 && m_ram_enable) - { // RAM + { + // RAM if (!m_ram.empty()) return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)]; } if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc) - { // RAM + { + // RTC registers if (has_timer) - return m_rtc_map[m_ram_bank - 8]; + return m_rtc_regs[m_ram_bank - 8]; } return 0xff; } @@ -504,16 +518,16 @@ READ8_MEMBER(gb_rom_mbc3_device::read_ram) WRITE8_MEMBER(gb_rom_mbc3_device::write_ram) { if (m_ram_bank < 4 && m_ram_enable) - { // RAM + { + // RAM if (!m_ram.empty()) m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data; } - if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc) - { // RAM + if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc && m_ram_enable) + { + // RTC registers are writeable too if (has_timer) - { - // what to do here? - } + m_rtc_regs[m_ram_bank - 8] = data; } } @@ -547,7 +561,10 @@ WRITE8_MEMBER(gb_rom_mbc5_device::write_bank) { data &= 0x0f; if (has_rumble) + { + machine().output().set_value("Rumble", BIT(data, 3)); data &= 0x7; + } m_ram_bank = data; } } @@ -1071,8 +1088,6 @@ WRITE8_MEMBER(gb_rom_sintax_device::write_bank) else if (offset < 0x5000) { data &= 0x0f; - if (has_rumble) - data &= 0x7; m_ram_bank = data; } else if (offset < 0x6000) @@ -1167,8 +1182,6 @@ WRITE8_MEMBER(gb_rom_digimon_device::write_bank) { // printf("written $05-$06 %X at %X\n", data, offset); data &= 0x0f; - if (has_rumble) - data &= 0x7; m_ram_bank = data; } // else diff --git a/src/devices/bus/gameboy/mbc.h b/src/devices/bus/gameboy/mbc.h index aae6801ce37..1dcc43875bd 100644 --- a/src/devices/bus/gameboy/mbc.h +++ b/src/devices/bus/gameboy/mbc.h @@ -93,7 +93,11 @@ public: virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; - UINT8 m_rtc_map[5]; + +private: + void update_rtc(); + UINT8 m_rtc_regs[5]; + int m_rtc_ready; }; // ======================> gb_rom_mbc5_device diff --git a/src/devices/bus/gba/gba_slot.cpp b/src/devices/bus/gba/gba_slot.cpp index 5ed54717275..01c0194f67e 100644 --- a/src/devices/bus/gba/gba_slot.cpp +++ b/src/devices/bus/gba/gba_slot.cpp @@ -134,12 +134,18 @@ static const gba_slot slot_list[] = { { GBA_STD, "gba_rom" }, { GBA_SRAM, "gba_sram" }, + { GBA_DRILLDOZ, "gba_drilldoz" }, + { GBA_WARIOTWS, "gba_wariotws" }, { GBA_EEPROM, "gba_eeprom" }, { GBA_EEPROM4, "gba_eeprom_4k" }, + { GBA_YOSHIUG, "gba_yoshiug" }, { GBA_EEPROM64, "gba_eeprom_64k" }, + { GBA_BOKTAI, "gba_boktai" }, { GBA_FLASH, "gba_flash" }, + { GBA_FLASH_RTC, "gba_flash_rtc" }, { GBA_FLASH512, "gba_flash_512" }, { GBA_FLASH1M, "gba_flash_1m" }, + { GBA_FLASH1M_RTC, "gba_flash_1m_rtc" }, { GBA_3DMATRIX, "gba_3dmatrix" }, }; @@ -204,7 +210,7 @@ bool gba_cart_slot_device::call_load() osd_printf_info("GBA: Detected (XML) %s\n", pcb_name ? pcb_name : "NONE"); } - if (m_type == GBA_SRAM) + if (m_type == GBA_SRAM || m_type == GBA_DRILLDOZ || m_type == GBA_WARIOTWS) m_cart->nvram_alloc(0x10000); // mirror the ROM @@ -300,6 +306,8 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) { UINT32 chip = 0; int type = GBA_STD; + bool has_rtc = false; + bool has_rumble = false; // first detect nvram type based on strings inside the file for (int i = 0; i < len; i++) @@ -359,19 +367,30 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) for (auto & elem : gba_chip_fix_eeprom_list) { - const gba_chip_fix_eeprom_item *item = &elem; + const gba_chip_fix_item *item = &elem; if (!strcmp(game_code, item->game_code)) { chip = (chip & ~GBA_CHIP_EEPROM) | GBA_CHIP_EEPROM_64K; break; } } + + for (auto & elem : gba_chip_fix_rumble_list) + { + const gba_chip_fix_item *item = &elem; + if (!strcmp(game_code, item->game_code)) + { + has_rumble = true; + break; + } + } } if (chip & GBA_CHIP_RTC) { - osd_printf_info("game has RTC - not emulated at the moment\n"); + //osd_printf_info("game has RTC - not emulated at the moment\n"); chip &= ~GBA_CHIP_RTC; + has_rtc = true; } osd_printf_info("GBA: Emulate %s\n", gba_chip_string(chip).c_str()); @@ -383,21 +402,29 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len) break; case GBA_CHIP_EEPROM: type = GBA_EEPROM; + if (has_rumble) + type = GBA_YOSHIUG; break; case GBA_CHIP_EEPROM_4K: type = GBA_EEPROM4; break; case GBA_CHIP_EEPROM_64K: type = GBA_EEPROM64; + if (has_rtc) + type = GBA_BOKTAI; break; case GBA_CHIP_FLASH: type = GBA_FLASH; + if (has_rtc) + type = GBA_FLASH_RTC; break; case GBA_CHIP_FLASH_512: type = GBA_FLASH512; break; case GBA_CHIP_FLASH_1M: type = GBA_FLASH1M; + if (has_rtc) + type = GBA_FLASH1M_RTC; break; default: break; @@ -455,6 +482,14 @@ READ32_MEMBER(gba_cart_slot_device::read_ram) return 0xffffffff; } +READ32_MEMBER(gba_cart_slot_device::read_gpio) +{ + if (m_cart) + return m_cart->read_gpio(space, offset, mem_mask); + else + return 0xffffffff; +} + /*------------------------------------------------- write @@ -466,6 +501,12 @@ WRITE32_MEMBER(gba_cart_slot_device::write_ram) m_cart->write_ram(space, offset, data, mem_mask); } +WRITE32_MEMBER(gba_cart_slot_device::write_gpio) +{ + if (m_cart) + m_cart->write_gpio(space, offset, data, mem_mask); +} + /*------------------------------------------------- Internal header logging diff --git a/src/devices/bus/gba/gba_slot.h b/src/devices/bus/gba/gba_slot.h index a3908730180..03b9ca4f653 100644 --- a/src/devices/bus/gba/gba_slot.h +++ b/src/devices/bus/gba/gba_slot.h @@ -13,12 +13,18 @@ enum { GBA_STD = 0, GBA_SRAM, + GBA_DRILLDOZ, + GBA_WARIOTWS, GBA_EEPROM, GBA_EEPROM4, + GBA_YOSHIUG, GBA_EEPROM64, + GBA_BOKTAI, GBA_FLASH, + GBA_FLASH_RTC, GBA_FLASH512, GBA_FLASH1M, + GBA_FLASH1M_RTC, GBA_3DMATRIX }; @@ -35,7 +41,11 @@ public: // reading and writing virtual DECLARE_READ32_MEMBER(read_rom) { return 0xffffffff; } virtual DECLARE_READ32_MEMBER(read_ram) { return 0xffffffff; } + virtual DECLARE_READ32_MEMBER(read_gpio) { return 0; } + virtual DECLARE_READ32_MEMBER(read_tilt) { return 0xffffffff; } virtual DECLARE_WRITE32_MEMBER(write_ram) {}; + virtual DECLARE_WRITE32_MEMBER(write_gpio) {}; + virtual DECLARE_WRITE32_MEMBER(write_tilt) {}; virtual DECLARE_WRITE32_MEMBER(write_mapper) {}; void rom_alloc(UINT32 size, const char *tag); @@ -103,8 +113,12 @@ public: // reading and writing virtual DECLARE_READ32_MEMBER(read_rom); virtual DECLARE_READ32_MEMBER(read_ram); + virtual DECLARE_READ32_MEMBER(read_gpio); + virtual DECLARE_READ32_MEMBER(read_tilt) { if (m_cart) return m_cart->read_tilt(space, offset, mem_mask); else return 0xffffffff; } virtual DECLARE_WRITE32_MEMBER(write_ram); - virtual DECLARE_WRITE32_MEMBER(write_mapper) { if (m_cart) return m_cart->write_mapper(space, offset, data, mem_mask); }; + virtual DECLARE_WRITE32_MEMBER(write_gpio); + virtual DECLARE_WRITE32_MEMBER(write_tilt) { if (m_cart) m_cart->write_tilt(space, offset, data, mem_mask); } + virtual DECLARE_WRITE32_MEMBER(write_mapper) { if (m_cart) m_cart->write_mapper(space, offset, data, mem_mask); } protected: @@ -193,12 +207,12 @@ static const gba_chip_fix_conflict_item gba_chip_fix_conflict_list[] = { "BYUJ", GBA_CHIP_EEPROM_64K }, // 2322 - Yggdra Union (JPN) }; -struct gba_chip_fix_eeprom_item +struct gba_chip_fix_item { char game_code[5]; }; -static const gba_chip_fix_eeprom_item gba_chip_fix_eeprom_list[] = +static const gba_chip_fix_item gba_chip_fix_eeprom_list[] = { // gba scan no. 7 { "AKTJ" }, // 0145 - Hello Kitty Collection - Miracle Fashion Maker (JPN) @@ -588,4 +602,13 @@ static const gba_chip_fix_eeprom_item gba_chip_fix_eeprom_list[] = { "A3IJ" }, // bokura no taiyou - taiyou action rpg - kabunushi go-yuutai ban (japan) (demo) }; +static const gba_chip_fix_item gba_chip_fix_rumble_list[] = +{ + { "KYGP" }, // Yoshi's Universal Gravitation (EUR) + { "KYGE" }, // Yoshi - Topsy-Turvy (USA) + { "KYGJ" }, // Yoshi no Banyuuinryoku (JPN) + { "KHPJ" } // Koro Koro Puzzle - Happy Panechu! (JPN) +}; + + #endif diff --git a/src/devices/bus/gba/rom.cpp b/src/devices/bus/gba/rom.cpp index 4aadc54b884..5fc4798f1d7 100644 --- a/src/devices/bus/gba/rom.cpp +++ b/src/devices/bus/gba/rom.cpp @@ -23,10 +23,16 @@ const device_type GBA_ROM_STD = &device_creator; const device_type GBA_ROM_SRAM = &device_creator; +const device_type GBA_ROM_DRILLDOZ = &device_creator; +const device_type GBA_ROM_WARIOTWS = &device_creator; const device_type GBA_ROM_EEPROM = &device_creator; +const device_type GBA_ROM_YOSHIUG = &device_creator; const device_type GBA_ROM_EEPROM64 = &device_creator; +const device_type GBA_ROM_BOKTAI = &device_creator; const device_type GBA_ROM_FLASH = &device_creator; +const device_type GBA_ROM_FLASH_RTC = &device_creator; const device_type GBA_ROM_FLASH1M = &device_creator; +const device_type GBA_ROM_FLASH1M_RTC = &device_creator; const device_type GBA_ROM_3DMATRIX = &device_creator; @@ -42,33 +48,98 @@ gba_rom_device::gba_rom_device(const machine_config &mconfig, const char *tag, d { } +gba_rom_sram_device::gba_rom_sram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source) +{ +} + gba_rom_sram_device::gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_SRAM, "GBA Carts + SRAM", tag, owner, clock, "gba_sram", __FILE__) { } +gba_rom_drilldoz_device::gba_rom_drilldoz_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_sram_device(mconfig, GBA_ROM_DRILLDOZ, "GBA Carts + SRAM + Rumble", tag, owner, clock, "gba_drilldoz", __FILE__) +{ +} + +gba_rom_wariotws_device::gba_rom_wariotws_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_sram_device(mconfig, GBA_ROM_WARIOTWS, "GBA Carts + SRAM + Rumble + Gyroscope", tag, owner, clock, "gba_wariotws", __FILE__), + m_gyro_z(*this, "GYROZ") +{ +} + +gba_rom_eeprom_device::gba_rom_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source) +{ +} + gba_rom_eeprom_device::gba_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_EEPROM, "GBA Carts + EEPROM", tag, owner, clock, "gba_eeprom", __FILE__) { } +gba_rom_yoshiug_device::gba_rom_yoshiug_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_eeprom_device(mconfig, GBA_ROM_YOSHIUG, "GBA Carts + EEPROM + Tilt Sensor", tag, owner, clock, "gba_yoshiug", __FILE__), + m_tilt_x(*this, "TILTX"), + m_tilt_y(*this, "TILTY") +{ +} + +gba_rom_eeprom64_device::gba_rom_eeprom64_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source) +{ +} + gba_rom_eeprom64_device::gba_rom_eeprom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_EEPROM64, "GBA Carts + EEPROM 64K", tag, owner, clock, "gba_eeprom64", __FILE__) { } +gba_rom_boktai_device::gba_rom_boktai_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_eeprom64_device(mconfig, GBA_ROM_BOKTAI, "GBA Carts + EEPROM 64K + RTC", tag, owner, clock, "gba_boktai", __FILE__), + m_sensor(*this, "LIGHTSENSE") +{ +} + +gba_rom_flash_device::gba_rom_flash_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source), + m_flash_mask(0), + m_flash(*this, "flash") +{ +} + gba_rom_flash_device::gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : gba_rom_device(mconfig, GBA_ROM_FLASH, "GBA Carts + Panasonic Flash", tag, owner, clock, "gba_flash", __FILE__), m_flash_mask(0), + : gba_rom_device(mconfig, GBA_ROM_FLASH, "GBA Carts + Panasonic Flash", tag, owner, clock, "gba_flash", __FILE__), + m_flash_mask(0), + m_flash(*this, "flash") +{ +} + +gba_rom_flash_rtc_device::gba_rom_flash_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_flash_device(mconfig, GBA_ROM_FLASH_RTC, "GBA Carts + Panasonic Flash + RTC", tag, owner, clock, "gba_flash_rtc", __FILE__) +{ +} + +gba_rom_flash1m_device::gba_rom_flash1m_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) + : gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source), + m_flash_mask(0), m_flash(*this, "flash") { } gba_rom_flash1m_device::gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : gba_rom_device(mconfig, GBA_ROM_FLASH1M, "GBA Carts + Sanyo Flash", tag, owner, clock, "gba_flash1m", __FILE__), m_flash_mask(0), + : gba_rom_device(mconfig, GBA_ROM_FLASH1M, "GBA Carts + Sanyo Flash", tag, owner, clock, "gba_flash1m", __FILE__), + m_flash_mask(0), m_flash(*this, "flash") { } +gba_rom_flash1m_rtc_device::gba_rom_flash1m_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : gba_rom_flash1m_device(mconfig, GBA_ROM_FLASH1M_RTC, "GBA Carts + Sanyo Flash + RTC", tag, owner, clock, "gba_flash1m_rtc", __FILE__) +{ +} + gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : gba_rom_device(mconfig, GBA_ROM_3DMATRIX, "GBA Carts + 3D Matrix Memory Mapper", tag, owner, clock, "gba_3dmatrix", __FILE__) { @@ -81,10 +152,31 @@ gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig, void gba_rom_device::device_start() { + save_item(NAME(m_gpio_regs)); + save_item(NAME(m_gpio_write_only)); + save_item(NAME(m_gpio_dirs)); } void gba_rom_device::device_reset() { + m_gpio_regs[0] = 0; + m_gpio_regs[1] = 0; + m_gpio_regs[2] = 0; + m_gpio_regs[3] = 0; + m_gpio_write_only = 0; + m_gpio_dirs = 0; +} + +void gba_rom_wariotws_device::device_start() +{ + save_item(NAME(m_last_val)); + save_item(NAME(m_counter)); +} + +void gba_rom_wariotws_device::device_reset() +{ + m_last_val = 0; + m_counter = 0; } void gba_rom_flash_device::device_reset() @@ -105,6 +197,22 @@ void gba_rom_eeprom_device::device_start() m_eeprom = std::make_unique(machine(), (UINT8*)get_nvram_base(), get_nvram_size(), 6); } +void gba_rom_yoshiug_device::device_start() +{ + gba_rom_eeprom_device::device_start(); + save_item(NAME(m_tilt_ready)); + save_item(NAME(m_xpos)); + save_item(NAME(m_ypos)); +} + +void gba_rom_yoshiug_device::device_reset() +{ + m_tilt_ready = 0; + m_xpos = 0; + m_ypos = 0; +} + + void gba_rom_eeprom64_device::device_start() { // for the moment we use a custom eeprom implementation, so we alloc/save it as nvram @@ -112,6 +220,31 @@ void gba_rom_eeprom64_device::device_start() m_eeprom = std::make_unique(machine(), (UINT8*)get_nvram_base(), get_nvram_size(), 14); } +void gba_rom_boktai_device::device_start() +{ + gba_rom_eeprom64_device::device_start(); + m_rtc = std::make_unique(machine()); + + save_item(NAME(m_last_val)); + save_item(NAME(m_counter)); +} + +void gba_rom_boktai_device::device_reset() +{ + m_last_val = 0; + m_counter = 0; +} + +void gba_rom_flash_rtc_device::device_start() +{ + m_rtc = std::make_unique(machine()); +} + +void gba_rom_flash1m_rtc_device::device_start() +{ + m_rtc = std::make_unique(machine()); +} + void gba_rom_3dmatrix_device::device_start() { save_item(NAME(m_src)); @@ -131,6 +264,75 @@ void gba_rom_3dmatrix_device::device_reset() mapper specific handlers -------------------------------------------------*/ +/*------------------------------------------------- + This is a preliminary implementation of the + General Purpose I/O Port embedded in the GBA PCBs + as described at : http://problemkaputt.de/gbatek.htm#gbacartioportgpio + + Functions read_gpio/write_gpio only give the + I/O interface while the actual on-cart devices + are read and written through gpio_dev_read/gpio_dev_write + which are virtual methods defined in the specific + cart types. + -------------------------------------------------*/ + +READ32_MEMBER(gba_rom_device::read_gpio) +{ + logerror("read GPIO offs %X\n", offset); + if (!m_gpio_write_only) + { + switch (offset) + { + case 0: + default: + if (ACCESSING_BITS_0_15) + { + UINT16 ret = gpio_dev_read(m_gpio_dirs); + return ret; + } + if (ACCESSING_BITS_16_31) + return m_gpio_regs[1] << 16; + case 1: + if (ACCESSING_BITS_0_15) + return m_gpio_regs[2]; + if (ACCESSING_BITS_16_31) + return m_gpio_regs[3] << 16; + } + return 0; + } + else + return m_rom[offset + 0xc4/4]; +} + +WRITE32_MEMBER(gba_rom_device::write_gpio) +{ + logerror("write GPIO offs %X data %X\n", offset, data); + switch (offset) + { + case 0: + default: + if (ACCESSING_BITS_0_15) + { + gpio_dev_write(data & 0xffff, m_gpio_dirs); + } + if (ACCESSING_BITS_16_31) + { + m_gpio_dirs = (data >> 16) & 0x0f; + m_gpio_regs[1] = (data >> 16) & 0xffff; + } + break; + case 1: + if (ACCESSING_BITS_0_15) + { + m_gpio_write_only = BIT(data, 0) ? 0 : 1; + m_gpio_regs[2] = data & 0xffff; + } + if (ACCESSING_BITS_16_31) + m_gpio_regs[3] = (data >> 16) & 0xffff; + break; + } +} + /*------------------------------------------------- Carts with SRAM @@ -151,6 +353,60 @@ WRITE32_MEMBER(gba_rom_sram_device::write_ram) } +// SRAM cart variant with additional Rumble motor (used by Drill Dozer) + +void gba_rom_drilldoz_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + if ((gpio_dirs & 0x08)) + { + // send impulse to Rumble sensor + machine().output().set_value("Rumble", BIT(data, 3)); + } +} + + +// SRAM cart variant with additional Rumble motor + Gyroscope (used by Warioware Twist) + +static INPUT_PORTS_START( wariotws_gyroscope ) + PORT_START("GYROZ") + PORT_BIT( 0xfff, 0x6c0, IPT_AD_STICK_Z ) PORT_MINMAX(0x354,0x9e3) PORT_SENSITIVITY(0x10) PORT_KEYDELTA(0x50) +INPUT_PORTS_END + +ioport_constructor gba_rom_wariotws_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( wariotws_gyroscope ); +} + +UINT16 gba_rom_wariotws_device::gpio_dev_read(int gpio_dirs) +{ + int gyro = 0; + if (gpio_dirs == 0x0b) + gyro = BIT(m_gyro_z->read(), m_counter); + return (gyro << 2); +} + +void gba_rom_wariotws_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + if ((gpio_dirs & 0x08)) + { + // send impulse to Rumble sensor + machine().output().set_value("Rumble", BIT(data, 3)); + } + + if (gpio_dirs == 0x0b) + { + if ((data & 2) && (m_counter > 0)) + m_counter--; + + if (data & 1) + m_counter = 15; + + m_last_val = data & 0x0b; + } +} + + + /*------------------------------------------------- Carts with Flash RAM -------------------------------------------------*/ @@ -257,164 +513,34 @@ WRITE32_MEMBER(gba_rom_flash1m_device::write_ram) } } +// cart variants with additional S3511 RTC + +UINT16 gba_rom_flash_rtc_device::gpio_dev_read(int gpio_dirs) +{ + return 5 | (m_rtc->read_line() << 1); +} + +void gba_rom_flash_rtc_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + m_rtc->write(data, gpio_dirs); +} + + +UINT16 gba_rom_flash1m_rtc_device::gpio_dev_read(int gpio_dirs) +{ + return 5 | (m_rtc->read_line() << 1); +} + +void gba_rom_flash1m_rtc_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + m_rtc->write(data, gpio_dirs); +} + /*------------------------------------------------- Carts with EEPROM - - TODO: can this sketchy EEPROM device be merged - with the core implementation? -------------------------------------------------*/ -// GBA EEPROM Device - -gba_eeprom_device::gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits) : - m_state(EEP_IDLE), - m_machine(machine) -{ - m_data = eeprom; - m_data_size = size; - m_addr_bits = addr_bits; - - m_machine.save().save_item(m_state, "GBA_EEPROM/m_state"); - m_machine.save().save_item(m_command, "GBA_EEPROM/m_command"); - m_machine.save().save_item(m_count, "GBA_EEPROM/m_count"); - m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr"); - m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits"); - m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data"); -} - -UINT32 gba_eeprom_device::read() -{ - UINT32 out; - - switch (m_state) - { - case EEP_IDLE: -// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, activecpu_get_pc(), 1); - return 0x00010001; // "ready" - - case EEP_READFIRST: - m_count--; - - if (!m_count) - { - m_count = 64; - m_bits = 0; - m_eep_data = 0; - m_state = EEP_READ; - } - break; - case EEP_READ: - if ((m_bits == 0) && (m_count)) - { - if (m_addr >= m_data_size) - { - fatalerror("eeprom: invalid address (%x)\n", m_addr); - } - m_eep_data = m_data[m_addr]; - //printf("EEPROM read @ %x = %x (%x)\n", m_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0); - m_addr++; - m_bits = 8; - } - - out = (m_eep_data & 0x80) ? 1 : 0; - out |= (out<<16); - m_eep_data <<= 1; - - m_bits--; - m_count--; - - if (!m_count) - { - m_state = EEP_IDLE; - } - -// printf("out = %08x\n", out); -// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_state, activecpu_get_pc(), out); - return out; - } -// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, space.device().safe_pc(), 0); - return 0; -} - -void gba_eeprom_device::write(UINT32 data) -{ -// printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_state, space.device().safe_pc()); - switch (m_state) - { - case EEP_IDLE: - if (data == 1) - m_state++; - break; - - case EEP_COMMAND: - if (data == 1) - m_command = EEP_READFIRST; - else - m_command = EEP_WRITE; - m_state = EEP_ADDR; - m_count = m_addr_bits; - m_addr = 0; - break; - - case EEP_ADDR: - m_addr <<= 1; - m_addr |= (data & 1); - m_count--; - if (!m_count) - { - m_addr *= 8; // each address points to 8 bytes - if (m_command == EEP_READFIRST) - m_state = EEP_AFTERADDR; - else - { - m_count = 64; - m_bits = 8; - m_state = EEP_WRITE; - m_eep_data = 0; - } - } - break; - - case EEP_AFTERADDR: - m_state = m_command; - m_count = 64; - m_bits = 0; - m_eep_data = 0; - if (m_state == EEP_READFIRST) - m_count = 4; - break; - - case EEP_WRITE: - m_eep_data <<= 1; - m_eep_data |= (data & 1); - m_bits--; - m_count--; - - if (m_bits == 0) - { - osd_printf_verbose("%08x: EEPROM: %02x to %x\n", machine().device("maincpu")->safe_pc(), m_eep_data, m_addr); - if (m_addr >= m_data_size) - fatalerror("eeprom: invalid address (%x)\n", m_addr); - - m_data[m_addr] = m_eep_data; - m_addr++; - m_eep_data = 0; - m_bits = 8; - } - - if (!m_count) - m_state = EEP_AFTERWRITE; - break; - - case EEP_AFTERWRITE: - m_state = EEP_IDLE; - break; - } -} - - - READ32_MEMBER(gba_rom_eeprom_device::read_ram) { // Larger games have smaller access to EERPOM content @@ -458,6 +584,137 @@ WRITE32_MEMBER(gba_rom_eeprom64_device::write_ram) } +/*------------------------------------------------- + Carts with EEPROM + Tilt Sensor + + Note about the calibration: this can seem a bit + tricky at first, because the emulated screen + does not turn as the GBA would... + In order to properly calibrate the sensor, just + keep pressed right for a few seconds when requested + to calibrate right inclination (first calibration + screen in Yoshi Universal Gravitation) so to get the + full right range; then keep pressed for left for a + few seconds when requested to calibrate left + inclination (second calibration screen in Yoshi + Universal Gravitation) so to get the full left range + + -------------------------------------------------*/ + +static INPUT_PORTS_START( yoshiug_tilt ) + PORT_START("TILTX") + PORT_BIT( 0xfff, 0x3a0, IPT_AD_STICK_X ) PORT_MINMAX(0x2af,0x477) PORT_SENSITIVITY(0x30) PORT_KEYDELTA(0x50) + PORT_START("TILTY") + PORT_BIT( 0xfff, 0x3a0, IPT_AD_STICK_Y ) PORT_MINMAX(0x2c3,0x480) PORT_SENSITIVITY(0x30) PORT_KEYDELTA(0x50) +INPUT_PORTS_END + +ioport_constructor gba_rom_yoshiug_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( yoshiug_tilt ); +} + + +READ32_MEMBER(gba_rom_yoshiug_device::read_tilt) +{ + switch (offset) + { + case 0x200/4: + if (ACCESSING_BITS_0_15) + return (m_xpos & 0xff); + break; + case 0x300/4: + if (ACCESSING_BITS_0_15) + return ((m_xpos >> 8) & 0x0f) | 0x80; + break; + case 0x400/4: + if (ACCESSING_BITS_0_15) + return (m_ypos & 0xff); + break; + case 0x500/4: + if (ACCESSING_BITS_0_15) + return ((m_ypos >> 8) & 0x0f); + break; + default: + break; + } + return 0xffffffff; +} + +WRITE32_MEMBER(gba_rom_yoshiug_device::write_tilt) +{ + switch (offset) + { + case 0x000/4: + if (data == 0x55) m_tilt_ready = 1; + break; + case 0x100/4: + if (data == 0xaa) + { + m_xpos = m_tilt_x->read(); + m_ypos = m_tilt_y->read(); + m_tilt_ready = 0; + } + break; + default: + break; + } +} + + +/*------------------------------------------------- + Carts with EEPROM + S3511 RTC + Light Sensor + -------------------------------------------------*/ + +static INPUT_PORTS_START( boktai_sensor ) + PORT_START("LIGHTSENSE") + PORT_CONFNAME( 0xff, 0xe8, "Light Sensor" ) + PORT_CONFSETTING( 0xe8, "Complete Darkness" ) + PORT_CONFSETTING( 0xe4, "10%" ) + PORT_CONFSETTING( 0xdc, "20%" ) + PORT_CONFSETTING( 0xd4, "30%" ) + PORT_CONFSETTING( 0xc8, "40%" ) + PORT_CONFSETTING( 0xb8, "50%" ) + PORT_CONFSETTING( 0xa8, "60%" ) + PORT_CONFSETTING( 0x98, "70%" ) + PORT_CONFSETTING( 0x88, "80%" ) + PORT_CONFSETTING( 0x68, "90%" ) + PORT_CONFSETTING( 0x48, "Very Bright" ) +INPUT_PORTS_END + + +ioport_constructor gba_rom_boktai_device::device_input_ports() const +{ + return INPUT_PORTS_NAME( boktai_sensor ); +} + +UINT16 gba_rom_boktai_device::gpio_dev_read(int gpio_dirs) +{ + int light = (gpio_dirs == 7 && m_counter >= m_sensor->read()) ? 1 : 0; + return 5 | (m_rtc->read_line() << 1) | (light << 3); +} + +void gba_rom_boktai_device::gpio_dev_write(UINT16 data, int gpio_dirs) +{ + m_rtc->write(data, gpio_dirs); + if (gpio_dirs == 7) + { + if (data & 2) + m_counter = 0; + + if ((data & 1) && !(m_last_val & 1)) + { + m_counter++; + if (m_counter == 0x100) + m_counter = 0; + } + + m_last_val = data & 7; + } +} + + + + /*------------------------------------------------- Carts with 3D Matrix Memory controller @@ -511,3 +768,328 @@ WRITE32_MEMBER(gba_rom_3dmatrix_device::write_mapper) break; } } + + + +// Additional devices, to be moved to separate source files at a later stage + +/*------------------------------------------------- + Seiko S-3511 RTC implementation + + TODO: transform this into a separate device, using + also dirtc.cpp! + -------------------------------------------------*/ + +gba_s3511_device::gba_s3511_device(running_machine &machine) : + m_phase(S3511_RTC_IDLE), + m_machine(machine) +{ + m_last_val = 0; + m_bits = 0; + m_command = 0; + m_data_len = 1; + m_data[0] = 0; + + m_machine.save().save_item(m_phase, "GBA_RTC/m_phase"); + m_machine.save().save_item(m_data, "GBA_RTC/m_data"); + m_machine.save().save_item(m_last_val, "GBA_RTC/m_last_val"); + m_machine.save().save_item(m_bits, "GBA_RTC/m_bits"); + m_machine.save().save_item(m_command, "GBA_RTC/m_command"); + m_machine.save().save_item(m_data_len, "GBA_RTC/m_data_len"); +} + + +UINT8 gba_s3511_device::convert_to_bcd(int val) +{ + return (((val % 100) / 10) << 4) | (val % 10); +} + +void gba_s3511_device::update_time(int len) +{ + system_time curtime; + m_machine.current_datetime(curtime); + + if (len == 7) + { + m_data[0] = convert_to_bcd(curtime.local_time.year); + m_data[1] = convert_to_bcd(curtime.local_time.month + 1); + m_data[2] = convert_to_bcd(curtime.local_time.mday); + m_data[3] = convert_to_bcd(curtime.local_time.weekday); + m_data[4] = convert_to_bcd(curtime.local_time.hour); + m_data[5] = convert_to_bcd(curtime.local_time.minute); + m_data[6] = convert_to_bcd(curtime.local_time.second); + } + else if (len == 3) + { + m_data[0] = convert_to_bcd(curtime.local_time.hour); + m_data[1] = convert_to_bcd(curtime.local_time.minute); + m_data[2] = convert_to_bcd(curtime.local_time.second); + } +} + + +int gba_s3511_device::read_line() +{ + int pin = 0; + switch (m_phase) + { + case S3511_RTC_DATAOUT: + //printf("mmm %d - %X - %d - %d\n", m_bits, m_data[m_bits >> 3], m_bits >> 3, BIT(m_data[m_bits >> 3], (m_bits & 7))); + pin = BIT(m_data[m_bits >> 3], (m_bits & 7)); + m_bits++; + if (m_bits == 8 * m_data_len) + { + //for (int i = 0; i < m_data_len; i++) + // printf("RTC DATA OUT COMPLETE %X (reg %d) \n", m_data[i], i); + m_bits = 0; + m_phase = S3511_RTC_IDLE; + } + break; + } + return pin; +} + + +void gba_s3511_device::write(UINT16 data, int gpio_dirs) +{ +// printf("gpio_dev_write data %X\n", data); + if (m_phase == S3511_RTC_IDLE && (m_last_val & 5) == 1 && (data & 5) == 5) + { + m_phase = S3511_RTC_COMMAND; + m_bits = 0; + m_command = 0; + } + else + { +// if (m_phase == 3) +// printf("RTC command OK\n"); + if (!(m_last_val & 1) && (data & 1)) + { + // bit transfer + m_last_val = data & 0xff; + switch (m_phase) + { + case S3511_RTC_DATAIN: + if (!BIT(gpio_dirs, 1)) + { + m_data[m_bits >> 3] = (m_data[m_bits >> 3] >> 1) | ((data << 6) & 0x80); + m_bits++; + if (m_bits == 8 * m_data_len) + { + //for (int i = 0; i < m_data_len; i++) + // printf("RTC DATA IN COMPLETE %X (reg %d) \n", m_data[i], i); + m_bits = 0; + m_phase = S3511_RTC_IDLE; + } + } + break; + case S3511_RTC_DATAOUT: + break; + case S3511_RTC_COMMAND: + m_command |= (BIT(data, 1) << (7 - m_bits)); + m_bits++; + if (m_bits == 8) + { + m_bits = 0; + //printf("RTC command %X ENTERED!!!\n", m_command); + switch (m_command) + { + case 0x60: + // reset? + m_phase = S3511_RTC_IDLE; + m_bits = 0; + break; + case 0x62: + m_phase = S3511_RTC_DATAIN; + m_data_len = 1; + break; + case 0x63: + m_data_len = 1; + m_data[0] = 0x40; + m_phase = S3511_RTC_DATAOUT; + break; + case 0x64: + break; + case 0x65: + m_data_len = 7; + update_time(m_data_len); + m_phase = S3511_RTC_DATAOUT; + break; + case 0x67: + m_data_len = 3; + update_time(m_data_len); + m_phase = S3511_RTC_DATAOUT; + break; + default: + printf("Unknown RTC command %02X\n", m_command); + m_phase = S3511_RTC_IDLE; + break; + } + } + break; + case S3511_RTC_IDLE: + default: + break; + } + } + else + m_last_val = data & 0xff; + } +} + + +/*------------------------------------------------- + GBA EEPROM Device + + TODO: can this sketchy EEPROM device be merged + with the core implementation? + -------------------------------------------------*/ + +// + +gba_eeprom_device::gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits) : + m_state(EEP_IDLE), + m_machine(machine) +{ + m_data = eeprom; + m_data_size = size; + m_addr_bits = addr_bits; + + m_machine.save().save_item(m_state, "GBA_EEPROM/m_state"); + m_machine.save().save_item(m_command, "GBA_EEPROM/m_command"); + m_machine.save().save_item(m_count, "GBA_EEPROM/m_count"); + m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr"); + m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits"); + m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data"); +} + +UINT32 gba_eeprom_device::read() +{ + UINT32 out; + + switch (m_state) + { + case EEP_IDLE: +// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, activecpu_get_pc(), 1); + return 0x00010001; // "ready" + + case EEP_READFIRST: + m_count--; + + if (!m_count) + { + m_count = 64; + m_bits = 0; + m_eep_data = 0; + m_state = EEP_READ; + } + break; + case EEP_READ: + if ((m_bits == 0) && (m_count)) + { + if (m_addr >= m_data_size) + { + fatalerror("eeprom: invalid address (%x)\n", m_addr); + } + m_eep_data = m_data[m_addr]; + //printf("EEPROM read @ %x = %x (%x)\n", m_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0); + m_addr++; + m_bits = 8; + } + + out = (m_eep_data & 0x80) ? 1 : 0; + out |= (out<<16); + m_eep_data <<= 1; + + m_bits--; + m_count--; + + if (!m_count) + { + m_state = EEP_IDLE; + } + +// printf("out = %08x\n", out); +// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_state, activecpu_get_pc(), out); + return out; + } +// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, space.device().safe_pc(), 0); + return 0; +} + +void gba_eeprom_device::write(UINT32 data) +{ +// printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_state, space.device().safe_pc()); + switch (m_state) + { + case EEP_IDLE: + if (data == 1) + m_state++; + break; + + case EEP_COMMAND: + if (data == 1) + m_command = EEP_READFIRST; + else + m_command = EEP_WRITE; + m_state = EEP_ADDR; + m_count = m_addr_bits; + m_addr = 0; + break; + + case EEP_ADDR: + m_addr <<= 1; + m_addr |= (data & 1); + m_count--; + if (!m_count) + { + m_addr *= 8; // each address points to 8 bytes + if (m_command == EEP_READFIRST) + m_state = EEP_AFTERADDR; + else + { + m_count = 64; + m_bits = 8; + m_state = EEP_WRITE; + m_eep_data = 0; + } + } + break; + + case EEP_AFTERADDR: + m_state = m_command; + m_count = 64; + m_bits = 0; + m_eep_data = 0; + if (m_state == EEP_READFIRST) + m_count = 4; + break; + + case EEP_WRITE: + m_eep_data <<= 1; + m_eep_data |= (data & 1); + m_bits--; + m_count--; + + if (m_bits == 0) + { + osd_printf_verbose("%08x: EEPROM: %02x to %x\n", machine().device("maincpu")->safe_pc(), m_eep_data, m_addr); + if (m_addr >= m_data_size) + fatalerror("eeprom: invalid address (%x)\n", m_addr); + + m_data[m_addr] = m_eep_data; + m_addr++; + m_eep_data = 0; + m_bits = 8; + } + + if (!m_count) + m_state = EEP_AFTERWRITE; + break; + + case EEP_AFTERWRITE: + m_state = EEP_IDLE; + break; + } +} + diff --git a/src/devices/bus/gba/rom.h b/src/devices/bus/gba/rom.h index e13f6c623ac..4a1850c5fa2 100644 --- a/src/devices/bus/gba/rom.h +++ b/src/devices/bus/gba/rom.h @@ -6,81 +6,37 @@ #include "gba_slot.h" #include "machine/intelfsh.h" +// GBA RTC device -// ======================> gba_rom_device - -class gba_rom_device : public device_t, - public device_gba_cart_interface -{ -public: - // construction/destruction - gba_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); - gba_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_rom) override { return m_rom[offset]; } +enum { + S3511_RTC_IDLE = 0, + S3511_RTC_DATAOUT, + S3511_RTC_DATAIN, + S3511_RTC_COMMAND }; -// ======================> gba_rom_sram_device - -class gba_rom_sram_device : public gba_rom_device +class gba_s3511_device { public: - // construction/destruction - gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_ram) override; - virtual DECLARE_WRITE32_MEMBER(write_ram) override; + gba_s3511_device(running_machine &machine); + running_machine &machine() const { return m_machine; } + + void update_time(int len); + UINT8 convert_to_bcd(int val); + + int read_line(); + void write(UINT16 data, int gpio_dirs); + +protected: + int m_phase; + UINT8 m_last_val, m_bits, m_command; + int m_data_len; + UINT8 m_data[7]; + + running_machine& m_machine; }; -// ======================> gba_rom_flash_device -class gba_rom_flash_device : public gba_rom_device -{ -public: - // construction/destruction - gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual machine_config_constructor device_mconfig_additions() const override; - virtual void device_reset() override; - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_ram) override; - virtual DECLARE_WRITE32_MEMBER(write_ram) override; - -private: - //UINT32 m_flash_size; - UINT32 m_flash_mask; - required_device m_flash; -}; - -// ======================> gba_rom_flash1m_device - -class gba_rom_flash1m_device : public gba_rom_device -{ -public: - // construction/destruction - gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - - // device-level overrides - virtual machine_config_constructor device_mconfig_additions() const override; - virtual void device_reset() override; - - // reading and writing - virtual DECLARE_READ32_MEMBER(read_ram) override; - virtual DECLARE_WRITE32_MEMBER(write_ram) override; - -private: - //UINT32 m_flash_size; - UINT32 m_flash_mask; - required_device m_flash; -}; // GBA EEPROM device // TODO: is it possible to merge this with the standard EEPROM devices in the core? @@ -102,10 +58,10 @@ class gba_eeprom_device public: gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits); running_machine &machine() const { return m_machine; } - + UINT32 read(); void write(UINT32 data); - + protected: UINT8 *m_data; UINT32 m_data_size; @@ -116,17 +72,184 @@ protected: int m_bits; int m_addr_bits; UINT8 m_eep_data; - + running_machine& m_machine; }; + +// ======================> gba_rom_device + +class gba_rom_device : public device_t, + public device_gba_cart_interface +{ +public: + // construction/destruction + gba_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_rom) override { return m_rom[offset]; } + + virtual DECLARE_READ32_MEMBER(read_gpio) override; + virtual DECLARE_WRITE32_MEMBER(write_gpio) override; + + virtual UINT16 gpio_dev_read(int gpio_dirs) { return 0; } + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) {} + +private: + UINT16 m_gpio_regs[4]; + UINT8 m_gpio_write_only, m_gpio_dirs; +}; + + +// ======================> gba_rom_sram_device + +class gba_rom_sram_device : public gba_rom_device +{ +public: + // construction/destruction + gba_rom_sram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_ram) override; + virtual DECLARE_WRITE32_MEMBER(write_ram) override; +}; + + +// ======================> gba_rom_drilldoz_device + +class gba_rom_drilldoz_device : public gba_rom_sram_device +{ +public: + // construction/destruction + gba_rom_drilldoz_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; +}; + + +// ======================> gba_rom_wariotws_device + +class gba_rom_wariotws_device : public gba_rom_sram_device +{ +public: + // construction/destruction + gba_rom_wariotws_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + virtual ioport_constructor device_input_ports() const override; + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + UINT8 m_last_val; + int m_counter; + required_ioport m_gyro_z; +}; + + +// ======================> gba_rom_flash_device + +class gba_rom_flash_device : public gba_rom_device +{ +public: + // construction/destruction + gba_rom_flash_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_reset() override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_ram) override; + virtual DECLARE_WRITE32_MEMBER(write_ram) override; + +protected: + //UINT32 m_flash_size; + UINT32 m_flash_mask; + required_device m_flash; +}; + + +// ======================> gba_rom_flash_rtc_device + +class gba_rom_flash_rtc_device : public gba_rom_flash_device +{ +public: + // construction/destruction + gba_rom_flash_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + std::unique_ptr m_rtc; +}; + + +// ======================> gba_rom_flash1m_device + +class gba_rom_flash1m_device : public gba_rom_device +{ +public: + // construction/destruction + gba_rom_flash1m_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); + gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual machine_config_constructor device_mconfig_additions() const override; + virtual void device_reset() override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_ram) override; + virtual DECLARE_WRITE32_MEMBER(write_ram) override; + +protected: + //UINT32 m_flash_size; + UINT32 m_flash_mask; + required_device m_flash; +}; + + +// ======================> gba_rom_flash1m_rtc_device + +class gba_rom_flash1m_rtc_device : public gba_rom_flash1m_device +{ +public: + // construction/destruction + gba_rom_flash1m_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + std::unique_ptr m_rtc; +}; + + // ======================> gba_rom_eeprom_device class gba_rom_eeprom_device : public gba_rom_device { public: // construction/destruction + gba_rom_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); gba_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // device-level overrides @@ -141,12 +264,38 @@ private: }; +// ======================> gba_rom_yoshiug_device + +class gba_rom_yoshiug_device : public gba_rom_eeprom_device +{ +public: + // construction/destruction + gba_rom_yoshiug_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; + + // reading and writing + virtual DECLARE_READ32_MEMBER(read_tilt) override; + virtual DECLARE_WRITE32_MEMBER(write_tilt) override; + +private: + int m_tilt_ready; + UINT16 m_xpos, m_ypos; + required_ioport m_tilt_x; + required_ioport m_tilt_y; +}; + + // ======================> gba_rom_eeprom64_device class gba_rom_eeprom64_device : public gba_rom_device { public: // construction/destruction + gba_rom_eeprom64_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source); gba_rom_eeprom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); // device-level overrides @@ -156,11 +305,35 @@ public: virtual DECLARE_READ32_MEMBER(read_ram) override; virtual DECLARE_WRITE32_MEMBER(write_ram) override; -private: +protected: std::unique_ptr m_eeprom; }; +// ======================> gba_rom_boktai_device + +class gba_rom_boktai_device : public gba_rom_eeprom64_device +{ +public: + // construction/destruction + gba_rom_boktai_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; + + virtual UINT16 gpio_dev_read(int gpio_dirs) override; + virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override; + +private: + std::unique_ptr m_rtc; + required_ioport m_sensor; + UINT8 m_last_val; + int m_counter; +}; + + // ======================> gba_rom_3dmatrix_device class gba_rom_3dmatrix_device : public gba_rom_device @@ -184,10 +357,16 @@ private: // device type definition extern const device_type GBA_ROM_STD; extern const device_type GBA_ROM_SRAM; +extern const device_type GBA_ROM_DRILLDOZ; +extern const device_type GBA_ROM_WARIOTWS; extern const device_type GBA_ROM_EEPROM; +extern const device_type GBA_ROM_YOSHIUG; extern const device_type GBA_ROM_EEPROM64; +extern const device_type GBA_ROM_BOKTAI; extern const device_type GBA_ROM_FLASH; +extern const device_type GBA_ROM_FLASH_RTC; extern const device_type GBA_ROM_FLASH1M; +extern const device_type GBA_ROM_FLASH1M_RTC; extern const device_type GBA_ROM_3DMATRIX; diff --git a/src/devices/bus/imi7000/imi5000h.cpp b/src/devices/bus/imi7000/imi5000h.cpp index bca1e9f0083..ab4af469ee9 100644 --- a/src/devices/bus/imi7000/imi5000h.cpp +++ b/src/devices/bus/imi7000/imi5000h.cpp @@ -81,7 +81,7 @@ static ADDRESS_MAP_START( imi5000h_io, AS_IO, 8, imi5000h_device ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE(Z80PIO_0_TAG, z80pio_device, read, write) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE(Z80PIO_2_TAG, z80pio_device, read, write) AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(Z80PIO_3_TAG, z80pio_device, read, write) - AM_RANGE(0x10, 0x13) AM_MIRROR(0x03) // BEGRDY + AM_RANGE(0x10, 0x10) AM_MIRROR(0x03) // BEGRDY AM_RANGE(0x14, 0x14) AM_MIRROR(0x03) // HSXCLR AM_RANGE(0x18, 0x18) AM_MIRROR(0x03) // XFERSTB AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) diff --git a/src/devices/bus/isa/3c503.cpp b/src/devices/bus/isa/3c503.cpp index f0522e7fdbd..e1f44cbe4d5 100644 --- a/src/devices/bus/isa/3c503.cpp +++ b/src/devices/bus/isa/3c503.cpp @@ -35,8 +35,8 @@ void el2_3c503_device::device_start() { memset(m_rom, 0, 8*1024); // empty m_dp8390->set_mac(mac); set_isa_device(); - m_isa->install_device(0x0300, 0x030f, 0, 0, read8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_w), this)); - m_isa->install_device(0x0700, 0x070f, 0, 0, read8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_w), this)); + m_isa->install_device(0x0300, 0x030f, read8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_loport_w), this)); + m_isa->install_device(0x0700, 0x070f, read8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_r), this), write8_delegate(FUNC(el2_3c503_device::el2_3c503_hiport_w), this)); // TODO: This is wrong, fix if anything actually uses it // DMA can change in runtime @@ -57,8 +57,8 @@ void el2_3c503_device::device_reset() { m_regs.pcfr = 0x20; // address 0xcc000 m_regs.ctrl = 0x0a; m_irq_state = CLEAR_LINE; - m_isa->unmap_bank(SADDR, SADDR + 0x1fff, 0, 0); - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 rom", m_rom); + m_isa->unmap_bank(SADDR, SADDR + 0x1fff); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom); } void el2_3c503_device::set_irq(int state) { @@ -193,16 +193,16 @@ WRITE8_MEMBER(el2_3c503_device::el2_3c503_hiport_w) { return; case 5: if((m_regs.gacfr & 0xf) != (data & 0xf)) { - m_isa->unmap_bank(SADDR, SADDR + 0x1fff, 0, 0); + m_isa->unmap_bank(SADDR, SADDR + 0x1fff); switch(data & 0xf) { case 0: - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 rom", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 rom", m_rom); break; case 9: - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 ram", m_board_ram); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 ram", m_board_ram); break; default: - m_isa->install_bank(SADDR, SADDR + 0x1fff, 0, 0, "3c503 no map", m_rom); + m_isa->install_bank(SADDR, SADDR + 0x1fff, "3c503 no map", m_rom); break; } } diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp index 85c316a6452..6c4dcd234a5 100644 --- a/src/devices/bus/isa/3c505.cpp +++ b/src/devices/bus/isa/3c505.cpp @@ -400,14 +400,14 @@ void threecom3c505_device::device_reset() m_irq = m_irqdrq->read() & 0xf; m_drq = (m_irqdrq->read() >> 4) & 0x7; - m_isa->install16_device(base, base + ELP_IO_EXTENT - 1, 0, 0, read16_delegate(FUNC(threecom3c505_device::read), this), write16_delegate(FUNC(threecom3c505_device::write), this)); + m_isa->install16_device(base, base + ELP_IO_EXTENT - 1, read16_delegate(FUNC(threecom3c505_device::read), this), write16_delegate(FUNC(threecom3c505_device::write), this)); if (m_romopts->read() & 1) { // host ROM is enabled, get base address static const int rom_bases[4] = { 0x0000, 0x2000, 0x4000, 0x6000 }; int rom_base = rom_bases[(m_romopts->read() >> 1) & 3]; - m_isa->install_rom(this, rom_base, rom_base + 0x01fff, 0, 0, "threecom3c505", "threecom3c505"); + m_isa->install_rom(this, rom_base, rom_base + 0x01fff, "threecom3c505", "threecom3c505"); } m_installed = true; diff --git a/src/devices/bus/isa/adlib.cpp b/src/devices/bus/isa/adlib.cpp index 42e2afd9604..66e7bc29ca3 100644 --- a/src/devices/bus/isa/adlib.cpp +++ b/src/devices/bus/isa/adlib.cpp @@ -75,7 +75,7 @@ isa8_adlib_device::isa8_adlib_device(const machine_config &mconfig, const char * void isa8_adlib_device::device_start() { set_isa_device(); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate( FUNC(isa8_adlib_device::ym3812_16_r), this ), write8_delegate( FUNC(isa8_adlib_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate( FUNC(isa8_adlib_device::ym3812_16_r), this ), write8_delegate( FUNC(isa8_adlib_device::ym3812_16_w), this ) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/aga.cpp b/src/devices/bus/isa/aga.cpp index 9146f2ce581..6d065194978 100644 --- a/src/devices/bus/isa/aga.cpp +++ b/src/devices/bus/isa/aga.cpp @@ -110,9 +110,9 @@ void isa8_aga_device::device_start() m_videoram = std::make_unique(0x10000); set_isa_device(); - m_isa->install_memory(0xb0000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_r),this), write8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_w),this)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_aga_device::pc_aga_cga_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_cga_w), this ) ); + m_isa->install_memory(0xb0000, 0xbffff, read8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_r),this), write8_delegate(FUNC(isa8_aga_device::pc_aga_videoram_w),this)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_aga_device::pc_aga_cga_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_cga_w), this ) ); /* Initialise the cga palette */ int i; @@ -197,9 +197,9 @@ void isa8_aga_pc200_device::device_start() m_videoram = std::make_unique(0x10000); set_isa_device(); - m_isa->install_memory(0xb0000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_r),this), write8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_w),this)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_r), this ), write8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_w), this ) ); + m_isa->install_memory(0xb0000, 0xbffff, read8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_r),this), write8_delegate(FUNC(isa8_aga_pc200_device::pc200_videoram_w),this)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_aga_device::pc_aga_mda_r), this ), write8_delegate( FUNC(isa8_aga_device::pc_aga_mda_w), this ) ); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_r), this ), write8_delegate( FUNC(isa8_aga_pc200_device::pc200_cga_w), this ) ); /* Initialise the cga palette */ int i; diff --git a/src/devices/bus/isa/aha1542.cpp b/src/devices/bus/isa/aha1542.cpp index cc557c47eaa..b3394f1e25c 100644 --- a/src/devices/bus/isa/aha1542.cpp +++ b/src/devices/bus/isa/aha1542.cpp @@ -192,8 +192,8 @@ aha1542_device::aha1542_device(const machine_config &mconfig, const char *tag, d void aha1542_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xdc000, 0xdffff, 0, 0, "aha1542", "aha1542"); - m_isa->install_device(0x330, 0x333, 0, 0, read8_delegate(FUNC( aha1542_device::aha1542_r ), this), + m_isa->install_rom(this, 0xdc000, 0xdffff, "aha1542", "aha1542"); + m_isa->install_device(0x330, 0x333, read8_delegate(FUNC( aha1542_device::aha1542_r ), this), write8_delegate(FUNC( aha1542_device::aha1542_w ), this) ); } diff --git a/src/devices/bus/isa/cga.cpp b/src/devices/bus/isa/cga.cpp index 888318f65d7..2dc3a5cd300 100644 --- a/src/devices/bus/isa/cga.cpp +++ b/src/devices/bus/isa/cga.cpp @@ -348,8 +348,10 @@ void isa8_cga_device::device_start() set_isa_device(); m_vram.resize(m_vram_size); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_device::io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) ); - m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", &m_vram[0]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_cga_device::io_read), this ), write8_delegate( FUNC(isa8_cga_device::io_write), this ) ); + m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, "bank_cga", &m_vram[0]); + if(m_vram_size == 0x4000) + m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]); /* Initialise the cga palette */ int i; @@ -1578,12 +1580,13 @@ void isa8_cga_pc1512_device::device_start() { isa8_cga_device::device_start(); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_cga_pc1512_device::io_read), this ), write8_delegate( FUNC(isa8_cga_pc1512_device::io_write), this ) ); - m_isa->install_bank(0xb8000, 0xbbfff, 0, 0, "bank1", &m_vram[0]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_cga_pc1512_device::io_read), this ), write8_delegate( FUNC(isa8_cga_pc1512_device::io_write), this ) ); + m_isa->install_bank(0xb8000, 0xbbfff, "bank1", &m_vram[0]); address_space &space = machine().firstcpu->space( AS_PROGRAM ); - space.install_write_handler( 0xb8000, 0xbbfff, 0, 0x0C000, write8_delegate( FUNC(isa8_cga_pc1512_device::vram_w), this ) ); + space.install_write_handler( 0xb8000, 0xbbfff, write8_delegate( FUNC(isa8_cga_pc1512_device::vram_w), this ) ); + space.install_write_handler( 0xbc000, 0xbffff, write8_delegate( FUNC(isa8_cga_pc1512_device::vram_w), this ) ); } void isa8_cga_pc1512_device::device_reset() @@ -1716,9 +1719,9 @@ void isa8_wyse700_device::device_start() { isa8_cga_device::device_start(); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_wyse700_device::io_read), this ), write8_delegate( FUNC(isa8_wyse700_device::io_write), this ) ); - m_isa->install_bank(0xa0000, 0xaffff, 0, 0, "bank_wy1", &m_vram[0x00000]); - m_isa->install_bank(0xb0000, 0xbffff, 0, 0, "bank_cga", &m_vram[0x10000]); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_wyse700_device::io_read), this ), write8_delegate( FUNC(isa8_wyse700_device::io_write), this ) ); + m_isa->install_bank(0xa0000, 0xaffff, "bank_wy1", &m_vram[0x00000]); + m_isa->install_bank(0xb0000, 0xbffff, "bank_cga", &m_vram[0x10000]); } void isa8_wyse700_device::device_reset() @@ -1778,7 +1781,7 @@ void isa8_ec1841_0002_device::device_start() { isa8_cga_device::device_start(); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate( FUNC(isa8_ec1841_0002_device::io_read), this ), write8_delegate( FUNC(isa8_ec1841_0002_device::io_write), this ) ); + m_isa->install_device(0x3d0, 0x3df, read8_delegate( FUNC(isa8_ec1841_0002_device::io_read), this ), write8_delegate( FUNC(isa8_ec1841_0002_device::io_write), this ) ); } void isa8_ec1841_0002_device::device_reset() @@ -1810,11 +1813,17 @@ WRITE8_MEMBER( isa8_ec1841_0002_device::io_write ) case 0x0f: m_p3df = data; if (data & 1) { - m_isa->install_memory(0xb8000, 0xb9fff, 0, m_vram_size & 0x4000, - read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this), - write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) ); + m_isa->install_memory(0xb8000, 0xb9fff, + read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this), + write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) ); + if(m_vram_size == 0x4000) + m_isa->install_memory(0xbc000, 0xbdfff, + read8_delegate( FUNC(isa8_ec1841_0002_device::char_ram_read), this), + write8_delegate(FUNC(isa8_ec1841_0002_device::char_ram_write), this) ); } else { - m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, 0, m_vram_size & 0x4000, "bank_cga", &m_vram[0]); + m_isa->install_bank(0xb8000, 0xb8000 + MIN(0x8000,m_vram_size) - 1, "bank_cga", &m_vram[0]); + if(m_vram_size == 0x4000) + m_isa->install_bank(0xbc000, 0xbffff, "bank_cga", &m_vram[0]); } break; default: diff --git a/src/devices/bus/isa/com.cpp b/src/devices/bus/isa/com.cpp index e61777c63c2..cd374756229 100644 --- a/src/devices/bus/isa/com.cpp +++ b/src/devices/bus/isa/com.cpp @@ -115,10 +115,10 @@ isa8_com_device::isa8_com_device(const machine_config &mconfig, device_type type void isa8_com_device::device_start() { set_isa_device(); - m_isa->install_device(0x03f8, 0x03ff, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_0")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_0")) ); - m_isa->install_device(0x02f8, 0x02ff, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_1")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_1")) ); -// m_isa->install_device(0x03e8, 0x03ef, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_2")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_2")) ); -// m_isa->install_device(0x02e8, 0x02ef, 0, 0, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_3")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_3")) ); + m_isa->install_device(0x03f8, 0x03ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_0")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_0")) ); + m_isa->install_device(0x02f8, 0x02ff, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_1")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_1")) ); +// m_isa->install_device(0x03e8, 0x03ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_2")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_2")) ); +// m_isa->install_device(0x02e8, 0x02ef, read8_delegate(FUNC(ins8250_device::ins8250_r), subdevice("uart_3")), write8_delegate(FUNC(ins8250_device::ins8250_w), subdevice("uart_3")) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/dectalk.cpp b/src/devices/bus/isa/dectalk.cpp index 169748eeae6..cae8f8733f3 100644 --- a/src/devices/bus/isa/dectalk.cpp +++ b/src/devices/bus/isa/dectalk.cpp @@ -217,7 +217,7 @@ READ8_MEMBER(dectalk_isa_device::read) void dectalk_isa_device::device_start() { set_isa_device(); - m_isa->install_device(0x0250, 0x0257, 0, 0, read8_delegate(FUNC(dectalk_isa_device::read), this), write8_delegate(FUNC(dectalk_isa_device::write), this)); + m_isa->install_device(0x0250, 0x0257, read8_delegate(FUNC(dectalk_isa_device::read), this), write8_delegate(FUNC(dectalk_isa_device::write), this)); } void dectalk_isa_device::device_reset() diff --git a/src/devices/bus/isa/ega.cpp b/src/devices/bus/isa/ega.cpp index 85d943b92ac..bc57b61eb8f 100644 --- a/src/devices/bus/isa/ega.cpp +++ b/src/devices/bus/isa/ega.cpp @@ -636,10 +636,10 @@ void isa8_ega_device::device_start() m_crtc_ega = subdevice(EGA_CRTC_NAME); - m_isa->install_rom(this, 0xc0000, 0xc3fff, 0, 0, "ega", "user2"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); + m_isa->install_rom(this, 0xc0000, 0xc3fff, "ega", "user2"); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); } //------------------------------------------------- @@ -693,53 +693,53 @@ void isa8_ega_device::install_banks() case 0x00: /* 0xA0000, 128KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); + m_isa->unmap_bank(0xb0000, 0xb7fff); + m_isa->unmap_bank(0xb8000, 0xbffff); } break; case 0x04: /* 0xA0000, 64KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xa0000, 0xaffff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xa0000, 0xaffff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); } /* These unmaps may break multi graphics card support */ - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xb0000, 0xb7fff); + m_isa->unmap_bank(0xb8000, 0xbffff); break; case 0x08: /* 0xB0000, 32KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xb0000, 0xb7fff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xb0000, 0xb7fff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); + m_isa->unmap_bank(0xb0000, 0xb7fff); } /* These unmaps may break multi graphics card support */ - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); + m_isa->unmap_bank(0xb8000, 0xbffff); break; case 0x0c: /* 0xB8000, 32KB */ if ( m_misc_output & 0x02 ) { - m_isa->install_memory(0xb8000, 0xbffff, 0, 0, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); + m_isa->install_memory(0xb8000, 0xbffff, read8_delegate(FUNC(isa8_ega_device::read), this), write8_delegate(FUNC(isa8_ega_device::write), this)); } else { - m_isa->unmap_bank(0xb8000, 0xbffff,0,0); + m_isa->unmap_bank(0xb8000, 0xbffff); } /* These unmaps may break multi graphics card support */ - m_isa->unmap_bank(0xa0000, 0xaffff,0,0); - m_isa->unmap_bank(0xb0000, 0xb7fff,0,0); + m_isa->unmap_bank(0xa0000, 0xaffff); + m_isa->unmap_bank(0xb0000, 0xb7fff); break; } } diff --git a/src/devices/bus/isa/finalchs.cpp b/src/devices/bus/isa/finalchs.cpp index c55414a62e1..222381d6435 100644 --- a/src/devices/bus/isa/finalchs.cpp +++ b/src/devices/bus/isa/finalchs.cpp @@ -104,7 +104,7 @@ void isa8_finalchs_device::device_start() set_isa_device(); //the included setup program allows any port from 0x100 to 0x1F0 to be selected, at increments of 0x10 //picked the following at random until we get dips hooked up - m_isa->install_device(0x160, 0x0161, 0, 0, read8_delegate(FUNC(isa8_finalchs_device::finalchs_r), this), write8_delegate(FUNC(isa8_finalchs_device::finalchs_w), this)); + m_isa->install_device(0x160, 0x0161, read8_delegate(FUNC(isa8_finalchs_device::finalchs_r), this), write8_delegate(FUNC(isa8_finalchs_device::finalchs_w), this)); // timer_pulse(machine, ATTOTIME_IN_HZ(1), nullptr, 0, cause_M6502_irq); } diff --git a/src/devices/bus/isa/gblaster.cpp b/src/devices/bus/isa/gblaster.cpp index 22cb5edd328..3f36f791c69 100644 --- a/src/devices/bus/isa/gblaster.cpp +++ b/src/devices/bus/isa/gblaster.cpp @@ -112,9 +112,9 @@ isa8_gblaster_device::isa8_gblaster_device(const machine_config &mconfig, const void isa8_gblaster_device::device_start() { set_isa_device(); - m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_1_16_w), this ) ); - m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_2_16_w), this ) ); - m_isa->install_device(0x0224, 0x022F, 0, 0, read8_delegate( FUNC(isa8_gblaster_device::detect_r), this ), write8_delegate( FUNC(isa8_gblaster_device::detect_w), this ) ); + m_isa->install_device(0x0220, 0x0221, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_1_16_w), this ) ); + m_isa->install_device(0x0222, 0x0223, read8_delegate( FUNC(isa8_gblaster_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_gblaster_device::saa1099_2_16_w), this ) ); + m_isa->install_device(0x0224, 0x022F, read8_delegate( FUNC(isa8_gblaster_device::detect_r), this ), write8_delegate( FUNC(isa8_gblaster_device::detect_w), this ) ); } //------------------------------------------------- diff --git a/src/devices/bus/isa/gus.cpp b/src/devices/bus/isa/gus.cpp index 2928aaa252c..b4294d306ce 100644 --- a/src/devices/bus/isa/gus.cpp +++ b/src/devices/bus/isa/gus.cpp @@ -1283,10 +1283,10 @@ isa16_gus_device::isa16_gus_device(const machine_config &mconfig, const char *ta void isa16_gus_device::device_start() { set_isa_device(); - m_isa->install_device(0x0200, 0x0201, 0, 0, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) ); - m_isa->install_device(0x0220, 0x022f, 0, 0, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) ); - m_isa->install_device(0x0320, 0x0327, 0, 0, read8_delegate(FUNC(isa16_gus_device::synth_r),this), write8_delegate(FUNC(isa16_gus_device::synth_w),this) ); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate(FUNC(isa16_gus_device::adlib_r),this), write8_delegate(FUNC(isa16_gus_device::adlib_w),this) ); + m_isa->install_device(0x0200, 0x0201, read8_delegate(FUNC(isa16_gus_device::joy_r),this), write8_delegate(FUNC(isa16_gus_device::joy_w),this) ); + m_isa->install_device(0x0220, 0x022f, read8_delegate(FUNC(isa16_gus_device::board_r),this), write8_delegate(FUNC(isa16_gus_device::board_w),this) ); + m_isa->install_device(0x0320, 0x0327, read8_delegate(FUNC(isa16_gus_device::synth_r),this), write8_delegate(FUNC(isa16_gus_device::synth_w),this) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(isa16_gus_device::adlib_r),this), write8_delegate(FUNC(isa16_gus_device::adlib_w),this) ); } void isa16_gus_device::device_reset() diff --git a/src/devices/bus/isa/hdc.cpp b/src/devices/bus/isa/hdc.cpp index 7708d341abd..8c7f65c0c0d 100644 --- a/src/devices/bus/isa/hdc.cpp +++ b/src/devices/bus/isa/hdc.cpp @@ -945,7 +945,7 @@ isa8_hdc_ec1841_device::isa8_hdc_ec1841_device(const machine_config &mconfig, co void isa8_hdc_device::device_start() { set_isa_device(); - m_isa->install_device(0x0320, 0x0323, 0, 0, read8_delegate( FUNC(isa8_hdc_device::pc_hdc_r), this ), write8_delegate( FUNC(isa8_hdc_device::pc_hdc_w), this ) ); + m_isa->install_device(0x0320, 0x0323, read8_delegate( FUNC(isa8_hdc_device::pc_hdc_r), this ), write8_delegate( FUNC(isa8_hdc_device::pc_hdc_w), this ) ); m_isa->set_dma_channel(3, this, FALSE); } @@ -958,7 +958,7 @@ void isa8_hdc_device::device_reset() dip = ioport("HDD")->read(); if (ioport("ROM")->read() == 1) - m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "hdc", "hdc"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); } /************************************************************************* diff --git a/src/devices/bus/isa/ibm_mfc.cpp b/src/devices/bus/isa/ibm_mfc.cpp index b6445c9385f..4a715ec797a 100644 --- a/src/devices/bus/isa/ibm_mfc.cpp +++ b/src/devices/bus/isa/ibm_mfc.cpp @@ -467,7 +467,7 @@ isa8_ibm_mfc_device::isa8_ibm_mfc_device(const machine_config &mconfig, const ch void isa8_ibm_mfc_device::device_start() { set_isa_device(); - m_isa->install_device(0x2a20, 0x2a20 + 15, 0, 0, read8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_r), this), write8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_w), this)); + m_isa->install_device(0x2a20, 0x2a20 + 15, read8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_r), this), write8_delegate(FUNC(isa8_ibm_mfc_device::ibm_mfc_w), this)); } diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index fb449c5815d..3bbb41b5589 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -262,7 +262,7 @@ void isa8_device::device_reset() } -void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { int buswidth; address_space *space; @@ -285,21 +285,21 @@ void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t switch(buswidth) { case 8: - space->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + space->install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 16: - space->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffff); + space->install_readwrite_handler(start, end, rhandler, whandler, 0xffff); break; case 32: if ((start % 4) == 0) { if ((end-start)==1) { - space->install_readwrite_handler(start, end+2, mask, mirror, rhandler, whandler, 0x0000ffff); + space->install_readwrite_handler(start, end+2, rhandler, whandler, 0x0000ffff); } else { - space->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + space->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); } } else { - // we handle just misalligned by 2 - space->install_readwrite_handler(start-2, end, mask, mirror, rhandler, whandler, 0xffff0000); + // we handle just misaligned by 2 + space->install_readwrite_handler(start-2, end, rhandler, whandler, 0xffff0000); } break; default: @@ -308,44 +308,44 @@ void isa8_device::install_space(address_spacenum spacenum, offs_t start, offs_t } -void isa8_device::install_memory(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void isa8_device::install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { - install_space(AS_PROGRAM, start, end, mask, mirror, rhandler, whandler); + install_space(AS_PROGRAM, start, end, rhandler, whandler); } -void isa8_device::install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler) +void isa8_device::install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler) { - install_space(AS_IO, start, end, mask, mirror, rhandler, whandler); + install_space(AS_IO, start, end, rhandler, whandler); } -void isa8_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void isa8_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { - m_prgspace->install_readwrite_bank(start, end, mask, mirror, tag ); + m_prgspace->install_readwrite_bank(start, end, 0, tag ); machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(data); } -void isa8_device::unmap_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror) +void isa8_device::unmap_bank(offs_t start, offs_t end) { - m_prgspace->unmap_readwrite(start, end, mask, mirror); + m_prgspace->unmap_readwrite(start, end); } -void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, const char *region) +void isa8_device::install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region) { if (machine().root_device().memregion("isa")) { UINT8 *src = dev->memregion(region)->base(); UINT8 *dest = machine().root_device().memregion("isa")->base() + start - 0xc0000; memcpy(dest,src, end - start + 1); } else { - m_prgspace->install_read_bank(start, end, mask, mirror, tag); - m_prgspace->unmap_write(start, end, mask, mirror); + m_prgspace->install_read_bank(start, end, 0, tag); + m_prgspace->unmap_write(start, end); machine().root_device().membank(m_prgspace->device().siblingtag(tag).c_str())->set_base(machine().root_device().memregion(dev->subtag(region).c_str())->base()); } } -void isa8_device::unmap_rom(offs_t start, offs_t end, offs_t mask, offs_t mirror) +void isa8_device::unmap_rom(offs_t start, offs_t end) { - m_prgspace->unmap_read(start, end, mask, mirror); + m_prgspace->unmap_read(start, end); } bool isa8_device::is_option_rom_space_available(offs_t start, int size) @@ -507,25 +507,25 @@ void isa16_device::device_start() m_out_drq7_cb.resolve_safe(); } -void isa16_device::install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_delegate rhandler, write16_delegate whandler) +void isa16_device::install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler) { int buswidth = m_prgwidth; switch(buswidth) { case 16: - m_iospace->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0); + m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0); break; case 32: - m_iospace->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); if ((start % 4) == 0) { if ((end-start)==1) { - m_iospace->install_readwrite_handler(start, end+2, mask, mirror, rhandler, whandler, 0x0000ffff); + m_iospace->install_readwrite_handler(start, end+2, rhandler, whandler, 0x0000ffff); } else { - m_iospace->install_readwrite_handler(start, end, mask, mirror, rhandler, whandler, 0xffffffff); + m_iospace->install_readwrite_handler(start, end, rhandler, whandler, 0xffffffff); } } else { // we handle just misalligned by 2 - m_iospace->install_readwrite_handler(start-2, end, mask, mirror, rhandler, whandler, 0xffff0000); + m_iospace->install_readwrite_handler(start-2, end, rhandler, whandler, 0xffff0000); } break; diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index a93fddd6acb..3552b72dab0 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -215,17 +215,17 @@ public: } } - void install_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); template void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(class address_map &map, device_t &device), int bits = 8, UINT64 unitmask = U64(0xffffffffffffffff)) { m_iospace->install_device(addrstart, addrend, device, map, bits, unitmask); } - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); - void install_rom(device_t *dev, offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, const char *region); - void install_memory(offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); + void install_rom(device_t *dev, offs_t start, offs_t end, const char *tag, const char *region); + void install_memory(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); - void unmap_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror); - void unmap_rom(offs_t start, offs_t end, offs_t mask, offs_t mirror); + void unmap_bank(offs_t start, offs_t end); + void unmap_rom(offs_t start, offs_t end); bool is_option_rom_space_available(offs_t start, int size); DECLARE_WRITE_LINE_MEMBER( irq2_w ); @@ -257,7 +257,7 @@ public: const address_space_config m_program_config, m_io_config, m_program16_config, m_io16_config; protected: - void install_space(address_spacenum spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_delegate rhandler, write8_delegate whandler); + void install_space(address_spacenum spacenum, offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler); // device-level overrides virtual void device_start() override; @@ -357,7 +357,7 @@ public: template static devcb_base &set_out_drq6_callback(device_t &device, _Object object) { return downcast(device).m_out_drq6_cb.set_callback(object); } template static devcb_base &set_out_drq7_callback(device_t &device, _Object object) { return downcast(device).m_out_drq7_cb.set_callback(object); } - void install16_device(offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_delegate rhandler, write16_delegate whandler); + void install16_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler); // for ISA16, put the 16-bit configs in the primary slots and the 8-bit configs in the secondary virtual const address_space_config *memory_space_config(address_spacenum spacenum) const override diff --git a/src/devices/bus/isa/lpt.cpp b/src/devices/bus/isa/lpt.cpp index 1baa190b034..e6d2cea232e 100644 --- a/src/devices/bus/isa/lpt.cpp +++ b/src/devices/bus/isa/lpt.cpp @@ -51,11 +51,11 @@ void isa8_lpt_device::device_reset() m_is_primary = (ioport("DSW")->read() & 1) ? false : true; if (m_is_primary) { - m_isa->install_device(0x0378, 0x037b, 0, 0, read8_delegate(FUNC(pc_lpt_device::read), subdevice("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice("lpt"))); + m_isa->install_device(0x0378, 0x037b, read8_delegate(FUNC(pc_lpt_device::read), subdevice("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice("lpt"))); } else { - m_isa->install_device(0x0278, 0x027b, 0, 0, read8_delegate(FUNC(pc_lpt_device::read), subdevice("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice("lpt"))); + m_isa->install_device(0x0278, 0x027b, read8_delegate(FUNC(pc_lpt_device::read), subdevice("lpt")), write8_delegate(FUNC(pc_lpt_device::write), subdevice("lpt"))); } } diff --git a/src/devices/bus/isa/mc1502_fdc.cpp b/src/devices/bus/isa/mc1502_fdc.cpp index 0a482f3a3f9..3df26b862fe 100644 --- a/src/devices/bus/isa/mc1502_fdc.cpp +++ b/src/devices/bus/isa/mc1502_fdc.cpp @@ -205,16 +205,16 @@ void mc1502_fdc_device::device_start() set_isa_device(); // BIOS 5.0-5.2x - m_isa->install_device(0x010c, 0x010f, 0, 0, + m_isa->install_device(0x010c, 0x010f, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(0x0100, 0x010b, 0, 0, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); + m_isa->install_device(0x0100, 0x010b, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); // BIOS 5.3x - m_isa->install_device(0x0048, 0x004b, 0, 0, + m_isa->install_device(0x0048, 0x004b, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(0x004c, 0x004f, 0, 0, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdcv2_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); + m_isa->install_device(0x004c, 0x004f, read8_delegate( FUNC(mc1502_fdc_device::mc1502_fdcv2_r), this ), write8_delegate( FUNC(mc1502_fdc_device::mc1502_fdc_w), this ) ); motor_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc1502_fdc_device::motor_callback),this)); motor_on = 0; diff --git a/src/devices/bus/isa/mc1502_rom.cpp b/src/devices/bus/isa/mc1502_rom.cpp index 9a12c5ec712..bdf9dbc3d43 100644 --- a/src/devices/bus/isa/mc1502_rom.cpp +++ b/src/devices/bus/isa/mc1502_rom.cpp @@ -58,7 +58,7 @@ mc1502_rom_device::mc1502_rom_device(const machine_config &mconfig, const char * void mc1502_rom_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe8000, 0xeffff, 0, 0, "XXX", "mc1502_rom"); + m_isa->install_rom(this, 0xe8000, 0xeffff, "XXX", "mc1502_rom"); } diff --git a/src/devices/bus/isa/mda.cpp b/src/devices/bus/isa/mda.cpp index c8456886f02..739f6b677d7 100644 --- a/src/devices/bus/isa/mda.cpp +++ b/src/devices/bus/isa/mda.cpp @@ -177,8 +177,15 @@ void isa8_mda_device::device_start() set_isa_device(); m_videoram.resize(0x1000); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_mda_device::io_read), this ), write8_delegate( FUNC(isa8_mda_device::io_write), this ) ); - m_isa->install_bank(0xb0000, 0xb0fff, 0, 0x07000, "bank_mda", &m_videoram[0]); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_mda_device::io_read), this ), write8_delegate( FUNC(isa8_mda_device::io_write), this ) ); + m_isa->install_bank(0xb0000, 0xb0fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb1000, 0xb1fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb2000, 0xb2fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb3000, 0xb3fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb4000, 0xb4fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb5000, 0xb5fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb6000, 0xb6fff, "bank_mda", &m_videoram[0]); + m_isa->install_bank(0xb7000, 0xb7fff, "bank_mda", &m_videoram[0]); /* Initialise the mda palette */ for(int i = 0; i < 4; i++) @@ -596,8 +603,8 @@ void isa8_hercules_device::device_start() m_videoram.resize(0x10000); set_isa_device(); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate( FUNC(isa8_hercules_device::io_read), this ), write8_delegate( FUNC(isa8_hercules_device::io_write), this ) ); - m_isa->install_bank(0xb0000, 0xbffff, 0, 0, "bank_hercules", &m_videoram[0]); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate( FUNC(isa8_hercules_device::io_read), this ), write8_delegate( FUNC(isa8_hercules_device::io_write), this ) ); + m_isa->install_bank(0xb0000, 0xbffff, "bank_hercules", &m_videoram[0]); /* Initialise the mda palette */ for(int i = 0; i < (sizeof(mda_palette) / 3); i++) @@ -800,7 +807,8 @@ void isa8_ec1840_0002_device::device_start() isa8_mda_device::device_start(); m_soft_chr_gen = std::make_unique(0x2000); - m_isa->install_bank(0xdc000, 0xddfff, 0, 0x2000, "bank_chargen", m_soft_chr_gen.get()); + m_isa->install_bank(0xdc000, 0xddfff, "bank_chargen", m_soft_chr_gen.get()); + m_isa->install_bank(0xde000, 0xdffff, "bank_chargen", m_soft_chr_gen.get()); } void isa8_ec1840_0002_device::device_reset() diff --git a/src/devices/bus/isa/mpu401.cpp b/src/devices/bus/isa/mpu401.cpp index 420a753b750..df78f73b5c2 100644 --- a/src/devices/bus/isa/mpu401.cpp +++ b/src/devices/bus/isa/mpu401.cpp @@ -81,7 +81,7 @@ void isa8_mpu401_device::device_start() { set_isa_device(); - m_isa->install_device(0x330, 0x0331, 0, 0, READ8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_r), WRITE8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_w)); + m_isa->install_device(0x330, 0x0331, READ8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_r), WRITE8_DEVICE_DELEGATE(m_mpu401, mpu401_device, mpu_w)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/mufdc.cpp b/src/devices/bus/isa/mufdc.cpp index bb1b6fc8af4..24c8c3d142b 100644 --- a/src/devices/bus/isa/mufdc.cpp +++ b/src/devices/bus/isa/mufdc.cpp @@ -162,7 +162,7 @@ void mufdc_device::device_start() void mufdc_device::device_reset() { - m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, m_shortname.c_str(), "option"); + m_isa->install_rom(this, 0xc8000, 0xc9fff, m_shortname.c_str(), "option"); m_isa->install_device(0x3f0, 0x3f7, *m_fdc, &pc_fdc_interface::map); m_isa->set_dma_channel(2, this, true); } diff --git a/src/devices/bus/isa/ne1000.cpp b/src/devices/bus/isa/ne1000.cpp index 65ee0019430..24b37985225 100644 --- a/src/devices/bus/isa/ne1000.cpp +++ b/src/devices/bus/isa/ne1000.cpp @@ -33,7 +33,7 @@ void ne1000_device::device_start() { memcpy(m_prom, mac, 6); m_dp8390->set_mac(mac); set_isa_device(); - m_isa->install_device(0x0300, 0x031f, 0, 0, read8_delegate(FUNC(ne1000_device::ne1000_port_r), this), write8_delegate(FUNC(ne1000_device::ne1000_port_w), this)); + m_isa->install_device(0x0300, 0x031f, read8_delegate(FUNC(ne1000_device::ne1000_port_r), this), write8_delegate(FUNC(ne1000_device::ne1000_port_w), this)); } void ne1000_device::device_reset() { diff --git a/src/devices/bus/isa/ne2000.cpp b/src/devices/bus/isa/ne2000.cpp index 3937e14a920..347ab280d7d 100644 --- a/src/devices/bus/isa/ne2000.cpp +++ b/src/devices/bus/isa/ne2000.cpp @@ -34,7 +34,7 @@ void ne2000_device::device_start() { memcpy(m_prom, mac, 6); m_dp8390->set_mac(mac); set_isa_device(); - m_isa->install16_device(0x0300, 0x031f, 0, 0, read16_delegate(FUNC(ne2000_device::ne2000_port_r), this), write16_delegate(FUNC(ne2000_device::ne2000_port_w), this)); + m_isa->install16_device(0x0300, 0x031f, read16_delegate(FUNC(ne2000_device::ne2000_port_r), this), write16_delegate(FUNC(ne2000_device::ne2000_port_w), this)); } void ne2000_device::device_reset() { diff --git a/src/devices/bus/isa/num9rev.cpp b/src/devices/bus/isa/num9rev.cpp index 3ed1967df06..b37db708490 100644 --- a/src/devices/bus/isa/num9rev.cpp +++ b/src/devices/bus/isa/num9rev.cpp @@ -95,13 +95,13 @@ void isa8_number_9_rev_device::device_start() { set_isa_device(); - m_isa->install_memory(0xc0000, 0xc0001, 0, 0, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220)); - m_isa->install_memory(0xc0100, 0xc03ff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this)); - m_isa->install_memory(0xc0400, 0xc0401, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this)); - m_isa->install_memory(0xc0500, 0xc06ff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this)); - m_isa->install_memory(0xc0700, 0xc070f, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::ctrl_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::ctrl_w), this)); - m_isa->install_memory(0xc1000, 0xc3fff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::pal12_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal12_w), this)); - m_isa->install_memory(0xa0000, 0xaffff, 0, 0, read8_delegate(FUNC(isa8_number_9_rev_device::read8), this), write8_delegate(FUNC(isa8_number_9_rev_device::write8), this)); + m_isa->install_memory(0xc0000, 0xc0001, read8_delegate(FUNC(upd7220_device::read), (upd7220_device *)m_upd7220), write8_delegate(FUNC(upd7220_device::write), (upd7220_device *)m_upd7220)); + m_isa->install_memory(0xc0100, 0xc03ff, read8_delegate(FUNC(isa8_number_9_rev_device::pal8_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal8_w), this)); + m_isa->install_memory(0xc0400, 0xc0401, read8_delegate(FUNC(isa8_number_9_rev_device::bank_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::bank_w), this)); + m_isa->install_memory(0xc0500, 0xc06ff, read8_delegate(FUNC(isa8_number_9_rev_device::overlay_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::overlay_w), this)); + m_isa->install_memory(0xc0700, 0xc070f, read8_delegate(FUNC(isa8_number_9_rev_device::ctrl_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::ctrl_w), this)); + m_isa->install_memory(0xc1000, 0xc3fff, read8_delegate(FUNC(isa8_number_9_rev_device::pal12_r), this), write8_delegate(FUNC(isa8_number_9_rev_device::pal12_w), this)); + m_isa->install_memory(0xa0000, 0xaffff, read8_delegate(FUNC(isa8_number_9_rev_device::read8), this), write8_delegate(FUNC(isa8_number_9_rev_device::write8), this)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp index cb36cf50a3e..ad529b0b430 100644 --- a/src/devices/bus/isa/omti8621.cpp +++ b/src/devices/bus/isa/omti8621.cpp @@ -321,7 +321,7 @@ void omti8621_device::device_reset() int esdi_base = io_bases[m_iobase->read() & 7]; // install the ESDI ports - m_isa->install16_device(esdi_base, esdi_base + 7, 0, 0, read16_delegate(FUNC(omti8621_device::read), this), write16_delegate(FUNC(omti8621_device::write), this)); + m_isa->install16_device(esdi_base, esdi_base + 7, read16_delegate(FUNC(omti8621_device::read), this), write16_delegate(FUNC(omti8621_device::write), this)); // and the onboard AT FDC ports if (m_iobase->read() & 8) diff --git a/src/devices/bus/isa/p1_fdc.cpp b/src/devices/bus/isa/p1_fdc.cpp index 4ba01ed47da..27fe8657e26 100644 --- a/src/devices/bus/isa/p1_fdc.cpp +++ b/src/devices/bus/isa/p1_fdc.cpp @@ -186,11 +186,11 @@ p1_fdc_device::p1_fdc_device(const machine_config &mconfig, const char *tag, dev void p1_fdc_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe0000, 0xe07ff, 0, 0, "XXX", "p1_fdc"); - m_isa->install_device(0x00c0, 0x00c3, 0, 0, + m_isa->install_rom(this, 0xe0000, 0xe07ff, "XXX", "p1_fdc"); + m_isa->install_device(0x00c0, 0x00c3, READ8_DEVICE_DELEGATE(m_fdc, fd1793_t, read), WRITE8_DEVICE_DELEGATE(m_fdc, fd1793_t, write) ); - m_isa->install_device(0x00c4, 0x00c7, 0, 0, read8_delegate( FUNC(p1_fdc_device::p1_fdc_r), this ), write8_delegate( FUNC(p1_fdc_device::p1_fdc_w), this ) ); + m_isa->install_device(0x00c4, 0x00c7, read8_delegate( FUNC(p1_fdc_device::p1_fdc_r), this ), write8_delegate( FUNC(p1_fdc_device::p1_fdc_w), this ) ); } diff --git a/src/devices/bus/isa/p1_hdc.cpp b/src/devices/bus/isa/p1_hdc.cpp index eb8d68524eb..bb3192f287a 100644 --- a/src/devices/bus/isa/p1_hdc.cpp +++ b/src/devices/bus/isa/p1_hdc.cpp @@ -130,8 +130,8 @@ p1_hdc_device::p1_hdc_device(const machine_config &mconfig, const char *tag, dev void p1_hdc_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xe2000, 0xe27ff, 0, 0, "XXX", "p1_hdc"); - m_isa->install_memory(0xd0000, 0xd0fff, 0, 0, + m_isa->install_rom(this, 0xe2000, 0xe27ff, "XXX", "p1_hdc"); + m_isa->install_memory(0xd0000, 0xd0fff, READ8_DELEGATE(p1_hdc_device, p1_HDC_r), WRITE8_DELEGATE(p1_hdc_device, p1_HDC_w) ); } diff --git a/src/devices/bus/isa/p1_rom.cpp b/src/devices/bus/isa/p1_rom.cpp index bd078972a04..96b860bc60e 100644 --- a/src/devices/bus/isa/p1_rom.cpp +++ b/src/devices/bus/isa/p1_rom.cpp @@ -63,7 +63,7 @@ p1_rom_device::p1_rom_device(const machine_config &mconfig, const char *tag, dev void p1_rom_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc0000, 0xc1fff, 0, 0, "XXX", "p1_rom"); + m_isa->install_rom(this, 0xc0000, 0xc1fff, "XXX", "p1_rom"); } diff --git a/src/devices/bus/isa/pc1640_iga.cpp b/src/devices/bus/isa/pc1640_iga.cpp index 05c989fcbe1..7304e96c26f 100644 --- a/src/devices/bus/isa/pc1640_iga.cpp +++ b/src/devices/bus/isa/pc1640_iga.cpp @@ -108,8 +108,8 @@ void isa8_pc1640_iga_device::device_start() m_crtc_ega = subdevice(EGA_CRTC_NAME); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "ega", "iga"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "ega", "iga"); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3b0_w), this)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3c0_w), this)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_r), this), write8_delegate(FUNC(isa8_ega_device::pc_ega8_3d0_w), this)); } diff --git a/src/devices/bus/isa/pds.cpp b/src/devices/bus/isa/pds.cpp index 235e0acdd02..f832de418de 100644 --- a/src/devices/bus/isa/pds.cpp +++ b/src/devices/bus/isa/pds.cpp @@ -44,7 +44,7 @@ WRITE8_MEMBER(isa8_pds_device::ppi_w) void isa8_pds_device::device_start() { set_isa_device(); - m_isa->install_device(0x0300, 0x0307, 0, 0, read8_delegate(FUNC(isa8_pds_device::ppi_r),this), write8_delegate(FUNC(isa8_pds_device::ppi_w),this) ); + m_isa->install_device(0x0300, 0x0307, read8_delegate(FUNC(isa8_pds_device::ppi_r),this), write8_delegate(FUNC(isa8_pds_device::ppi_w),this) ); } void isa8_pds_device::device_reset() diff --git a/src/devices/bus/isa/pgc.cpp b/src/devices/bus/isa/pgc.cpp index c22631d405b..bc5563cb19c 100644 --- a/src/devices/bus/isa/pgc.cpp +++ b/src/devices/bus/isa/pgc.cpp @@ -264,9 +264,9 @@ void isa8_pgc_device::device_reset() m_commarea = memregion("commarea")->base(); if (BIT(ioport("DSW")->read(), 1)) - m_isa->install_bank(0xc6400, 0xc67ff, 0, 0, "commarea", m_commarea); + m_isa->install_bank(0xc6400, 0xc67ff, "commarea", m_commarea); else - m_isa->install_bank(0xc6000, 0xc63ff, 0, 0, "commarea", m_commarea); + m_isa->install_bank(0xc6000, 0xc63ff, "commarea", m_commarea); } // diff --git a/src/devices/bus/isa/s3virge.cpp b/src/devices/bus/isa/s3virge.cpp index 965e47e50f0..1e2ccc27458 100644 --- a/src/devices/bus/isa/s3virge.cpp +++ b/src/devices/bus/isa/s3virge.cpp @@ -244,7 +244,7 @@ UINT8 s3virge_vga_device::s3_crtc_reg_read(UINT8 index) break; default: res = vga.crtc.data[index]; - //debugger_break(machine); + //machine.debug_break(); //printf("%02x\n",index); break; } diff --git a/src/devices/bus/isa/sb16.cpp b/src/devices/bus/isa/sb16.cpp index 87c09592b6d..2bc2d43c517 100644 --- a/src/devices/bus/isa/sb16.cpp +++ b/src/devices/bus/isa/sb16.cpp @@ -703,15 +703,15 @@ void sb16_lle_device::device_start() ymf262_device *ymf262 = subdevice("ymf262"); set_isa_device(); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(sb16_lle_device::invalid_r), this), write8_delegate(FUNC(sb16_lle_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(sb16_lle_device::host_data_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(sb16_lle_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::host_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(sb16_lle_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); - m_isa->install_device(0x0330, 0x0331, 0, 0, read8_delegate(FUNC(sb16_lle_device::mpu401_r), this), write8_delegate(FUNC(sb16_lle_device::mpu401_w), this)); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0220, 0x0223, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(sb16_lle_device::invalid_r), this), write8_delegate(FUNC(sb16_lle_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(sb16_lle_device::host_data_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb16_lle_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::host_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb16_lle_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb16_lle_device::invalid_w), this) ); + m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_lle_device::mpu401_r), this), write8_delegate(FUNC(sb16_lle_device::mpu401_w), this)); + m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); m_isa->set_dma_channel(1, this, FALSE); m_isa->set_dma_channel(5, this, FALSE); m_timer = timer_alloc(); diff --git a/src/devices/bus/isa/sblaster.cpp b/src/devices/bus/isa/sblaster.cpp index 20dd6c6b2ed..6e38b04ce81 100644 --- a/src/devices/bus/isa/sblaster.cpp +++ b/src/devices/bus/isa/sblaster.cpp @@ -1264,23 +1264,23 @@ isa16_sblaster16_device::isa16_sblaster16_device(const machine_config &mconfig, void sb8_device::device_start() { - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); if(m_dsp.version >= 0x0301) { ymf262_device *ymf262 = subdevice("ymf262"); - m_isa->install_device(0x0388, 0x038b, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0220, 0x0223, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); } else { - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); + m_isa->install_device(0x0228, 0x0229, read8_delegate( FUNC(sb8_device::ym3812_16_r), this ), write8_delegate( FUNC(sb8_device::ym3812_16_w), this ) ); } m_timer = timer_alloc(0, nullptr); @@ -1305,8 +1305,8 @@ void isa8_sblaster1_0_device::device_start() { set_isa_device(); // 1.0 always has the SAA1099s for CMS back-compatibility - m_isa->install_device(0x0220, 0x0221, 0, 0, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_1_16_w), this ) ); - m_isa->install_device(0x0222, 0x0223, 0, 0, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_2_16_w), this ) ); + m_isa->install_device(0x0220, 0x0221, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_1_16_w), this ) ); + m_isa->install_device(0x0222, 0x0223, read8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_16_r), this ), write8_delegate( FUNC(isa8_sblaster1_0_device::saa1099_2_16_w), this ) ); m_isa->set_dma_channel(1, this, FALSE); m_dsp.version = 0x0105; sb8_device::device_start(); @@ -1325,16 +1325,16 @@ void sb16_device::device_start() { ymf262_device *ymf262 = subdevice("ymf262"); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); - m_isa->install_device(0x0224, 0x0225, 0, 0, read8_delegate(FUNC(sb16_device::mixer_r), this), write8_delegate(FUNC(sb16_device::mixer_w), this)); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); - m_isa->install_device(0x0330, 0x0331, 0, 0, read8_delegate(FUNC(sb16_device::mpu401_r), this), write8_delegate(FUNC(sb16_device::mpu401_w), this)); - m_isa->install_device(0x0388, 0x038b, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0220, 0x0223, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); + m_isa->install_device(0x0224, 0x0225, read8_delegate(FUNC(sb16_device::mixer_r), this), write8_delegate(FUNC(sb16_device::mixer_w), this)); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(sb_device::dsp_reset_r), this), write8_delegate(FUNC(sb_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(sb_device::dsp_data_r), this), write8_delegate(FUNC(sb_device::dsp_data_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(sb_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(sb_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(sb_device::dsp_rbuf_status_w), this) ); + m_isa->install_device(0x0330, 0x0331, read8_delegate(FUNC(sb16_device::mpu401_r), this), write8_delegate(FUNC(sb16_device::mpu401_w), this)); + m_isa->install_device(0x0388, 0x038b, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0220, 0x0223, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ymf262_device::read), ymf262), write8_delegate(FUNC(ymf262_device::write), ymf262)); m_timer = timer_alloc(0, nullptr); diff --git a/src/devices/bus/isa/sc499.cpp b/src/devices/bus/isa/sc499.cpp index 565b8a42b35..42316f000b6 100644 --- a/src/devices/bus/isa/sc499.cpp +++ b/src/devices/bus/isa/sc499.cpp @@ -394,7 +394,7 @@ void sc499_device::device_reset() m_irq = m_irqdrq->read() & 7; m_drq = m_irqdrq->read()>>4; - m_isa->install_device(base, base+7, 0, 0, read8_delegate(FUNC(sc499_device::read), this), write8_delegate(FUNC(sc499_device::write), this)); + m_isa->install_device(base, base+7, read8_delegate(FUNC(sc499_device::read), this), write8_delegate(FUNC(sc499_device::write), this)); m_isa->set_dma_channel(m_drq, this, true); m_installed = true; diff --git a/src/devices/bus/isa/side116.cpp b/src/devices/bus/isa/side116.cpp index 460ee5f54fd..6aeda746d5f 100644 --- a/src/devices/bus/isa/side116.cpp +++ b/src/devices/bus/isa/side116.cpp @@ -115,16 +115,16 @@ void side116_device::device_reset() { switch ((m_config->read() >> 1) & 0x03) { - case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "side116", "option"); break; - case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, 0, 0, "side116", "option"); break; - case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, 0, 0, "side116", "option"); break; - case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, 0, 0, "side116", "option"); break; + case 0: m_isa->install_rom(this, 0xc8000, 0xc9fff, "side116", "option"); break; + case 1: m_isa->install_rom(this, 0xd8000, 0xd9fff, "side116", "option"); break; + case 2: m_isa->install_rom(this, 0xcc000, 0xcdfff, "side116", "option"); break; + case 3: m_isa->install_rom(this, 0xdc000, 0xddfff, "side116", "option"); break; } } // install io access if ((m_config->read() & 0x20) == 0x20) - m_isa->install_device(0x360, 0x36f, 0, 0, read8_delegate(FUNC(side116_device::read), this), write8_delegate(FUNC(side116_device::write), this)); + m_isa->install_device(0x360, 0x36f, read8_delegate(FUNC(side116_device::read), this), write8_delegate(FUNC(side116_device::write), this)); } diff --git a/src/devices/bus/isa/ssi2001.cpp b/src/devices/bus/isa/ssi2001.cpp index 4a77e870190..dec6751f887 100644 --- a/src/devices/bus/isa/ssi2001.cpp +++ b/src/devices/bus/isa/ssi2001.cpp @@ -29,8 +29,8 @@ ssi2001_device::ssi2001_device(const machine_config &mconfig, const char *tag, d void ssi2001_device::device_start() { set_isa_device(); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); - m_isa->install_device(0x0280, 0x029F, 0, 0, read8_delegate(FUNC(mos6581_device::read), subdevice("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice("sid6581"))); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); + m_isa->install_device(0x0280, 0x029F, read8_delegate(FUNC(mos6581_device::read), subdevice("sid6581")), write8_delegate(FUNC(mos6581_device::write), subdevice("sid6581"))); } diff --git a/src/devices/bus/isa/stereo_fx.cpp b/src/devices/bus/isa/stereo_fx.cpp index b730ad3a670..fc17f2acfea 100644 --- a/src/devices/bus/isa/stereo_fx.cpp +++ b/src/devices/bus/isa/stereo_fx.cpp @@ -202,13 +202,13 @@ void stereo_fx_device::device_start() ym3812_device *ym3812 = subdevice("ym3812"); set_isa_device(); - m_isa->install_device(0x0200, 0x0207, 0, 0, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); - m_isa->install_device(0x0226, 0x0227, 0, 0, read8_delegate(FUNC(stereo_fx_device::invalid_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_reset_w), this)); - m_isa->install_device(0x022a, 0x022b, 0, 0, read8_delegate(FUNC(stereo_fx_device::dsp_data_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); - m_isa->install_device(0x022c, 0x022d, 0, 0, read8_delegate(FUNC(stereo_fx_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_cmd_w), this) ); - m_isa->install_device(0x022e, 0x022f, 0, 0, read8_delegate(FUNC(stereo_fx_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); - m_isa->install_device(0x0388, 0x0389, 0, 0, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); - m_isa->install_device(0x0228, 0x0229, 0, 0, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); + m_isa->install_device(0x0200, 0x0207, read8_delegate(FUNC(pc_joy_device::joy_port_r), subdevice("pc_joy")), write8_delegate(FUNC(pc_joy_device::joy_port_w), subdevice("pc_joy"))); + m_isa->install_device(0x0226, 0x0227, read8_delegate(FUNC(stereo_fx_device::invalid_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_reset_w), this)); + m_isa->install_device(0x022a, 0x022b, read8_delegate(FUNC(stereo_fx_device::dsp_data_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); + m_isa->install_device(0x022c, 0x022d, read8_delegate(FUNC(stereo_fx_device::dsp_wbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::dsp_cmd_w), this) ); + m_isa->install_device(0x022e, 0x022f, read8_delegate(FUNC(stereo_fx_device::dsp_rbuf_status_r), this), write8_delegate(FUNC(stereo_fx_device::invalid_w), this) ); + m_isa->install_device(0x0388, 0x0389, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); + m_isa->install_device(0x0228, 0x0229, read8_delegate(FUNC(ym3812_device::read), ym3812), write8_delegate(FUNC(ym3812_device::write), ym3812)); m_timer = timer_alloc(); m_timer->adjust(attotime::from_hz(2000000), 0, attotime::from_hz(2000000)); m_isa->set_dma_channel(1, this, FALSE); diff --git a/src/devices/bus/isa/svga_cirrus.cpp b/src/devices/bus/isa/svga_cirrus.cpp index 3e6f6ca1196..ebe18325c26 100644 --- a/src/devices/bus/isa/svga_cirrus.cpp +++ b/src/devices/bus/isa/svga_cirrus.cpp @@ -76,13 +76,13 @@ void isa16_svga_cirrus_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "dm_clgd5430"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "dm_clgd5430"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(cirrus_gd5430_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(cirrus_gd5430_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(cirrus_gd5430_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(cirrus_gd5430_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(cirrus_gd5430_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5430_device::mem_w),m_vga)); } //------------------------------------------------- @@ -162,13 +162,13 @@ void isa16_svga_cirrus_gd542x_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "clgd542x"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "clgd542x"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(cirrus_gd5428_device::port_03b0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(cirrus_gd5428_device::port_03c0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(cirrus_gd5428_device::port_03d0_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(cirrus_gd5428_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(cirrus_gd5428_device::mem_r),m_vga), write8_delegate(FUNC(cirrus_gd5428_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/svga_s3.cpp b/src/devices/bus/isa/svga_s3.cpp index f4874db3fc9..98668979d61 100644 --- a/src/devices/bus/isa/svga_s3.cpp +++ b/src/devices/bus/isa/svga_s3.cpp @@ -88,29 +88,29 @@ void isa16_svga_s3_device::device_start() m_vga = subdevice("vga"); m_8514 = subdevice("vga:8514a"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "s3_764"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3_764"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_w),m_8514)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_w),m_8514)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_desty_w),m_8514)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_destx_w),m_8514)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_w),m_8514)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_width_w),m_8514)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_cmd_w),m_8514)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_w),m_8514)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_w),m_8514)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_w),m_8514)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_w),m_8514)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_w),m_8514)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_w),m_8514)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_w),m_8514)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3_vga_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currenty_w),m_8514)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_currentx_w),m_8514)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_desty_w),m_8514)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_destx_w),m_8514)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_line_error_w),m_8514)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_width_w),m_8514)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_cmd_w),m_8514)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_ssv_w),m_8514)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_bgcolour_w),m_8514)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_fgcolour_w),m_8514)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_backmix_w),m_8514)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_foremix_w),m_8514)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_multifunc_w),m_8514)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_pixel_xfer_w),m_8514)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3_vga_device::mem_w),m_vga)); } //------------------------------------------------- @@ -199,13 +199,13 @@ void isa16_s3virge_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "s3virge"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virge"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); } //------------------------------------------------- @@ -286,13 +286,13 @@ void isa16_s3virgedx_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "s3virgedx"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "s3virgedx"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); } //------------------------------------------------- @@ -374,13 +374,13 @@ void isa16_stealth3d2kpro_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "svga", "stealth3d"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "svga", "stealth3d"); - m_isa->install_device(0x03b0, 0x03bf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x03c0, 0x03cf, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x03d0, 0x03df, 0, 0, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x03b0, 0x03bf, read8_delegate(FUNC(s3virge_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x03c0, 0x03cf, read8_delegate(FUNC(s3virge_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x03d0, 0x03df, read8_delegate(FUNC(s3virge_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(s3virge_vga_device::mem_r),m_vga), write8_delegate(FUNC(s3virge_vga_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/svga_trident.cpp b/src/devices/bus/isa/svga_trident.cpp index ded9d629fe3..6cf4d3d407a 100644 --- a/src/devices/bus/isa/svga_trident.cpp +++ b/src/devices/bus/isa/svga_trident.cpp @@ -78,24 +78,24 @@ void isa16_svga_tgui9680_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "tgui9680", "tgui9680"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "tgui9680", "tgui9680"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(trident_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(trident_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(trident_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03d0_w),m_vga)); - m_isa->install_device(0x43c4, 0x43cb, 0, 0, read8_delegate(FUNC(trident_vga_device::port_43c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_43c6_w),m_vga)); - m_isa->install_device(0x83c4, 0x83cb, 0, 0, read8_delegate(FUNC(trident_vga_device::port_83c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_83c6_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(trident_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(trident_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(trident_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x43c4, 0x43cb, read8_delegate(FUNC(trident_vga_device::port_43c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_43c6_w),m_vga)); + m_isa->install_device(0x83c4, 0x83cb, read8_delegate(FUNC(trident_vga_device::port_83c6_r),m_vga), write8_delegate(FUNC(trident_vga_device::port_83c6_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(trident_vga_device::mem_r),m_vga), write8_delegate(FUNC(trident_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(trident_vga_device::mem_r),m_vga), write8_delegate(FUNC(trident_vga_device::mem_w),m_vga)); // uncomment to test Windows 3.1 TGUI9440AGi driver -// m_isa->install_memory(0x4400000, 0x45fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); +// m_isa->install_memory(0x4400000, 0x45fffff, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); // win95 drivers -// m_isa->install_memory(0x4000000, 0x41fffff, 0, 0, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); +// m_isa->install_memory(0x4000000, 0x41fffff, read8_delegate(FUNC(trident_vga_device::vram_r),m_vga), write8_delegate(FUNC(trident_vga_device::vram_w),m_vga)); // acceleration ports - m_isa->install_device(0x2120, 0x21ff, 0, 0, read8_delegate(FUNC(trident_vga_device::accel_r),m_vga), write8_delegate(FUNC(trident_vga_device::accel_w),m_vga)); + m_isa->install_device(0x2120, 0x21ff, read8_delegate(FUNC(trident_vga_device::accel_r),m_vga), write8_delegate(FUNC(trident_vga_device::accel_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/svga_tseng.cpp b/src/devices/bus/isa/svga_tseng.cpp index 6fff06c78ad..ab0a4e9b5f7 100644 --- a/src/devices/bus/isa/svga_tseng.cpp +++ b/src/devices/bus/isa/svga_tseng.cpp @@ -76,13 +76,13 @@ void isa8_svga_et4k_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "et4000", "et4000"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "et4000", "et4000"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(tseng_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(tseng_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(tseng_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(tseng_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(tseng_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(tseng_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(tseng_vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(tseng_vga_device::mem_r),m_vga), write8_delegate(FUNC(tseng_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(tseng_vga_device::mem_r),m_vga), write8_delegate(FUNC(tseng_vga_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/vga.cpp b/src/devices/bus/isa/vga.cpp index 390834c8d5b..306f1254eeb 100644 --- a/src/devices/bus/isa/vga.cpp +++ b/src/devices/bus/isa/vga.cpp @@ -66,13 +66,13 @@ void isa8_vga_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "ibm_vga", "ibm_vga"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "ibm_vga", "ibm_vga"); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(vga_device::mem_r),m_vga), write8_delegate(FUNC(vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(vga_device::mem_r),m_vga), write8_delegate(FUNC(vga_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/vga_ati.cpp b/src/devices/bus/isa/vga_ati.cpp index 490a26dc90c..a0f1a7f2f72 100644 --- a/src/devices/bus/isa/vga_ati.cpp +++ b/src/devices/bus/isa/vga_ati.cpp @@ -178,50 +178,50 @@ void isa16_vga_gfxultra_device::device_start() m_vga = subdevice("vga"); m_8514 = subdevice("vga:8514a"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "vga", "gfxultra"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultra"); - m_isa->install_device(0x1ce, 0x1cf, 0, 0, read8_delegate(FUNC(ati_vga_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(ati_vga_device::ati_port_ext_w),m_vga)); - m_isa->install16_device(0x2e8, 0x2eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_status_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_htotal_w),m_8514)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(ati_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(ati_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(ati_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x12e8, 0x12eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_vtotal_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vtotal_w),m_8514)); - m_isa->install16_device(0x12ec, 0x12ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_config1_r),m_8514), write16_delegate()); - m_isa->install16_device(0x16e8, 0x16eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_vdisp_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vdisp_w),m_8514)); - m_isa->install16_device(0x16ec, 0x16ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_config2_r),m_8514), write16_delegate()); - m_isa->install16_device(0x1ae8, 0x1aeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_vsync_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vsync_w),m_8514)); - m_isa->install16_device(0x26e8, 0x26eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_htotal_r),m_8514),write16_delegate()); - m_isa->install16_device(0x2ee8, 0x2eeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_subcontrol_r),m_8514),write16_delegate()); - m_isa->install16_device(0x42e8, 0x42eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_substatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_subcontrol_w),m_8514)); - m_isa->install16_device(0x52e8, 0x52eb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec0_w),m_8514)); - m_isa->install16_device(0x52ec, 0x52ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); - m_isa->install16_device(0x56e8, 0x56eb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec1_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec1_w),m_8514)); - m_isa->install16_device(0x56ec, 0x56ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); - m_isa->install16_device(0x5ae8, 0x5aeb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec2_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec2_w),m_8514)); - m_isa->install16_device(0x5ee8, 0x5eeb, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ec3_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec3_w),m_8514)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currenty_w),m_8514)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currentx_w),m_8514)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_desty_w),m_8514)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_destx_w),m_8514)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_line_error_w),m_8514)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_width_w),m_8514)); - m_isa->install16_device(0x96ec, 0x96ef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_bresenham_count_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_bresenham_count_w),m_8514)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_cmd_w),m_8514)); - m_isa->install16_device(0x9aec, 0x9aef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_ext_fifo_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_index_w),m_8514)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_ssv_w),m_8514)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_bgcolour_w),m_8514)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_fgcolour_w),m_8514)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_backmix_w),m_8514)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_foremix_w),m_8514)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_multifunc_w),m_8514)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_w),m_8514)); - m_isa->install16_device(0xdaec, 0xdaef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_sourcex_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_leftscissor_w),m_8514)); - m_isa->install16_device(0xdeec, 0xdeef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_sourcey_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_topscissor_w),m_8514)); - m_isa->install16_device(0xfeec, 0xfeef, 0, 0, read16_delegate(FUNC(mach8_device::mach8_linedraw_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_w),m_8514)); + m_isa->install_device(0x1ce, 0x1cf, read8_delegate(FUNC(ati_vga_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(ati_vga_device::ati_port_ext_w),m_vga)); + m_isa->install16_device(0x2e8, 0x2eb, read16_delegate(FUNC(mach8_device::ibm8514_status_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_htotal_w),m_8514)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(ati_vga_device::port_03b0_r),m_vga), write8_delegate(FUNC(vga_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(ati_vga_device::port_03c0_r),m_vga), write8_delegate(FUNC(vga_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(ati_vga_device::port_03d0_r),m_vga), write8_delegate(FUNC(vga_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x12e8, 0x12eb, read16_delegate(FUNC(mach8_device::ibm8514_vtotal_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vtotal_w),m_8514)); + m_isa->install16_device(0x12ec, 0x12ef, read16_delegate(FUNC(mach8_device::mach8_config1_r),m_8514), write16_delegate()); + m_isa->install16_device(0x16e8, 0x16eb, read16_delegate(FUNC(mach8_device::ibm8514_vdisp_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vdisp_w),m_8514)); + m_isa->install16_device(0x16ec, 0x16ef, read16_delegate(FUNC(mach8_device::mach8_config2_r),m_8514), write16_delegate()); + m_isa->install16_device(0x1ae8, 0x1aeb, read16_delegate(FUNC(mach8_device::ibm8514_vsync_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_vsync_w),m_8514)); + m_isa->install16_device(0x26e8, 0x26eb, read16_delegate(FUNC(mach8_device::ibm8514_htotal_r),m_8514),write16_delegate()); + m_isa->install16_device(0x2ee8, 0x2eeb, read16_delegate(FUNC(mach8_device::ibm8514_subcontrol_r),m_8514),write16_delegate()); + m_isa->install16_device(0x42e8, 0x42eb, read16_delegate(FUNC(mach8_device::ibm8514_substatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_subcontrol_w),m_8514)); + m_isa->install16_device(0x52e8, 0x52eb, read16_delegate(FUNC(mach8_device::mach8_ec0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec0_w),m_8514)); + m_isa->install16_device(0x52ec, 0x52ef, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); + m_isa->install16_device(0x56e8, 0x56eb, read16_delegate(FUNC(mach8_device::mach8_ec1_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec1_w),m_8514)); + m_isa->install16_device(0x56ec, 0x56ef, read16_delegate(FUNC(mach8_device::mach8_scratch0_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_scratch0_w),m_8514)); + m_isa->install16_device(0x5ae8, 0x5aeb, read16_delegate(FUNC(mach8_device::mach8_ec2_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec2_w),m_8514)); + m_isa->install16_device(0x5ee8, 0x5eeb, read16_delegate(FUNC(mach8_device::mach8_ec3_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ec3_w),m_8514)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(mach8_device::ibm8514_currenty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currenty_w),m_8514)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(mach8_device::ibm8514_currentx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_currentx_w),m_8514)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(mach8_device::ibm8514_desty_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_desty_w),m_8514)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(mach8_device::ibm8514_destx_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_destx_w),m_8514)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(mach8_device::ibm8514_line_error_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_line_error_w),m_8514)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(mach8_device::ibm8514_width_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_width_w),m_8514)); + m_isa->install16_device(0x96ec, 0x96ef, read16_delegate(FUNC(mach8_device::mach8_bresenham_count_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_bresenham_count_w),m_8514)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(mach8_device::ibm8514_gpstatus_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_cmd_w),m_8514)); + m_isa->install16_device(0x9aec, 0x9aef, read16_delegate(FUNC(mach8_device::mach8_ext_fifo_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_index_w),m_8514)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(mach8_device::ibm8514_ssv_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_ssv_w),m_8514)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(mach8_device::ibm8514_bgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_bgcolour_w),m_8514)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(mach8_device::ibm8514_fgcolour_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_fgcolour_w),m_8514)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_write_mask_w),m_8514)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_r),m_8514), write16_delegate(FUNC(ibm8514a_device::ibm8514_read_mask_w),m_8514)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(mach8_device::ibm8514_backmix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_backmix_w),m_8514)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(mach8_device::ibm8514_foremix_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_foremix_w),m_8514)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(mach8_device::ibm8514_multifunc_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_multifunc_w),m_8514)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_r),m_8514), write16_delegate(FUNC(mach8_device::ibm8514_pixel_xfer_w),m_8514)); + m_isa->install16_device(0xdaec, 0xdaef, read16_delegate(FUNC(mach8_device::mach8_sourcex_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_leftscissor_w),m_8514)); + m_isa->install16_device(0xdeec, 0xdeef, read16_delegate(FUNC(mach8_device::mach8_sourcey_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_ext_topscissor_w),m_8514)); + m_isa->install16_device(0xfeec, 0xfeef, read16_delegate(FUNC(mach8_device::mach8_linedraw_r),m_8514), write16_delegate(FUNC(mach8_device::mach8_linedraw_w),m_8514)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(ati_vga_device::mem_r),m_vga), write8_delegate(FUNC(ati_vga_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(ati_vga_device::mem_r),m_vga), write8_delegate(FUNC(ati_vga_device::mem_w),m_vga)); } void isa16_vga_gfxultrapro_device::device_start() @@ -230,53 +230,53 @@ void isa16_vga_gfxultrapro_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "vga", "gfxultrapro"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "gfxultrapro"); - m_isa->install_device(0x1ce, 0x1cf, 0, 0, read8_delegate(FUNC(mach32_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach32_device::ati_port_ext_w),m_vga)); - m_isa->install16_device(0x2e8, 0x2eb, 0, 0, read16_delegate(FUNC(mach32_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_htotal_w),m_vga)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(mach32_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(mach32_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(mach32_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x12e8, 0x12eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vtotal_w),m_vga)); - m_isa->install16_device(0x12ec, 0x12ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_config1_r),m_vga), write16_delegate()); - m_isa->install16_device(0x16e8, 0x16eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vdisp_w),m_vga)); - m_isa->install16_device(0x16ec, 0x16ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_config2_r),m_vga), write16_delegate()); - m_isa->install16_device(0x1ae8, 0x1aeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vsync_w),m_vga)); - m_isa->install16_device(0x26e8, 0x26eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_htotal_r),m_vga),write16_delegate()); - m_isa->install16_device(0x2ee8, 0x2eeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); - m_isa->install16_device(0x42e8, 0x42eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_subcontrol_w),m_vga)); - m_isa->install16_device(0x42ec, 0x42ef, 0, 0, read16_delegate(FUNC(mach32_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_mem_boundary_w),m_vga)); - m_isa->install16_device(0x4aec, 0x4aef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_clksel_w),m_vga)); - m_isa->install16_device(0x52e8, 0x52eb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec0_w),m_vga)); - m_isa->install16_device(0x52ec, 0x52ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x56e8, 0x56eb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec1_w),m_vga)); - m_isa->install16_device(0x56ec, 0x56ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x5ae8, 0x5aeb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec2_w),m_vga)); - m_isa->install16_device(0x5ee8, 0x5eeb, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec3_w),m_vga)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currenty_w),m_vga)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currentx_w),m_vga)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_desty_w),m_vga)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_destx_w),m_vga)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_line_error_w),m_vga)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_width_w),m_vga)); - m_isa->install16_device(0x96ec, 0x96ef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_bresenham_count_w),m_vga)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_cmd_w),m_vga)); - m_isa->install16_device(0x9aec, 0x9aef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_index_w),m_vga)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_ssv_w),m_vga)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_bgcolour_w),m_vga)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_fgcolour_w),m_vga)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_write_mask_w),m_vga)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_read_mask_w),m_vga)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_backmix_w),m_vga)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_foremix_w),m_vga)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_multifunc_w),m_vga)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_w),m_vga)); - m_isa->install16_device(0xdaec, 0xdaef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_leftscissor_w),m_vga)); - m_isa->install16_device(0xdeec, 0xdeef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_topscissor_w),m_vga)); - m_isa->install16_device(0xfaec, 0xfaef, 0, 0, read16_delegate(FUNC(mach32_device::mach32_chipid_r),m_vga), write16_delegate()); - m_isa->install16_device(0xfeec, 0xfeef, 0, 0, read16_delegate(FUNC(mach32_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_w),m_vga)); + m_isa->install_device(0x1ce, 0x1cf, read8_delegate(FUNC(mach32_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach32_device::ati_port_ext_w),m_vga)); + m_isa->install16_device(0x2e8, 0x2eb, read16_delegate(FUNC(mach32_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_htotal_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(mach32_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(mach32_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(mach32_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach32_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x12e8, 0x12eb, read16_delegate(FUNC(mach32_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vtotal_w),m_vga)); + m_isa->install16_device(0x12ec, 0x12ef, read16_delegate(FUNC(mach32_device::mach8_config1_r),m_vga), write16_delegate()); + m_isa->install16_device(0x16e8, 0x16eb, read16_delegate(FUNC(mach32_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vdisp_w),m_vga)); + m_isa->install16_device(0x16ec, 0x16ef, read16_delegate(FUNC(mach32_device::mach8_config2_r),m_vga), write16_delegate()); + m_isa->install16_device(0x1ae8, 0x1aeb, read16_delegate(FUNC(mach32_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_vsync_w),m_vga)); + m_isa->install16_device(0x26e8, 0x26eb, read16_delegate(FUNC(mach32_device::ibm8514_htotal_r),m_vga),write16_delegate()); + m_isa->install16_device(0x2ee8, 0x2eeb, read16_delegate(FUNC(mach32_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); + m_isa->install16_device(0x42e8, 0x42eb, read16_delegate(FUNC(mach32_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_subcontrol_w),m_vga)); + m_isa->install16_device(0x42ec, 0x42ef, read16_delegate(FUNC(mach32_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_mem_boundary_w),m_vga)); + m_isa->install16_device(0x4aec, 0x4aef, read16_delegate(FUNC(mach32_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach32_device::mach32_clksel_w),m_vga)); + m_isa->install16_device(0x52e8, 0x52eb, read16_delegate(FUNC(mach32_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec0_w),m_vga)); + m_isa->install16_device(0x52ec, 0x52ef, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x56e8, 0x56eb, read16_delegate(FUNC(mach32_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec1_w),m_vga)); + m_isa->install16_device(0x56ec, 0x56ef, read16_delegate(FUNC(mach32_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x5ae8, 0x5aeb, read16_delegate(FUNC(mach32_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec2_w),m_vga)); + m_isa->install16_device(0x5ee8, 0x5eeb, read16_delegate(FUNC(mach32_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ec3_w),m_vga)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(mach32_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currenty_w),m_vga)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(mach32_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_currentx_w),m_vga)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(mach32_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_desty_w),m_vga)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(mach32_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_destx_w),m_vga)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(mach32_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_line_error_w),m_vga)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(mach32_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_width_w),m_vga)); + m_isa->install16_device(0x96ec, 0x96ef, read16_delegate(FUNC(mach32_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_bresenham_count_w),m_vga)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(mach32_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_cmd_w),m_vga)); + m_isa->install16_device(0x9aec, 0x9aef, read16_delegate(FUNC(mach32_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_index_w),m_vga)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(mach32_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_ssv_w),m_vga)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(mach32_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_bgcolour_w),m_vga)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(mach32_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_fgcolour_w),m_vga)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(mach32_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_write_mask_w),m_vga)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(mach32_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_read_mask_w),m_vga)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(mach32_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_backmix_w),m_vga)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(mach32_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_foremix_w),m_vga)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(mach32_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_multifunc_w),m_vga)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach32_device::ibm8514_pixel_xfer_w),m_vga)); + m_isa->install16_device(0xdaec, 0xdaef, read16_delegate(FUNC(mach32_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_leftscissor_w),m_vga)); + m_isa->install16_device(0xdeec, 0xdeef, read16_delegate(FUNC(mach32_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_ext_topscissor_w),m_vga)); + m_isa->install16_device(0xfaec, 0xfaef, read16_delegate(FUNC(mach32_device::mach32_chipid_r),m_vga), write16_delegate()); + m_isa->install16_device(0xfeec, 0xfeef, read16_delegate(FUNC(mach32_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach32_device::mach8_linedraw_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(mach32_device::mem_r),m_vga), write8_delegate(FUNC(mach32_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(mach32_device::mem_r),m_vga), write8_delegate(FUNC(mach32_device::mem_w),m_vga)); } void isa16_vga_mach64_device::device_start() @@ -285,53 +285,53 @@ void isa16_vga_mach64_device::device_start() m_vga = subdevice("vga"); - m_isa->install_rom(this, 0xc0000, 0xc7fff, 0, 0, "vga", "mach64"); + m_isa->install_rom(this, 0xc0000, 0xc7fff, "vga", "mach64"); - m_isa->install_device(0x1ce, 0x1cf, 0, 0, read8_delegate(FUNC(mach64_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach64_device::ati_port_ext_w),m_vga)); - m_isa->install16_device(0x2e8, 0x2eb, 0, 0, read16_delegate(FUNC(mach64_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_htotal_w),m_vga)); - m_isa->install_device(0x3b0, 0x3bf, 0, 0, read8_delegate(FUNC(mach64_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03b0_w),m_vga)); - m_isa->install_device(0x3c0, 0x3cf, 0, 0, read8_delegate(FUNC(mach64_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03c0_w),m_vga)); - m_isa->install_device(0x3d0, 0x3df, 0, 0, read8_delegate(FUNC(mach64_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03d0_w),m_vga)); - m_isa->install16_device(0x12e8, 0x12eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vtotal_w),m_vga)); - m_isa->install16_device(0x12ec, 0x12ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_config1_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config1_w),m_vga)); - m_isa->install16_device(0x16e8, 0x16eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vdisp_w),m_vga)); - m_isa->install16_device(0x16ec, 0x16ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_config2_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config2_w),m_vga)); - m_isa->install16_device(0x1ae8, 0x1aeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vsync_w),m_vga)); - m_isa->install16_device(0x26e8, 0x26eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_htotal_r),m_vga),write16_delegate()); - m_isa->install16_device(0x2ee8, 0x2eeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); - m_isa->install16_device(0x42e8, 0x42eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_subcontrol_w),m_vga)); - m_isa->install16_device(0x42ec, 0x42ef, 0, 0, read16_delegate(FUNC(mach64_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_mem_boundary_w),m_vga)); - m_isa->install16_device(0x4aec, 0x4aef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_clksel_w),m_vga)); - m_isa->install16_device(0x52e8, 0x52eb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec0_w),m_vga)); - m_isa->install16_device(0x52ec, 0x52ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x56e8, 0x56eb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec1_w),m_vga)); - m_isa->install16_device(0x56ec, 0x56ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); - m_isa->install16_device(0x5ae8, 0x5aeb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec2_w),m_vga)); - m_isa->install16_device(0x5ee8, 0x5eeb, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec3_w),m_vga)); - m_isa->install16_device(0x82e8, 0x82eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currenty_w),m_vga)); - m_isa->install16_device(0x86e8, 0x86eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currentx_w),m_vga)); - m_isa->install16_device(0x8ae8, 0x8aeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_desty_w),m_vga)); - m_isa->install16_device(0x8ee8, 0x8eeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_destx_w),m_vga)); - m_isa->install16_device(0x92e8, 0x92eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_line_error_w),m_vga)); - m_isa->install16_device(0x96e8, 0x96eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_width_w),m_vga)); - m_isa->install16_device(0x96ec, 0x96ef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_bresenham_count_w),m_vga)); - m_isa->install16_device(0x9ae8, 0x9aeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_cmd_w),m_vga)); - m_isa->install16_device(0x9aec, 0x9aef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_index_w),m_vga)); - m_isa->install16_device(0x9ee8, 0x9eeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_ssv_w),m_vga)); - m_isa->install16_device(0xa2e8, 0xa2eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_bgcolour_w),m_vga)); - m_isa->install16_device(0xa6e8, 0xa6eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_fgcolour_w),m_vga)); - m_isa->install16_device(0xaae8, 0xaaeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_write_mask_w),m_vga)); - m_isa->install16_device(0xaee8, 0xaeeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_read_mask_w),m_vga)); - m_isa->install16_device(0xb6e8, 0xb6eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_backmix_w),m_vga)); - m_isa->install16_device(0xbae8, 0xbaeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_foremix_w),m_vga)); - m_isa->install16_device(0xbee8, 0xbeeb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_multifunc_w),m_vga)); - m_isa->install16_device(0xe2e8, 0xe2eb, 0, 0, read16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_w),m_vga)); - m_isa->install16_device(0xdaec, 0xdaef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_leftscissor_w),m_vga)); - m_isa->install16_device(0xdeec, 0xdeef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_topscissor_w),m_vga)); - m_isa->install16_device(0xfaec, 0xfaef, 0, 0, read16_delegate(FUNC(mach64_device::mach32_chipid_r),m_vga), write16_delegate()); - m_isa->install16_device(0xfeec, 0xfeef, 0, 0, read16_delegate(FUNC(mach64_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_w),m_vga)); + m_isa->install_device(0x1ce, 0x1cf, read8_delegate(FUNC(mach64_device::ati_port_ext_r),m_vga), write8_delegate(FUNC(mach64_device::ati_port_ext_w),m_vga)); + m_isa->install16_device(0x2e8, 0x2eb, read16_delegate(FUNC(mach64_device::mach32_status_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_htotal_w),m_vga)); + m_isa->install_device(0x3b0, 0x3bf, read8_delegate(FUNC(mach64_device::port_03b0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03b0_w),m_vga)); + m_isa->install_device(0x3c0, 0x3cf, read8_delegate(FUNC(mach64_device::port_03c0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03c0_w),m_vga)); + m_isa->install_device(0x3d0, 0x3df, read8_delegate(FUNC(mach64_device::port_03d0_r),m_vga), write8_delegate(FUNC(mach64_device::port_03d0_w),m_vga)); + m_isa->install16_device(0x12e8, 0x12eb, read16_delegate(FUNC(mach64_device::ibm8514_vtotal_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vtotal_w),m_vga)); + m_isa->install16_device(0x12ec, 0x12ef, read16_delegate(FUNC(mach64_device::mach8_config1_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config1_w),m_vga)); + m_isa->install16_device(0x16e8, 0x16eb, read16_delegate(FUNC(mach64_device::ibm8514_vdisp_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vdisp_w),m_vga)); + m_isa->install16_device(0x16ec, 0x16ef, read16_delegate(FUNC(mach64_device::mach8_config2_r),m_vga), write16_delegate(FUNC(mach64_device::mach64_config2_w),m_vga)); + m_isa->install16_device(0x1ae8, 0x1aeb, read16_delegate(FUNC(mach64_device::ibm8514_vsync_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_vsync_w),m_vga)); + m_isa->install16_device(0x26e8, 0x26eb, read16_delegate(FUNC(mach64_device::ibm8514_htotal_r),m_vga),write16_delegate()); + m_isa->install16_device(0x2ee8, 0x2eeb, read16_delegate(FUNC(mach64_device::ibm8514_subcontrol_r),m_vga),write16_delegate()); + m_isa->install16_device(0x42e8, 0x42eb, read16_delegate(FUNC(mach64_device::ibm8514_substatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_subcontrol_w),m_vga)); + m_isa->install16_device(0x42ec, 0x42ef, read16_delegate(FUNC(mach64_device::mach32_mem_boundary_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_mem_boundary_w),m_vga)); + m_isa->install16_device(0x4aec, 0x4aef, read16_delegate(FUNC(mach64_device::mach8_clksel_r),m_vga), write16_delegate(FUNC(mach64_device::mach32_clksel_w),m_vga)); + m_isa->install16_device(0x52e8, 0x52eb, read16_delegate(FUNC(mach64_device::mach8_ec0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec0_w),m_vga)); + m_isa->install16_device(0x52ec, 0x52ef, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x56e8, 0x56eb, read16_delegate(FUNC(mach64_device::mach8_ec1_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec1_w),m_vga)); + m_isa->install16_device(0x56ec, 0x56ef, read16_delegate(FUNC(mach64_device::mach8_scratch0_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_scratch0_w),m_vga)); + m_isa->install16_device(0x5ae8, 0x5aeb, read16_delegate(FUNC(mach64_device::mach8_ec2_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec2_w),m_vga)); + m_isa->install16_device(0x5ee8, 0x5eeb, read16_delegate(FUNC(mach64_device::mach8_ec3_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ec3_w),m_vga)); + m_isa->install16_device(0x82e8, 0x82eb, read16_delegate(FUNC(mach64_device::ibm8514_currenty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currenty_w),m_vga)); + m_isa->install16_device(0x86e8, 0x86eb, read16_delegate(FUNC(mach64_device::ibm8514_currentx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_currentx_w),m_vga)); + m_isa->install16_device(0x8ae8, 0x8aeb, read16_delegate(FUNC(mach64_device::ibm8514_desty_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_desty_w),m_vga)); + m_isa->install16_device(0x8ee8, 0x8eeb, read16_delegate(FUNC(mach64_device::ibm8514_destx_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_destx_w),m_vga)); + m_isa->install16_device(0x92e8, 0x92eb, read16_delegate(FUNC(mach64_device::ibm8514_line_error_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_line_error_w),m_vga)); + m_isa->install16_device(0x96e8, 0x96eb, read16_delegate(FUNC(mach64_device::ibm8514_width_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_width_w),m_vga)); + m_isa->install16_device(0x96ec, 0x96ef, read16_delegate(FUNC(mach64_device::mach8_bresenham_count_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_bresenham_count_w),m_vga)); + m_isa->install16_device(0x9ae8, 0x9aeb, read16_delegate(FUNC(mach64_device::ibm8514_gpstatus_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_cmd_w),m_vga)); + m_isa->install16_device(0x9aec, 0x9aef, read16_delegate(FUNC(mach64_device::mach8_ext_fifo_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_index_w),m_vga)); + m_isa->install16_device(0x9ee8, 0x9eeb, read16_delegate(FUNC(mach64_device::ibm8514_ssv_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_ssv_w),m_vga)); + m_isa->install16_device(0xa2e8, 0xa2eb, read16_delegate(FUNC(mach64_device::ibm8514_bgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_bgcolour_w),m_vga)); + m_isa->install16_device(0xa6e8, 0xa6eb, read16_delegate(FUNC(mach64_device::ibm8514_fgcolour_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_fgcolour_w),m_vga)); + m_isa->install16_device(0xaae8, 0xaaeb, read16_delegate(FUNC(mach64_device::ibm8514_write_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_write_mask_w),m_vga)); + m_isa->install16_device(0xaee8, 0xaeeb, read16_delegate(FUNC(mach64_device::ibm8514_read_mask_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_read_mask_w),m_vga)); + m_isa->install16_device(0xb6e8, 0xb6eb, read16_delegate(FUNC(mach64_device::ibm8514_backmix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_backmix_w),m_vga)); + m_isa->install16_device(0xbae8, 0xbaeb, read16_delegate(FUNC(mach64_device::ibm8514_foremix_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_foremix_w),m_vga)); + m_isa->install16_device(0xbee8, 0xbeeb, read16_delegate(FUNC(mach64_device::ibm8514_multifunc_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_multifunc_w),m_vga)); + m_isa->install16_device(0xe2e8, 0xe2eb, read16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_r),m_vga), write16_delegate(FUNC(mach64_device::ibm8514_pixel_xfer_w),m_vga)); + m_isa->install16_device(0xdaec, 0xdaef, read16_delegate(FUNC(mach64_device::mach8_sourcex_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_leftscissor_w),m_vga)); + m_isa->install16_device(0xdeec, 0xdeef, read16_delegate(FUNC(mach64_device::mach8_sourcey_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_ext_topscissor_w),m_vga)); + m_isa->install16_device(0xfaec, 0xfaef, read16_delegate(FUNC(mach64_device::mach32_chipid_r),m_vga), write16_delegate()); + m_isa->install16_device(0xfeec, 0xfeef, read16_delegate(FUNC(mach64_device::mach8_linedraw_r),m_vga), write16_delegate(FUNC(mach64_device::mach8_linedraw_w),m_vga)); - m_isa->install_memory(0xa0000, 0xbffff, 0, 0, read8_delegate(FUNC(mach64_device::mem_r),m_vga), write8_delegate(FUNC(mach64_device::mem_w),m_vga)); + m_isa->install_memory(0xa0000, 0xbffff, read8_delegate(FUNC(mach64_device::mem_r),m_vga), write8_delegate(FUNC(mach64_device::mem_w),m_vga)); } //------------------------------------------------- diff --git a/src/devices/bus/isa/wdxt_gen.cpp b/src/devices/bus/isa/wdxt_gen.cpp index abd262cd918..dd2e28202ce 100644 --- a/src/devices/bus/isa/wdxt_gen.cpp +++ b/src/devices/bus/isa/wdxt_gen.cpp @@ -206,8 +206,8 @@ wdxt_gen_device::wdxt_gen_device(const machine_config &mconfig, const char *tag, void wdxt_gen_device::device_start() { set_isa_device(); - m_isa->install_rom(this, 0xc8000, 0xc9fff, 0, 0, "hdc", "hdc"); - m_isa->install_device(0x0320, 0x0323, 0, 0, READ8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_r), WRITE8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_w)); + m_isa->install_rom(this, 0xc8000, 0xc9fff, "hdc", "hdc"); + m_isa->install_device(0x0320, 0x0323, READ8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_r), WRITE8_DEVICE_DELEGATE(m_host, wd11c00_17_device, io_w)); m_isa->set_dma_channel(3, this, FALSE); } diff --git a/src/devices/bus/isa/xtide.cpp b/src/devices/bus/isa/xtide.cpp index fcd0750e5a3..ef5fd332f47 100644 --- a/src/devices/bus/isa/xtide.cpp +++ b/src/devices/bus/isa/xtide.cpp @@ -326,8 +326,8 @@ void xtide_device::device_reset() int io_address = ((ioport("IO_ADDRESS")->read() & 0x0F) * 0x20) + 0x200; m_irq_number = (ioport("IRQ")->read() & 0x07); - m_isa->install_memory(base_address, base_address + 0x1fff, 0, 0, read8_delegate(FUNC(eeprom_parallel_28xx_device::read), &(*m_eeprom)), write8_delegate(FUNC(eeprom_parallel_28xx_device::write), &(*m_eeprom))); - m_isa->install_device(io_address, io_address + 0xf, 0, 0, read8_delegate(FUNC(xtide_device::read), this), write8_delegate(FUNC(xtide_device::write), this)); + m_isa->install_memory(base_address, base_address + 0x1fff, read8_delegate(FUNC(eeprom_parallel_28xx_device::read), &(*m_eeprom)), write8_delegate(FUNC(eeprom_parallel_28xx_device::write), &(*m_eeprom))); + m_isa->install_device(io_address, io_address + 0xf, read8_delegate(FUNC(xtide_device::read), this), write8_delegate(FUNC(xtide_device::write), this)); //logerror("xtide_device::device_reset(), bios_base=0x%5X to 0x%5X, I/O=0x%3X, IRQ=%d\n",base_address,base_address + (16*1024) -1 ,io_address,irq); } diff --git a/src/devices/bus/macpds/macpds.cpp b/src/devices/bus/macpds/macpds.cpp index bc626ac1831..956a0bb95ed 100644 --- a/src/devices/bus/macpds/macpds.cpp +++ b/src/devices/bus/macpds/macpds.cpp @@ -120,12 +120,12 @@ void macpds_device::install_device(offs_t start, offs_t end, read16_delegate rha m_maincpu->space(AS_PROGRAM).install_readwrite_handler(start, end, rhandler, whandler, mask); } -void macpds_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void macpds_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { -// printf("install_bank: %s @ %x->%x mask %x mirror %x\n", tag, start, end, mask, mirror); +// printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, mask, mirror, tag ); + space.install_readwrite_bank(start, end, 0, tag ); machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); } @@ -176,7 +176,7 @@ void device_macpds_card_interface::set_macpds_device() m_macpds->add_macpds_card(this); } -void device_macpds_card_interface::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void device_macpds_card_interface::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { char bank[256]; @@ -185,7 +185,7 @@ void device_macpds_card_interface::install_bank(offs_t start, offs_t end, offs_t strcat(bank, "_"); strcat(bank, m_macpds_slottag); - m_macpds->install_bank(start, end, mask, mirror, bank, data); + m_macpds->install_bank(start, end, bank, data); } void device_macpds_card_interface::install_rom(device_t *dev, const char *romregion, UINT32 addr) @@ -195,5 +195,5 @@ void device_macpds_card_interface::install_rom(device_t *dev, const char *romreg char bankname[128]; sprintf(bankname, "rom_%x", addr); - m_macpds->install_bank(addr, addr+romlen-1, 0, 0, bankname, rom); + m_macpds->install_bank(addr, addr+romlen-1, bankname, rom); } diff --git a/src/devices/bus/macpds/macpds.h b/src/devices/bus/macpds/macpds.h index db572d553f2..511355f6e42 100644 --- a/src/devices/bus/macpds/macpds.h +++ b/src/devices/bus/macpds/macpds.h @@ -83,7 +83,7 @@ public: void add_macpds_card(device_macpds_card_interface *card); void install_device(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler, UINT32 mask=0xffffffff); void install_device(offs_t start, offs_t end, read16_delegate rhandler, write16_delegate whandler, UINT32 mask=0xffffffff); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); void set_irq_line(int line, int state); protected: @@ -118,7 +118,7 @@ public: void set_macpds_device(); // helper functions for card devices - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); void install_rom(device_t *dev, const char *romregion, UINT32 addr); // inline configuration diff --git a/src/devices/bus/macpds/pds_tpdfpd.cpp b/src/devices/bus/macpds/pds_tpdfpd.cpp index f89a210888f..a28577bfc99 100644 --- a/src/devices/bus/macpds/pds_tpdfpd.cpp +++ b/src/devices/bus/macpds/pds_tpdfpd.cpp @@ -118,7 +118,7 @@ void macpds_sedisplay_device::device_start() m_vram = std::make_unique(VRAM_SIZE); static const char bankname[] = { "radpds_ram" }; - m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, 0, 0, bankname, m_vram.get()); + m_macpds->install_bank(0xc40000, 0xc40000+VRAM_SIZE-1, bankname, m_vram.get()); m_macpds->install_device(0x770000, 0x77000f, read16_delegate(FUNC(macpds_sedisplay_device::ramdac_r), this), write16_delegate(FUNC(macpds_sedisplay_device::ramdac_w), this)); m_macpds->install_device(0xc10000, 0xc2ffff, read16_delegate(FUNC(macpds_sedisplay_device::sedisplay_r), this), write16_delegate(FUNC(macpds_sedisplay_device::sedisplay_w), this)); diff --git a/src/devices/bus/megadrive/md_carts.cpp b/src/devices/bus/megadrive/md_carts.cpp index 4c9f1b9b2e0..5a8e1902d09 100644 --- a/src/devices/bus/megadrive/md_carts.cpp +++ b/src/devices/bus/megadrive/md_carts.cpp @@ -55,6 +55,7 @@ SLOT_INTERFACE_START(md_cart) SLOT_INTERFACE_INTERNAL("rom_lion3", MD_ROM_LION3) SLOT_INTERFACE_INTERNAL("rom_mcpir", MD_ROM_MCPIR) SLOT_INTERFACE_INTERNAL("rom_mjlov", MD_ROM_MJLOV) + SLOT_INTERFACE_INTERNAL("rom_cjmjclub", MD_ROM_CJMJCLUB) SLOT_INTERFACE_INTERNAL("rom_pokea", MD_ROM_POKEA) SLOT_INTERFACE_INTERNAL("rom_pokestad", MD_ROM_POKESTAD) SLOT_INTERFACE_INTERNAL("rom_realtec", MD_ROM_REALTEC) diff --git a/src/devices/bus/megadrive/md_slot.cpp b/src/devices/bus/megadrive/md_slot.cpp index 61e847eb6e9..55d80f8b64d 100644 --- a/src/devices/bus/megadrive/md_slot.cpp +++ b/src/devices/bus/megadrive/md_slot.cpp @@ -270,6 +270,7 @@ static const md_slot slot_list[] = { LIONK3, "rom_lion3" }, { MC_PIRATE, "rom_mcpir" }, { MJLOVER, "rom_mjlov" }, + { CJMJCLUB, "rom_cjmjclub" }, { POKEMONA, "rom_pokea" }, { REALTEC, "rom_realtec" }, { REDCL_EN, "rom_redcl" }, diff --git a/src/devices/bus/megadrive/md_slot.h b/src/devices/bus/megadrive/md_slot.h index a033daec607..b6cb59147d5 100644 --- a/src/devices/bus/megadrive/md_slot.h +++ b/src/devices/bus/megadrive/md_slot.h @@ -61,6 +61,7 @@ enum LIONK3, /* Lion King 3, Super Donkey Kong 99, Super King Kong 99 */ MC_PIRATE, /* Super 19 in 1, Super 15 in 1, 12 in 1 and a few more multicarts */ MJLOVER, /* Mahjong Lover */ + CJMJCLUB, /* Super Mahjong Club */ POKEMONA, /* Pocket Monster Alt Protection */ REALTEC, /* Whac a Critter/Mallet legend, Defend the Earth, Funnyworld/Ballonboy */ REDCLIFF, /* Romance of the Three Kingdoms - Battle of Red Cliffs, already decoded from .mdx format */ diff --git a/src/devices/bus/megadrive/rom.cpp b/src/devices/bus/megadrive/rom.cpp index 16b12561c8a..ed17cfff044 100644 --- a/src/devices/bus/megadrive/rom.cpp +++ b/src/devices/bus/megadrive/rom.cpp @@ -41,6 +41,7 @@ const device_type MD_ROM_SMB2 = &device_creator; const device_type MD_ROM_SBUBL = &device_creator; const device_type MD_ROM_RX3 = &device_creator; const device_type MD_ROM_MJLOV = &device_creator; +const device_type MD_ROM_CJMJCLUB = &device_creator; const device_type MD_ROM_KOF98 = &device_creator; const device_type MD_ROM_KOF99 = &device_creator; const device_type MD_ROM_SOULB = &device_creator; @@ -141,6 +142,11 @@ md_rom_mjlov_device::md_rom_mjlov_device(const machine_config &mconfig, const ch { } +md_rom_cjmjclub_device::md_rom_cjmjclub_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : md_std_rom_device(mconfig, MD_ROM_CJMJCLUB, "MD Chaoji Majiang Club / Super Mahjong Club", tag, owner, clock, "md_rom_cjmjclub", __FILE__) +{ +} + md_rom_kof98_device::md_rom_kof98_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : md_std_rom_device(mconfig, MD_ROM_KOF98, "MD KOF 98", tag, owner, clock, "md_rom_kof98", __FILE__) { @@ -916,6 +922,23 @@ READ16_MEMBER(md_rom_mjlov_device::read) } +/*------------------------------------------------- + CHAOJI MAJIANG CLUB + -------------------------------------------------*/ + +READ16_MEMBER(md_rom_cjmjclub_device::read) +{ + if (offset == 0x400000/2) return 0x9000; + if (offset == 0x400002/2) return 0xd300; + + // non-protection accesses + if (offset < 0x400000/2) + return m_rom[MD_ADDR(offset)]; + else + return 0xffff; +} + + /*------------------------------------------------- SUPER BUBBLE BOBBLE MD -------------------------------------------------*/ diff --git a/src/devices/bus/megadrive/rom.h b/src/devices/bus/megadrive/rom.h index dcb1536f974..3bafead4346 100644 --- a/src/devices/bus/megadrive/rom.h +++ b/src/devices/bus/megadrive/rom.h @@ -263,6 +263,18 @@ public: virtual DECLARE_READ16_MEMBER(read) override; }; +// ======================> md_rom_cjmjclub_device + +class md_rom_cjmjclub_device : public md_std_rom_device +{ +public: + // construction/destruction + md_rom_cjmjclub_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // reading and writing + virtual DECLARE_READ16_MEMBER(read) override; +}; + // ======================> md_rom_pokea_device class md_rom_pokea_device : public md_std_rom_device @@ -585,6 +597,7 @@ extern const device_type MD_ROM_LION2; extern const device_type MD_ROM_LION3; extern const device_type MD_ROM_MCPIR; extern const device_type MD_ROM_MJLOV; +extern const device_type MD_ROM_CJMJCLUB; extern const device_type MD_ROM_POKEA; extern const device_type MD_ROM_POKESTAD; extern const device_type MD_ROM_REALTEC; diff --git a/src/devices/bus/nubus/nubus.cpp b/src/devices/bus/nubus/nubus.cpp index 50206fe1422..cf73062f82b 100644 --- a/src/devices/bus/nubus/nubus.cpp +++ b/src/devices/bus/nubus/nubus.cpp @@ -212,12 +212,12 @@ void nubus_device::install_writeonly_device(offs_t start, offs_t end, write32_de } } -void nubus_device::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void nubus_device::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { -// printf("install_bank: %s @ %x->%x mask %x mirror %x\n", tag, start, end, mask, mirror); +// printf("install_bank: %s @ %x->%x\n", tag, start, end); m_maincpu = machine().device(m_cputag); address_space &space = m_maincpu->space(AS_PROGRAM); - space.install_readwrite_bank(start, end, mask, mirror, tag ); + space.install_readwrite_bank(start, end, 0, tag ); machine().root_device().membank(siblingtag(tag).c_str())->set_base(data); } @@ -312,7 +312,7 @@ void device_nubus_card_interface::set_nubus_device() m_nubus->add_nubus_card(this); } -void device_nubus_card_interface::install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data) +void device_nubus_card_interface::install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data) { char bank[256]; @@ -321,7 +321,7 @@ void device_nubus_card_interface::install_bank(offs_t start, offs_t end, offs_t strcat(bank, "_"); strcat(bank, m_nubus_slottag); - m_nubus->install_bank(start, end, mask, mirror, bank, data); + m_nubus->install_bank(start, end, bank, data); } void device_nubus_card_interface::install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb, bool reverse_rom) @@ -467,10 +467,14 @@ void device_nubus_card_interface::install_declaration_rom(device_t *dev, const c // printf("Installing ROM at %x, length %x\n", addr, romlen); if (mirror_all_mb) // mirror the declaration ROM across all 16 megs of the slot space { - m_nubus->install_bank(addr, addr+romlen-1, 0, 0x00f00000, bankname, &m_declaration_rom[0]); + UINT32 off = 0; + while(off < 0x1000000) { + m_nubus->install_bank(addr + off, addr+off+romlen-1, bankname, &m_declaration_rom[0]); + off += romlen; + } } else { - m_nubus->install_bank(addr, addr+romlen-1, 0, 0, bankname, &m_declaration_rom[0]); + m_nubus->install_bank(addr, addr+romlen-1, bankname, &m_declaration_rom[0]); } } diff --git a/src/devices/bus/nubus/nubus.h b/src/devices/bus/nubus/nubus.h index 4bb736f1eb7..b7f5bed0646 100644 --- a/src/devices/bus/nubus/nubus.h +++ b/src/devices/bus/nubus/nubus.h @@ -106,7 +106,7 @@ public: void install_device(offs_t start, offs_t end, read32_delegate rhandler, write32_delegate whandler, UINT32 mask=0xffffffff); void install_readonly_device(offs_t start, offs_t end, read32_delegate rhandler, UINT32 mask=0xffffffff); void install_writeonly_device(offs_t start, offs_t end, write32_delegate whandler, UINT32 mask=0xffffffff); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); void set_irq_line(int slot, int state); DECLARE_WRITE_LINE_MEMBER( irq9_w ); @@ -156,7 +156,7 @@ public: // helper functions for card devices void install_declaration_rom(device_t *dev, const char *romregion, bool mirror_all_mb = false, bool reverse_rom = false); - void install_bank(offs_t start, offs_t end, offs_t mask, offs_t mirror, const char *tag, UINT8 *data); + void install_bank(offs_t start, offs_t end, const char *tag, UINT8 *data); UINT32 get_slotspace() { return 0xf0000000 | (m_slot<<24); } UINT32 get_super_slotspace() { return m_slot<<28; } diff --git a/src/devices/bus/nubus/nubus_48gc.cpp b/src/devices/bus/nubus/nubus_48gc.cpp index 2021def0a5d..74110534d93 100644 --- a/src/devices/bus/nubus/nubus_48gc.cpp +++ b/src/devices/bus/nubus/nubus_48gc.cpp @@ -114,7 +114,7 @@ void jmfb_device::device_start() // printf("[JMFB %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_48gc", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_48gc", &m_vram[0]); m_nubus->install_device(slotspace+0x200000, slotspace+0x2003ff, read32_delegate(FUNC(jmfb_device::mac_48gc_r), this), write32_delegate(FUNC(jmfb_device::mac_48gc_w), this)); diff --git a/src/devices/bus/nubus/nubus_cb264.cpp b/src/devices/bus/nubus/nubus_cb264.cpp index 29889da8a46..bdc7cba85c7 100644 --- a/src/devices/bus/nubus/nubus_cb264.cpp +++ b/src/devices/bus/nubus/nubus_cb264.cpp @@ -98,7 +98,7 @@ void nubus_cb264_device::device_start() // printf("[cb264 %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace, slotspace+VRAM_SIZE-1, 0, 0, "bank_cb264", &m_vram[0]); + install_bank(slotspace, slotspace+VRAM_SIZE-1, "bank_cb264", &m_vram[0]); m_nubus->install_device(slotspace+0xff6000, slotspace+0xff60ff, read32_delegate(FUNC(nubus_cb264_device::cb264_r), this), write32_delegate(FUNC(nubus_cb264_device::cb264_w), this)); m_nubus->install_device(slotspace+0xff7000, slotspace+0xff70ff, read32_delegate(FUNC(nubus_cb264_device::cb264_ramdac_r), this), write32_delegate(FUNC(nubus_cb264_device::cb264_ramdac_w), this)); diff --git a/src/devices/bus/nubus/nubus_vikbw.cpp b/src/devices/bus/nubus/nubus_vikbw.cpp index 532e9b66145..63b81446251 100644 --- a/src/devices/bus/nubus/nubus_vikbw.cpp +++ b/src/devices/bus/nubus/nubus_vikbw.cpp @@ -94,8 +94,8 @@ void nubus_vikbw_device::device_start() // printf("[vikbw %p] slotspace = %x\n", this, slotspace); m_vram.resize(VRAM_SIZE); - install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, 0, 0, "bank_vikbw", &m_vram[0]); - install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, 0, 0, "bank_vikbw2", &m_vram[0]); + install_bank(slotspace+0x40000, slotspace+0x40000+VRAM_SIZE-1, "bank_vikbw", &m_vram[0]); + install_bank(slotspace+0x940000, slotspace+0x940000+VRAM_SIZE-1, "bank_vikbw2", &m_vram[0]); m_nubus->install_device(slotspace, slotspace+3, read32_delegate(FUNC(nubus_vikbw_device::viking_enable_r), this), write32_delegate(FUNC(nubus_vikbw_device::viking_disable_w), this)); m_nubus->install_device(slotspace+0x80000, slotspace+0x80000+3, read32_delegate(FUNC(nubus_vikbw_device::viking_ack_r), this), write32_delegate(FUNC(nubus_vikbw_device::viking_ack_w), this)); diff --git a/src/devices/bus/pofo/exp.cpp b/src/devices/bus/pofo/exp.cpp new file mode 100644 index 00000000000..98b411990bf --- /dev/null +++ b/src/devices/bus/pofo/exp.cpp @@ -0,0 +1,103 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio Expansion Port emulation + +**********************************************************************/ + +#include "exp.h" + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +const device_type PORTFOLIO_EXPANSION_SLOT = &device_creator; + + + +//************************************************************************** +// CARD INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_portfolio_expansion_slot_interface - constructor +//------------------------------------------------- + +device_portfolio_expansion_slot_interface::device_portfolio_expansion_slot_interface(const machine_config &mconfig, device_t &device) : + device_slot_card_interface(mconfig,device) +{ + m_slot = dynamic_cast(device.owner()); +} + +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::iint_w ) { m_slot->iint_w(state); } +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::eint_w ) { m_slot->eint_w(state); } +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::nmio_w ) { m_slot->nmio_w(state); } +WRITE_LINE_MEMBER( device_portfolio_expansion_slot_interface::wake_w ) { m_slot->wake_w(state); } + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// portfolio_expansion_slot_t - constructor +//------------------------------------------------- + +portfolio_expansion_slot_t::portfolio_expansion_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, PORTFOLIO_EXPANSION_SLOT, "Atari Portfolio expansion port", tag, owner, clock, "portfolio_expansion_slot", __FILE__), + device_slot_interface(mconfig, *this), + m_write_iint(*this), + m_write_eint(*this), + m_write_nmio(*this), + m_write_wake(*this), + m_card(nullptr) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void portfolio_expansion_slot_t::device_start() +{ + m_card = dynamic_cast(get_card_device()); + + // resolve callbacks + m_write_iint.resolve_safe(); + m_write_eint.resolve_safe(); + m_write_nmio.resolve_safe(); + m_write_wake.resolve_safe(); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void portfolio_expansion_slot_t::device_reset() +{ + if (m_card != nullptr) + { + m_card->device().reset(); + } +} + + + +//------------------------------------------------- +// SLOT_INTERFACE( portfolio_expansion_cards ) +//------------------------------------------------- + +// slot devices +#include "hpc101.h" +#include "hpc102.h" + +SLOT_INTERFACE_START( portfolio_expansion_cards ) + SLOT_INTERFACE("lpt", HPC101) + SLOT_INTERFACE("uart", HPC102) +SLOT_INTERFACE_END diff --git a/src/devices/bus/pofo/exp.h b/src/devices/bus/pofo/exp.h new file mode 100644 index 00000000000..3b1e936dca5 --- /dev/null +++ b/src/devices/bus/pofo/exp.h @@ -0,0 +1,170 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio Expansion Port emulation + +********************************************************************** + + ABUF 1 2 5VS + REDY 3 4 VCC + BCOM 5 6 NCC1 + NMD1 7 8 WAKE + DTR 9 10 DEN + PDET 11 12 IINT + CCLK 13 14 MRST + HLDA 15 16 HLDO + IACK 17 18 CDET + IOM 19 20 A19 + A18 21 22 A17 + A16 23 24 A15 + A14 25 26 A13 + A12 27 28 A11 + A10 29 30 A9 + A8 31 32 VRAM + HLDI 33 34 ALE + GND 35 36 NMIO + OA7 37 38 OA6 + OA5 39 40 OA4 + OA3 41 42 OA2 + OA1 43 44 OA0 + AD0 45 46 AD1 + AD2 47 48 AD3 + AD4 49 50 AD5 + AD6 51 52 AD7 + EINT 53 54 NRDI + VEXT 55 56 EACK + BATD 57 58 NWRI + 5VS 59 60 BBUF + +**********************************************************************/ + +#pragma once + +#ifndef __PORTFOLIO_EXPANSION_SLOT__ +#define __PORTFOLIO_EXPANSION_SLOT__ + +#include "emu.h" + + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +#define PORTFOLIO_EXPANSION_SLOT_TAG "exp" + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, PORTFOLIO_EXPANSION_SLOT, _clock) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_IINT_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_iint_wr_callback(*device, DEVCB_##_write); + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_EINT_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_eint_wr_callback(*device, DEVCB_##_write); + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_NMIO_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_nmio_wr_callback(*device, DEVCB_##_write); + +#define MCFG_PORTFOLIO_EXPANSION_SLOT_WAKE_CALLBACK(_write) \ + devcb = &portfolio_expansion_slot_t::set_wake_wr_callback(*device, DEVCB_##_write); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> device_portfolio_expansion_slot_interface + +class portfolio_expansion_slot_t; + +class device_portfolio_expansion_slot_interface : public device_slot_card_interface +{ +public: + // construction/destruction + device_portfolio_expansion_slot_interface(const machine_config &mconfig, device_t &device); + virtual ~device_portfolio_expansion_slot_interface() { } + + virtual bool nmd1() { return 1; } + virtual bool pdet() { return 0; } + virtual bool cdet() { return 1; } + + virtual UINT8 iack_r() { return 0xff; } + virtual UINT8 eack_r() { return 0xff; } + + virtual UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { return data; }; + virtual void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { }; + + DECLARE_WRITE_LINE_MEMBER( iint_w ); + DECLARE_WRITE_LINE_MEMBER( eint_w ); + DECLARE_WRITE_LINE_MEMBER( nmio_w ); + DECLARE_WRITE_LINE_MEMBER( wake_w ); + +protected: + portfolio_expansion_slot_t *m_slot; +}; + + +// ======================> portfolio_expansion_slot_t + +class portfolio_expansion_slot_t : public device_t, + public device_slot_interface +{ +public: + // construction/destruction + portfolio_expansion_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~portfolio_expansion_slot_t() { } + + template static devcb_base &set_iint_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_iint.set_callback(object); } + template static devcb_base &set_eint_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_eint.set_callback(object); } + template static devcb_base &set_nmio_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_nmio.set_callback(object); } + template static devcb_base &set_wake_wr_callback(device_t &device, _Object object) { return downcast(device).m_write_wake.set_callback(object); } + + // computer interface + bool nmd1_r() { return (m_card != nullptr) ? m_card->nmd1() : 1; } + bool pdet_r() { return (m_card != nullptr) ? m_card->pdet() : 0; } + bool cdet_r() { return (m_card != nullptr) ? m_card->cdet() : 1; } + + UINT8 iack_r() { return (m_card != nullptr) ? m_card->iack_r() : 0xff; }; + UINT8 eack_r() { return (m_card != nullptr) ? m_card->eack_r() : 0xff; }; + + UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { return (m_card != nullptr) ? m_card->nrdi_r(space, offset, data, iom, bcom, ncc1) : data; } + void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) { if (m_card != nullptr) m_card->nwri_w(space, offset, data, iom, bcom, ncc1); } + + // peripheral interface + WRITE_LINE_MEMBER( iint_w ) { m_write_iint(state); } + WRITE_LINE_MEMBER( eint_w ) { m_write_eint(state); } + WRITE_LINE_MEMBER( nmio_w ) { m_write_nmio(state); } + WRITE_LINE_MEMBER( wake_w ) { m_write_wake(state); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + devcb_write_line m_write_iint; + devcb_write_line m_write_eint; + devcb_write_line m_write_nmio; + devcb_write_line m_write_wake; + + device_portfolio_expansion_slot_interface *m_card; +}; + + +// device type definition +extern const device_type PORTFOLIO_EXPANSION_SLOT; + + +SLOT_INTERFACE_EXTERN( portfolio_expansion_cards ); + + + +#endif diff --git a/src/devices/bus/pofo/hpc101.cpp b/src/devices/bus/pofo/hpc101.cpp new file mode 100644 index 00000000000..b3286d2b0ef --- /dev/null +++ b/src/devices/bus/pofo/hpc101.cpp @@ -0,0 +1,141 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-101 parallel interface emulation + +**********************************************************************/ + +#include "hpc101.h" + + + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define LOG 0 + +#define M82C55A_TAG "u1" +#define CENTRONICS_TAG "centronics" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type HPC101 = &device_creator; + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( hpc101 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( hpc101 ) + MCFG_DEVICE_ADD(M82C55A_TAG, I8255A, 0) + MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("cent_data_out", output_latch_device, write)) + MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_ctrl_out", output_latch_device, write)) + MCFG_I8255_IN_PORTC_CB(DEVREAD8("cent_status_in", input_buffer_device, read)) + + MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer") + MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit5)) + MCFG_CENTRONICS_BUSY_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit4)) + MCFG_CENTRONICS_FAULT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit3)) + MCFG_CENTRONICS_SELECT_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit1)) + MCFG_CENTRONICS_PERROR_HANDLER(DEVWRITELINE("cent_status_in", input_buffer_device, write_bit0)) + + MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG) + MCFG_DEVICE_ADD("cent_status_in", INPUT_BUFFER, 0) + + MCFG_DEVICE_ADD("cent_ctrl_out", OUTPUT_LATCH, 0) + MCFG_OUTPUT_LATCH_BIT0_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_strobe)) + MCFG_OUTPUT_LATCH_BIT1_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_autofd)) + MCFG_OUTPUT_LATCH_BIT2_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_init)) + MCFG_OUTPUT_LATCH_BIT3_HANDLER(DEVWRITELINE(CENTRONICS_TAG, centronics_device, write_select_in)) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor hpc101_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( hpc101 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// hpc101_t - constructor +//------------------------------------------------- + +hpc101_t::hpc101_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, HPC101, "Atari Portfolio HPC-101", tag, owner, clock, "hpc101", __FILE__), + device_portfolio_expansion_slot_interface(mconfig, *this), + m_ppi(*this, M82C55A_TAG) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void hpc101_t::device_start() +{ +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void hpc101_t::device_reset() +{ + m_ppi->reset(); +} + + +//------------------------------------------------- +// nrdi_r - read +//------------------------------------------------- + +UINT8 hpc101_t::nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0f) == 0x0f) + { + data = 0x02; + } + + if ((offset & 0x0c) == 0x08) + { + data = m_ppi->read(space, offset & 0x03); + } + } + + return data; +} + + +//------------------------------------------------- +// nwri_w - write +//------------------------------------------------- + +void hpc101_t::nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0c) == 0x08) + { + m_ppi->write(space, offset & 0x03, data); + } + } +} diff --git a/src/devices/bus/pofo/hpc101.h b/src/devices/bus/pofo/hpc101.h new file mode 100644 index 00000000000..36b4129049b --- /dev/null +++ b/src/devices/bus/pofo/hpc101.h @@ -0,0 +1,58 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-101 parallel interface emulation + +**********************************************************************/ + +#pragma once + +#ifndef __HPC101__ +#define __HPC101__ + +#include "emu.h" +#include "exp.h" +#include "bus/centronics/ctronics.h" +#include "machine/i8255.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> hpc101_t + +class hpc101_t : public device_t, + public device_portfolio_expansion_slot_interface +{ +public: + // construction/destruction + hpc101_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const override; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // device_portfolio_expansion_slot_interface overrides + bool pdet() override { return 1; } + + virtual UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + virtual void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + +private: + required_device m_ppi; +}; + + +// device type definition +extern const device_type HPC101; + + + +#endif diff --git a/src/devices/bus/pofo/hpc102.cpp b/src/devices/bus/pofo/hpc102.cpp new file mode 100644 index 00000000000..4ad13bd2308 --- /dev/null +++ b/src/devices/bus/pofo/hpc102.cpp @@ -0,0 +1,148 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-102 serial interface emulation + +**********************************************************************/ + +#include "hpc102.h" + + + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** + +#define LOG 0 + +#define M82C50A_TAG "u1" +#define RS232_TAG "rs232" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type HPC102 = &device_creator; + + +//------------------------------------------------- +// MACHINE_CONFIG_FRAGMENT( hpc102 ) +//------------------------------------------------- + +static MACHINE_CONFIG_FRAGMENT( hpc102 ) + MCFG_DEVICE_ADD(M82C50A_TAG, INS8250, XTAL_1_8432MHz) // should be INS8250A + MCFG_INS8250_OUT_TX_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_txd)) + MCFG_INS8250_OUT_DTR_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_dtr)) + MCFG_INS8250_OUT_RTS_CB(DEVWRITELINE(RS232_TAG, rs232_port_device, write_rts)) + MCFG_INS8250_OUT_INT_CB(WRITELINE(device_portfolio_expansion_slot_interface, eint_w)) + + MCFG_RS232_PORT_ADD(RS232_TAG, default_rs232_devices, nullptr) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, rx_w)) + MCFG_RS232_DCD_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, dcd_w)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, dsr_w)) + MCFG_RS232_RI_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, ri_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE(M82C50A_TAG, ins8250_uart_device, cts_w)) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// machine_config_additions - device-specific +// machine configurations +//------------------------------------------------- + +machine_config_constructor hpc102_t::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( hpc102 ); +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// hpc102_t - constructor +//------------------------------------------------- + +hpc102_t::hpc102_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, HPC102, "Atari Portfolio HPC-102", tag, owner, clock, "hpc102", __FILE__), + device_portfolio_expansion_slot_interface(mconfig, *this), + m_uart(*this, M82C50A_TAG) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void hpc102_t::device_start() +{ +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void hpc102_t::device_reset() +{ + m_uart->reset(); +} + + +//------------------------------------------------- +// eack_r - external interrupt acknowledge +//------------------------------------------------- + +UINT8 hpc102_t::eack_r() +{ + return m_vector; +} + + +//------------------------------------------------- +// nrdi_r - read +//------------------------------------------------- + +UINT8 hpc102_t::nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0f) == 0x0f) + { + data = 0x01; + } + + if (!(offset & 0x08)) + { + data = m_uart->ins8250_r(space, offset & 0x07); + } + } + + return data; +} + + +//------------------------------------------------- +// nwri_w - write +//------------------------------------------------- + +void hpc102_t::nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) +{ + if (!bcom) + { + if ((offset & 0x0f) == 0x0f) + { + m_vector = data; + } + + if (!(offset & 0x08)) + { + m_uart->ins8250_w(space, offset & 0x07, data); + } + } +} diff --git a/src/devices/bus/pofo/hpc102.h b/src/devices/bus/pofo/hpc102.h new file mode 100644 index 00000000000..c1fb91305af --- /dev/null +++ b/src/devices/bus/pofo/hpc102.h @@ -0,0 +1,66 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Atari Portfolio HPC-102 serial interface emulation + +**********************************************************************/ + +#pragma once + +#ifndef __HPC102__ +#define __HPC102__ + +#include "emu.h" +#include "exp.h" +#include "bus/rs232/rs232.h" +#include "machine/ins8250.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> hpc102_t + +class hpc102_t : public device_t, + public device_portfolio_expansion_slot_interface +{ +public: + // construction/destruction + hpc102_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // optional information overrides + virtual machine_config_constructor device_mconfig_additions() const override; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + // device_portfolio_expansion_slot_interface overrides + bool pdet() override { return 1; } + + virtual UINT8 eack_r() override; + + virtual UINT8 nrdi_r(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + virtual void nwri_w(address_space &space, offs_t offset, UINT8 data, bool iom, bool bcom, bool ncc1) override; + +private: + required_device m_uart; + + UINT8 m_vector; +}; + + +// device type definition +extern const device_type HPC102; + + + +#endif +/* + + +*/ \ No newline at end of file diff --git a/src/devices/bus/spc1000/fdd.cpp b/src/devices/bus/spc1000/fdd.cpp index 504a13ec0be..e04308ee0e4 100644 --- a/src/devices/bus/spc1000/fdd.cpp +++ b/src/devices/bus/spc1000/fdd.cpp @@ -166,7 +166,7 @@ void spc1000_fdd_exp_device::device_reset() m_cpu->set_input_line_vector(0, 0); // enable rom (is this really needed? it does not seem necessary for FDD to work) - m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x0fff, 0, 0x2000, device().machine().root_device().memregion("fdccpu")->base()); + m_cpu->space(AS_PROGRAM).install_rom(0x0000, 0x0fff, 0x2000, device().machine().root_device().memregion("fdccpu")->base()); } void spc1000_fdd_exp_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) diff --git a/src/devices/bus/ti99x/gromport.cpp b/src/devices/bus/ti99x/gromport.cpp index 32456359a40..4e9df13cdea 100644 --- a/src/devices/bus/ti99x/gromport.cpp +++ b/src/devices/bus/ti99x/gromport.cpp @@ -2446,7 +2446,7 @@ rpk::rpk(emu_options& options, const char* sysname) :m_options(options), m_type(0) //,m_system_name(sysname) { - m_sockets.reset(); + m_sockets.clear(); } rpk::~rpk() @@ -2459,9 +2459,9 @@ rpk::~rpk() */ UINT8* rpk::get_contents_of_socket(const char *socket_name) { - rpk_socket *socket = m_sockets.find(socket_name); - if (socket==nullptr) return nullptr; - return socket->get_contents(); + auto socket = m_sockets.find(socket_name); + if (socket == m_sockets.end()) return nullptr; + return socket->second->get_contents(); } /* @@ -2469,14 +2469,14 @@ UINT8* rpk::get_contents_of_socket(const char *socket_name) */ int rpk::get_resource_length(const char *socket_name) { - rpk_socket *socket = m_sockets.find(socket_name); - if (socket==nullptr) return 0; - return socket->get_content_length(); + auto socket = m_sockets.find(socket_name); + if (socket == m_sockets.end()) return 0; + return socket->second->get_content_length(); } -void rpk::add_socket(const char* id, rpk_socket *newsock) +void rpk::add_socket(const char* id, std::unique_ptr newsock) { - m_sockets.append(id, *newsock); + m_sockets.emplace(id, std::move(newsock)); } /*------------------------------------------------- @@ -2487,22 +2487,20 @@ void rpk::add_socket(const char* id, rpk_socket *newsock) void rpk::close() { // Save the NVRAM contents - rpk_socket *socket = m_sockets.first(); - while (socket != nullptr) + for(auto &socket : m_sockets) { - if (socket->persistent_ram()) + if (socket.second->persistent_ram()) { // try to open the battery file and write it if possible - assert_always(socket->get_contents() && (socket->get_content_length() > 0), "Buffer is null or length is 0"); + assert_always(socket.second->get_contents() && (socket.second->get_content_length() > 0), "Buffer is null or length is 0"); emu_file file(m_options.nvram_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); - osd_file::error filerr = file.open(socket->get_pathname()); + osd_file::error filerr = file.open(socket.second->get_pathname()); if (filerr == osd_file::error::NONE) - file.write(socket->get_contents(), socket->get_content_length()); + file.write(socket.second->get_contents(), socket.second->get_content_length()); } - socket->cleanup(); - socket = socket->m_next; + socket.second->cleanup(); } } @@ -2512,12 +2510,12 @@ void rpk::close() ***************************************************************/ rpk_socket::rpk_socket(const char* id, int length, UINT8* contents, const char *pathname) -: m_id(id), m_length(length), m_next(nullptr), m_contents(contents), m_pathname(pathname) +: m_id(id), m_length(length), m_contents(contents), m_pathname(pathname) { } rpk_socket::rpk_socket(const char* id, int length, UINT8* contents) -: m_id(id), m_length(length), m_next(nullptr), m_contents(contents), m_pathname(nullptr) +: m_id(id), m_length(length), m_contents(contents), m_pathname(nullptr) { } @@ -2554,7 +2552,7 @@ int rpk_reader::find_file(util::archive_file &zip, const char *filename, UINT32 /* Load a rom resource and put it in a pcb socket instance. */ -rpk_socket* rpk_reader::load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname) +std::unique_ptr rpk_reader::load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname) { const char* file; const char* crcstr; @@ -2613,13 +2611,13 @@ rpk_socket* rpk_reader::load_rom_resource(util::archive_file &zip, xml_data_node } // Create a socket instance - return new rpk_socket(socketname, length, contents); + return std::make_unique(socketname, length, contents); } /* Load a ram resource and put it in a pcb socket instance. */ -rpk_socket* rpk_reader::load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name) +std::unique_ptr rpk_reader::load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name) { const char* length_string; const char* ram_type; @@ -2697,7 +2695,7 @@ rpk_socket* rpk_reader::load_ram_resource(emu_options &options, xml_data_node* r } // Create a socket instance - return new rpk_socket(socketname, length, contents, ram_pname); + return std::make_unique(socketname, length, contents, ram_pname); } /*------------------------------------------------- @@ -2726,8 +2724,6 @@ rpk* rpk_reader::open(emu_options &options, const char *filename, const char *sy xml_data_node *socket_node; xml_data_node *pcb_node; - rpk_socket *newsock; - int i; auto newrpk = new rpk(options, system_name); @@ -2815,15 +2811,13 @@ rpk* rpk_reader::open(emu_options &options, const char *filename, const char *sy // found it if (strcmp(resource_node->name, "rom")==0) { - newsock = load_rom_resource(*zipfile, resource_node, id); - newrpk->add_socket(id, newsock); + newrpk->add_socket(id, load_rom_resource(*zipfile, resource_node, id)); } else { if (strcmp(resource_node->name, "ram")==0) { - newsock = load_ram_resource(options, resource_node, id, system_name); - newrpk->add_socket(id, newsock); + newrpk->add_socket(id, load_ram_resource(options, resource_node, id, system_name)); } else throw rpk_exception(RPK_INVALID_LAYOUT, "resource node must be or "); } diff --git a/src/devices/bus/ti99x/gromport.h b/src/devices/bus/ti99x/gromport.h index bebc7d9b05f..76983631e70 100644 --- a/src/devices/bus/ti99x/gromport.h +++ b/src/devices/bus/ti99x/gromport.h @@ -475,12 +475,12 @@ class rpk; class rpk_socket { - friend class simple_list; friend class rpk; public: rpk_socket(const char *id, int length, UINT8 *contents); rpk_socket(const char *id, int length, UINT8 *contents, const char *pathname); + ~rpk_socket() {} const char* id() { return m_id; } int get_content_length() { return m_length; } @@ -492,7 +492,6 @@ public: private: const char* m_id; UINT32 m_length; - rpk_socket* m_next; UINT8* m_contents; const char* m_pathname; }; @@ -507,8 +506,8 @@ public: private: int find_file(util::archive_file &zip, const char *filename, UINT32 crc); - rpk_socket* load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname); - rpk_socket* load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name); + std::unique_ptr load_rom_resource(util::archive_file &zip, xml_data_node* rom_resource_node, const char* socketname); + std::unique_ptr load_ram_resource(emu_options &options, xml_data_node* ram_resource_node, const char* socketname, const char* system_name); const pcb_type* m_types; }; @@ -528,9 +527,9 @@ private: emu_options& m_options; // need this to find the path to the nvram files int m_type; //const char* m_system_name; // need this to find the path to the nvram files - tagged_list m_sockets; + std::unordered_map> m_sockets; - void add_socket(const char* id, rpk_socket *newsock); + void add_socket(const char* id, std::unique_ptr newsock); }; enum rpk_open_error diff --git a/src/devices/bus/vtech/memexp/rs232.cpp b/src/devices/bus/vtech/memexp/rs232.cpp index ead9ac0a904..188f473514b 100644 --- a/src/devices/bus/vtech/memexp/rs232.cpp +++ b/src/devices/bus/vtech/memexp/rs232.cpp @@ -76,7 +76,7 @@ void rs232_interface_device::device_start() void rs232_interface_device::device_reset() { // program - m_slot->m_program->install_rom(0x4000, 0x47ff, 0, 0x800, memregion("software")->base()); + m_slot->m_program->install_rom(0x4000, 0x47ff, 0x800, memregion("software")->base()); // data m_slot->m_program->install_read_handler(0x5000, 0x57ff, read8_delegate(FUNC(rs232_interface_device::receive_data_r), this)); diff --git a/src/devices/bus/vtech/memexp/rtty.cpp b/src/devices/bus/vtech/memexp/rtty.cpp index bf9930c3dcf..fa1438461f3 100644 --- a/src/devices/bus/vtech/memexp/rtty.cpp +++ b/src/devices/bus/vtech/memexp/rtty.cpp @@ -59,7 +59,7 @@ void rtty_interface_device::device_start() void rtty_interface_device::device_reset() { // program - m_slot->m_program->install_rom(0x4000, 0x4fff, 0, 0x1000, memregion("software")->base()); + m_slot->m_program->install_rom(0x4000, 0x4fff, 0x1000, memregion("software")->base()); // data m_slot->m_program->install_read_handler(0x5000, 0x57ff, read8_delegate(FUNC(rtty_interface_device::receive_data_r), this)); diff --git a/src/devices/bus/x68k/x68k_scsiext.cpp b/src/devices/bus/x68k/x68k_scsiext.cpp index fce3c4a89ca..960721458f0 100644 --- a/src/devices/bus/x68k/x68k_scsiext.cpp +++ b/src/devices/bus/x68k/x68k_scsiext.cpp @@ -69,11 +69,11 @@ void x68k_scsiext_device::device_start() UINT8* ROM; address_space& space = cpu->memory().space(AS_PROGRAM); m_slot = dynamic_cast(owner()); - space.install_read_bank(0xea0020,0xea1fff,0,0,"scsi_ext"); - space.unmap_write(0xea0020,0xea1fff,0,0); + space.install_read_bank(0xea0020,0xea1fff,"scsi_ext"); + space.unmap_write(0xea0020,0xea1fff); ROM = machine().root_device().memregion(subtag("scsiexrom").c_str())->base(); machine().root_device().membank("scsi_ext")->set_base(ROM); - space.install_readwrite_handler(0xea0000,0xea001f,0,0,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff); + space.install_readwrite_handler(0xea0000,0xea001f,read8_delegate(FUNC(x68k_scsiext_device::register_r),this),write8_delegate(FUNC(x68k_scsiext_device::register_w),this),0x00ff00ff); } void x68k_scsiext_device::device_reset() diff --git a/src/devices/bus/z88/flash.cpp b/src/devices/bus/z88/flash.cpp index 0793f126c18..03b18d98f35 100644 --- a/src/devices/bus/z88/flash.cpp +++ b/src/devices/bus/z88/flash.cpp @@ -72,7 +72,7 @@ machine_config_constructor z88_1024k_flash_device::device_mconfig_additions() co UINT8* z88_1024k_flash_device::get_cart_base() { - return (UINT8*)m_flash->space().get_read_ptr(0); + return m_flash->base(); } /*------------------------------------------------- diff --git a/src/devices/cpu/8x300/8x300.cpp b/src/devices/cpu/8x300/8x300.cpp index a18f4d50c73..7096448f90f 100644 --- a/src/devices/cpu/8x300/8x300.cpp +++ b/src/devices/cpu/8x300/8x300.cpp @@ -9,8 +9,8 @@ * Written by Barry Rodewald */ -#include "debugger.h" #include "8x300.h" +#include "debugger.h" #define FETCHOP(a) (m_direct->read_word(a)) #define CYCLES(x) do { m_icount -= (x); } while (0) diff --git a/src/devices/cpu/8x300/8x300.h b/src/devices/cpu/8x300/8x300.h index dd236372e5d..c2eff97499b 100644 --- a/src/devices/cpu/8x300/8x300.h +++ b/src/devices/cpu/8x300/8x300.h @@ -10,6 +10,8 @@ #ifndef _8X300_H_ #define _8X300_H_ +#include "emu.h" + // Register enumeration enum { diff --git a/src/devices/cpu/adsp2100/2100ops.hxx b/src/devices/cpu/adsp2100/2100ops.hxx index 31cae1ae59b..c52767bd9cf 100644 --- a/src/devices/cpu/adsp2100/2100ops.hxx +++ b/src/devices/cpu/adsp2100/2100ops.hxx @@ -380,7 +380,11 @@ void adsp21xx_device::write_reg1(int regnum, INT32 val) break; case 3: - logerror("ADSP %04x: Writing to an invalid register!\n", m_ppc); + // Check for DMOVLAY instruction callback + if (regnum == 0xf && !m_dmovlay_cb.isnull()) + m_dmovlay_cb(val & 0x3fff); + else + logerror("ADSP %04x: Writing to an invalid register! RGP=01 RegCode=%1X Val=%04X\n", m_ppc, regnum, val); break; } } @@ -505,7 +509,7 @@ INT32 adsp21xx_device::read_reg3(int regnum) case 0x08: if (!m_sport_rx_cb.isnull()) return m_sport_rx_cb(0); else return 0; case 0x0a: if (!m_sport_rx_cb.isnull()) return m_sport_rx_cb(1); else return 0; case 0x0f: return pc_stack_pop_val(); - default: logerror("ADSP %04x: Reading from an invalid register!\n", m_ppc); return 0; + default: logerror("ADSP %04x: Reading from an invalid register! RGP=b11 RegCode=%1X\n", m_ppc, regnum); return 0; } } diff --git a/src/devices/cpu/adsp2100/adsp2100.cpp b/src/devices/cpu/adsp2100/adsp2100.cpp index 868303fde40..dd9bdb4209d 100644 --- a/src/devices/cpu/adsp2100/adsp2100.cpp +++ b/src/devices/cpu/adsp2100/adsp2100.cpp @@ -157,7 +157,8 @@ adsp21xx_device::adsp21xx_device(const machine_config &mconfig, device_type type (m_chip_type >= CHIP_TYPE_ADSP2101) ? 0x3f : 0x0f), m_sport_rx_cb(*this), m_sport_tx_cb(*this), - m_timer_fired_cb(*this) + m_timer_fired_cb(*this), + m_dmovlay_cb(*this) { // initialize remaining state memset(&m_core, 0, sizeof(m_core)); @@ -405,6 +406,7 @@ void adsp21xx_device::device_start() m_sport_rx_cb.resolve(); m_sport_tx_cb.resolve(); m_timer_fired_cb.resolve(); + m_dmovlay_cb.resolve(); // get our address spaces m_program = &space(AS_PROGRAM); diff --git a/src/devices/cpu/adsp2100/adsp2100.h b/src/devices/cpu/adsp2100/adsp2100.h index f2393f986d2..282a340e040 100644 --- a/src/devices/cpu/adsp2100/adsp2100.h +++ b/src/devices/cpu/adsp2100/adsp2100.h @@ -192,6 +192,9 @@ enum #define MCFG_ADSP21XX_TIMER_FIRED_CB(_devcb) \ devcb = &adsp21xx_device::set_timer_fired_callback(*device, DEVCB_##_devcb); +#define MCFG_ADSP21XX_DMOVLAY_CB(_devcb) \ + devcb = &adsp21xx_device::set_dmovlay_callback(*device, DEVCB_##_devcb); + //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -220,6 +223,7 @@ public: template static devcb_base &set_sport_rx_callback(device_t &device, _Object object) { return downcast(device).m_sport_rx_cb.set_callback(object); } template static devcb_base &set_sport_tx_callback(device_t &device, _Object object) { return downcast(device).m_sport_tx_cb.set_callback(object); } template static devcb_base &set_timer_fired_callback(device_t &device, _Object object) { return downcast(device).m_timer_fired_cb.set_callback(object); } + template static devcb_base &set_dmovlay_callback(device_t &device, _Object object) { return downcast(device).m_dmovlay_cb.set_callback(object); } // public interfaces void load_boot_data(UINT8 *srcdata, UINT32 *dstdata); @@ -459,6 +463,7 @@ protected: devcb_read32 m_sport_rx_cb; // callback for serial receive devcb_write32 m_sport_tx_cb; // callback for serial transmit devcb_write_line m_timer_fired_cb; // callback for timer fired + devcb_write_line m_dmovlay_cb; // callback for DMOVLAY instruction // debugging #if ADSP_TRACK_HOTSPOTS diff --git a/src/devices/cpu/alph8201/alph8201.cpp b/src/devices/cpu/alph8201/alph8201.cpp index dec4a650ab8..8fa4f51e762 100644 --- a/src/devices/cpu/alph8201/alph8201.cpp +++ b/src/devices/cpu/alph8201/alph8201.cpp @@ -274,7 +274,7 @@ void alpha8201_cpu_device::M_UNDEFINED() osd_printf_debug("alpha8201: PC = %03x, Unimplemented opcode = %02x\n", m_pc.w.l-1, M_RDMEM(m_pc.w.l-1)); #endif #if BREAK_ON_UNKNOWN_OPCODE - debugger_break(machine()); + machine().debug_break(); #endif } @@ -287,7 +287,7 @@ void alpha8201_cpu_device::M_UNDEFINED2() osd_printf_debug("alpha8201: PC = %03x, Unimplemented opcode = %02x,%02x\n", m_pc.w.l-2, op,imm); #endif #if BREAK_ON_UNKNOWN_OPCODE - debugger_break(machine()); + machine().debug_break(); #endif } diff --git a/src/devices/cpu/arm/arm.cpp b/src/devices/cpu/arm/arm.cpp index f9505fda6d8..d94534cf515 100644 --- a/src/devices/cpu/arm/arm.cpp +++ b/src/devices/cpu/arm/arm.cpp @@ -1390,7 +1390,7 @@ void arm_cpu_device::HandleCoProVL86C020( UINT32 insn ) 0x00<<0 <- Revision number, 0 */ SetRegister(rn, 0x41560300); - //debugger_break(machine()); + //machine().debug_break(); } else SetRegister(rn, m_coproRegister[crn]); @@ -1407,7 +1407,7 @@ void arm_cpu_device::HandleCoProVL86C020( UINT32 insn ) else { printf("%08x: Unimplemented VL86C020 copro instruction %08x %d %d\n", R15 & 0x3ffffff, insn,rn,crn); - debugger_break(machine()); + machine().debug_break(); } } diff --git a/src/devices/cpu/asap/asapdasm.cpp b/src/devices/cpu/asap/asapdasm.cpp index 676ba850228..fd204c68a94 100644 --- a/src/devices/cpu/asap/asapdasm.cpp +++ b/src/devices/cpu/asap/asapdasm.cpp @@ -90,7 +90,8 @@ CPU_DISASSEMBLE( asap ) else if (rsrc2_iszero) sprintf(buffer, "mov%s %s,%s", setcond[cond], reg[rsrc1], reg[rdst]); else - sprintf(buffer, "add%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; + sprintf(buffer, "add%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); + break; case 0x09: sprintf(buffer, "sub%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; case 0x0a: sprintf(buffer, "addc%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; case 0x0b: sprintf(buffer, "subc%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; @@ -103,7 +104,8 @@ CPU_DISASSEMBLE( asap ) else if (rsrc2_iszero) sprintf(buffer, "mov%s %s,%s", setcond[cond], reg[rsrc1], reg[rdst]); else - sprintf(buffer, "or%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; + sprintf(buffer, "or%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); + break; case 0x0f: sprintf(buffer, "orn%s %s,%s,%s", setcond[cond], reg[rsrc1], src2(op,0), reg[rdst]); break; case 0x10: sprintf(buffer, "ld%s %s[%s],%s", setcond[cond], reg[rsrc1], src2(op,2), reg[rdst]); break; case 0x11: sprintf(buffer, "ldh%s %s[%s],%s", setcond[cond], reg[rsrc1], src2(op,1), reg[rdst]); break; @@ -137,7 +139,7 @@ CPU_DISASSEMBLE( asap ) } else sprintf(buffer, "jmp%s %s[%s]", setcond[cond], reg[rsrc1], src2(op,2)); - break; + break; case 0x1f: sprintf(buffer, "trap $1f"); flags = DASMFLAG_STEP_OVER; break; } return 4 | flags | DASMFLAG_SUPPORTED; diff --git a/src/devices/cpu/avr8/avr8.cpp b/src/devices/cpu/avr8/avr8.cpp index 420c5ba86fa..2d2dd04824d 100644 --- a/src/devices/cpu/avr8/avr8.cpp +++ b/src/devices/cpu/avr8/avr8.cpp @@ -706,7 +706,7 @@ void avr8_device::set_lock_bits(const UINT8 byte) void avr8_device::unimplemented_opcode(UINT32 op) { -// debugger_break(machine()); +// machine().debug_break(); fatalerror("AVR8: unknown opcode (%08x) at %08x\n", op, m_shifted_pc); } @@ -2915,7 +2915,7 @@ READ8_MEMBER( avr8_device::regs_r ) default: printf("[%08X] AVR8: Unknown Register Read: 0x%03X\n", m_shifted_pc, offset); -// debugger_break(machine()); +// machine().debug_break(); return 0; } } diff --git a/src/devices/cpu/drcfe.cpp b/src/devices/cpu/drcfe.cpp index 104c774ac3e..91ca544be02 100644 --- a/src/devices/cpu/drcfe.cpp +++ b/src/devices/cpu/drcfe.cpp @@ -173,6 +173,7 @@ opcode_desc *drc_frontend::describe_one(offs_t curpc, const opcode_desc *prevdes // set the delay slot flag desc->flags = in_delay_slot ? OPFLAG_IN_DELAY_SLOT : 0; desc->userflags = 0; + desc->userdata0 = 0; desc->cycles = 0; memset(desc->regin, 0x00, sizeof(desc->regin)); memset(desc->regout, 0x00, sizeof(desc->regout)); diff --git a/src/devices/cpu/drcfe.h b/src/devices/cpu/drcfe.h index 59efb405a23..39d8184e5ff 100644 --- a/src/devices/cpu/drcfe.h +++ b/src/devices/cpu/drcfe.h @@ -114,6 +114,7 @@ struct opcode_desc UINT8 skipslots; // number of skip slots (for branches) UINT32 flags; // OPFLAG_* opcode flags UINT32 userflags; // core specific flags + UINT32 userdata0; // core specific data UINT32 cycles; // number of cycles needed to execute // register usage information diff --git a/src/devices/cpu/dsp32/dsp32ops.hxx b/src/devices/cpu/dsp32/dsp32ops.hxx index 09844f6ee4f..e89aa74fed7 100644 --- a/src/devices/cpu/dsp32/dsp32ops.hxx +++ b/src/devices/cpu/dsp32/dsp32ops.hxx @@ -358,7 +358,7 @@ inline void dsp32c_device::dau_set_val_flags(int aidx, double res) else if (absres > 3.40282e38) { m_VUflags = VFLAGBIT; -// debugger_break(Machine); +// machine().debug_break(); // fprintf(stderr, "Result = %g\n", absres); res = (res < 0) ? -3.40282e38 : 3.40282e38; } @@ -403,7 +403,7 @@ inline UINT32 dsp32c_device::double_to_dsp(double val) return 0x00000000; else if (exponent > 255) { -// debugger_break(Machine); +// machine().debug_break(); // fprintf(stderr, "Exponent = %d\n", exponent); return ((INT32)id.i[BYTE_XOR_BE(0)] >= 0) ? 0x7fffffff : 0x800000ff; } diff --git a/src/devices/cpu/g65816/g65816.cpp b/src/devices/cpu/g65816/g65816.cpp index 0d538e93616..a98a822849d 100644 --- a/src/devices/cpu/g65816/g65816.cpp +++ b/src/devices/cpu/g65816/g65816.cpp @@ -1116,18 +1116,18 @@ READ8_MEMBER( _5a22_device::rdmpyh_r ) void _5a22_device::set_5a22_map() { - space(AS_PROGRAM).install_write_handler(0x4202, 0x4202, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrmpya_w),this)); - space(AS_PROGRAM).install_write_handler(0x4203, 0x4203, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrmpyb_w),this)); - space(AS_PROGRAM).install_write_handler(0x4204, 0x4204, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrdivl_w),this)); - space(AS_PROGRAM).install_write_handler(0x4205, 0x4205, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrdivh_w),this)); - space(AS_PROGRAM).install_write_handler(0x4206, 0x4206, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::wrdvdd_w),this)); + space(AS_PROGRAM).install_write_handler(0x4202, 0x4202, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrmpya_w),this)); + space(AS_PROGRAM).install_write_handler(0x4203, 0x4203, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrmpyb_w),this)); + space(AS_PROGRAM).install_write_handler(0x4204, 0x4204, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrdivl_w),this)); + space(AS_PROGRAM).install_write_handler(0x4205, 0x4205, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrdivh_w),this)); + space(AS_PROGRAM).install_write_handler(0x4206, 0x4206, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::wrdvdd_w),this)); - space(AS_PROGRAM).install_write_handler(0x420d, 0x420d, 0, 0xbf0000, write8_delegate(FUNC(_5a22_device::memsel_w),this)); + space(AS_PROGRAM).install_write_handler(0x420d, 0x420d, 0, 0xbf0000, 0, write8_delegate(FUNC(_5a22_device::memsel_w),this)); - space(AS_PROGRAM).install_read_handler(0x4214, 0x4214, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rddivl_r),this)); - space(AS_PROGRAM).install_read_handler(0x4215, 0x4215, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rddivh_r),this)); - space(AS_PROGRAM).install_read_handler(0x4216, 0x4216, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rdmpyl_r),this)); - space(AS_PROGRAM).install_read_handler(0x4217, 0x4217, 0, 0xbf0000, read8_delegate(FUNC(_5a22_device::rdmpyh_r),this)); + space(AS_PROGRAM).install_read_handler(0x4214, 0x4214, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rddivl_r),this)); + space(AS_PROGRAM).install_read_handler(0x4215, 0x4215, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rddivh_r),this)); + space(AS_PROGRAM).install_read_handler(0x4216, 0x4216, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rdmpyl_r),this)); + space(AS_PROGRAM).install_read_handler(0x4217, 0x4217, 0, 0xbf0000, 0, read8_delegate(FUNC(_5a22_device::rdmpyh_r),this)); } diff --git a/src/devices/cpu/g65816/g65816cm.h b/src/devices/cpu/g65816/g65816cm.h index 649b2500653..e0afd6d1305 100644 --- a/src/devices/cpu/g65816/g65816cm.h +++ b/src/devices/cpu/g65816/g65816cm.h @@ -186,7 +186,7 @@ static inline int MAKE_INT_8(int A) {return (A & 0x80) ? A | ~0xff : A & 0xff;} #define CLK_W_S 2 #define CLK_W_SIY 5 -#define CLK(A) CLOCKS -= (m_cpu_type == CPU_TYPE_G65816 ? A : A*6) +#define CLK(A) CLOCKS -= A #define CLK_BUS(A) CLOCKS -= A #define USE_ALL_CLKS() CLOCKS = 0 diff --git a/src/devices/cpu/h8/h8make.py b/src/devices/cpu/h8/h8make.py index 2115bc01cbe..e5aee1dbb96 100644 --- a/src/devices/cpu/h8/h8make.py +++ b/src/devices/cpu/h8/h8make.py @@ -57,7 +57,7 @@ def save_full_one(f, t, name, source): print(line, file=f) substate += 1 elif has_eat(line): - print("\tif(icount) icount = bcount; inst_substate = %d; return;" % substate, file=f) + print("\tif(icount) { icount = bcount; } inst_substate = %d; return;" % substate, file=f) substate += 1 else: print(line, file=f) @@ -77,7 +77,7 @@ def save_partial_one(f, t, name, source): print(line, file=f) substate += 1 elif has_eat(line): - print("\tif(icount) icount = bcount; inst_substate = %d; return;" % substate, file=f) + print("\tif(icount) { icount = bcount; } inst_substate = %d; return;" % substate, file=f) print("case %d:;" % substate, file=f) substate += 1 else: diff --git a/src/devices/cpu/mb86235/mb86235.cpp b/src/devices/cpu/mb86235/mb86235.cpp index ef42221548e..2cd268f83ad 100644 --- a/src/devices/cpu/mb86235/mb86235.cpp +++ b/src/devices/cpu/mb86235/mb86235.cpp @@ -103,7 +103,7 @@ void mb86235_cpu_device::execute_set_input(int irqline, int state) mb86235_cpu_device::mb86235_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : cpu_device(mconfig, MB86235, "MB86235", tag, owner, clock, "mb86235", __FILE__) - , m_program_config("program", ENDIANNESS_LITTLE, 32, 32, -2) + , m_program_config("program", ENDIANNESS_LITTLE, 64, 32, -3) { } diff --git a/src/devices/cpu/mb86235/mb86235d.cpp b/src/devices/cpu/mb86235/mb86235d.cpp index e77da1a0cad..34771cd346e 100644 --- a/src/devices/cpu/mb86235/mb86235d.cpp +++ b/src/devices/cpu/mb86235/mb86235d.cpp @@ -1,144 +1,839 @@ // license:BSD-3-Clause -// copyright-holders:Angelo Salese, ElSemi +// copyright-holders:Angelo Salese, ElSemi, Ville Linde #include "emu.h" #include "debugger.h" #include "mb86235.h" -static const char *const alu_opcode_string[] = +static const char *regname[128] = { - "FADD", - "FADDZ", - "FSUB", - "FSUBZ", - - "FCMP", - "FABS", - "FABC", - "ALUNOP", - - "FEA", - "FES", - "FRCP", - "FRSQ", - - "FLOG", - "CIF", - "CFI", - "CFIB", - - "ADD", - "ADDZ", - "SUB", - "SUBZ", - - "CMP", - "ABS", - "ATR", - "ATRZ", - - "AND", - "OR", - "XOR", - "NOT", - - "LSR", - "LSL", - "ASR", - "ASL" + "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", + "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", + "EB", "EBU", "EBL", "EO", "SP", "ST", "MOD", "LRPC", + "AR0", "AR1", "AR2", "AR3", "AR4", "AR5", "AR6", "AR7", + "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7", + "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", + "PR", "FI", "FO0", "FO1", "PDR", "DDR", "PRP", "PWP", + "???", "???", "???", "???", "???", "???", "???", "???" }; -static const char *const ctrl_opcode_string[] = +static const char *db_mnemonic[64] = { - "NOP", - "REP", - "SETL", - "CLRF", - "PUSH", - "POP", - "???", - "???", - "SETM", - "SETMCBSA", - "SETMCBSB", - "SETMRF", - "SETMRDY", - "SETMWAIT", - "???", - "???", - "DBcc", /* TODO */ - "DBNcc", /* TODO */ - "DJMP", - "DBLP", - "DBBC", - "DBBS", - "???", - "???", - "DCcc", /* TODO */ - "DCNcc", /* TODO */ - "DCALL", - "DRET", - "???", - "???", - "???", - "???" + "DBMN", "DBMZ", "DBMV", "DBMU", "DBZD", "DBNR", "DBIL", "DBZC", + "DBAN", "DBAZ", "DBAV", "DBAU", "DBMD", "DBAD", "???", "???", + "DBF0", "DBF1", "DBF2", "???", "DBIFF", "DBIFE", "DBOFF", "DBOFE", + "DBIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" }; -static unsigned dasm_mb86235(char *buffer, UINT32 opcode, UINT32 opcode2) +static const char *dbn_mnemonic[64] = { + "DBNMN", "DBNMZ", "DBNMV", "DBNMU", "DBNZD", "DBNNR", "DBNIL", "DBNZC", + "DBNAN", "DBNAZ", "DBNAV", "DBNAU", "DBNMD", "DBNAD", "???", "???", + "DBNF0", "DBNF1", "DBNF2", "???", "DBNIFF", "DBNIFE", "DBNOFF", "DBNOFE", + "DBNIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" +}; + +static const char *dc_mnemonic[64] = +{ + "DCMN", "DCMZ", "DCMV", "DCMU", "DCZD", "DCNR", "DCIL", "DCZC", + "DCAN", "DCAZ", "DCAV", "DCAU", "DCMD", "DCAD", "???", "???", + "DCF0", "DCF1", "DCF2", "???", "DCIFF", "DCIFE", "DCOFF", "DCOFE", + "DCIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" +}; + +static const char *dcn_mnemonic[64] = +{ + "DCNMN", "DCNMZ", "DCNMV", "DCNMU", "DCNZD", "DCNNR", "DCNIL", "DCNZC", + "DCNAN", "DCNAZ", "DCNAV", "DCNAU", "DCNMD", "DCNAD", "???", "???", + "DCNF0", "DCNF1", "DCNF2", "???", "DCNIFF", "DCNIFE", "DCNOFF", "DCNOFE", + "DCNIF", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???", + "???", "???", "???", "???", "???", "???", "???", "???" +}; + +static const char *mi1_field[16] = +{ "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7" }; + +static const char *mi2_field[32] = +{ "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7", + "PR", "PR++", "PR--", "PR#0", "???", "???", "???", "???", "-1.0E+0", "0.0E+0", "0.5E+0", "1.0E+0", "1.5E+0", "2.0E+0", "3.0E+0", "5.0E+0" }; + +static const char *mo_field[32] = +{ "MA0", "MA1", "MA2", "MA3", "MA4", "MA5", "MA6", "MA7", "MB0", "MB1", "MB2", "MB3", "MB4", "MB5", "MB6", "MB7", + "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7" }; + +static const char *ai1_field[16] = +{ "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7" }; + +static const char *ai2_field[32] = +{ "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", + "PR", "PR++", "PR--", "PR#0", "???", "???", "???", "???", "0", "1", "-1", "???", "???", "???", "???", "???" }; + +static const char *ai2f_field[32] = +{ "AA0", "AA1", "AA2", "AA3", "AA4", "AA5", "AA6", "AA7", "AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", + "PR", "PR++", "PR--", "PR#0", "???", "???", "???", "???", "-1.0E+0", "0.0E+0", "0.5E+0", "1.0E+0", "1.5E+0", "2.0E+0", "3.0E+0", "5.0E+0" }; + +static char* get_ea(int md, int arx, int ary, int disp) +{ + static char buffer[40]; char *p = buffer; - UINT32 grp = ( opcode2 >> 29 ) & 0x7; - UINT32 aluop = (opcode2 >> (24)) & 0x1f; - switch(grp) + switch (md) { - case 0: // ALU2 + case 0x0: p += sprintf(p, "@AR%d", arx); break; + case 0x1: p += sprintf(p, "@AR%d++", arx); break; + case 0x2: p += sprintf(p, "@AR%d--", arx); break; + case 0x3: p += sprintf(p, "@AR%d++%04X", arx, disp); break; + case 0x4: p += sprintf(p, "@AR%d+AR%d", arx, ary); break; + case 0x5: p += sprintf(p, "@AR%d+AR%d++", arx, ary); break; + case 0x6: p += sprintf(p, "@AR%d+AR%d--", arx, ary); break; + case 0x7: p += sprintf(p, "@AR%d+AR%d++%04X", arx, ary, disp); break; + case 0x8: p += sprintf(p, "@AR%d+AR%dU", arx, ary); break; + case 0x9: p += sprintf(p, "@AR%d+AR%dL", arx, ary); break; + case 0xa: p += sprintf(p, "@AR%d+%04X", arx, disp); break; + case 0xb: p += sprintf(p, "@AR%d+AR%d+%04X", arx, ary, disp); break; + case 0xc: p += sprintf(p, "%04X", disp); break; + case 0xd: p += sprintf(p, "@AR%d+[AR%d++]", arx, ary); break; + case 0xe: p += sprintf(p, "@AR%d+[AR%d--]", arx, ary); break; + case 0xf: p += sprintf(p, "@AR%d+[AR%d++%04X]", arx, ary, disp); break; + } - p += sprintf(p,"%s TRANS2_1",alu_opcode_string[aluop]); - break; - case 1: // ALU2 - p += sprintf(p,"%s TRANS1_1",alu_opcode_string[aluop]); - break; - case 2: // ALU2 + CTRL + return buffer; +} + +static char* dasm_alu_mul(UINT64 opcode, bool twoop) +{ + static char buffer[80]; + char *p = buffer; + + int ma = (opcode & ((UINT64)(1) << 41)) ? 1 : 0; + int o = (opcode >> 42) & 0x1f; + int i2 = (opcode >> 47) & 0x1f; + int i1 = (opcode >> 52) & 0xf; + + if (twoop || ma) + { + // ALU op + int aluop = (opcode >> 56) & 0x1f; + switch (aluop) { - UINT32 ctrlop = (opcode >> (22)) & 0x1f; - //UINT32 ef1 = (opcode >> 16) & 0x3f; - //UINT32 ef2 = (opcode >> 0) & 0xffff; - - p += sprintf(p,"%s %s",alu_opcode_string[aluop],ctrl_opcode_string[ctrlop]); + case 0x00: p += sprintf(p, "FADD %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x01: p += sprintf(p, "FADDZ %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x02: p += sprintf(p, "FSUB %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x03: p += sprintf(p, "FSUBZ %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x04: p += sprintf(p, "FCMP %s, %s", ai1_field[i1], ai2f_field[i2]); + break; + case 0x05: p += sprintf(p, "FABS %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x06: p += sprintf(p, "FABC %s, %s, %s", ai1_field[i1], ai2f_field[i2], mo_field[o]); + break; + case 0x07: p += sprintf(p, "NOP"); + break; + case 0x08: p += sprintf(p, "FEA %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x09: p += sprintf(p, "FES %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x0a: p += sprintf(p, "FRCP %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0b: p += sprintf(p, "FRSQ %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0c: p += sprintf(p, "FLOG %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0d: p += sprintf(p, "CIF %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0e: p += sprintf(p, "CFI %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x0f: p += sprintf(p, "CFIB %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x10: p += sprintf(p, "ADD %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x11: p += sprintf(p, "ADDZ %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x12: p += sprintf(p, "SUB %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x13: p += sprintf(p, "SUBZ %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x14: p += sprintf(p, "CMP %s, %s", ai1_field[i1], ai2_field[i2]); + break; + case 0x15: p += sprintf(p, "ABS %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x16: p += sprintf(p, "ATR %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x17: p += sprintf(p, "ATRZ %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x18: p += sprintf(p, "AND %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x19: p += sprintf(p, "OR %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x1a: p += sprintf(p, "XOR %s, %s, %s", ai1_field[i1], ai2_field[i2], mo_field[o]); + break; + case 0x1b: p += sprintf(p, "NOT %s, %s", ai1_field[i1], mo_field[o]); + break; + case 0x1c: p += sprintf(p, "LSR %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x1d: p += sprintf(p, "LSL %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x1e: p += sprintf(p, "ASR %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; + case 0x1f: p += sprintf(p, "ASL %s, #%02X, %s", ai1_field[i1], i2, mo_field[o]); + break; } - break; - case 4: // ALU1 - p += sprintf(p,"%s TRANS2_2",alu_opcode_string[aluop]); - break; - case 5: // ALU1 - p += sprintf(p,"%s TRANS1_2",alu_opcode_string[aluop]); - break; - case 6: // ALU1 - { - UINT32 ctrlop = (opcode >> (22)) & 0x1f; - //UINT32 ef1 = (opcode >> 16) & 0x3f; - //UINT32 ef2 = (opcode >> 0) & 0xffff; + } + + // multiplication + if (twoop) + { + int mi2 = (opcode >> 32) & 0x1f; + int mi1 = (opcode >> 37) & 0xf; + int mo = (opcode >> 27) & 0x1f; + if (opcode & ((UINT64)(1) << 41)) + p += sprintf(p, " : FMUL %s, %s, %s", mi1_field[mi1], mi2_field[mi2], mo_field[mo]); + else + p += sprintf(p, " : MUL %s, %s, %s", mi1_field[mi1], mi2_field[mi2], mo_field[mo]); + } + else + { + if (ma == 0) + { + if (opcode & ((UINT64)(1) << 56)) + p += sprintf(p, "FMUL %s, %s, %s", mi1_field[i1], mi2_field[i2], mo_field[o]); + else + p += sprintf(p, "MUL %s, %s, %s", mi1_field[i1], mi2_field[i2], mo_field[o]); + } + } + + return buffer; +} + +static char* dasm_control(UINT32 pc, UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int ef1 = (opcode >> 16) & 0x3f; + int ef2 = opcode & 0xffff; + + int cop = (opcode >> 22) & 0x1f; + + int rel12 = (opcode & 0x800) ? (0xfffff000 | (opcode & 0xfff)) : (opcode & 0xfff); + + + switch (cop) + { + case 0x00: p += sprintf(p, "NOP"); + break; + case 0x01: + if (ef1 == 0) + p += sprintf(p, "REP #%04X", ef2); + else + p += sprintf(p, "REP AR%d", (ef2 >> 12) & 7); + break; + case 0x02: + if (ef1 == 0) + p += sprintf(p, "SETL #%04X", ef2); + else + p += sprintf(p, "SETL AR%d", (ef2 >> 12) & 7); + break; + case 0x03: + if (ef1 == 1) + p += sprintf(p, "CLRFI"); + else if (ef1 == 2) + p += sprintf(p, "CLRFO"); + else if (ef1 == 3) + p += sprintf(p, "CLRF"); + break; + case 0x04: + p += sprintf(p, "PUSH %s", regname[(ef2 >> 6) & 0x3f]); + break; + case 0x05: + p += sprintf(p, "POP %s", regname[(ef2 >> 6) & 0x3f]); + break; + case 0x08: + p += sprintf(p, "SETM #%04X", ef2); + break; + case 0x09: + p += sprintf(p, "SETM #%01X, CBSA", (ef2 >> 12) & 7); + break; + case 0x0a: + p += sprintf(p, "SETM #%01X, CBSB", (ef2 >> 8) & 7); + break; + case 0x0b: + p += sprintf(p, "SETM #%d, RF", (ef2 >> 7) & 1); + break; + case 0x0c: + p += sprintf(p, "SETM #%d, RDY", (ef2 >> 4) & 1); + break; + case 0x0d: + p += sprintf(p, "SETM #%01X, WAIT", ef2 & 7); + break; + case 0x13: + p += sprintf(p, "DBLP %04X", pc + rel12); + break; + case 0x14: + p += sprintf(p, "DBBC AR%d:%d, %04X", (UINT32)((opcode >> 13) & 7), (UINT32)((opcode >> 16) & 0xf), pc + rel12); + break; + case 0x15: + p += sprintf(p, "DBBS AR%d:%d, %04X", (UINT32)((opcode >> 13) & 7), (UINT32)((opcode >> 16) & 0xf), pc + rel12); + break; + case 0x1b: + p += sprintf(p, "DRET"); + break; + + case 0x10: // DBcc + case 0x11: // DBNcc + case 0x18: // DCcc + case 0x19: // DCNcc + case 0x1a: // DCALL + case 0x12: // DJMP + { + if (cop == 0x10) + p += sprintf(p, "%s ", db_mnemonic[ef1]); + else if (cop == 0x11) + p += sprintf(p, "%s ", dbn_mnemonic[ef1]); + else if (cop == 0x18) + p += sprintf(p, "%s ", dc_mnemonic[ef1]); + else if (cop == 0x19) + p += sprintf(p, "%s ", dcn_mnemonic[ef1]); + else if (cop == 0x12) + p += sprintf(p, "DJMP "); + else if (cop == 0x1a) + p += sprintf(p, "DCALL "); + + switch ((opcode >> 12) & 0xf) + { + case 0x0: p += sprintf(p, "%03X", ef2 & 0xfff); break; + case 0x1: p += sprintf(p, "%04X", pc + rel12); break; + case 0x2: p += sprintf(p, "%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x3: p += sprintf(p, "+%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x4: p += sprintf(p, "%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x5: p += sprintf(p, "+%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x6: p += sprintf(p, "%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x7: p += sprintf(p, "+%s", regname[(ef2 >> 6) & 0x3f]); break; + case 0x8: p += sprintf(p, "A(%03X)", ef2 & 0x3ff); break; + case 0x9: p += sprintf(p, "+A(%03X)", ef2 & 0x3ff); break; + case 0xa: p += sprintf(p, "B(%03X)", ef2 & 0x3ff); break; + case 0xb: p += sprintf(p, "+B(%03X)", ef2 & 0x3ff); break; + case 0xc: p += sprintf(p, "A(%s)", regname[(ef2 >> 6) & 0x3f]); break; + case 0xd: p += sprintf(p, "+A(%s)", regname[(ef2 >> 6) & 0x3f]); break; + case 0xe: p += sprintf(p, "B(%s)", regname[(ef2 >> 6) & 0x3f]); break; + case 0xf: p += sprintf(p, "+B(%s)", regname[(ef2 >> 6) & 0x3f]); break; + } - p += sprintf(p,"%s %s",alu_opcode_string[aluop],ctrl_opcode_string[ctrlop]); break; } - case 7: - p += sprintf(p,"TRANS1_3"); + } + + return buffer; +} + +static char* dasm_double_xfer1(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int sd = (opcode >> 25) & 3; + + switch (sd) + { + case 0: + { + int as = (opcode >> 20) & 0x1f; + int ad = (opcode >> 15) & 0x1f; + int bs = (opcode >> 10) & 0x1f; + int bd = (opcode >> 5) & 0x1f; + p += sprintf(p, "MVD1 %s, %s, %s, %s", regname[as], regname[ad], regname[bs], regname[bd]); break; - default: - p += sprintf(p,"UNK ???"); + } + + case 1: + { + int areg = (opcode >> 20) & 0x1f; + int aarx = (opcode >> 17) & 7; + int aary = (opcode >> 14) & 7; + int breg = (opcode >> 10) & 0xf; + int barx = (opcode >> 7) & 7; + int bary = (opcode >> 4) & 7; + int md = opcode & 0xf; + + p += sprintf(p, "MVD1 "); + + switch (md) + { + case 0x0: p += sprintf(p, "%s, A(@AR%d), %s, B(@AR%d)", regname[areg], aarx, regname[breg], barx); break; + case 0x1: p += sprintf(p, "%s, A(@AR%d++), %s, B(@AR%d++)", regname[areg], aarx, regname[breg], barx); break; + case 0x2: p += sprintf(p, "%s, A(@AR%d--), %s, B(@AR%d--)", regname[areg], aarx, regname[breg], barx); break; + case 0x4: p += sprintf(p, "%s, A(@AR%d+AR%d), %s, B(@AR%d+AR%d)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x5: p += sprintf(p, "%s, A(@AR%d+AR%d++), %s, B(@AR%d+AR%d++)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x6: p += sprintf(p, "%s, A(@AR%d+AR%d--), %s, B(@AR%d+AR%d--)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x8: p += sprintf(p, "%s, A(@AR%d+AR%dU), %s, B(@AR%d+AR%dL)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0x9: p += sprintf(p, "%s, A(@AR%d+AR%dL), %s, B(@AR%d+AR%dU)", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0xd: p += sprintf(p, "%s, A(@AR%d+[AR%d++]), %s, B(@AR%d+[AR%d++])", regname[areg], aarx, aary, regname[breg], barx, bary); break; + case 0xe: p += sprintf(p, "%s, A(@AR%d+[AR%d--]), %s, B(@AR%d+[AR%d--])", regname[areg], aarx, aary, regname[breg], barx, bary); break; + default: p += sprintf(p, "???"); break; + } + break; + } + + case 2: + { + int areg = (opcode >> 20) & 0x1f; + int aarx = (opcode >> 17) & 7; + int aary = (opcode >> 14) & 7; + int breg = (opcode >> 10) & 0xf; + int barx = (opcode >> 7) & 7; + int bary = (opcode >> 4) & 7; + int md = opcode & 0xf; + + p += sprintf(p, "MVD1 "); + + switch (md) + { + case 0x0: p += sprintf(p, "A(@AR%d), %s, B(@AR%d), %s", aarx, regname[areg], barx, regname[breg]); break; + case 0x1: p += sprintf(p, "A(@AR%d++), %s, B(@AR%d++), %s", aarx, regname[areg], barx, regname[breg]); break; + case 0x2: p += sprintf(p, "A(@AR%d--), %s, B(@AR%d--), %s", aarx, regname[areg], barx, regname[breg]); break; + case 0x4: p += sprintf(p, "A(@AR%d+AR%d), %s, B(@AR%d+AR%d), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x5: p += sprintf(p, "A(@AR%d+AR%d++), %s, B(@AR%d+AR%d++), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x6: p += sprintf(p, "A(@AR%d+AR%d--), %s, B(@AR%d+AR%d--), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x8: p += sprintf(p, "A(@AR%d+AR%dU), %s, B(@AR%d+AR%dL), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0x9: p += sprintf(p, "A(@AR%d+AR%dL), %s, B(@AR%d+AR%dU), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0xd: p += sprintf(p, "A(@AR%d+[AR%d++]), %s, B(@AR%d+[AR%d++]), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + case 0xe: p += sprintf(p, "A(@AR%d+[AR%d--]), %s, B(@AR%d+[AR%d--]), %s", aarx, aary, regname[areg], barx, bary, regname[breg]); break; + default: p += sprintf(p, "???"); break; + } + break; + } + + case 3: + p += sprintf(p, "???"); break; } - return (2 | DASMFLAG_SUPPORTED); + return buffer; } +static char* dasm_xfer1(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int dr = (opcode >> 12) & 0x7f; + int sr = (opcode >> 19) & 0x7f; + int md = opcode & 0xf; + int ary = (opcode >> 4) & 7; + int disp5 = (opcode >> 7) & 0x1f; + int trm = (opcode >> 26) & 1; + int dir = (opcode >> 25) & 1; + + if (trm == 0) + { + if (sr == 0x58) + { + p += sprintf(p, "MOV1 #%03X, %s", (UINT32)(opcode & 0xfff), regname[dr]); + } + else + { + p += sprintf(p, "MOV1 "); + + if ((sr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[sr]); + } + else + { + if (sr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, sr & 7, ary, disp5)); + } + + p += sprintf(p, ", "); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp5)); + } + } + } + else + { + if (dir == 0) + { + p += sprintf(p, "MOV1 "); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s, ", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp5)); + } + + p += sprintf(p, "E(@EB+EO++%02X)", sr); + } + else + { + p += sprintf(p, "MOV1 E(@EB+EO++%02X), ", sr); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp5)); + } + } + } + + return buffer; +} + +static char* double_xfer2_field(int sd, UINT32 field) +{ + static char buffer[40]; + char *p = buffer; + + switch (sd) + { + case 0: + { + int s = (field >> 13) & 0x1f; + int d = (field >> 8) & 0x1f; + p += sprintf(p, "%s, %s", regname[s], regname[d]); + break; + } + + case 1: + { + int reg = (field >> 13) & 0x1f; + int arx = (field >> 10) & 7; + int ary = (field >> 7) & 7; + //int disp3 = (field >> 4) & 7; + int md = field & 0xf; + + switch (md) + { + case 0x0: p += sprintf(p, "%s, A(@AR%d)", regname[reg], arx); break; + case 0x1: p += sprintf(p, "%s, A(@AR%d++)", regname[reg], arx); break; + case 0x2: p += sprintf(p, "%s, A(@AR%d--)", regname[reg], arx); break; + case 0x4: p += sprintf(p, "%s, A(@AR%d+AR%d))", regname[reg], arx, ary); break; + case 0x5: p += sprintf(p, "%s, A(@AR%d+AR%d++)", regname[reg], arx, ary); break; + case 0x6: p += sprintf(p, "%s, A(@AR%d+AR%d--)", regname[reg], arx, ary); break; + case 0x8: p += sprintf(p, "%s, A(@AR%d+AR%dU)", regname[reg], arx, ary); break; + case 0x9: p += sprintf(p, "%s, A(@AR%d+AR%dL)", regname[reg], arx, ary); break; + case 0xd: p += sprintf(p, "%s, A(@AR%d+[AR%d++])", regname[reg], arx, ary); break; + case 0xe: p += sprintf(p, "%s, A(@AR%d+[AR%d--]", regname[reg], arx, ary); break; + default: p += sprintf(p, "???"); break; + } + break; + } + + case 2: + { + int reg = (field >> 13) & 0x1f; + int arx = (field >> 10) & 7; + int ary = (field >> 7) & 7; + //int disp3 = (field >> 4) & 7; + int md = field & 0xf; + + switch (md) + { + case 0x0: p += sprintf(p, "A(@AR%d), %s", arx, regname[reg]); break; + case 0x1: p += sprintf(p, "A(@AR%d++), %s", arx, regname[reg]); break; + case 0x2: p += sprintf(p, "A(@AR%d--), %s", arx, regname[reg]); break; + case 0x4: p += sprintf(p, "A(@AR%d+AR%d), %s", arx, ary, regname[reg]); break; + case 0x5: p += sprintf(p, "A(@AR%d+AR%d++), %s", arx, ary, regname[reg]); break; + case 0x6: p += sprintf(p, "A(@AR%d+AR%d--), %s", arx, ary, regname[reg]); break; + case 0x8: p += sprintf(p, "A(@AR%d+AR%dU), %s", arx, ary, regname[reg]); break; + case 0x9: p += sprintf(p, "A(@AR%d+AR%dL), %s", arx, ary, regname[reg]); break; + case 0xd: p += sprintf(p, "A(@AR%d+[AR%d++]), %s", arx, ary, regname[reg]); break; + case 0xe: p += sprintf(p, "A(@AR%d+[AR%d--]), %s", arx, ary, regname[reg]); break; + default: p += sprintf(p, "???"); break; + } + break; + } + + case 3: + p += sprintf(p, "???"); + break; + } + + return buffer; +} + +static char* dasm_double_xfer2(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int asd = (opcode >> 38) & 3; + int bsd = (opcode >> 18) & 3; + + if (asd == 3) + { + int barx = (opcode >> 10) & 7; + int bary = (opcode >> 7) & 7; + int disp3 = (opcode >> 4) & 7; + int bmd = opcode & 0xf; + int arx = (opcode >> 30) & 7; + + p += sprintf(p, "MOVI "); + + switch (bmd) + { + case 0x0: p += sprintf(p, "B(@BAR%d)", barx); break; + case 0x1: p += sprintf(p, "B(@BAR%d++)", barx); break; + case 0x2: p += sprintf(p, "B(@BAR%d--)", barx); break; + case 0x3: p += sprintf(p, "B(@BAR%d++%02X)", barx, disp3); break; + case 0x4: p += sprintf(p, "B(@BAR%d+BAR%d)", barx, bary); break; + case 0x5: p += sprintf(p, "B(@BAR%d+BAR%d++)", barx, bary); break; + case 0x6: p += sprintf(p, "B(@BAR%d+BAR%d--)", barx, bary); break; + case 0x7: p += sprintf(p, "B(@BAR%d+BAR%d++%02X)", barx, bary, disp3); break; + case 0x8: p += sprintf(p, "B(@BAR%d+BAR%dU)", barx, bary); break; + case 0x9: p += sprintf(p, "B(@BAR%d+BAR%dL)", barx, bary); break; + case 0xa: p += sprintf(p, "B(@BAR%d+%02X)", barx, disp3); break; + case 0xb: p += sprintf(p, "B(@BAR%d+BAR%d+%02X)", barx, bary, disp3); break; + case 0xc: p += sprintf(p, "???"); break; + case 0xd: p += sprintf(p, "B(@BAR%d+[BAR%d++])", barx, bary); break; + case 0xe: p += sprintf(p, "B(@BAR%d+[BAR%d--])", barx, bary); break; + case 0xf: p += sprintf(p, "B(@BAR%d+[BAR%d++%02X])", barx, bary, disp3); break; + } + + p += sprintf(p, ", I(@AR%d++)", arx); + } + else + { + p += sprintf(p, "MVD2 %s, %s", double_xfer2_field(asd, (opcode >> 20) & 0x3ffff), double_xfer2_field(bsd, opcode & 0x3ffff)); + } + + return buffer; +} + +static char* dasm_xfer2(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + int op = (opcode >> 39) & 3; + int trm = (opcode >> 38) & 1; + int dir = (opcode >> 37) & 1; + int sr = (opcode >> 31) & 0x7f; + int dr = (opcode >> 24) & 0x7f; + int ary = (opcode >> 4) & 7; + int md = opcode & 0xf; + int disp14 = (opcode >> 7) & 0x3fff; + + if (op == 0) + { + if (trm == 0) + { + if (sr == 0x58) + { + p += sprintf(p, "MOV2 #%06X, %s", (UINT32)(opcode & 0xffffff), regname[dr]); + } + else + { + p += sprintf(p, "MOV2 "); + + if ((sr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[sr]); + } + else + { + if (sr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, sr & 7, ary, disp14)); + } + + p += sprintf(p, ", "); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp14)); + } + } + } + else + { + if (dir == 0) + { + p += sprintf(p, "MOV2 %s, E(@EB+EO++%02X)", regname[dr], sr); + } + else + { + p += sprintf(p, "MOV2 E(@EB+EO++%02X), %s", sr, regname[dr]); + } + } + } + else if (op == 2) + { + if (trm == 0) + { + if ((sr & 0x40) == 0) + { + p += sprintf(p, "MOV4 %s, ICDTR%d", regname[sr], dr & 7); + } + else + { + if (sr == 0x58) + { + p += sprintf(p, "MOV4 #%06X, ICDTR%d", (UINT32)(opcode & 0xffffff), dr & 7); + } + else + { + p += sprintf(p, "MOV4 "); + + if (sr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s), ICDTR%d", get_ea(md, sr & 7, ary, disp14), dr & 7); + } + } + } + else + { + if (dir == 0) + { + p += sprintf(p, "MOV4 ICDTR%d, E(@EB+EO++%02X)", dr & 7, sr); + } + else + { + p += sprintf(p, "MOV4 E(@EB+EO++%02X), ICDTR%d", sr, dr & 7); + } + } + } + + return buffer; +} + +static char* dasm_xfer3(UINT64 opcode) +{ + static char buffer[80]; + char *p = buffer; + + UINT32 imm = (UINT32)(opcode >> 27); + int dr = (opcode >> 19) & 0x7f; + int disp = (opcode >> 7) & 0xfff; + int ary = (opcode >> 4) & 7; + int md = opcode & 0xf; + + p += sprintf(p, "MOV3 #%08X, ", imm); + + if ((dr & 0x40) == 0) + { + p += sprintf(p, "%s", regname[dr]); + } + else + { + if (dr & 0x20) + p += sprintf(p, "B"); + else + p += sprintf(p, "A"); + + p += sprintf(p, "(%s)", get_ea(md, dr & 7, ary, disp)); + } + + return buffer; +} + +static unsigned dasm_mb86235(char *buffer, UINT32 pc, UINT64 opcode) +{ + char *p = buffer; + + p[0] = 0; + + switch ((opcode >> 61) & 7) + { + case 0: // ALU / MUL / double transfer (type 1) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, true), dasm_double_xfer1(opcode)); + break; + case 1: // ALU / MYL / transfer (type 1) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, true), dasm_xfer1(opcode)); + break; + case 2: // ALU / MUL / control + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, true), dasm_control(pc, opcode)); + break; + case 4: // ALU or MUL / double transfer (type 2) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, false), dasm_double_xfer2(opcode)); + break; + case 5: // ALU or MUL / transfer (type 2) + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, false), dasm_xfer2(opcode)); + break; + case 6: // ALU or MUL / control + p += sprintf(p, "%s : %s", dasm_alu_mul(opcode, false), dasm_control(pc, opcode)); + break; + case 7: // transfer (type 3) + p += sprintf(p, "%s", dasm_xfer3(opcode)); + break; + + default: + p += sprintf(p, "???"); + break; + } + + return (1 | DASMFLAG_SUPPORTED); +} + + + CPU_DISASSEMBLE( mb86235 ) { - UINT32 op = *(UINT32 *)oprom; - UINT32 op2 = *(UINT32 *)(oprom + 4); - op = LITTLE_ENDIANIZE_INT32(op); - op2 = LITTLE_ENDIANIZE_INT32(op2); + UINT64 op = *(UINT64*)oprom; + op = LITTLE_ENDIANIZE_INT64(op); - return dasm_mb86235(buffer, op, op2); + return dasm_mb86235(buffer, pc, op); } diff --git a/src/devices/cpu/mcs48/mcs48dsm.cpp b/src/devices/cpu/mcs48/mcs48dsm.cpp index 9e2a080430c..dd63846ab57 100644 --- a/src/devices/cpu/mcs48/mcs48dsm.cpp +++ b/src/devices/cpu/mcs48/mcs48dsm.cpp @@ -24,7 +24,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x02: if (!upi41) sprintf(buffer, "out bus,a"); else - sprintf(buffer, "out dbb,a"); break; + sprintf(buffer, "out dbb,a"); + break; case 0x03: sprintf(buffer, "add a,#$%02X", *opram++); break; case 0x04: sprintf(buffer, "jmp $0%02X", *opram++); break; case 0x05: sprintf(buffer, "en i"); break; @@ -32,7 +33,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x08: if (!upi41) sprintf(buffer, "in a,bus"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x09: sprintf(buffer, "in a,p1"); break; case 0x0a: sprintf(buffer, "in a,p2"); break; case 0x0c: sprintf(buffer, "movd a,p4"); break; @@ -60,7 +62,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x22: if (!upi41) sprintf(buffer, "illegal"); else - sprintf(buffer, "in a,dbb"); break; + sprintf(buffer, "in a,dbb"); + break; case 0x23: sprintf(buffer, "mov a,#$%02X", *opram++); break; case 0x24: sprintf(buffer, "jmp $1%02X", *opram++); break; case 0x25: sprintf(buffer, "en tcnti"); break; @@ -140,7 +143,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x75: if (!upi41) sprintf(buffer, "ent0 clk"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x76: sprintf(buffer, "jf1 $%03X", (pc & 0xf00) | *opram++); break; case 0x77: sprintf(buffer, "rr a"); break; case 0x78: sprintf(buffer, "addc a,r0"); break; @@ -154,22 +158,26 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x80: if (!upi41) sprintf(buffer, "movx a,@r0"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x81: if (!upi41) sprintf(buffer, "movx a,@r1"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x83: sprintf(buffer, "ret"); flags = DASMFLAG_STEP_OUT; break; case 0x84: sprintf(buffer, "jmp $4%02X", *opram++); break; case 0x85: sprintf(buffer, "clr f0"); break; case 0x86: if (!upi41) sprintf(buffer, "jni $%03X", (pc & 0xf00) | *opram++); else - sprintf(buffer, "jobf $%03X", (pc & 0xf00) | *opram++); break; + sprintf(buffer, "jobf $%03X", (pc & 0xf00) | *opram++); + break; case 0x88: if (!upi41) sprintf(buffer, "orl bus,#$%02X", *opram++); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x89: sprintf(buffer, "orl p1,#$%02X", *opram++); break; case 0x8a: sprintf(buffer, "orl p2,#$%02X", *opram++); break; case 0x8c: sprintf(buffer, "orld p4,a"); break; @@ -179,11 +187,13 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x90: if (!upi41) sprintf(buffer, "movx @r0,a"); else - sprintf(buffer, "mov sts,a"); break; + sprintf(buffer, "mov sts,a"); + break; case 0x91: if (!upi41) sprintf(buffer, "movx @r1,a"); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x92: sprintf(buffer, "jb4 $%03X", (pc & 0xf00) | *opram++); break; case 0x93: sprintf(buffer, "retr"); flags = DASMFLAG_STEP_OUT; break; case 0x94: sprintf(buffer, "call $4%02X", *opram++); flags = DASMFLAG_STEP_OVER; break; @@ -193,7 +203,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0x98: if (!upi41) sprintf(buffer, "anl bus,#$%02X", *opram++); else - sprintf(buffer, "illegal"); break; + sprintf(buffer, "illegal"); + break; case 0x99: sprintf(buffer, "anl p1,#$%02X", *opram++); break; case 0x9a: sprintf(buffer, "anl p2,#$%02X", *opram++); break; case 0x9c: sprintf(buffer, "anld p4,a"); break; @@ -250,7 +261,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0xd6: if (!upi41) sprintf(buffer, "illegal"); else - sprintf(buffer, "jnibf $%03X", (pc & 0xf00) | *opram++); break; + sprintf(buffer, "jnibf $%03X", (pc & 0xf00) | *opram++); + break; case 0xd7: sprintf(buffer, "mov psw,a"); break; case 0xd8: sprintf(buffer, "xrl a,r0"); break; case 0xd9: sprintf(buffer, "xrl a,r1"); break; @@ -265,7 +277,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0xe5: if (!upi41) sprintf(buffer, "sel mb0"); else - sprintf(buffer, "en dma"); break; + sprintf(buffer, "en dma"); + break; case 0xe6: sprintf(buffer, "jnc $%03X", (pc & 0xf00) | *opram++); break; case 0xe7: sprintf(buffer, "rl a"); break; case 0xe8: sprintf(buffer, "djnz r0,$%03X", (pc & 0xf00) | *opram++); flags = DASMFLAG_STEP_OVER; break; @@ -283,7 +296,8 @@ static UINT32 common_dasm(device_t *device, char *buffer, offs_t pc, const UINT8 case 0xf5: if (!upi41) sprintf(buffer, "sel mb1"); else - sprintf(buffer, "en flags"); break; + sprintf(buffer, "en flags"); + break; case 0xf6: sprintf(buffer, "jc $%03X", (pc & 0xf00) | *opram++); break; case 0xf7: sprintf(buffer, "rlc a"); break; case 0xf8: sprintf(buffer, "mov a,r0"); break; diff --git a/src/devices/cpu/mips/mips3.cpp b/src/devices/cpu/mips/mips3.cpp index 7ae1fd1f337..73b5974bab7 100644 --- a/src/devices/cpu/mips/mips3.cpp +++ b/src/devices/cpu/mips/mips3.cpp @@ -224,7 +224,7 @@ void mips3_device::generate_exception(int exception, int backup) if (exception != 0) { fprintf(stderr, "Exception: PC=%08X, PPC=%08X\n", m_core->pc, m_ppc); - debugger_break(machine()); + machine().debug_break(); } */ diff --git a/src/devices/cpu/mips/mips3dsm.cpp b/src/devices/cpu/mips/mips3dsm.cpp index 1b0d6e52286..71e81ca7b5c 100644 --- a/src/devices/cpu/mips/mips3dsm.cpp +++ b/src/devices/cpu/mips/mips3dsm.cpp @@ -373,7 +373,8 @@ unsigned dasmmips3(char *buffer, unsigned pc, UINT32 op) case 0x00: if (op == 0) sprintf(buffer, "nop"); else - sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); break; + sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); + break; case 0x01: sprintf(buffer, "mov%c %s,%s,%d", ((op >> 16) & 1) ? 't' : 'f', reg[rd], reg[rs], (op >> 18) & 7); break; case 0x02: sprintf(buffer, "srl %s,%s,%d", reg[rd], reg[rt], shift); break; case 0x03: sprintf(buffer, "sra %s,%s,%d", reg[rd], reg[rt], shift); break; @@ -384,7 +385,9 @@ unsigned dasmmips3(char *buffer, unsigned pc, UINT32 op) case 0x09: if (rd == 31) sprintf(buffer, "jalr %s", reg[rs]); else - sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); break; + sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); + flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); + break; case 0x0a: sprintf(buffer, "movz %s,%s,%s", reg[rd], reg[rs], reg[rt]); break; case 0x0b: sprintf(buffer, "movn %s,%s,%s", reg[rd], reg[rs], reg[rt]); break; case 0x0c: sprintf(buffer, "syscall"); flags = DASMFLAG_STEP_OVER; break; @@ -461,7 +464,8 @@ unsigned dasmmips3(char *buffer, unsigned pc, UINT32 op) case 0x04: if (rs == 0 && rt == 0) sprintf(buffer, "b $%08x", pc + 4 + ((INT16)op << 2)); else - sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; + sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2)); + break; case 0x05: sprintf(buffer, "bne %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; case 0x06: sprintf(buffer, "blez %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; case 0x07: sprintf(buffer, "bgtz %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; diff --git a/src/devices/cpu/mips/r3kdasm.cpp b/src/devices/cpu/mips/r3kdasm.cpp index ed0da525a98..3e65c0f0e9c 100644 --- a/src/devices/cpu/mips/r3kdasm.cpp +++ b/src/devices/cpu/mips/r3kdasm.cpp @@ -144,7 +144,8 @@ static UINT32 dasm_cop(UINT32 pc, int cop, UINT32 op, char *buffer) } } else - sprintf(buffer, "cop%d $%07x", cop, op & 0x01ffffff); break; + sprintf(buffer, "cop%d $%07x", cop, op & 0x01ffffff); + break; default: sprintf(buffer, "dc.l $%08x [invalid]", op); break; } @@ -250,7 +251,8 @@ static unsigned dasmr3k(char *buffer, unsigned pc, UINT32 op) case 0x00: if (op == 0) sprintf(buffer, "nop"); else - sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); break; + sprintf(buffer, "sll %s,%s,%d", reg[rd], reg[rt], shift); + break; case 0x02: sprintf(buffer, "srl %s,%s,%d", reg[rd], reg[rt], shift); break; case 0x03: sprintf(buffer, "sra %s,%s,%d", reg[rd], reg[rt], shift); break; case 0x04: sprintf(buffer, "sllv %s,%s,%s", reg[rd], reg[rt], reg[rs]); break; @@ -260,7 +262,9 @@ static unsigned dasmr3k(char *buffer, unsigned pc, UINT32 op) case 0x09: if (rd == 31) sprintf(buffer, "jalr %s", reg[rs]); else - sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); break; + sprintf(buffer, "jalr %s,%s", reg[rs], reg[rd]); + flags = DASMFLAG_STEP_OVER | DASMFLAG_STEP_OVER_EXTRA(1); + break; case 0x0c: sprintf(buffer, "syscall"); flags = DASMFLAG_STEP_OVER; break; case 0x0d: sprintf(buffer, "break"); flags = DASMFLAG_STEP_OVER; break; case 0x0f: sprintf(buffer, "sync [invalid]"); break; @@ -318,7 +322,8 @@ static unsigned dasmr3k(char *buffer, unsigned pc, UINT32 op) case 0x04: if (rs == 0 && rt == 0) sprintf(buffer, "b $%08x", pc + 4 + ((INT16)op << 2)); else - sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; + sprintf(buffer, "beq %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2)); + break; case 0x05: sprintf(buffer, "bne %s,%s,$%08x", reg[rs], reg[rt], pc + 4 + ((INT16)op << 2));break; case 0x06: sprintf(buffer, "blez %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; case 0x07: sprintf(buffer, "bgtz %s,$%08x", reg[rs], pc + 4 + ((INT16)op << 2)); break; diff --git a/src/devices/cpu/nec/v25.cpp b/src/devices/cpu/nec/v25.cpp index 2333a525d9b..da7f194318d 100644 --- a/src/devices/cpu/nec/v25.cpp +++ b/src/devices/cpu/nec/v25.cpp @@ -52,7 +52,7 @@ const device_type V35 = &device_creator; v25_common_device::v25_common_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, bool is_16bit, offs_t fetch_xor, UINT8 prefetch_size, UINT8 prefetch_cycles, UINT32 chip_type) : cpu_device(mconfig, type, name, tag, owner, clock, shortname, __FILE__) , m_program_config("program", ENDIANNESS_LITTLE, is_16bit ? 16 : 8, 20, 0) - , m_io_config("io", ENDIANNESS_LITTLE, is_16bit ? 16 : 8, 17, 0) + , m_io_config("io", ENDIANNESS_LITTLE, is_16bit ? 16 : 8, 16+1, 0) , m_fetch_xor(fetch_xor) , m_PCK(8) , m_prefetch_size(prefetch_size) diff --git a/src/devices/cpu/pps4/pps4.cpp b/src/devices/cpu/pps4/pps4.cpp index 5ae8e822846..b2a6cc8129f 100644 --- a/src/devices/cpu/pps4/pps4.cpp +++ b/src/devices/cpu/pps4/pps4.cpp @@ -74,7 +74,7 @@ pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_ : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ ) , m_program_config("program", ENDIANNESS_LITTLE, 8, 12) , m_data_config("data", ENDIANNESS_LITTLE, 8, 12) // 4bit RAM - , m_io_config("io", ENDIANNESS_LITTLE, 8, 8) // 4bit IO + , m_io_config("io", ENDIANNESS_LITTLE, 8, 8+1) // 4bit IO { } diff --git a/src/devices/cpu/psx/psx.cpp b/src/devices/cpu/psx/psx.cpp index 2c4db7ecbc6..35667a90374 100644 --- a/src/devices/cpu/psx/psx.cpp +++ b/src/devices/cpu/psx/psx.cpp @@ -13,7 +13,7 @@ * CXD8606BQ * CXD8606CQ * - * The PlayStation CPU is based on the LSI LR33300. + * The PlayStation CPU is based on the LSI CoreWare CW33300 library, this was available packaged as an LSI LR33300. * * Differences from the LR33300: * @@ -25,6 +25,8 @@ * If COP0 is disabled in user mode you get a coprocessor unusable exception, while * the LR33300 is documented to generate a reserved instruction exception. * + * MDEC is based on the LSI Jpeg CoreWare library (CW702?). + * * Known limitations of the emulation: * * Only read & write break points are emulated, trace and program counter breakpoints are not. @@ -297,7 +299,7 @@ WRITE32_MEMBER( psxcpu_device::biu_w ) void psxcpu_device::stop() { - debugger_break( machine() ); + machine().debug_break(); debugger_instruction_hook( this, m_pc ); } diff --git a/src/devices/cpu/sh4/sh4.cpp b/src/devices/cpu/sh4/sh4.cpp index 047e7405537..3a9a24e1525 100644 --- a/src/devices/cpu/sh4/sh4.cpp +++ b/src/devices/cpu/sh4/sh4.cpp @@ -3028,7 +3028,7 @@ inline void sh34_base_device::op1111_0xf13(const UINT16 opcode) FRCHG(); break; default: - debugger_break(machine()); + machine().debug_break(); break; } } else { @@ -3041,7 +3041,7 @@ inline void sh34_base_device::op1111_0xf13(const UINT16 opcode) void sh34_base_device::dbreak(const UINT16 opcode) { - debugger_break(machine()); + machine().debug_break(); } diff --git a/src/devices/cpu/sharc/sharc.cpp b/src/devices/cpu/sharc/sharc.cpp index 67290164b0c..4123da67594 100644 --- a/src/devices/cpu/sharc/sharc.cpp +++ b/src/devices/cpu/sharc/sharc.cpp @@ -11,7 +11,6 @@ #include "sharcfe.h" -#define ENABLE_DRC 0 #define DISABLE_FAST_REGISTERS 1 @@ -76,6 +75,7 @@ adsp21062_device::adsp21062_device(const machine_config &mconfig, const char *ta , m_cache(CACHE_SIZE + sizeof(sharc_internal_state)) , m_drcuml(nullptr) , m_drcfe(nullptr) + , m_enable_drc(false) { } @@ -86,6 +86,11 @@ offs_t adsp21062_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 return CPU_DISASSEMBLE_NAME(sharc)(this, buffer, pc, oprom, opram, options); } +void adsp21062_device::enable_recompiler() +{ + m_enable_drc = true; +} + void adsp21062_device::CHANGE_PC(UINT32 newpc) { @@ -892,45 +897,48 @@ void adsp21062_device::check_interrupts() void adsp21062_device::execute_run() { -#if ENABLE_DRC - if (m_core->irq_pending != 0) + if (m_enable_drc) { - m_core->idle = 0; - } - execute_run_drc(); - return; -#else - if (m_core->idle && m_core->irq_pending == 0) - { - m_core->icount = 0; - debugger_instruction_hook(this, m_core->daddr); - } - if (m_core->irq_pending != 0) - { - check_interrupts(); - m_core->idle = 0; - } - - while (m_core->icount > 0 && !m_core->idle) - { - m_core->pc = m_core->daddr; - m_core->daddr = m_core->faddr; - m_core->faddr = m_core->nfaddr; - m_core->nfaddr++; - - m_core->astat_old_old_old = m_core->astat_old_old; - m_core->astat_old_old = m_core->astat_old; - m_core->astat_old = m_core->astat; - - debugger_instruction_hook(this, m_core->pc); - - m_core->opcode = ROPCODE(m_core->pc); - - // handle looping - if (m_core->pc == m_core->laddr.addr) + if (m_core->irq_pending != 0) { - switch (m_core->laddr.loop_type) + m_core->idle = 0; + } + execute_run_drc(); + return; + } + else + { + if (m_core->idle && m_core->irq_pending == 0) + { + m_core->icount = 0; + debugger_instruction_hook(this, m_core->daddr); + } + if (m_core->irq_pending != 0) + { + check_interrupts(); + m_core->idle = 0; + } + + while (m_core->icount > 0 && !m_core->idle) + { + m_core->pc = m_core->daddr; + m_core->daddr = m_core->faddr; + m_core->faddr = m_core->nfaddr; + m_core->nfaddr++; + + m_core->astat_old_old_old = m_core->astat_old_old; + m_core->astat_old_old = m_core->astat_old; + m_core->astat_old = m_core->astat; + + debugger_instruction_hook(this, m_core->pc); + + m_core->opcode = ROPCODE(m_core->pc); + + // handle looping + if (m_core->pc == m_core->laddr.addr) { + switch (m_core->laddr.loop_type) + { case 0: // arithmetic condition-based { int condition = m_core->laddr.code; @@ -980,27 +988,27 @@ void adsp21062_device::execute_run() CHANGE_PC(TOP_PC()); } } + } } - } - (this->*m_sharc_op[(m_core->opcode >> 39) & 0x1ff])(); + (this->*m_sharc_op[(m_core->opcode >> 39) & 0x1ff])(); - // System register latency effect - if (m_core->systemreg_latency_cycles > 0) - { - --m_core->systemreg_latency_cycles; - if (m_core->systemreg_latency_cycles <= 0) + // System register latency effect + if (m_core->systemreg_latency_cycles > 0) { - systemreg_write_latency_effect(); + --m_core->systemreg_latency_cycles; + if (m_core->systemreg_latency_cycles <= 0) + { + systemreg_write_latency_effect(); + } } - } - --m_core->icount; - }; -#endif + --m_core->icount; + }; + } } bool adsp21062_device::memory_read(address_spacenum spacenum, offs_t offset, int size, UINT64 &value) diff --git a/src/devices/cpu/sharc/sharc.h b/src/devices/cpu/sharc/sharc.h index 20eeb003ebe..215135390e0 100644 --- a/src/devices/cpu/sharc/sharc.h +++ b/src/devices/cpu/sharc/sharc.h @@ -129,6 +129,7 @@ struct SHARC_DMA_OP #define OP_USERFLAG_ASTAT_DELAY_COPY_SZ 0x00080000 #define OP_USERFLAG_ASTAT_DELAY_COPY_BTF 0x00100000 #define OP_USERFLAG_ASTAT_DELAY_COPY 0x001ff000 +#define OP_USERFLAG_CALL 0x10000000 #define MCFG_SHARC_BOOT_MODE(boot_mode) \ @@ -168,6 +169,8 @@ public: void sharc_cfunc_unimplemented_shiftimm(); void sharc_cfunc_write_snoop(); + void enable_recompiler(); + enum ASTAT_FLAGS { // ASTAT flags @@ -401,7 +404,9 @@ private: ASTAT_DRC astat_drc_copy; ASTAT_DRC astat_delay_copy; UINT32 dreg_temp; + UINT32 dreg_temp2; UINT32 jmpdest; + UINT32 temp_return; float fp0; float fp1; @@ -452,6 +457,8 @@ private: UINT16 m_internal_ram[2 * 0x10000]; // 2x 128KB + bool m_enable_drc; + inline void CHANGE_PC(UINT32 newpc); inline void CHANGE_PC_DELAYED(UINT32 newpc); void sharc_iop_delayed_w(UINT32 reg, UINT32 data, int cycles); @@ -626,6 +633,7 @@ private: void generate_shift_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, int data, int shiftop, int rn, int rx); void generate_call(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool delayslot); void generate_jump(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, bool delayslot, bool loopabort, bool clearint); + void generate_loop_jump(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); void generate_write_mode1_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, UINT32 data); void generate_set_mode1_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, UINT32 data); void generate_clear_mode1_imm(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, UINT32 data); diff --git a/src/devices/cpu/sharc/sharcdrc.cpp b/src/devices/cpu/sharc/sharcdrc.cpp index da300eafced..2850f91da67 100644 --- a/src/devices/cpu/sharc/sharcdrc.cpp +++ b/src/devices/cpu/sharc/sharcdrc.cpp @@ -1366,6 +1366,57 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil UML_EXIT(block, EXECUTE_UNMAPPED_CODE); // exit EXECUTE_UNMAPPED_CODE } + // handle a special case where call is used as the last operation in a loop + if (desc->userflags & OP_USERFLAG_CALL && desc->userflags & (OP_USERFLAG_COND_LOOP | OP_USERFLAG_COUNTER_LOOP)) + { + if (desc->userflags & OP_USERFLAG_COUNTER_LOOP) + { + code_label end = compiler->labelnum++; + UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4); + UML_CMP(block, I0, desc->pc); + UML_JMPc(block, COND_NE, end); + + code_label label_expire = compiler->labelnum++; + UML_MOV(block, I1, mem(&m_core->lstkp)); // mov i1,[m_core->lstkp] + UML_LOAD(block, I0, m_core->lcstack, I1, SIZE_DWORD, SCALE_x4); // load i0,m_core->lcstack,i1,dword,scale_x4 + UML_SUB(block, I0, I0, 1); // sub i0,1 + UML_STORE(block, m_core->lcstack, I1, I0, SIZE_DWORD, SCALE_x4); // store m_core->lcstack,i1,i0,dword,scale_x4 + UML_SUB(block, CURLCNTR, CURLCNTR, 1); // sub CURLCNTR,1 + UML_JMPc(block, COND_E, label_expire); // jne label_expire + + UML_MOV(block, mem(&m_core->temp_return), desc->userdata0); + UML_JMP(block, end); + + UML_LABEL(block, label_expire); // label_expire: + UML_CALLH(block, *m_pop_pc); // callh m_pop_pc + UML_CALLH(block, *m_pop_loop); // callh m_pop_loop + UML_MOV(block, mem(&m_core->temp_return), desc->pc + 1); + + UML_LABEL(block, end); + } + if (desc->userflags & OP_USERFLAG_COND_LOOP) + { + code_label end = compiler->labelnum++; + UML_LOAD(block, I0, m_core->lastack, LSTKP, SIZE_DWORD, SCALE_x4); + UML_CMP(block, I0, desc->pc); + UML_JMPc(block, COND_NE, end); + + code_label label_expire = compiler->labelnum++; + + int condition = (desc->userflags & OP_USERFLAG_COND_FIELD) >> OP_USERFLAG_COND_FIELD_SHIFT; + generate_do_condition(block, compiler, desc, condition, label_expire, m_core->astat_delay_copy); + UML_MOV(block, mem(&m_core->temp_return), desc->userdata0); + UML_JMP(block, end); + + UML_LABEL(block, label_expire); + UML_CALLH(block, *m_pop_pc); + UML_CALLH(block, *m_pop_loop); + UML_MOV(block, mem(&m_core->temp_return), desc->pc + 1); + + UML_LABEL(block, end); + } + } + /* if this is an invalid opcode, generate the exception now */ // if (desc->flags & OPFLAG_INVALID_OPCODE) // UML_EXH(block, *m_exception[EXCEPTION_PROGRAM], 0x80000); // exh exception_program,0x80000 @@ -1432,7 +1483,7 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil UML_SUB(block, CURLCNTR, CURLCNTR, 1); // sub CURLCNTR,1 UML_JMPc(block, COND_E, label_expire); // jne label_expire - generate_jump(block, compiler, desc, false, false, false); + generate_loop_jump(block, compiler, desc); UML_LABEL(block, label_expire); // label_expire: UML_CALLH(block, *m_pop_pc); // callh m_pop_pc @@ -1452,7 +1503,7 @@ void adsp21062_device::generate_sequence_instruction(drcuml_block *block, compil int condition = (desc->userflags & OP_USERFLAG_COND_FIELD) >> OP_USERFLAG_COND_FIELD_SHIFT; generate_do_condition(block, compiler, desc, condition, label_expire, m_core->astat_delay_copy); - generate_jump(block, compiler, desc, false, false, false); + generate_loop_jump(block, compiler, desc); UML_LABEL(block, label_expire); UML_CALLH(block, *m_pop_pc); @@ -1786,10 +1837,18 @@ void adsp21062_device::generate_call(drcuml_block *block, compiler_state *compil generate_sequence_instruction(block, &compiler_temp, desc->delay.last(), true); } - if (delayslot) - UML_MOV(block, I0, desc->pc + 3); + // if this is the last instruction of a loop, we need to use the return PC from the resolved loop + if (desc->userflags & OP_USERFLAG_CALL && desc->userflags & (OP_USERFLAG_COND_LOOP | OP_USERFLAG_COUNTER_LOOP)) + { + UML_MOV(block, I0, mem(&m_core->temp_return)); + } else - UML_MOV(block, I0, desc->pc + 1); + { + if (delayslot) + UML_MOV(block, I0, desc->pc + 3); + else + UML_MOV(block, I0, desc->pc + 1); + } UML_CALLH(block, *m_push_pc); // update cycles and hash jump @@ -1878,6 +1937,23 @@ void adsp21062_device::generate_jump(drcuml_block *block, compiler_state *compil UML_MAPVAR(block, MAPVAR_CYCLES, compiler->cycles); // mapvar CYCLES,compiler->cycles } +void adsp21062_device::generate_loop_jump(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc) +{ + // update cycles and hash jump + generate_update_cycles(block, compiler, desc->userdata0, TRUE); + /* + if (desc->flags & OPFLAG_INTRABLOCK_BRANCH) + UML_JMP(block, desc->targetpc | 0x80000000); // jmp targetpc | 0x80000000 + else + UML_HASHJMP(block, 0, desc->targetpc, *m_nocode); // hashjmp 0,targetpc,nocode + */ + UML_HASHJMP(block, 0, desc->userdata0, *m_nocode); + + /* reset the mapvar to the current cycles and account for skipped slots */ + compiler->cycles += desc->skipslots; + UML_MAPVAR(block, MAPVAR_CYCLES, compiler->cycles); // mapvar CYCLES,compiler->cycles +} + /*------------------------------------------------- generate_write_ureg - UREG is read into I0 -------------------------------------------------*/ @@ -2117,6 +2193,12 @@ void adsp21062_device::generate_write_ureg(drcuml_block *block, compiler_state * case 0x65: // PCSTKP UML_MOV(block, PCSTKP, imm ? data : I0); break; + case 0x67: // CURLCNTR + UML_MOV(block, CURLCNTR, imm ? data : I0); + break; + case 0x68: // LCNTR + UML_MOV(block, LCNTR, imm ? data : I0); + break; case 0x70: // USTAT1 UML_MOV(block, mem(&m_core->ustat1), imm ? data : I0); break; @@ -2734,8 +2816,51 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi compiler->mode1_delay.data = data; compiler->mode1_delay.mode = MODE1_SET; break; - case 0xc: // ASTAT - return FALSE; + case 0xc: // ASTAT + // TODO: does this need delay? + if (data & ASTAT_FLAGS::AZ) + UML_MOV(block, ASTAT_AZ, 1); + if (data & ASTAT_FLAGS::AV) + UML_MOV(block, ASTAT_AV, 1); + if (data & ASTAT_FLAGS::AN) + UML_MOV(block, ASTAT_AN, 1); + if (data & ASTAT_FLAGS::AC) + UML_MOV(block, ASTAT_AC, 1); + if (data & ASTAT_FLAGS::AS) + UML_MOV(block, ASTAT_AS, 1); + if (data & ASTAT_FLAGS::AI) + UML_MOV(block, ASTAT_AI, 1); + if (data & ASTAT_FLAGS::MN) + UML_MOV(block, ASTAT_MN, 1); + if (data & ASTAT_FLAGS::MV) + UML_MOV(block, ASTAT_MV, 1); + if (data & ASTAT_FLAGS::MU) + UML_MOV(block, ASTAT_MU, 1); + if (data & ASTAT_FLAGS::MI) + UML_MOV(block, ASTAT_MI, 1); + if (data & ASTAT_FLAGS::AF) + UML_MOV(block, ASTAT_AF, 1); + if (data & ASTAT_FLAGS::SV) + UML_MOV(block, ASTAT_SV, 1); + if (data & ASTAT_FLAGS::SZ) + UML_MOV(block, ASTAT_SZ, 1); + if (data & ASTAT_FLAGS::SS) + UML_MOV(block, ASTAT_SS, 1); + if (data & ASTAT_FLAGS::BTF) + UML_MOV(block, ASTAT_BTF, 1); + if (data & ASTAT_FLAGS::FLG0) + UML_MOV(block, FLAG0, 1); + if (data & ASTAT_FLAGS::FLG1) + UML_MOV(block, FLAG1, 1); + if (data & ASTAT_FLAGS::FLG2) + UML_MOV(block, FLAG2, 1); + if (data & ASTAT_FLAGS::FLG3) + UML_MOV(block, FLAG3, 1); + if (data & 0xff000000) + { + UML_OR(block, mem(&m_core->astat_drc.cacc), mem(&m_core->astat_drc.cacc), (data >> 24)); + } + break; case 0xd: // IMASK UML_OR(block, IMASK, IMASK, data); break; @@ -2773,7 +2898,50 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi compiler->mode1_delay.mode = MODE1_CLEAR; break; case 0xc: // ASTAT - return FALSE; + // TODO: does this need delay? + if (data & ASTAT_FLAGS::AZ) + UML_MOV(block, ASTAT_AZ, 0); + if (data & ASTAT_FLAGS::AV) + UML_MOV(block, ASTAT_AV, 0); + if (data & ASTAT_FLAGS::AN) + UML_MOV(block, ASTAT_AN, 0); + if (data & ASTAT_FLAGS::AC) + UML_MOV(block, ASTAT_AC, 0); + if (data & ASTAT_FLAGS::AS) + UML_MOV(block, ASTAT_AS, 0); + if (data & ASTAT_FLAGS::AI) + UML_MOV(block, ASTAT_AI, 0); + if (data & ASTAT_FLAGS::MN) + UML_MOV(block, ASTAT_MN, 0); + if (data & ASTAT_FLAGS::MV) + UML_MOV(block, ASTAT_MV, 0); + if (data & ASTAT_FLAGS::MU) + UML_MOV(block, ASTAT_MU, 0); + if (data & ASTAT_FLAGS::MI) + UML_MOV(block, ASTAT_MI, 0); + if (data & ASTAT_FLAGS::AF) + UML_MOV(block, ASTAT_AF, 0); + if (data & ASTAT_FLAGS::SV) + UML_MOV(block, ASTAT_SV, 0); + if (data & ASTAT_FLAGS::SZ) + UML_MOV(block, ASTAT_SZ, 0); + if (data & ASTAT_FLAGS::SS) + UML_MOV(block, ASTAT_SS, 0); + if (data & ASTAT_FLAGS::BTF) + UML_MOV(block, ASTAT_BTF, 0); + if (data & ASTAT_FLAGS::FLG0) + UML_MOV(block, FLAG0, 0); + if (data & ASTAT_FLAGS::FLG1) + UML_MOV(block, FLAG1, 0); + if (data & ASTAT_FLAGS::FLG2) + UML_MOV(block, FLAG2, 0); + if (data & ASTAT_FLAGS::FLG3) + UML_MOV(block, FLAG3, 0); + if (data & 0xff000000) + { + UML_AND(block, mem(&m_core->astat_drc.cacc), mem(&m_core->astat_drc.cacc), ~(data >> 24)); + } + break; case 0xd: // IMASK UML_AND(block, IMASK, IMASK, ~data); break; @@ -2961,7 +3129,77 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi case 1: // compute / dreg <-> DM / dreg <-> PM |001| { - return FALSE; + int pm_dreg = (opcode >> 23) & 0xf; + int pmm = (opcode >> 27) & 0x7; + int pmi = (opcode >> 30) & 0x7; + int dm_dreg = (opcode >> 33) & 0xf; + int dmm = (opcode >> 38) & 0x7; + int dmi = (opcode >> 41) & 0x7; + int pmd = (opcode >> 37) & 0x1; + int dmd = (opcode >> 44) & 0x1; + int compute = opcode & 0x7fffff; + + bool temp_pm_dreg = false; + if (compute != 0 && pmd && desc->regout[0] & (1 << pm_dreg)) + { + UML_MOV(block, mem(&m_core->dreg_temp), REG(pm_dreg)); + temp_pm_dreg = true; + } + bool temp_dm_dreg = false; + if (compute != 0 && dmd && desc->regout[0] & (1 << dm_dreg)) + { + UML_MOV(block, mem(&m_core->dreg_temp2), REG(dm_dreg)); + temp_dm_dreg = true; + } + + generate_compute(block, compiler, desc); + + // PM transfer + if (pmd) + { + // dreg -> PM + if (temp_pm_dreg) + UML_MOV(block, I0, mem(&m_core->dreg_temp)); + else + UML_MOV(block, I0, REG(pm_dreg)); + UML_MOV(block, I1, PM_I(pmi)); + UML_CALLH(block, *m_pm_write32); + UML_ADD(block, PM_I(pmi), PM_I(pmi), PM_M(pmm)); + generate_update_circular_buffer(block, compiler, desc, 1, pmi); + } + else + { + // PM -> dreg + UML_MOV(block, I1, PM_I(pmi)); + UML_CALLH(block, *m_pm_read32); + UML_MOV(block, REG(pm_dreg), I0); + UML_ADD(block, PM_I(pmi), PM_I(pmi), PM_M(pmm)); + generate_update_circular_buffer(block, compiler, desc, 1, pmi); + } + + // DM transfer + if (dmd) + { + // dreg -> DM + if (temp_dm_dreg) + UML_MOV(block, I0, mem(&m_core->dreg_temp2)); + else + UML_MOV(block, I0, REG(dm_dreg)); + UML_MOV(block, I1, DM_I(dmi)); + UML_CALLH(block, *m_dm_write32); + UML_ADD(block, DM_I(dmi), DM_I(dmi), DM_M(dmm)); + generate_update_circular_buffer(block, compiler, desc, 0, dmi); + } + else + { + // DM -> dreg + UML_MOV(block, I1, DM_I(dmi)); + UML_CALLH(block, *m_dm_read32); + UML_MOV(block, REG(dm_dreg), I0); + UML_ADD(block, DM_I(dmi), DM_I(dmi), DM_M(dmm)); + generate_update_circular_buffer(block, compiler, desc, 0, dmi); + } + return TRUE; } case 2: // compute / ureg <-> DM|PM, register modify |010| @@ -3184,7 +3422,31 @@ int adsp21062_device::generate_opcode(drcuml_block *block, compiler_state *compi { if (opcode & U64(0x100000000000)) // immediate data -> DM|PM |100|1| { - return FALSE; + int i = (opcode >> 41) & 0x7; + int m = (opcode >> 38) & 0x7; + int g = (opcode >> 37) & 0x1; + UINT32 data = (UINT32)opcode; + + if (g) + { + // PM + UML_MOV(block, I0, data); + UML_MOV(block, I1, PM_I(i)); + UML_CALLH(block, *m_pm_write32); + UML_ADD(block, PM_I(i), PM_I(i), PM_M(m)); + } + else + { + // DM + UML_MOV(block, I0, data); + UML_MOV(block, I1, DM_I(i)); + UML_CALLH(block, *m_dm_write32); + UML_ADD(block, DM_I(i), DM_I(i), DM_M(m)); + } + + generate_update_circular_buffer(block, compiler, desc, g, i); + + return TRUE; } else // immediate shift / dreg <-> DM|PM |100|0| { @@ -3865,7 +4127,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x92: // Fn = ABS(Fx - Fy) case 0x89: // Fn = (Fx + Fy) / 2 case 0xdd: // Rn = TRUNC Fx BY Ry - case 0xe3: // Fn = CLIP Fx BY Fy case 0xe0: // Fn = Fx COPYSIGN Fy case 0x05: // Rn = Rx + Ry + CI case 0x06: // Rn = Rx - Ry + CI - 1 @@ -3873,7 +4134,6 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com case 0x26: // Rn = Rx + CI - 1 case 0x30: // Rn = ABS Rx case 0x43: // Rn = NOT Rx - case 0xb0: // Fn = ABS(Fx) case 0xa5: // Fn = RND Fx case 0xad: // Rn = MANT Fx case 0xcd: // Rn = TRUNC Fx @@ -4147,6 +4407,19 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); // TODO return; + case 0xb0: // Fn = ABS(Fx) + UML_FSCOPYI(block, F0, REG(rx)); + UML_FSABS(block, F0, F0); + UML_ICOPYFS(block, REG(rn), F0); + + if (AZ_CALC_REQUIRED) UML_MOV(block, ASTAT_AZ, 0); // TODO + if (AN_CALC_REQUIRED) UML_MOV(block, ASTAT_AN, 0); + if (AV_CALC_REQUIRED) UML_MOV(block, ASTAT_AV, 0); + if (AC_CALC_REQUIRED) UML_MOV(block, ASTAT_AC, 0); + if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0); // TODO + if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); // TODO + return; + case 0xbd: // Fn = SCALB Fx BY Ry // TODO: source = nan, result = denormal UML_MOV(block, I1, REG(rx)); @@ -4377,6 +4650,36 @@ void adsp21062_device::generate_compute(drcuml_block *block, compiler_state *com UML_ICOPYFS(block, REG(rn), F4); return; + case 0xe3: // Fn = CLIP Fx BY Fy + { + code_label label_1 = compiler->labelnum++; + code_label label_2 = compiler->labelnum++; + UML_FSCOPYI(block, F0, REG(rx)); + UML_FSCOPYI(block, F1, REG(ry)); + UML_FSABS(block, F1, F1); + UML_FSCMP(block, F0, F1); + UML_JMPc(block, COND_C, label_1); + + UML_FSCMP(block, F0, mem(&m_core->fp0)); + UML_JMPc(block, COND_C, label_2); + UML_FSMOV(block, F0, F1); + UML_JMP(block, label_1); + UML_LABEL(block, label_2); + UML_FSNEG(block, F0, F1); + + UML_LABEL(block, label_1); + if (AZ_CALC_REQUIRED || AN_CALC_REQUIRED) + UML_FSCMP(block, F0, mem(&m_core->fp0)); + if (AZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_AZ); + if (AN_CALC_REQUIRED) UML_SETc(block, COND_C, ASTAT_AN); + if (AV_CALC_REQUIRED) UML_MOV(block, ASTAT_AV, 0); + if (AC_CALC_REQUIRED) UML_MOV(block, ASTAT_AC, 0); + if (AS_CALC_REQUIRED) UML_MOV(block, ASTAT_AS, 0); + if (AI_CALC_REQUIRED) UML_MOV(block, ASTAT_AI, 0); // TODO + UML_ICOPYFS(block, REG(rn), F0); + return; + } + case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: { @@ -5162,8 +5465,7 @@ void adsp21062_device::generate_shift_imm(drcuml_block *block, compiler_state *c int len = (data >> 6) & 0x3f; switch (shiftop) - { - case 0x01: // ASHIFT Rx BY + { case 0x11: // FDEP Rx BY : case 0x13: // FDEP Rx BY : (SE) case 0x1b: // Rn = Rn OR FDEP Rx BY : (SE) @@ -5193,6 +5495,29 @@ void adsp21062_device::generate_shift_imm(drcuml_block *block, compiler_state *c } return; + case 0x01: // ASHIFT Rx BY + if (abs(shift) >= 32) + { + UML_MOV(block, REG(rn), 0); + UML_TEST(block, REG(rn), 0x80000000); + UML_MOVc(block, COND_NZ, REG(rn), 0xffffffff); + if (SZ_CALC_REQUIRED) UML_MOV(block, ASTAT_SZ, 1); + if (SV_CALC_REQUIRED) UML_MOV(block, ASTAT_SV, 1); + if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0); + } + else + { + if (shift < 0) + UML_SAR(block, REG(rn), REG(rx), -shift); + else + UML_SHL(block, REG(rn), REG(rx), shift); + if (SZ_CALC_REQUIRED) UML_SETc(block, COND_Z, ASTAT_SZ); + if (SV_CALC_REQUIRED && shift != 0) UML_MOV(block, ASTAT_SV, 1); + if (SV_CALC_REQUIRED && shift == 0) UML_MOV(block, ASTAT_SV, 0); + if (SS_CALC_REQUIRED) UML_MOV(block, ASTAT_SS, 0); + } + return; + case 0x02: // ROT Rx BY if (shift < 0) UML_ROR(block, REG(rn), REG(rx), (-shift) & 0x1f); diff --git a/src/devices/cpu/sharc/sharcfe.cpp b/src/devices/cpu/sharc/sharcfe.cpp index 4f7fc7435b4..bae9014ee33 100644 --- a/src/devices/cpu/sharc/sharcfe.cpp +++ b/src/devices/cpu/sharc/sharcfe.cpp @@ -206,7 +206,7 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) int index = desc.pc & 0x1ffff; desc.flags |= OPFLAG_IS_CONDITIONAL_BRANCH; - desc.targetpc = map[index].start_pc; + desc.userdata0 = map[index].start_pc; if (map[index].looptype == LOOP_TYPE_COUNTER) { desc.userflags |= OP_USERFLAG_COUNTER_LOOP; @@ -294,6 +294,7 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) case 0x06: // direct jump|call |000|00110| { int j = (opcode >> 26) & 0x1; + int b = (opcode >> 39) & 0x1; int cond = (opcode >> 33) & 0x1f; UINT32 address = opcode & 0xffffff; @@ -306,12 +307,15 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) desc.targetpc = address; desc.delayslots = (j) ? 2 : 0; + + desc.userflags |= (b) ? OP_USERFLAG_CALL : 0; break; } case 0x07: // direct jump|call |000|00111| { int j = (opcode >> 26) & 0x1; + int b = (opcode >> 39) & 0x1; int cond = (opcode >> 33) & 0x1f; UINT32 address = opcode & 0xffffff; @@ -324,12 +328,15 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) desc.targetpc = desc.pc + SIGN_EXTEND24(address); desc.delayslots = (j) ? 2 : 0; + + desc.userflags |= (b) ? OP_USERFLAG_CALL : 0; break; } case 0x08: // indirect jump|call / compute |000|01000| { int j = (opcode >> 26) & 0x1; + int b = (opcode >> 39) & 0x1; int pmi = (opcode >> 30) & 0x7; int pmm = (opcode >> 27) & 0x7; int cond = (opcode >> 33) & 0x1f; @@ -349,12 +356,15 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) desc.targetpc = BRANCH_TARGET_DYNAMIC; desc.delayslots = (j) ? 2 : 0; + + desc.userflags |= (b) ? OP_USERFLAG_CALL : 0; break; } case 0x09: // indirect jump|call / compute |000|01001| { - int j = (opcode >> 26) & 0x1;; + int j = (opcode >> 26) & 0x1; + int b = (opcode >> 39) & 0x1; int cond = (opcode >> 33) & 0x1f; if (!describe_compute(desc, opcode)) @@ -370,6 +380,7 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) desc.targetpc = desc.pc + SIGN_EXTEND6((opcode >> 27) & 0x3f); desc.delayslots = (j) ? 2 : 0; + desc.userflags |= (b) ? OP_USERFLAG_CALL : 0; break; } @@ -458,9 +469,20 @@ bool sharc_frontend::describe(opcode_desc &desc, const opcode_desc *prev) loop.type = LOOP_TYPE_CONDITIONAL; loop.condition = cond; + /* loop.astat_check_pc = loop.end_pc - 2; if (loop.astat_check_pc < loop.start_pc) fatalerror("describe_compute: conditional loop < 2 at %08X", desc.pc); + */ + + int jump_diff = loop.end_pc - loop.start_pc; + if (jump_diff >= 2) + loop.astat_check_pc = loop.end_pc - 2; + else if (jump_diff == 1) + loop.astat_check_pc = loop.end_pc - 1; + else + loop.astat_check_pc = loop.end_pc; + insert_loop(loop); break; diff --git a/src/devices/cpu/sparc/mb86901.cpp b/src/devices/cpu/sparc/mb86901.cpp new file mode 100644 index 00000000000..382aa865522 --- /dev/null +++ b/src/devices/cpu/sparc/mb86901.cpp @@ -0,0 +1,1534 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//================================================================ +// +// mb86901.cpp - Emulation for the Fujitsu MB86901 / LSI L64801 +// processors. Both chips are identical both +// electrically and functionally, and implement +// the integer instructions in a SPARC v7 +// compatible instruction set. +// +// To-Do: +// - Ops: FBFcc, LDF, STF +// - Test: SPARCv8 ops are untested +// - Test: Traps are untested +// - FPU support +// - Coprocessor support +// +//================================================================ + +#include "emu.h" +#include "debugger.h" +#include "sparc.h" +#include "sparcdefs.h" + +#define SPARCV8 (0) + +CPU_DISASSEMBLE( sparc ); + +const device_type MB86901 = &device_creator; + +const int mb86901_device::WINDOW_COUNT = 7; + +//------------------------------------------------- +// mb86901_device - constructor +//------------------------------------------------- + +mb86901_device::mb86901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : cpu_device(mconfig, MB86901, "Fujitsu MB86901", tag, owner, clock, "mb86901", __FILE__) + , m_program_config("program", ENDIANNESS_BIG, 32, 32) +{ +} + + +void mb86901_device::device_start() +{ + m_trap_priorities[0] = 1; + m_trap_priorities[1] = 2; + m_trap_priorities[2] = 3; + m_trap_priorities[3] = 4; + m_trap_priorities[4] = 5; + m_trap_priorities[5] = 6; + m_trap_priorities[6] = 6; + m_trap_priorities[7] = 7; + m_trap_priorities[8] = 8; + m_trap_priorities[9] = 10; + m_trap_priorities[10] = 11; + for (int i = 11; i <= 16; i++) + m_trap_priorities[i] = 31; + m_trap_priorities[17] = 27; + m_trap_priorities[18] = 26; + m_trap_priorities[19] = 25; + m_trap_priorities[20] = 24; + m_trap_priorities[21] = 23; + m_trap_priorities[22] = 22; + m_trap_priorities[23] = 21; + m_trap_priorities[24] = 20; + m_trap_priorities[25] = 19; + m_trap_priorities[26] = 18; + m_trap_priorities[27] = 17; + m_trap_priorities[28] = 16; + m_trap_priorities[29] = 15; + m_trap_priorities[30] = 14; + m_trap_priorities[31] = 13; + for (int i = 32; i < 128; i++) + m_trap_priorities[i] = 31; + for (int i = 128; i < 256; i++) + m_trap_priorities[i] = 12; + + memset(m_dbgregs, 0, 24 * sizeof(UINT32)); + + m_program = &space(AS_PROGRAM); + + // register our state for the debugger + state_add(STATE_GENPC, "GENPC", m_pc).noshow(); + state_add(STATE_GENFLAGS, "GENFLAGS", m_psr).callimport().callexport().formatstr("%6s").noshow(); + state_add(SPARC_PC, "PC", m_pc).formatstr("%08X"); + state_add(SPARC_NPC, "nPC", m_npc).formatstr("%08X"); + state_add(SPARC_PSR, "PSR", m_psr).formatstr("%08X"); + state_add(SPARC_WIM, "WIM", m_wim).formatstr("%08X"); + state_add(SPARC_TBR, "TBR", m_tbr).formatstr("%08X"); + state_add(SPARC_Y, "Y", m_y).formatstr("%08X"); + state_add(SPARC_ICC, "icc", m_icc).formatstr("%4s"); + state_add(SPARC_CWP, "CWP", m_cwp).formatstr("%2d"); + char regname[3] = "g0"; + for (int i = 0; i < 8; i++) + { + regname[1] = 0x30 + i; + state_add(SPARC_G0 + i, regname, m_r[i]).formatstr("%08X"); + } + regname[0] = 'o'; + for (int i = 0; i < 8; i++) + { + regname[1] = 0x30 + i; + state_add(SPARC_O0 + i, regname, m_dbgregs[i]).formatstr("%08X"); + } + + regname[0] = 'l'; + for (int i = 0; i < 8; i++) + { + regname[1] = 0x30 + i; + state_add(SPARC_L0 + i, regname, m_dbgregs[8+i]).formatstr("%08X"); + } + regname[0] = 'i'; + for (int i = 0; i < 8; i++) + { + regname[1] = 0x30 + i; + state_add(SPARC_I0 + i, regname, m_dbgregs[16+i]).formatstr("%08X"); + } + + state_add(SPARC_EC, "EC", m_ec).formatstr("%1d"); + state_add(SPARC_EF, "EF", m_ef).formatstr("%1d"); + state_add(SPARC_ET, "ET", m_et).formatstr("%1d"); + state_add(SPARC_PIL, "PIL", m_pil).formatstr("%2d"); + state_add(SPARC_S, "S", m_s).formatstr("%1d"); + state_add(SPARC_PS, "PS", m_ps).formatstr("%1d"); + + char rname[5]; + for (int i = 0; i < 120; i++) + { + sprintf(rname, "r%d", i); + state_add(SPARC_R0 + i, rname, m_r[i]).formatstr("%08X"); + } + + // register with the savestate system + save_item(NAME(m_r)); + save_item(NAME(m_pc)); + save_item(NAME(m_npc)); + save_item(NAME(m_psr)); + save_item(NAME(m_wim)); + save_item(NAME(m_tbr)); + save_item(NAME(m_y)); + save_item(NAME(m_impl)); + save_item(NAME(m_ver)); + save_item(NAME(m_icc)); + save_item(NAME(m_ec)); + save_item(NAME(m_ef)); + save_item(NAME(m_pil)); + save_item(NAME(m_s)); + save_item(NAME(m_ps)); + save_item(NAME(m_et)); + save_item(NAME(m_cwp)); + save_item(NAME(m_insn_asi)); + save_item(NAME(m_data_asi)); + save_item(NAME(m_asi)); + save_item(NAME(m_queued_tt)); + save_item(NAME(m_queued_priority)); + + // set our instruction counter + m_icountptr = &m_icount; +} + +void mb86901_device::device_stop() +{ +} + +void mb86901_device::device_reset() +{ + m_queued_tt = 0; + m_queued_priority = 0; + m_asi = 0; + MAE = false; + HOLD_BUS = false; + + PC = 0; + nPC = 4; + memset(m_r, 0, sizeof(UINT32) * 120); + + m_wim = 0; + m_tbr = 0; + m_y = 0; + + m_impl = 0; + m_ver = 0; + m_icc = 0; + m_ec = false; + m_ef = false; + m_pil = 0; + m_s = true; + m_ps = true; + m_et = false; + m_cwp = 0; + + m_insn_asi = 9; + m_data_asi = 11; + + MAKE_PSR; + for (int i = 0; i < 8; i++) + { + m_regs[i] = m_r + i; + } + update_gpr_pointers(); +} + + +//------------------------------------------------- +// memory_space_config - return the configuration +// of the specified address space, or nullptr if +// the space doesn't exist +//------------------------------------------------- + +const address_space_config *mb86901_device::memory_space_config(address_spacenum spacenum) const +{ + switch (spacenum) + { + case AS_PROGRAM: + return &m_program_config; + default: + return nullptr; + } +} + +//------------------------------------------------- +// read_byte - read an 8-bit value from a given +// address space +//------------------------------------------------- + +UINT32 mb86901_device::read_byte(UINT8 asi, UINT32 address) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + return m_program->read_byte(address); +} + +INT32 mb86901_device::read_signed_byte(UINT8 asi, UINT32 address) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + return (((INT32)m_program->read_byte(address) << 24) >> 24); +} + +UINT32 mb86901_device::read_half(UINT8 asi, UINT32 address) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + return m_program->read_word(address); +} + +INT32 mb86901_device::read_signed_half(UINT8 asi, UINT32 address) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + return (((INT32)m_program->read_word(address) << 16) >> 16); +} + +UINT32 mb86901_device::read_word(UINT8 asi, UINT32 address) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + return m_program->read_dword(address); +} + +UINT64 mb86901_device::read_doubleword(UINT8 asi, UINT32 address) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + return (((UINT64)m_program->read_dword(address) << 32) | m_program->read_dword(address+4)); +} + +void mb86901_device::write_byte(UINT8 asi, UINT32 address, UINT8 data) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + m_program->write_byte(address, data); +} + +void mb86901_device::write_half(UINT8 asi, UINT32 address, UINT16 data) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + m_program->write_word(address, data); +} + +void mb86901_device::write_word(UINT8 asi, UINT32 address, UINT32 data) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + m_program->write_dword(address, data); +} + +void mb86901_device::write_doubleword(UINT8 asi, UINT32 address, UINT64 data) +{ + m_asi = asi; + // TODO: data_access_exception, data_access_error traps + m_program->write_dword(address, (UINT32)(data >> 32)); + m_program->write_dword(address+4, (UINT32)data); +} + + +//------------------------------------------------- +// state_string_export - export state as a string +// for the debugger +//------------------------------------------------- + +void mb86901_device::state_string_export(const device_state_entry &entry, std::string &str) const +{ + switch (entry.index()) + { + case STATE_GENFLAGS: + case SPARC_ICC: + str = string_format("%c%c%c%c", ICC_N_SET ? 'n' : ' ', ICC_Z_SET ? 'z' : ' ', ICC_V_SET ? 'v' : ' ', ICC_C_SET ? 'c' : ' '); + break; + case SPARC_O0: case SPARC_O1: case SPARC_O2: case SPARC_O3: case SPARC_O4: case SPARC_O5: case SPARC_O6: case SPARC_O7: + str = string_format("%08X", m_dbgregs[entry.index() - SPARC_O0]); + break; + case SPARC_L0: case SPARC_L1: case SPARC_L2: case SPARC_L3: case SPARC_L4: case SPARC_L5: case SPARC_L6: case SPARC_L7: + str = string_format("%08X", m_dbgregs[8 + (entry.index() - SPARC_L0)]); + break; + case SPARC_I0: case SPARC_I1: case SPARC_I2: case SPARC_I3: case SPARC_I4: case SPARC_I5: case SPARC_I6: case SPARC_I7: + str = string_format("%08X", m_dbgregs[16 + (entry.index() - SPARC_I0)]); + break; + } +} + + +//------------------------------------------------- +// disasm_min_opcode_bytes - return the length +// of the shortest instruction, in bytes +//------------------------------------------------- + +UINT32 mb86901_device::disasm_min_opcode_bytes() const +{ + return 4; +} + + +//------------------------------------------------- +// disasm_max_opcode_bytes - return the length +// of the longest instruction, in bytes +//------------------------------------------------- + +UINT32 mb86901_device::disasm_max_opcode_bytes() const +{ + return 4; +} + + +//------------------------------------------------- +// disasm_disassemble - call the disassembly +// helper function +//------------------------------------------------- + +offs_t mb86901_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) +{ + extern CPU_DISASSEMBLE( sparc ); + return CPU_DISASSEMBLE_NAME(sparc)(this, buffer, pc, oprom, opram, options); +} + + +//************************************************************************** +// CORE EXECUTION LOOP +//************************************************************************** + +//------------------------------------------------- +// execute_min_cycles - return minimum number of +// cycles it takes for one instruction to execute +//------------------------------------------------- + +UINT32 mb86901_device::execute_min_cycles() const +{ + return 1; +} + + +//------------------------------------------------- +// execute_max_cycles - return maximum number of +// cycles it takes for one instruction to execute +//------------------------------------------------- + +UINT32 mb86901_device::execute_max_cycles() const +{ + return 4; +} + + +//------------------------------------------------- +// execute_input_lines - return the number of +// input/interrupt lines +//------------------------------------------------- + +UINT32 mb86901_device::execute_input_lines() const +{ + return 0; +} + + +//------------------------------------------------- +// execute_set_input - set the state of an input +// line during execution +//------------------------------------------------- + +void mb86901_device::execute_set_input(int inputnum, int state) +{ +} + + +//------------------------------------------------- +// save_restore_update_cwp - update cwp after +// a save or restore opcode with no trap taken +//------------------------------------------------- + +void mb86901_device::save_restore_update_cwp(UINT32 op, UINT8 new_cwp) +{ + UINT32 arg1 = RS1REG; + UINT32 arg2 = USEIMM ? SIMM13 : RS2REG; + + m_cwp = new_cwp; + MAKE_PSR; + update_gpr_pointers(); + + SET_RDREG(arg1 + arg2); +} + +//------------------------------------------------- +// execute_group2 - execute an opcode in group 2, +// mostly ALU ops +//------------------------------------------------- + +bool mb86901_device::execute_group2(UINT32 op) +{ + UINT32 arg1 = RS1REG; + UINT32 arg2 = USEIMM ? SIMM13 : RS2REG; + + switch (OP3) + { + case 0: // add + SET_RDREG(arg1 + arg2); + break; + case 1: // and + SET_RDREG(arg1 & arg2); + break; + case 2: // or + SET_RDREG(arg1 | arg2); + break; + case 3: // xor + SET_RDREG(arg1 ^ arg2); + break; + case 4: // sub + SET_RDREG(arg1 - arg2); + break; + case 5: // andn + SET_RDREG(arg1 & ~arg2); + break; + case 6: // orn + SET_RDREG(arg1 | ~arg2); + break; + case 7: // xnor + SET_RDREG(arg1 ^ ~arg2); + break; + case 8: // addx + SET_RDREG(arg1 + arg2 + (ICC_C_SET ? 1 : 0)); + break; +#if SPARCV8 + case 10: // umul, SPARCv8 + { + UINT64 result = (UINT64)arg1 * (UINT64)arg2; + Y = (UINT32)(result >> 32); + SET_RDREG((UINT32)result); + break; + } + case 11: // smul, SPARCv8 + { + INT64 result = (INT64)(INT32)arg1 * (INT64)(INT32)arg2; + Y = (UINT32)((UINT64)result >> 32); + SET_RDREG((UINT32)result); + break; + } +#endif + case 12: // subx + SET_RDREG(arg1 - arg2 - (ICC_C_SET ? 1 : 0)); + break; +#if SPARCV8 + case 14: // udiv, SPARCv8 + { + UINT64 dividend = ((UINT64)Y << 32) || arg1; + UINT32 divisor = arg2; + UINT64 quotient = dividend / divisor; + if (quotient > (0xffffffffL + (divisor - 1))) + { + quotient = 0xffffffff; + } + SET_RDREG((UINT32)quotient); + break; + } + case 15: // sdiv, SPARCv8 + { + INT64 dividend = ((INT64)(INT32)Y << 32) || arg1; + INT32 divisor = arg2; + INT64 quotient = dividend / divisor; + if (quotient > 0) + { + INT32 absdivisor = (divisor < 0) ? -divisor : divisor; + if (quotient > (0x7fffffffL + (absdivisor - 1))) + { + quotient = 0x7fffffff; + } + } + else if (quotient < 0) + { + if (quotient < (INT64)0xffffffff80000000L) + { + quotient = 0x80000000; + } + } + SET_RDREG((UINT32)quotient); + break; + } +#endif + case 16: // addcc + { + UINT32 result = arg1 + arg2; + TEST_ICC_NZ(result); + if ((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) + SET_ICC_V_FLAG; + if (result < arg1 || result < arg2) + SET_ICC_C_FLAG; + SET_RDREG(result); + break; + } + case 17: // andcc + { + UINT32 result = arg1 & arg2; + TEST_ICC_NZ(result); + SET_RDREG(result); + break; + } + case 18: // orcc + { + UINT32 result = arg1 | arg2; + TEST_ICC_NZ(result); + SET_RDREG(result); + break; + } + case 19: // xorcc + { + UINT32 result = arg1 ^ arg2; + TEST_ICC_NZ(result); + SET_RDREG(result); + break; + } + case 20: // subcc + { + UINT32 result = arg1 - arg2; + TEST_ICC_NZ(result); + if ((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) + SET_ICC_V_FLAG; + if (result > arg1) + SET_ICC_C_FLAG; + SET_RDREG(result); + break; + } + case 21: // andncc + { + UINT32 result = arg1 & ~arg2; + TEST_ICC_NZ(result); + SET_RDREG(result); + break; + } + case 22: // orncc + { + UINT32 result = arg1 | ~arg2; + TEST_ICC_NZ(result); + SET_RDREG(result); + break; + } + case 23: // xnorcc + { + UINT32 result = arg1 ^ ~arg2; + TEST_ICC_NZ(result); + SET_RDREG(result); + break; + } + case 24: // addxcc + { + UINT32 c = (ICC_C_SET ? 1 : 0); + UINT32 argt = arg2 + c; + UINT32 result = arg1 + argt; + TEST_ICC_NZ(result); + if (((arg1 & 0x80000000) == (argt & 0x80000000) && (arg1 & 0x80000000) != (result & 0x80000000)) || (c != 0 && arg2 == 0x7fffffff)) + SET_ICC_V_FLAG; + if (result < arg1 || result < arg2 || (result == arg1 && arg2 != 0)) + SET_ICC_C_FLAG; + SET_RDREG(result); + break; + } +#if SPARCV8 + case 26: // umulcc, SPARCv8 + { + UINT64 result = (UINT64)arg1 * (UINT64)arg2; + Y = (UINT32)(result >> 32); + TEST_ICC_NZ(result); + SET_RDREG((UINT32)result); + break; + } + case 27: // smulcc, SPARCv8 + { + INT64 result = (INT64)(INT32)arg1 * (INT64)(INT32)arg2; + Y = (UINT32)((UINT64)result >> 32); + TEST_ICC_NZ(result); + SET_RDREG((UINT32)result); + break; + } +#endif + case 28: // subxcc + { + UINT32 c = (ICC_C_SET ? 1 : 0); + UINT32 argt = arg2 - c; + UINT32 result = arg1 - argt; + TEST_ICC_NZ(result); + if (((arg1 & 0x80000000) == (argt & 0x80000000) && (arg1 & 0x80000000) != (result & 0x80000000)) || (c != 0 && arg2 == 0x80000000)) + SET_ICC_V_FLAG; + if (result > arg1 || (result == arg1 && arg2 != 0)) + SET_ICC_C_FLAG; + SET_RDREG(result); + break; + } +#if SPARCV8 + case 30: // udivcc, SPARCv8 + { + UINT64 dividend = ((UINT64)Y << 32) || arg1; + UINT32 divisor = arg2; + UINT64 quotient = dividend / divisor; + + bool v = false; + if (quotient > (0xffffffffL + (divisor - 1))) + { + quotient = 0xffffffff; + v = true; + } + + TEST_ICC_NZ((UINT32)quotient); + if (v) + ICC_V_SET; + + SET_RDREG((UINT32)quotient); + break; + } + case 31: // sdiv, SPARCv8 + { + INT64 dividend = ((INT64)(INT32)Y << 32) || arg1; + INT32 divisor = arg2; + INT64 quotient = dividend / divisor; + + bool v = false; + if (quotient > 0) + { + INT32 absdivisor = (divisor < 0) ? -divisor : divisor; + if (quotient > (0x7fffffffL + (absdivisor - 1))) + { + quotient = 0x7fffffff; + v = true; + } + } + else if (quotient < 0) + { + if (quotient < (INT64)0xffffffff80000000L) + { + quotient = 0x80000000; + v = true; + } + } + + if (v) + ICC_V_SET; + TEST_ICC_NZ((UINT32)quotient); + + SET_RDREG((UINT32)quotient); + break; + } +#endif + case 32: // taddcc + { + UINT32 result = arg1 + arg2; + TEST_ICC_NZ(result); + if (((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) || ((arg1 & 3) != 0) || ((arg2 & 3) != 0)) + SET_ICC_V_FLAG; + if (result < arg1 || result < arg2) + SET_ICC_C_FLAG; + SET_RDREG(result); + break; + } + case 33: // tsubcc + { + UINT32 result = arg1 - arg2; + TEST_ICC_NZ(result); + if (((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) || ((arg1 & 3) != 0) || ((arg2 & 3) != 0)) + SET_ICC_V_FLAG; + if (result > arg1) + SET_ICC_C_FLAG; + SET_RDREG(result); + break; + } + case 34: // taddcctv + { + UINT32 result = arg1 + arg2; + bool v = ((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) || ((arg1 & 3) != 0) || ((arg2 & 3) != 0); + if (v) + { + trap(SPARC_TAG_OVERFLOW); + } + else + { + TEST_ICC_NZ(result); + if (result < arg1 || result < arg2) + SET_ICC_C_FLAG; + SET_RDREG(result); + } + break; + } + case 35: // tsubcctv + { + UINT32 result = arg1 - arg2; + bool v = ((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) || ((arg1 & 3) != 0) || ((arg2 & 3) != 0); + if (v) + { + trap(SPARC_TAG_OVERFLOW); + } + else + { + TEST_ICC_NZ(result); + if (result > arg1) + SET_ICC_C_FLAG; + SET_RDREG(result); + } + break; + } + case 36: // mulscc + { + // Explanatory quotes from The SPARC Architecture Manual Version 8, pg. 112 (pg. 110 in sparcv8.pdf) + + // (1) The multiplier is established as r[rs2] if the i field is zero, or sign_ext(simm13) if the i field is one. + UINT32 multiplier = arg2; + + // (2) A 32-bit value is computed by shifting r[rs1] right by one bit with "N xor V" from the PSR replacing the + // high-order bit. (This is the proper sign for the previous partial product.) + UINT32 rs1 = arg1; + bool n = ICC_N_SET; + bool v = ICC_V_SET; + UINT32 shifted = (rs1 >> 1) | ((n ^ v) ? 0x80000000 : 0); + + if (m_y & 1) + { // (3) If the least significant bit of the Y register = 1, the shifted value from step (2) is added to the multiplier. + arg1 = multiplier; + arg2 = shifted; + } + else + { // If the LSB of the Y register = 0, then 0 is added to the shifted value from step (2). + arg1 = shifted; + arg2 = 0; + } + + // (4) The sum from step (3) is written into r[rd]. + UINT32 result = arg1 + arg2; + SET_RDREG(result); + + // (5) The integer condition codes, icc, are updated according to the addition performed in step (3). + TEST_ICC_NZ(result); + if ((arg1 & 0x80000000) == (arg2 & 0x80000000) && (arg2 & 0x80000000) != (result & 0x80000000)) + SET_ICC_V_FLAG; + if (result < arg1 || result < arg2) + SET_ICC_C_FLAG; + + // (6) The Y register is shifted right by one bit, with the LSB of the unshifted r[rs1] replacing the MSB of Y. + m_y = (m_y >> 1) | ((rs1 & 1) ? 0x80000000 : 0); + break; + } + case 37: // sll + SET_RDREG(arg1 << arg2); + break; + case 38: // srl + SET_RDREG(arg1 >> arg2); + break; + case 39: // sra + SET_RDREG(INT32(arg1) >> arg2); + break; + case 40: // rdy + if (RS1 == 0) + { // rd y + SET_RDREG(m_y); + } +#if SPARCV8 + else if (RS1 == 15 && RD == 0) + { // stbar, SPARCv8 + // no-op, as this implementation assumes Total Store Ordering + } + else + { // rd asr, SPARCv8 + logerror("Unimplemented instruction: rd asr"); + } +#endif + break; + case 41: // rd psr + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + SET_RDREG(m_psr); + } + break; + case 42: // rd wim + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + SET_RDREG(m_wim); + } + break; + case 43: // rd tbr + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + SET_RDREG(m_tbr); + } + break; + case 48: + if (RD == 0) + { // wr y + m_y = arg1 ^ arg2; + } +#if SPARCV8 + else + { // wr asr, SPARCv8 + logerror("Unimplemented instruction: wr asr"); + } +#endif + break; + case 49: // wr psr + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + UINT32 new_psr = (arg1 ^ arg2) & ~PSR_ZERO_MASK; + if ((new_psr & PSR_CWP_MASK) >= WINDOW_COUNT) + { + trap(SPARC_ILLEGAL_INSTRUCTION); + } + else + { + m_psr = new_psr; + BREAK_PSR; + } + } + break; + case 50: // wr wim + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + m_wim = (arg1 ^ arg2) & 0x7f; + } + break; + case 51: // wr tbr + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + m_tbr = (arg1 ^ arg2) & 0xfffff000; + } + break; + case 52: // FPop1 + if (FPU_DISABLED) + { + trap(SPARC_FLOATING_POINT_DISABLED); + } + break; + case 53: // FPop2 + if (FPU_DISABLED) + { + trap(SPARC_FLOATING_POINT_DISABLED); + } + break; + case 56: // jmpl + { + UINT32 addr = ADDRESS; + m_icount--; + if (addr & 3) + { + trap(SPARC_MEM_ADDRESS_NOT_ALIGNED); + } + else + { + SET_RDREG(PC); + PC = nPC; + nPC = addr; + return false; + } + break; + } + case 57: // rett + { + UINT8 new_cwp = (m_cwp + 1) % WINDOW_COUNT; + if (TRAPS_ENABLED) + { + if (IS_USER) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + } + else + { + trap(SPARC_ILLEGAL_INSTRUCTION); + } + break; + } + else + { + if (IS_USER) + { + trap(SPARC_RESET, SPARC_PRIVILEGED_INSTRUCTION); + break; + } + else if (m_wim & (1 << new_cwp)) + { + trap(SPARC_RESET, SPARC_WINDOW_UNDERFLOW); + break; + } + else if (ADDRESS & 3) + { + trap(SPARC_RESET, SPARC_MEM_ADDRESS_NOT_ALIGNED); + break; + } + } + + m_cwp = new_cwp; + + m_s = m_ps; + m_insn_asi = m_s ? 9 : 8; + m_data_asi = m_s ? 11 : 10; + m_et = true; + + UINT32 target = arg1 + arg2; + PC = nPC; + nPC = target; + return false; + } + case 58: // ticc + return execute_ticc(op); +#if SPARCV8 + case 59: + // SPARCv8 + if (RD == 0) + { // flush, SPARCv8 + } + break; +#endif + case 60: // save + { + UINT8 new_cwp = ((m_cwp + WINDOW_COUNT) - 1) % WINDOW_COUNT; + if (m_wim & (1 << new_cwp)) + { + trap(SPARC_WINDOW_OVERFLOW); + } + else + { + save_restore_update_cwp(op, new_cwp); + } + break; + } + case 61: // restore + { + UINT8 new_cwp = (m_cwp + 1) % WINDOW_COUNT; + if (m_wim & (1 << new_cwp)) + { + trap(SPARC_WINDOW_UNDERFLOW); + } + else + { + save_restore_update_cwp(op, new_cwp); + } + break; + } + default: + trap(SPARC_ILLEGAL_INSTRUCTION); + break; + } + + return true; +} + + + +//------------------------------------------------- +// update_gpr_pointers - cache pointers to +// the registers in our current window +//------------------------------------------------- + +void mb86901_device::update_gpr_pointers() +{ + for (int i = 0; i < 8; i++) + { + m_regs[ 8 + i] = &m_r[8 + (( 0 + m_cwp * 16 + i) % (WINDOW_COUNT * 16))]; + m_regs[16 + i] = &m_r[8 + (( 8 + m_cwp * 16 + i) % (WINDOW_COUNT * 16))]; + m_regs[24 + i] = &m_r[8 + ((16 + m_cwp * 16 + i) % (WINDOW_COUNT * 16))]; + } +} + +bool mb86901_device::check_main_traps(UINT32 op, bool privileged, UINT32 alignment, UINT8 registeralign, bool noimmediate) +{ + bool trap_queued = false; + if (privileged && !m_s) + { + trap(SPARC_PRIVILEGED_INSTRUCTION); + trap_queued = true; + } + if (alignment & ADDRESS) + { + trap(SPARC_MEM_ADDRESS_NOT_ALIGNED); + trap_queued = true; + } + if ((registeralign & RD) || (noimmediate && USEIMM)) + { + trap(SPARC_ILLEGAL_INSTRUCTION); + trap_queued = true; + } + return trap_queued; +} + +//------------------------------------------------- +// execute_group3 - execute an opcode in group 3 +// (load/store) +//------------------------------------------------- + +void mb86901_device::execute_group3(UINT32 op) +{ + static const int ldst_cycles[64] = { + 1, 1, 1, 2, 2, 2, 2, 3, + 0, 1, 1, 0, 0, 3, 0, 0, + 1, 1, 1, 2, 2, 2, 2, 3, + 0, 1, 1, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + + switch (OP3) + { + case 0: // ld + { + check_main_traps(op, false, 3, 0, false); + UINT32 result = read_word(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 1: // ldub + { + UINT32 result = read_byte(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 2: // lduh + { + check_main_traps(op, false, 1, 0, false); + UINT32 result = read_half(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 3: // ldd + { + check_main_traps(op, false, 7, 1, false); + UINT32 result = read_word(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + result = read_word(m_data_asi, ADDRESS+4); + if (MAE || HOLD_BUS) + break; + REG(RD+1) = result; + break; + } + case 4: // st + check_main_traps(op, false, 3, 0, false); + write_word(m_data_asi, ADDRESS, RDREG); + break; + case 5: // stb + write_byte(m_data_asi, ADDRESS, UINT8(RDREG)); + break; + case 6: // sth + check_main_traps(op, false, 1, 0, false); + write_word(m_data_asi, ADDRESS, UINT16(RDREG)); + break; + case 7: // std + check_main_traps(op, false, 7, 1, false); + write_word(m_data_asi, ADDRESS, RDREG); + if (MAE || HOLD_BUS) + break; + write_word(m_data_asi, ADDRESS, REG(RD+1)); + break; + case 9: // ldsb + { + UINT32 result = read_signed_byte(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 10: // lsdh + { + check_main_traps(op, false, 1, 0, false); + UINT32 result = read_signed_half(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 13: // ldstub + { + UINT32 result = read_byte(m_data_asi, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + write_byte(m_data_asi, ADDRESS, 0xff); + break; + } + case 15: // swap, SPARCv8 + break; + case 16: // lda + { + check_main_traps(op, true, 3, 0, true); + UINT32 result = read_word(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 17: // lduba + { + check_main_traps(op, true, 0, 0, true); + UINT32 result = read_byte(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 18: // lduha + { + check_main_traps(op, true, 1, 0, true); + UINT32 result = read_half(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 19: // ldda + { + check_main_traps(op, true, 7, 1, true); + UINT32 result = read_word(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + result = read_word(ASI, ADDRESS+4); + if (MAE || HOLD_BUS) + break; + REG(RD+1) = result; + break; + } + case 20: // sta + check_main_traps(op, true, 3, 0, true); + write_word(ASI, ADDRESS, RDREG); + break; + case 21: // stba + check_main_traps(op, true, 0, 0, true); + write_byte(ASI, ADDRESS, UINT8(RDREG)); + break; + case 22: // stha + check_main_traps(op, true, 1, 0, true); + write_half(ASI, ADDRESS, UINT16(RDREG)); + break; + case 23: // stda + check_main_traps(op, true, 7, 1, true); + write_word(ASI, ADDRESS, RDREG); + if (MAE || HOLD_BUS) + break; + write_word(ASI, ADDRESS+4, REG(RD+1)); + break; + case 25: // ldsba + { + check_main_traps(op, true, 0, 0, true); + UINT32 result = read_signed_byte(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 26: // ldsha + { + check_main_traps(op, true, 1, 0, true); + UINT32 result = read_signed_half(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + break; + } + case 29: // ldstuba + { + check_main_traps(op, true, 0, 0, true); + UINT32 result = read_byte(ASI, ADDRESS); + if (MAE || HOLD_BUS) + break; + SET_RDREG(result); + write_byte(ASI, ADDRESS, 0xff); + break; + } + case 31: // swapa, SPARCv8 + break; + case 32: // ld fpr + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 33: // ld fsr + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 35: // ldd fpr + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 36: // st fpr + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 37: // st fsr + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 38: // std fq, SPARCv8 + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 39: // std fpr + if (FPU_DISABLED) + trap(SPARC_FLOATING_POINT_DISABLED); + break; + case 40: // ld cpr, SPARCv8 + break; + case 41: // ld csr, SPARCv8 + break; + case 43: // ldd cpr, SPARCv8 + break; + case 44: // st cpr, SPARCv8 + break; + case 45: // st csr, SPARCv8 + break; + case 46: // std cq, SPARCv8 + break; + case 47: // std cpr, SPARCv8 + break; + } + + if (MAE || HOLD_BUS) + m_icount--; + else + m_icount -= ldst_cycles[OP3]; +} + + +//------------------------------------------------- +// evaluate_condition - evaluate a given integer +// condition code +//------------------------------------------------- + +bool mb86901_device::evaluate_condition(UINT32 op) +{ + bool take = false; + bool n = ICC_N_SET; + bool z = ICC_Z_SET; + bool v = ICC_V_SET; + bool c = ICC_C_SET; + + switch(COND & 7) // COND & 8 + { // 0 8 + case 0: take = false; break; // bn ba + case 1: take = z; break; // bz bne + case 2: take = z | (n ^ z); break; // ble bg + case 3: take = n ^ z; break; // bl bge + case 4: take = c | z; break; // bleu bgu + case 5: take = c; break; // bcs bcc + case 6: take = n; break; // bneg bpos + case 7: take = v; break; // bvs bvc + } + + if (COND & 8) + take = !take; + + return take; +} + +//------------------------------------------------- +// execute_bicc - execute a branch opcode +//------------------------------------------------- + +bool mb86901_device::execute_bicc(UINT32 op) +{ + bool branch_taken = evaluate_condition(op); + + if (branch_taken) + { + UINT32 brpc = PC + DISP22; + PC = nPC; + nPC = brpc; + return false; + } + else + { + m_icount--; + } + + if (ANNUL && (!branch_taken || COND == 8)) + { + PC = nPC; + nPC = PC + 4; + m_icount -= 1; + return false; + } + + return true; +} + + +//------------------------------------------------- +// execute_ticc - execute a conditional trap +//------------------------------------------------- + +bool mb86901_device::execute_ticc(UINT32 op) +{ + bool trap_taken = evaluate_condition(op); + + if (trap_taken) + { + UINT32 arg2 = USEIMM ? SIMM7 : RS2REG; + UINT8 tt = 128 + ((RS1REG + arg2) & 0x7f); + trap(SPARC_TRAP_INSTRUCTION, tt); + m_icount -= 3; + return false; + } + + return true; +} + + +//------------------------------------------------- +// trap - flag an incoming trap of a given +// type +//------------------------------------------------- + +void mb86901_device::trap(UINT8 type, UINT8 tt_override) +{ + if (type == SPARC_RESET) + { + m_queued_priority = m_trap_priorities[0]; + m_queued_tt = tt_override; + } + else + { + if (type == SPARC_TRAP_INSTRUCTION) + { + type = tt_override; + } + + if (type >= SPARC_INT1 && type <= SPARC_INT14) + { + if (!ET) + return; + int irl = (type - SPARC_INT1) + 1; + if (irl <= PIL) + return; + } + if (m_trap_priorities[type] < m_queued_priority) + { + m_queued_priority = m_trap_priorities[type]; + m_queued_tt = type; + } + } +} + + +//------------------------------------------------- +// invoke_queued_traps - prioritize and invoke +// traps that have been queued by the previous +// instruction, if any. Returns true if a trap +// was invoked. +//------------------------------------------------- + +bool mb86901_device::invoke_queued_traps() +{ + if (m_queued_priority > 0) + { + m_queued_priority = 0; + m_queued_tt = 0; + + m_et = false; + m_ps = m_s; + m_s = true; + m_cwp = ((m_cwp + WINDOW_COUNT) - 1) % WINDOW_COUNT; + + MAKE_PSR; + update_gpr_pointers(); + + REG(17) = PC; + REG(18) = nPC; + + m_tbr |= m_queued_tt << 4; + + PC = m_tbr; + nPC = m_tbr + 4; + return true; + } + + return false; +} + + +//------------------------------------------------- +// execute_run - execute a timeslice's worth of +// opcodes +//------------------------------------------------- + +void mb86901_device::execute_run() +{ + bool debug = machine().debug_flags & DEBUG_FLAG_ENABLED; + + while (m_icount > 0) + { + bool trap_was_queued = invoke_queued_traps(); + if (trap_was_queued) + { + m_icount -= 4; + continue; + } + + debugger_instruction_hook(this, m_pc); + + if (HOLD_BUS) + { + m_icount--; + continue; + } + UINT32 op = GET_OPCODE; + + bool update_npc = true; + + switch (OP) + { + case 0: // Bicc, SETHI, FBfcc + switch (OP2) + { + case 0: // unimp + break; + case 2: // branch on integer condition codes + update_npc = execute_bicc(op); + break; + case 4: // sethi + SET_RDREG(IMM22); + break; + case 6: // branch on floating-point condition codes + break; +#if SPARCV8 + case 7: // branch on coprocessor condition codes, SPARCv8 + break; +#endif + default: + break; + } + break; + case 1: // call + { + UINT32 pc = PC; + UINT32 callpc = PC + DISP30; + PC = nPC; + nPC = callpc; + + REG(15) = pc; + + update_npc = false; + break; + } + case 2: + update_npc = execute_group2(op); + break; + case 3: // loads, stores + execute_group3(op); + break; + default: + break; + } + + REG(0) = 0; + + bool trap_taken = invoke_queued_traps(); + if (!trap_taken && update_npc && !HOLD_BUS) + { + PC = nPC; + nPC = PC + 4; + } + + if (debug) + { + for (int i = 0; i < 8; i++) + { + m_dbgregs[i] = *m_regs[8 + i]; + m_dbgregs[8 + i] = *m_regs[16 + i]; + m_dbgregs[16 + i] = *m_regs[24 + i]; + } + } + --m_icount; + } +} diff --git a/src/devices/cpu/sparc/sparc.h b/src/devices/cpu/sparc/sparc.h new file mode 100644 index 00000000000..324d46137a9 --- /dev/null +++ b/src/devices/cpu/sparc/sparc.h @@ -0,0 +1,194 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + SPARC v7 emulator +*/ + +#pragma once + +#ifndef __SPARC_H__ +#define __SPARC_H__ + +#define SPARC_RESET 0 +#define SPARC_INSTRUCTION_ACCESS_EXCEPTION 1 +#define SPARC_ILLEGAL_INSTRUCTION 2 +#define SPARC_PRIVILEGED_INSTRUCTION 3 +#define SPARC_FLOATING_POINT_DISABLED 4 +#define SPARC_WINDOW_OVERFLOW 5 +#define SPARC_WINDOW_UNDERFLOW 6 +#define SPARC_MEM_ADDRESS_NOT_ALIGNED 7 +#define SPARC_FLOATING_POINT_EXCEPTION 8 +#define SPARC_DATA_ACCESS_EXCEPTION 9 +#define SPARC_TAG_OVERFLOW 10 +#define SPARC_INT1 17 +#define SPARC_INT2 18 +#define SPARC_INT3 19 +#define SPARC_INT4 20 +#define SPARC_INT5 21 +#define SPARC_INT6 22 +#define SPARC_INT7 23 +#define SPARC_INT8 24 +#define SPARC_INT9 25 +#define SPARC_INT10 26 +#define SPARC_INT11 27 +#define SPARC_INT12 28 +#define SPARC_INT13 29 +#define SPARC_INT14 30 +#define SPARC_INT15 31 +#define SPARC_TRAP_INSTRUCTION 128 + +class mb86901_device : public cpu_device +{ +public: + mb86901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_stop() override; + + // device_execute_interface overrides + virtual UINT32 execute_min_cycles() const override; + virtual UINT32 execute_max_cycles() const override; + virtual UINT32 execute_input_lines() const override; + virtual void execute_run() override; + virtual void execute_set_input(int inputnum, int state) override; + + // device_memory_interface overrides + virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; + + // device_disasm_interface overrides + virtual UINT32 disasm_min_opcode_bytes() const override; + virtual UINT32 disasm_max_opcode_bytes() const override; + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) override; + + // device_state_interface overrides + virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; + + UINT8 get_asi() { return m_asi; } + UINT32 pc() { return m_pc; } + + void trap(UINT8 type, UINT8 tt_override = 0); + void set_mae() { m_mae = true; } + void hold_bus() { m_hold_bus = true; } + void release_bus() { m_hold_bus = false; } + +protected: + bool invoke_queued_traps(); + bool check_main_traps(UINT32 op, bool privileged, UINT32 alignment, UINT8 registeralign, bool noimmediate); + + void update_gpr_pointers(); + void save_restore_update_cwp(UINT32 op, UINT8 new_cwp); + bool execute_group2(UINT32 op); + void execute_group3(UINT32 op); + bool execute_bicc(UINT32 op); + bool execute_ticc(UINT32 op); + bool evaluate_condition(UINT32 op); + + // address spaces + const address_space_config m_program_config; + + // memory access + UINT32 read_byte(UINT8 asi, UINT32 address); + INT32 read_signed_byte(UINT8 asi, UINT32 address); + UINT32 read_half(UINT8 asi, UINT32 address); + INT32 read_signed_half(UINT8 asi, UINT32 address); + UINT32 read_word(UINT8 asi, UINT32 address); + UINT64 read_doubleword(UINT8 asi, UINT32 address); + void write_byte(UINT8 asi, UINT32 address, UINT8 data); + void write_half(UINT8 asi, UINT32 address, UINT16 data); + void write_word(UINT8 asi, UINT32 address, UINT32 data); + void write_doubleword(UINT8 asi, UINT32 address, UINT64 data); + + // general-purpose registers + UINT32 m_r[120]; + + // control/status registers + UINT32 m_pc; + UINT32 m_npc; + UINT32 m_psr; + UINT32 m_wim; + UINT32 m_tbr; + UINT32 m_y; + + // fields separated out from PSR (Processor State Register) + UINT8 m_impl; // implementation (always 0 in MB86901) + UINT8 m_ver; // version (always 0 in MB86901) + UINT8 m_icc; // integer condition codes + bool m_ec; // enable coprocessor + bool m_ef; // enable FPU + UINT8 m_pil; // processor interrupt level + bool m_s; // supervisor mode + bool m_ps; // prior S state + bool m_et; // enable traps + UINT8 m_cwp; // current window pointer + + // register windowing helpers + UINT32* m_regs[32]; + + // addressing helpers + UINT8 m_insn_asi; + UINT8 m_data_asi; + UINT8 m_asi; + + // other internal states + UINT8 m_trap_priorities[256]; + UINT8 m_queued_tt; + UINT8 m_queued_priority; + bool m_mae; + bool m_hold_bus; + int m_icount; + + // debugger helpers + UINT32 m_dbgregs[24]; + + // address spaces + address_space *m_program; + + // processor configuration + static const int WINDOW_COUNT; +}; + +// device type definition +extern const device_type MB86901; + +/*************************************************************************** + REGISTER ENUMERATION +***************************************************************************/ + +enum +{ + SPARC_PC = 1, + SPARC_NPC, + SPARC_PSR, + SPARC_WIM, + SPARC_TBR, + SPARC_Y, + + SPARC_ICC, + SPARC_CWP, + + SPARC_G0, SPARC_G1, SPARC_G2, SPARC_G3, SPARC_G4, SPARC_G5, SPARC_G6, SPARC_G7, + SPARC_O0, SPARC_O1, SPARC_O2, SPARC_O3, SPARC_O4, SPARC_O5, SPARC_O6, SPARC_O7, + SPARC_L0, SPARC_L1, SPARC_L2, SPARC_L3, SPARC_L4, SPARC_L5, SPARC_L6, SPARC_L7, + SPARC_I0, SPARC_I1, SPARC_I2, SPARC_I3, SPARC_I4, SPARC_I5, SPARC_I6, SPARC_I7, + + SPARC_EC, + SPARC_EF, + SPARC_ET, + SPARC_PIL, + SPARC_S, + SPARC_PS, + + SPARC_R0, SPARC_R1, SPARC_R2, SPARC_R3, SPARC_R4, SPARC_R5, SPARC_R6, SPARC_R7, SPARC_R8, SPARC_R9, SPARC_R10, SPARC_R11, SPARC_R12, SPARC_R13, SPARC_R14, SPARC_R15, + SPARC_R16, SPARC_R17, SPARC_R18, SPARC_R19, SPARC_R20, SPARC_R21, SPARC_R22, SPARC_R23, SPARC_R24, SPARC_R25, SPARC_R26, SPARC_R27, SPARC_R28, SPARC_R29, SPARC_R30, SPARC_R31, + SPARC_R32, SPARC_R33, SPARC_R34, SPARC_R35, SPARC_R36, SPARC_R37, SPARC_R38, SPARC_R39, SPARC_R40, SPARC_R41, SPARC_R42, SPARC_R43, SPARC_R44, SPARC_R45, SPARC_R46, SPARC_R47, + SPARC_R48, SPARC_R49, SPARC_R50, SPARC_R51, SPARC_R52, SPARC_R53, SPARC_R54, SPARC_R55, SPARC_R56, SPARC_R57, SPARC_R58, SPARC_R59, SPARC_R60, SPARC_R61, SPARC_R62, SPARC_R63, + SPARC_R64, SPARC_R65, SPARC_R66, SPARC_R67, SPARC_R68, SPARC_R69, SPARC_R70, SPARC_R71, SPARC_R72, SPARC_R73, SPARC_R74, SPARC_R75, SPARC_R76, SPARC_R77, SPARC_R78, SPARC_R79, + SPARC_R80, SPARC_R81, SPARC_R82, SPARC_R83, SPARC_R84, SPARC_R85, SPARC_R86, SPARC_R87, SPARC_R88, SPARC_R89, SPARC_R90, SPARC_R91, SPARC_R92, SPARC_R93, SPARC_R94, SPARC_R95, + SPARC_R96, SPARC_R97, SPARC_R98, SPARC_R99, SPARC_R100, SPARC_R101, SPARC_R102, SPARC_R103, SPARC_R104, SPARC_R105, SPARC_R106, SPARC_R107, SPARC_R108, SPARC_R109, SPARC_R110, SPARC_R111 +}; + +CPU_DISASSEMBLE( sparc ); + +#endif /* __SPARC_H__ */ diff --git a/src/devices/cpu/sparc/sparcdasm.cpp b/src/devices/cpu/sparc/sparcdasm.cpp new file mode 100644 index 00000000000..b17e1754ba7 --- /dev/null +++ b/src/devices/cpu/sparc/sparcdasm.cpp @@ -0,0 +1,594 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +/* + SPARC v7 disassembler +*/ + +#include "emu.h" +#include "sparcdefs.h" + +static void print(char *output, const char *fmt, ...) +{ + va_list vl; + + va_start(vl, fmt); + output += vsprintf(output, fmt, vl); + va_end(vl); +} + +#define INVALFMT "%s; op:%08x rs1:%d rd:%d simm13:%d i:%d asi:%d rs2:%d" + +static const char * const regnames[32] = { + "%g0", "%g1", "%g2", "%g3", "%g4", "%g5", "%g6", "%g7", + "%o0", "%o1", "%o2", "%o3", "%o4", "%o5", "%o6", "%o7", + "%l0", "%l1", "%l2", "%l3", "%l4", "%l5", "%l6", "%l7", + "%i0", "%i1", "%i2", "%i3", "%i4", "%i5", "%i6", "%i7" +}; + +void sparc_dasm_address(char* address, UINT32 op) +{ + char rs1[128]; + memset(rs1, 0, 128); + bool rs1present = false; + if (RS1 != 0) + { + rs1present = true; + print(rs1, "%s", regnames[RS1]); + } + + char rs2[128]; + memset(rs2, 0, 128); + if (USEIMM) + { + if (SIMM13 != 0) + { + UINT32 val = SIMM13 & 0x00001fff; + if (SIMM13 < 0) + { + print(rs2, "-0x%x", val); + } + else + { + print(rs2, "0x%x", val); + } + } + else if (!rs1present) + { + print(rs2, "0x0"); + } + } + else + { + if (RS2 != 0) + { + if (rs1present) + { + print(rs2, "+%s", regnames[RS2]); + } + else + { + print(rs2, "%s", regnames[RS2]); + } + } + else if (!rs1present) + { + print(rs2, "%s", regnames[RS2]); + } + } + print(address, "[%s%s]", rs1, rs2); +} + +void sparc_dasm_fpop1(char *buffer, UINT32 op) +{ + switch (OPF) + { + case 0x01: print(buffer, "fmovs %%f%d,%%f%d", RS2, RD); break; + case 0x05: print(buffer, "fnegs %%f%d,%%f%d", RS2, RD); break; + case 0x09: print(buffer, "fabss %%f%d,%%f%d", RS2, RD); break; + case 0x29: print(buffer, "fsqrts %%f%d,%%f%d", RS2, RD); break; + case 0x2a: print(buffer, "fsqrtd %%f%d,%%f%d", RS2, RD); break; + case 0x2b: print(buffer, "fsqrtq %%f%d,%%f%d", RS2, RD); break; + case 0x41: print(buffer, "fadds %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x42: print(buffer, "faddd %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x43: print(buffer, "faddq %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x45: print(buffer, "fsubs %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x46: print(buffer, "fsubd %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x47: print(buffer, "fsubq %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x49: print(buffer, "fmuls %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x4a: print(buffer, "fmuld %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x4b: print(buffer, "fmulq %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x4d: print(buffer, "fdivs %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x4e: print(buffer, "fdivd %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x4f: print(buffer, "fdivq %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x69: print(buffer, "fsmuld %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0x6e: print(buffer, "fdmulq %%f%d,%%f%d,%%f%d", RS1, RS2, RD); break; + case 0xc4: print(buffer, "fitos %%f%d,%%f%d", RS2, RD); break; + case 0xc6: print(buffer, "fdtos %%f%d,%%f%d", RS2, RD); break; + case 0xc7: print(buffer, "fqtos %%f%d,%%f%d", RS2, RD); break; + case 0xc8: print(buffer, "fitod %%f%d,%%f%d", RS2, RD); break; + case 0xc9: print(buffer, "fstod %%f%d,%%f%d", RS2, RD); break; + case 0xcb: print(buffer, "fqtod %%f%d,%%f%d", RS2, RD); break; + case 0xcc: print(buffer, "fitoq %%f%d,%%f%d", RS2, RD); break; + case 0xcd: print(buffer, "fstoq %%f%d,%%f%d", RS2, RD); break; + case 0xce: print(buffer, "fdtoq %%f%d,%%f%d", RS2, RD); break; + case 0xd1: print(buffer, "fstoi %%f%d,%%f%d", RS2, RD); break; + case 0xd2: print(buffer, "fdtoi %%f%d,%%f%d", RS2, RD); break; + case 0xd3: print(buffer, "fqtoi %%f%d,%%f%d", RS2, RD); break; + } +} + +void sparc_dasm_ldst(char *buffer, UINT32 op) +{ + static const char * const ldstnames[64] = { + "ld ", "ldub ", "lduh ", "ldd ", "st ", "stb ", "sth ", "std ", + "invalid ", "ldsb ", "ldsh ", "invalid ", "invalid ", "ldstub ", "invalid ", "swap ", + "lda ", "lduba ", "lduha ", "ldda ", "sta ", "stba ", "stha ", "stda ", + "invalid ", "ldsba ", "ldsha ", "invalid ", "invalid ", "ldstuba ", "invalid ", "swapa ", + "ld ", "ld ", "invalid ", "ldd ", "st ", "st ", "std ", "std ", + "ld ", "ld ", "invalid ", "ldd ", "st ", "st ", "std ", "std ", + "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", + "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", "invalid ", "invalid " + }; + + static const int LOAD = 0; + static const int STORE = 1; + static const int LOAD_ALT = 2; + static const int STORE_ALT = 3; + static const int LOAD_PR = 4; + static const int STORE_PR = 5; + static const int LDST_SR = 6; + static const int INVALID = 7; + + static const int ldsttype[64] = { + LOAD, LOAD, LOAD, LOAD, STORE, STORE, STORE, STORE, + INVALID, LOAD, LOAD, INVALID, INVALID, LOAD, INVALID, LOAD, + LOAD_ALT, LOAD_ALT, LOAD_ALT, LOAD_ALT, STORE_ALT, STORE_ALT, STORE_ALT, STORE_ALT, + INVALID, LOAD_ALT, LOAD_ALT, INVALID, INVALID, LOAD_ALT, INVALID, LOAD_ALT, + LOAD_PR, LDST_SR, INVALID, LOAD_PR, STORE_PR, LDST_SR, LDST_SR, STORE_PR, + LOAD_PR, LDST_SR, INVALID, LOAD_PR, STORE_PR, LDST_SR, LDST_SR, STORE_PR, + INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, + INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, + }; + + static const char * const ldstformats[64] = { + "%s%s,%s", "%s%s,%s", "%s%s,%s", "%s%s,%s", "%s%s,%s", "%s%s,%s", "%s%s,%s", "%s%s,%s", + INVALFMT, "%s%s,%s", "%s%s,%s", INVALFMT, INVALFMT, "%s%s,%s", INVALFMT, "%s%s,%s", + "%s%s%d,%s", "%s%s%d,%s", "%s%s%d,%s", "%s%s%d,%s", "%s%s,%s%d", "%s%s,%s%d", "%s%s,%s%d", "%s%s,%s%d", + INVALFMT, "%s%s%d,%s", "%s%s%d,%s", INVALFMT, INVALFMT, "%s%s%d,%s", INVALFMT, "%s%s%d,%s", + "%s%s,%%f%d", "%s%s,%%fsr", INVALFMT, "%s%s,%%f%d", "%s%%f%d,%s", "%s%%fsr,%s", "%s%%fq,%s", "%s%%f%d,%s", + "%s%s,%%c%d", "%s%s,%%csr", INVALFMT, "%s%s,%%c%d", "%s%%c%d,%s", "%s%%csr,%s", "%s%%cq,%s", "%s%%c%d,%s", + INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, + INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, INVALFMT, + }; + + char address[256]; + sparc_dasm_address(address, op); + + switch (ldsttype[OP3]) + { + case LOAD: print(buffer, ldstformats[OP3], ldstnames[OP3], address, regnames[RD]); break; + case STORE: print(buffer, ldstformats[OP3], ldstnames[OP3], regnames[RD], address); break; + case LOAD_ALT: print(buffer, ldstformats[OP3], ldstnames[OP3], address, ASI, regnames[RD]); break; + case STORE_ALT: print(buffer, ldstformats[OP3], ldstnames[OP3], regnames[RD], address, ASI); break; + case LOAD_PR: print(buffer, ldstformats[OP3], ldstnames[OP3], address, RD); break; + case STORE_PR: print(buffer, ldstformats[OP3], ldstnames[OP3], RD, address); break; + case LDST_SR: print(buffer, ldstformats[OP3], ldstnames[OP3], address); break; + default: print(buffer, ldstformats[OP3], ldstnames[OP3], op, RS1, RD, SIMM13, USEIMM, ASI, RS2); break; + } +} + +offs_t sparc_dasm(char *buffer, offs_t pc, UINT32 op) +{ + static const char * const branchnames[32] = { + "bn ", "be ", "ble ", "bl ", "bleu ", "bcs ", "bneg ", "bvs ", + "ba ", "bne ", "bg ", "bge ", "bgu ", "bcc ", "bpos ", "bvc ", + "bn,a ", "be,a ", "ble,a ", "bl,a ", "bleu,a ", "bcs,a ", "bneg,a ", "bvs,a ", + "ba,a ", "bne,a ", "bg,a ", "bge,a ", "bgu,a ", "bcc,a ", "bpos,a ", "bvc,a " + }; + static const char * const fpbranchnames[32] = { + "fbn ", "fbne ", "fblg ", "fbul ", "fbl ", "fbug ", "fbg ", "fbu ", + "fba ", "fbe ", "fbue ", "fbge ", "fbuge ", "fble ", "fbule ", "fbo ", + "fbn,a ", "fbne,a ", "fblg,a ", "fbul,a ", "fbl,a ", "fbug,a ", "fbg,a ", "fbu,a ", + "fba,a ", "fbe,a ", "fbue,a ", "fbge,a ", "fbuge,a ", "fble,a ", "fbule,a ", "fbo,a " + }; + static const char * const copbranchnames[32] = { + "cbn ", "cb123 ", "cb12 ", "cb13 ", "cb1 ", "cb23 ", "cb2 ", "cb3 ", + "cba ", "cb0 ", "cb03 ", "cb02 ", "cb023 ", "cb01 ", "cb013 ", "cb012 ", + "cbn,a ", "cb123,a ", "cb12,a ", "cb13,a ", "cb1,a ", "cb23,a ", "cb2,a ", "cb3,a ", + "cba,a ", "cb0,a ", "cb03,a ", "cb02,a ", "cb023,a ", "cb01,a ", "cb013,a ", "cb012,a " + }; + static const char * const trapnames[16] = { + "tn ", "te ", "tle ", "tl ", "tleu ", "tcs ", "tneg ", "tvs ", + "ta ", "tne ", "tg ", "tge ", "tgu ", "tcc ", "tpos ", "tvc " + }; + + switch (OP) + { + case 0: // Bicc, SETHI, FBfcc + switch (OP2) + { + case 0: // unimp + print(buffer, "unimp %06x", CONST22); + break; + case 2: // branch on integer condition codes + case 6: // branch on floating-point condition codes + case 7: // branch on coprocessor condition codes, SPARCv8 + { + int index = (ANNUL << 4) | COND; + char sign[2]; + memset(sign, 0, 2); + INT32 disp = DISP22; + if (disp < 0) + { + print(sign, "-"); + disp = -disp; + } + print(buffer, "%s%s0x%06x", (OP2 == 2) ? branchnames[index] : ((OP2 == 6) ? fpbranchnames[index] : copbranchnames[index]), sign, disp); + break; + } + case 4: // SETHI + if (IMM22 == 0 && RD == 0) + print(buffer, "nop "); + else + print(buffer, "sethi %%hi(0x%08x),%s", IMM22, regnames[RD]); + break; + default: + print(buffer, "invalid"); + break; + } + break; + case 1: // CALL + print(buffer, "call 0x%08x", DISP30); + break; + case 2: + if (USEIMM) + { + switch (OP3) + { + case 0: + if (RS1 == RD) + if (SIMM13 == 1) + print(buffer, "inc %s", regnames[RD]); + else + print(buffer, "inc %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "add %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 1: print(buffer, "and %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 2: + if (RS1 == 0) + print(buffer, "mov %d,%s", SIMM13, regnames[RD]); + else if (RS1 == RD) + print(buffer, "bset %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "or %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 3: + if (RS1 == RD) + print(buffer, "btog %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "xor %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 4: + if (RS1 == RD) + if (SIMM13 == 1) + print(buffer, "dec %s", regnames[RD]); + else + print(buffer, "dec %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "sub %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 5: + if (RS1 == RD) + print(buffer, "bclr %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "andn %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 6: print(buffer, "orn %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 7: + if (SIMM13 == 0) + if (RS1 == RD) + print(buffer, "not %s", regnames[RD]); + else + print(buffer, "not %s,%s", regnames[RS1], regnames[RD]); + else + print(buffer, "xnor %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 8: print(buffer, "addx %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 10: print(buffer, "umul %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 11: print(buffer, "smul %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 12: print(buffer, "subx %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 14: print(buffer, "udiv %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 15: print(buffer, "sdiv %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 16: + if (RS1 == RD) + if (SIMM13 == 1) + print(buffer, "inccc %s", regnames[RD]); + else + print(buffer, "inccc %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "addcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 17: + if (RD == 0) + print(buffer, "btst %d,%s", SIMM13, regnames[RS1]); + else + print(buffer, "andcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 18: print(buffer, "orcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 19: print(buffer, "xorcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 20: + if (RD == 0) + print(buffer, "cmp %s,%d", regnames[RS1], SIMM13); + else if (RS1 == RD) + if (SIMM13 == 1) + print(buffer, "deccc %s", regnames[RD]); + else + print(buffer, "deccc %d,%s", SIMM13, regnames[RD]); + else + print(buffer, "subcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 21: print(buffer, "andncc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 22: print(buffer, "orncc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 23: print(buffer, "xnorcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 24: print(buffer, "addxcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 26: print(buffer, "umulcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 27: print(buffer, "smulcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 28: print(buffer, "subxcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 30: print(buffer, "udivcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 31: print(buffer, "sdivcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; // SPARCv8 + case 32: print(buffer, "taddcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 33: print(buffer, "tsubcc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 34: print(buffer, "taddcctv %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 35: print(buffer, "tsubcctv %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 36: print(buffer, "mulscc %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 37: print(buffer, "sll %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 38: print(buffer, "srl %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 39: print(buffer, "sra %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 40: + if (RS1 == 0) + print(buffer, "rd %%y,%s", regnames[RD]); + else if (RS1 == 15 && RD == 0) + print(buffer, "stbar "); // SPARCv8 + else + print(buffer, "rd %%asr%d,%s", RS1, regnames[RD]); // SPARCv8 + break; + case 41: print(buffer, "rd %%psr,%s", regnames[RD]); break; + case 42: print(buffer, "rd %%wim,%s", regnames[RD]); break; + case 43: print(buffer, "rd %%tbr,%s", regnames[RD]); break; + case 48: + if (RD == 0) + print(buffer, "wr %s,%d,%%y", regnames[RS1], SIMM13); + else + print(buffer, "wr %s,%d,%%asr%d", regnames[RS1], SIMM13, RD); + break; + case 49: + if (RS1 == 0) + print(buffer, "wr %d,%%psr", SIMM13); + else + print(buffer, "wr %s,%d,%%psr", regnames[RS1], SIMM13); + break; + case 50: + if (RS1 == 0) + print(buffer, "wr %d,%%wim", SIMM13); + else + print(buffer, "wr %s,%d,%%wim", regnames[RS1], SIMM13); + break; + case 51: + if (RS1 == 0) + print(buffer, "wr %d,%%tbr", SIMM13); + else + print(buffer, "wr %s,%d,%%tbr", regnames[RS1], SIMM13); + break; + case 52: // FPop1 + sparc_dasm_fpop1(buffer, op); + break; + case 53: // FPop2 + switch (OPF) + { + case 0x51: print(buffer, "fcmps %%f%d,%%f%d", RS1, RS2); break; + case 0x52: print(buffer, "fcmpd %%f%d,%%f%d", RS1, RS2); break; + case 0x53: print(buffer, "fcmpq %%f%d,%%f%d", RS1, RS2); break; + case 0x55: print(buffer, "fcmpes %%f%d,%%f%d", RS1, RS2); break; + case 0x56: print(buffer, "fcmped %%f%d,%%f%d", RS1, RS2); break; + case 0x57: print(buffer, "fcmpeq %%f%d,%%f%d", RS1, RS2); break; + } + break; + case 56: + if (RS1 == 31 && SIMM13 == 8) + print(buffer, "ret "); + else if (RS1 == 15 && SIMM13 == 8) + print(buffer, "retl "); + else if (RD == 0) + print(buffer, "jmp %s,%d", regnames[RS1], SIMM13); + else if (RD == 15) + print(buffer, "call %s,%d", regnames[RS1], SIMM13); + else + print(buffer, "jmpl %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); + break; + case 57: + { + char address[256]; + sparc_dasm_address(address, op); + print(buffer, "rett %s", address); + break; + } + case 58: print(buffer, "%s%s,%d,%s", trapnames[COND], regnames[RS1], IMM7, regnames[RD]); break; + case 59: + if (RD == 0) + print(buffer, "flush %s.%d", regnames[RS1], SIMM13); // SPARCv8 + else + print(buffer, "invalid "); + break; + case 60: print(buffer, "save %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + case 61: print(buffer, "restore %s,%d,%s", regnames[RS1], SIMM13, regnames[RD]); break; + default: print(buffer, "invalid "); break; + } + } + else + { + switch (OP3) + { + case 0: print(buffer, "add %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 1: print(buffer, "and %s,%d,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 2: + if (RS1 == 0) + print(buffer, "mov %s,%s", regnames[RS2], regnames[RD]); + else if (RS1 == RD) + print(buffer, "bset %s,%s", regnames[RS2], regnames[RD]); + else + print(buffer, "or %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 3: + if (RS1 == RD) + print(buffer, "btog %s,%s", regnames[RS2], regnames[RD]); + else + print(buffer, "xor %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 4: print(buffer, "sub %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 5: + if (RS1 == RD) + print(buffer, "bclr %s,%s", regnames[RS2], regnames[RD]); + else + print(buffer, "andn %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 6: print(buffer, "orn %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 7: + if (RS2 == 0) + if (RS1 == RD) + print(buffer, "not %s", regnames[RD]); + else + print(buffer, "not %s,%s", regnames[RS1], regnames[RD]); + else + print(buffer, "xnor %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 8: print(buffer, "addx %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 10: print(buffer, "umul %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 11: print(buffer, "smul %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 12: print(buffer, "subx %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 14: print(buffer, "udiv %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 15: print(buffer, "sdiv %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 16: print(buffer, "addcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 17: + if (RD == 0) + print(buffer, "btst %s,%s", regnames[RS2], regnames[RS1]); + else + print(buffer, "andcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 18: print(buffer, "orcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 19: print(buffer, "xorcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 20: + if (RD == 0) + print(buffer, "cmp %s,%s", regnames[RS1], regnames[RS2]); + else + print(buffer, "subcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 21: print(buffer, "andncc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 22: print(buffer, "orncc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 23: print(buffer, "xnorcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 24: print(buffer, "addxcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 26: print(buffer, "umulcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 27: print(buffer, "smulcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 28: print(buffer, "subxcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 30: print(buffer, "udivcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 31: print(buffer, "sdivcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; // SPARCv8 + case 32: print(buffer, "taddcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 33: print(buffer, "tsubcc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 34: print(buffer, "taddcctv %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 35: print(buffer, "tsubcctv %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 36: print(buffer, "mulscc %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 37: print(buffer, "sll %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 38: print(buffer, "srl %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 39: print(buffer, "sra %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 40: + if (RS1 == 0) + print(buffer, "rd %%y,%s", regnames[RD]); + else if (RS1 == 15 && RD == 0) + print(buffer, "stbar "); // SPARCv8 + else + print(buffer, "rd %%asr%d,%s", RS1, regnames[RD]); // SPARCv8 + break; + case 41: print(buffer, "rd %%psr,%s", regnames[RD]); break; + case 42: print(buffer, "rd %%wim,%s", regnames[RD]); break; + case 43: print(buffer, "rd %%tbr,%s", regnames[RD]); break; + case 48: + if (RD == 0) + print(buffer, "wr %s,%s,%%y", regnames[RS1], regnames[RS2]); + else + print(buffer, "wr %s,%s,%%asr%d", regnames[RS1], regnames[RS2], RD); + break; + case 49: print(buffer, "wr %s,%s,%%psr", regnames[RS1], regnames[RS2]); break; + case 50: print(buffer, "wr %s,%s,%%wim", regnames[RS1], regnames[RS2]); break; + case 51: print(buffer, "wr %s,%s,%%tbr", regnames[RS1], regnames[RS2]); break; + case 52: // FPop1 + sparc_dasm_fpop1(buffer, op); + break; + case 53: // FPop2 + switch (OPF) + { + case 0x51: print(buffer, "fcmps %%f%d,%%f%d", RS1, RS2); break; + case 0x52: print(buffer, "fcmpd %%f%d,%%f%d", RS1, RS2); break; + case 0x53: print(buffer, "fcmpq %%f%d,%%f%d", RS1, RS2); break; + case 0x55: print(buffer, "fcmpes %%f%d,%%f%d", RS1, RS2); break; + case 0x56: print(buffer, "fcmped %%f%d,%%f%d", RS1, RS2); break; + case 0x57: print(buffer, "fcmpeq %%f%d,%%f%d", RS1, RS2); break; + } + break; + case 56: + if (RD == 0) + if (RS1 == 0 && RS2 == 0) + print(buffer, "jmp %s", regnames[RS1]); + else if (RS1 == 0) + print(buffer, "jmp %s", regnames[RS2]); + else if (RS2 == 0) + print(buffer, "jmp %s", regnames[RS1]); + else + print(buffer, "jmp %s,%s", regnames[RS1], regnames[RS2]); + else if (RD == 15) + print(buffer, "call %s,%s", regnames[RS1], regnames[RS2]); + else + print(buffer, "jmpl %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 57: print(buffer, "rett %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); break; + case 58: print(buffer, "%s%s,%s,%s", trapnames[COND], regnames[RS1], regnames[RS2], regnames[RD]); break; + case 59: + if (RD == 0) + print(buffer, "flush %s.%s", regnames[RS1], regnames[RS2]); // SPARCv8 + else + print(buffer, "invalid "); + break; + case 60: + if (RS1 == RS2 && RS2 == RD && RD == 0) + print(buffer, "save "); + else + print(buffer, "save %s,%s,%s", regnames[RS1], regnames[RS2], regnames[RD]); + break; + case 61: + if (RS1 == RS2 && RS2 == RD && RD == 0) + print(buffer, "restore "); + else + print(buffer, "restore %s,%s,%s", regnames[RS1], regnames[RS1], regnames[RD]); + break; + default: print(buffer, "invalid "); break; + } + } + break; + case 3: // loads, stores + sparc_dasm_ldst(buffer, op); + break; + default: + print(buffer, "invalid "); + break; + } + + return 4 | DASMFLAG_SUPPORTED; +} + +/*****************************************************************************/ + +CPU_DISASSEMBLE( sparc ) +{ + UINT32 op = *(UINT32 *)oprom; + op = BIG_ENDIANIZE_INT32(op); + return sparc_dasm(buffer, pc, op); +} diff --git a/src/devices/cpu/sparc/sparcdefs.h b/src/devices/cpu/sparc/sparcdefs.h new file mode 100644 index 00000000000..185845c1d4f --- /dev/null +++ b/src/devices/cpu/sparc/sparcdefs.h @@ -0,0 +1,122 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//================================================================ +// +// mb86901defs.h - Helpful #defines for emulating the MB86901 +// series of SPARC processor. +// +//================================================================ + +#pragma once + +#ifndef __MB86901_DEFS_H__ +#define __MB86901_DEFS_H__ + +#define GET_OPCODE 0; { m_asi = m_insn_asi; op = m_program->read_dword(m_pc); } + +#define PSR_CWP_MASK 0x0000001f +#define PSR_ET_SHIFT 5 +#define PSR_ET_MASK 0x00000020 +#define PSR_PS_SHIFT 6 +#define PSR_PS_MASK 0x00000040 +#define PSR_S_SHIFT 7 +#define PSR_S_MASK 0x00000080 +#define PSR_PIL_SHIFT 8 +#define PSR_PIL_MASK 0x00000f00 +#define PSR_EF_SHIFT 12 +#define PSR_EF_MASK 0x00001000 +#define PSR_EC_SHIFT 13 +#define PSR_EC_MASK 0x00002000 +#define PSR_ICC_SHIFT 20 +#define PSR_RES_MASK 0x000fc000 +#define PSR_ICC_MASK 0x00f00000 +#define PSR_N_MASK 0x00800000 +#define PSR_Z_MASK 0x00400000 +#define PSR_V_MASK 0x00200000 +#define PSR_C_MASK 0x00100000 +#define PSR_VER_SHIFT 24 +#define PSR_VER_MASK 0x0f000000 +#define PSR_VER 0 +#define PSR_IMPL_SHIFT 28 +#define PSR_IMPL_MASK 0xf0000000 +#define PSR_IMPL 0 +#define PSR_ZERO_MASK (PSR_IMPL_MASK | PSR_VER_MASK | PSR_RES_MASK) + +#define ICC_N_SET (m_psr & PSR_N_MASK) +#define ICC_N_CLEAR (!ICC_N_SET) +#define SET_ICC_N_FLAG do { m_psr |= PSR_N_MASK; } while(0); +#define CLEAR_ICC_N_FLAG do { m_psr &= ~PSR_N_MASK; } while(0); + +#define ICC_Z_SET (m_psr & PSR_Z_MASK) +#define ICC_Z_CLEAR (!ICC_Z_SET) +#define SET_ICC_Z_FLAG do { m_psr |= PSR_Z_MASK; } while(0); +#define CLEAR_ICC_Z_FLAG do { m_psr &= ~PSR_Z_MASK; } while(0); + +#define ICC_V_SET (m_psr & PSR_V_MASK) +#define ICC_V_CLEAR (!ICC_B_SET) +#define SET_ICC_V_FLAG do { m_psr |= PSR_V_MASK; } while(0); +#define CLEAR_ICC_V_FLAG do { m_psr &= ~PSR_V_MASK; } while(0); + +#define ICC_C_SET (m_psr & PSR_C_MASK) +#define ICC_C_CLEAR (!ICC_C_SET) +#define SET_ICC_C_FLAG do { m_psr |= PSR_C_MASK; } while(0); +#define CLEAR_ICC_C_FLAG do { m_psr &= ~PSR_C_MASK; } while(0); + +#define CLEAR_ICC do { m_psr &= ~PSR_ICC_MASK; } while(0); + +#define TEST_ICC_NZ(x) do { m_psr &= ~PSR_ICC_MASK; m_psr |= (x & 0x80000000) ? PSR_N_MASK : 0; m_psr |= (x == 0) ? PSR_Z_MASK : 0; } while (0); + +#define MAKE_PSR do { m_psr = (m_impl << PSR_IMPL_SHIFT) | (m_ver << PSR_VER_SHIFT) | (m_icc << PSR_ICC_SHIFT) | (m_ec ? PSR_EC_MASK : 0) | (m_ef ? PSR_EF_MASK : 0) | (m_pil << PSR_PIL_SHIFT) | (m_s ? PSR_S_MASK : 0) | (m_ps ? PSR_PS_MASK : 0) | (m_et ? PSR_ET_MASK : 0) | m_cwp; m_insn_asi = m_s ? 9 : 8; m_data_asi = m_s ? 11 : 10; } while(0); +#define BREAK_PSR do { m_icc = (m_psr & PSR_ICC_MASK) >> PSR_ICC_SHIFT; m_ec = m_psr & PSR_EC_MASK; m_ef = m_psr & PSR_EF_MASK; m_pil = (m_psr & PSR_PIL_MASK) >> PSR_PIL_SHIFT; m_s = m_psr & PSR_S_MASK; m_ps = m_psr & PSR_PS_MASK; m_et = m_psr & PSR_ET_MASK; m_cwp = m_psr & PSR_CWP_MASK; m_insn_asi = m_s ? 9 : 8; m_data_asi = m_s ? 11 : 10; } while(0); +#define MAKE_ICC do { m_icc = (m_psr & PSR_ICC_MASK) >> PSR_ICC_SHIFT; } while(0); + +#define IS_SUPERVISOR (m_psr & PSR_S_MASK) +#define IS_USER (!IS_SUPERVISOR) + +#define TRAPS_ENABLED (m_psr & PSR_ET_MASK) +#define TRAPS_DISABLED (!TRAPS_ENABLED) + +#define FPU_ENABLED (m_psr & PSR_EF_MASK) +#define FPU_DISABLED (!FPU_ENABLED) + +#define OP (op >> 30) // gangnam style +#define OP2 ((op >> 22) & 7) +#define OP3 ((op >> 19) & 63) +#define OPF ((op >> 5) & 0x1ff) + +#define DISP30 (op << 2) +#define DISP22 (((INT32)(op << 10)) >> 8) +#define IMM22 (op << 10) +#define CONST22 (op & 0x3fffff) +#define SIMM13 (((INT32)(op << 19)) >> 19) +#define IMM7 (op & 0x7f) +#define SIMM7 (((INT32)(op << 25)) >> 25) +#define OPIMM (op & 0x00002000) +#define USEIMM ((op >> 13) & 1) + +#define COND ((op >> 25) & 15) +#define ANNUL ((op >> 29) & 1) +#define ASI ((op >> 5) & 0xff) + +#define RD ((op >> 25) & 31) +#define RS1 ((op >> 14) & 31) +#define RS2 (op & 31) + +#define REG(x) *m_regs[x] +#define RDREG *m_regs[RD] +#define RS1REG *m_regs[RS1] +#define RS2REG *m_regs[RS2] +#define SET_RDREG(x) if(RD) { RDREG = x; } +#define ADDRESS (OPIMM ? (RS1REG + SIMM13) : (RS1REG + RS2REG)) + +#define PC m_pc +#define nPC m_npc + +#define Y m_y + +#define ET m_et +#define PIL m_pil + +#define MAE m_mae +#define HOLD_BUS m_hold_bus +#endif // __MB86901_DEFS_H__ \ No newline at end of file diff --git a/src/devices/cpu/tms32010/tms32010.cpp b/src/devices/cpu/tms32010/tms32010.cpp index 332f09c9dc0..ab49c52b603 100644 --- a/src/devices/cpu/tms32010/tms32010.cpp +++ b/src/devices/cpu/tms32010/tms32010.cpp @@ -102,7 +102,7 @@ tms32010_device::tms32010_device(const machine_config &mconfig, const char *tag, : cpu_device(mconfig, TMS32010, "TMS32010", tag, owner, clock, "tms32010", __FILE__) , m_program_config("program", ENDIANNESS_BIG, 16, 12, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 8, -1, ADDRESS_MAP_NAME(tms32010_ram)) - , m_io_config("io", ENDIANNESS_BIG, 16, 5, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 4+1, -1) , m_addr_mask(0x0fff) { } @@ -112,7 +112,7 @@ tms32010_device::tms32010_device(const machine_config &mconfig, device_type type : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) , m_program_config("program", ENDIANNESS_BIG, 16, 12, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 8, -1, ADDRESS_MAP_NAME(tms32015_ram)) - , m_io_config("io", ENDIANNESS_BIG, 16, 5, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 4+1, -1) , m_addr_mask(addr_mask) { } diff --git a/src/devices/cpu/tms32025/tms32025.cpp b/src/devices/cpu/tms32025/tms32025.cpp index cd95f1a96c8..c202c243ea2 100644 --- a/src/devices/cpu/tms32025/tms32025.cpp +++ b/src/devices/cpu/tms32025/tms32025.cpp @@ -212,7 +212,7 @@ tms32025_device::tms32025_device(const machine_config &mconfig, const char *tag, : cpu_device(mconfig, TMS32025, "TMS32025", tag, owner, clock, "tms32025", __FILE__) , m_program_config("program", ENDIANNESS_BIG, 16, 16, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 16, -1) - , m_io_config("io", ENDIANNESS_BIG, 16, 17, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 16+1, -1) { } @@ -221,7 +221,7 @@ tms32025_device::tms32025_device(const machine_config &mconfig, device_type type : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source) , m_program_config("program", ENDIANNESS_BIG, 16, 16, -1) , m_data_config("data", ENDIANNESS_BIG, 16, 16, -1) - , m_io_config("io", ENDIANNESS_BIG, 16, 16, -1) + , m_io_config("io", ENDIANNESS_BIG, 16, 16+1, -1) { } diff --git a/src/devices/cpu/tms32031/32031ops.hxx b/src/devices/cpu/tms32031/32031ops.hxx index eda4955ee34..60f2ab5d07f 100644 --- a/src/devices/cpu/tms32031/32031ops.hxx +++ b/src/devices/cpu/tms32031/32031ops.hxx @@ -74,7 +74,7 @@ void tms3203x_device::illegal(UINT32 op) if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) { logerror("Illegal op @ %06X: %08X (tbl=%03X)\n", m_pc - 1, op, op >> 21); - debugger_break(machine()); + machine().debug_break(); } } diff --git a/src/devices/cpu/tms32031/tms32031.cpp b/src/devices/cpu/tms32031/tms32031.cpp index ce6651d4fba..69a5de94800 100644 --- a/src/devices/cpu/tms32031/tms32031.cpp +++ b/src/devices/cpu/tms32031/tms32031.cpp @@ -814,7 +814,7 @@ void tms3203x_device::execute_run() { // watch for out-of-range stack pointers if (IREG(TMR_SP) & 0xff000000) - debugger_break(machine()); + machine().debug_break(); if ((IREG(TMR_ST) & RMFLAG) && m_pc == IREG(TMR_RE) + 1) { if ((INT32)--IREG(TMR_RC) >= 0) diff --git a/src/devices/cpu/tms34010/34010ops.hxx b/src/devices/cpu/tms34010/34010ops.hxx index 6674d7a1faa..486e4b2cb14 100644 --- a/src/devices/cpu/tms34010/34010ops.hxx +++ b/src/devices/cpu/tms34010/34010ops.hxx @@ -99,7 +99,7 @@ void tms340x0_device::unimpl(UINT16 op) if (m_pc == 0 || s_opcode_table[m_direct->read_word(TOBYTE(m_pc)) >> 4] == &tms34010_device::unimpl) { set_input_line(INPUT_LINE_HALT, ASSERT_LINE); - debugger_break(machine()); + machine().debug_break(); } } diff --git a/src/devices/cpu/tms9900/9900dasm.cpp b/src/devices/cpu/tms9900/9900dasm.cpp index 1e79c407538..b3c8bfb56dc 100644 --- a/src/devices/cpu/tms9900/9900dasm.cpp +++ b/src/devices/cpu/tms9900/9900dasm.cpp @@ -444,7 +444,7 @@ unsigned Dasm9900 (char *buffer, unsigned pc, int model_id, const UINT8 *oprom, case 1: /* opcode is dcs */ opc = _dcs; - break; + break; case 2: case 3: /* should be 2, but instruction decoding is incomplete */ @@ -458,11 +458,11 @@ unsigned Dasm9900 (char *buffer, unsigned pc, int model_id, const UINT8 *oprom, instead of the immediate. Since I do not know, I handle this as an illegal instruction. */ opc = _ill; - break; + break; default: /* this is still a software xop */ - break; + break; } } diff --git a/src/devices/cpu/z8000/8000dasm.cpp b/src/devices/cpu/z8000/8000dasm.cpp index c8eaa7ad9b9..5118af4b433 100644 --- a/src/devices/cpu/z8000/8000dasm.cpp +++ b/src/devices/cpu/z8000/8000dasm.cpp @@ -48,45 +48,6 @@ static const char *const ints[4] = { int z8k_segm; /* Current disassembler mode: 0 - non-segmented, 1 - segmented */ int z8k_segm_mode = Z8K_SEGM_MODE_AUTO; /* User disassembler mode setting: segmented, non-segmented, auto */ -void z8k_disass_mode(running_machine &machine, int ref, int params, const char *param[]) -{ - size_t len; - if (params == 1) - { - len = strlen(param[0]); - if (!core_strnicmp(param[0], "segmented", len) || !core_stricmp(param[0], "z8001")) { - z8k_segm = true; - z8k_segm_mode = Z8K_SEGM_MODE_SEG; - debug_console_printf(machine, "Disassembler mode set to Z8001/segmented\n"); - } - else if (!core_strnicmp(param[0], "non-segmented", len) || !core_stricmp(param[0], "z8002")) { - z8k_segm = false; - z8k_segm_mode = Z8K_SEGM_MODE_NONSEG; - debug_console_printf(machine, "Disassembler mode set to Z8002/non-segmented\n"); - } - else if (!core_strnicmp(param[0], "automatic", len)) { - z8k_segm_mode = Z8K_SEGM_MODE_AUTO; - debug_console_printf(machine, "Disassembler mode set to automatic\n"); - } - else - goto usage; - } - else if (params > 1) { - usage: - debug_console_printf(machine, "Usage: z8k_disass_mode \n"); - debug_console_printf(machine, " set disassembler mode\n"); - debug_console_printf(machine, " mode: \"segmented\" or \"z8001\" - Z8001 mode\n"); - debug_console_printf(machine, " \"non-segmented\" or \"z8002\" - Z8002 mode\n"); - debug_console_printf(machine, " \"automatic\" - automatic mode\n"); - } - else { - debug_console_printf(machine, "Current disassembler mode: "); - if (z8k_segm_mode == Z8K_SEGM_MODE_AUTO) - debug_console_printf(machine, "automatic, currently "); - debug_console_printf(machine, "%s\n", z8k_segm ? "Z8001/segmented" : "Z8002/non-segmented"); - } -} - CPU_DISASSEMBLE( z8000 ) { int new_pc = pc, i, j, tmp; diff --git a/src/devices/cpu/z8000/z8000.cpp b/src/devices/cpu/z8000/z8000.cpp index 910402cf1b3..bdfbc436275 100644 --- a/src/devices/cpu/z8000/z8000.cpp +++ b/src/devices/cpu/z8000/z8000.cpp @@ -25,7 +25,6 @@ extern int z8k_segm; extern int z8k_segm_mode; -extern void z8k_disass_mode(running_machine &machine, int ref, int params, const char *param[]); #include "z8000cpu.h" @@ -642,7 +641,49 @@ void z8002_device::state_string_export(const device_state_entry &entry, std::str m_fcw & 0x0001 ? '?':'.'); break; } +} +void z8001_device::z8k_disass_mode(int ref, int params, const char *param[]) +{ + size_t len; + if (params == 1) + { + len = strlen(param[0]); + if (!core_strnicmp(param[0], "segmented", len) || !core_stricmp(param[0], "z8001")) { + z8k_segm = true; + z8k_segm_mode = Z8K_SEGM_MODE_SEG; + machine().debugger().console().printf("Disassembler mode set to Z8001/segmented\n"); + } + else if (!core_strnicmp(param[0], "non-segmented", len) || !core_stricmp(param[0], "z8002")) + { + z8k_segm = false; + z8k_segm_mode = Z8K_SEGM_MODE_NONSEG; + machine().debugger().console().printf("Disassembler mode set to Z8002/non-segmented\n"); + } + else if (!core_strnicmp(param[0], "automatic", len)) + { + z8k_segm_mode = Z8K_SEGM_MODE_AUTO; + machine().debugger().console().printf("Disassembler mode set to automatic\n"); + } + else + goto usage; + } + else if (params > 1) + { + usage: + machine().debugger().console().printf("Usage: z8k_disass_mode \n"); + machine().debugger().console().printf(" set disassembler mode\n"); + machine().debugger().console().printf(" mode: \"segmented\" or \"z8001\" - Z8001 mode\n"); + machine().debugger().console().printf(" \"non-segmented\" or \"z8002\" - Z8002 mode\n"); + machine().debugger().console().printf(" \"automatic\" - automatic mode\n"); + } + else + { + machine().debugger().console().printf("Current disassembler mode: "); + if (z8k_segm_mode == Z8K_SEGM_MODE_AUTO) + machine().debugger().console().printf("automatic, currently "); + machine().debugger().console().printf("%s\n", z8k_segm ? "Z8001/segmented" : "Z8002/non-segmented"); + } } void z8001_device::device_start() @@ -664,7 +705,10 @@ void z8001_device::device_start() z8000_init_tables(); if (machine().debug_flags & DEBUG_FLAG_ENABLED) - debug_console_register_command(machine(), "z8k_disass_mode", CMDFLAG_NONE, 0, 0, 1, z8k_disass_mode); + { + using namespace std::placeholders; + machine().debugger().console().register_command("z8k_disass_mode", CMDFLAG_NONE, 0, 0, 1, std::bind(&z8001_device::z8k_disass_mode, this, _1, _2, _3)); + } z8k_segm = true; diff --git a/src/devices/cpu/z8000/z8000.h b/src/devices/cpu/z8000/z8000.h index 288a2700c99..2a0f00c3266 100644 --- a/src/devices/cpu/z8000/z8000.h +++ b/src/devices/cpu/z8000/z8000.h @@ -665,6 +665,9 @@ protected: virtual UINT32 F_SEG_Z8001() override; virtual UINT32 PSA_ADDR() override; virtual UINT32 read_irq_vector() override; + +private: + void z8k_disass_mode(int ref, int params, const char *param[]); }; diff --git a/src/devices/imagedev/cassette.cpp b/src/devices/imagedev/cassette.cpp index c045533a1b3..5826f0abf58 100644 --- a/src/devices/imagedev/cassette.cpp +++ b/src/devices/imagedev/cassette.cpp @@ -357,27 +357,60 @@ void cassette_image_device::call_unload() } +//------------------------------------------------- +// display a small tape animation, with the +// current position in the tape image +//------------------------------------------------- -/* - display a small tape icon, with the current position in the tape image -*/ -void cassette_image_device::call_display() +std::string cassette_image_device::call_display() { - /* abort if we should not be showing the image */ - if (!exists()) - return; - if (!is_motor_on()) - return; - machine().ui().image_display(CASSETTE, this); - // make sure tape stops at end when playing - if ((m_state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY) + const int ANIMATION_FPS = 1; + + std::string result; + + // only show the image when a cassette is loaded and the motor is on + if (exists() && is_motor_on()) { - if ( m_cassette ) + int n; + double position, length; + cassette_state uistate; + static const char *shapes[] = { u8"\u2500", u8"\u2572", u8"\u2502", u8"\u2571" }; + + // figure out where we are in the cassette + position = get_position(); + length = get_length(); + uistate = (cassette_state)(get_state() & CASSETTE_MASK_UISTATE); + + // choose which frame of the animation we are at + n = ((int)position / ANIMATION_FPS) % ARRAY_LENGTH(shapes); + + // play or record + const char *status_icon = (uistate == CASSETTE_PLAY) + ? u8"\u25BA" + : u8"\u25CF"; + + // Since you can have anything in a BDF file, we will use crude ascii characters instead + result = string_format("%s %s %02d:%02d (%04d) [%02d:%02d (%04d)]", + shapes[n], // animation + status_icon, // play or record + ((int)position / 60), + ((int)position % 60), + (int)position, + ((int)length / 60), + ((int)length % 60), + (int)length); + + // make sure tape stops at end when playing + if ((m_state & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY) { - if (get_position() > get_length()) + if (m_cassette) { - m_state = (cassette_state)(( m_state & ~CASSETTE_MASK_UISTATE ) | CASSETTE_STOPPED); + if (get_position() > get_length()) + { + m_state = (cassette_state)((m_state & ~CASSETTE_MASK_UISTATE) | CASSETTE_STOPPED); + } } } } + return result; } diff --git a/src/devices/imagedev/cassette.h b/src/devices/imagedev/cassette.h index e7edd0acef2..a197cf851b5 100644 --- a/src/devices/imagedev/cassette.h +++ b/src/devices/imagedev/cassette.h @@ -58,7 +58,7 @@ public: virtual bool call_load() override; virtual bool call_create(int format_type, option_resolution *format_options) override; virtual void call_unload() override; - virtual void call_display() override; + virtual std::string call_display() override; virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) override { return load_software(swlist, swname, start_entry); } virtual iodevice_t image_type() const override { return IO_CASSETTE; } diff --git a/src/devices/imagedev/chd_cd.cpp b/src/devices/imagedev/chd_cd.cpp index 630403001ff..f090d7f0032 100644 --- a/src/devices/imagedev/chd_cd.cpp +++ b/src/devices/imagedev/chd_cd.cpp @@ -61,7 +61,7 @@ void cdrom_image_device::device_config_complete() { m_extension_list = "chd,cue,toc,nrg,gdi,iso,cdr"; - m_formatlist.append(*global_alloc(image_device_format("chdcd", "CD-ROM drive", m_extension_list, cd_option_spec))); + m_formatlist.push_back(std::make_unique("chdcd", "CD-ROM drive", m_extension_list, cd_option_spec)); // set brief and instance name update_names(); diff --git a/src/devices/imagedev/diablo.cpp b/src/devices/imagedev/diablo.cpp index ba43f09efee..da0fe3051ae 100644 --- a/src/devices/imagedev/diablo.cpp +++ b/src/devices/imagedev/diablo.cpp @@ -56,7 +56,7 @@ diablo_image_device::~diablo_image_device() void diablo_image_device::device_config_complete() { - m_formatlist.append(*global_alloc(image_device_format("chd", "CHD Hard drive", "chd,dsk", dsk_option_spec))); + m_formatlist.push_back(std::make_unique("chd", "CHD Hard drive", "chd,dsk", dsk_option_spec)); // set brief and instance name update_names(); diff --git a/src/devices/imagedev/flopdrv.cpp b/src/devices/imagedev/flopdrv.cpp index 9842e4af0b1..791af73b911 100644 --- a/src/devices/imagedev/flopdrv.cpp +++ b/src/devices/imagedev/flopdrv.cpp @@ -821,7 +821,7 @@ void legacy_floppy_image_device::device_config_complete() // only add if creatable if (floppy_options[i].param_guidelines) { // allocate a new format and append it to the list - m_formatlist.append(*global_alloc(image_device_format(floppy_options[i].name, floppy_options[i].description, floppy_options[i].extensions, floppy_options[i].param_guidelines))); + m_formatlist.push_back(std::make_unique(floppy_options[i].name, floppy_options[i].description, floppy_options[i].extensions, floppy_options[i].param_guidelines)); } image_specify_extension( m_extension_list, 256, floppy_options[i].extensions ); } diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp index 67ccf6e198c..1355aa4c35b 100644 --- a/src/devices/imagedev/floppy.cpp +++ b/src/devices/imagedev/floppy.cpp @@ -242,7 +242,7 @@ void floppy_image_device::set_formats(const floppy_format_type *formats) else fif_list->append(fif); - m_formatlist.append(*global_alloc(image_device_format(fif->name(), fif->description(), fif->extensions(), ""))); + m_formatlist.push_back(std::make_unique(fif->name(), fif->description(), fif->extensions(), "")); image_specify_extension( extension_list, 256, fif->extensions() ); } @@ -438,10 +438,10 @@ bool floppy_image_device::call_load() if (!cur_load_cb.isnull()) return cur_load_cb(this); - if (motor_always_on) { - // When disk is inserted, start motor - mon_w(0); - } else if(!mon) + if (motor_always_on) { + // When disk is inserted, start motor + mon_w(0); + } else if(!mon) ready_counter = 2; return IMAGE_INIT_PASS; @@ -469,10 +469,10 @@ void floppy_image_device::call_unload() if (!cur_unload_cb.isnull()) cur_unload_cb(this); - if (motor_always_on) { - // When disk is removed, stop motor - mon_w(1); - } else if(!ready) { + if (motor_always_on) { + // When disk is removed, stop motor + mon_w(1); + } else if(!ready) { ready = true; if(!cur_ready_cb.isnull()) cur_ready_cb(this, ready); diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp index ff058f837f7..a39d9cbbcde 100644 --- a/src/devices/imagedev/harddriv.cpp +++ b/src/devices/imagedev/harddriv.cpp @@ -79,7 +79,7 @@ harddisk_image_device::~harddisk_image_device() void harddisk_image_device::device_config_complete() { - m_formatlist.append(*global_alloc(image_device_format("chd", "CHD Hard drive", "chd,hd", hd_option_spec))); + m_formatlist.push_back(std::make_unique("chd", "CHD Hard drive", "chd,hd", hd_option_spec)); // set brief and instance name update_names(); diff --git a/src/devices/machine/68230pit.cpp b/src/devices/machine/68230pit.cpp index 927ece2cb75..fe84888ffbf 100644 --- a/src/devices/machine/68230pit.cpp +++ b/src/devices/machine/68230pit.cpp @@ -9,13 +9,31 @@ * * Todo * - Add clock and timers +* - Add double buffering for each submode * - Add all missing registers * - Add configuration **********************************************************************/ #include "68230pit.h" -#define LOG(x) /* x */ +#define VERBOSE 0 + +#define LOG(x) do { if (VERBOSE) logerror x; } while (0) +#define LOGR(x) LOG(x) +#if VERBOSE == 2 +#define logerror printf +#endif + +#ifdef _MSC_VER +#define FUNCNAME __func__ +#define LLFORMAT "%I64%" +#else +#define FUNCNAME __PRETTY_FUNCTION__ +#define LLFORMAT "%lld" +#endif + +//#define LOG(x) x +//#define logerror printf //************************************************************************** // DEVICE TYPE DEFINITIONS @@ -27,22 +45,70 @@ const device_type PIT68230 = &device_creator; // pit68230_device - constructors //------------------------------------------------- pit68230_device::pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) - : device_t (mconfig, type, name, tag, owner, clock, shortname, source), - device_execute_interface (mconfig, *this) - , m_icount (0) - , m_write_pa (*this) - , m_write_h2 (*this), m_pgcr(0), m_psrr(0), m_paddr(0), m_pbddr(0), m_pcddr(0), m_pacr(0), m_pbcr(0), m_padr(0), m_pbdr(0), m_psr(0) - { + : device_t (mconfig, type, name, tag, owner, clock, shortname, source), + device_execute_interface (mconfig, *this) + , m_icount (0) + , m_pa_out_cb(*this) + , m_pa_in_cb(*this) + , m_pb_out_cb(*this) + , m_pb_in_cb(*this) + , m_pc_out_cb(*this) + , m_pc_in_cb(*this) + , m_h1_out_cb (*this) + , m_h2_out_cb (*this) + , m_h3_out_cb (*this) + , m_h4_out_cb (*this) + , m_pgcr(0) + , m_psrr(0) + , m_paddr(0) + , m_pbddr(0) + , m_pcddr(0) + , m_pacr(0) + , m_pbcr(0) + , m_padr(0) + , m_pbdr(0) + , m_psr(0) + , m_tcr(0) + , m_cpr(0) + // , m_cprh(0) + // , m_cprm(0) + // , m_cprl(0) + , m_cntr(0) +{ } pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t (mconfig, PIT68230, "PIT68230", tag, owner, clock, "pit68230", __FILE__), - device_execute_interface (mconfig, *this) - , m_icount (0) - , m_write_pa (*this) - , m_write_h2 (*this), m_pgcr(0), m_psrr(0), m_paddr(0), m_pbddr(0), m_pcddr(0), m_pacr(0), m_pbcr(0), m_padr(0), m_pbdr(0), m_psr(0) - { + : device_t (mconfig, PIT68230, "PIT68230", tag, owner, clock, "pit68230", __FILE__), + device_execute_interface (mconfig, *this) + , m_icount (0) + , m_pa_out_cb (*this) + , m_pa_in_cb(*this) + , m_pb_out_cb(*this) + , m_pb_in_cb(*this) + , m_pc_out_cb(*this) + , m_pc_in_cb(*this) + , m_h1_out_cb(*this) + , m_h2_out_cb(*this) + , m_h3_out_cb(*this) + , m_h4_out_cb(*this) + , m_pgcr(0) + , m_psrr(0) + , m_paddr(0) + , m_pbddr(0) + , m_pcddr(0) + , m_pacr(0) + , m_pbcr(0) + , m_padr(0) + , m_pbdr(0) + , m_psr(0) + , m_tcr(0) + , m_cpr(0) + // , m_cprh(0) + // , m_cprm(0) + // , m_cprl(0) + , m_cntr(0) +{ } //------------------------------------------------- @@ -50,12 +116,18 @@ pit68230_device::pit68230_device(const machine_config &mconfig, const char *tag, //------------------------------------------------- void pit68230_device::device_start () { - LOG (logerror ("PIT68230 device started\n")); - m_icountptr = &m_icount; + LOG(("%s\n", FUNCNAME)); + m_icountptr = &m_icount; - // resolve callbacks - m_write_pa.resolve_safe (); - m_write_h2.resolve_safe (); + // resolve callbacks + m_pa_out_cb.resolve_safe(); + m_pa_in_cb.resolve_safe(0); + m_pb_out_cb.resolve_safe(); + m_pb_in_cb.resolve_safe(0); + m_h1_out_cb.resolve_safe(); + m_h2_out_cb.resolve_safe(); + m_h3_out_cb.resolve_safe(); + m_h4_out_cb.resolve_safe(); } //------------------------------------------------- @@ -63,17 +135,18 @@ void pit68230_device::device_start () //------------------------------------------------- void pit68230_device::device_reset () { - LOG (logerror ("PIT68230 device reseted\n")); - m_pgcr = 0; - m_psrr = 0; - m_paddr = 0; - m_pbddr = 0; - m_pcddr = 0; - m_pacr = 0; m_write_h2 (m_pacr); - m_pbcr = 0; - m_padr = 0; m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR - m_pbdr = 0; - m_psr = 0; + LOG(("%s %s \n",tag(), FUNCNAME)); + + m_pgcr = 0; + m_psrr = 0; + m_paddr = 0; + m_pbddr = 0; + m_pcddr = 0; + m_pacr = 0; m_h2_out_cb(m_pacr); + m_pbcr = 0; + m_padr = 0; m_pa_out_cb((offs_t)0, m_padr); // TODO: check PADDR + m_pbdr = 0; + m_psr = 0; } //------------------------------------------------- @@ -85,16 +158,16 @@ void pit68230_device::device_timer (emu_timer &timer, device_timer_id id, INT32 void pit68230_device::h1_set (UINT8 state) { - LOG (logerror ("h1_set %d @ m_psr %2x => ", state, m_psr)); - if (state) m_psr |= 1; else m_psr &= ~1; - LOG (logerror ("%02x %lld\n", m_psr, machine ().firstcpu->total_cycles ())); + LOG(("%s %s %d @ m_psr %2x => ",tag(), FUNCNAME, state, m_psr)); + if (state) m_psr |= 1; else m_psr &= ~1; + LOG(("%02x %lld\n", m_psr, machine ().firstcpu->total_cycles ())); } void pit68230_device::portb_setbit (UINT8 bit, UINT8 state) { - LOG (logerror ("portb_setbit %d/%d @ m_pbdr %2x => ", bit, state, m_pbdr)); - if (state) m_pbdr |= (1 << bit); else m_pbdr &= ~(1 << bit); - LOG (logerror ("%02x %lld\n", m_pbdr, machine ().firstcpu->total_cycles ())); + LOG(("%s %s %d/%d @ m_pbdr %2x => ", tag(), FUNCNAME, bit, state, m_pbdr)); + if (state) m_pbdr |= (1 << bit); else m_pbdr &= ~(1 << bit); + LOG(("%02x %lld\n", m_pbdr, machine ().firstcpu->total_cycles ())); } //------------------------------------------------- @@ -109,157 +182,373 @@ void pit68230_device::execute_run () } while (m_icount > 0); } -LOG (static INT32 ow_cnt = 0) -LOG (static INT32 ow_data = 0) -LOG (static INT32 ow_ofs = 0) +#if VERBOSE > 2 +static INT32 ow_cnt = 0; +static INT32 ow_data = 0; +static INT32 ow_ofs = 0; +#endif -WRITE8_MEMBER (pit68230_device::write){ - switch (offset) { - case PIT_68230_PGCR: - m_pgcr = data; - break; - - case PIT_68230_PSRR: - m_psrr = data; - break; - - case PIT_68230_PADDR: - m_paddr = data; - break; - - case PIT_68230_PBDDR: - m_pbddr = data; - break; - - case PIT_68230_PCDDR: - m_pcddr = data; - break; - - case PIT_68230_PACR: - m_pacr = data; - // callbacks - /*PACR in Mode 0 - * 5 43 H2 Control in Submode 00 && 01 - * ------------------------------------ - * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. - * 1 00 Output pin - negated, H2S is always clear. - * 1 01 Output pin - asserted, H2S is always clear. - * 1 10 Output pin - interlocked input handshake protocol, H2S is always clear. - * 1 11 Output pin - pulsed input handshake protocol, H2S is always clear. - * - * 5 43 H2 Control in Submode 1x - * ------------------------------------ - * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. - * 1 X0 Output pin - negated, H2S is always cleared. - * 1 X1 Output pin - asserted, H2S is always cleared. - */ - m_write_h2 (m_pacr & 0x08 ? 1 : 0); // TODO: Check mode and submodes - break; - - case PIT_68230_PBCR: - m_pbcr = data; - break; - - case PIT_68230_PADR: - m_padr = data; - // callbacks - m_write_pa ((offs_t)0, m_padr); // TODO: check PADDR - break; - - case PIT_68230_PSR: - m_psr = data; - break; - - default: - LOG (logerror ("unhandled register %02x", offset)); - } - - LOG (if (offset != ow_ofs || data != ow_data || ow_cnt >= 1000) { - logerror ("\npit68230_device::write: previous identical operation performed %02x times\n", ow_cnt); - ow_cnt = 0; - ow_data = data; - ow_ofs = offset; - logerror ("pit68230_device::write: offset=%02x data=%02x %lld\n", ow_ofs, ow_data, machine ().firstcpu->total_cycles ()); - } - else - ow_cnt++; ) +void pit68230_device::wr_pitreg_pgcr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pgcr = data; } -LOG (static INT32 or_cnt = 0) -LOG (static INT32 or_data = 0) -LOG (static INT32 or_ofs = 0) +void pit68230_device::wr_pitreg_psrr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_psrr = data; +} + +void pit68230_device::wr_pitreg_paddr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_paddr = data; +} + +void pit68230_device::wr_pitreg_pbddr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pbddr = data; +} + +void pit68230_device::wr_pitreg_pcddr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pcddr = data; +} + +void pit68230_device::wr_pitreg_pacr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pacr = data; + // callbacks + /*PACR in Mode 0 + * 5 43 H2 Control in Submode 00 && 01 + * ------------------------------------ + * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. + * 1 00 Output pin - negated, H2S is always clear. + * 1 01 Output pin - asserted, H2S is always clear. + * 1 10 Output pin - interlocked input handshake protocol, H2S is always clear. + * 1 11 Output pin - pulsed input handshake protocol, H2S is always clear. + * + * 5 43 H2 Control in Submode 1x + * ------------------------------------ + * 0 XX Input pin - edge-sensitive status input, H2S is set on an asserted edge. + * 1 X0 Output pin - negated, H2S is always cleared. + * 1 X1 Output pin - asserted, H2S is always cleared. + */ + m_h2_out_cb (m_pacr & 0x08 ? 1 : 0); // TODO: Check mode and submodes +} + +void pit68230_device::wr_pitreg_pbcr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_pbcr = data; +} + +void pit68230_device::wr_pitreg_padr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_padr = data; + // callbacks + m_pa_out_cb ((offs_t)0, m_padr); // TODO: check PADDR +} + +void pit68230_device::wr_pitreg_psr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_psr = data; +} + +/* The timer control register (TCR) determines all operations of the timer. Bits 7-5 configure the PC3/TOUT +and PC7/TIACKpins for port C, square wave, vectored interrupt, or autovectored interrupt operation bit +4 specifies whether the counter receives data from the counter preload register or continues counting when +zero detect is reached ; bit 3 is unused and is read as zero bits 2 and 1 configure the path from the CLK +and TINpins to the counter controller ; and bit 0 ena-bles the timer. This register is readable and writable +at all times. All bits are cleared to zero when the RESET pin is asserted. + +TCR bits + 7 6 5 TOUT/TIACK Control +---------------------------- + 0 0 X The dual-function pins PC3/TOUT and PC7/TIACK carry the port C function. + 0 1 X The dual-function pinPC3/TOUT carries the TOUT function. In the run state it is used as a squarewave + output and is toggled on zero detect. The TOUT pin is high while in the halt state. The dualfunction + pin PC7/TIACK carries the PC7 function. + 1 0 0 The dual-function pin PC3/TOUT carries the TOUT function. In the run or halt state it is used as + a timer interrupt request output. The timer interrupt is disabled, thus, the pin is always three stated. + The dual-function pin PC7/TIACK carries the TIACK function ; however, since interrupt request is + negated, the PI/T produces no response (i.e., no data or DTACK) to an asserted TIACK. Refer to + 5.1.3. Timer Interrupt Acknowledge Cycles for details. + 1 0 1 The dual-function pin PC3/TOUT carries the TOUTfunction and is used as a timer interrupt request + output. The timer interrupt is enabled ; thus, the pin is low when the timer ZDS status bit is one. + The dual-function pin PC7/TIACK carries the TIACK function and is used as a timer interrupt acknowledge + input. Refer to the5.1.3. Timer InterruptAcknowledge Cycles fordetails. Thiscombination + supports vectored timer interrupts. + 1 1 0 The dual-function pin PC3/TOUT function. In the run or halt state it is used as a timer interrupt + request output. The timer interrupt is disabled ; thus, the pin is always three-stated. The dual-function + pin PC7/TIACK carries the PC7 function. + 1 1 1 The dual-function pin PC3/TOUT carries the TOUTfunction and is used as a timer interrupt request + output. The timer interrupt is enabled ; thus, the pin is low when the timer ZDS status bit is one. + The dual-function pin PC7/TIACK carries the PC7 function and autovectored interrupts are supported. + +TCR bit 4 - Zero Detect Control + 0 The counter is loaded fromthe counter preload register on the first clock to the 24-bit counter after + zero detect, then resumes counting. + 1 The counter rolls over on zero detect, then continues counting. + +TCR bit 3 - Unused and is always read as zero. + +TCR bits + 2 1 Clock Control + 0 0 The PC2/TIN input pin carries the port C function, and the CLK pin and prescaler are used. The + prescaler is decremented on the falling transition of the CLKpin ; the 24-bit counter is decremented, + rolls over, or is loaded from the counter preload registers when the prescaler rolls over from $OO + to $1F. The timer enable bit determines whether the timer is in the run or halt state. + 0 1 The PC2/TIN pin serves as a timer input, and the CLK pin and prescaler are used. The prescaler + is decremented on the falling transition of the CLK pin ; the 24-bit counter is decremented, rolls + over, or is loaded from the counter preload registers when the prescaler rolls over from $00 to $1F. + The timer is in the run state when the timer enable bit is one and the TIN pin is high ; otherwise, + the timer is in the halt state. + 1 0 The PC2/TIN pin serves as a timer input and the prescaler is used. The prescaler is decremented + following the rising transition of the TIN pin after being synchronized with the internal clock. The + 24-bit counter is decremented, rolls over, or is loaded from the counter preload registers when the + prescaler rolls over from $00 to $1F. The timer enable bit determines whether the timer is in the + run or halt state. + 1 1 The PC2/TIN pin serves as a timer input and the prescaler is not used. The 24-bit counter is decremented, + rolls over, or is loaded from the counter preload registers following the rising edge of + the TIN pin after being synchronized with the internal clock. The timer enable bit determines whether + the timer is in the run or halt state. +TCR bit 0 - Timer Enable + 0 Disabled + 1 Enabled +*/ +void pit68230_device::wr_pitreg_tcr(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x Timer %s\n", + FUNCNAME, data, m_owner->tag(), FUNCNAME, data, data & REG_TCR_ENABLE ? "enabled" : "disabled")); + m_tcr = data; +} + +void pit68230_device::wr_pitreg_cprh(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_cpr &= ~0xff0000; + m_cpr |= ((data << 16) & 0xff0000); + // m_cprh = data; +} + +void pit68230_device::wr_pitreg_cprm(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_cpr &= ~0x00ff00; + m_cpr |= ((data << 8) & 0x00ff00); + // m_cprm = data; +} + +void pit68230_device::wr_pitreg_cprl(UINT8 data) +{ + LOG(("%s(%02x) \"%s\": %s - %02x\n", FUNCNAME, data, m_owner->tag(), FUNCNAME, data)); + m_cpr &= ~0x0000ff; + m_cpr |= ((data << 0) & 0x0000ff); + // m_cprl = data; +} + +WRITE8_MEMBER (pit68230_device::write) +{ + LOG(("%s %s \n",tag(), FUNCNAME)); + switch (offset) { + case PIT_68230_PGCR: wr_pitreg_pgcr(data); break; + case PIT_68230_PSRR: wr_pitreg_psrr(data); break; + case PIT_68230_PADDR: wr_pitreg_paddr(data); break; + case PIT_68230_PBDDR: wr_pitreg_pbddr(data); break; + case PIT_68230_PCDDR: wr_pitreg_pcddr(data); break; + case PIT_68230_PACR: wr_pitreg_pacr(data); break; + case PIT_68230_PBCR: wr_pitreg_pbcr(data); break; + case PIT_68230_PADR: wr_pitreg_padr(data); break; + case PIT_68230_PAAR: break; // RO register so ignored + case PIT_68230_PBAR: break; // RO register so ignored + case PIT_68230_PSR: wr_pitreg_psr(data); break; + case PIT_68230_TCR: wr_pitreg_tcr(data); break; + case PIT_68230_CPRH: wr_pitreg_cprh(data); break; + case PIT_68230_CPRM: wr_pitreg_cprm(data); break; + case PIT_68230_CPRL: wr_pitreg_cprl(data); break; + default: + LOG (("Unhandled Write of %02x to register %02x", data, offset)); + } + +#if VERBOSE > 2 + if (offset != ow_ofs || data != ow_data || ow_cnt >= 1000) { + logerror ("\npit68230_device::write: previous identical operation performed %02x times\n", ow_cnt); + ow_cnt = 0; + ow_data = data; + ow_ofs = offset; + logerror ("pit68230_device::write: offset=%02x data=%02x %lld\n", ow_ofs, ow_data, machine ().firstcpu->total_cycles ()); + } + else + ow_cnt++; +#endif + +} + +#if VERBOSE > 2 +static INT32 or_cnt = 0; +static INT32 or_data = 0; +static INT32 or_ofs = 0; +#endif + +UINT8 pit68230_device::rr_pitreg_pgcr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pgcr)); + return m_pgcr; +} + +UINT8 pit68230_device::rr_pitreg_psrr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_psrr)); + return m_psrr; +} + +UINT8 pit68230_device::rr_pitreg_paddr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_paddr)); + return m_paddr; +} + +UINT8 pit68230_device::rr_pitreg_pbddr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pbddr)); + return m_pbddr; +} + +UINT8 pit68230_device::rr_pitreg_pcddr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pcddr)); + return m_pcddr; +} + +UINT8 pit68230_device::rr_pitreg_pacr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pacr)); + return m_pacr; +} + +UINT8 pit68230_device::rr_pitreg_pbcr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pbcr)); + return m_pbcr; +} + +UINT8 pit68230_device::rr_pitreg_padr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_padr)); + return m_padr; +} + +/* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding + * register for moving data to and from port B pins. The port B data direction + * register determines whether each pin is an input (zero) or an output (one). + * This register is readable and writable at all times. Depending on the chosen + * mode/submode, reading or writing may affect the double-buffered handshake + * mechanism. The port B data register is not affected by the assertion of the + * RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */ +UINT8 pit68230_device::rr_pitreg_pbdr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_pbdr)); + return m_pbdr; +} + +/* The port A alternate register is an alternate register for reading the port A pins. +It is a read-only address and no other PI/T condition is affected. In all modes, +the instantaneous pin level is read and no input latching is performed except at the +data bus interface. Writes to this address are answered with DTACK, but the data is ignored.*/ +UINT8 pit68230_device::rr_pitreg_paar() +{ + // NOTE: no side effect emulated so using ..padr + UINT8 ret; + ret = m_pa_in_cb(); + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, ret)); + return ret; +} + +/* The port B alternate register is an alternate register for reading the port B pins. +It is a read-only address and no other PI/T condition is affected. In all modes, +the instantaneous pin level is read and no input latching is performed except at the +data bus interface.Writes to this address are answered with DTACK, but the data is ignored.*/ +UINT8 pit68230_device::rr_pitreg_pbar() +{ + // NOTE: no side effect emulated so using ..pbdr + UINT8 ret; + ret = m_pb_in_cb(); + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, ret)); + return ret; +} + +/* 4.8. PORT STATUS REGISTER (PSR) The port status register contains information about + * handshake pin activity. Bits 7-4 show the instantaneous level of the respective handshake + * pin, and are independent of the handshake pin sense bits in the port general control + * register. Bits 3-0 are the respective status bits referred to throughout this document. + * Their interpretation depends on the programmed mode/submode of the PI/T. For bits + * 3-0 a one is the active or asserted state. */ +UINT8 pit68230_device::rr_pitreg_psr() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, m_psr)); + return m_psr; +} + +UINT8 pit68230_device::rr_pitreg_cntrh() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, (m_cntr >> 16) & 0xff)); + return (m_cntr >> 16) & 0xff; +} + +UINT8 pit68230_device::rr_pitreg_cntrm() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, (m_cntr >> 8) & 0xff)); + return (m_cntr >> 8) & 0xff; +} + +UINT8 pit68230_device::rr_pitreg_cntrl() +{ + LOGR(("%s %s <- %02x\n",tag(), FUNCNAME, (m_cntr >> 0) & 0xff)); + return (m_cntr >> 0) & 0xff; +} READ8_MEMBER (pit68230_device::read){ - UINT8 data; + UINT8 data; - switch (offset) { - case PIT_68230_PGCR: - data = m_pgcr; - break; + switch (offset) { + case PIT_68230_PGCR: data = rr_pitreg_pgcr(); break; + case PIT_68230_PSRR: data = rr_pitreg_psrr(); break; + case PIT_68230_PADDR: data = rr_pitreg_paddr(); break; + case PIT_68230_PBDDR: data = rr_pitreg_pbddr(); break; + case PIT_68230_PCDDR: data = rr_pitreg_pcddr(); break; + case PIT_68230_PACR: data = rr_pitreg_pacr(); break; + case PIT_68230_PBCR: data = rr_pitreg_pbcr(); break; + case PIT_68230_PADR: data = rr_pitreg_padr(); break; + case PIT_68230_PBDR: data = rr_pitreg_pbdr(); break; + case PIT_68230_PAAR: data = rr_pitreg_paar(); break; + case PIT_68230_PBAR: data = rr_pitreg_pbar(); break; + case PIT_68230_PSR: data = rr_pitreg_psr(); break; + case PIT_68230_CNTRH: data = rr_pitreg_cntrh(); break; + case PIT_68230_CNTRM: data = rr_pitreg_cntrm(); break; + case PIT_68230_CNTRL: data = rr_pitreg_cntrl(); break; + default: + LOG (("Unhandled read register %02x\n", offset)); + data = 0; + } - case PIT_68230_PSRR: - data = m_psrr; - break; +#if VERBOSE > 2 + if (offset != or_ofs || data != or_data || or_cnt >= 1000) { + logerror ("\npit68230_device::read: previous identical operation performed %02x times\n", or_cnt); + or_cnt = 0; + or_data = data; + or_ofs = offset; + logerror ("pit68230_device::read: offset=%02x data=%02x %lld\n", or_ofs, or_data, machine ().firstcpu->total_cycles ()); + } + else + or_cnt++; +#endif - case PIT_68230_PADDR: - data = m_paddr; - break; - - case PIT_68230_PBDDR: - data = m_pbddr; - break; - - case PIT_68230_PCDDR: - data = m_pcddr; - break; - - case PIT_68230_PACR: - data = m_pacr; - break; - - case PIT_68230_PBCR: - data = m_pbcr; - break; - - case PIT_68230_PADR: - data = m_padr; - break; - - case PIT_68230_PBDR: - /* 4.6.2. PORT B DATA REGISTER (PBDR). The port B data register is a holding - * register for moving data to and from port B pins. The port B data direction - * register determines whether each pin is an input (zero) or an output (one). - * This register is readable and writable at all times. Depending on the chosen - * mode/submode, reading or writing may affect the double-buffered handshake - * mechanism. The port B data register is not affected by the assertion of the - * RESET pin. PB0-PB7 sits on pins 17-24 on a 48 pin DIP package */ - data = m_pbdr; - break; - - case PIT_68230_PSR: - /* 4.8. PORT STATUS REGISTER (PSR) The port status register contains information about - * handshake pin activity. Bits 7-4 show the instantaneous level of the respective handshake - * pin, and are independent of the handshake pin sense bits in the port general control - * register. Bits 3-0 are the respective status bits referred to throughout this document. - * Their interpretation depends on the programmed mode/submode of the PI/T. For bits - * 3-0 a one is the active or asserted state. */ - data = m_psr; - break; - - default: - LOG (logerror ("unhandled register %02x", offset)); - data = 0; - } - - LOG (if (offset != or_ofs || data != or_data || or_cnt >= 1000) { - logerror ("\npit68230_device::read: previous identical operation performed %02x times\n", or_cnt); - or_cnt = 0; - or_data = data; - or_ofs = offset; - logerror ("pit68230_device::read: offset=%02x data=%02x %lld\n", or_ofs, or_data, machine ().firstcpu->total_cycles ()); - } - else - or_cnt++; ) - - return data; + return data; } diff --git a/src/devices/machine/68230pit.h b/src/devices/machine/68230pit.h index 2a2f2c6824c..7712419f7fc 100644 --- a/src/devices/machine/68230pit.h +++ b/src/devices/machine/68230pit.h @@ -43,14 +43,35 @@ // INTERFACE CONFIGURATION MACROS //************************************************************************** -#define MCFG_PIT68230_PA_OUTPUT_CALLBACK(_write) \ - devcb = &pit68230_device::set_pa_wr_callback (*device, DEVCB_ ## _write); +#define MCFG_PIT68230_PA_INPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pa_in_callback (*device, DEVCB_##_devcb); -#define MCFG_PIT68230_PB_OUTPUT_CALLBACK(_write) \ - devcb = &pit68230_device::set_pb_wr_callback (*device, DEVCB_ ## _write); +#define MCFG_PIT68230_PA_OUTPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pa_out_callback (*device, DEVCB_##_devcb); -#define MCFG_PIT68230_H2_CALLBACK(_write) \ - devcb = &pit68230_device::set_h2_wr_callback (*device, DEVCB_ ## _write); +#define MCFG_PIT68230_PB_INPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pb_in_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PB_OUTPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pb_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PC_INPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pc_in_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PC_OUTPUT_CB(_devcb) \ + devcb = &pit68230_device::set_pc_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H1_CB(_devcb) \ + devcb = &pit68230_device::set_h1_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H2_CB(_devcb) \ + devcb = &pit68230_device::set_h2_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H3_CB(_devcb) \ + devcb = &pit68230_device::set_h3_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_H4_CB(_devcb) \ + devcb = &pit68230_device::set_h4_out_callback (*device, DEVCB_##_devcb); /*----------------------------------------------------------------------- * Registers RS1-RS5 R/W Description @@ -84,46 +105,100 @@ //************************************************************************** class pit68230_device : public device_t, public device_execute_interface { -public: -// construction/destruction -pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); -pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); -template static devcb_base &set_pa_wr_callback (device_t &device, _Object object) -{ - return downcast(device).m_write_pa.set_callback (object); -} -template static devcb_base &set_h2_wr_callback (device_t &device, _Object object) -{ - return downcast(device).m_write_h2.set_callback (object); -} + public: + // construction/destruction + pit68230_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); + pit68230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template static devcb_base &set_pa_in_callback (device_t &device, _Object object){ return downcast(device).m_pa_in_cb.set_callback (object); } + template static devcb_base &set_pa_out_callback (device_t &device, _Object object){ return downcast(device).m_pa_out_cb.set_callback (object); } + template static devcb_base &set_pb_in_callback (device_t &device, _Object object){ return downcast(device).m_pb_in_cb.set_callback (object); } + template static devcb_base &set_pb_out_callback (device_t &device, _Object object){ return downcast(device).m_pb_out_cb.set_callback (object); } + template static devcb_base &set_pc_in_callback (device_t &device, _Object object){ return downcast(device).m_pc_in_cb.set_callback (object); } + template static devcb_base &set_pc_out_callback (device_t &device, _Object object){ return downcast(device).m_pc_out_cb.set_callback (object); } + template static devcb_base &set_h1_out_callback (device_t &device, _Object object){ return downcast(device).m_h1_out_cb.set_callback (object); } + template static devcb_base &set_h2_out_callback (device_t &device, _Object object){ return downcast(device).m_h2_out_cb.set_callback (object); } + template static devcb_base &set_h3_out_callback (device_t &device, _Object object){ return downcast(device).m_h3_out_cb.set_callback (object); } + template static devcb_base &set_h4_out_callback (device_t &device, _Object object){ return downcast(device).m_h4_out_cb.set_callback (object); } -DECLARE_WRITE8_MEMBER (write); -DECLARE_READ8_MEMBER (read); + DECLARE_WRITE8_MEMBER (write); + DECLARE_READ8_MEMBER (read); -void h1_set (UINT8 state); -void portb_setbit (UINT8 bit, UINT8 state); + void h1_set (UINT8 state); + void portb_setbit (UINT8 bit, UINT8 state); + + void wr_pitreg_pgcr(UINT8 data); + void wr_pitreg_psrr(UINT8 data); + void wr_pitreg_paddr(UINT8 data); + void wr_pitreg_pbddr(UINT8 data); + void wr_pitreg_pcddr(UINT8 data); + void wr_pitreg_pacr(UINT8 data); + void wr_pitreg_pbcr(UINT8 data); + void wr_pitreg_padr(UINT8 data); + void wr_pitreg_paar(UINT8 data); + void wr_pitreg_pbar(UINT8 data); + void wr_pitreg_psr(UINT8 data); + void wr_pitreg_tcr(UINT8 data); + void wr_pitreg_cprh(UINT8 data); + void wr_pitreg_cprm(UINT8 data); + void wr_pitreg_cprl(UINT8 data); + + UINT8 rr_pitreg_pgcr(); + UINT8 rr_pitreg_psrr(); + UINT8 rr_pitreg_paddr(); + UINT8 rr_pitreg_pbddr(); + UINT8 rr_pitreg_pcddr(); + UINT8 rr_pitreg_pacr(); + UINT8 rr_pitreg_pbcr(); + UINT8 rr_pitreg_padr(); + UINT8 rr_pitreg_pbdr(); + UINT8 rr_pitreg_paar(); + UINT8 rr_pitreg_pbar(); + UINT8 rr_pitreg_psr(); + UINT8 rr_pitreg_cntrh(); + UINT8 rr_pitreg_cntrm(); + UINT8 rr_pitreg_cntrl(); protected: -// device-level overrides -virtual void device_start () override; -virtual void device_reset () override; -virtual void device_timer (emu_timer &timer, device_timer_id id, int param, void *ptr) override; -virtual void execute_run () override; -int m_icount; -devcb_write8 m_write_pa; -devcb_write_line m_write_h2; -// peripheral ports -UINT8 m_pgcr; // Port General Control register -UINT8 m_psrr; // Port Service Request register -UINT8 m_paddr; // Port A Data Direction register -UINT8 m_pbddr; // Port B Data Direction register -UINT8 m_pcddr; // Port C Data Direction register -UINT8 m_pacr; // Port A Control register -UINT8 m_pbcr; // Port B Control register -UINT8 m_padr; // Port A Data register -UINT8 m_pbdr; // Port B Data register -UINT8 m_psr; // Port Status Register + enum { + REG_TCR_ENABLE = 0x01 + }; + + // device-level overrides + virtual void device_start () override; + virtual void device_reset () override; + virtual void device_timer (emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void execute_run () override; + int m_icount; + + devcb_write8 m_pa_out_cb; + devcb_read8 m_pa_in_cb; + devcb_write8 m_pb_out_cb; + devcb_read8 m_pb_in_cb; + devcb_write8 m_pc_out_cb; + devcb_read8 m_pc_in_cb; + devcb_write_line m_h1_out_cb; + devcb_write_line m_h2_out_cb; + devcb_write_line m_h3_out_cb; + devcb_write_line m_h4_out_cb; + + // peripheral ports + UINT8 m_pgcr; // Port General Control register + UINT8 m_psrr; // Port Service Request register + UINT8 m_paddr; // Port A Data Direction register + UINT8 m_pbddr; // Port B Data Direction register + UINT8 m_pcddr; // Port C Data Direction register + UINT8 m_pacr; // Port A Control register + UINT8 m_pbcr; // Port B Control register + UINT8 m_padr; // Port A Data register + UINT8 m_pbdr; // Port B Data register + UINT8 m_psr; // Port Status Register + UINT8 m_tcr; // Timer Control Register + int m_cpr; // Counter Preload Registers (3 x 8 = 24 bits) + // UINT8 m_cprh; // Counter Preload Register High + // UINT8 m_cprm; // Counter Preload Register Mid + // UINT8 m_cprl; // Counter Preload Register Low + int m_cntr; // - The 24 bit Counter }; // device type definition diff --git a/src/devices/machine/8530scc.cpp b/src/devices/machine/8530scc.cpp index c618fd57004..be3bbf6ed6d 100644 --- a/src/devices/machine/8530scc.cpp +++ b/src/devices/machine/8530scc.cpp @@ -447,7 +447,7 @@ void scc8530_t::set_reg_a(int reg, UINT8 data) /*------------------------------------------------- - scc8530_set_reg_a + scc8530_set_reg_b -------------------------------------------------*/ void scc8530_t::set_reg_b(int reg, UINT8 data) @@ -457,46 +457,43 @@ void scc8530_t::set_reg_b(int reg, UINT8 data) -/*------------------------------------------------- - scc8530_r --------------------------------------------------*/ +//------------------------------------------------- +// reg_r - read handler, trampolines into normal +// getter +//------------------------------------------------- -READ8_MEMBER( scc8530_t::reg_r) +READ8_MEMBER(scc8530_t::reg_r) +{ + return read_reg(offset & 3); +} + + + +//------------------------------------------------- +// read_reg - reads either the control or data +// port for either SCC channel. +//------------------------------------------------- + +UINT8 scc8530_t::read_reg(int offset) { UINT8 result = 0; - offset %= 4; - switch(offset) { - case 0: - /* Channel B (Printer Port) Control */ + case 0: /* Channel B (Printer Port) Control */ + case 1: /* Channel A (Modem Port) Control */ + if (mode == 1) mode = 0; else reg = 0; - result = getbreg(); + result = (offset == 0) ? getbreg() : getareg(); break; - case 1: - /* Channel A (Modem Port) Control */ - if (mode == 1) - mode = 0; - else - reg = 0; - - result = getareg(); - break; - - case 2: - /* Channel B (Printer Port) Data */ - result = channel[1].rxData; - break; - - case 3: - /* Channel A (Modem Port) Data */ - result = channel[0].rxData; + case 2: /* Channel B (Printer Port) Data */ + case 3:/* Channel A (Modem Port) Data */ + result = channel[offset == 2 ? 1 : 0].rxData; break; } return result; @@ -504,116 +501,85 @@ READ8_MEMBER( scc8530_t::reg_r) -/*------------------------------------------------- - scc8530_w --------------------------------------------------*/ +//------------------------------------------------- +// reg_w - write handler, trampolines into normal +// setter +//------------------------------------------------- WRITE8_MEMBER( scc8530_t::reg_w ) { - Chan *pChan; + write_reg(offset & 3, data); +} - offset &= 3; + + +//------------------------------------------------- +// write_reg - writes either the control or data +// port for either SCC channel. +//------------------------------------------------- + +void scc8530_t::write_reg(int offset, UINT8 data) +{ + //offset & 3; // printf(" mode %d data %x offset %d \n", mode, data, offset); + //Chan *pChan; switch(offset) { - case 0: - /* Channel B (Printer Port) Control */ + case 0: /* Channel B (Printer Port) Control */ + case 1: /* Channel A (Modem Port) Control */ + { + int chan = ((offset == 2) ? 1 : 0); if (mode == 0) { if((data & 0xf0) == 0) // not a reset command { mode = 1; reg = data & 0x0f; -// putbreg(data & 0xf0); +// putbreg(data & 0xf0); } else if (data == 0x10) { - pChan = &channel[1]; // clear ext. interrupts - pChan->extIRQPending = 0; - pChan->baudIRQPending = 0; + channel[chan].extIRQPending = 0; + channel[chan].baudIRQPending = 0; updateirqs(); } } else { mode = 0; - putreg(1, data); + putreg(chan, data); } break; + } - case 1: - /* Channel A (Modem Port) Control */ - if (mode == 0) + case 2: /* Channel B (Printer Port) Data */ + case 3: /* Channel A (Modem Port) Data */ + { + int chan = ((offset == 2) ? 1 : 0); + if (channel[chan].txEnable) { - if((data & 0xf0) == 0) // not a reset command - { - mode = 1; - reg = data & 0x0f; -// putareg(data & 0xf0); - } - else if (data == 0x10) - { - pChan = &channel[0]; - // clear ext. interrupts - pChan->extIRQPending = 0; - pChan->baudIRQPending = 0; - updateirqs(); - } - } - else - { - mode = 0; - putreg(0, data); - } - break; - - case 2: - /* Channel B (Printer Port) Data */ - pChan = &channel[1]; - - if (pChan->txEnable) - { - pChan->txData = data; + channel[chan].txData = data; // local loopback? - if (pChan->reg_val[14] & 0x10) + if (channel[chan].reg_val[14] & 0x10) { - pChan->rxData = data; - pChan->reg_val[0] |= 0x01; // Rx character available + channel[chan].rxData = data; + channel[chan].reg_val[0] |= 0x01; // Rx character available } - pChan->reg_val[1] |= 0x01; // All sent - pChan->reg_val[0] |= 0x04; // Tx empty - pChan->txUnderrun = 1; - pChan->txIRQPending = 1; - updateirqs(); - } - break; - - case 3: - /* Channel A (Modem Port) Data */ - pChan = &channel[0]; - - if (pChan->txEnable) - { - pChan->txData = data; - // local loopback? - if (pChan->reg_val[14] & 0x10) - { - pChan->rxData = data; - pChan->reg_val[0] |= 0x01; // Rx character available - } - pChan->reg_val[1] |= 0x01; // All sent - pChan->reg_val[0] |= 0x04; // Tx empty - pChan->txUnderrun = 1; - pChan->txIRQPending = 1; + channel[chan].reg_val[1] |= 0x01; // All sent + channel[chan].reg_val[0] |= 0x04; // Tx empty + channel[chan].txUnderrun = 1; + channel[chan].txIRQPending = 1; updateirqs(); } break; + } } } + /* AppleTalk check: diff --git a/src/devices/machine/8530scc.h b/src/devices/machine/8530scc.h index 2e6e703ceb8..b711f7cdabe 100644 --- a/src/devices/machine/8530scc.h +++ b/src/devices/machine/8530scc.h @@ -43,6 +43,9 @@ public: DECLARE_READ8_MEMBER(reg_r); DECLARE_WRITE8_MEMBER(reg_w); + void write_reg(int offset, UINT8 data); + UINT8 read_reg(int offset); + protected: virtual void device_start() override; virtual void device_reset() override; diff --git a/src/devices/machine/aakart.cpp b/src/devices/machine/aakart.cpp index 7931f1c019d..c7b9e260243 100644 --- a/src/devices/machine/aakart.cpp +++ b/src/devices/machine/aakart.cpp @@ -165,7 +165,7 @@ void aakart_device::device_timer(emu_timer &timer, device_timer_id id, int param READ8_MEMBER( aakart_device::read ) { m_out_tx_cb(CLEAR_LINE); - //debugger_break(machine()); + //machine().debug_break(); return m_rx; } diff --git a/src/devices/machine/atahle.cpp b/src/devices/machine/atahle.cpp index 6bd963f946c..ce25fdcd679 100644 --- a/src/devices/machine/atahle.cpp +++ b/src/devices/machine/atahle.cpp @@ -211,7 +211,7 @@ void ata_hle_device::process_command() m_status |= IDE_STATUS_ERR; m_error = IDE_ERROR_ABRT; set_irq(ASSERT_LINE); - //debugger_break(device->machine()); + //machine().debug_break(); break; } } diff --git a/src/devices/machine/cs8221.cpp b/src/devices/machine/cs8221.cpp index 95a890d7bba..d7f38de1bd7 100644 --- a/src/devices/machine/cs8221.cpp +++ b/src/devices/machine/cs8221.cpp @@ -105,6 +105,10 @@ void cs8221_device::device_reset() //************************************************************************** // READ/WRITE HANDLERS //************************************************************************** +DEVICE_ADDRESS_MAP_START( map, 16, cs8221_device ) + AM_RANGE(0x0022, 0x0023) AM_DEVWRITE8("cs8221", cs8221_device, address_w, 0x00ff) + AM_RANGE(0x0022, 0x0023) AM_DEVREADWRITE8("cs8221", cs8221_device, data_r, data_w, 0xff00) +ADDRESS_MAP_END WRITE8_MEMBER( cs8221_device::address_w ) { diff --git a/src/devices/machine/cs8221.h b/src/devices/machine/cs8221.h index ea7cc4a99b4..b6a403bafba 100644 --- a/src/devices/machine/cs8221.h +++ b/src/devices/machine/cs8221.h @@ -49,6 +49,7 @@ public: DECLARE_WRITE8_MEMBER( address_w ); DECLARE_READ8_MEMBER( data_r ); DECLARE_WRITE8_MEMBER( data_w ); + DECLARE_ADDRESS_MAP(map, 16); // inline configuration static void static_set_cputag(device_t &device, const char *tag); diff --git a/src/devices/machine/ds2401.cpp b/src/devices/machine/ds2401.cpp index 7c74924404a..154deaea628 100644 --- a/src/devices/machine/ds2401.cpp +++ b/src/devices/machine/ds2401.cpp @@ -127,6 +127,7 @@ void ds2401_device::device_timer(emu_timer &timer, device_timer_id id, int param switch(m_shift) { case COMMAND_READROM: + case COMMAND_READROM_COMPAT: verboselog(1, "timer_main readrom\n"); m_bit = 0; m_byte = 0; diff --git a/src/devices/machine/ds2401.h b/src/devices/machine/ds2401.h index 11c05f27a02..5f4d87131f0 100644 --- a/src/devices/machine/ds2401.h +++ b/src/devices/machine/ds2401.h @@ -30,7 +30,8 @@ protected: enum { SIZE_DATA = 8, - COMMAND_READROM = 0x33 + COMMAND_READROM = 0x33, + COMMAND_READROM_COMPAT = 0x0f }; enum { diff --git a/src/devices/machine/eeprom.cpp b/src/devices/machine/eeprom.cpp index 43523c18fb1..c7374775042 100644 --- a/src/devices/machine/eeprom.cpp +++ b/src/devices/machine/eeprom.cpp @@ -21,21 +21,6 @@ #define LOG(x) do { if (VERBOSE) logerror x; } while (0) - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -static ADDRESS_MAP_START( eeprom_map8, AS_PROGRAM, 8, eeprom_base_device ) - AM_RANGE(0x00000, 0xfffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( eeprom_map16, AS_PROGRAM, 16, eeprom_base_device ) - AM_RANGE(0x00000, 0x7ffff) AM_RAM -ADDRESS_MAP_END - - - //************************************************************************** // LIVE DEVICE //************************************************************************** @@ -46,7 +31,6 @@ ADDRESS_MAP_END eeprom_base_device::eeprom_base_device(const machine_config &mconfig, device_type devtype, const char *name, const char *tag, device_t *owner, const char *shortname, const char *file) : device_t(mconfig, devtype, name, tag, owner, 0, shortname, file), - device_memory_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_region(*this, DEVICE_SELF), m_cells(0), @@ -85,12 +69,6 @@ void eeprom_base_device::static_set_size(device_t &device, int cells, int cellbi cells >>= 1; eeprom.m_address_bits++; } - - // describe our address space - if (eeprom.m_data_bits == 8) - eeprom.m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 8, eeprom.m_address_bits, 0, *ADDRESS_MAP_NAME(eeprom_map8)); - else - eeprom.m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 16, eeprom.m_address_bits * 2, 0, *ADDRESS_MAP_NAME(eeprom_map16)); } @@ -231,8 +209,12 @@ void eeprom_base_device::device_validity_check(validity_checker &valid) const void eeprom_base_device::device_start() { + UINT32 size = (m_data_bits == 8 ? 1 : 2) << m_address_bits; + m_data = std::make_unique(size); + // save states save_item(NAME(m_completion_time)); + save_pointer(m_data.get(), "m_data", size); } @@ -247,17 +229,6 @@ void eeprom_base_device::device_reset() } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *eeprom_base_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - - //------------------------------------------------- // nvram_default - called to initialize NVRAM to // its default state @@ -271,10 +242,7 @@ void eeprom_base_device::nvram_default() // initialize to the default value UINT32 default_value = m_default_value_set ? m_default_value : ~0; for (offs_t offs = 0; offs < eeprom_length; offs++) - if (m_data_bits == 8) - space(AS_PROGRAM).write_byte(offs, default_value); - else - space(AS_PROGRAM).write_word(offs * 2, default_value); + internal_write(offs, default_value); // handle hard-coded data from the driver if (m_default_data.u8 != nullptr) @@ -283,9 +251,9 @@ void eeprom_base_device::nvram_default() for (offs_t offs = 0; offs < m_default_data_size; offs++) { if (m_data_bits == 8) - space(AS_PROGRAM).write_byte(offs, m_default_data.u8[offs]); + internal_write(offs, m_default_data.u8[offs]); else - space(AS_PROGRAM).write_word(offs * 2, m_default_data.u16[offs]); + internal_write(offs, m_default_data.u16[offs]); } } @@ -300,18 +268,7 @@ void eeprom_base_device::nvram_default() fatalerror("eeprom region '%s' needs to be a 16-bit big-endian region\n", tag()); osd_printf_verbose("Loading data from EEPROM region '%s'\n", tag()); - if (m_data_bits == 8) - { - UINT8 *default_data = m_region->base(); - for (offs_t offs = 0; offs < eeprom_length; offs++) - space(AS_PROGRAM).write_byte(offs, default_data[offs]); - } - else - { - UINT16 *default_data = (UINT16 *)(m_region->base()); - for (offs_t offs = 0; offs < eeprom_length; offs++) - space(AS_PROGRAM).write_word(offs * 2, default_data[offs]); - } + memcpy(&m_data[0], m_region->base(), eeprom_bytes); } } @@ -326,10 +283,7 @@ void eeprom_base_device::nvram_read(emu_file &file) UINT32 eeprom_length = 1 << m_address_bits; UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; - dynamic_buffer buffer(eeprom_bytes); - file.read(&buffer[0], eeprom_bytes); - for (offs_t offs = 0; offs < eeprom_bytes; offs++) - space(AS_PROGRAM).write_byte(offs, buffer[offs]); + file.read(&m_data[0], eeprom_bytes); } @@ -343,10 +297,7 @@ void eeprom_base_device::nvram_write(emu_file &file) UINT32 eeprom_length = 1 << m_address_bits; UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8; - dynamic_buffer buffer(eeprom_bytes); - for (offs_t offs = 0; offs < eeprom_bytes; offs++) - buffer[offs] = space(AS_PROGRAM).read_byte(offs); - file.write(&buffer[0], eeprom_bytes); + file.write(&m_data[0], eeprom_bytes); } @@ -357,9 +308,9 @@ void eeprom_base_device::nvram_write(emu_file &file) UINT32 eeprom_base_device::internal_read(offs_t address) { if (m_data_bits == 16) - return space(AS_PROGRAM).read_word(address * 2); + return m_data[address * 2] | (m_data[address * 2 + 1] << 8); else - return space(AS_PROGRAM).read_byte(address); + return m_data[address]; } @@ -371,7 +322,9 @@ UINT32 eeprom_base_device::internal_read(offs_t address) void eeprom_base_device::internal_write(offs_t address, UINT32 data) { if (m_data_bits == 16) - space(AS_PROGRAM).write_word(address * 2, data); - else - space(AS_PROGRAM).write_byte(address, data); + { + m_data[address*2] = data; + m_data[address*2+1] = data >> 8; + } else + m_data[address] = data; } diff --git a/src/devices/machine/eeprom.h b/src/devices/machine/eeprom.h index 6eb802641e3..02dd2eaf6de 100644 --- a/src/devices/machine/eeprom.h +++ b/src/devices/machine/eeprom.h @@ -44,8 +44,7 @@ // ======================> eeprom_base_device class eeprom_base_device : public device_t, - public device_memory_interface, - public device_nvram_interface + public device_nvram_interface { protected: // construction/destruction @@ -79,31 +78,29 @@ public: // status bool ready() const { return machine().time() >= m_completion_time; } + // internal read/write without side-effects + UINT32 internal_read(offs_t address); + void internal_write(offs_t address, UINT32 data); + protected: // device-level overrides virtual void device_validity_check(validity_checker &valid) const override; virtual void device_start() override; virtual void device_reset() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read(emu_file &file) override; virtual void nvram_write(emu_file &file) override; - // internal read/write without side-effects - UINT32 internal_read(offs_t address); - void internal_write(offs_t address, UINT32 data); - optional_memory_region m_region; + std::unique_ptr m_data; + // configuration state UINT32 m_cells; UINT8 m_address_bits; UINT8 m_data_bits; - address_space_config m_space_config; generic_ptr m_default_data; UINT32 m_default_data_size; UINT32 m_default_value; diff --git a/src/devices/machine/gt64xxx.cpp b/src/devices/machine/gt64xxx.cpp index 51bf9dbc2f7..d1b0f15e61a 100644 --- a/src/devices/machine/gt64xxx.cpp +++ b/src/devices/machine/gt64xxx.cpp @@ -206,24 +206,24 @@ void gt64xxx_device::map_cpu_space() // PCI IO Window winStart = m_reg[GREG_PCI_IO_LO]<<21; winEnd = (m_reg[GREG_PCI_IO_LO]<<21) | (m_reg[GREG_PCI_IO_HI]<<21) | 0x1fffff; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::master_io_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::master_io_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::master_io_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::master_io_w), this)); if (LOG_GALILEO) logerror("%s: map_cpu_space pci_io start: %08X end: %08X\n", tag(), winStart, winEnd); // PCI MEM0 Window winStart = m_reg[GREG_PCI_MEM0_LO]<<21; winEnd = (m_reg[GREG_PCI_MEM0_LO]<<21) | (m_reg[GREG_PCI_MEM0_HI]<<21) | 0x1fffff; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::master_mem0_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::master_mem0_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::master_mem0_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::master_mem0_w), this)); if (LOG_GALILEO) logerror("%s: map_cpu_space pci_mem0 start: %08X end: %08X\n", tag(), winStart, winEnd); // PCI MEM1 Window winStart = m_reg[GREG_PCI_MEM1_LO]<<21; winEnd = (m_reg[GREG_PCI_MEM1_LO]<<21) | (m_reg[GREG_PCI_MEM1_HI]<<21) | 0x1fffff; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::master_mem1_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::master_mem1_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::master_mem1_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::master_mem1_w), this)); if (LOG_GALILEO) logerror("%s: map_cpu_space pci_mem1 start: %08X end: %08X\n", tag(), winStart, winEnd); @@ -266,8 +266,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_0_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_0_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_0_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_0_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS0 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); @@ -276,8 +276,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_1_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_1_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_1_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_1_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS1 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); @@ -286,8 +286,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_2_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_2_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_2_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_2_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS2 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); @@ -296,8 +296,8 @@ void gt64xxx_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_LO + 0x8 / 4 * ramIndex] << 20); winEnd = (m_reg[GREG_RAS_1_0_LO + 0x10 / 4 * (ramIndex / 2)] << 21) | (m_reg[GREG_RAS0_HI + 0x8 / 4 * ramIndex] << 20) | 0xfffff; winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(gt64xxx_device::ras_3_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(gt64xxx_device::ras_3_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(gt64xxx_device::ras_3_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(gt64xxx_device::ras_3_w), this)); if (LOG_GALILEO) logerror("%s: map_extra RAS3 start=%08X end=%08X size=%08X\n", tag(), winStart, winEnd, winSize); } diff --git a/src/devices/machine/hp_taco.cpp b/src/devices/machine/hp_taco.cpp index 9bd1c426a30..e8d8e8651d5 100644 --- a/src/devices/machine/hp_taco.cpp +++ b/src/devices/machine/hp_taco.cpp @@ -1686,42 +1686,35 @@ void hp_taco_device::call_unload() set_tape_present(false); } -void hp_taco_device::call_display() +std::string hp_taco_device::call_display() { -/* - // Mostly lifted from cassette_image_device::call_display ;) + std::string buffer; + // Mostly lifted from cassette_image_device::call_display ;) - // Do not show anything if image not loaded or tape not moving - if (!exists() || m_start_time.is_never()) { - return; - } + // Do not show anything if image not loaded or tape not moving + if (!exists() || m_start_time.is_never()) { + return buffer; + } - char buffer[ 64 ]; + char track = BIT(m_status_reg , STATUS_TRACKB_BIT) ? 'B' : 'A'; + char r_w = m_tape_wr ? 'W' : 'R'; + char m1; + char m2; - char track = BIT(m_status_reg , STATUS_TRACKB_BIT) ? 'B' : 'A'; - char r_w = m_tape_wr ? 'W' : 'R'; - char m1; - char m2; + if (m_tape_fwd) { + m1 = '>'; + m2 = m_tape_fast ? '>' : ' '; + } else { + m1 = '<'; + m2 = m_tape_fast ? '<' : ' '; + } - if (m_tape_fwd) { - m1 = '>'; - m2 = m_tape_fast ? '>' : ' '; - } else { - m1 = '<'; - m2 = m_tape_fast ? '<' : ' '; - } + int pos_in = current_tape_pos() / ONE_INCH_POS; - int pos_in = current_tape_pos() / ONE_INCH_POS; + buffer = string_format("%c %c %c%c [%04d/1824]" , track , r_w , m1 , m2 , pos_in); - snprintf(buffer , sizeof(buffer) , "%c %c %c%c [%04d/1824]" , track , r_w , m1 , m2 , pos_in); - - float x, y; - x = 0.2f; - y = 0.5f; - y *= device().machine().ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; - - device().machine().ui().draw_text_box(&device().machine().render().ui_container(), buffer, JUSTIFY_LEFT, x, y, UI_BACKGROUND_COLOR); - */ + // Not correct when there are 2 or more instances of TACO + return buffer; } const char *hp_taco_device::file_extensions() const diff --git a/src/devices/machine/hp_taco.h b/src/devices/machine/hp_taco.h index d8807616204..e8a4f06cb65 100644 --- a/src/devices/machine/hp_taco.h +++ b/src/devices/machine/hp_taco.h @@ -47,7 +47,7 @@ public: virtual bool call_load() override; virtual bool call_create(int format_type, option_resolution *format_options) override; virtual void call_unload() override; - virtual void call_display() override; + virtual std::string call_display() override; virtual iodevice_t image_type() const override { return IO_MAGTAPE; } virtual bool is_readable() const override { return true; } virtual bool is_writeable() const override { return true; } diff --git a/src/devices/machine/i2cmem.cpp b/src/devices/machine/i2cmem.cpp index ba320d1f5cd..bac06e66420 100644 --- a/src/devices/machine/i2cmem.cpp +++ b/src/devices/machine/i2cmem.cpp @@ -60,11 +60,6 @@ static inline void ATTR_PRINTF( 3, 4 ) verboselog( device_t *device, int n_level // device type definition const device_type I2CMEM = &device_creator; -static ADDRESS_MAP_START( i2cmem_map8, AS_PROGRAM, 8, i2cmem_device ) - AM_RANGE(0x0000, 0x0fff) AM_RAM -ADDRESS_MAP_END - - //************************************************************************** // LIVE DEVICE @@ -76,7 +71,6 @@ ADDRESS_MAP_END i2cmem_device::i2cmem_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock ) : device_t(mconfig, I2CMEM, "I2C Memory", tag, owner, clock, "i2cmem", __FILE__), - device_memory_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_region(*this, DEVICE_SELF), m_slave_address( I2CMEM_SLAVE_ADDRESS ), @@ -96,25 +90,6 @@ i2cmem_device::i2cmem_device( const machine_config &mconfig, const char *tag, de } -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void i2cmem_device::device_config_complete() -{ - int address_bits = 0; - - int i = m_data_size - 1; - while( i > 0 ) - { - address_bits++; - i >>= 1; - } - - m_space_config = address_space_config( "i2cmem", ENDIANNESS_BIG, 8, address_bits, 0, *ADDRESS_MAP_NAME( i2cmem_map8 ) ); -} //------------------------------------------------- @@ -123,6 +98,7 @@ void i2cmem_device::device_config_complete() void i2cmem_device::device_start() { + m_data = std::make_unique(m_data_size); m_page.resize( m_page_size ); save_item( NAME(m_scl) ); @@ -137,6 +113,7 @@ void i2cmem_device::device_start() save_item( NAME(m_shift) ); save_item( NAME(m_devsel) ); save_item( NAME(m_byteaddr) ); + save_pointer( &m_data[0], "m_data", m_data_size ); if ( m_page_size > 0 ) { save_item( NAME(m_page) ); @@ -153,17 +130,6 @@ void i2cmem_device::device_reset() } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *i2cmem_device::memory_space_config( address_spacenum spacenum ) const -{ - return ( spacenum == 0 ) ? &m_space_config : nullptr; -} - - //------------------------------------------------- // nvram_default - called to initialize NVRAM to // its default state @@ -171,20 +137,14 @@ const address_space_config *i2cmem_device::memory_space_config( address_spacenum void i2cmem_device::nvram_default() { - int i2cmem_bytes = m_data_size; - - UINT16 default_value = 0xff; - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - { - space(AS_PROGRAM).write_byte( offs, default_value ); - } + memset(&m_data[0], 0xff, m_data_size); /* populate from a memory region if present */ if (m_region.found()) { - if( m_region->bytes() != i2cmem_bytes ) + if( m_region->bytes() != m_data_size ) { - fatalerror( "i2cmem region '%s' wrong size (expected size = 0x%X)\n", tag(), i2cmem_bytes ); + fatalerror( "i2cmem region '%s' wrong size (expected size = 0x%X)\n", tag(), m_data_size ); } if( m_region->bytewidth() != 1 ) @@ -192,9 +152,7 @@ void i2cmem_device::nvram_default() fatalerror( "i2cmem region '%s' needs to be an 8-bit region\n", tag() ); } - UINT8 *default_data = m_region->base(); - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - space(AS_PROGRAM).write_byte( offs, default_data[offs] ); + memcpy(&m_data[0], m_region->base(), m_data_size); } } @@ -206,15 +164,7 @@ void i2cmem_device::nvram_default() void i2cmem_device::nvram_read( emu_file &file ) { - int i2cmem_bytes = m_data_size; - dynamic_buffer buffer ( i2cmem_bytes ); - - file.read( &buffer[0], i2cmem_bytes ); - - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - { - space(AS_PROGRAM).write_byte( offs, buffer[ offs ] ); - } + file.read( &m_data[0], m_data_size ); } //------------------------------------------------- @@ -224,15 +174,7 @@ void i2cmem_device::nvram_read( emu_file &file ) void i2cmem_device::nvram_write( emu_file &file ) { - int i2cmem_bytes = m_data_size; - dynamic_buffer buffer ( i2cmem_bytes ); - - for( offs_t offs = 0; offs < i2cmem_bytes; offs++ ) - { - buffer[ offs ] = space(AS_PROGRAM).read_byte( offs ); - } - - file.write( &buffer[0], i2cmem_bytes ); + file.write( &m_data[0], m_data_size ); } @@ -376,7 +318,7 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) for( int i = 0; i < m_page_size; i++ ) { - space(AS_PROGRAM).write_byte( offset + i, m_page[ i ] ); + m_data[offset + i] = m_page[ i ]; } m_page_offset = 0; @@ -387,7 +329,7 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) int offset = data_offset(); verboselog( this, 1, "data[ %04x ] <- %02x\n", offset, m_shift ); - space(AS_PROGRAM).write_byte( offset, m_shift ); + m_data[ offset ] = m_shift; m_byteaddr++; } @@ -420,7 +362,7 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) { int offset = data_offset(); - m_shift = space(AS_PROGRAM).read_byte( offset ); + m_shift = m_data[offset]; verboselog( this, 1, "data[ %04x ] -> %02x\n", offset, m_shift ); m_byteaddr++; } diff --git a/src/devices/machine/i2cmem.h b/src/devices/machine/i2cmem.h index a45a51098e3..801aa6de3bd 100644 --- a/src/devices/machine/i2cmem.h +++ b/src/devices/machine/i2cmem.h @@ -85,7 +85,6 @@ class i2cmem_device : public device_t, - public device_memory_interface, public device_nvram_interface { public: @@ -111,13 +110,9 @@ public: protected: // device-level overrides - virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const override; - // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read( emu_file &file ) override; @@ -130,10 +125,8 @@ protected: optional_memory_region m_region; - // device-specific configuration - address_space_config m_space_config; - // internal state + std::unique_ptr m_data; int m_slave_address; int m_page_size; int m_data_size; diff --git a/src/devices/machine/i8251.cpp b/src/devices/machine/i8251.cpp index 8baf4bc57ec..7b0d272970d 100644 --- a/src/devices/machine/i8251.cpp +++ b/src/devices/machine/i8251.cpp @@ -205,21 +205,20 @@ void i8251_device::transmit_clock() else return; - if (is_transmit_register_empty()) { - if ((m_status & I8251_STATUS_TX_READY) == 0 && (is_tx_enabled() || (m_flags & I8251_DELAYED_TX_EN) != 0)) { - start_tx(); - } else { - m_status |= I8251_STATUS_TX_EMPTY; - } - update_tx_ready(); - update_tx_empty(); + if (is_transmit_register_empty()) { + if ((m_status & I8251_STATUS_TX_READY) == 0 && (is_tx_enabled() || (m_flags & I8251_DELAYED_TX_EN) != 0)) { + start_tx(); + } else { + m_status |= I8251_STATUS_TX_EMPTY; } - /* if diserial has bits to send, make them so */ - if (!is_transmit_register_empty()) - { - UINT8 data = transmit_register_get_data_bit(); - m_txd_handler(data); - } + update_tx_ready(); + update_tx_empty(); + } + /* if diserial has bits to send, make them so */ + if (!is_transmit_register_empty()) { + UINT8 data = transmit_register_get_data_bit(); + m_txd_handler(data); + } #if 0 /* hunt mode? */ diff --git a/src/devices/machine/intelfsh.cpp b/src/devices/machine/intelfsh.cpp index 5f2c0a154ac..1f97af40168 100644 --- a/src/devices/machine/intelfsh.cpp +++ b/src/devices/machine/intelfsh.cpp @@ -110,48 +110,6 @@ const device_type INTEL_28F320J5 = &device_creator; const device_type SST_39VF400A = &device_creator; -static ADDRESS_MAP_START( memory_map8_512Kb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x00ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_1Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x01ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_2Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x03ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_4Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x07ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_8Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x0fffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map8_16Mb, AS_PROGRAM, 8, intelfsh_device ) - AM_RANGE(0x00000, 0x1fffff) AM_RAM -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( memory_map16_4Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x03ffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map16_16Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x0fffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map16_32Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x1fffff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( memory_map16_64Mb, AS_PROGRAM, 16, intelfsh_device ) - AM_RANGE(0x00000, 0x3fffff) AM_RAM -ADDRESS_MAP_END - - //************************************************************************** // LIVE DEVICE @@ -163,7 +121,6 @@ ADDRESS_MAP_END intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), - device_memory_interface(mconfig, *this), device_nvram_interface(mconfig, *this), m_region(*this, DEVICE_SELF), m_type(variant), @@ -182,8 +139,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_timer(nullptr), m_bank(0) { - address_map_constructor map = nullptr; - switch( variant ) { case FLASH_INTEL_28F016S5: @@ -192,7 +147,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_size = 0x200000; m_maker_id = MFG_INTEL; m_device_id = 0xaa; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_ATMEL_29C010: m_bits = 8; @@ -200,21 +154,18 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_page_size = 0x80; m_maker_id = MFG_ATMEL; m_device_id = 0xd5; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_AMD_29F010: m_bits = 8; m_size = 0x20000; m_maker_id = MFG_AMD; m_device_id = 0x20; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_AMD_29F040: m_bits = 8; m_size = 0x80000; m_maker_id = MFG_AMD; m_device_id = 0xa4; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; case FLASH_AMD_29F080: m_bits = 8; @@ -222,7 +173,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_addrmask = 0x7ff; m_maker_id = MFG_AMD; m_device_id = 0xd5; - map = ADDRESS_MAP_NAME( memory_map8_8Mb ); break; case FLASH_AMD_29F400T: m_bits = 8; @@ -230,7 +180,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_AMD; m_device_id = 0x23; m_top_boot_sector = true; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; case FLASH_AMD_29F800T: m_bits = 8; @@ -238,14 +187,12 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_AMD; m_device_id = 0xda; m_top_boot_sector = true; - map = ADDRESS_MAP_NAME( memory_map8_8Mb ); break; case FLASH_AMD_29LV200T: m_bits = 8; m_size = 0x40000; m_maker_id = MFG_AMD; m_device_id = 0x3b; - map = ADDRESS_MAP_NAME( memory_map8_2Mb ); break; case FLASH_INTEL_28F320J3D: m_bits = 16; @@ -253,7 +200,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_INTEL; m_device_id = 0x16; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map16_32Mb ); break; case FLASH_INTEL_28F320J5: // funkball m_bits = 16; @@ -261,7 +207,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_INTEL; m_device_id = 0x14; // m_sector_is_4k = true; 128kb? - map = ADDRESS_MAP_NAME( memory_map16_32Mb ); break; case FLASH_SST_39VF020: m_bits = 8; @@ -269,7 +214,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_SST; m_device_id = 0xd6; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map8_2Mb ); break; case FLASH_SST_39VF400A: m_bits = 16; @@ -277,21 +221,18 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_SST; m_device_id = 0xd6; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map16_4Mb ); break; case FLASH_SHARP_LH28F400: m_bits = 16; m_size = 0x80000; m_maker_id = MFG_SHARP; m_device_id = 0xed; - map = ADDRESS_MAP_NAME( memory_map16_4Mb ); break; case FLASH_INTEL_E28F400B: m_bits = 16; m_size = 0x80000; m_maker_id = MFG_INTEL; m_device_id = 0x4471; - map = ADDRESS_MAP_NAME( memory_map16_4Mb ); break; case FLASH_FUJITSU_29F160T: m_bits = 8; @@ -299,56 +240,48 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_FUJITSU; m_device_id = 0xad; m_top_boot_sector = true; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_FUJITSU_29F016A: m_bits = 8; m_size = 0x200000; m_maker_id = MFG_FUJITSU; m_device_id = 0xad; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_FUJITSU_29DL16X: m_bits = 8; m_size = 0x200000; m_maker_id = MFG_FUJITSU; m_device_id = 0x35; - map = ADDRESS_MAP_NAME( memory_map8_16Mb ); break; case FLASH_INTEL_E28F008SA: m_bits = 8; m_size = 0x100000; m_maker_id = MFG_INTEL; m_device_id = 0xa2; - map = ADDRESS_MAP_NAME( memory_map8_8Mb ); break; case FLASH_INTEL_TE28F160: m_bits = 16; m_size = 0x200000; m_maker_id = MFG_SHARP; m_device_id = 0xd0; - map = ADDRESS_MAP_NAME( memory_map16_16Mb ); break; case FLASH_INTEL_TE28F320: m_bits = 16; m_size = 0x400000; m_maker_id = MFG_INTEL; m_device_id = 0x8896; - map = ADDRESS_MAP_NAME( memory_map16_32Mb ); break; case FLASH_SHARP_UNK128MBIT: m_bits = 16; m_size = 0x800000; m_maker_id = MFG_SHARP; m_device_id = 0xb0; - map = ADDRESS_MAP_NAME( memory_map16_64Mb ); break; case FLASH_MACRONIX_29L001MC: m_bits = 8; m_size = 0x20000; m_maker_id = MFG_MACRONIX; m_device_id = 0x51; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_MACRONIX_29LV160TMC: m_bits = 8; @@ -356,7 +289,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_MACRONIX; m_device_id = 0x49; m_sector_is_16k = true; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_PANASONIC_MN63F805MNP: m_bits = 8; @@ -364,7 +296,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_PANASONIC; m_device_id = 0x1b; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map8_512Kb ); break; case FLASH_SANYO_LE26FV10N1TS: m_bits = 8; @@ -372,14 +303,12 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_maker_id = MFG_SANYO; m_device_id = 0x13; m_sector_is_4k = true; - map = ADDRESS_MAP_NAME( memory_map8_1Mb ); break; case FLASH_SST_28SF040: m_bits = 8; m_size = 0x80000; m_maker_id = MFG_SST; m_device_id = 0x04; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; case FLASH_TMS_29F040: m_bits = 8; @@ -387,7 +316,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type m_size = 0x80000; m_maker_id = MFG_AMD; m_device_id = 0xa4; - map = ADDRESS_MAP_NAME( memory_map8_4Mb ); break; } @@ -395,8 +323,6 @@ intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type for (addrbits = 24; addrbits > 0; addrbits--) if ((m_size & (1 << addrbits)) != 0) break; - - m_space_config = address_space_config("flash", ENDIANNESS_BIG, m_bits, addrbits, (m_bits == 8) ? 0 : -1, map); } intelfsh8_device::intelfsh8_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) @@ -498,11 +424,13 @@ tms_29f040_device::tms_29f040_device(const machine_config &mconfig, const char * void intelfsh_device::device_start() { + m_data = std::make_unique(m_size); m_timer = timer_alloc(); save_item( NAME(m_status) ); save_item( NAME(m_flash_mode) ); save_item( NAME(m_flash_master_lock) ); + save_pointer( &m_data[0], "m_data", m_size); } @@ -525,17 +453,6 @@ void intelfsh_device::device_timer(emu_timer &timer, device_timer_id id, int par } -//------------------------------------------------- -// memory_space_config - return a description of -// any address spaces owned by this device -//------------------------------------------------- - -const address_space_config *intelfsh_device::memory_space_config(address_spacenum spacenum) const -{ - return (spacenum == 0) ? &m_space_config : nullptr; -} - - //------------------------------------------------- // nvram_default - called to initialize NVRAM to // its default state @@ -553,19 +470,21 @@ void intelfsh_device::nvram_default() if (m_bits == 8) { for (offs_t offs = 0; offs < bytes; offs++) - space(AS_PROGRAM).write_byte(offs, m_region->u8(offs)); + m_data[offs] = m_region->u8(offs); } else { - for (offs_t offs = 0; offs < bytes; offs += 2) - space(AS_PROGRAM).write_word(offs, m_region->u16(offs / 2)); + for (offs_t offs = 0; offs < bytes; offs += 2) { + UINT16 v = m_region->u16(offs / 2); + m_data[offs] = v >> 8; + m_data[offs+1] = v; + } } return; } // otherwise, default to 0xff - for (offs_t offs = 0; offs < m_size; offs++) - space(AS_PROGRAM).write_byte(offs, 0xff); + memset(&m_data[0], 0xff, m_size); } @@ -576,10 +495,7 @@ void intelfsh_device::nvram_default() void intelfsh_device::nvram_read(emu_file &file) { - dynamic_buffer buffer(m_size); - file.read(&buffer[0], m_size); - for (int byte = 0; byte < m_size; byte++) - space(AS_PROGRAM).write_byte(byte, buffer[byte]); + file.read(&m_data[0], m_size); } @@ -590,10 +506,7 @@ void intelfsh_device::nvram_read(emu_file &file) void intelfsh_device::nvram_write(emu_file &file) { - dynamic_buffer buffer(m_size); - for (int byte = 0; byte < m_size; byte++) - buffer[byte] = space(AS_PROGRAM).read_byte(byte); - file.write(&buffer[0], m_size); + file.write(&m_data[0], m_size); } @@ -614,12 +527,12 @@ UINT32 intelfsh_device::read_full(UINT32 address) { case 8: { - data = space(AS_PROGRAM).read_byte(address); + data = m_data[address]; } break; case 16: { - data = space(AS_PROGRAM).read_word(address * 2); + data = m_data[address*2+1] | (m_data[address*2] << 8); } break; } @@ -693,12 +606,12 @@ UINT32 intelfsh_device::read_full(UINT32 address) { case 8: { - data = space(AS_PROGRAM).read_byte(address); + data = m_data[address]; } break; case 16: { - data = space(AS_PROGRAM).read_word(address * 2); + data = m_data[address*2+1] | (m_data[address*2] << 8); } break; } @@ -921,8 +834,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) (( address & 0xfff ) == 0xaaa && ( data & 0xff ) == 0x10 ) ) { // chip erase - for (offs_t offs = 0; offs < m_size; offs++) - space(AS_PROGRAM).write_byte(offs, 0xff); + memset(&m_data[0], 0xff, m_size); m_status = 1 << 3; m_flash_mode = FM_ERASEAMD4; @@ -947,15 +859,13 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) UINT32 base = address * ((m_bits == 16) ? 2 : 1); if (m_sector_is_4k) { - for (offs_t offs = 0; offs < 4 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0xfff) + offs, 0xff); + memset(&m_data[base & ~0xfff], 0xff, 4 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x7ff : ~0xfff); m_timer->adjust( attotime::from_msec( 125 ) ); } else if(m_sector_is_16k) { - for (offs_t offs = 0; offs < 16 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x3fff) + offs, 0xff); + memset(&m_data[base & ~0x3fff], 0xff, 16 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x1fff : ~0x3fff); m_timer->adjust( attotime::from_msec( 500 ) ); } @@ -963,30 +873,26 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { if (address >= (m_size - (16*1024))) { - for (offs_t offs = 0; offs < 16 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x3fff) + offs, 0xff); + memset(&m_data[base & ~0x3fff], 0xff, 16 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x1fff : ~0x3fff); m_timer->adjust( attotime::from_msec( 500 ) ); } else if (address >= (m_size - (32*1024))) { - for (offs_t offs = 0; offs < 8 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x1fff) + offs, 0xff); + memset(&m_data[base & ~0x1fff], 0xff, 8 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0xfff : ~0x1fff); m_timer->adjust( attotime::from_msec( 250 ) ); } else { - for (offs_t offs = 0; offs < 32 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0x7fff) + offs, 0xff); + memset(&m_data[base & ~0x7fff], 0xff, 32 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x3fff : ~0x7fff); m_timer->adjust( attotime::from_msec( 500 ) ); } } else { - for (offs_t offs = 0; offs < 64 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0xffff) + offs, 0xff); + memset(&m_data[base & ~0xffff], 0xff, 64 * 1024); m_erase_sector = address & ((m_bits == 16) ? ~0x7fff : ~0xffff); m_timer->adjust( attotime::from_seconds( 1 ) ); } @@ -1004,7 +910,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { case 8: { - space(AS_PROGRAM).write_byte(address, data); + m_data[address] = data; } break; default: @@ -1017,10 +923,11 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) switch( m_bits ) { case 8: - space(AS_PROGRAM).write_byte(address, data); + m_data[address] = data; break; case 16: - space(AS_PROGRAM).write_word(address * 2, data); + m_data[address*2] = data >> 8; + m_data[address] = data; break; default: logerror( "FM_WRITEPART1 not supported when m_bits == %d\n", m_bits ); @@ -1036,10 +943,11 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) switch( m_bits ) { case 8: - space(AS_PROGRAM).write_byte(address, data); + m_data[address] = data; break; case 16: - space(AS_PROGRAM).write_word(address * 2, data); + m_data[address*2] = data >> 8; + m_data[address] = data; break; default: logerror( "FM_WRITEPAGEATMEL not supported when m_bits == %d\n", m_bits ); @@ -1060,8 +968,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { // clear the 256 bytes block containing the current address to all 0xffs UINT32 base = address * ((m_bits == 16) ? 2 : 1); - for (offs_t offs = 0; offs < 256; offs++) - space(AS_PROGRAM).write_byte((base & ~0xff) + offs, 0xff); + memset(&m_data[base & ~0xff], 0xff, 256); m_timer->adjust( attotime::from_msec( 4 ) ); } @@ -1103,8 +1010,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) } // clear the block containing the current address to all 0xffffs - for (offs_t offs = 0; offs < size / 2; offs += 2) - space(AS_PROGRAM).write_word(base | offs, 0xffff); + memset(&m_data[2*base], 0xff, size); m_timer->adjust( attotime::from_msec( duration ) ); } @@ -1112,8 +1018,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data) { // clear the 64k block containing the current address to all 0xffs UINT32 base = address * ((m_bits == 16) ? 2 : 1); - for (offs_t offs = 0; offs < 64 * 1024; offs++) - space(AS_PROGRAM).write_byte((base & ~0xffff) + offs, 0xff); + memset(&m_data[base & ~0xffff], 0xff, 64 * 1024); m_timer->adjust( attotime::from_seconds( 1 ) ); } diff --git a/src/devices/machine/intelfsh.h b/src/devices/machine/intelfsh.h index 611c2a01d49..68604a453ab 100644 --- a/src/devices/machine/intelfsh.h +++ b/src/devices/machine/intelfsh.h @@ -106,7 +106,6 @@ class intelfsh_device; // ======================> intelfsh_device class intelfsh_device : public device_t, - public device_memory_interface, public device_nvram_interface { public: @@ -145,6 +144,8 @@ public: FLASH_SST_39VF400A }; + UINT8 *base() { return &m_data[0]; } + protected: // construction/destruction intelfsh_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); @@ -154,9 +155,6 @@ protected: virtual void device_start() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; - // device_memory_interface overrides - virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override; - // device_nvram_interface overrides virtual void nvram_default() override; virtual void nvram_read(emu_file &file) override; @@ -166,29 +164,29 @@ protected: UINT32 read_full(UINT32 offset); void write_full(UINT32 offset, UINT32 data); - optional_memory_region m_region; + optional_memory_region m_region; // configuration state - address_space_config m_space_config; - UINT32 m_type; - INT32 m_size; - UINT8 m_bits; - UINT32 m_addrmask; - UINT16 m_device_id; - UINT8 m_maker_id; - bool m_sector_is_4k; - bool m_sector_is_16k; - bool m_top_boot_sector; - UINT8 m_page_size; + UINT32 m_type; + INT32 m_size; + UINT8 m_bits; + UINT32 m_addrmask; + UINT16 m_device_id; + UINT8 m_maker_id; + bool m_sector_is_4k; + bool m_sector_is_16k; + bool m_top_boot_sector; + UINT8 m_page_size; // internal state - UINT8 m_status; - INT32 m_erase_sector; - INT32 m_flash_mode; - bool m_flash_master_lock; - emu_timer * m_timer; - INT32 m_bank; - UINT8 m_byte_count; + std::unique_ptr m_data; + UINT8 m_status; + INT32 m_erase_sector; + INT32 m_flash_mode; + bool m_flash_master_lock; + emu_timer * m_timer; + INT32 m_bank; + UINT8 m_byte_count; }; @@ -207,8 +205,8 @@ public: DECLARE_READ8_MEMBER(read) { return read_full(offset); } DECLARE_WRITE8_MEMBER(write) { write_full(offset, data); } - UINT8 read_raw(offs_t offset) { return space(AS_PROGRAM).read_byte(offset); } - void write_raw(offs_t offset, UINT8 data) { space(AS_PROGRAM).write_byte(offset, data); } + UINT8 read_raw(offs_t offset) { return m_data[offset]; } + void write_raw(offs_t offset, UINT8 data) { m_data[offset] = data; } }; @@ -227,8 +225,8 @@ public: DECLARE_READ16_MEMBER(read) { return read_full(offset); } DECLARE_WRITE16_MEMBER(write) { write_full(offset, data); } - UINT16 read_raw(offs_t offset) { return space(AS_PROGRAM).read_word(offset * 2); } - void write_raw(offs_t offset, UINT16 data) { space(AS_PROGRAM).write_word(offset * 2, data); } + UINT16 read_raw(offs_t offset) { return m_data[offset*2] | (m_data[offset*2+1] << 8); } + void write_raw(offs_t offset, UINT16 data) { m_data[offset*2] = data; m_data[offset*2+1] = data >> 8; } }; diff --git a/src/devices/machine/laserdsc.h b/src/devices/machine/laserdsc.h index 7da9dbc94f3..fa67a167ddc 100644 --- a/src/devices/machine/laserdsc.h +++ b/src/devices/machine/laserdsc.h @@ -79,6 +79,8 @@ enum laserdisc_field_code laserdisc_device::static_set_overlay_palette(*device, "^" _palette_tag); // use these to add laserdisc screens with proper video update parameters +// TODO: actually move these SCREEN_RAW_PARAMS to a common screen info header +// TODO: someday we'll kill the pixel clock hack ... #define MCFG_LASERDISC_SCREEN_ADD_NTSC(_tag, _ldtag) \ MCFG_DEVICE_MODIFY(_ldtag) \ laserdisc_device::static_set_screen(*device, _tag); \ @@ -86,13 +88,13 @@ enum laserdisc_field_code MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER) \ MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz*2, 910, 0, 704, 525, 44, 524) \ MCFG_SCREEN_UPDATE_DEVICE(_ldtag, laserdisc_device, screen_update) -// not correct yet; fix me... + #define MCFG_LASERDISC_SCREEN_ADD_PAL(_tag, _ldtag) \ MCFG_DEVICE_MODIFY(_ldtag) \ laserdisc_device::static_set_screen(*device, _tag); \ MCFG_SCREEN_ADD(_tag, RASTER) \ MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_SELF_RENDER) \ - MCFG_SCREEN_RAW_PARAMS(XTAL_14_31818MHz, 910, 0, 704, 525.0/2, 0, 480/2) \ + MCFG_SCREEN_RAW_PARAMS(XTAL_17_73447MHz*2, 1135, 0, 768, 625, 48, 624) \ MCFG_SCREEN_UPDATE_DEVICE(_ldtag, laserdisc_device, screen_update) diff --git a/src/devices/machine/ldp1000.cpp b/src/devices/machine/ldp1000.cpp new file mode 100644 index 00000000000..abfa23913b0 --- /dev/null +++ b/src/devices/machine/ldp1000.cpp @@ -0,0 +1,218 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese +/*************************************************************************** + + Sony LDP-1000 laserdisc emulation. + + TODO: + - Dump BIOSes (seven of them according to docs); + - Serial interface, needs BIOS dump; + - Hookup with Sony SMC-70 / SMC-777; + +***************************************************************************/ + +#include "emu.h" +#include "machine/ldp1000.h" + +#define DUMP_BCD 1 +#define FIFO_MAX 0x10 + +ROM_START( ldp1000 ) + ROM_REGION( 0x2000, "ldp1000", 0 ) + ROM_LOAD( "ldp1000_bios.bin", 0x0000, 0x2000, NO_DUMP ) +ROM_END + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +// device type definition +const device_type SONY_LDP1000 = &device_creator; + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// ldp1000_device - constructor +//------------------------------------------------- + +sony_ldp1000_device::sony_ldp1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : laserdisc_device(mconfig, SONY_LDP1000, "Sony LDP-1000", tag, owner, clock, "ldp1000", __FILE__) +{ +} + + +//------------------------------------------------- +// device_validity_check - perform validity checks +// on this device +//------------------------------------------------- + +void sony_ldp1000_device::device_validity_check(validity_checker &valid) const +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void sony_ldp1000_device::device_start() +{ + laserdisc_device::device_start(); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void sony_ldp1000_device::device_reset() +{ + laserdisc_device::device_reset(); + + for(int i=0;i<0x10;i++) + m_internal_bcd[i] = 0; + +} + +//------------------------------------------------- +// device_rom_region - return a pointer to our +// ROM region definitions +//------------------------------------------------- + +const rom_entry *sony_ldp1000_device::device_rom_region() const +{ + return ROM_NAME(ldp1000); +} + + +//------------------------------------------------- +// player_vsync - VSYNC callback, called at the +// start of the blanking period +//------------------------------------------------- + +void sony_ldp1000_device::player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) +{ + //printf("%d vsync\n",fieldnum); +} + + +//------------------------------------------------- +// player_update - update callback, called on +// the first visible line of the frame +//------------------------------------------------- + +INT32 sony_ldp1000_device::player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) +{ + //printf("%d update\n",fieldnum); + + return fieldnum; +} + + +//************************************************************************** +// READ/WRITE HANDLERS +//************************************************************************** + +READ8_MEMBER( sony_ldp1000_device::status_r ) +{ + UINT8 res = m_status; + m_status = stat_undef; + return res; +} + +void sony_ldp1000_device::set_new_player_state(ldp1000_player_state which) +{ + m_player_state = which; + m_index_state = 0; + printf("set new player state\n"); +} + +// TODO: probably don't even need a size ... +void sony_ldp1000_device::set_new_player_bcd(UINT8 data) +{ + m_internal_bcd[m_index_state] = data; + m_index_state ++; + if(m_index_state >= FIFO_MAX) + throw emu_fatalerror("FIFO MAX reached"); + + m_status = stat_ack; +} + +UINT32 sony_ldp1000_device::bcd_to_raw() +{ + UINT32 res = 0; + for(int i=0;i<6;i++) + res |= (m_internal_bcd[i] & 0xf) << i*4; + return res; +} + +void sony_ldp1000_device::exec_enter_cmd() +{ + //const UINT32 saved_frame = bcd_to_raw(); + + switch(m_player_state) + { + case player_standby: + throw emu_fatalerror("Unimplemented standby state detected"); + + case player_search: + // TODO: move to timer + //advance_slider(1); + //set_slider_speed(saved_frame); + break; + } + m_player_state = player_standby; +} + + +// TODO: de-instantize this +WRITE8_MEMBER( sony_ldp1000_device::command_w ) +{ + printf("CMD %02x\n",data); + // 0x30 to 0x69 range causes an ACK, anything else is invalid + m_command = data; + + if((m_command & 0xf0) == 0x30 && (m_command & 0xf) < 0x0a) + { + set_new_player_bcd(data); + return; + } + + switch(m_command) + { + case 0x40: // enter, process BCD command + exec_enter_cmd(); + m_status = stat_ack; + break; + + case 0x43: // search + set_new_player_state(player_search); + m_status = stat_ack; + break; + + /* + audio channels absolute enable / disable + ---- --x- select channel + ---- ---x enable channel (active low) + */ + case 0x46: + case 0x47: + case 0x48: + case 0x49: + m_audio_enable[(m_command & 2) >> 1] = (m_command & 1) == 0; + m_status = stat_ack; + break; + + case 0x56: // Clear All + m_status = stat_ack; + // reset any pending operation here + break; + + default: + m_status = stat_undef; + break; + } +} diff --git a/src/devices/machine/ldp1000.h b/src/devices/machine/ldp1000.h new file mode 100644 index 00000000000..142886da936 --- /dev/null +++ b/src/devices/machine/ldp1000.h @@ -0,0 +1,96 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese +/*************************************************************************** + + Sony LDP-1000 laserdisc emulation. + +***************************************************************************/ + +#pragma once + +#ifndef __LDP1000DEV_H__ +#define __LDP1000DEV_H__ + +#include "laserdsc.h" + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_LASERDISC_LDP1000_ADD(_tag) \ + MCFG_DEVICE_ADD(_tag, SONY_LDP1000, 0) + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// device type definition +extern const device_type SONY_LDP1000; + +// ======================> sony_ldp1000_device + +class sony_ldp1000_device : public laserdisc_device +{ +public: + // construction/destruction + sony_ldp1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // I/O operations TODO: both actually protected + DECLARE_WRITE8_MEMBER( command_w ); + DECLARE_READ8_MEMBER( status_r ); + +protected: + // device-level overrides + virtual void device_validity_check(validity_checker &valid) const override; + virtual void device_start() override; + virtual void device_reset() override; + virtual const rom_entry *device_rom_region() const override; + + virtual void player_vsync(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override; + virtual INT32 player_update(const vbi_metadata &vbi, int fieldnum, const attotime &curtime) override; + virtual void player_overlay(bitmap_yuy16 &bitmap) override { } + + enum ldp1000_status { + stat_undef = 0x00, + stat_completion = 0x01, + stat_error = 0x02, + stat_pgm_end = 0x04, + stat_not_target = 0x05, + stat_no_frame = 0x06, + stat_ack = 0x0a, + stat_nak = 0x0b + }; + + enum ldp1000_player_state { + player_standby = 0, + player_search + }; + +private: + UINT8 m_command; + ldp1000_status m_status; + ldp1000_player_state m_player_state; + bool m_audio_enable[2]; + // TODO: sub-class into a specific internal player state + void set_new_player_state(ldp1000_player_state which); + void set_new_player_bcd(UINT8 data); + UINT32 bcd_to_raw(); + void exec_enter_cmd(); + UINT8 m_internal_bcd[0x10]; + UINT8 m_index_state; + +}; + + + + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + + + +#endif diff --git a/src/devices/machine/ldv1000.cpp b/src/devices/machine/ldv1000.cpp index 36dae481853..27c874eadf7 100644 --- a/src/devices/machine/ldv1000.cpp +++ b/src/devices/machine/ldv1000.cpp @@ -63,8 +63,8 @@ const device_type PIONEER_LDV1000 = &device_creator; static ADDRESS_MAP_START( ldv1000_map, AS_PROGRAM, 8, pioneer_ldv1000_device ) AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x6000) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x3800) AM_RAM - AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x9ff0) AM_DEVREADWRITE("ldvppi0", i8255_device, read, write) - AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x9ff0) AM_DEVREADWRITE("ldvppi1", i8255_device, read, write) + AM_RANGE(0xc000, 0xc003) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("ldvppi0", i8255_device, read, write) + AM_RANGE(0xc004, 0xc007) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("ldvppi1", i8255_device, read, write) ADDRESS_MAP_END @@ -126,6 +126,7 @@ pioneer_ldv1000_device::pioneer_ldv1000_device(const machine_config &mconfig, co m_z80_cpu(*this, "ldv1000"), m_z80_ctc(*this, "ldvctc"), m_multitimer(nullptr), + m_command_strobe_cb(*this), m_command(0), m_status(0), m_vsync(false), @@ -175,6 +176,8 @@ void pioneer_ldv1000_device::device_start() // allocate timers m_multitimer = timer_alloc(TID_MULTIJUMP); + + m_command_strobe_cb.resolve_safe(); } @@ -648,6 +651,9 @@ WRITE8_MEMBER( pioneer_ldv1000_device::ppi1_portc_w ) printf("\n"); } + // bit 4 sends a command strobe signal to Host CPU + m_command_strobe_cb(bool(data & 0x10)); + // video squelch is controlled by bit 3 set_video_squelch((data & 0x08) == 0); diff --git a/src/devices/machine/ldv1000.h b/src/devices/machine/ldv1000.h index c2f9ead67a6..c7d798d89df 100644 --- a/src/devices/machine/ldv1000.h +++ b/src/devices/machine/ldv1000.h @@ -26,6 +26,10 @@ #define MCFG_LASERDISC_LDV1000_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, PIONEER_LDV1000, 0) +#define MCFG_LASERDISC_LDV1000_COMMAND_STROBE_CB(_cb) \ + downcast(device)->set_command_strobe_callback(DEVCB_##_cb); + + //************************************************************************** // GLOBAL VARIABLES @@ -49,6 +53,8 @@ public: // construction/destruction pioneer_ldv1000_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template void set_command_strobe_callback(_cmd_strobe_cb latch) { m_command_strobe_cb.set_callback(latch); } + // input and output void data_w(UINT8 data); void enter_w(UINT8 data); @@ -102,6 +108,7 @@ protected: required_device m_z80_cpu; /* CPU index of the Z80 */ required_device m_z80_ctc; /* CTC device */ emu_timer * m_multitimer; /* multi-jump timer device */ + devcb_write_line m_command_strobe_cb; /* communication status */ UINT8 m_command; /* command byte to the player */ @@ -122,6 +129,7 @@ protected: UINT8 m_vbi[7*3]; /* VBI data */ bool m_vbiready; /* VBI ready flag */ UINT8 m_vbiindex; /* index within the VBI data */ + }; diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index a3936b9e5d4..7160b696b52 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -27,6 +27,7 @@ const device_type NETLIST_SOUND = &device_creator; /* subdevices */ const device_type NETLIST_ANALOG_INPUT = &device_creator; +const device_type NETLIST_INT_INPUT = &device_creator; const device_type NETLIST_LOGIC_INPUT = &device_creator; const device_type NETLIST_STREAM_INPUT = &device_creator; @@ -100,7 +101,7 @@ void netlist_mame_analog_output_t::custom_netlist_additions(netlist::setup_t &se pstring dname = "OUT_" + m_in; m_delegate.bind_relative_to(owner()->machine().root_device()); - plib::powned_ptr dev = plib::powned_ptr::Create(setup.netlist(), setup.build_fqn(dname)); + plib::owned_ptr dev = plib::owned_ptr::Create(setup.netlist(), setup.build_fqn(dname)); static_cast(dev.get())->register_callback(m_delegate); setup.register_dev(std::move(dev)); setup.register_link(dname + ".IN", m_in); @@ -113,11 +114,11 @@ void netlist_mame_analog_output_t::device_start() // ---------------------------------------------------------------------------------------- -// netlist_mame_logic_input_t +// netlist_mame_int_input_t // ---------------------------------------------------------------------------------------- -netlist_mame_logic_input_t::netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, NETLIST_ANALOG_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__), +netlist_mame_int_input_t::netlist_mame_int_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, NETLIST_INT_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__), netlist_mame_sub_interface(*owner), m_param(nullptr), m_mask(0xffffffff), @@ -126,16 +127,16 @@ netlist_mame_logic_input_t::netlist_mame_logic_input_t(const machine_config &mco { } -void netlist_mame_logic_input_t::static_set_params(device_t &device, const char *param_name, const UINT32 mask, const UINT32 shift) +void netlist_mame_int_input_t::static_set_params(device_t &device, const char *param_name, const UINT32 mask, const UINT32 shift) { - netlist_mame_logic_input_t &netlist = downcast(device); + netlist_mame_int_input_t &netlist = downcast(device); LOG_DEV_CALLS(("static_set_params %s\n", device.tag())); netlist.m_param_name = param_name; netlist.m_shift = shift; netlist.m_mask = mask; } -void netlist_mame_logic_input_t::device_start() +void netlist_mame_int_input_t::device_start() { LOG_DEV_CALLS(("start %s\n", tag())); netlist::param_t *p = downcast(this->owner())->setup().find_param(m_param_name); @@ -146,6 +147,38 @@ void netlist_mame_logic_input_t::device_start() } } +// ---------------------------------------------------------------------------------------- +// netlist_mame_logic_input_t +// ---------------------------------------------------------------------------------------- + +netlist_mame_logic_input_t::netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, NETLIST_LOGIC_INPUT, "Netlist Logic Input", tag, owner, clock, "netlist_logic_input", __FILE__), + netlist_mame_sub_interface(*owner), + m_param(nullptr), + m_shift(0), + m_param_name("") +{ +} + +void netlist_mame_logic_input_t::static_set_params(device_t &device, const char *param_name, const UINT32 shift) +{ + netlist_mame_logic_input_t &netlist = downcast(device); + LOG_DEV_CALLS(("static_set_params %s\n", device.tag())); + netlist.m_param_name = param_name; + netlist.m_shift = shift; +} + +void netlist_mame_logic_input_t::device_start() +{ + LOG_DEV_CALLS(("start %s\n", tag())); + netlist::param_t *p = downcast(this->owner())->setup().find_param(m_param_name); + m_param = dynamic_cast(p); + if (m_param == nullptr) + { + fatalerror("device %s wrong parameter type for %s\n", basetag(), m_param_name.cstr()); + } +} + // ---------------------------------------------------------------------------------------- // netlist_mame_stream_input_t // ---------------------------------------------------------------------------------------- @@ -264,7 +297,7 @@ ADDRESS_MAP_END netlist_mame_device_t::netlist_mame_device_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, NETLIST_CORE, "Netlist core device", tag, owner, clock, "netlist_core", __FILE__), m_icount(0), - m_old(netlist::netlist_time::zero), + m_old(netlist::netlist_time::zero()), m_netlist(nullptr), m_setup(nullptr), m_setup_func(nullptr) @@ -274,7 +307,7 @@ netlist_mame_device_t::netlist_mame_device_t(const machine_config &mconfig, cons netlist_mame_device_t::netlist_mame_device_t(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *file) : device_t(mconfig, type, name, tag, owner, clock, shortname, file), m_icount(0), - m_old(netlist::netlist_time::zero), + m_old(netlist::netlist_time::zero()), m_netlist(nullptr), m_setup(nullptr), m_setup_func(nullptr) @@ -322,14 +355,14 @@ void netlist_mame_device_t::device_start() m_setup->start_devices(); m_setup->resolve_inputs(); - netlist().save_item(m_rem, this, "m_rem"); - netlist().save_item(m_div, this, "m_div"); - netlist().save_item(m_old, this, "m_old"); + netlist().save(*this, m_rem, "m_rem"); + netlist().save(*this, m_div, "m_div"); + netlist().save(*this, m_old, "m_old"); save_state(); - m_old = netlist::netlist_time::zero; - m_rem = netlist::netlist_time::zero; + m_old = netlist::netlist_time::zero(); + m_rem = netlist::netlist_time::zero(); LOG_DEV_CALLS(("device_start exit %s\n", tag())); } @@ -344,8 +377,8 @@ void netlist_mame_device_t::device_clock_changed() void netlist_mame_device_t::device_reset() { LOG_DEV_CALLS(("device_reset\n")); - m_old = netlist::netlist_time::zero; - m_rem = netlist::netlist_time::zero; + m_old = netlist::netlist_time::zero(); + m_rem = netlist::netlist_time::zero(); netlist().reset(); } @@ -366,7 +399,7 @@ ATTR_COLD void netlist_mame_device_t::device_post_load() { LOG_DEV_CALLS(("device_post_load\n")); - netlist().post_load(); + netlist().state().post_load(); netlist().rebuild_lists(); } @@ -374,14 +407,14 @@ ATTR_COLD void netlist_mame_device_t::device_pre_save() { LOG_DEV_CALLS(("device_pre_save\n")); - netlist().pre_save(); + netlist().state().pre_save(); } void netlist_mame_device_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { } -ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::update_time_x() +void netlist_mame_device_t::update_time_x() { const netlist::netlist_time newt(netlist().time()); const netlist::netlist_time delta(newt - m_old + m_rem); @@ -391,7 +424,7 @@ ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::update_time_x() m_icount -= d; } -ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::check_mame_abort_slice() +void netlist_mame_device_t::check_mame_abort_slice() { if (m_icount <= 0) netlist().abort_current_queue_slice(); @@ -399,53 +432,48 @@ ATTR_HOT ATTR_ALIGN void netlist_mame_device_t::check_mame_abort_slice() ATTR_COLD void netlist_mame_device_t::save_state() { - for (auto const & s : netlist().save_list()) + for (auto const & s : netlist().state().save_list()) { netlist().log().debug("saving state for {1}\n", s->m_name.cstr()); - switch (s->m_dt) + if (s->m_dt.is_float) { - case pstate_data_type_e::DT_DOUBLE: - { - double *td = s->resolved(); - if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); - } - break; - case pstate_data_type_e::DT_FLOAT: - { - float *td = s->resolved(); - if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); - } - break; -#if (PHAS_INT128) - case pstate_data_type_e::DT_INT128: - // FIXME: we are cheating here - save_pointer((char *) s->m_ptr, s->m_name.cstr(), s->m_count * sizeof(INT128)); - break; -#endif - case pstate_data_type_e::DT_INT64: - save_pointer((INT64 *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_INT16: - save_pointer((INT16 *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_INT8: - save_pointer((INT8 *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_INT: - save_pointer((int *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_BOOLEAN: - save_pointer((bool *) s->m_ptr, s->m_name.cstr(), s->m_count); - break; - case pstate_data_type_e::DT_CUSTOM: - break; - case pstate_data_type_e::NOT_SUPPORTED: - default: - netlist().log().fatal("found unsupported save element %s\n", s->m_name); - break; + if (s->m_dt.size == sizeof(double)) + { + double *td = s->resolved(); + if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); + } + else if (s->m_dt.size == sizeof(float)) + { + float *td = s->resolved(); + if (td != nullptr) save_pointer(td, s->m_name.cstr(), s->m_count); + } + else + netlist().log().fatal("Unknown floating type for {1}\n", s->m_name.cstr()); } + else if (s->m_dt.is_integral) + { + if (s->m_dt.size == sizeof(INT64)) + save_pointer((INT64 *) s->m_ptr, s->m_name.cstr(), s->m_count); + else if (s->m_dt.size == sizeof(INT32)) + save_pointer((INT32 *) s->m_ptr, s->m_name.cstr(), s->m_count); + else if (s->m_dt.size == sizeof(INT16)) + save_pointer((INT16 *) s->m_ptr, s->m_name.cstr(), s->m_count); + else if (s->m_dt.size == sizeof(INT8)) + save_pointer((INT8 *) s->m_ptr, s->m_name.cstr(), s->m_count); +#if (PHAS_INT128) + else if (s->m_dt.size == sizeof(INT128)) + save_pointer((INT64 *) s->m_ptr, s->m_name.cstr(), s->m_count * 2); +#endif + else + netlist().log().fatal("Unknown integral type size {1} for {2}\n", s->m_dt.size, s->m_name.cstr()); + } + else if (s->m_dt.is_custom) + { + /* do nothing */ + } + else + netlist().log().fatal("found unsupported save element {1}\n", s->m_name); } - } // ---------------------------------------------------------------------------------------- @@ -511,12 +539,12 @@ ATTR_COLD offs_t netlist_mame_cpu_device_t::disasm_disassemble(char *buffer, off //char tmp[16]; unsigned startpc = pc; int relpc = pc - m_genPC; - if (relpc >= 0 && relpc < netlist().queue().count()) + if (relpc >= 0 && relpc < netlist().queue().size()) { - int dpc = netlist().queue().count() - relpc - 1; + int dpc = netlist().queue().size() - relpc - 1; // FIXME: 50 below fixes crash in mame-debugger. It's based on try on error. - snprintf(buffer, 50, "%c %s @%10.7f", (relpc == 0) ? '*' : ' ', netlist().queue()[dpc].object()->name().cstr(), - netlist().queue()[dpc].exec_time().as_double()); + snprintf(buffer, 50, "%c %s @%10.7f", (relpc == 0) ? '*' : ' ', netlist().queue()[dpc].m_object->name().cstr(), + netlist().queue()[dpc].m_exec_time.as_double()); } else sprintf(buffer, "%s", ""); @@ -566,7 +594,7 @@ void netlist_mame_sound_device_t::device_start() // Configure outputs - plib::pvector_t outdevs = netlist().get_device_list(); + std::vector outdevs = netlist().get_device_list(); if (outdevs.size() == 0) fatalerror("No output devices"); @@ -592,7 +620,7 @@ void netlist_mame_sound_device_t::device_start() m_num_inputs = 0; m_in = nullptr; - plib::pvector_t indevs = netlist().get_device_list(); + std::vector indevs = netlist().get_device_list(); if (indevs.size() > 1) fatalerror("A maximum of one input device is allowed!"); if (indevs.size() == 1) diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index 5340c792573..606cd4af283 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -12,7 +12,6 @@ #define NETLIST_H #include "emu.h" -#include "tagmap.h" #include "netlist/nl_base.h" #include "netlist/nl_setup.h" @@ -36,9 +35,13 @@ netlist_analog_output_delegate(& _class :: _member, \ # _class "::" # _member, _class_tag, (_class *)nullptr) ); -#define MCFG_NETLIST_LOGIC_INPUT(_basetag, _tag, _name, _shift, _mask) \ +#define MCFG_NETLIST_LOGIC_INPUT(_basetag, _tag, _name, _shift) \ MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_LOGIC_INPUT, 0) \ - netlist_mame_logic_input_t::static_set_params(*device, _name, _mask, _shift); + netlist_mame_logic_input_t::static_set_params(*device, _name, _shift); + +#define MCFG_NETLIST_INT_INPUT(_basetag, _tag, _name, _shift, _mask) \ + MCFG_DEVICE_ADD(_basetag ":" _tag, NETLIST_INT_INPUT, 0) \ + netlist_mame_int_input_t::static_set_params(*device, _name, _mask, _shift); #define MCFG_NETLIST_STREAM_INPUT(_basetag, _chan, _name) \ MCFG_DEVICE_ADD(_basetag ":cin" # _chan, NETLIST_STREAM_INPUT, 0) \ @@ -52,6 +55,9 @@ #define NETLIST_LOGIC_PORT_CHANGED(_base, _tag) \ PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_logic_input_t, input_changed, 0) +#define NETLIST_INT_PORT_CHANGED(_base, _tag) \ + PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_logic_input_t, input_changed, 0) + #define NETLIST_ANALOG_PORT_CHANGED(_base, _tag) \ PORT_CHANGED_MEMBER(_base ":" _tag, netlist_mame_analog_input_t, input_changed, 0) @@ -404,17 +410,17 @@ private: // ---------------------------------------------------------------------------------------- -// netlist_mame_logic_input_t +// netlist_mame_int_input_t // ---------------------------------------------------------------------------------------- -class netlist_mame_logic_input_t : public device_t, +class netlist_mame_int_input_t : public device_t, public netlist_mame_sub_interface { public: // construction/destruction - netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - virtual ~netlist_mame_logic_input_t() { } + netlist_mame_int_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~netlist_mame_int_input_t() { } static void static_set_params(device_t &device, const char *param_name, const UINT32 mask, const UINT32 shift); @@ -449,6 +455,51 @@ private: pstring m_param_name; }; +// ---------------------------------------------------------------------------------------- +// netlist_mame_logic_input_t +// ---------------------------------------------------------------------------------------- + +class netlist_mame_logic_input_t : public device_t, + public netlist_mame_sub_interface +{ +public: + + // construction/destruction + netlist_mame_logic_input_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~netlist_mame_logic_input_t() { } + + static void static_set_params(device_t &device, const char *param_name, const UINT32 shift); + + inline void write(const UINT32 val) + { + const UINT32 v = (val >> m_shift) & 1; + if (v != m_param->Value()) + synchronize(0, v); + } + + inline DECLARE_INPUT_CHANGED_MEMBER(input_changed) { write(newval); } + DECLARE_WRITE_LINE_MEMBER(write_line) { write(state); } + DECLARE_WRITE8_MEMBER(write8) { write(data); } + DECLARE_WRITE16_MEMBER(write16) { write(data); } + DECLARE_WRITE32_MEMBER(write32) { write(data); } + DECLARE_WRITE64_MEMBER(write64) { write(data); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override + { + if (is_sound_device()) + update_to_current_time(); + m_param->setTo(param); + } + +private: + netlist::param_logic_t *m_param; + UINT32 m_shift; + pstring m_param_name; +}; + // ---------------------------------------------------------------------------------------- // netlist_mame_stream_input_t // ---------------------------------------------------------------------------------------- @@ -504,11 +555,12 @@ class NETLIB_NAME(analog_callback) : public netlist::device_t { public: NETLIB_NAME(analog_callback)(netlist::netlist_t &anetlist, const pstring &name) - : device_t(anetlist, name), m_cpu_device(nullptr), m_last(0) + : device_t(anetlist, name) + , m_in(*this, "IN") + , m_cpu_device(nullptr) + , m_last(*this, "m_last", 0) { - enregister("IN", m_in); m_cpu_device = downcast(&downcast(netlist()).parent()); - save(NLNAME(m_last)); } ATTR_COLD void reset() override @@ -540,7 +592,7 @@ private: netlist::analog_input_t m_in; netlist_analog_output_delegate m_callback; netlist_mame_cpu_device_t *m_cpu_device; - nl_double m_last; + netlist::state_var m_last; }; // ---------------------------------------------------------------------------------------- @@ -555,10 +607,10 @@ public: , m_channel(*this, "CHAN", 0) , m_mult(*this, "MULT", 1000.0) , m_offset(*this, "OFFSET", 0.0) + , m_sample(netlist::netlist_time::from_hz(1)) //sufficiently big enough + , m_in(*this, "IN") + , m_last_buffer(*this, "m_last_buffer", netlist::netlist_time::zero()) { - enregister("IN", m_in); - m_sample = netlist::netlist_time::from_hz(1); //sufficiently big enough - save(NAME(m_last_buffer)); } static const int BUFSIZE = 2048; @@ -567,7 +619,7 @@ public: { m_cur = 0.0; m_last_pos = 0; - m_last_buffer = netlist::netlist_time::zero; + m_last_buffer = netlist::netlist_time::zero(); } ATTR_HOT void sound_update(const netlist::netlist_time &upto) @@ -613,7 +665,7 @@ private: netlist::analog_input_t m_in; double m_cur; int m_last_pos; - netlist::netlist_time m_last_buffer; + netlist::state_var m_last_buffer; }; // ---------------------------------------------------------------------------------------- @@ -624,11 +676,11 @@ class NETLIB_NAME(sound_in) : public netlist::device_t { public: NETLIB_NAME(sound_in)(netlist::netlist_t &anetlist, const pstring &name) - : netlist::device_t(anetlist, name) + : netlist::device_t(anetlist, name) + , m_feedback(*this, "FB") // clock part + , m_Q(*this, "Q") { - // clock part - enregister("Q", m_Q); - enregister("FB", m_feedback); + connect_late(m_feedback, m_Q); m_inc = netlist::netlist_time::from_nsec(1); @@ -678,7 +730,7 @@ public: m_param[i]->setTo(v * m_param_mult[i]->Value() + m_param_offset[i]->Value()); } m_pos++; - OUTLOGIC(m_Q, !m_Q.net().as_logic().new_Q(), m_inc ); + OUTLOGIC(m_Q, !m_Q.net().new_Q(), m_inc ); } public: @@ -708,6 +760,7 @@ extern const device_type NETLIST_CPU; extern const device_type NETLIST_SOUND; extern const device_type NETLIST_ANALOG_INPUT; extern const device_type NETLIST_LOGIC_INPUT; +extern const device_type NETLIST_INT_INPUT; extern const device_type NETLIST_ANALOG_OUTPUT; extern const device_type NETLIST_STREAM_INPUT; diff --git a/src/devices/machine/pci-ide.cpp b/src/devices/machine/pci-ide.cpp index c90a8afb311..e6c18219e0d 100644 --- a/src/devices/machine/pci-ide.cpp +++ b/src/devices/machine/pci-ide.cpp @@ -8,7 +8,8 @@ ide_pci_device::ide_pci_device(const machine_config &mconfig, const char *tag, d : pci_device(mconfig, IDE_PCI, "IDE PCI interface", tag, owner, clock, "ide_pci", __FILE__), m_ide(*this, "ide"), m_ide2(*this, "ide2"), - m_irq_num(-1) + m_irq_num(-1), + m_irq_handler(*this) { } @@ -63,7 +64,8 @@ void ide_pci_device::set_irq_info(const char *tag, const int irq_num) void ide_pci_device::device_start() { - m_cpu = machine().device(m_cpu_tag); + if (m_irq_num != -1) + m_cpu = machine().device(m_cpu_tag); pci_device::device_start(); @@ -77,6 +79,8 @@ void ide_pci_device::device_start() bank_infos[3].adr = 0x374; add_map(16, M_IO, FUNC(ide_pci_device::bus_master_map)); bank_infos[4].adr = 0xf00; + + m_irq_handler.resolve_safe(); } void ide_pci_device::device_reset() @@ -119,12 +123,21 @@ WRITE32_MEMBER(ide_pci_device::ide2_write_cs1) WRITE_LINE_MEMBER(ide_pci_device::ide_interrupt) { + // Assert/Clear the interrupt if the irq num is set. if (m_irq_num != -1) { m_cpu->set_input_line(m_irq_num, state); } + // Call the callback + m_irq_handler(state); + // PCI646U2 Offset 0x50 is interrupt status - if (main_id == 0x10950646 && state) - m_config_data[0x10/4] |= 0x4; + if (main_id == 0x10950646) { + + if (state) + m_config_data[0x10 / 4] |= 0x4; + else + m_config_data[0x10 / 4] &= ~0x4; + } if (0) logerror("%s:ide_interrupt %i set to %i\n", machine().describe_context(), m_irq_num, state); } @@ -138,8 +151,11 @@ WRITE32_MEMBER(ide_pci_device::pcictrl_w) { COMBINE_DATA(&m_config_data[offset]); // PCI646U2 Offset 0x50 is interrupt status - if (main_id == 0x10950646 && offset == 0x10/4 && (data & 0x4)) - m_config_data[0x10/4] &= ~0x4; + if (main_id == 0x10950646 && offset == 0x10 / 4 && (data & 0x4)) { + m_config_data[0x10 / 4] &= ~0x4; + if (0) + logerror("%s:ide_pci_device::pcictrl_w Clearing interrupt status\n", machine().describe_context()); + } } WRITE32_MEMBER(ide_pci_device::address_base_w) diff --git a/src/devices/machine/pci-ide.h b/src/devices/machine/pci-ide.h index 7768a7a44cd..e432f785d79 100644 --- a/src/devices/machine/pci-ide.h +++ b/src/devices/machine/pci-ide.h @@ -20,9 +20,13 @@ TODO: #define MCFG_IDE_PCI_ADD(_tag, _main_id, _revision, _subdevice_id) \ MCFG_PCI_DEVICE_ADD(_tag, IDE_PCI, _main_id, _revision, 0x01018a, _subdevice_id) +// Setting this to a value other than -1 will cause the ide_pci_device to assert/clear the cpu interrupt directly. #define MCFG_IDE_PCI_IRQ_ADD(_cpu_tag, _irq_num) \ downcast(device)->set_irq_info(_cpu_tag, _irq_num); +#define MCFG_IDE_PCI_IRQ_HANDLER(_devcb) \ + devcb = &ide_pci_device::set_irq_handler(*device, DEVCB_##_devcb); + class ide_pci_device : public pci_device { public: ide_pci_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); @@ -35,6 +39,7 @@ public: DECLARE_READ32_MEMBER(ide2_read_cs1); DECLARE_WRITE32_MEMBER(ide2_write_cs1); void set_irq_info(const char *tag, const int irq_num); + template static devcb_base &set_irq_handler(device_t &device, _Object object) { return downcast(device).m_irq_handler.set_callback(object); } protected: virtual void device_start() override; @@ -47,6 +52,7 @@ private: const char *m_cpu_tag; cpu_device *m_cpu; int m_irq_num; + devcb_write_line m_irq_handler; UINT32 m_config_data[0x10]; DECLARE_ADDRESS_MAP(chan1_data_command_map, 32); diff --git a/src/devices/machine/pci.cpp b/src/devices/machine/pci.cpp index 859b44dc939..54e9ddf7112 100644 --- a/src/devices/machine/pci.cpp +++ b/src/devices/machine/pci.cpp @@ -276,12 +276,12 @@ void pci_device::map_device(UINT64 memory_window_start, UINT64 memory_window_end } UINT64 end = start + bi.size-1; switch(i) { - case 0: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped0_r), this), write32_delegate(FUNC(pci_device::unmapped0_w), this)); break; - case 1: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped1_r), this), write32_delegate(FUNC(pci_device::unmapped1_w), this)); break; - case 2: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped2_r), this), write32_delegate(FUNC(pci_device::unmapped2_w), this)); break; - case 3: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped3_r), this), write32_delegate(FUNC(pci_device::unmapped3_w), this)); break; - case 4: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped4_r), this), write32_delegate(FUNC(pci_device::unmapped4_w), this)); break; - case 5: space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(pci_device::unmapped5_r), this), write32_delegate(FUNC(pci_device::unmapped5_w), this)); break; + case 0: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped0_r), this), write32_delegate(FUNC(pci_device::unmapped0_w), this)); break; + case 1: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped1_r), this), write32_delegate(FUNC(pci_device::unmapped1_w), this)); break; + case 2: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped2_r), this), write32_delegate(FUNC(pci_device::unmapped2_w), this)); break; + case 3: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped3_r), this), write32_delegate(FUNC(pci_device::unmapped3_w), this)); break; + case 4: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped4_r), this), write32_delegate(FUNC(pci_device::unmapped4_w), this)); break; + case 5: space->install_readwrite_handler(start, end, read32_delegate(FUNC(pci_device::unmapped5_r), this), write32_delegate(FUNC(pci_device::unmapped5_w), this)); break; } space->install_device_delegate(start, end, *this, bi.map); diff --git a/src/devices/machine/scnxx562.cpp b/src/devices/machine/scnxx562.cpp new file mode 100644 index 00000000000..099a8c6cdea --- /dev/null +++ b/src/devices/machine/scnxx562.cpp @@ -0,0 +1,1793 @@ +// license:BSD-3-Clause copyright-holders: Joakim Larsson Edstrom +/*************************************************************************** + + DUSCC Dual Serial Communications Controller emulation + + The DUSCC was introduced in the mid 80:ies by Signetics, a part of Philips + Semiconductor that later became NXP, and apparantly trying to dig into + the huge success of the Zilog SCC with a very similar feature set but not + software compatible at all. + + The variants in the DUSCC family are as follows: + + Bus type + Intel Motorola +---------------------------------- + NMOS 26562 68562 + CMOS 26C562 68C562 +---------------------------------- + For more info see: + page 511: http://bitsavers.informatik.uni-stuttgart.de/pdf/signetics/_dataBooks/1986_Signetics_Microprocessor.pdf + page 514: http://bitsavers.informatik.uni-stuttgart.de/pdf/signetics/_dataBooks/1994_Signetics_Data_Communications.pdf + +Designs known of including one or more DUSCCs +------------------------------------------------ + Force Computers + CPU VME boards: CPU-22, CPU-26, CPU-30, CPU-33, CPU-386, CPU-40, CPU-41 + Graphics VME boards: AGC-1 + Serial VME boards: ISIO-1, ISIO-2 + Digital Equipment + DEC MicroServer DEMSA, DECrouter-150, DECrouter-250 +------------------------------------------------ + +TODO/ "NDUSCC" "CDUSCC" +DONE (x) (p=partly) NMOS CMOS +------------------------------------------------ + Channels 2 FD 2 FD + Synch data rates 4Mbps 10Mbps + ----- asynchrounous features ------------------ + p 5-8 bit per char Y Y + y 1,1.5,2 stop bits Y Y in 1/16 bit increments + p odd/even parity Y Y + x1,x16 Y Y + break det/gen Y Y + parity, framing & Y Y + overrun error det + -- byte oriented synchrounous features -- + Int/ext char sync Y Y + 1/2 synch chars ? ? + Aut CRC gen/det Y Y + -- SDLC/HDLC capabilities --------------- + Abort seq gen/chk Y Y + Aut zero ins/det Y Y + Aut flag insert Y Y + Addr field rec Y Y + I-fld resid hand Y Y + CRC gen/det Y Y + SDLC loop w EOP Y Y + -- + Receiver FIFO 4 16 + Transmitter FIFO 4 16 + NRZ, NRZI, FM1 or Y Y + FM2 enc/dec + Manchester dec Y Y + Baud gen per chan Y Y + DPLL clock recov Y Y + -- Additional features CMOS versions ----- + Status FIFO N Y + Watchdog timer N Y + Fifo Fill status N Y + DMA frame status N Y + Rx/TxRDY on FIFO lvl N Y + TxFifo Empty status N Y + Interrupt enable bits N Y + X.21 pattern recogn N Y + Improved BiSync support N Y + ------------------------------------------------------------------------- + x/p = Features that has been implemented n/a = features that will not +***************************************************************************/ + +#include "scnxx562.h" + +//************************************************************************** +// MACROS / CONSTANTS +//************************************************************************** +/* Useful temporary debug printout format */ +// printf("TAG %lld %s%s Data:%d\n", machine().firstcpu->total_cycles(), __PRETTY_FUNCTION__, m_owner->tag(), data); + +#define VERBOSE 2 + +#define LOG(x) do { if (VERBOSE) logerror x; } while (0) +#define LOGR(x) +#if VERBOSE == 0 +#define logerror printf +#endif + +#ifdef _MSC_VER +#define FUNCNAME __func__ +#define LLFORMAT "%I64%" +#else +#define FUNCNAME __PRETTY_FUNCTION__ +#define LLFORMAT "%lld" +#endif + +#define CHANA_TAG "cha" +#define CHANB_TAG "chb" + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** +// device type definition +const device_type DUSCC = &device_creator; +const device_type DUSCC_CHANNEL = &device_creator; +const device_type DUSCC26562 = &device_creator; +const device_type DUSCC26C562 = &device_creator; +const device_type DUSCC68562 = &device_creator; +const device_type DUSCC68C562 = &device_creator; + +//------------------------------------------------- +// device_mconfig_additions - +//------------------------------------------------- +MACHINE_CONFIG_FRAGMENT( duscc ) + MCFG_DEVICE_ADD(CHANA_TAG, DUSCC_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANB_TAG, DUSCC_CHANNEL, 0) +MACHINE_CONFIG_END + +machine_config_constructor duscc_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME( duscc ); +} + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// duscc_device - constructor +//------------------------------------------------- +duscc_device::duscc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source) + : device_t(mconfig, type, name, tag, owner, clock, shortname, source), + // device_z80daisy_interface(mconfig, *this), + m_chanA(*this, CHANA_TAG), + m_chanB(*this, CHANB_TAG), +#if 0 + m_rxca(0), + m_txca(0), + m_rxcb(0), + m_txcb(0), +#endif + m_out_txda_cb(*this), + m_out_dtra_cb(*this), + m_out_rtsa_cb(*this), + m_out_synca_cb(*this), + m_out_txdb_cb(*this), + m_out_dtrb_cb(*this), + m_out_rtsb_cb(*this), + m_out_syncb_cb(*this), + m_variant(variant) +{ + for (auto & elem : m_int_state) + elem = 0; +} + +duscc_device::duscc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, DUSCC, "DUSCC", tag, owner, clock, "duscc", __FILE__), + m_chanA(*this, CHANA_TAG), + m_chanB(*this, CHANB_TAG), + m_out_txda_cb(*this), + m_out_dtra_cb(*this), + m_out_rtsa_cb(*this), + m_out_synca_cb(*this), + m_out_txdb_cb(*this), + m_out_dtrb_cb(*this), + m_out_rtsb_cb(*this), + m_out_syncb_cb(*this), + m_variant(TYPE_DUSCC) +{ + for (auto & elem : m_int_state) + elem = 0; +} + +duscc26562_device::duscc26562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC26562, "DUSCC 26562", tag, owner, clock, TYPE_DUSCC26562, "duscc26562", __FILE__){ } + +duscc26C562_device::duscc26C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC26C562, "DUSCC 26C562", tag, owner, clock, TYPE_DUSCC26C562, "duscc26C562", __FILE__){ } + +duscc68562_device::duscc68562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC68562, "DUSCC 68562", tag, owner, clock, TYPE_DUSCC68562, "duscc68562", __FILE__){ } + +duscc68C562_device::duscc68C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : duscc_device(mconfig, DUSCC68C562, "DUSCC 68C562", tag, owner, clock, TYPE_DUSCC68C562, "duscc68C562", __FILE__){ } + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void duscc_device::device_start() +{ + LOG(("%s\n", FUNCNAME)); + // resolve callbacks + m_out_txda_cb.resolve_safe(); + m_out_dtra_cb.resolve_safe(); + m_out_rtsa_cb.resolve_safe(); + m_out_synca_cb.resolve_safe(); + m_out_txdb_cb.resolve_safe(); + m_out_dtrb_cb.resolve_safe(); + m_out_rtsb_cb.resolve_safe(); + m_out_syncb_cb.resolve_safe(); + + // state saving + //save_item(NAME(m_int_state)); + + LOG((" - DUSCC variant %02x\n", m_variant)); +} + + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void duscc_device::device_reset() +{ + LOG(("%s %s \n",tag(), FUNCNAME)); + + m_chanA->reset(); + m_chanB->reset(); +} + +//------------------------------------------------- +// check_interrupts - +//------------------------------------------------- + +void duscc_device::check_interrupts() +{ + LOG(("%s %s - not implemented\n",tag(), FUNCNAME)); + // m_out_int_cb(state); +} + + +//------------------------------------------------- +// reset_interrupts - +//------------------------------------------------- + +void duscc_device::reset_interrupts() +{ + LOG(("%s %s - not implemented \n",tag(), FUNCNAME)); +#if 0 + // reset internal interrupt sources + for (auto & elem : m_int_state) + { + elem = 0; + } + + // check external interrupt sources + check_interrupts(); +#endif +} + +UINT8 duscc_device::modify_vector(UINT8 vec, int i, UINT8 src) +{ + LOG(("%s %s - not implemented\n",tag(), FUNCNAME)); + return vec; +} + + +//------------------------------------------------- +// trigger_interrupt - +//------------------------------------------------- +void duscc_device::trigger_interrupt(int index, int state) +{ + LOG(("%s %s - not implemented\n",tag(), FUNCNAME)); +} + +READ8_MEMBER( duscc_device::read ) +{ + if ( offset & 0x20 ) + return m_chanB->read(offset); + else + return m_chanA->read(offset); +} + +WRITE8_MEMBER( duscc_device::write ) +{ + if ( offset & 0x20 ) + m_chanB->write(data, offset); + else + m_chanA->write(data, offset); + return; +} + +//************************************************************************** +// DUSCC CHANNEL +//************************************************************************** +duscc_channel::duscc_channel(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, DUSCC_CHANNEL, "DUSCC channel", tag, owner, clock, "duscc_channel", __FILE__), + device_serial_interface(mconfig, *this), + m_brg_rx_rate(0), + m_brg_tx_rate(0), + m_brg_const(1), + m_rx_error(0), + m_rx_clock(0), + m_rx_first(0), + m_rx_break(0), + m_rxd(0), + m_cts(0), + m_dcd(0), + m_tx_data(0), + m_tx_clock(0), + m_dtr(0), + m_rts(0), + m_sync(0) +{ + LOG(("%s\n",FUNCNAME)); + + // Reset all registers + m_cmr1 = m_cmr2 = m_s1r = m_s2r = m_tpr = m_ttr = m_rpr = m_rtr + = m_ctprh = m_ctprl = m_ctcr = m_omr = m_cth = m_ctl = m_pcr + = m_ccr = m_rsr = m_trsr = m_ictsr = m_gsr = m_ier /* = m_rea */ + = m_cid = m_ivr = m_icr = /*m_sea =*/ m_ivrm = m_mrr = m_ier1 + = m_ier2 = m_ier3 = m_trcr = m_rflr = m_ftlr = m_trmsr = m_telr = 0; + + for (int i = 0; i < sizeof(m_rx_data_fifo); i++) + { + m_rx_data_fifo[i] = 0; + m_rx_error_fifo[i] = 0; + } + for (int i = 0; i < sizeof(m_tx_data_fifo); i++) + { + m_tx_data_fifo[i] = 0; + m_tx_error_fifo[i] = 0; + } +} + +//------------------------------------------------- +// start - channel startup +//------------------------------------------------- + +void duscc_channel::device_start() +{ + LOG(("%s\n", FUNCNAME)); + m_uart = downcast(owner()); + m_index = m_uart->get_channel_index(this); + + m_rx_fifo_sz = (m_uart->m_variant & SET_CMOS) ? 16 : 4; + m_rx_fifo_wp = m_rx_fifo_rp = 0; + + m_tx_fifo_sz = (m_uart->m_variant & SET_CMOS) ? 16 : 4; + m_tx_fifo_wp = m_tx_fifo_rp = 0; + + m_cid = (m_uart->m_variant & SET_CMOS) ? 0x7f : 0xff; // TODO: support CMOS rev A = 0xbf + + // state saving + save_item(NAME(m_cmr1)); + save_item(NAME(m_cmr2)); + save_item(NAME(m_s1r)); + save_item(NAME(m_s2r)); + save_item(NAME(m_tpr)); + save_item(NAME(m_ttr)); + save_item(NAME(m_rpr)); + save_item(NAME(m_rtr)); + save_item(NAME(m_ctprh)); + save_item(NAME(m_ctprl)); + save_item(NAME(m_ctcr)); + save_item(NAME(m_omr)); + save_item(NAME(m_cth)); + save_item(NAME(m_ctl)); + save_item(NAME(m_pcr)); + save_item(NAME(m_ccr)); + save_item(NAME(m_txfifo)); + save_item(NAME(m_rxfifo)); + save_item(NAME(m_rsr)); + save_item(NAME(m_trsr)); + save_item(NAME(m_ictsr)); + save_item(NAME(m_gsr)); // TODO: Move this to the device instead, it is a global register + save_item(NAME(m_ier)); + // save_item(NAME(m_rea)); + save_item(NAME(m_cid)); + save_item(NAME(m_ivr)); + save_item(NAME(m_icr)); + // save_item(NAME(m_sea)); + save_item(NAME(m_ivrm)); + save_item(NAME(m_mrr)); + save_item(NAME(m_ier1)); + save_item(NAME(m_ier2)); + save_item(NAME(m_ier3)); + save_item(NAME(m_trcr)); + save_item(NAME(m_rflr)); + save_item(NAME(m_ftlr)); + save_item(NAME(m_trmsr)); + save_item(NAME(m_telr)); + save_item(NAME(m_rx_data_fifo)); + save_item(NAME(m_rx_error_fifo)); + save_item(NAME(m_rx_fifo_rp)); + save_item(NAME(m_rx_fifo_wp)); + save_item(NAME(m_rx_fifo_sz)); + save_item(NAME(m_rx_clock)); + save_item(NAME(m_rx_first)); + save_item(NAME(m_rx_break)); + save_item(NAME(m_ri)); + save_item(NAME(m_cts)); + save_item(NAME(m_dcd)); + save_item(NAME(m_tx_data)); + save_item(NAME(m_tx_clock)); + save_item(NAME(m_dtr)); + save_item(NAME(m_rts)); + save_item(NAME(m_sync)); + + device_serial_interface::register_save_state(machine().save(), this); +} + + +//------------------------------------------------- +// reset - reset channel status +//------------------------------------------------- + +void duscc_channel::device_reset() +{ + LOG(("%s\n", FUNCNAME)); + + // Reset RS232 emulation + receive_register_reset(); + transmit_register_reset(); + + // Soft/Channel Reset values according to DUSCC users guide + m_cmr1 =0x00; + m_cmr2 =0x00; + m_s1r =0x00; + m_s2r =0x00; + m_tpr =0x00; + m_ttr =0x00; + m_rpr =0x00; + m_rtr =0x00; + m_ctcr =0x00; + m_omr =0x00; + m_pcr =0x00; + m_ccr =0x00; + m_rsr =0x00; + m_trsr =0x00; + m_ictsr =0x00; + m_gsr =0x00; + m_ier =0x00; + // m_rea =0x00; + m_ivr =0x0f; + m_icr =0x00; + // m_sea =0x00; + m_ivrm =0x00; + m_mrr =0x00; // TODO: Need a read after reset to enable CMOS features + m_ier1 =0x00; + m_ier2 =0x00; + m_ier3 =0x00; + m_trcr =0x00; + m_rflr =0x00; + m_ftlr =0x33; + m_trmsr =0x00; + m_telr =0x10; + + // reset external lines TODO: check relation to control bits and reset + set_rts(1); + set_dtr(1); + + // reset interrupts + if (m_index == duscc_device::CHANNEL_A) + { + m_uart->reset_interrupts(); + } + + m_a7 = 0; +} + +void duscc_channel::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) +{ + // LOG(("%s %d\n", FUNCNAME, id)); + device_serial_interface::device_timer(timer, id, param, ptr); +} + + +//------------------------------------------------- +// tra_callback - +//------------------------------------------------- + +void duscc_channel::tra_callback() +{ + if (!is_transmit_register_empty()) + { + int db = transmit_register_get_data_bit(); + + LOGR((LLFORMAT " %s() \"%s \"Channel %c transmit data bit %d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, db)); + + // transmit data + if (m_index == duscc_device::CHANNEL_A) + m_uart->m_out_txda_cb(db); + else + m_uart->m_out_txdb_cb(db); + } + else + { + LOG((LLFORMAT " %s() \"%s \"Channel %c Failed to transmit \n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index)); + logerror("%s \"%s \"Channel %c Failed to transmit\n", FUNCNAME, m_owner->tag(), 'A' + m_index); + } +} + + +//------------------------------------------ +// tra_complete - +// TODO: +// - Fix mark and space tx support +//------------------------------------------ + +void duscc_channel::tra_complete() +{ + if (m_tra == 1) // transmitter enabled? + { + if (m_tx_fifo_rp != m_tx_fifo_wp) // there are more characters to send? + { + transmit_register_setup(m_tx_data_fifo[m_tx_fifo_rp]); // Reload the shift register + m_tx_fifo_rp_step(); + } + if (m_omr & REG_OMR_TXRDY_ACTIVATED)// Wait until FIFO empty before ready for more data? + { + if (m_tx_fifo_wp == m_tx_fifo_rp) // So is Tx FIFO empty? + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + else // Always ready for more! + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } +} + + +//------------------------------------------------- +// rcv_callback - +//------------------------------------------------- + +void duscc_channel::rcv_callback() +{ + if (m_rcv == 1) + { + LOG((LLFORMAT " %s() \"%s \"Channel %c received data bit %d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, m_rxd)); + receive_register_update_bit(m_rxd); + } +} + + +//------------------------------------------------- +// rcv_complete - +//------------------------------------------------- + +void duscc_channel::rcv_complete() +{ + UINT8 data; + + receive_register_extract(); + data = get_received_char(); + LOG((LLFORMAT " %s() \"%s \"Channel %c Received Data %c\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, data)); + receive_data(data); +} + + +//------------------------------------------------- +// get_xx_clock_mode - get clock divisor +// TODO +// - support all the other clock divisors +// - actually use the divisors when calculating baud +//------------------------------------------------- + +int duscc_channel::get_rx_clock_mode() +{ + int clocks = 1; + + if ( (m_rtr & REG_RTR_RXCLK_MASK) == REG_RTR_RXCLK_BRG ) + clocks = 32; + + return clocks; +} + +int duscc_channel::get_tx_clock_mode() +{ + int clocks = 1; + + if ( (m_ttr & REG_TTR_TXCLK_MASK) == REG_TTR_TXCLK_BRG ) + clocks = 32; + + return clocks; +} + +void duscc_channel::set_rts(int state) +{ + LOG(("%s(%d) \"%s\": %c \n", FUNCNAME, state, m_owner->tag(), 'A' + m_index)); + if (m_index == duscc_device::CHANNEL_A) + m_uart->m_out_rtsa_cb(state); + else + m_uart->m_out_rtsb_cb(state); +} + +/* -------------------------------------------------------------------------- + * get_stop_bits - get number of stop bits + * The DUSCC supports from 1/2 stop bit to 2 stop bits in 1/16th bit increments + * This is not yet supported by diserial so we need to translate into 1, 1.5 + * or 2 stop bits. It is also dependent on the data bit length + * TODO: Support finer granularity of stop bits in diserial if/when nessesarry + * --------------------------------------------------------------------------- + * TPR[4:7] TPR[0:1] + * 5 bits 6-8 bits + * 00 01,10,11 + * --------------------------- + * 0 0 0 0 1.063 0.563 + * 0 0 0 1 1.125 0.625 + * 0 0 1 0 1.188 0.688 + * 0 0 1 1 1.250 0.750 + * 0 1 0 0 1.313 0.813 + * 0 1 0 1 1.375 0.875 + * 0 1 1 0 1.438 0.938 + * 0 1 1 1 1.500 1.000 + * 1 0 0 0 1.563 1.563 + * 1 0 0 1 1.625 1.625 + * 1 0 1 0 1.688 1.688 + * 1 0 1 1 1.750 1.750 + * 1 1 0 0 1.813 1.813 + * 1 1 0 1 1.875 1.875 + * 1 1 1 0 1.938 1.938 + * 1 1 1 1 2.000 2.000 + * -------------------------------------------------------------------------- + */ +device_serial_interface::stop_bits_t duscc_channel::get_stop_bits() +{ + const stop_bits_t bits5[] = + { STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_1_5, + STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2 }; + const stop_bits_t bits6to8[] = + { STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, STOP_BITS_1, + STOP_BITS_1, STOP_BITS_1_5, STOP_BITS_1_5, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2, STOP_BITS_2 }; + + /* 5 data bits */ + if (get_tx_word_length() == 5) + { + return bits5[((m_tpr & REG_TPR_STOP_BITS_MASK) >> 4) & 0x0f]; + } + else /* 6-8 data bits */ + { + return bits6to8[((m_tpr & REG_TPR_STOP_BITS_MASK) >> 4) & 0x0f]; + } + + return STOP_BITS_0; +} + +//------------------------------------------------- +// get_rx_word_length - get receive word length +//------------------------------------------------- + +int duscc_channel::get_rx_word_length() +{ + int bits = 5; + + switch (m_rpr & REG_RPR_DATA_BITS_MASK) + { + case REG_RPR_DATA_BITS_5BIT: bits = 5; break; + case REG_RPR_DATA_BITS_6BIT: bits = 6; break; + case REG_RPR_DATA_BITS_7BIT: bits = 7; break; + case REG_RPR_DATA_BITS_8BIT: bits = 8; break; + } + + return bits; +} + + +//------------------------------------------------- +// get_tx_word_length - get transmit word length +//------------------------------------------------- + +int duscc_channel::get_tx_word_length() +{ + int bits = 5; + + switch (m_tpr & REG_TPR_DATA_BITS_MASK) + { + case REG_TPR_DATA_BITS_5BIT: bits = 5; break; + case REG_TPR_DATA_BITS_6BIT: bits = 6; break; + case REG_TPR_DATA_BITS_7BIT: bits = 7; break; + case REG_TPR_DATA_BITS_8BIT: bits = 8; break; + } + + return bits; +} + +UINT8 duscc_channel::do_dusccreg_cmr1_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_cmr2_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_s1r_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_s2r_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_tpr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ttr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_rpr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_rtr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctprh_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctprl_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctcr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_omr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_cth_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ctl_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_pcr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } + +/* Commands to the DUSCC are entered through the channel command register.A read of this + register returns the last invoked command (with bits 4 and 5 set to 1). */ +UINT8 duscc_channel::do_dusccreg_ccr_r() +{ + LOG(("%s\n", FUNCNAME)); + return (UINT8) m_ccr | 1 << 4 | 1 << 5; +} + +UINT8 duscc_channel::do_dusccreg_rxfifo_r() +{ + UINT8 data = 0; + + LOG(("%s\n", FUNCNAME)); + LOG((" - RX rp:%d wp:%d sz:%d\n", m_rx_fifo_rp, m_rx_fifo_wp, m_rx_fifo_sz)); + + /* So is there a character in the FIFO? */ + if (m_rx_fifo_rp != m_rx_fifo_wp) + { + data = m_rx_data_fifo[m_rx_fifo_rp]; + m_rx_fifo_rp_step(); + LOG((" - RX reading out data:%02x '%c'\n", data, isalnum(data) ? data : ' ')); + } + else + { + logerror("- RX FIFO empty despite RxREADY\n"); + LOG(("- RX FIFO empty despite RxREADY\n")); + } + + return (UINT8) data; +} + +UINT8 duscc_channel::do_dusccreg_rsr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_trsr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ictsr_r() +{ + logerror("register access method %s is not implemented yet\n", FUNCNAME); + return (UINT8) m_ictsr; +} + +/* General Status Register (GSR) + This register provides a 'quick look' at the overall status of both channels of the DUSCC. A write to this register with ls at the + corresponding bit pOSitions causes TxRDY (bits 5 and 1) and/or RxRDY (bits 4 and 0) to be reset. The other status bits can be reset + only by resetting the individual status bits that they point to. + [7] Channel B External or Counter/timer Status - This bit indicates that one of the following status bits is asserted: ICTSRB[6:4] + [6] Channel B Receiver or Transmitter Status - This bit indicates that one of the following status bits is asserted: TRSRB[7:1], TRSRB[7:3]. + [5] Channel B Transmitter Ready - The assertion of this bit indicates that one or more characters may be loaded into the Channel B transmitter + FIFO to be serialized by the transmit shift register. See description of OMR[4j. This bit can be asserted only when the transmitter is enabled. + Resetting the transmitter negates TxRDY. + [4] Channel B Receiver Ready - The assertion of this bit indicates that one or more characters are available in the Channel B receiver + FIFO to be read by the CPU. See deSCription of OMR[3]. RxRDY is initially reset (negated) by a chip reset or when a 'reset Channel B + receiver' command is invoked. + [3] Channel A External or Countermmer Status - This bit indicates that one of the following status bits is asserted: ICTSRA[6:4]. + [2] Channel A Receiver or Transmitter Status - This bit indicates that one of the following status bits is asserted: TRSRA[7:0], TRSRA[7:3]. + [1] Channel A Transmitter Ready - The assertion of this bit indicates that one or more characters may be loaded into the Channel A + transmitter FIFO to be serialized by the transmit shift register. See description of OMR[4]. This bit can be asserted only + when the transmitter is enabled. Resetting the transmitter negates TxRDY. + [0] Channel A Receiver Ready - The assertion of this bit indicates that one or more characters are available in the Channel A receiver + FIFO to be read by the CPU. See description of OMR[3]. RxRDY is initially reset (negated) by a chip reset or when a 'reset Channel A + receiver' command is invoked. +*/ +UINT8 duscc_channel::do_dusccreg_gsr_r() +{ + LOGR(("%s <- %02x\n", FUNCNAME, m_gsr)); + return (UINT8) m_gsr; +} + +UINT8 duscc_channel::do_dusccreg_ier_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } + +UINT8 duscc_channel::do_dusccreg_cid_r() +{ + LOG(("%s\n", FUNCNAME)); + if ( m_uart->m_variant != SET_CMOS ) + { + logerror("Attempt read out CDUSCC register CID on an NDUSCC\n"); + return 0; + } + if ( m_index != duscc_device::CHANNEL_B ) + { + logerror("Attempt read out CID on channel B not allowed\n"); + return 0; + } + else + return m_cid; +} + +UINT8 duscc_channel::do_dusccreg_ivr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_icr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ivrm_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_mrr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ier1_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ier2_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ier3_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_trcr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_rflr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_ftlr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_trmsr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } +UINT8 duscc_channel::do_dusccreg_telr_r(){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return (UINT8) 0; } + + // write register handlers +/* CMR1 register + [7:6] Data Encoding - These bits select the data encoding for the received and transmitted data: + 00 If the DPLL is set to NRZI mode (see DPLL commands), it selects positive logic (1 = high, 0 = low). + If the DPLL is set to FM mode (see DPLL commands), Manchester (bi-phase level) encoding is selected. + 01 NRZI. Non-return-to-zero inverted. + 10 FMO. Bi-phase space. + 11 FM 1. Bi-phase mark. + [5] Extended Control (BOP) - + 0 No. A one-octet control field follows the address field. + 1 Yes. A two-octet control field follows the address field. + [5] Parity (COP/ ASYNC), Code Select (BISYNC) + 0 Even parity if with parity is selected by [4:3] or a 0 in the parity bit position if force parity is + selected by [4:3]. In BISYNC protocol mode, internal character comparisons are made using EBCDIC coding. + 1 Odd parity if with parity is selected by [4:3] or a 1 in the parity bit position if force parity is selected by [4:3]. + In BISYNC protocol mode, internal character comparisons are made using Bbit ASCII coding. + [4:3] Address Mode (BOP) - + This field controls whether a single octet or multiple octets follow the opening FLAG(s) for both the receiver and the transmitter. + This field is activated by selection of BOP secondary mode through the channel protocol mode bits CMR1_[2:0] (see Detailed Operation). + 00 Single octet address. + 01 Extended address. + 10 Dual octet address. + 11 Dual octet address with group. + [4:3] Parity Mode (COP/ASYNC) - + This field selects the parity mode for both the receiver and the transmitter. A parity bit is added to the programmed character length if + with parity or force parity is selected: + 00 No parity. Required when BISYNC protocol mode is programmed. + 01 Reserved. + 10 With parity. Odd or even parity is selected by [5]. + 11 Force parity. The parity bit is forced to the state selected by [5]. + [2:0] Channel Protocol Mode - + This field selects the operational protocol and submode for both the receiver and transmitter: + 000 - BOP Primary. No address comparison is performed. For receive, all characters received after the opening FLAG(s) are transferred to the FIFO. + 001 - BOP Secondary. This mode activates the address modes selected by [4:3]. Except in the case of extended address ([4:3]=01), an address comparison + is performed to determine if a frame should be received. Refer to Detailed Operation for details of the various addressing modes. If a valid comparison + occurs, the receiver is activated and the address octets and all subsequent received characters of the frame are transferred to the receive FIFO. + 010 - BOP Loop. The DUSCC acts as a secondary station in a loop. The GO-ON-LOOP and GO-OFF-LOOP commands are used to cause the DUSCC to go on and off the + loop. Normally, the TXD output echoes the RXD input with a three bit time delay. If the transmitter is enabled and the 'go active on poll' command has been + asserted, the transmitter will begin sending when an EOP sequence consisting of a zero followed by seven ones is detected. The DUSCC changes the last one of + the EOP to zero, making it another FLAG, and then operates as described in the detailed operation section. The loop sending status bit (TRSR[6]) is asserted + concurrent with the beginning of transmission. The frame should normally be terminated with an EOM followed by an echo of the marking RXD line so that secondary + stations further down the loop can append their messages to the messages from up-loop stations by the same process. If the 'go active on poll'command is not + asserted, the transmitter remains inactive (other than echOing the received data) even when the EOP sequence is received. + 011 - BOP Loop without address comparison. Same as normal loop mode except that address field comparisons are disabled. All received frames aretransmitted to the CPU. + 100 - COP Dual SYN. Character sync is achieved upon receipt of a bit sequence matching the contents of the appropriate bits of SIR and S2R (SYNI-SYN2), including + parity bits if any. + 101 - COP Dual SYN (BISYNC). Character sync is achieved upon receipt of a bit sequence matching the contents of the appropriate bits of SI Rand S2R + (SYN1·SYN2). In this mode, special transmitter and receive logic is activated. Transmitter and receiver character length must be programmed to 8 bits and no parity + 110 - COP Single SYN. Character sync is achieved upon receipt of a bit sequence matching the contents of the appropriate bits of Sl R (SYN1), including parity bit if any. + This mode is required when the external sync mode is selected. + 111 Asynchronous. Start/stop format. +*/ +void duscc_channel::do_dusccreg_cmr1_w(UINT8 data) +{ + LOG(("%s(%02x)\n", FUNCNAME, data)); + m_cmr1 = data; + LOG(("- Setting up %s mode\n", (m_cmr1 & REG_CMR1_CPMODE_MASK) == REG_CMR1_CPMODE_ASYNC ? "ASYNC" : "SYNC")); + LOG(("- Parity: %s\n", ((m_cmr1 & REG_CMR1_PMMODE_MASK) == REG_CMR1_PMMODE_PARITY ? (m_cmr1 & REG_CMR1_PARITY ? "odd" : "even") : "none"))); + return; +} + +/* CMR2 register + [7:6] Channel Connection - This field selects the mode of operation of the channel. The user must exercise care when switching into and out of the various modes. The + selected mode will be activated immediately upon mode selection, even if this occurs in the middle of a received or transmitted character. + + 00 - Normal mode. The 1ransmitter and receiver operate independently in either half or full-duplex, controlled by the respective enable commands. + + 01 - Automatic echo mode. Automatically retransmits the received data with a half-bit time delay (ASYNC, 16X clock mode) or a one-bit time delay (allother modes). + The following conditions are true while in automatic echo mode: + 1. Received data is reclocked and retransmitted on the TXD output. + 2. The receiver clock is used for the transmitter. + 3. The receiver must be enabled, but the transmitter need not be enabled. + 4. The TXRDY and underrun status bits are inactive. + 5. The received parity and/or FCS are checked if required, but are not regenerated for transmission, + i.e., transmitted parity and/ or FCS are as received. + 6. In ASYNC mode, character framing is checked, but the stop bits are retransmitted as received. + A received break is echoed as received. + 7. CPU to receiver communication continues normally, but the CPU to transmitter link is disabled. + + 10 - Local loopback mode. In this mode: + 1. The transmitter output is internally connected to the receiver input. + 2. The transmit clock is used for the receiver if NRZI or NRZ encoding is used. For FM or Manchester encoding because the receiver clock is derived from the DPLL, + the DPLL source clock must be maintained. + 3. The TXD output is held high. + 4. The RXD input is ignored. + 5. The receiver and transmitter must be enabled. + 6. CPU to transmitter and receiver communications continue normally. + + 11 - Reserved. + + [5:3] Data Transfer Interface - This field specifies the type of data transfer between the DUSCC's RX and TX FIFOs and the CPU. + All interrupt and status functions operate normally regardless of the data transfer interface programmed. + 000 - Half duplex single address DMA. + 001 - Half duplex dual address DMA. + 010 - Full duplex single address DMA. + 011 - Full duplex dual address DMA. + 100 - Wait on receive only. In this mode a read of a non-empty receive FIFO results in a normal bus cycle. However, if the receive FIFO of the channel + is empty when a read RX FIFO cycle is initiated, the DTACKN output remains negated until a character is received and loaded into the FIFO. + DT ACKN is then asserted and the cycle is completed normally. + 101 - Wait on transmit only. In this mode a write to a non-full transmit FI Fa results in a normal bus cycle. However, if the transmit FIFO of the channel is + full when a write TX FIFO cycle is initiated, the DTACKN output remains negated until a FI Fa position becomes available for the new character. DT ACKN + is then asserted and the cycle is completed normally. + 110 - Wait on transmit and receive. As above for both wait on receive and transmit operations. + 111 - Polled or interrupt. DMA and wait functions of the channel are not activated. Data transfers to the RX and TX FIFOs are via normal bus read and + write cycles in response to polling of the status registers and/or interrupts. + + [2:0] Frame Check Sequence Select - This field selects the optional frame check sequence (FCS) to be appended at the end of a transmitted frame. + When CRC is selected in COP, then no parity and 8-bit character length must be used. The selected FCS is transmitted as follows: + 1. Following the transmission of a FIFO'ed character tagged with the 'send EOM' command. + 2. If underrun control (TPR[7:6]) is programmed for TEOM, upon occurrence of an underrun. + 3. If TEOM on zero count or done (TPR[4]) is asserted and the counter/timer is counting transmitted characters, after transmission of the character which + causes the counter to reach zero count. + 4. In DMA mode with TEOM on zero count or done (TPR[4]) set, after transmission of a character if DONEN is asserted when that character was loaded into the + TX FIFO by the DMA controller. + + 000 - No frame check sequence. + 001 - Reserved + 010 - LRC8: Divisor ~ x8+ 1, dividend preset to zeros. The TX sends the calculated LRC non-inverted. The RX indicates an error if the computed LRC is + not equal to O. Valid for COP modes only. + 011 - LRC8: Divisor ~ x8+ 1, dividend preset to ones. The TX sends the calculated LRC non-inverted. The RX indicates + an error if the computed LRC is not equal to O. Valid for COP modes only. + 100 - CRCI6: Divisor ~ x16+x15+x2+1, dividend preset to zeros. The TX sends the calculated CRC non-inverted. The RX indicates an error if the + computed CRC is not equal to O. Not valid for ASYNC mode. + 101 - CRCI6: Divisor ~ x16+x15+x2+1, dividend preset to ones. The TX sends the calculated CRC non-inverted. The RX indicates an error if the + computed CRC is not equal to O. Not valid for ASYNC mode. + 110 - CRC-CCITT: Divisor ~ x16+x12+x5+1, dividend preset to zeros. The TX sends the calculated CRC non-inverted. The RX indicates an error if the + computed CRC is not equal to O. Not valid for ASYNC mode. + 111 CRC-CCITT: Divisor ~ x16+x12+x5+1, dividend preset to ones. The TX sends the calculated CRC inverted. The RX indicates an error if the computed + CRC is not equal to H' FOB8'. Not valid for ASYNC mode. +*/ +void duscc_channel::do_dusccreg_cmr2_w(UINT8 data) +{ + LOG(("%s(%02x)\n", FUNCNAME, data)); + m_cmr2 = data; + LOG(("- Preparing for %s driven transfers\n", (m_cmr2 & REG_CMR2_DTI_MASK) == REG_CMR2_DTI_NODMA ? "polled or interrupt" : "dma")); + return; +} + +void duscc_channel::do_dusccreg_s1r_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_s2r_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +/* Transmitter Parameter Register (TPRA, TPRB) + SYNC mode + [7:6] Underrun Control - In BOP and COP modes, this field selects the transmitter response in the event of an underrun (i.e., the TX FIFO is empty). + 00 - Normal end of message termination. In BOP, the transmitter sends the FCS (if selected by CMR2[2:011 followed by a FLAG and then either MARKs or + FLAGs, as specified by [5]. In COP, the transmitter sends the FCS (if selected by CMR2[2:0]) and then either MARKs or SYNs, as specified by [5]. + 01 - Reserved. + l0 - in BOP, the transmitter sends an ABORT (11111111) and then places the TXD output in a marking condition until receipt of further instructions. + In COP, the transmitter places the TXD output in a marking condition until receipt of further instructions. + 11 - In BOP, the transmitter sends an ABORT (11111111) and then sends FLAGs until receipt of further instructions. In COP, the transmitter sends + SYNs until receipt of further instructions. + [5] Idle - In BOP and COP modes, this bit selects the transmitter output during idle. Idle is defined as the state following a normal end of message until + receipt of the next transmitter command. + 0 - Idle in marking condition. + 1 - Idle sending SYNs (COP) or FLAGs (BOP). + [4] Transmit EOM on Zero Count or Done - In BOP and COP modes, the assertion of this bit causes the end of message (FCS in COP, FCS-FLAG in BOP) to be transmitted + upon the following events: + 1. If the counterltimer is counting transmitted characters, after transmission of the character which causes the counter to reach zero count. (DONEN is also asserted + as an output if the channel is in a DMA operation.) + 2. If the channel is operating in DMA mode, after transmission of a character if DONEN was asserted when that character was loaded into the TX FIFO by the DMA controller. + + ASYNC mode + [7:4] Stop Bits per Character - In ASYNC mode, this field programs the length of the stop bit appended to the transmitted character + Stop bit lengths of 9/16 to 1 and 1-9/16 to 2 bits, in increments of 1/16 bit, can be programmed for character lengths of 6, 7, and 8 bits. + For a character length of 5 bits, 1-1/16 to 2 stop bits can be programmed in increments of 1/16 bit. The receiver only checks for a 'mark' + condition at the center of the first stop bit position (one bit time after the last data bit, or after the parity bit if parity is enabled) in all cases. + If an external 1 X clock is used for the transmitter, [7) = 0 selects one stop bit and [7) = 1 selects two stop bits to be transmitted. + If Manchester, NRZI, or FM data encoding is selected, only integral stop bit lengths should be used. + [3] Transmitter Request-to-Send Control - This bit controls the deactivation of the RTS_N output by the transmitter + 0 - RTS_N is not affected by status of transmitter. + 1 - RTS_N changes state as a function of transmitter status. + [2] Clear-ta-Send Enable Transmitter - The state of this bit determines if the CTS N input controls the operation of the channels transmitter + The duration of CTS level change is described in the discussion of ICTSR[4). + 0 - CTS_N has no affect on the transmitter. + 1 - CTS_N affects the state of the transmitter. + [1:0] Transmitted Bits per Character - This field selects the number of data bits per character to be transmitted. The character length does not + include the start, parity, and stop bits in ASYNC or the parity bit in COP. In BOP modes the character length for the address and control + fields is always 8 bits, and the value of this field only applies to the information (I) field, except for the last character of the I field, + whose length is specified by OMR[7:5). +*/ +void duscc_channel::do_dusccreg_tpr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Transmit Parameters\n", FUNCNAME, data)); + m_tpr = data; + LOG(("- RTS %u\n", (m_tpr & REG_TPR_RTS) ? 1 : 0)); + LOG(("- CTS %u\n", (m_tpr & REG_TPR_CTS) ? 1 : 0)); + LOG(("- Stop Bits %s\n", stop_bits_tostring(get_stop_bits()))); + LOG(("- Data Tx bits %u\n", get_tx_word_length())); + + update_serial(); + return; +} + +/* Transmitter Timing Register (TTRA, TTRB) + [7] External Source - This bit selects the RTxC pin or the TRxC pin of the channel as the transmitter clock input when [6:4] specifies + external. When used for input, the selected pin must be programmed as an input in the PCR [4:3] or [2:0]. + 0 External input form RTxC pin. + 1 External input from TRxC pin. + [6:4] Transmitter Clock Select - This field selects the clock for the transmitter. + 000 External clock from TRxC or RTXC at 1 X the shift (baud) rate. + 001 External clock from TRXC or RTxC at 16X the shift rate. + 010 Internal clock from the phase-locked loop at IX the bit rate. It should be used only in half-duplex operation since the + DPLL will periodically resync itself to the received data if in full-duplex operation. + 0ll Internal clock from the bit rate generator at 32X the shift rate. The clock signal is divided by two before use in the + transmitter which operates at 16X the baud rate. Rate selected by [3:0]. + 100 Internal clock from counter/timer of other channel. The C/T should be programmed to produce a clock at 2X the shift rate. + 101 Internal clock from counter/timer of other channel. The C/T should be programmed to produce a clock at 32X the shift rate. + 110 Internal clock from the counter/timer of own channel. The C/T should be programmed to produce a clock at 2X the shift rate. + 111 Internal clock from the counter/timer of own channel. The C/T should be programmed to produce a clock at 32X the shift rate. + [3:0] Bit Rate Select - This field selects an output from the bit rate generator to be used by the transmitter circuits. The actual + frequency output from the BRG is 32X the bit rate shown in Table 5. With a crystal or external clock of 14.7456MHz the bit rates are as + given in Table 5 (this input is divided by two before being applied to the oscillator circuit). + + Table 5. Receiver/Transmitter Baud Rates + [3:0] BIT RATE [3:0] BIT RATE + 0000 50 1000 1050 + 0001 75 1001 1200 + 0010 110 1010 2000 + 0011 134.5 1011 2400 + 0100 150 1100 4800 + 0101 200 1101 9600 + 0110 300 1110 19.2K + 0111 600 1111 38.4K +*/ +void duscc_channel::do_dusccreg_ttr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Transmit Timing\n", FUNCNAME, data)); + m_ttr = data; + LOG(("- External source: %s\n", (m_ttr & REG_TTR_EXT) ? "TRxC" : "RTxC")); + LOG(("- Transmit Clock: ")); +#if VERBOSE > 0 + switch(m_ttr & REG_TTR_TXCLK_MASK) + { + case REG_TTR_TXCLK_1XEXT: LOG(("1x External - not implemented\n")); break; + case REG_TTR_TXCLK_16XEXT: LOG(("16x External - not implemented\n")); break; + case REG_TTR_TXCLK_DPLL: LOG(("DPLL - not implemented\n")); break; + case REG_TTR_TXCLK_BRG: + LOG(("BRG\n")); + m_brg_tx_rate = get_baudrate(m_ttr & REG_TTR_BRG_RATE_MASK); + break; + case REG_TTR_TXCLK_2X_OTHER: LOG(("2x other channel C/T - not implemented\n")); break; + case REG_TTR_TXCLK_32X_OTHER: LOG(("32x other channel C/T - not implemented\n")); break; + case REG_TTR_TXCLK_2X_OWN: LOG(("2x own channel C/T - not implemented\n")); break; + case REG_TTR_TXCLK_32X_OWN: LOG(("32x own channel C/T - not implemented\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } +#endif + + LOG(("- BRG Tx rate %u assuming a 14.7456MHz CLK crystal\n", get_baudrate(m_ttr & REG_TTR_BRG_RATE_MASK))); + update_serial(); + + return; +} + +/* Receiver Parameter Resgister (RPRA, RPRB) + [7] SYN Stripping - This bit controls the DUSCC processing in COP modes of SYN 'character patterns' that occur after the initial + character synchronization. Refer to Detailed Operation of the receiver for details and definition of SYN 'patterns', and their + accumulation of FCS. + 0 Strip only leading SYN 'patterns' (i.e. before a message). + 1 Strip all SYN 'patterns' (including all odd DLE's in BISYNC transparent mode). + + [6] Transfer Received FCS to FIFO - In BISYNC and BOP modes, the assertion of this bit causes the received FCS to be loaded into the + RxFIFO. When this bit is set, BOP mode operates correctly only if a minimum of two extra FLAGs (without shared zeros) are appended + to the frame. If the FCS is specified to be transferred to the FI FO, the EOM status bit will be tagged onto the last byte of the + FCS instead of to the last character of the message. + 0 Do not transfer FCS to RxFIFO. + 1 Transfer FCS to RxFIFO. + + [5] Auto-Hunt and Pad Check (BISYNC) -In BISYNC rnode, the assertion of this bit causes the receiver to go into hunt for character + sync mode after detecting certain End-Ol-Message (EOM) characters. These are defined in the Detailed Operations section for + COP receiver operation. After the EOT and NAK sequences, the receiver also does a check for a closing PAD of four 1 s. + 0 Disable auto-hunt and PAD check. + 1 Enable auto-hunt and PAD check. + [5] Overrun Mode (BOP) - The state of this control bit deterrnines the operation of the receiver in the event of a data overrun, i.e., + when a character is received while the RxFIFO and the Rx shift register are both full. + 0 The receiver terrninates receiving the current frame and goes into hunt phase, looking for a FLAG to be received. + 1 The receiver continues receiving the current frame. The overrunning character is lost. (The five characters already + assembled in the RxFIFO and Rx shift register are protected). + + [4] Receiver Request-to-Send Control (ASYNC) + 0 Receiver does not control RTSN output. + 1 Receiver can negate RTSN output. + [4] External Sync (COP) - In COP single SYN mode, the assertion of this bit enables external character synchronization and + receipt of SYN patterns is not required. In order to use this feature, the DUSCC must be programmed to COP single SYN mode, + CMR1[2:0] = 110, which is used to set up the internal data paths. In all other respects, however, the external sync mode operation is + protocol transparent. A negative signal on the DCDN/SYNIN pin will cause the receiver to establish synchronization on the next rising + edge of the receiver clock. Character assembly will start at this edge with the RxD input pin considered to have the second bit of + data. The sync signal can then be negated. Receipt of the Active-High external sync input causes the SYN detect status bit + (RSR[2]) to be set and the SYNBOUTN pin to be asserted for one bit time. When this mode is enable, the internal SYN (COP mode) + detection and special character recognition (e.g., IDLE, STX, ETX, etc.) circuits are disabled. Character assembly begins as ~ in the + I-field with character length as programmed in RPR[I :)]. Incoming COP frames with parity specified optionally can have it stripped by + programming RPR[3J. The user must wait at least eight bit times after Rx is enabled before applying the SYNIN signal. This time is + required to flush the internal data paths. The receiver remains in this mode and further external sync pulses are ignored until the + receiver is disabled and then reenabled to resynchronize or to return to normal mode. + 0 External sync not enabled. + 1 External sync enabled. + Note that EXT SYNC and DCD ENABLE Rx cannot be asserted simultaneously since they use the same pin. + + [3] Strip Parity - In COP and ASYNC modes with parity enabled, this bit controls whether the received parity bit is stripped from the + data placed in the receiver FIFO. It is valid ony for programmed character lengths of 5, 6, and 7 bits. If the bit is stripped, the + corresponding bit in the received data is set to zero. + 0 Transfer parity bit as received. + 1 Stop parity bit from data. + [3] All Parties Address - In BOP secondary modes, the assertion of this bit causes the receiver to 'wake-up' upon receipt of the + address H'FF' or H'FF, FF', for single- and dual-octet address modes, respectively, in addition to its normal station address. This + feature allows all stations to receive a message. + 0 Don't recognize all parties address. + 1 Recognize all parties address. + + [2] DCD Enable Receiver - If this bit is asserted, the DCDN/SYNIN input must be Low in order for the receiver to operate. + If the input is negated (goes High) while a character is being received, the receiver terminates receipt of the current message + (this action in effect disables the receiver). If DCD is subsequently asserted, the receiver will search for the start bit, SYN pattern, or + FLAG, depending on the channel protocol. (Note that the change of input can be programmed to generate an interrupt; the duration of + the DCD level change is described in the discussion of the input and counter/timer status register (CTSR[5]). + 0 DCD not used to enabled receiver. + 1 DCD used to enabled receiver. + NOTE that EXT SYNC and DCD ENABLE Rx cannot be asserted simultaneously since they use the same pin. + + [1:0] Received Bits per Character - This field selects the number of data bits per character to be assembled by the receiver. The + character length does not include the start, parity, and stop bits in the ASYNC or the parity bit in COP. In BOP modes, the character + length for the address and control field is always 8 bits, and the value of this field only applies to the information field. lithe number + of bits assembled for the last character of the l-field is less than the value programmed in this field, RCL not zero (RSR[O]) is asserted + and the actual number of bits received is given in TRSR[2:0]. +*/ +void duscc_channel::do_dusccreg_rpr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Receiver Parameters\n", FUNCNAME, data)); + m_rpr = data; + LOG(("- RTS output %u\n", (m_rpr & REG_RPR_RTS) ? 1 : 0)); + LOG(("- Strip Parity %u\n", (m_rpr & REG_RPR_STRIP_PARITY && get_rx_word_length() < 8) ? 1 : 0)); + LOG(("- DCD/SYNIN input %u\n", (m_rpr & REG_RPR_DCD) ? 1 : 0)); + LOG(("- Data Rx bits %u\n", get_rx_word_length())); + + update_serial(); + return; +} + +/* Receiver Timing Register (RTRA, RTRB) + [7] External Source - This M selects the RTxC pin or the TRxC pin of the channel as the receiver or DPLL clock input, when [6:4J + specifies external. When used for input, the selected pin must be programmed as an input in the PCR [4:3] or [2:0]. + 0 External input form RTxC pin. + 1 External input form TRxC pin. + [6:4] Receiver Clock Select- This field selects the clock for the receiver. + 000 External clock from TRxC or RTxC at 1 X the shift (baud) rate. + 001 External clock fromTRxC or RTxC at 16X the shift rate. Used for ASYNC mode only. + 010 Internal clock from the bit rate generator at 32X the shift rate. Clock is divided by two before used by the receiver + logic, which operates at 16X the baud rate. Rate selected + by [3:0J. Used for ASYNC mode only. + 011 Internal clock from counter/timer of own channel. The CIT should be programmed to produce a clock at 32X the shift + rate. Clock is divided by two before use in the receiver logic. Used for ASYNC mode only. + 100 Internal clock from the digital phase- locked loop. The clock for the DPLL is a 64X clock from the crystal oscillator or + system clock input. (The input to the oscillator is divided by two). + 101 Internal clock from the digital phase- locked loop. The clock for the DPLL is an external 32X clock from the RTxC or + TRxC pin, as selected by [7J. + 110 Internal clock from the digital phase- locked loop. The clock for the DPLL is a 32X clock from the BRG. The frequency + is programmed by [3:0]. + 111 Internal clock from the digital phase- locked loop. The clock for the DPLL is a 32X clock from the counter/timer of the + channel. + [3:0] Bit Rate Select- This field selects an output from the bit rate generator to be used by the receiver circuits. The actual frequency + output from the BRG is 32X the bit rate shown in Table 5.*/ + +void duscc_channel::do_dusccreg_rtr_w(UINT8 data) +{ + LOG(("%s(%02x) Setting up Receiver Timing\n", FUNCNAME, data)); + m_rtr = data; + LOG(("- External source: %s\n", (m_rtr & REG_RTR_EXT) ? "TRxC" : "RTxC")); + LOG(("- Receiver Clock: ")); + +#if VERBOSE > 0 + switch(m_rtr & REG_RTR_RXCLK_MASK) + { + case REG_RTR_RXCLK_1XEXT: LOG(("1x External - not implemented\n")); break; + case REG_RTR_RXCLK_16XEXT: LOG(("16x External - not implemented\n")); break; + case REG_RTR_RXCLK_BRG: + LOG(("BRG\n")); + m_brg_rx_rate = get_baudrate(m_rtr & REG_RTR_BRG_RATE_MASK); + break; + case REG_RTR_RXCLK_CT: LOG(("C/T of channel - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_64X_X1: LOG(("DPLL, source = 64X X1/CLK - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_32X_EXT:LOG(("DPLL, source = 32X External - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_32X_BRG:LOG(("DPLL, source = 32X BRG - not implemented\n")); break; + case REG_RTR_RXCLK_DPLL_32X_CT: LOG(("DPLL, source = 32X C/T - not implemented\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } +#endif + + LOG(("- BRG Rx rate %u assuming a 14.7456MHz CLK crystal\n", get_baudrate(m_rtr & REG_RTR_BRG_RATE_MASK))); + update_serial(); + + return; +} + +void duscc_channel::do_dusccreg_ctprh_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ctprl_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ctcr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +/* Output and Miscellaneous Register (OMRA, OMRB) + [7:5] Transmitted Residual Character Length - In BOP modes, this field determines the number of bits transmitted for the last + character in the information field. This length applies to: + - The character in the transmit FIFO accompanied by the FIFOed TEOM command. + - The character loaded into the FIFO by the DMA controller if DONEN is simultaneously asserted and TPR(4) is asserted. + - The character loaded into the FIFO which causes the counter to reach zero count when TPR[4J is asserted. + The length of all other characters in the frame's information field is selected by TPR[I :OJ. If this field is 111, + the number of bits in the last character is the same as programmed in TPR[1:0]. + [4] TxRDY Activate Mode - + 0 FIFO not full. The channel's TxRDY status bit is asserted each time a character is transferred from the transmit FIFO + to the transmit shift register. If not reset by the CPU, TxRDY remains asserted until the FIFO is full, at which time + it is automatically negated. + 1 FIFO empty. The channel's TxRDY status bit is asserted when a character transfer from the transmit FIFO to the + transmit shift register causes the FI FO to become empty. If not reset by the CPU, TxRDY remains asserted until the + FIFO is full, at which time it is negated. + If the TxRDY status bit is reset by the CPU, it will remain negated regardless of the current state of the transmit + FIFO, until it is asserted again due to the occurrence of one of the above conditions. + [3] RxRDY Activate Mode - + 0 FIFO not empty. The channel's RxRDY status bit is asserted each time a character is transferred from the + receive shift register to the receive FIFO. If not reset by the CPU, RxRDY remains asserted until the receive FIFO is + empty, at which time it is automatically negated. + 1 FIFO full. The channel's RxRDY status bit is asserted when a character transfer from the receive shift register to the + receive FIFO causes the FIFO to become full. If not reset by the CPU, RxRDY reamins asserted until the FIFO is empty, + at which time it is negated. + The RxRDY status bit will also be asserted, regardless of the receiver FIFO full condition, when an end-of-message + character is loaded in the RxFIFO (BOP/BISYNC), when a BREAK condition (ASYNC mode) is detected in RSR[2), or + when the counterltimer is programmed to count received characters and the character which causes it to reach zero + is loaded in the FIFO (all modes). If reset by the CPU, the RxRDY status bit will remain negated, regardless of the + current state of the receiver FIFO, until it is asserted again due to one of the above conditions. + [2] General Purpose Output 2 - + This general purpose bit is used to control the TxDRQN/GP02lRTSN pin, when it is used as an output. The output is + High when the bit is a 0 and is Low when the bit is a 1. + [1] General Purpose Output 1 - This bit is used to control the RTxDRQN/GPOl N output, which is a general purpose output + when the channel is not in DMA mode. The output is High when the bit is a 0 and is Low when the bit is a 1. + [0] Request-to-Send Output - This bit controls the TxDRQN/GP02N/RTSN and SYNOUTN/RTSN pin, when either is + used as a RTS output. The output is High when the bit is a 0 and is Low when the bit is a 1. +*/ +void duscc_channel::do_dusccreg_omr_w(UINT8 data) +{ + LOG(("%s(%02x) Output and Miscellaneous Register\n", FUNCNAME, data)); + m_omr = data; + LOG(("- Tx Residual Character Length is ")); + if ((m_omr & REG_OMR_TXRCL_MASK) == REG_OMR_TXRCL_8BIT) + LOG(("determined by TPR[1:0], the Transmitter Parameter Register\n")); + else + LOG(("%u bits\n", (((m_omr & REG_OMR_TXRCL_MASK) >> 5) & 0x07) + 1)); + LOG(("- TxRDY activated by %s\n", m_omr & REG_OMR_TXRDY_ACTIVATED ? "FIFO empty" : "FIFO not full")); + LOG(("- RxRDY activated by %s\n", m_omr & REG_OMR_RXRDY_ACTIVATED ? "FIFO full" : "FIFO not empty")); + LOG(("- GP02, if configured as output, is: %u\n", m_omr & REG_OMR_GP02 ? 0 : 1)); + LOG(("- GP01, if configured as output, is: %u\n", m_omr & REG_OMR_GP01 ? 0 : 1)); + LOG(("- RTS, either pin if configured as output, is: %u\n", m_omr & REG_OMR_RTS ? 0 : 1)); + return; +} + +/* Pin Configuration Register (PCRA, PCRB) + This register selects the functions for multipurpose 1/0 pins. + [7] X2IIDC - This bit is defined only for PCRA. It is not used in PCRB. + 0 The X2/IDCN pin is used as a crystal connection. + 1 The X2/IDCN pin is the interrupt daisy chain output. + [6] GP02/RTS - The function of this pin is programmable only when not operating in full-duplex DMA mode. + 0 The TxDRQN/GP02N/RTSN pin is a general purpose output. It is Low when OMR[2] is a 1 and High when OMR[2] is a O. + 1 The pin is a request-to-send output The logical stale of the pin is controlled by OMR[O]. When OMR[O] is set, the output is Low. + [5] SYNOUT/RTS - + 0 The SYNOUTN/RTSN pin is an active-Low output which is asserted one bit time after a SYN pattern (COP modes) in HSRH/HSRL or FLAG + (BOP modes) is detected in CCSR.The output remains asserted for one receiver clock period. + 1 The pin is a request-to-send output The,logical state of the pin Is controlled by OMR[O] when OMR[O] is set, the output is Low. + [4:3] RTxC- + 00 The pin is an input. It must be programmed for input when used as the input for the receiver or transmitter clock, the DPLL, or the CIT. + 01 The pin is an output for the counterltimer. + 10 The pin is an output for the transmitter shift register clock. + 11 The pin is an output for the receiver shift register clock. + [2:0]TRxC- + 000 The pin is an input. It must be programmed for input when used as the input for the receiver or transmitter clock, the DPLL, or the CIT. + 001 The pin is an output from the crystal oscillator divided by two. + 010 The pin is an outputfor the DPLL output clock. + 011 The pin is an output for the counterltimer. Refer to CTCRAIB description. + 100 The pin is an output for the transmitter BRG at 16X the rate selected by TTR [3:0]. + 101 The pin is an output for the receiver BRG at 16X the rate selected by RTR [3:0]. + 110 The pin is an output for the transmitter shift register clock. + 111 The pin is an output for the receiver shift register clock. +*/ +void duscc_channel::do_dusccreg_pcr_w(UINT8 data) +{ + LOG(("%s(%02x) Pin Configuration Register\n", FUNCNAME, data)); + m_pcr = data; + LOG(("- The X2/IDCN pin is %s\n", m_index == duscc_device::CHANNEL_B ? "ignored for channel B" : + ((m_pcr & REG_PCR_X2_IDC) ? "crystal input" : "daisy chain interrupt output"))); + LOG(("- The GP02/RTS pin is %s\n", m_pcr & REG_PCR_GP02_RTS ? "RTS" : "GP02")); + LOG(("- The SYNOUT/RTS pin is %s\n", m_pcr & REG_PCR_SYNOUT_RTS ? "RTS" : "SYNOUT")); + +#if VERBOSE > 0 + LOG(("- The RTxC pin is ")); + switch ( m_pcr & REG_PCR_RTXC_MASK ) + { + case REG_PCR_RTXC_INPUT: LOG(("- an input\n")); break; + case REG_PCR_RTXC_CNTR_OUT: LOG(("- a counter/timer output\n")); break; + case REG_PCR_RTXC_TXCLK_OUT:LOG(("- a Tx clock output\n")); break; + case REG_PCR_RTXC_RXCLK_OUT:LOG(("- a Rx clock output\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } + LOG(("- The TRxC pin is ")); + switch( m_pcr & REG_PCR_TRXC_MASK ) + { + case REG_PCR_TRXC_INPUT: LOG(("- an input\n")); break; + case REG_PCR_TRXC_CRYST_OUT:LOG(("- a crystal/2 output\n")); break; + case REG_PCR_TRXC_DPLL_OUT: LOG(("- a DPLL output\n")); break; + case REG_PCR_TRXC_CNTR_OUT: LOG(("- a counter/timer output\n")); break; + case REG_PCR_TRXC_TXBRG_OUT:LOG(("- a Tx BRG output\n")); break; + case REG_PCR_TRXC_RXBRG_OUT:LOG(("- a Rx BRG output\n")); break; + case REG_PCR_TRXC_TXCLK_OUT:LOG(("- a Tx CLK output\n")); break; + case REG_PCR_TRXC_RXCLK_OUT:LOG(("- a Rx CLK output\n")); break; + default: LOG(("Wrong programming\n")); break; // Should never happen + } + +#endif + + return; +} + +/* + * Commands to the DUSCC are entered through the CCR channel command register. + * + * TODO: + * - support enable/disable of Tx/Rx using m_tra/m_rcv respectivelly + */ +void duscc_channel::do_dusccreg_ccr_w(UINT8 data) +{ + m_ccr = data; + LOG(("%s\n", FUNCNAME)); + switch(m_ccr) + { + + // TRANSMITTER COMMANDS + + /* Reset transmitter. Causes the transmitter to cease operation immediately. + The transmit FIFO is cleared and the TxD output goes into the marking state. + Also clears the transmitter status bits (TRSR[7:4]) and resets the TxRDY + status bit (GSR[I] or GSR[5] for Channels A and B, respectively). + The counter/timer and other registers are not affected*/ + case REG_CCR_RESET_TX: LOG(("- Reset Tx\n")); + set_tra_rate(0); + m_tx_fifo_wp = m_tx_fifo_rp = 0; + m_trsr &= 0x0f; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + break; + + /* Enable transmitter. Enables transmitter operation, conditioned by the state of + the CTS ENABLE Tx bit, TPR[2]. Has no effect if invoked when the transmitter has + previously been enabled.*/ + case REG_CCR_ENABLE_TX: LOG(("- Enable Tx\n")); + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + m_tra = 1; + set_tra_rate(m_brg_tx_rate); + break; + + /* Disable transmitter. Terminates transmitter operation and places the TXD output in the + marking state at the next occurrence of a transmit FIFO empty condition. All characters + currently in the FIFO, or any loaded subsequently prior to attaining an empty condition, + will be transmitted. + TODO: let all the chararcters be transmitted before shutting down shifter */ + case REG_CCR_DISABLE_TX: LOG(("- Disable Tx\n")); + set_tra_rate(0); + m_tra = 0; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + break; + + // RECEIVER COMMANDS + + /* Reset Receiver. Causes the receiver to cease operation, clears the receiver FIFO, + clears the data path, and clears the receiver status (RSR[7:0], TRSR[3:0], and either + GSR[O] or GSR[4] for Channels A and B, respectively). The counter/timer and other + registers are not affected.*/ + case REG_CCR_RESET_RX: LOG(("- Reset Rx\n")); + set_rcv_rate(0); + m_rx_fifo_wp = m_rx_fifo_rp = 0; + m_trsr &= 0xf0; + m_rsr = 0; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + break; + + /* Enable receiver. Causes receiver operation to begin, conditioned by the state of the DCD + ENABLED Rx bit, RPR[2]. Receiver goes into START, SYN, or FLAG search mode depending on + channel protocol mode. Has no effect if invoked when the receiver has previously been enabled.*/ + case REG_CCR_ENABLE_RX: LOG(("- Enable Rx\n")); + m_rcv = 1; + set_rcv_rate(m_brg_rx_rate); + //m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + break; + + /* Disable receiver. Terminates operation of the receiver. Any character currently being assembled + will be lost. Does not affect FIFO or any status.*/ + case REG_CCR_DISABLE_RX: LOG(("- Disable Rx\n")); + m_rcv = 0; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + break; + default: LOG((" - command %02x not implemented yet\n", data)); + } + return; +} + +void duscc_channel::do_dusccreg_txfifo_w(UINT8 data) +{ + LOG(("%s(%02x)'%c'\n", FUNCNAME,data, isalnum(data) ? data : ' ')); + LOG((" - TX wp:%d rp:%d sz:%d\n", m_tx_fifo_wp, m_tx_fifo_rp, m_tx_fifo_sz)); + + /* Tx FIFO is full or...? */ + if (m_tx_fifo_wp + 1 == m_tx_fifo_rp || ( (m_tx_fifo_wp + 1 == m_tx_fifo_sz) && (m_tx_fifo_rp == 0) )) + { + logerror("- TX FIFO is full, discarding data\n"); + LOG(("- TX FIFO is full, discarding data\n")); + } + else // ..there is still room + { + m_tx_data_fifo[m_tx_fifo_wp++] = data; + //m_rsr &= ~REG_RSR_OVERRUN_ERROR; + //m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + if (m_tx_fifo_wp >= m_tx_fifo_sz) + { + m_tx_fifo_wp = 0; + } + } + + /* Transmitter enabled? */ + if ( m_tra == 1 ) + { + if ( is_transmit_register_empty()) // Is the shift register loaded? + { + LOG(("- Setting up transmitter\n")); + transmit_register_setup(m_tx_data_fifo[m_tx_fifo_rp]); // Load the shift register, reload is done in tra_complete() + m_tx_fifo_rp_step(); + } + } + // check if Tx FIFO is FULL and set TxREADY accordingly + if (m_tx_fifo_wp + 1 == m_tx_fifo_rp || ( (m_tx_fifo_wp + 1 == m_tx_fifo_sz) && (m_tx_fifo_rp == 0) )) + { + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + else + { + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + + return; +} + +void duscc_channel::do_dusccreg_rsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_trsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ictsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_gsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ivr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_icr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +/* Short cutted non complex features */ +//void duscc_channel::do_dusccreg_rea_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +//void duscc_channel::do_dusccreg_sea_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +void duscc_channel::do_dusccreg_mrr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier1_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier2_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ier3_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_trcr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_ftlr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } +void duscc_channel::do_dusccreg_trmsr_w(UINT8 data){ logerror("register access method %s is not implemented yet\n", FUNCNAME); return; } + +//------------------------------------------------- +// control_read - read register +//------------------------------------------------- +UINT8 duscc_channel::read(offs_t &offset) +{ + UINT8 data = 0; + int reg = offset | m_a7; + + switch (reg) + { + case REG_CID: data = do_dusccreg_cid_r(); break; + case REG_CCR: data = do_dusccreg_ccr_r(); break; + case REG_RXFIFO_0: data = do_dusccreg_rxfifo_r(); break; + case REG_RXFIFO_1: data = do_dusccreg_rxfifo_r(); break; + case REG_RXFIFO_2: data = do_dusccreg_rxfifo_r(); break; + case REG_RXFIFO_3: data = do_dusccreg_rxfifo_r(); break; + case REG_GSR: data = do_dusccreg_gsr_r(); break; + default: + logerror(" \"%s\" %s: %c : Unsupported RRx register:%02x\n", m_owner->tag(), FUNCNAME, 'A' + m_index, reg); + } + + //LOG(("%s \"%s\": %c : Register R%d read '%02x'\n", FUNCNAME, m_owner->tag(), 'A' + m_index, reg, data)); + return data; +} + +//------------------------------------------------- +// write - write register +//------------------------------------------------- + +void duscc_channel::write(UINT8 data, offs_t &offset) +//WRITE8_MEMBER( duscc_channel::write) +{ + int reg = offset | m_a7; + + LOG(("\"%s\" %s: %c : Register write '%02x' -> [%02x]", m_owner->tag(), FUNCNAME, 'A' + m_index, data, reg )); + switch (reg) + { + case REG_SEA: /*Also REG_REA depending on which channel is written to */ + if ( m_uart->m_variant != SET_CMOS ) + { + logerror("Attempt set/clear the CDUSCC A7 bit on an NDUSCC\n"); + m_a7 = 0; + } + else + m_a7 = (m_index == duscc_device::CHANNEL_A ? 0x40 : 0); + break; + case REG_CMR1: do_dusccreg_cmr1_w(data); break; + case REG_CMR2: do_dusccreg_cmr2_w(data); break; + case REG_S1R: LOG(("REG_S1R \n")); break; + case REG_S2R: LOG(("REG_S2R \n")); break; + case REG_TPR: do_dusccreg_tpr_w(data); break; + case REG_TTR: do_dusccreg_ttr_w(data); break; + case REG_RPR: do_dusccreg_rpr_w(data); break; + case REG_RTR: do_dusccreg_rtr_w(data); break; + case REG_CTPRH: LOG(("REG_CTPRH\n")); break; + case REG_CTPRL: LOG(("REG_CTPRL\n")); break; + case REG_CTCR: LOG(("REG_CTCR\n")); break; + case REG_OMR: do_dusccreg_omr_w(data); break; + case REG_CTH: LOG(("REG_CTH \n")); break; + case REG_CTL: LOG(("REG_CTL \n")); break; + case REG_PCR: do_dusccreg_pcr_w(data); break; + case REG_CCR: do_dusccreg_ccr_w(data); break; + case REG_TXFIFO_0: do_dusccreg_txfifo_w(data); break; + case REG_TXFIFO_1: do_dusccreg_txfifo_w(data); break; + case REG_TXFIFO_2: do_dusccreg_txfifo_w(data); break; + case REG_TXFIFO_3: do_dusccreg_txfifo_w(data); break; + case REG_RSR: LOG(("REG_RSR \n")); break; + case REG_TRSR: LOG(("REG_TRSR\n")); break; + case REG_ICTSR: LOG(("REG_ICTSR\n")); break; + case REG_GSR: LOG(("REG_GSR \n")); break; + case REG_IER: LOG(("REG_IER \n")); break; +// case REG_CID: LOG(("REG_CID \n")); break; + case REG_IVR: LOG(("REG_IVR \n")); break; + case REG_ICR: LOG(("REG_ICR \n")); break; +// case REG_SEA: LOG(("REG_SEA \n")); break; +// case REG_IVRM: LOG(("REG_IVRM\n")); break; +// case REG_MRR: LOG(("REG_MRR \n")); break; + case REG_IER1: LOG(("REG_IER1\n")); break; + case REG_IER2: LOG(("REG_IER2\n")); break; + case REG_IER3: LOG(("REG_IER3\n")); break; + case REG_TRCR: LOG(("REG_TRCR\n")); break; + case REG_RFLR: LOG(("REG_RFLR\n")); break; + case REG_FTLR: LOG(("REG_FTLR\n")); break; + case REG_TRMSR: LOG(("REG_TRMSR\n")); break; + case REG_TELR: LOG(("REG_TELR\n")); break; + + default: + logerror(" \"%s\" %s: %c : Unsupported WRx register:%02x(%02x)\n", m_owner->tag(), FUNCNAME, 'A' + m_index, reg, data); + } +} + +/* Get data from top of fifo data but restore read pointer in case of exit latch lock */ +UINT8 duscc_channel::m_rx_fifo_rp_data() +{ + UINT8 data; + UINT8 old_rp = m_rx_fifo_rp; + m_rx_fifo_rp_step(); + data = m_rx_data_fifo[m_rx_fifo_rp]; + m_rx_fifo_rp = old_rp; + + return data; +} + +/* Step read pointer */ +void duscc_channel::m_rx_fifo_rp_step() +{ + m_rx_fifo_rp++; + if (m_rx_fifo_rp >= m_rx_fifo_sz) + { + m_rx_fifo_rp = 0; + } + + // check if FIFO is empty + if (m_rx_fifo_rp == m_rx_fifo_wp) + { + // no more characters available in the FIFO + // m_rr0 &= ~ RR0_RX_CHAR_AVAILABLE; + m_gsr &= ~(m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + } +} + +/* Step TX read pointer */ +void duscc_channel::m_tx_fifo_rp_step() +{ + m_tx_fifo_rp++; + if (m_tx_fifo_rp >= m_tx_fifo_sz) + { + m_tx_fifo_rp = 0; + } +} + +//------------------------------------------------- +// receive_data - receive data word into fifo +//------------------------------------------------- + +void duscc_channel::receive_data(UINT8 data) +{ + LOG(("\"%s\": %c : Receive Data Byte '%02x'\n", m_owner->tag(), 'A' + m_index, data)); +# + if (m_rx_fifo_wp + 1 == m_rx_fifo_rp || ( (m_rx_fifo_wp + 1 == m_rx_fifo_sz) && (m_rx_fifo_rp == 0) )) + { + // receive overrun error detected + m_rsr |= REG_RSR_OVERRUN_ERROR; + logerror("Receive_data() Error %02x\n", m_rsr); + } + else + { + m_rx_data_fifo[m_rx_fifo_wp] = data; + m_rx_error_fifo[m_rx_fifo_wp] &= ~REG_RSR_OVERRUN_ERROR; + m_rsr &= ~REG_RSR_OVERRUN_ERROR; + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_RXREADY : REG_GSR_CHAN_B_RXREADY); + + m_rx_fifo_wp++; + if (m_rx_fifo_wp >= m_rx_fifo_sz) + { + m_rx_fifo_wp = 0; + } + } +} + + +//------------------------------------------------- +// cts_w - clear to send handler +//------------------------------------------------- + +WRITE_LINE_MEMBER( duscc_channel::cts_w ) +{ + LOG(("\"%s\" %s: %c : CTS %u\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); + + if (m_cts != state) + { + // enable transmitter if in auto enables mode + if (!state) + { + m_ictsr |= REG_ICTSR_DELTA_CTS; + } + else + { + m_ictsr &= ~REG_ICTSR_DELTA_CTS; + } + + if (m_tpr & REG_TPR_CTS && m_tra) + { + m_gsr |= (m_index == duscc_device::CHANNEL_A ? REG_GSR_CHAN_A_TXREADY : REG_GSR_CHAN_B_TXREADY); + } + + // set clear to send + m_cts = state; + } +} + + +//------------------------------------------------- +// dcd_w - data carrier detected handler +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::dcd_w ) +{ + LOG(("\"%s\" %s: %c : DCD %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +#if 0 + + if (m_dcd != state) + { + // enable receiver if in auto enables mode + if (!state) + if (reg & REG_AUTO_ENABLES) + { + reg |= REG_RX_ENABLE; + } + + // set data carrier detect + m_dcd = state; + } +#endif +} + +//------------------------------------------------- +// ri_w - ring indicator handler +//------------------------------------------------- + +WRITE_LINE_MEMBER( duscc_channel::ri_w ) +{ + LOG(("\"%s\" %s: %c : RI %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +#if 0 + if (m_ri != state) + { + // set ring indicator state + m_ri = state; + } +#endif +} + +//------------------------------------------------- +// sync_w - sync handler +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::sync_w ) +{ + LOG(("\"%s\" %s: %c : SYNC %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +} + +//------------------------------------------------- +// rxc_w - receive clock +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::rxc_w ) +{ + LOG(("\"%s\" %s: %c : RXC %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +} + +//------------------------------------------------- +// txc_w - transmit clock +//------------------------------------------------- +WRITE_LINE_MEMBER( duscc_channel::txc_w ) +{ + LOG(("\"%s\" %s: %c : TXC %u - not implemented\n", m_owner->tag(), FUNCNAME, 'A' + m_index, state)); +} + +//------------------------------------------------- +// update_serial - +//------------------------------------------------- +void duscc_channel::update_serial() +{ + int data_bit_count = get_rx_word_length(); + stop_bits_t stop_bits = get_stop_bits(); + parity_t parity; + + if ((m_cmr1 & REG_CMR1_PMMODE_MASK) == REG_CMR1_PMMODE_PARITY) + { + if ( (m_cmr1 & REG_CMR1_PARITY) == 0) + parity = PARITY_EVEN; + else + parity = PARITY_ODD; + } + else + parity = PARITY_NONE; + + LOG((LLFORMAT " %s() \"%s \"Channel %c setting data frame %d+%d%c%d\n", machine().firstcpu->total_cycles(), FUNCNAME, m_owner->tag(), 'A' + m_index, 1, + data_bit_count, parity == PARITY_NONE ? 'N' : parity == PARITY_EVEN ? 'E' : 'O', (stop_bits + 1) / 2)); + + set_data_frame(1, data_bit_count, parity, stop_bits); + + int clocks = get_rx_clock_mode(); + + if (m_rxc > 0) + { + set_rcv_rate(m_rxc / clocks); + LOG((" - Receiver clock: %d mode: %d rate: %d/%xh\n", m_rxc, clocks, m_rxc / clocks, m_rxc / clocks)); + } + + clocks = get_tx_clock_mode(); + if (m_txc > 0) + { + set_tra_rate(m_txc / clocks); + LOG((" - Transmit clock: %d mode: %d rate: %d/%xh\n", m_rxc, clocks, m_rxc / clocks, m_rxc / clocks)); + } + + if (m_brg_rx_rate != 0) + { + if (m_brg_rx_rate == 1) m_brg_rx_rate = 0; // BRG beeing disabled + set_rcv_rate(m_brg_rx_rate); + LOG((" - Baud Rate Generator: %d mode: RX:%dx\n", m_brg_rx_rate, get_rx_clock_mode())); + } + if (m_brg_tx_rate != 0) + { + if (m_brg_tx_rate == 1) m_brg_tx_rate = 0; // BRG beeing disabled + set_tra_rate(m_brg_tx_rate); + LOG((" - Baud Rate Generator: %d mode: TX:%dx\n", m_brg_tx_rate, get_tx_clock_mode())); + } +} + +//------------------------------------------------- +// set_dtr - +//------------------------------------------------- +void duscc_channel::set_dtr(int state) +{ + LOG(("%s(%d)\n", FUNCNAME, state)); + m_dtr = state; + + if (m_index == duscc_device::CHANNEL_A) + m_uart->m_out_dtra_cb(m_dtr); + else + m_uart->m_out_dtrb_cb(m_dtr); +} + + + +//------------------------------------------------- +// write_rx - called by terminal through rs232/diserial +// when character is sent to board +//------------------------------------------------- +WRITE_LINE_MEMBER(duscc_channel::write_rx) +{ + m_rxd = state; + //only use rx_w when self-clocked + if(m_rxc != 0 || m_brg_rx_rate != 0) + device_serial_interface::rx_w(state); +} diff --git a/src/devices/machine/scnxx562.h b/src/devices/machine/scnxx562.h new file mode 100644 index 00000000000..917f816228a --- /dev/null +++ b/src/devices/machine/scnxx562.h @@ -0,0 +1,698 @@ +// license:BSD-3-Clause +// copyright-holders:Joakim Larsson Edstrom +/*************************************************************************** + + Philips DUSCC - Dual Serial Communications Controller emulation + +**************************************************************************** + + Chan B Chan A Chan B Chan A + ======= _____ _____ ======== ======= _____ _____ ======== + IACKN 1|* \_/ |48 VCC IACKN 1|* \_/ |48 VDD + A3 2| |47 A4 A3 2| |47 A4 + A2 3| |46 A5 A2 3| |46 A5 + A1 4| |45 A6 A1 4| |45 A6 + RTxDAK/GPI1 5| |44 RTxDAK/GPI1 5| |44 RTxDAK/GP1 + IRQN 6| |43 X1/CLK IRQN 6| |43 X1/CLK + RDYN 7| |42 X2 RESETN 7| |42 X2 + RTS/SYNOUT 8| |41 RTS/SYNOUT 8| |41 RTS/SYNOUT + TRxC 9| |40 TRxC TRxC 9| |40 TRxC + RTxC 10| |39 RTxC RTxC 10| |39 RTxC + DCD/SYNI 11| |38 DCD/SYNI 11| |38 DCD/SYNI + RxD 12| |37 RxD RxD 12| |37 RxD + TxD 13| SCN26562 |36 TxD TxD 13| SCN68562 |36 TxD + TxDAK/GPI2 14| SCN26C562 |35 TxDAK/GPI2 14| SCN68C562 |35 TxDAK/GPI2 + RTxDRQ/GPO1 15| |34 RTxDRQ/GPO1 15| |34 RTxDRQ/GPO1 + TxDRQ/RTS/GPO2 16| |33 TxDRQ/RTS/GPO2 16| |33 TxDRQ/RTS/GPO2 + CTS/LC 17| |32 CTS/LC CTS/LC 17| |32 CTS/LC + D7 18| |31 D0 D7 18| |31 D0 + D6 19| |30 D1 D6 19| |30 D1 + D5 20| |29 D2 D5 20| |29 D2 + D4 21| |28 D3 D4 21| |28 D3 + RDN 22| |27 EOPN DTACKN 22| |27 DONEN + RESETN 23| |26 WRN DTCN 23| |26 R/WN + GND 24|_____________|25 CEN CND 24|_____________|25 CSN + Intel Bus Motorola Bus + +***************************************************************************/ + +#ifndef __SCNXX562_H__ +#define __SCNXX562_H__ + +#include "emu.h" + +//************************************************************************** +// DEVICE CONFIGURATION MACROS +//************************************************************************** + +#define LOCAL_BRG 0 + +/* Variant ADD macros - use the right one to enable the right feature set! */ +#define MCFG_DUSCC26562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC26562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +#define MCFG_DUSCC26C562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC26C562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +#define MCFG_DUSCC68562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC68562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +#define MCFG_DUSCC68C562_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC68C562, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +/* generic ADD macro - Avoid using it directly, see above for correct variant instead */ +#define MCFG_DUSCC_ADD(_tag, _clock, _rxa, _txa, _rxb, _txb) \ + MCFG_DEVICE_ADD(_tag, DUSCC, _clock) \ + MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) + +/* Generic macros */ +#define MCFG_DUSCC_OFFSETS(_rxa, _txa, _rxb, _txb) \ + duscc_device::configure_channels(*device, _rxa, _txa, _rxb, _txb); + +// Port A callbacks +#define MCFG_DUSCC_OUT_TXDA_CB(_devcb) \ + devcb = &duscc_device::set_out_txda_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_DTRA_CB(_devcb) \ + devcb = &duscc_device::set_out_dtra_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_RTSA_CB(_devcb) \ + devcb = &duscc_device::set_out_rtsa_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_SYNCA_CB(_devcb) \ + devcb = &duscc_device::set_out_synca_callback(*device, DEVCB_##_devcb); + +// Port B callbacks +#define MCFG_DUSCC_OUT_TXDB_CB(_devcb) \ + devcb = &duscc_device::set_out_txdb_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_DTRB_CB(_devcb) \ + devcb = &duscc_device::set_out_dtrb_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_RTSB_CB(_devcb) \ + devcb = &duscc_device::set_out_rtsb_callback(*device, DEVCB_##_devcb); + +#define MCFG_DUSCC_OUT_SYNCB_CB(_devcb) \ + devcb = &duscc_device::set_out_syncb_callback(*device, DEVCB_##_devcb); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> duscc_channel + +class duscc_device; + +class duscc_channel : public device_t, + public device_serial_interface +{ + friend class duscc_device; + +public: + duscc_channel(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + // device_serial_interface overrides + virtual void tra_callback() override; + virtual void tra_complete() override; + virtual void rcv_callback() override; + virtual void rcv_complete() override; + + // read register handlers + UINT8 do_dusccreg_cmr1_r(); + UINT8 do_dusccreg_cmr2_r(); + UINT8 do_dusccreg_s1r_r(); + UINT8 do_dusccreg_s2r_r(); + UINT8 do_dusccreg_tpr_r(); + UINT8 do_dusccreg_ttr_r(); + UINT8 do_dusccreg_rpr_r(); + UINT8 do_dusccreg_rtr_r(); + UINT8 do_dusccreg_ctprh_r(); + UINT8 do_dusccreg_ctprl_r(); + UINT8 do_dusccreg_ctcr_r(); + UINT8 do_dusccreg_omr_r(); + UINT8 do_dusccreg_cth_r(); + UINT8 do_dusccreg_ctl_r(); + UINT8 do_dusccreg_pcr_r(); + UINT8 do_dusccreg_ccr_r(); + UINT8 do_dusccreg_rxfifo_r(); + UINT8 do_dusccreg_rsr_r(); + UINT8 do_dusccreg_trsr_r(); + UINT8 do_dusccreg_ictsr_r(); + UINT8 do_dusccreg_gsr_r(); + UINT8 do_dusccreg_ier_r(); + UINT8 do_dusccreg_cid_r(); + UINT8 do_dusccreg_ivr_r(); + UINT8 do_dusccreg_icr_r(); + UINT8 do_dusccreg_ivrm_r(); + UINT8 do_dusccreg_mrr_r(); + UINT8 do_dusccreg_ier1_r(); + UINT8 do_dusccreg_ier2_r(); + UINT8 do_dusccreg_ier3_r(); + UINT8 do_dusccreg_trcr_r(); + UINT8 do_dusccreg_rflr_r(); + UINT8 do_dusccreg_ftlr_r(); + UINT8 do_dusccreg_trmsr_r(); + UINT8 do_dusccreg_telr_r(); + + // write register handlers + void do_dusccreg_cmr1_w(UINT8 data); + void do_dusccreg_cmr2_w(UINT8 data); + void do_dusccreg_s1r_w(UINT8 data); + void do_dusccreg_s2r_w(UINT8 data); + void do_dusccreg_tpr_w(UINT8 data); + void do_dusccreg_ttr_w(UINT8 data); + void do_dusccreg_rpr_w(UINT8 data); + void do_dusccreg_rtr_w(UINT8 data); + void do_dusccreg_ctprh_w(UINT8 data); + void do_dusccreg_ctprl_w(UINT8 data); + void do_dusccreg_ctcr_w(UINT8 data); + void do_dusccreg_omr_w(UINT8 data); + void do_dusccreg_pcr_w(UINT8 data); + void do_dusccreg_ccr_w(UINT8 data); + void do_dusccreg_txfifo_w(UINT8 data); + void do_dusccreg_rsr_w(UINT8 data); + void do_dusccreg_trsr_w(UINT8 data); + void do_dusccreg_ictsr_w(UINT8 data); + void do_dusccreg_gsr_w(UINT8 data); + void do_dusccreg_ier_w(UINT8 data); + // void do_dusccreg_rea_w(UINT8 data); // Short cutted non complex feature + void do_dusccreg_ivr_w(UINT8 data); + void do_dusccreg_icr_w(UINT8 data); + // void do_dusccreg_sea_w(UINT8 data); // Short cutted non complex feature + void do_dusccreg_mrr_w(UINT8 data); + void do_dusccreg_ier1_w(UINT8 data); + void do_dusccreg_ier2_w(UINT8 data); + void do_dusccreg_ier3_w(UINT8 data); + void do_dusccreg_trcr_w(UINT8 data); + void do_dusccreg_ftlr_w(UINT8 data); + void do_dusccreg_trmsr_w(UINT8 data); + + UINT8 read(offs_t &offset); + void write(UINT8 data, offs_t &offset); + + // UINT8 data_read(); + // void data_write(UINT8 data); + + void receive_data(UINT8 data); + void m_tx_fifo_rp_step(); + void m_rx_fifo_rp_step(); + UINT8 m_rx_fifo_rp_data(); + + DECLARE_WRITE_LINE_MEMBER( write_rx ); + DECLARE_WRITE_LINE_MEMBER( cts_w ); + DECLARE_WRITE_LINE_MEMBER( dcd_w ); + DECLARE_WRITE_LINE_MEMBER( ri_w ); + DECLARE_WRITE_LINE_MEMBER( rxc_w ); + DECLARE_WRITE_LINE_MEMBER( txc_w ); + DECLARE_WRITE_LINE_MEMBER( sync_w ); + + int m_rxc; + int m_txc; + int m_tra; + int m_rcv; + + // Register state + UINT8 m_cmr1; + UINT8 m_cmr2; + UINT8 m_s1r; + UINT8 m_s2r; + UINT8 m_tpr; + UINT8 m_ttr; + UINT8 m_rpr; + UINT8 m_rtr; + UINT8 m_ctprh; + UINT8 m_ctprl; + UINT8 m_ctcr; + UINT8 m_omr; + UINT8 m_cth; + UINT8 m_ctl; + UINT8 m_pcr; + UINT8 m_ccr; + UINT8 m_txfifo[4]; + UINT8 m_rxfifo[4]; + UINT8 m_rsr; + UINT8 m_trsr; + UINT8 m_ictsr; + UINT8 m_gsr; + UINT8 m_ier; + // UINT8 m_rea; + UINT8 m_cid; + UINT8 m_ivr; + UINT8 m_icr; + // UINT8 m_sea; + UINT8 m_ivrm; + UINT8 m_mrr; + UINT8 m_ier1; + UINT8 m_ier2; + UINT8 m_ier3; + UINT8 m_trcr; + UINT8 m_rflr; + UINT8 m_ftlr; + UINT8 m_trmsr; + UINT8 m_telr; + +protected: + enum + { + INT_TRANSMIT = 0, + INT_EXTERNAL = 1, + INT_RECEIVE = 2, + INT_SPECIAL = 3 + }; + + enum + { + REG_CCR_RESET_TX = 0x00, + REG_CCR_ENABLE_TX = 0x02, + REG_CCR_DISABLE_TX = 0x03, + REG_CCR_RESET_RX = 0x40, + REG_CCR_ENABLE_RX = 0x42, + REG_CCR_DISABLE_RX = 0x43 + }; + + enum + { + REG_CMR1_PARITY = 0x20, + REG_CMR1_PMMODE_MASK = 0x18, + REG_CMR1_PMMODE_NONE = 0x00, + REG_CMR1_PMMODE_RES = 0x01, + REG_CMR1_PMMODE_PARITY = 0x10, + REG_CMR1_PMMODE_FORCED = 0x11, + REG_CMR1_CPMODE_MASK = 0x07, + REG_CMR1_CPMODE_ASYNC = 0x07 + }; + + enum + { + REG_CMR2_DTI_MASK = 0x38, + REG_CMR2_DTI_NODMA = 0x38 + }; + + enum + { + REG_RPR_DATA_BITS_MASK = 0x03, + REG_RPR_DATA_BITS_5BIT = 0x00, + REG_RPR_DATA_BITS_6BIT = 0x01, + REG_RPR_DATA_BITS_7BIT = 0x02, + REG_RPR_DATA_BITS_8BIT = 0x03, + REG_RPR_DCD = 0x04, + REG_RPR_STRIP_PARITY = 0x08, + REG_RPR_RTS = 0x10 + }; + + enum + { + REG_TPR_DATA_BITS_MASK = 0x03, + REG_TPR_DATA_BITS_5BIT = 0x00, + REG_TPR_DATA_BITS_6BIT = 0x01, + REG_TPR_DATA_BITS_7BIT = 0x02, + REG_TPR_DATA_BITS_8BIT = 0x03, + REG_TPR_CTS = 0x04, + REG_TPR_RTS = 0x08, + REG_TPR_STOP_BITS_MASK = 0xf0 + }; + + enum + { + REG_TTR_EXT = 0x80, + REG_TTR_TXCLK_MASK = 0x70, + REG_TTR_TXCLK_1XEXT = 0x00, + REG_TTR_TXCLK_16XEXT = 0x10, + REG_TTR_TXCLK_DPLL = 0x20, + REG_TTR_TXCLK_BRG = 0x30, + REG_TTR_TXCLK_2X_OTHER = 0x40, + REG_TTR_TXCLK_32X_OTHER = 0x50, + REG_TTR_TXCLK_2X_OWN = 0x60, + REG_TTR_TXCLK_32X_OWN = 0x70, + REG_TTR_BRG_RATE_MASK = 0x0f, + }; + + enum + { + REG_RTR_EXT = 0x80, + REG_RTR_RXCLK_MASK = 0x70, + REG_RTR_RXCLK_1XEXT = 0x00, + REG_RTR_RXCLK_16XEXT = 0x10, + REG_RTR_RXCLK_BRG = 0x20, + REG_RTR_RXCLK_CT = 0x30, + REG_RTR_RXCLK_DPLL_64X_X1 = 0x40, + REG_RTR_RXCLK_DPLL_32X_EXT = 0x50, + REG_RTR_RXCLK_DPLL_32X_BRG = 0x60, + REG_RTR_RXCLK_DPLL_32X_CT = 0x70, + REG_RTR_BRG_RATE_MASK = 0x0f, + }; + + enum + { + REG_PCR_X2_IDC = 0x80, + REG_PCR_GP02_RTS = 0x40, + REG_PCR_SYNOUT_RTS = 0x20, + REG_PCR_RTXC_MASK = 0x18, + REG_PCR_RTXC_INPUT = 0x00, + REG_PCR_RTXC_CNTR_OUT = 0x08, + REG_PCR_RTXC_TXCLK_OUT = 0x10, + REG_PCR_RTXC_RXCLK_OUT = 0x18, + REG_PCR_TRXC_MASK = 0x07, + REG_PCR_TRXC_INPUT = 0x00, + REG_PCR_TRXC_CRYST_OUT = 0x01, + REG_PCR_TRXC_DPLL_OUT = 0x02, + REG_PCR_TRXC_CNTR_OUT = 0x03, + REG_PCR_TRXC_TXBRG_OUT = 0x04, + REG_PCR_TRXC_RXBRG_OUT = 0x05, + REG_PCR_TRXC_TXCLK_OUT = 0x06, + REG_PCR_TRXC_RXCLK_OUT = 0x07, + }; + + enum + { + REG_OMR_TXRCL_MASK = 0xe0, + REG_OMR_TXRCL_8BIT = 0xe0, + REG_OMR_TXRDY_ACTIVATED = 0x10, + REG_OMR_RXRDY_ACTIVATED = 0x08, + REG_OMR_GP02 = 0x04, + REG_OMR_GP01 = 0x02, + REG_OMR_RTS = 0x01, + }; + + enum + { + REG_RSR_OVERRUN_ERROR = 0x20, + }; + + enum + { + REG_ICTSR_DELTA_CTS = 0x10, + REG_ICTSR_DCD = 0x08, + REG_ICTSR_CTS = 0x04, + }; + + enum + { + REG_GSR_CHAN_A_RXREADY = 0x01, + REG_GSR_CHAN_B_RXREADY = 0x10, + REG_GSR_CHAN_A_TXREADY = 0x02, + REG_GSR_CHAN_B_TXREADY = 0x20, + }; + + // Register offsets, stripped from channel bit 0x20 but including A7 bit + enum + { + REG_CMR1 = 0x00, + REG_CMR2 = 0x01, + REG_S1R = 0x02, + REG_S2R = 0x03, + REG_TPR = 0x04, + REG_TTR = 0x05, + REG_RPR = 0x06, + REG_RTR = 0x07, + REG_CTPRH = 0x08, + REG_CTPRL = 0x09, + REG_CTCR = 0x0a, + REG_OMR = 0x0b, + REG_CTH = 0x0c, + REG_CTL = 0x0d, + REG_PCR = 0x0e, + REG_CCR = 0x0f, + REG_TXFIFO_0= 0x10, + REG_TXFIFO_1= 0x11, + REG_TXFIFO_2= 0x12, + REG_TXFIFO_3= 0x13, + REG_RXFIFO_0= 0x14, + REG_RXFIFO_1= 0x15, + REG_RXFIFO_2= 0x16, + REG_RXFIFO_3= 0x17, + REG_RSR = 0x18, + REG_TRSR = 0x19, + REG_ICTSR = 0x1a, + REG_GSR = 0x1b, + REG_IER = 0x1c, + REG_REA = 0x1d, + REG_CID = 0x1d, + REG_IVR = 0x1e, + REG_ICR = 0x1f, + REG_SEA = 0x1d, + REG_IVRM = 0x1e, + REG_MRR = 0x1f, + REG_IER1 = 0x42, + REG_IER2 = 0x43, + REG_IER3 = 0x45, + REG_TRCR = 0x47, + REG_RFLR = 0x4e, + REG_FTLR = 0x5c, + REG_TRMSR = 0x5e, + REG_TELR = 0x5f, + }; + + enum + { + TIMER_ID_BAUD, + TIMER_ID_XTAL, + TIMER_ID_RTXC, + TIMER_ID_TRXC + }; + + UINT16 m_brg_rx_rate; + UINT16 m_brg_tx_rate; + UINT16 m_brg_const; + + // TODO: Implement the 14.4K, 56K and 64K bauds available on the CDUSCC + static unsigned int get_baudrate(unsigned int br) + { + switch (br) + { + case 0x00: return 50; break; + case 0x01: return 75; break; + case 0x02: return 110; break; + case 0x03: return 134; break; + case 0x04: return 150; break; + case 0x05: return 200; break; + case 0x06: return 300; break; + case 0x07: return 600; break; + case 0x08: return 1050; break; + case 0x09: return 1200; break; + case 0x0a: return 2000; break; + case 0x0b: return 2400; break; + case 0x0c: return 4800; break; + case 0x0d: return 9600; break; + case 0x0e: return 19200; break; + case 0x0f: return 38400; break; + }; + return 0; + } + + void update_serial(); + void set_dtr(int state); + void set_rts(int state); + + int get_tx_clock_mode(); + int get_rx_clock_mode(); + stop_bits_t get_stop_bits(); + int get_rx_word_length(); + int get_tx_word_length(); + + /* FIFOs and rx/tx status */ + /* Receiver */ + UINT8 m_rx_data_fifo[16]; // data FIFO + UINT8 m_rx_error_fifo[16]; // error FIFO + int m_rx_fifo_rp; // FIFO read pointer + int m_rx_fifo_wp; // FIFO write pointer + int m_rx_fifo_sz; // FIFO size + UINT8 m_rx_error; // current error + + /* Transmitter */ + UINT8 m_tx_data_fifo[16]; // data FIFO + UINT8 m_tx_error_fifo[16]; // error FIFO + int m_tx_fifo_rp; // FIFO read pointer + int m_tx_fifo_wp; // FIFO write pointer + int m_tx_fifo_sz; // FIFO size + UINT8 m_tx_error; // current error + + int m_rx_clock; // receive clock pulse count + int m_rx_first; // first character received + int m_rx_break; // receive break condition + // UINT8 m_rx_rr0_latch; // read register 0 latched + + int m_rxd; + int m_ri; // ring indicator latch + int m_cts; // clear to send latch + int m_dcd; // data carrier detect latch + + // transmitter state + UINT8 m_tx_data; // transmit data register + int m_tx_clock; // transmit clock pulse count + + int m_dtr; // data terminal ready + int m_rts; // request to send + + // synchronous state + UINT16 m_sync; // sync character + + int m_rcv_mode; + int m_index; + duscc_device *m_uart; + + // CDUSCC specifics + int m_a7; // Access additional registers +}; + + +// ======================> duscc_device + + +class duscc_device : public device_t +// ,public device_z80daisy_interface +{ + friend class duscc_channel; + +public: + // construction/destruction + duscc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant, const char *shortname, const char *source); + duscc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + template static devcb_base &set_out_txda_callback(device_t &device, _Object object) { return downcast(device).m_out_txda_cb.set_callback(object); } + template static devcb_base &set_out_dtra_callback(device_t &device, _Object object) { return downcast(device).m_out_dtra_cb.set_callback(object); } + template static devcb_base &set_out_rtsa_callback(device_t &device, _Object object) { return downcast(device).m_out_rtsa_cb.set_callback(object); } + template static devcb_base &set_out_synca_callback(device_t &device, _Object object) { return downcast(device).m_out_synca_cb.set_callback(object); } + + template static devcb_base &set_out_txdb_callback(device_t &device, _Object object) { return downcast(device).m_out_txdb_cb.set_callback(object); } + template static devcb_base &set_out_dtrb_callback(device_t &device, _Object object) { return downcast(device).m_out_dtrb_cb.set_callback(object); } + template static devcb_base &set_out_rtsb_callback(device_t &device, _Object object) { return downcast(device).m_out_rtsb_cb.set_callback(object); } + template static devcb_base &set_out_syncb_callback(device_t &device, _Object object) { return downcast(device).m_out_syncb_cb.set_callback(object); } + + static void configure_channels(device_t &device, int rxa, int txa, int rxb, int txb) + { +#if 0 // TODO: Fix this, need a way to set external rx/tx clocks for the channels + duscc_device &dev = downcast(device); + dev.m_chanA->m_rxc = rxa; + dev.m_chanA->m_txc = txa; + dev.m_chanB->m_rxc = rxb; + dev.m_chanB->m_txc = txb; +#endif + } + + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); + + // interrupt acknowledge + // int m1_r(); + + DECLARE_WRITE_LINE_MEMBER( rxa_w ) { m_chanA->write_rx(state); } + DECLARE_WRITE_LINE_MEMBER( rxb_w ) { m_chanB->write_rx(state); } + DECLARE_WRITE_LINE_MEMBER( ctsa_w ) { m_chanA->cts_w(state); } + DECLARE_WRITE_LINE_MEMBER( ctsb_w ) { m_chanB->cts_w(state); } + DECLARE_WRITE_LINE_MEMBER( dcda_w ) { m_chanA->dcd_w(state); } + DECLARE_WRITE_LINE_MEMBER( dcdb_w ) { m_chanB->dcd_w(state); } + DECLARE_WRITE_LINE_MEMBER( ria_w ) { m_chanA->ri_w(state); } + DECLARE_WRITE_LINE_MEMBER( rib_w ) { m_chanB->ri_w(state); } +#if 0 + DECLARE_WRITE_LINE_MEMBER( rxca_w ) { m_chanA->rxc_w(state); } + DECLARE_WRITE_LINE_MEMBER( rxcb_w ) { m_chanB->rxc_w(state); } + DECLARE_WRITE_LINE_MEMBER( txca_w ) { m_chanA->txc_w(state); } + DECLARE_WRITE_LINE_MEMBER( txcb_w ) { m_chanB->txc_w(state); } + DECLARE_WRITE_LINE_MEMBER( rxtxcb_w ) { m_chanB->rxc_w(state); m_chanB->txc_w(state); } +#endif + DECLARE_WRITE_LINE_MEMBER( synca_w ) { m_chanA->sync_w(state); } + DECLARE_WRITE_LINE_MEMBER( syncb_w ) { m_chanB->sync_w(state); } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual machine_config_constructor device_mconfig_additions() const override; + + // internal interrupt management + void check_interrupts(); + void reset_interrupts(); + UINT8 modify_vector(UINT8 vect, int i, UINT8 src); + void trigger_interrupt(int index, int state); + int get_channel_index(duscc_channel *ch) { return (ch == m_chanA) ? 0 : 1; } + + // Variants in the DUSCC family + enum + { + TYPE_DUSCC = 0x001, + TYPE_DUSCC26562 = 0x002, + TYPE_DUSCC26C562 = 0x004, + TYPE_DUSCC68562 = 0x008, + TYPE_DUSCC68C562 = 0x010, + }; + +#define SET_NMOS ( duscc_device::TYPE_DUSCC26562 | duscc_device::TYPE_DUSCC68562 ) +#define SET_CMOS ( duscc_device::TYPE_DUSCC26C562 | duscc_device::TYPE_DUSCC68C562 ) + + enum + { + CHANNEL_A = 0, + CHANNEL_B + }; + + required_device m_chanA; + required_device m_chanB; + + // internal state +#if 0 + int m_rxca; + int m_txca; + int m_rxcb; + int m_txcb; +#endif + + devcb_write_line m_out_txda_cb; + devcb_write_line m_out_dtra_cb; + devcb_write_line m_out_rtsa_cb; + devcb_write_line m_out_synca_cb; + + devcb_write_line m_out_txdb_cb; + devcb_write_line m_out_dtrb_cb; + devcb_write_line m_out_rtsb_cb; + devcb_write_line m_out_syncb_cb; + + int m_int_state[6]; // interrupt state + + int m_variant; +}; + +// device type definition +extern const device_type DUSCC; +extern const device_type DUSCC_CHANNEL; +extern const device_type DUSCC26562; +extern const device_type DUSCC26C562; +extern const device_type DUSCC68562; +extern const device_type DUSCC68C562; + +class duscc26562_device : public duscc_device +{ +public : + duscc26562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class duscc26C562_device : public duscc_device +{ +public : + duscc26C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class duscc68562_device : public duscc_device +{ +public : + duscc68562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +class duscc68C562_device : public duscc_device +{ +public : + duscc68C562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); +}; + +#endif // __SCNXX562_H__ diff --git a/src/devices/machine/stvcd.cpp b/src/devices/machine/stvcd.cpp index 69b51472eb5..aed8d46aea1 100644 --- a/src/devices/machine/stvcd.cpp +++ b/src/devices/machine/stvcd.cpp @@ -136,7 +136,7 @@ void saturn_state::cd_exec_command( void ) ((cr1 & 0xff00) != 0x5200) && ((cr1 & 0xff00) != 0x5300) && 1) - printf("CD: command exec %04x %04x %04x %04x %04x (stat %04x)\n", hirqreg, cr1, cr2, cr3, cr4, cd_stat); + logerror("CD: command exec %04x %04x %04x %04x %04x (stat %04x)\n", hirqreg, cr1, cr2, cr3, cr4, cd_stat); switch ((cr1 >> 8) & 0xff) { @@ -283,7 +283,7 @@ void saturn_state::cd_exec_command( void ) } else { - printf("No xferdnum error\n"); + logerror("No xferdnum error\n"); cr1 = (cd_stat) | (0xff); // is this right? cr2 = 0xffff; cr3 = 0; @@ -360,7 +360,7 @@ void saturn_state::cd_exec_command( void ) if (start_pos != 0xffffff) cd_curfad = start_pos & 0xfffff; - printf("fad mode\n"); + logerror("fad mode\n"); cur_track = cdrom_get_track(cdrom, cd_curfad-150); } else @@ -415,7 +415,7 @@ void saturn_state::cd_exec_command( void ) else fadstoplay = (cdrom_get_track_start(cdrom, (end_pos & 0xff00) >> 8)) - cd_curfad; } - printf("track mode %08x %08x\n",cd_curfad,fadstoplay); + logerror("track mode %08x %08x\n",cd_curfad,fadstoplay); } else { @@ -428,7 +428,7 @@ void saturn_state::cd_exec_command( void ) cd_curfad = cdrom_get_track_start(cdrom, cur_track-1); fadstoplay = cdrom_get_track_start(cdrom, cur_track) - cd_curfad; } - printf("track resume %08x %08x\n",cd_curfad,fadstoplay); + logerror("track resume %08x %08x\n",cd_curfad,fadstoplay); } } @@ -1193,7 +1193,7 @@ void saturn_state::cd_exec_command( void ) case 0x67: // get copy error CDROM_LOG(("%s:CD: Get copy error\n", machine().describe_context())) - printf("Get copy error\n"); + logerror("Get copy error\n"); cr1 = cd_stat; cr2 = 0; cr3 = 0; diff --git a/src/devices/machine/tms9901.cpp b/src/devices/machine/tms9901.cpp index 3da7028baa8..1ff3b7381f6 100644 --- a/src/devices/machine/tms9901.cpp +++ b/src/devices/machine/tms9901.cpp @@ -411,37 +411,53 @@ WRITE8_MEMBER ( tms9901_device::write ) switch (offset) { case 0x10: - if (!m_write_p0.isnull()) m_write_p0(data); break; + if (!m_write_p0.isnull()) m_write_p0(data); + break; case 0x11: - if (!m_write_p1.isnull()) m_write_p1(data); break; + if (!m_write_p1.isnull()) m_write_p1(data); + break; case 0x12: - if (!m_write_p2.isnull()) m_write_p2(data); break; + if (!m_write_p2.isnull()) m_write_p2(data); + break; case 0x13: - if (!m_write_p3.isnull()) m_write_p3(data); break; + if (!m_write_p3.isnull()) m_write_p3(data); + break; case 0x14: - if (!m_write_p4.isnull()) m_write_p4(data); break; + if (!m_write_p4.isnull()) m_write_p4(data); + break; case 0x15: - if (!m_write_p5.isnull()) m_write_p5(data); break; + if (!m_write_p5.isnull()) m_write_p5(data); + break; case 0x16: - if (!m_write_p6.isnull()) m_write_p6(data); break; + if (!m_write_p6.isnull()) m_write_p6(data); + break; case 0x17: - if (!m_write_p7.isnull()) m_write_p7(data); break; + if (!m_write_p7.isnull()) m_write_p7(data); + break; case 0x18: - if (!m_write_p8.isnull()) m_write_p8(data); break; + if (!m_write_p8.isnull()) m_write_p8(data); + break; case 0x19: - if (!m_write_p9.isnull()) m_write_p9(data); break; + if (!m_write_p9.isnull()) m_write_p9(data); + break; case 0x1A: - if (!m_write_p10.isnull()) m_write_p10(data); break; + if (!m_write_p10.isnull()) m_write_p10(data); + break; case 0x1B: - if (!m_write_p11.isnull()) m_write_p11(data); break; + if (!m_write_p11.isnull()) m_write_p11(data); + break; case 0x1C: - if (!m_write_p12.isnull()) m_write_p12(data); break; + if (!m_write_p12.isnull()) m_write_p12(data); + break; case 0x1D: - if (!m_write_p13.isnull()) m_write_p13(data); break; + if (!m_write_p13.isnull()) m_write_p13(data); + break; case 0x1E: - if (!m_write_p14.isnull()) m_write_p14(data); break; + if (!m_write_p14.isnull()) m_write_p14(data); + break; case 0x1F: - if (!m_write_p15.isnull()) m_write_p15(data); break; + if (!m_write_p15.isnull()) m_write_p15(data); + break; } return; diff --git a/src/devices/machine/upd765.cpp b/src/devices/machine/upd765.cpp index 04a194d6993..96dd03fa1a9 100644 --- a/src/devices/machine/upd765.cpp +++ b/src/devices/machine/upd765.cpp @@ -1,8 +1,8 @@ // license:BSD-3-Clause // copyright-holders:Olivier Galibert -#include "debugger.h" #include "upd765.h" +#include "debugger.h" const device_type UPD765A = &device_creator; const device_type UPD765B = &device_creator; diff --git a/src/devices/machine/vrc4373.cpp b/src/devices/machine/vrc4373.cpp index 60c1124e4ef..c750d2fb580 100644 --- a/src/devices/machine/vrc4373.cpp +++ b/src/devices/machine/vrc4373.cpp @@ -144,8 +144,8 @@ void vrc4373_device::map_cpu_space() winStart = m_cpu_regs[NREG_PCIMW1]&0xff000000; winEnd = winStart | (~(0x80000000 | (((m_cpu_regs[NREG_PCIMW1]>>13)&0x7f)<<24))); winSize = winEnd - winStart + 1; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::master1_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::master1_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::master1_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::master1_w), this)); if (LOG_NILE) logerror("%s: map_cpu_space Master Window 1 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_pci1_laddr); } @@ -154,8 +154,8 @@ void vrc4373_device::map_cpu_space() winStart = m_cpu_regs[NREG_PCIMW2]&0xff000000; winEnd = winStart | (~(0x80000000 | (((m_cpu_regs[NREG_PCIMW2]>>13)&0x7f)<<24))); winSize = winEnd - winStart + 1; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::master2_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::master2_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::master2_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::master2_w), this)); if (LOG_NILE) logerror("%s: map_cpu_space Master Window 2 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_pci2_laddr); } @@ -164,8 +164,8 @@ void vrc4373_device::map_cpu_space() winStart = m_cpu_regs[NREG_PCIMIOW]&0xff000000; winEnd = winStart | (~(0x80000000 | (((m_cpu_regs[NREG_PCIMIOW]>>13)&0x7f)<<24))); winSize = winEnd - winStart + 1; - m_cpu_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::master_io_r), this)); - m_cpu_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::master_io_w), this)); + m_cpu_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::master_io_r), this)); + m_cpu_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::master_io_w), this)); if (LOG_NILE) logerror("%s: map_cpu_space IO Window start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_pci_io_laddr); } @@ -181,8 +181,8 @@ void vrc4373_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = m_cpu_regs[NREG_PCITW1]&0xffe00000; winEnd = winStart | (~(0xf0000000 | (((m_cpu_regs[NREG_PCITW1]>>13)&0x7f)<<21))); winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::target1_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::target1_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::target1_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::target1_w), this)); if (LOG_NILE) logerror("%s: map_extra Target Window 1 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_target1_laddr); } @@ -191,8 +191,8 @@ void vrc4373_device::map_extra(UINT64 memory_window_start, UINT64 memory_window_ winStart = m_cpu_regs[NREG_PCITW2]&0xffe00000; winEnd = winStart | (~(0xf0000000 | (((m_cpu_regs[NREG_PCITW2]>>13)&0x7f)<<21))); winSize = winEnd - winStart + 1; - memory_space->install_read_handler(winStart, winEnd, 0, 0, read32_delegate(FUNC(vrc4373_device::target2_r), this)); - memory_space->install_write_handler(winStart, winEnd, 0, 0, write32_delegate(FUNC(vrc4373_device::target2_w), this)); + memory_space->install_read_handler(winStart, winEnd, read32_delegate(FUNC(vrc4373_device::target2_r), this)); + memory_space->install_write_handler(winStart, winEnd, write32_delegate(FUNC(vrc4373_device::target2_w), this)); if (LOG_NILE) logerror("%s: map_extra Target Window 2 start=%08X end=%08X size=%08X laddr=%08X\n", tag(), winStart, winEnd, winSize, m_target2_laddr); } diff --git a/src/devices/machine/vt82c496.cpp b/src/devices/machine/vt82c496.cpp index 8f24e2338fd..eb2fff4e564 100644 --- a/src/devices/machine/vt82c496.cpp +++ b/src/devices/machine/vt82c496.cpp @@ -41,17 +41,17 @@ void vt82c496_device::device_reset() memset(m_reg,0,0x100); // set up default ROM banking - m_space->install_read_bank(0xc0000,0xc3fff,0,0,"bios_c0_r"); - m_space->install_read_bank(0xc4000,0xc7fff,0,0,"bios_c4_r"); - m_space->install_read_bank(0xc8000,0xcbfff,0,0,"bios_c8_r"); - m_space->install_read_bank(0xcc000,0xcffff,0,0,"bios_cc_r"); - m_space->install_read_bank(0xd0000,0xd3fff,0,0,"bios_d0_r"); - m_space->install_read_bank(0xd4000,0xd7fff,0,0,"bios_d4_r"); - m_space->install_read_bank(0xd8000,0xdbfff,0,0,"bios_d8_r"); - m_space->install_read_bank(0xdc000,0xdffff,0,0,"bios_dc_r"); - m_space->install_read_bank(0xe0000,0xeffff,0,0,"bios_e0_r"); - m_space->install_read_bank(0xf0000,0xfffff,0,0,"bios_f0_r"); - m_space->nop_write(0xc0000,0xfffff,0,0); + m_space->install_read_bank(0xc0000,0xc3fff,0,"bios_c0_r"); + m_space->install_read_bank(0xc4000,0xc7fff,0,"bios_c4_r"); + m_space->install_read_bank(0xc8000,0xcbfff,0,"bios_c8_r"); + m_space->install_read_bank(0xcc000,0xcffff,0,"bios_cc_r"); + m_space->install_read_bank(0xd0000,0xd3fff,0,"bios_d0_r"); + m_space->install_read_bank(0xd4000,0xd7fff,0,"bios_d4_r"); + m_space->install_read_bank(0xd8000,0xdbfff,0,"bios_d8_r"); + m_space->install_read_bank(0xdc000,0xdffff,0,"bios_dc_r"); + m_space->install_read_bank(0xe0000,0xeffff,0,"bios_e0_r"); + m_space->install_read_bank(0xf0000,0xfffff,0,"bios_f0_r"); + m_space->nop_write(0xc0000,0xfffff); machine().root_device().membank("bios_c0_r")->set_base(m_rom); machine().root_device().membank("bios_c4_r")->set_base(m_rom+0x4000); machine().root_device().membank("bios_c8_r")->set_base(m_rom+0x8000); @@ -101,11 +101,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_cc_r")->set_base(m_rom+0xc000); if(data & 0x40) { - m_space->install_write_bank(0xcc000,0xcffff,0,0,"bios_cc_w"); + m_space->install_write_bank(0xcc000,0xcffff,0,"bios_cc_w"); machine().root_device().membank("bios_cc_w")->set_base(m_ram->pointer()+0xcc000); } else - m_space->nop_write(0xcc000,0xcffff,0,0); + m_space->nop_write(0xcc000,0xcffff); if(data & 0x20) machine().root_device().membank("bios_c8_r")->set_base(m_ram->pointer()+0xc8000); @@ -113,11 +113,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_c8_r")->set_base(m_rom+0x8000); if(data & 0x10) { - m_space->install_write_bank(0xc8000,0xcbfff,0,0,"bios_c8_w"); + m_space->install_write_bank(0xc8000,0xcbfff,0,"bios_c8_w"); machine().root_device().membank("bios_c8_w")->set_base(m_ram->pointer()+0xc8000); } else - m_space->nop_write(0xc8000,0xcbfff,0,0); + m_space->nop_write(0xc8000,0xcbfff); if(data & 0x08) machine().root_device().membank("bios_c4_r")->set_base(m_ram->pointer()+0xc4000); @@ -125,11 +125,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_c4_r")->set_base(m_rom+0x4000); if(data & 0x04) { - m_space->install_write_bank(0xc4000,0xc7fff,0,0,"bios_c4_w"); + m_space->install_write_bank(0xc4000,0xc7fff,0,"bios_c4_w"); machine().root_device().membank("bios_c4_w")->set_base(m_ram->pointer()+0xc4000); } else - m_space->nop_write(0xc4000,0xc7fff,0,0); + m_space->nop_write(0xc4000,0xc7fff); if(data & 0x02) machine().root_device().membank("bios_c0_r")->set_base(m_ram->pointer()+0xc0000); @@ -137,11 +137,11 @@ void vt82c496_device::update_mem_c0(UINT8 data) machine().root_device().membank("bios_c0_r")->set_base(m_rom+0); if(data & 0x01) { - m_space->install_write_bank(0xc0000,0xc3fff,0,0,"bios_c0_w"); + m_space->install_write_bank(0xc0000,0xc3fff,0,"bios_c0_w"); machine().root_device().membank("bios_c0_w")->set_base(m_ram->pointer()+0xc0000); } else - m_space->nop_write(0xc0000,0xc3fff,0,0); + m_space->nop_write(0xc0000,0xc3fff); } void vt82c496_device::update_mem_d0(UINT8 data) @@ -152,11 +152,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_dc_r")->set_base(m_rom+0x1c000); if(data & 0x40) { - m_space->install_write_bank(0xdc000,0xdffff,0,0,"bios_dc_w"); + m_space->install_write_bank(0xdc000,0xdffff,0,"bios_dc_w"); machine().root_device().membank("bios_dc_w")->set_base(m_ram->pointer()+0xdc000); } else - m_space->nop_write(0xdc000,0xdffff,0,0); + m_space->nop_write(0xdc000,0xdffff); if(data & 0x20) machine().root_device().membank("bios_d8_r")->set_base(m_ram->pointer()+0xd8000); @@ -164,11 +164,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_d8_r")->set_base(m_rom+0x18000); if(data & 0x10) { - m_space->install_write_bank(0xd8000,0xdbfff,0,0,"bios_d8_w"); + m_space->install_write_bank(0xd8000,0xdbfff,0,"bios_d8_w"); machine().root_device().membank("bios_d8_w")->set_base(m_ram->pointer()+0xd8000); } else - m_space->nop_write(0xd8000,0xdbfff,0,0); + m_space->nop_write(0xd8000,0xdbfff); if(data & 0x08) machine().root_device().membank("bios_d4_r")->set_base(m_ram->pointer()+0xd4000); @@ -176,11 +176,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_d4_r")->set_base(m_rom+0x14000); if(data & 0x04) { - m_space->install_write_bank(0xd4000,0xd7fff,0,0,"bios_d4_w"); + m_space->install_write_bank(0xd4000,0xd7fff,0,"bios_d4_w"); machine().root_device().membank("bios_d4_w")->set_base(m_ram->pointer()+0xd4000); } else - m_space->nop_write(0xd4000,0xd7fff,0,0); + m_space->nop_write(0xd4000,0xd7fff); if(data & 0x02) machine().root_device().membank("bios_d0_r")->set_base(m_ram->pointer()+0xd0000); @@ -188,11 +188,11 @@ void vt82c496_device::update_mem_d0(UINT8 data) machine().root_device().membank("bios_d0_r")->set_base(m_rom+0x10000); if(data & 0x01) { - m_space->install_write_bank(0xd0000,0xd3fff,0,0,"bios_d0_w"); + m_space->install_write_bank(0xd0000,0xd3fff,0,"bios_d0_w"); machine().root_device().membank("bios_d0_w")->set_base(m_ram->pointer()+0xd0000); } else - m_space->nop_write(0xd0000,0xd3fff,0,0); + m_space->nop_write(0xd0000,0xd3fff); } void vt82c496_device::update_mem_e0(UINT8 data) @@ -204,11 +204,11 @@ void vt82c496_device::update_mem_e0(UINT8 data) if(data & 0x40) { - m_space->install_write_bank(0xe0000,0xeffff,0,0,"bios_e0_w"); + m_space->install_write_bank(0xe0000,0xeffff,0,"bios_e0_w"); machine().root_device().membank("bios_e0_w")->set_base(m_ram->pointer()+0xe0000); } else - m_space->nop_write(0xe0000,0xeffff,0,0); + m_space->nop_write(0xe0000,0xeffff); if(data & 0x20) machine().root_device().membank("bios_f0_r")->set_base(m_ram->pointer()+0xf0000); @@ -217,9 +217,9 @@ void vt82c496_device::update_mem_e0(UINT8 data) if(data & 0x10) { - m_space->install_write_bank(0xf0000,0xfffff,0,0,"bios_f0_w"); + m_space->install_write_bank(0xf0000,0xfffff,0,"bios_f0_w"); machine().root_device().membank("bios_f0_w")->set_base(m_ram->pointer()+0xf0000); } else - m_space->nop_write(0xf0000,0xfffff,0,0); + m_space->nop_write(0xf0000,0xfffff); } diff --git a/src/devices/machine/watchdog.h b/src/devices/machine/watchdog.h index 67cc915b092..ee97e9026db 100644 --- a/src/devices/machine/watchdog.h +++ b/src/devices/machine/watchdog.h @@ -11,17 +11,6 @@ // DEVICE CONFIGURATION MACROS //************************************************************************** -#ifdef LEGACY_WATCHDOG -#undef MCFG_WATCHDOG_VBLANK_INIT -#undef MCFG_WATCHDOG_TIME_INIT -#define watchdog_reset_r MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset_w MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset16_r MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset16_w MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset32_r MUST_USE_WATCHDOG_DEVICE_INSTEAD -#define watchdog_reset32_w MUST_USE_WATCHDOG_DEVICE_INSTEAD -#endif - #define MCFG_WATCHDOG_ADD(_tag) \ MCFG_DEVICE_ADD(_tag, WATCHDOG_TIMER, 0) #define MCFG_WATCHDOG_MODIFY(_tag) \ diff --git a/src/devices/machine/wd7600.cpp b/src/devices/machine/wd7600.cpp index 90ed0d9ef73..b1540fd7bff 100644 --- a/src/devices/machine/wd7600.cpp +++ b/src/devices/machine/wd7600.cpp @@ -170,7 +170,10 @@ void wd7600_device::device_start() // install BIOS ROM at cpu inital pc m_space->install_rom(0x000f0000, 0x000fffff, m_bios + 0x10000); - m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0x10000); + if(m_space->addrmask() == 0xffffffff) // 32-bit address space only + m_space->install_rom(0xffff0000, 0xffffffff, m_bios + 0x10000); + else + m_space->install_rom(0x00ff0000, 0x00ffffff, m_bios + 0x10000); // install i/o accesses m_space_io->install_readwrite_handler(0x0000, 0x000f, read8_delegate(FUNC(am9517a_device::read), &(*m_dma1)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma1)), 0xffffffff); @@ -180,7 +183,7 @@ void wd7600_device::device_start() m_space_io->install_readwrite_handler(0x0060, 0x0063, read8_delegate(FUNC(wd7600_device::portb_r), this), write8_delegate(FUNC(wd7600_device::portb_w), this), 0x0000ff00); m_space_io->install_readwrite_handler(0x0064, 0x0067, read8_delegate(FUNC(wd7600_device::keyb_status_r), this), write8_delegate(FUNC(wd7600_device::keyb_cmd_w), this), 0x000000ff); m_space_io->install_readwrite_handler(0x0070, 0x007f, read8_delegate(FUNC(mc146818_device::read), &(*m_rtc)), write8_delegate(FUNC(wd7600_device::rtc_w), this), 0x0000ffff); - m_space_io->install_readwrite_handler(0x0080, 0x009f, read8_delegate(FUNC(wd7600_device::dma_page_r), this), write8_delegate(FUNC(wd7600_device::dma_page_w), this), 0xffffffff); + m_space_io->install_readwrite_handler(0x0080, 0x008f, read8_delegate(FUNC(wd7600_device::dma_page_r), this), write8_delegate(FUNC(wd7600_device::dma_page_w), this), 0xffffffff); m_space_io->install_readwrite_handler(0x0090, 0x0093, read8_delegate(FUNC(wd7600_device::a20_reset_r), this), write8_delegate(FUNC(wd7600_device::a20_reset_w), this), 0x00ff0000); m_space_io->install_readwrite_handler(0x00a0, 0x00a3, read8_delegate(FUNC(pic8259_device::read), &(*m_pic2)), write8_delegate(FUNC(pic8259_device::write), &(*m_pic2)), 0x0000ffff); m_space_io->install_readwrite_handler(0x00c0, 0x00df, read8_delegate(FUNC(am9517a_device::read), &(*m_dma2)), write8_delegate(FUNC(am9517a_device::write), &(*m_dma2)), 0x00ff00ff); @@ -294,7 +297,7 @@ READ8_MEMBER( wd7600_device::keyb_data_r ) { UINT8 ret = m_keybc->data_r(space,0); // if(LOG) logerror("WD7600 '%s': keyboard data read %02x\n", tag(), ret); - return ret; + return ret; } WRITE8_MEMBER( wd7600_device::keyb_cmd_w ) diff --git a/src/devices/machine/wd_fdc.cpp b/src/devices/machine/wd_fdc.cpp index 84fcbf5ceb8..3db1b1113f6 100644 --- a/src/devices/machine/wd_fdc.cpp +++ b/src/devices/machine/wd_fdc.cpp @@ -243,7 +243,7 @@ void wd_fdc_t::command_end() void wd_fdc_t::seek_start(int state) { - if (TRACE_COMMAND) logerror("seek %d (track=%d)\n", data, track); + if (TRACE_COMMAND) logerror("seek %d %x (track=%d)\n", state, data, track); main_state = state; status &= ~(S_CRC|S_RNF|S_SPIN); if(head_control) { @@ -1273,12 +1273,6 @@ void wd_fdc_t::index_callback(floppy_image_device *floppy, int state) return; } - if(!intrq && (intrq_cond & I_IDX)) { - intrq = true; - if(!intrq_cb.isnull()) - intrq_cb(intrq); - } - switch(sub_state) { case IDLE: if(motor_control || head_control) { @@ -1300,6 +1294,12 @@ void wd_fdc_t::index_callback(floppy_image_device *floppy, int state) status &= ~S_HLD; // todo: should get this value from the drive } } + + if(!intrq && (intrq_cond & I_IDX)) { + intrq = true; + if(!intrq_cb.isnull()) + intrq_cb(intrq); + } break; case SPINUP: diff --git a/src/devices/sound/ay8910.cpp b/src/devices/sound/ay8910.cpp index cb1e1c98bcb..b1afec02d29 100644 --- a/src/devices/sound/ay8910.cpp +++ b/src/devices/sound/ay8910.cpp @@ -603,10 +603,8 @@ void ay8910_device::ay8910_write_reg(int r, int v) /* No action required */ break; case AY_ECOARSE: - #ifdef MAME_DEBUG if ( (v & 0x0f) > 0) - popmessage("ECoarse"); - #endif + osd_printf_verbose("ECoarse\n"); /* No action required */ break; case AY_ENABLE: @@ -628,10 +626,8 @@ void ay8910_device::ay8910_write_reg(int r, int v) m_last_enable = m_regs[AY_ENABLE]; break; case AY_ESHAPE: - #ifdef MAME_DEBUG if ( (v & 0x0f) > 0) - popmessage("EShape"); - #endif + osd_printf_verbose("EShape\n"); m_attack = (m_regs[AY_ESHAPE] & 0x04) ? m_env_step_mask : 0x00; if ((m_regs[AY_ESHAPE] & 0x08) == 0) { diff --git a/src/devices/sound/l7a1045_l6028_dsp_a.cpp b/src/devices/sound/l7a1045_l6028_dsp_a.cpp index 526cbda9d9e..ef2e4991b9c 100644 --- a/src/devices/sound/l7a1045_l6028_dsp_a.cpp +++ b/src/devices/sound/l7a1045_l6028_dsp_a.cpp @@ -295,7 +295,7 @@ WRITE16_MEMBER(l7a1045_sound_device::sound_data_w) READ16_MEMBER(l7a1045_sound_device::sound_data_r) { //printf("%04x (%04x %04x)\n",offset,m_audioregister,m_audiochannel); - //debugger_break(machine()); + //machine().debug_break(); l7a1045_voice *vptr = &m_voice[m_audiochannel]; switch(m_audioregister) diff --git a/src/devices/sound/scsp.cpp b/src/devices/sound/scsp.cpp index 2d6054209c8..4f5311def8e 100644 --- a/src/devices/sound/scsp.cpp +++ b/src/devices/sound/scsp.cpp @@ -1390,13 +1390,10 @@ int IRQCB(void *param) void scsp_device::set_ram_base(void *base) { - if (this) - { - m_SCSPRAM = (unsigned char *)base; - m_DSP.SCSPRAM = (UINT16 *)base; - m_SCSPRAM_LENGTH = 0x80000; - m_DSP.SCSPRAM_LENGTH = 0x80000/2; - } + m_SCSPRAM = (unsigned char *)base; + m_DSP.SCSPRAM = (UINT16 *)base; + m_SCSPRAM_LENGTH = 0x80000; + m_DSP.SCSPRAM_LENGTH = 0x80000/2; } diff --git a/src/devices/sound/upd7759.cpp b/src/devices/sound/upd7759.cpp index cb75e30b231..78cdf5ce24a 100644 --- a/src/devices/sound/upd7759.cpp +++ b/src/devices/sound/upd7759.cpp @@ -716,7 +716,7 @@ void upd7759_device::device_timer(emu_timer &timer, device_timer_id id, int para /* set a timer to go off when that is done */ if (m_state != STATE_IDLE) m_timer->adjust(m_clock_period * m_clocks_left); - break; + break; default: assert_always(FALSE, "Unknown id in upd7759_device::device_timer"); diff --git a/src/devices/video/ef9345.cpp b/src/devices/video/ef9345.cpp index 057550d794b..a78835b12c0 100644 --- a/src/devices/video/ef9345.cpp +++ b/src/devices/video/ef9345.cpp @@ -428,7 +428,7 @@ void ef9345_device::bichrome40(UINT8 type, UINT16 address, UINT8 dial, UINT16 ib case 0x70: //11 = flash underlined if (m_blink) underline = 1; - break; + break; } } diff --git a/src/devices/video/pc_vga.cpp b/src/devices/video/pc_vga.cpp index 80cbae9b225..c40d801eb11 100644 --- a/src/devices/video/pc_vga.cpp +++ b/src/devices/video/pc_vga.cpp @@ -2664,7 +2664,7 @@ UINT8 s3_vga_device::s3_crtc_reg_read(UINT8 index) break; default: res = vga.crtc.data[index]; - //debugger_break(machine); + //machine().debug_break(); //printf("%02x\n",index); break; } diff --git a/src/devices/video/voodoo_pci.cpp b/src/devices/video/voodoo_pci.cpp index 5ca7b700569..9aa3b39eba9 100644 --- a/src/devices/video/voodoo_pci.cpp +++ b/src/devices/video/voodoo_pci.cpp @@ -136,7 +136,7 @@ void voodoo_pci_device::map_extra(UINT64 memory_window_start, UINT64 memory_wind if (m_type>=TYPE_VOODOO_BANSHEE) { UINT64 start = io_offset + 0x3b0; UINT64 end = io_offset + 0x3df; - io_space->install_readwrite_handler(start, end, 0, 0, read32_delegate(FUNC(voodoo_pci_device::vga_r), this), write32_delegate(FUNC(voodoo_pci_device::vga_w), this)); + io_space->install_readwrite_handler(start, end, read32_delegate(FUNC(voodoo_pci_device::vga_r), this), write32_delegate(FUNC(voodoo_pci_device::vga_w), this)); logerror("%s: map %s at %0*x-%0*x\n", this->tag(), "vga_r/w", 4, UINT32(start), 4, UINT32(end)); } } diff --git a/src/devices/video/zeus2.cpp b/src/devices/video/zeus2.cpp new file mode 100644 index 00000000000..02e9b9d9e52 --- /dev/null +++ b/src/devices/video/zeus2.cpp @@ -0,0 +1,1311 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles +/************************************************************************* + + Midway Zeus2 Video + +**************************************************************************/ +#include "zeus2.h" + +#define LOG_REGS 0 + +/************************************* +* Constructor +*************************************/ +zeus2_renderer::zeus2_renderer(zeus2_device *state) + : poly_manager(state->machine()) + , m_state(state) +{ +} + +const device_type ZEUS2 = &device_creator; + +zeus2_device::zeus2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, ZEUS2, "Midway Zeus2", tag, owner, clock, "zeus2", __FILE__), + m_vblank(*this), m_irq(*this) +{ +} + +/************************************* +* Display interrupt generation +*************************************/ + +TIMER_CALLBACK_MEMBER(zeus2_device::display_irq_off) +{ + m_vblank(CLEAR_LINE); + + //attotime vblank_period = m_screen->time_until_pos(m_zeusbase[0x37] & 0xffff); + + ///* if zero, adjust to next frame, otherwise we may get stuck in an infinite loop */ + //if (vblank_period == attotime::zero) + // vblank_period = m_screen->frame_period(); + //vblank_timer->adjust(vblank_period); + vblank_timer->adjust(m_screen->time_until_vblank_start()); + //machine().scheduler().timer_set(attotime::from_hz(30000000), timer_expired_delegate(FUNC(zeus2_device::display_irq), this)); +} + +TIMER_CALLBACK_MEMBER(zeus2_device::display_irq) +{ + m_vblank(ASSERT_LINE); + /* set a timer for the next off state */ + //machine().scheduler().timer_set(m_screen->time_until_pos(0), timer_expired_delegate(FUNC(zeus2_device::display_irq_off), this), 0, this); + machine().scheduler().timer_set(m_screen->time_until_vblank_end(), timer_expired_delegate(FUNC(zeus2_device::display_irq_off), this), 0, this); + //machine().scheduler().timer_set(attotime::from_hz(30000000), timer_expired_delegate(FUNC(zeus2_device::display_irq_off), this)); +} + +TIMER_CALLBACK_MEMBER(zeus2_device::int_timer_callback) +{ + //m_maincpu->set_input_line(2, ASSERT_LINE); + m_irq(ASSERT_LINE); +} + +/************************************* + * Video startup + *************************************/ + + +void zeus2_device::device_start() +{ + + /* allocate memory for "wave" RAM */ + waveram[0] = auto_alloc_array(machine(), UINT32, WAVERAM0_WIDTH * WAVERAM0_HEIGHT * 8/4); + waveram[1] = auto_alloc_array(machine(), UINT32, WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12/4); + + /* initialize polygon engine */ + poly = auto_alloc(machine(), zeus2_renderer(this)); + + //m_screen = machine().first_screen(); + m_screen = downcast(machine().device("screen")); + m_vblank.resolve_safe(); + m_irq.resolve_safe(); + + /* we need to cleanup on exit */ + //machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(zeus2_device::exit_handler2), this)); + + int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(zeus2_device::int_timer_callback), this)); + vblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(zeus2_device::display_irq), this)); + + /* save states */ + save_pointer(NAME(waveram[0]), WAVERAM0_WIDTH * WAVERAM0_HEIGHT * 8 / sizeof(waveram[0][0])); + save_pointer(NAME(waveram[1]), WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12 / sizeof(waveram[1][0])); + save_pointer(NAME(m_zeusbase), sizeof(m_zeusbase[0])*0x80); + save_item(NAME(zeus_fifo)); + save_item(NAME(zeus_fifo_words)); + save_item(NAME(zeus_cliprect.min_x)); + save_item(NAME(zeus_cliprect.max_x)); + save_item(NAME(zeus_cliprect.min_y)); + save_item(NAME(zeus_cliprect.max_y)); + save_item(NAME(zeus_matrix)); + save_item(NAME(zeus_point)); + save_item(NAME(zeus_texbase)); + save_item(NAME(m_fill_color)); + save_item(NAME(m_fill_depth)); +} + +void zeus2_device::device_reset() +{ + memset(m_zeusbase, 0, sizeof(m_zeusbase)); + zbase = 2.0f; + m_yScale = 0; + yoffs = 0; + texel_width = 256; + zeus_renderbase = waveram[1]; + zeus_fifo_words = 0; + m_fill_color = 0; + m_fill_depth = 0; +} + +void zeus2_device::device_stop() +{ +#if DUMP_WAVE_RAM + FILE *f = fopen("waveram.dmp", "w"); + int i; + + for (i = 0; i < WAVERAM0_WIDTH * WAVERAM0_HEIGHT; i++) + { + if (i % 4 == 0) fprintf(f, "%03X%03X: ", i / WAVERAM0_WIDTH, i % WAVERAM0_WIDTH); + fprintf(f, " %08X %08X ", + WAVERAM_READ32(waveram[0], i*2+0), + WAVERAM_READ32(waveram[0], i*2+1)); + if (i % 4 == 3) fprintf(f, "\n"); + } + fclose(f); +#endif + +#if TRACK_REG_USAGE +{ + reg_info *info; + int regnum; + + for (regnum = 0; regnum < 0x80; regnum++) + { + printf("Register %02X\n", regnum); + if (regread_count[regnum] == 0) + printf("\tNever read\n"); + else + printf("\tRead %d times\n", regread_count[regnum]); + + if (regwrite_count[regnum] == 0) + printf("\tNever written\n"); + else + { + printf("\tWritten %d times\n", regwrite_count[regnum]); + for (info = regdata[regnum]; info != nullptr; info = info->next) + printf("\t%08X\n", info->value); + } + } + + for (regnum = 0; regnum < 0x100; regnum++) + if (subregwrite_count[regnum] != 0) + { + printf("Sub-Register %02X (%d writes)\n", regnum, subregwrite_count[regnum]); + for (info = subregdata[regnum]; info != nullptr; info = info->next) + printf("\t%08X\n", info->value); + } +} +#endif + +} + + + +/************************************* + * + * Video update + * + *************************************/ + +UINT32 zeus2_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + int x, y; + + poly->wait(); + +if (machine().input().code_pressed(KEYCODE_UP)) { zbase += 1.0f; popmessage("Zbase = %f", (double) zbase); } +if (machine().input().code_pressed(KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Zbase = %f", (double) zbase); } + + /* normal update case */ + if (!machine().input().code_pressed(KEYCODE_W)) + { + const void *base = waveram1_ptr_from_expanded_addr(m_zeusbase[0x38] >> m_yScale); + int xoffs = screen.visible_area().min_x; + for (y = cliprect.min_y; y <= cliprect.max_y; y++) + { + UINT32 *dest = &bitmap.pix32(y); + UINT32 bufY = y >> m_yScale; + UINT32 bufOffsX = (m_yScale && (y & 1)) ? 0x200 : 0; + for (x = cliprect.min_x; x <= cliprect.max_x; x++) { + UINT32 bufX = x - xoffs + bufOffsX; + dest[x] = WAVERAM_READPIX(base, bufY, bufX); + //dest[x] = WAVERAM_READPIX(base, y, x - xoffs); + } + } + } + + /* waveram drawing case */ + else + { + const UINT64 *base; + + if (machine().input().code_pressed(KEYCODE_DOWN)) yoffs += machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x40 : 1; + if (machine().input().code_pressed(KEYCODE_UP)) yoffs -= machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x40 : 1; + if (machine().input().code_pressed(KEYCODE_LEFT) && texel_width > 4) { texel_width >>= 1; while (machine().input().code_pressed(KEYCODE_LEFT)) ; } + if (machine().input().code_pressed(KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (machine().input().code_pressed(KEYCODE_RIGHT)) ; } + + if (yoffs < 0) yoffs = 0; + if (0) + base = (const UINT64 *)waveram0_ptr_from_expanded_addr(yoffs << 16); + else + base = (const UINT64 *)waveram1_ptr_from_expanded_addr(yoffs << 16); + + int xoffs = screen.visible_area().min_x; + for (y = cliprect.min_y; y <= cliprect.max_y; y++) + { + UINT32 *dest = &bitmap.pix32(y); + for (x = cliprect.min_x; x <= cliprect.max_x; x++) + { + if (0) { + UINT8 tex = get_texel_8bit(base, y, x, texel_width); + dest[x] = (tex << 16) | (tex << 8) | tex; + } + else { + dest[x] = WAVERAM_READPIX(base, y, x - xoffs); + } + } + } + popmessage("offs = %06X", yoffs); + } + + return 0; +} + + + +/************************************* + * + * Core read handler + * + *************************************/ + +READ32_MEMBER( zeus2_device::zeus2_r ) +{ + int logit = (offset != 0x00 && offset != 0x01 && + offset != 0x48 && offset != 0x49 && + offset != 0x54 && offset != 0x58 && offset != 0x59 && offset != 0x5a); + logit &= LOG_REGS; + UINT32 result = m_zeusbase[offset]; +#if TRACK_REG_USAGE + regread_count[offset]++; +#endif + + switch (offset) + { + case 0x00: + result = 0x20; + break; + + case 0x01: + /* bit $000C0070 are tested in a loop until 0 */ + /* bits $00080000 is tested in a loop until 0 */ + /* bit $00000004 is tested for toggling; probably VBLANK */ + result = 0x00; + if (m_screen->vblank()) + result |= 0x04; + break; + + case 0x07: + /* this is needed to pass the self-test in thegrid */ + result = 0x10451998; + break; + + case 0x54: + /* both upper 16 bits and lower 16 bits seem to be used as vertical counters */ + result = (m_screen->vpos() << 16) | m_screen->vpos(); + break; + } + + if (logit) + logerror("%08X:zeus2_r(%02X) = %08X\n", machine().device("maincpu")->safe_pc(), offset, result); + + return result; +} + + + +/************************************* + * + * Core write handler + * + *************************************/ + +WRITE32_MEMBER( zeus2_device::zeus2_w ) +{ + int logit = (offset != 0x08 && + (offset != 0x20 || data != 0) && + offset != 0x40 && offset != 0x41 && offset != 0x48 && offset != 0x49 && offset != 0x4e && + offset != 0x50 && offset != 0x51 && offset != 0x57 && offset != 0x58 && offset != 0x59 && offset != 0x5a && offset != 0x5e); + logit &= LOG_REGS; + if (logit) + logerror("%08X:zeus2_w", machine().device("maincpu")->safe_pc()); + zeus2_register32_w(offset, data, logit); +} + + + +/************************************* + * + * Handle register writes + * + *************************************/ + +void zeus2_device::zeus2_register32_w(offs_t offset, UINT32 data, int logit) +{ + UINT32 oldval = m_zeusbase[offset]; + +#if TRACK_REG_USAGE +regwrite_count[offset]++; +if (regdata_count[offset] < 256) +{ + reg_info **tailptr; + + for (tailptr = ®data[offset]; *tailptr != nullptr; tailptr = &(*tailptr)->next) + if ((*tailptr)->value == data) + break; + if (*tailptr == nullptr) + { + *tailptr = alloc_or_die(reg_info); + (*tailptr)->next = nullptr; + (*tailptr)->value = data; + regdata_count[offset]++; + } +} +#endif + + /* writes to register $CC need to force a partial update */ +// if ((offset & ~1) == 0xcc) +// m_screen->update_partial(m_screen->vpos()); + + /* always write to low word? */ + m_zeusbase[offset] = data; + + /* log appropriately */ + if (logit) + logerror("(%02X) = %08X\n", offset, data); + + /* handle the update */ + zeus2_register_update(offset, oldval, logit); +} + + + +/************************************* + * + * Update state after a register write + * + *************************************/ + +void zeus2_device::zeus2_register_update(offs_t offset, UINT32 oldval, int logit) +{ + /* handle the writes; only trigger on low accesses */ + switch (offset) + { + case 0x08: + zeus_fifo[zeus_fifo_words++] = m_zeusbase[0x08]; + if (zeus2_fifo_process(zeus_fifo, zeus_fifo_words)) + zeus_fifo_words = 0; + + /* set the interrupt signal to indicate we can handle more */ + int_timer->adjust(attotime::from_nsec(500)); + break; + + case 0x20: + /* toggles between two values based on the page: + + Page # m_zeusbase[0x20] m_zeusbase[0x38] + ------ -------------- -------------- + 0 $04000190 $00000000 + 1 $04000000 $01900000 + */ + zeus2_pointer_write(m_zeusbase[0x20] >> 24, m_zeusbase[0x20]); + break; + + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + m_screen->update_partial(m_screen->vpos()); + { + // Just a guess. Atlantis startup has two scanlines per physical ram row + if ((m_zeusbase[0x30] & 0xfff) <= 0x100) + m_yScale = 1; + else + m_yScale = 0; + int vtotal = (m_zeusbase[0x37] & 0xffff) << m_yScale; + int htotal = (m_zeusbase[0x34] >> 16); + + rectangle visarea((m_zeusbase[0x33] >> 16), htotal - 1, 0, (m_zeusbase[0x35] & 0xffff)<< m_yScale); + if (htotal > 0 && vtotal > 0 && visarea.min_x < visarea.max_x && visarea.max_y < vtotal) + { + m_screen->configure(htotal, vtotal, visarea, HZ_TO_ATTOSECONDS((double)ZEUS2_VIDEO_CLOCK / 4.0 / (htotal * vtotal))); + zeus_cliprect = visarea; + zeus_cliprect.max_x -= zeus_cliprect.min_x; + zeus_cliprect.min_x = 0; + // Startup vblank timer + vblank_timer->adjust(attotime::from_usec(100)); + } + } + break; + + case 0x38: + { + UINT32 temp = m_zeusbase[0x38]; + m_zeusbase[0x38] = oldval; + m_screen->update_partial(m_screen->vpos()); + log_fifo = machine().input().code_pressed(KEYCODE_L); + //log_fifo = 1; + m_zeusbase[0x38] = temp; + } + break; + + case 0x40: + /* in direct mode it latches values */ + if ((m_zeusbase[0x4e] & 0x20) && m_zeusbase[0x40] == 0x00820000) + { + const void *src = waveram0_ptr_from_expanded_addr(m_zeusbase[0x41]); + m_zeusbase[0x48] = WAVERAM_READ32(src, 0); + m_zeusbase[0x49] = WAVERAM_READ32(src, 1); + + if (m_zeusbase[0x4e] & 0x40) + { + m_zeusbase[0x41]++; + m_zeusbase[0x41] += (m_zeusbase[0x41] & 0x400) << 6; + m_zeusbase[0x41] &= ~0xfc00; + } + } + break; + case 0x41: + /* this is the address, except in read mode, where it latches values */ + if (m_zeusbase[0x4e] & 0x10) + { + const void *src = waveram0_ptr_from_expanded_addr(oldval); + m_zeusbase[0x41] = oldval; + m_zeusbase[0x48] = WAVERAM_READ32(src, 0); + m_zeusbase[0x49] = WAVERAM_READ32(src, 1); + + if (m_zeusbase[0x4e] & 0x40) + { + m_zeusbase[0x41]++; + m_zeusbase[0x41] += (m_zeusbase[0x41] & 0x400) << 6; + m_zeusbase[0x41] &= ~0xfc00; + } + } else { + // mwskinsa (atlantis) writes 0xffffffff and expects 0x1fff03ff to be read back + m_zeusbase[0x41] &= 0x1fff03ff; + } + break; + + case 0x48: + case 0x49: + /* if we're in write mode, process it */ + if (m_zeusbase[0x40] == 0x00890000) + { + /* + m_zeusbase[0x4e]: + bit 0-1: which register triggers write through + bit 3: enable write through via these registers + bit 4: seems to be set during reads, when 0x41 is used for latching + bit 6: enable autoincrement on write through + */ + if ((m_zeusbase[0x4e] & 0x08) && (offset & 3) == (m_zeusbase[0x4e] & 3)) + { + void *dest = waveram0_ptr_from_expanded_addr(m_zeusbase[0x41]); + WAVERAM_WRITE32(dest, 0, m_zeusbase[0x48]); + WAVERAM_WRITE32(dest, 1, m_zeusbase[0x49]); + + if (m_zeusbase[0x4e] & 0x40) + { + m_zeusbase[0x41]++; + m_zeusbase[0x41] += (m_zeusbase[0x41] & 0x400) << 6; + m_zeusbase[0x41] &= ~0xfc00; + } + } + } + + /* make sure we log anything else */ + else if (logit) + logerror("\t[40]=%08X [4E]=%08X\n", m_zeusbase[0x40], m_zeusbase[0x4e]); + break; + + case 0x50: + if (m_zeusbase[0x50] == 0x00510000) { + // SGRAM Special Mode Register Write + if (m_zeusbase[0x51] & 0x00400000) { + // SGRAM Mask Register + if ((m_zeusbase[0x58] & m_zeusbase[0x59] & m_zeusbase[0x5a]) != 0xffffffff) + logerror("zeus2_register_update: Warning! Mask Register not equal to 0xffffffff\n"); + } + if (m_zeusbase[0x51] & 0x00200000) { + // SGRAM Color Register + m_fill_color = m_zeusbase[0x58]; + m_fill_depth = m_zeusbase[0x5a] & 0xffff; + if (m_zeusbase[0x58] != m_zeusbase[0x59]) + logerror("zeus2_register_update: Warning! Different fill colors are set.\n"); + } + } + else if (1 && (m_zeusbase[0x50] & 0x00080000) && (m_zeusbase[0x50] & 0xffff)) { + // Fast fill + // Unknown what the exact bit fields are, this is a just a guess + // Atlantis: 0x00983FFF => clear entire frame buffer, 0x00981FFF => clear one frame + // crusnexo: 0x007831FF => clear one frame + // thegrid: 0x008831FF => clear one frame + //UINT32 lastRow = (((m_zeusbase[0x50] >> 8) & 0xff) << 3) | 0x7; + UINT32 lastRow = (((m_zeusbase[0x50] >> 8) & 0xff) << 3) | 0x3; + UINT32 lastCol = (((m_zeusbase[0x50] >> 0) & 0xff) << 2) | 0x3; + // Not sure how to select + //void *base = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]); + void *base = (m_zeusbase[0x50] & 0x800000) ? waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]) : zeus_renderbase; + for (int y = 0; y <= lastRow; y++) + for (int x = 0; x <= lastCol; x++) { + WAVERAM_WRITEPIX(base, y, x, m_fill_color); + WAVERAM_WRITEDEPTH(base, y, x, m_fill_depth); + } + //waveram_plot_depth(y, x, m_fill_color, m_fill_depth); + } + else if ((m_zeusbase[0x5e] >> 16) != 0xF208) { + /* If 0x5e==0xf20a0000 (atlantis) or 0xf20d0000 (the grid) then process the read/write now */ + /* + m_zeusbase[0x5e]: + bit 0-1: which register triggers write through + bit 3: enable write through via these registers + bit 4: seems to be set during reads, when 0x51 is used for latching + bit 5: unknown, currently used to specify ordering, but this is suspect + bit 6: enable autoincrement on write through + */ + if (m_zeusbase[0x50] == 0x00890000) + { + void *dest = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]); + WAVERAM_WRITE32(dest, 0, m_zeusbase[0x58]); + if (m_zeusbase[0x5e] & 0x20) + WAVERAM_WRITE32(dest, 1, m_zeusbase[0x5a]); + else + { + WAVERAM_WRITE32(dest, 1, m_zeusbase[0x59]); + WAVERAM_WRITE32(dest, 2, m_zeusbase[0x5a]); + } + + if (m_zeusbase[0x5e] & 0x40) + { + m_zeusbase[0x51]++; + m_zeusbase[0x51] += (m_zeusbase[0x51] & 0x200) << 7; + m_zeusbase[0x51] &= ~0xfe00; + } + } + else if (m_zeusbase[0x50] == 0x00720000) { + /* Do the read */ + const void *src = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]); + m_zeusbase[0x58] = WAVERAM_READ32(src, 0); + m_zeusbase[0x59] = WAVERAM_READ32(src, 1); + m_zeusbase[0x5a] = WAVERAM_READ32(src, 2); + + if (m_zeusbase[0x5e] & 0x40) + { + m_zeusbase[0x51]++; + m_zeusbase[0x51] += (m_zeusbase[0x51] & 0x200) << 7; + m_zeusbase[0x51] &= ~0xfe00; + } + } + } + break; + case 0x51: + + /* in this mode, crusnexo expects the reads to immediately latch */ + //if ((m_zeusbase[0x50] == 0x00a20000) || (m_zeusbase[0x50] == 0x00720000)) + if (m_zeusbase[0x50] == 0x00a20000) + oldval = m_zeusbase[0x51]; + + /* this is the address, except in read mode, where it latches values */ + if ((m_zeusbase[0x5e] & 0x10) || (m_zeusbase[0x50] == 0x00a20000)) + { + const void *src = waveram1_ptr_from_expanded_addr(oldval); + m_zeusbase[0x51] = oldval; + m_zeusbase[0x58] = WAVERAM_READ32(src, 0); + m_zeusbase[0x59] = WAVERAM_READ32(src, 1); + m_zeusbase[0x5a] = WAVERAM_READ32(src, 2); + + if (m_zeusbase[0x5e] & 0x40) + { + m_zeusbase[0x51]++; + m_zeusbase[0x51] += (m_zeusbase[0x51] & 0x200) << 7; + m_zeusbase[0x51] &= ~0xfe00; + } + } + break; + + case 0x57: + /* thegrid uses this to write either left or right halves of pixels */ + if (m_zeusbase[0x50] == 0x00e90000) + { + void *dest = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]); + if (m_zeusbase[0x57] & 1) + WAVERAM_WRITE32(dest, 0, m_zeusbase[0x58]); + if (m_zeusbase[0x57] & 4) + WAVERAM_WRITE32(dest, 1, m_zeusbase[0x59]); + } + + /* make sure we log anything else */ + else if (logit) + logerror("\t[50]=%08X [5E]=%08X\n", m_zeusbase[0x50], m_zeusbase[0x5e]); + break; + + case 0x58: + case 0x59: + case 0x5a: + /* if we're in write mode, process it */ + if (m_zeusbase[0x50] == 0x00890000) + { + /* + m_zeusbase[0x5e]: + bit 0-1: which register triggers write through + bit 3: enable write through via these registers + bit 4: seems to be set during reads, when 0x51 is used for latching + bit 5: unknown, currently used to specify ordering, but this is suspect + bit 6: enable autoincrement on write through + */ + if ((m_zeusbase[0x5e] & 0x08) && (offset & 3) == (m_zeusbase[0x5e] & 3)) + { + void *dest = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]); + WAVERAM_WRITE32(dest, 0, m_zeusbase[0x58]); + if (m_zeusbase[0x5e] & 0x20) + WAVERAM_WRITE32(dest, 1, m_zeusbase[0x5a]); + else + { + WAVERAM_WRITE32(dest, 1, m_zeusbase[0x59]); + WAVERAM_WRITE32(dest, 2, m_zeusbase[0x5a]); + } + + if (m_zeusbase[0x5e] & 0x40) + { + m_zeusbase[0x51]++; + m_zeusbase[0x51] += (m_zeusbase[0x51] & 0x200) << 7; + m_zeusbase[0x51] &= ~0xfe00; + } + } + } + + /* make sure we log anything else */ + else if (logit) + logerror("\t[50]=%08X [5E]=%08X\n", m_zeusbase[0x50], m_zeusbase[0x5e]); + break; + } +} + + + +/************************************* + * + * Process the FIFO + * + *************************************/ + +void zeus2_device::zeus2_pointer_write(UINT8 which, UINT32 value) +{ +#if TRACK_REG_USAGE +subregwrite_count[which]++; +if (subregdata_count[which] < 256) +{ + reg_info **tailptr; + + for (tailptr = &subregdata[which]; *tailptr != nullptr; tailptr = &(*tailptr)->next) + if ((*tailptr)->value == value) + break; + if (*tailptr == nullptr) + { + *tailptr = alloc_or_die(reg_info); + (*tailptr)->next = nullptr; + (*tailptr)->value = value; + subregdata_count[which]++; + } +} +#endif + + switch (which) + { + case 0x04: + zeus_renderbase = waveram1_ptr_from_expanded_addr(value << 16); + break; + + case 0x05: + zeus_texbase = value % (WAVERAM0_HEIGHT * WAVERAM0_WIDTH); + break; + + case 0x40: + zeus_unknown_40 = value & 0xffffff; + zeus_quad_size = (zeus_unknown_40 == 0) ? 10 : 14; + break; + +#if 0 + case 0x0c: + case 0x0d: + // These seem to have something to do with blending. + // There are fairly unique 0x0C,0x0D pairs for various things: + // Car reflection on initial screen: 0x40, 0x00 + // Additively-blended "flares": 0xFA, 0xFF + // Car windshields (and drivers, apparently): 0x82, 0x7D + // Other minor things: 0xA4, 0x100 + break; +#endif + } +} + +/************************************* + * Process the FIFO + *************************************/ + +int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords) +{ + int dataoffs = 0; + + /* handle logging */ + switch (data[0] >> 24) + { + // 0x00: write 32-bit value to low registers + case 0x00: + // Ignore the all zeros commmand + if (((data[0] >> 16) & 0x7f) == 0x0) + return TRUE; + // Drop through to 0x05 command + /* 0x05: write 32-bit value to low registers */ + case 0x05: + if (numwords < 2) + return FALSE; + if (log_fifo) + log_fifo_command(data, numwords, " -- reg32"); + if (((data[0] >> 16) & 0x7f) != 0x08) + zeus2_register32_w((data[0] >> 16) & 0x7f, data[1], log_fifo); + break; + + /* 0x08: set matrix and point (thegrid) */ + case 0x08: + if (numwords < 14) + return FALSE; + dataoffs = 1; + + /* 0x07: set matrix and point (crusnexo) */ + case 0x07: + if (numwords < 13) + return FALSE; + + /* extract the matrix from the raw data */ + zeus_matrix[0][0] = tms3203x_device::fp_to_float(data[dataoffs + 1]); + zeus_matrix[0][1] = tms3203x_device::fp_to_float(data[dataoffs + 2]); + zeus_matrix[0][2] = tms3203x_device::fp_to_float(data[dataoffs + 3]); + zeus_matrix[1][0] = tms3203x_device::fp_to_float(data[dataoffs + 4]); + zeus_matrix[1][1] = tms3203x_device::fp_to_float(data[dataoffs + 5]); + zeus_matrix[1][2] = tms3203x_device::fp_to_float(data[dataoffs + 6]); + zeus_matrix[2][0] = tms3203x_device::fp_to_float(data[dataoffs + 7]); + zeus_matrix[2][1] = tms3203x_device::fp_to_float(data[dataoffs + 8]); + zeus_matrix[2][2] = tms3203x_device::fp_to_float(data[dataoffs + 9]); + + /* extract the translation point from the raw data */ + zeus_point[0] = tms3203x_device::fp_to_float(data[dataoffs + 10]); + zeus_point[1] = tms3203x_device::fp_to_float(data[dataoffs + 11]); + zeus_point[2] = tms3203x_device::fp_to_float(data[dataoffs + 12]); + + if (log_fifo) + { + log_fifo_command(data, numwords, "\n"); + logerror("\t\tmatrix ( %8.2f %8.2f %8.2f ) ( %8.2f %8.2f %8.2f ) ( %8.2f %8.2f %8.2f )\n\t\tvector %8.2f %8.2f %8.5f\n", + (double) zeus_matrix[0][0], (double) zeus_matrix[0][1], (double) zeus_matrix[0][2], + (double) zeus_matrix[1][0], (double) zeus_matrix[1][1], (double) zeus_matrix[1][2], + (double) zeus_matrix[2][0], (double) zeus_matrix[2][1], (double) zeus_matrix[2][2], + (double) zeus_point[0], + (double) zeus_point[1], + (double) zeus_point[2]); + } + break; + + // 0x14: ?? atlantis + /* 0x15: set point only (thegrid) */ + /* 0x16: set point only (crusnexo) */ + case 0x14: + case 0x15: + case 0x16: + if (numwords < 4) + return FALSE; + + /* extract the translation point from the raw data */ + zeus_point[0] = tms3203x_device::fp_to_float(data[1]); + zeus_point[1] = tms3203x_device::fp_to_float(data[2]); + zeus_point[2] = tms3203x_device::fp_to_float(data[3]); + + if (log_fifo) + { + log_fifo_command(data, numwords, "\n"); + logerror("\t\tvector %8.2f %8.2f %8.5f\n", + (double) zeus_point[0], + (double) zeus_point[1], + (double) zeus_point[2]); + } + break; + + /* 0x1c: */ + case 0x1c: + if (numwords < 4) + return FALSE; + if (log_fifo) + { + log_fifo_command(data, numwords, " -- unknown control + hack clear screen\n"); + logerror("\t\tvector %8.2f %8.2f %8.5f\n", + (double) tms3203x_device::fp_to_float(data[1]), + (double) tms3203x_device::fp_to_float(data[2]), + (double) tms3203x_device::fp_to_float(data[3])); + + /* extract the translation point from the raw data */ + zeus_point2[0] = tms3203x_device::fp_to_float(data[1]); + zeus_point2[1] = tms3203x_device::fp_to_float(data[2]); + zeus_point2[2] = tms3203x_device::fp_to_float(data[3]); + } + { + /* not right -- just a hack */ + if (0) { + int x, y; + for (y = zeus_cliprect.min_y; y <= zeus_cliprect.max_y; y++) + for (x = zeus_cliprect.min_x; x <= zeus_cliprect.max_x; x++) + waveram_plot_depth(y, x, 0, 0x7fff); + } + } + break; + + /* 0x23: render model in waveram (thegrid) */ + /* 0x24: render model in waveram (crusnexo) */ + // 0x17: ??? (atlantis) + case 0x17: + case 0x23: + case 0x24: + if (numwords < 2) + return FALSE; + if (log_fifo) + log_fifo_command(data, numwords, ""); + //zeus2_draw_model(data[1], data[0] & 0xffff, log_fifo); + zeus2_draw_model(data[1], data[0] & 0x3fff, log_fifo); + break; + + // 0x2d; ??? (atlantis) + case 0x2d: + if (numwords < 2) + return FALSE; + if (log_fifo) + log_fifo_command(data, numwords, "\n"); + //zeus2_draw_model(data[1], data[0] & 0xff, log_fifo); + break; + + /* 0x31: sync pipeline? (thegrid) */ + /* 0x32: sync pipeline? (crusnexo) */ + // 0x25 ?? (atlantis) + case 0x25: + case 0x31: + case 0x32: + if (log_fifo) + log_fifo_command(data, numwords, "\n"); + zeus_quad_size = 10; + break; + + /* 0x38: direct render quad (crusnexo) */ + // 0x38: ?? (atlantis) + case 0x38: + if (numwords < 12) + return FALSE; + if (log_fifo) + log_fifo_command(data, numwords, "\n"); + break; + + /* 0x40: ???? */ + case 0x40: + if (log_fifo) + log_fifo_command(data, numwords, "\n"); + break; + + default: + if (data[0] != 0x2c0) + { + printf("Unknown command %08X\n", data[0]); + if (log_fifo) + log_fifo_command(data, numwords, "\n"); + } + break; + } + return TRUE; +} + +/************************************* + * Draw a model in waveram + *************************************/ + +void zeus2_device::zeus2_draw_model(UINT32 baseaddr, UINT16 count, int logit) +{ + UINT32 databuffer[32]; + int databufcount = 0; + int model_done = FALSE; + UINT32 texoffs = 0; + int quadsize = zeus_quad_size; + + if (logit) + logerror(" -- model @ %08X, len %04X\n", baseaddr, count); + + if (count > 0x1000) + fatalerror("Extreme count\n"); + + while (baseaddr != 0 && !model_done) + { + const void *base = waveram0_ptr_from_expanded_addr(baseaddr); + int curoffs; + + /* reset the objdata address */ + baseaddr = 0; + + /* loop until we run out of data */ + for (curoffs = 0; curoffs <= count; curoffs++) + { + int countneeded = 2; + UINT8 cmd; + + /* accumulate 2 words of data */ + databuffer[databufcount++] = WAVERAM_READ32(base, curoffs * 2 + 0); + databuffer[databufcount++] = WAVERAM_READ32(base, curoffs * 2 + 1); + + /* if this is enough, process the command */ + cmd = databuffer[0] >> 24; + if (cmd == 0x38) + countneeded = quadsize; + if (databufcount == countneeded) + { + /* handle logging of the command */ + if (logit) + { + int offs; + logerror("\t"); + for (offs = 0; offs < databufcount; offs++) + logerror("%08X ", databuffer[offs]); + logerror("-- "); + } + + /* handle the command */ + switch (cmd) + { + case 0x21: /* thegrid */ + case 0x22: /* crusnexo */ + if (((databuffer[0] >> 16) & 0xff) == 0x9b) + { + texoffs = databuffer[1]; + if (logit) + logerror("texture offset\n"); + } + else if (logit) + logerror("unknown offset\n"); + break; + + case 0x31: /* thegrid */ + if (logit) + logerror("sync?\n"); + break; + + case 0x35: /* thegrid */ + case 0x36: /* crusnexo */ + if (logit) + logerror("reg32"); + zeus2_register32_w((databuffer[0] >> 16) & 0x7f, databuffer[1], logit); + break; + + case 0x38: /* crusnexo/thegrid */ + poly->zeus2_draw_quad(databuffer, texoffs, logit); + break; + + default: + if (quadsize == 10) + { + logerror("Correcting quad size\n"); + quadsize = 14; + } + if (logit) + logerror("unknown model data\n"); + break; + } + + /* reset the count */ + databufcount = 0; + } + } + } +} + +/************************************* + * Draw a quad + *************************************/ +void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit) +{ + z2_poly_vertex clipvert[8]; + z2_poly_vertex vert[4]; + // float uscale, vscale; + float maxy, maxx; + // int val1, val2, texwshift; + int numverts; + int i; + // INT16 normal[3]; + // INT32 rotnormal[3]; + int texmode = texoffs & 0xffff; + + if (logit) + m_state->logerror("quad\n"); + + if (machine().input().code_pressed(KEYCODE_Q) && (texoffs & 0xffff) == 0x119) return; + if (machine().input().code_pressed(KEYCODE_E) && (texoffs & 0xffff) == 0x01d) return; + if (machine().input().code_pressed(KEYCODE_R) && (texoffs & 0xffff) == 0x11d) return; + if (machine().input().code_pressed(KEYCODE_T) && (texoffs & 0xffff) == 0x05d) return; + if (machine().input().code_pressed(KEYCODE_Y) && (texoffs & 0xffff) == 0x0dd) return; + //if (machine().input().code_pressed(KEYCODE_U) && (texoffs & 0xffff) == 0x119) return; + //if (machine().input().code_pressed(KEYCODE_I) && (texoffs & 0xffff) == 0x119) return; + //if (machine().input().code_pressed(KEYCODE_O) && (texoffs & 0xffff) == 0x119) return; + //if (machine().input().code_pressed(KEYCODE_L) && (texoffs & 0x100)) return; + + /* + 0 38800000 + 1 x2 | x1 + 2 v1 | u1 + 3 y2 | y1 + 4 v2 | u2 + 5 z2 | z1 + 6 v3 | u3 + 7 v4 | u4 + 8 ??? + 9 x4 | x3 + 10 y4 | y3 + 11 z4 | z3 + + In memory: + +0 = ??? + +1 = set via $05410000/value + +2 = x1 + +3 = y1 + +4 = z1 + +5 = x2 + +6 = y2 + +7 = z2 + +8 = x3 + +9 = y3 + +10= z3 + +11= x4 + +12= y4 + +13= z4 + +14= uv1 + +15= uv2 + +16= uv3 + +17= uv4 + +18= set via $05200000/$05000000 | (value << 10) (uvoffset?) + +19= ??? + + + 38810000 00000000 00C7|FF38 FF5E|FF5E 15400154 11400114 00000000 00000000 FF38|00C7 00A3|00A3 -- quad + xxxx|xxxx yyyy|yyyy xxxx|xxxx yyyy|yyyy + */ + + /* extract raw x,y,z */ + vert[0].x = (INT16)databuffer[2]; + vert[0].y = (INT16)databuffer[3]; + vert[0].p[0] = (INT16)databuffer[6]; + vert[0].p[1] = (databuffer[1] >> 2) & 0xff; + vert[0].p[2] = (databuffer[1] >> 18) & 0xff; + + vert[1].x = (INT16)(databuffer[2] >> 16); + vert[1].y = (INT16)(databuffer[3] >> 16); + vert[1].p[0] = (INT16)(databuffer[6] >> 16); + vert[1].p[1] = (databuffer[4] >> 2) & 0xff; + vert[1].p[2] = (databuffer[4] >> 12) & 0xff; + + vert[2].x = (INT16)databuffer[8]; + vert[2].y = (INT16)databuffer[9]; + vert[2].p[0] = (INT16)databuffer[7]; + vert[2].p[1] = (databuffer[4] >> 22) & 0xff; + vert[2].p[2] = (databuffer[5] >> 2) & 0xff; + + vert[3].x = (INT16)(databuffer[8] >> 16); + vert[3].y = (INT16)(databuffer[9] >> 16); + vert[3].p[0] = (INT16)(databuffer[7] >> 16); + vert[3].p[1] = (databuffer[5] >> 12) & 0xff; + vert[3].p[2] = (databuffer[5] >> 22) & 0xff; + + /* + vert[0].x = (INT16)databuffer[1]; + vert[0].y = (INT16)databuffer[3]; + vert[0].p[0] = (INT16)databuffer[5]; + vert[0].p[1] = (UINT16)databuffer[2]; + vert[0].p[2] = (UINT16)(databuffer[2] >> 16); + + vert[1].x = (INT16)(databuffer[1] >> 16); + vert[1].y = (INT16)(databuffer[3] >> 16); + vert[1].p[0] = (INT16)(databuffer[5] >> 16); + vert[1].p[1] = (UINT16)databuffer[4]; + vert[1].p[2] = (UINT16)(databuffer[4] >> 16); + + vert[2].x = (INT16)databuffer[9]; + vert[2].y = (INT16)databuffer[10]; + vert[2].p[0] = (INT16)databuffer[11]; + vert[2].p[1] = (UINT16)databuffer[6]; + vert[2].p[2] = (UINT16)(databuffer[6] >> 16); + + vert[3].x = (INT16)(databuffer[9] >> 16); + vert[3].y = (INT16)(databuffer[10] >> 16); + vert[3].p[0] = (INT16)(databuffer[11] >> 16); + vert[3].p[1] = (UINT16)databuffer[7]; + vert[3].p[2] = (UINT16)(databuffer[7] >> 16); + */ + for (i = 0; i < 4; i++) + { + float x = vert[i].x; + float y = vert[i].y; + float z = vert[i].p[0]; + + vert[i].x = x * m_state->zeus_matrix[0][0] + y * m_state->zeus_matrix[0][1] + z * m_state->zeus_matrix[0][2] + m_state->zeus_point[0]; + vert[i].y = x * m_state->zeus_matrix[1][0] + y * m_state->zeus_matrix[1][1] + z * m_state->zeus_matrix[1][2] + m_state->zeus_point[1]; + vert[i].p[0] = x * m_state->zeus_matrix[2][0] + y * m_state->zeus_matrix[2][1] + z * m_state->zeus_matrix[2][2] + m_state->zeus_point[2]; + vert[i].p[0] += m_state->zbase; + vert[i].p[2] += texoffs >> 16; + vert[i].p[1] *= 256.0f; + vert[i].p[2] *= 256.0f; + + if (logit) + { + m_state->logerror("\t\t(%f,%f,%f) (%02X,%02X)\n", + (double)vert[i].x, (double)vert[i].y, (double)vert[i].p[0], + (int)(vert[i].p[1] / 256.0f), (int)(vert[i].p[2] / 256.0f)); + } + } + + numverts = this->zclip_if_less(4, &vert[0], &clipvert[0], 4, 1.0f / 512.0f / 4.0f); + if (numverts < 3) + return; + + maxx = maxy = -1000.0f; + for (i = 0; i < numverts; i++) + { + // 412.0f here works for crusnexo + float ooz = 512.0f / clipvert[i].p[0]; + + // ooz *= 1.0f / (512.0f * 512.0f); + + clipvert[i].x *= ooz; + clipvert[i].y *= ooz; + clipvert[i].x += 256.5f; + clipvert[i].y += 200.5f; + clipvert[i].p[0] *= 65536.0f * 16.0f; + + maxx = MAX(maxx, clipvert[i].x); + maxy = MAX(maxy, clipvert[i].y); + if (logit) + m_state->logerror("\t\t\tTranslated=(%f,%f)\n", (double)clipvert[i].x, (double)clipvert[i].y); + } + for (i = 0; i < numverts; i++) + { + if (clipvert[i].x == maxx) + clipvert[i].x += 0.0005f; + if (clipvert[i].y == maxy) + clipvert[i].y += 0.0005f; + } + + zeus2_poly_extra_data& extra = this->object_data_alloc(); + switch (texmode) + { + case 0x01d: /* crusnexo: RHS of score bar */ + case 0x05d: /* crusnexo: background, road */ + case 0x0dd: /* crusnexo: license plate letters */ + case 0x11d: /* crusnexo: LHS of score bar */ + case 0x15d: /* crusnexo */ + case 0x85d: /* crusnexo */ + case 0x95d: /* crusnexo */ + case 0xc1d: /* crusnexo */ + case 0xc5d: /* crusnexo */ + extra.texwidth = 256; + break; + + case 0x059: /* crusnexo */ + case 0x0d9: /* crusnexo */ + case 0x119: /* crusnexo: license plates */ + case 0x159: /* crusnexo */ + extra.texwidth = 128; + break; + + case 0x055: /* crusnexo */ + case 0x155: /* crusnexo */ + extra.texwidth = 64; + break; + + case 0x000: // thegrid guess + case 0x120: // thegrid guess + extra.texwidth = 32; + break; + + default: + { + static UINT8 hits[0x10000]; + if (!hits[(texoffs & 0xffff)]) + { + hits[(texoffs & 0xffff)] = 1; + printf("format = %04X\n", (texoffs & 0xffff)); + } + break; + } + } + + extra.solidcolor = 0;//m_zeusbase[0x00] & 0x7fff; + extra.zoffset = 0;//m_zeusbase[0x7e] >> 16; + extra.alpha = 0;//m_zeusbase[0x4e]; + extra.transcolor = 0x100;//((databuffer[1] >> 16) & 1) ? 0 : 0x100; + extra.texbase = WAVERAM_BLOCK0_EXT(m_state->zeus_texbase); + extra.palbase = m_state->waveram0_ptr_from_expanded_addr(m_state->m_zeusbase[0x41]); + + // Note: Before being converted to the "poly.h" interface, this used to call the polylgcy function + // poly_render_quad_fan. The behavior seems to be the same as it once was after a few short + // tests, but the (numverts == 5) statement below may actually be a quad fan instead of a 5-sided + // polygon. + if (numverts == 3) + render_triangle(m_state->zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert[0], clipvert[1], clipvert[2]); + else if (numverts == 4) + render_polygon<4>(m_state->zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert); + else if (numverts == 5) + render_polygon<5>(m_state->zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert); +} + + + +/************************************* +* Rasterizers +*************************************/ + +void zeus2_renderer::render_poly_8bit(INT32 scanline, const extent_t& extent, const zeus2_poly_extra_data& object, int threadid) +{ + INT32 curz = extent.param[0].start; + INT32 curu = extent.param[1].start; + INT32 curv = extent.param[2].start; + // INT32 curi = extent.param[3].start; + INT32 dzdx = extent.param[0].dpdx; + INT32 dudx = extent.param[1].dpdx; + INT32 dvdx = extent.param[2].dpdx; + // INT32 didx = extent.param[3].dpdx; + const void *texbase = object.texbase; + const void *palbase = object.palbase; + UINT16 transcolor = object.transcolor; + int texwidth = object.texwidth; + int x; + + for (x = extent.startx; x < extent.stopx; x++) + { + UINT16 *depthptr = WAVERAM_PTRDEPTH(m_state->zeus_renderbase, scanline, x); + INT32 depth = (curz >> 16) + object.zoffset; + //if (depth > 0x7fff) depth = 0x7fff; + if (depth > 0xffff) depth = 0xffff; + if (depth >= 0 && depth <= *depthptr) + { + int u0 = (curu >> 8);// & (texwidth - 1); + int v0 = (curv >> 8);// & 255; + int u1 = (u0 + 1); + int v1 = (v0 + 1); + UINT8 texel0 = m_state->get_texel_8bit(texbase, v0, u0, texwidth); + UINT8 texel1 = m_state->get_texel_8bit(texbase, v0, u1, texwidth); + UINT8 texel2 = m_state->get_texel_8bit(texbase, v1, u0, texwidth); + UINT8 texel3 = m_state->get_texel_8bit(texbase, v1, u1, texwidth); + if (texel0 != transcolor) + { + UINT32 color0 = WAVERAM_READ16(palbase, texel0); + UINT32 color1 = WAVERAM_READ16(palbase, texel1); + UINT32 color2 = WAVERAM_READ16(palbase, texel2); + UINT32 color3 = WAVERAM_READ16(palbase, texel3); + color0 = ((color0 & 0x7c00) << 9) | ((color0 & 0x3e0) << 6) | ((color0 & 0x1f) << 3); + color1 = ((color1 & 0x7c00) << 9) | ((color1 & 0x3e0) << 6) | ((color1 & 0x1f) << 3); + color2 = ((color2 & 0x7c00) << 9) | ((color2 & 0x3e0) << 6) | ((color2 & 0x1f) << 3); + color3 = ((color3 & 0x7c00) << 9) | ((color3 & 0x3e0) << 6) | ((color3 & 0x1f) << 3); + rgb_t filtered = rgbaint_t::bilinear_filter(color0, color1, color2, color3, curu, curv); + WAVERAM_WRITEPIX(m_state->zeus_renderbase, scanline, x, filtered); + *depthptr = depth; + } + } + + curz += dzdx; + curu += dudx; + curv += dvdx; + // curi += didx; + } +} + +/************************************* + * Debugging tools + *************************************/ + +void zeus2_device::log_fifo_command(const UINT32 *data, int numwords, const char *suffix) +{ + int wordnum; + std::string errorStr; + logerror("Zeus cmd %02X :", data[0] >> 24); + for (wordnum = 0; wordnum < numwords; wordnum++) + logerror(" %08X", data[wordnum]); + logerror("%s", suffix); +} diff --git a/src/devices/video/zeus2.h b/src/devices/video/zeus2.h new file mode 100644 index 00000000000..cc147654e71 --- /dev/null +++ b/src/devices/video/zeus2.h @@ -0,0 +1,286 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles +/************************************************************************* + + Midway Zeus2 Video + +**************************************************************************/ +#ifndef __ZEUS2_H__ +#define __ZEUS2_H__ + +#include "emu.h" +#include "video/poly.h" +#include "video/rgbutil.h" +#include "cpu/tms32031/tms32031.h" + +#pragma once + +/************************************* +* Constants +*************************************/ +#define ZEUS2_VIDEO_CLOCK XTAL_66_6667MHz + +#define DUMP_WAVE_RAM 0 +#define TRACK_REG_USAGE 0 + +#define WAVERAM0_WIDTH 1024 +#define WAVERAM0_HEIGHT 2048 + +#define WAVERAM1_WIDTH 512 +#define WAVERAM1_HEIGHT 1024 + +/************************************* +* Type definitions +*************************************/ + +struct zeus2_poly_extra_data +{ + const void * palbase; + const void * texbase; + UINT16 solidcolor; + INT16 zoffset; + UINT16 transcolor; + UINT16 texwidth; + UINT16 color; + UINT32 alpha; +}; + +/************************************* +* Macros +*************************************/ + +#define WAVERAM_BLOCK0(blocknum) ((void *)((UINT8 *)waveram[0] + 8 * (blocknum))) +#define WAVERAM_BLOCK1(blocknum) ((void *)((UINT8 *)waveram[1] + 12 * (blocknum))) +#define WAVERAM_BLOCK0_EXT(blocknum) ((void *)((UINT8 *)m_state->waveram[0] + 8 * (blocknum))) +#define WAVERAM_BLOCK1_EXT(blocknum) ((void *)((UINT8 *)m_state->waveram[1] + 12 * (blocknum))) + +#define WAVERAM_PTR8(base, bytenum) ((UINT8 *)(base) + BYTE4_XOR_LE(bytenum)) +#define WAVERAM_READ8(base, bytenum) (*WAVERAM_PTR8(base, bytenum)) +#define WAVERAM_WRITE8(base, bytenum, data) do { *WAVERAM_PTR8(base, bytenum) = (data); } while (0) + +#define WAVERAM_PTR16(base, wordnum) ((UINT16 *)(base) + BYTE_XOR_LE(wordnum)) +#define WAVERAM_READ16(base, wordnum) (*WAVERAM_PTR16(base, wordnum)) +#define WAVERAM_WRITE16(base, wordnum, data) do { *WAVERAM_PTR16(base, wordnum) = (data); } while (0) + +#define WAVERAM_PTR32(base, dwordnum) ((UINT32 *)(base) + (dwordnum)) +#define WAVERAM_READ32(base, dwordnum) (*WAVERAM_PTR32(base, dwordnum)) +#define WAVERAM_WRITE32(base, dwordnum, data) do { *WAVERAM_PTR32(base, dwordnum) = (data); } while (0) + +#define PIXYX_TO_DWORDNUM(y, x) (((((y) & 0x1ff) << 8) | (((x) & 0x1fe) >> 1)) * 3 + ((x) & 1)) +#define DEPTHYX_TO_DWORDNUM(y, x) (PIXYX_TO_DWORDNUM(y, (x) & ~1) + 2) + +#define WAVERAM_PTRPIX(base, y, x) WAVERAM_PTR32(base, PIXYX_TO_DWORDNUM(y, x)) +#define WAVERAM_READPIX(base, y, x) (*WAVERAM_PTRPIX(base, y, x)) +#define WAVERAM_WRITEPIX(base, y, x, color) do { *WAVERAM_PTRPIX(base, y, x) = (color); } while (0) + +#define WAVERAM_PTRDEPTH(base, y, x) WAVERAM_PTR16(base, DEPTHYX_TO_DWORDNUM(y, x) * 2 + (x & 1)) +#define WAVERAM_READDEPTH(base, y, x) (*WAVERAM_PTRDEPTH(base, y, x)) +#define WAVERAM_WRITEDEPTH(base, y, x, color) do { *WAVERAM_PTRDEPTH(base, y, x) = (color); } while (0) + +/************************************* +* Polygon renderer +*************************************/ +class zeus2_device; + +class zeus2_renderer : public poly_manager +{ +public: + zeus2_renderer(zeus2_device *state); + + void render_poly_8bit(INT32 scanline, const extent_t& extent, const zeus2_poly_extra_data& object, int threadid); + + void zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit); + +private: + zeus2_device* m_state; +}; +typedef zeus2_renderer::vertex_t z2_poly_vertex; +typedef zeus2_renderer::extent_t z2_poly_extent; + +/************************************* +* Zeus2 Video Device +*************************************/ +#define MCFG_ZEUS2_VBLANK_CB(_devcb) \ + devcb = &zeus2_device::set_vblank_callback(*device, DEVCB_##_devcb); + +#define MCFG_ZEUS2_IRQ_CB(_devcb) \ + devcb = &zeus2_device::set_irq_callback(*device, DEVCB_##_devcb); + +class zeus2_device : public device_t +{ +public: + zeus2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + screen_device *m_screen; /* the screen we are acting on */ + + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_READ32_MEMBER( zeus2_r ); + DECLARE_WRITE32_MEMBER( zeus2_w ); + TIMER_CALLBACK_MEMBER(display_irq_off); + TIMER_CALLBACK_MEMBER(display_irq); + + template static devcb_base &set_vblank_callback(device_t &device, _Object object) { return downcast(device).m_vblank.set_callback(object); } + template static devcb_base &set_irq_callback(device_t &device, _Object object) { return downcast(device).m_irq.set_callback(object); } + devcb_write_line m_vblank; + devcb_write_line m_irq; + + UINT32 m_zeusbase[0x80]; + + zeus2_renderer* poly; + + void *zeus_renderbase; + rectangle zeus_cliprect; + + float zeus_matrix[3][3]; + float zeus_point[3]; + float zeus_point2[3]; + UINT32 zeus_texbase; + UINT32 zeus_unknown_40; + int zeus_quad_size; + + UINT32 *waveram[2]; + emu_timer *int_timer; + emu_timer *vblank_timer; + int m_yScale; + int yoffs; + int texel_width; + float zbase; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + virtual void device_stop() override; + +private: + TIMER_CALLBACK_MEMBER(int_timer_callback); + void zeus2_register32_w(offs_t offset, UINT32 data, int logit); + void zeus2_register_update(offs_t offset, UINT32 oldval, int logit); + int zeus2_fifo_process(const UINT32 *data, int numwords); + void zeus2_pointer_write(UINT8 which, UINT32 value); + void zeus2_draw_model(UINT32 baseaddr, UINT16 count, int logit); + void log_fifo_command(const UINT32 *data, int numwords, const char *suffix); + + /************************************* + * Member variables + *************************************/ + + + UINT8 log_fifo; + + UINT32 zeus_fifo[20]; + UINT8 zeus_fifo_words; + + UINT32 m_fill_color; + UINT16 m_fill_depth; + +#if TRACK_REG_USAGE + struct reg_info + { + struct reg_info *next; + UINT32 value; + }; + + reg_info *regdata[0x80]; + int regdata_count[0x80]; + int regread_count[0x80]; + int regwrite_count[0x80]; + reg_info *subregdata[0x100]; + int subregdata_count[0x80]; + int subregwrite_count[0x100]; +#endif +public: + /************************************* + * Inlines for block addressing + *************************************/ + + inline void *waveram0_ptr_from_expanded_addr(UINT32 addr) + { + UINT32 blocknum = (addr % WAVERAM0_WIDTH) + ((addr >> 16) % WAVERAM0_HEIGHT) * WAVERAM0_WIDTH; + return WAVERAM_BLOCK0(blocknum); + } + + inline void *waveram1_ptr_from_expanded_addr(UINT32 addr) + { + UINT32 blocknum = (addr % WAVERAM1_WIDTH) + ((addr >> 16) % WAVERAM1_HEIGHT) * WAVERAM1_WIDTH; + return WAVERAM_BLOCK1(blocknum); + } + +#ifdef UNUSED_FUNCTION + inline void *waveram0_ptr_from_texture_addr(UINT32 addr, int width) + { + UINT32 blocknum = ((addr & ~1) * width) / 8; + return WAVERAM_BLOCK0(blocknum); + } +#endif + + /************************************* + * Inlines for rendering + *************************************/ + +#ifdef UNUSED_FUNCTION + inline void WAVERAM_plot(int y, int x, UINT32 color) + { + if (zeus_cliprect.contains(x, y)) + WAVERAM_WRITEPIX(zeus_renderbase, y, x, color); + } +#endif + + inline void waveram_plot_depth(int y, int x, UINT32 color, UINT16 depth) + { + if (zeus_cliprect.contains(x, y)) + { + WAVERAM_WRITEPIX(zeus_renderbase, y, x, color); + WAVERAM_WRITEDEPTH(zeus_renderbase, y, x, depth); + } + } + +#ifdef UNUSED_FUNCTION + inline void waveram_plot_check_depth(int y, int x, UINT32 color, UINT16 depth) + { + if (zeus_cliprect.contains(x, y)) + { + UINT16 *depthptr = WAVERAM_PTRDEPTH(zeus_renderbase, y, x); + if (depth <= *depthptr) + { + WAVERAM_WRITEPIX(zeus_renderbase, y, x, color); + *depthptr = depth; + } + } + } +#endif + +#ifdef UNUSED_FUNCTION + inline void waveram_plot_check_depth_nowrite(int y, int x, UINT32 color, UINT16 depth) + { + if (zeus_cliprect.contains(x, y)) + { + UINT16 *depthptr = WAVERAM_PTRDEPTH(zeus_renderbase, y, x); + if (depth <= *depthptr) + WAVERAM_WRITEPIX(zeus_renderbase, y, x, color); + } + } +#endif + /************************************* + * Inlines for texel accesses + *************************************/ + inline UINT8 get_texel_8bit(const void *base, int y, int x, int width) + { + UINT32 byteoffs = (y / 2) * (width * 2) + ((x / 4) << 3) + ((y & 1) << 2) + (x & 3); + return WAVERAM_READ8(base, byteoffs); + } + +#ifdef UNUSED_FUNCTION + inline UINT8 get_texel_4bit(const void *base, int y, int x, int width) + { + UINT32 byteoffs = (y / 2) * (width * 2) + ((x / 8) << 3) + ((y & 1) << 2) + ((x / 2) & 3); + return (WAVERAM_READ8(base, byteoffs) >> (4 * (x & 1))) & 0x0f; + } +#endif + +}; + +// device type definition +extern const device_type ZEUS2; + +#endif diff --git a/src/emu/addrmap.cpp b/src/emu/addrmap.cpp index a7a510b56f7..2b3f45b1795 100644 --- a/src/emu/addrmap.cpp +++ b/src/emu/addrmap.cpp @@ -36,6 +36,7 @@ address_map_entry::address_map_entry(device_t &device, address_map &map, offs_t m_addrend((map.m_globalmask == 0) ? end : end & map.m_globalmask), m_addrmirror(0), m_addrmask(0), + m_addrselect(0), m_share(nullptr), m_region(nullptr), m_rgnoffs(0), @@ -578,6 +579,9 @@ void address_map::uplift_submaps(running_machine &machine, device_t &device, dev if (entry->m_addrmask || subentry->m_addrmask) throw emu_fatalerror("uplift_submaps unhandled case: address masks.\n"); + if (entry->m_addrselect || subentry->m_addrselect) + throw emu_fatalerror("uplift_submaps unhandled case: select masks.\n"); + if (subentry->m_addrmirror & mirror_address_mask) throw emu_fatalerror("uplift_submaps unhandled case: address mirror bit within subentry.\n"); @@ -681,6 +685,28 @@ void address_map::map_validity_check(validity_checker &valid, const device_t &de if ((bytestart & (alignunit - 1)) != 0 || (byteend & (alignunit - 1)) != (alignunit - 1)) osd_printf_error("Wrong %s memory read handler start = %08x, end = %08x ALIGN = %d\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, alignunit); + // verify mask/mirror/select + offs_t set_bits = entry.m_addrstart | entry.m_addrend; + offs_t changing_bits = entry.m_addrstart ^ entry.m_addrend; + changing_bits |= changing_bits >> 1; + changing_bits |= changing_bits >> 2; + changing_bits |= changing_bits >> 4; + changing_bits |= changing_bits >> 8; + changing_bits |= changing_bits >> 16; + + if (entry.m_addrmask & ~changing_bits) + osd_printf_error("In %s memory range %x-%x, mask %x is trying to unmask an unchanging address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmask & ~changing_bits); + if (entry.m_addrmirror & changing_bits) + osd_printf_error("In %s memory range %x-%x, mirror %x touches a changing address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & changing_bits); + if (entry.m_addrselect & changing_bits) + osd_printf_error("In %s memory range %x-%x, select %x touches a changing address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrselect, entry.m_addrselect & changing_bits); + if (entry.m_addrmirror & set_bits) + osd_printf_error("In %s memory range %x-%x, mirror %x touches a set address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & set_bits); + if (entry.m_addrselect & set_bits) + osd_printf_error("In %s memory range %x-%x, select %x touches a set address bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrselect, entry.m_addrselect & set_bits); + if (entry.m_addrmirror & entry.m_addrselect) + osd_printf_error("In %s memory range %x-%x, mirror %x touches a select bit (%x)\n", spaceconfig.m_name, entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, entry.m_addrmirror & entry.m_addrselect); + // if this is a program space, auto-assign implicit ROM entries if (entry.m_read.m_type == AMH_ROM && entry.m_region == nullptr) { diff --git a/src/emu/addrmap.h b/src/emu/addrmap.h index e4386d68365..3bcea1a3f47 100644 --- a/src/emu/addrmap.h +++ b/src/emu/addrmap.h @@ -81,6 +81,7 @@ public: // simple inline setters void set_mirror(offs_t _mirror) { m_addrmirror = _mirror; } + void set_select(offs_t _select) { m_addrselect = _select; } void set_read_type(map_handler_type _type) { m_read.m_type = _type; } void set_write_type(map_handler_type _type) { m_write.m_type = _type; } void set_region(const char *tag, offs_t offset) { m_region = tag; m_rgnoffs = offset; } @@ -115,6 +116,7 @@ public: offs_t m_addrend; // end address offs_t m_addrmirror; // mirror bits offs_t m_addrmask; // mask bits + offs_t m_addrselect; // select bits map_handler_data m_read; // data for read handler map_handler_data m_write; // data for write handler map_handler_data m_setoffsethd; // data for setoffset handler @@ -314,7 +316,6 @@ void ADDRESS_MAP_NAME(_name)(address_map &map, device_t &device) \ typedef write##_bits##_delegate write_delegate ATTR_UNUSED; \ address_map_entry##_bits *curentry = nullptr; \ (void)curentry; \ - assert(&device != nullptr); \ map.configure(_space, _bits); \ typedef _class drivdata_class ATTR_UNUSED; #define DEVICE_ADDRESS_MAP_START(_name, _bits, _class) \ @@ -324,7 +325,6 @@ void _class :: _name(::address_map &map, device_t &device) \ typedef write##_bits##_delegate write_delegate ATTR_UNUSED; \ address_map_entry##_bits *curentry = nullptr; \ (void)curentry; \ - assert(&device != nullptr); \ map.configure(AS_PROGRAM, _bits); \ typedef _class drivdata_class ATTR_UNUSED; #define ADDRESS_MAP_END \ @@ -362,6 +362,8 @@ void _class :: _name(::address_map &map, device_t &device) \ curentry->set_mask(_mask); #define AM_MIRROR(_mirror) \ curentry->set_mirror(_mirror); +#define AM_SELECT(_select) \ + curentry->set_select(_select); // driver data reads #define AM_READ(_handler) \ diff --git a/src/emu/crsshair.cpp b/src/emu/crsshair.cpp index 28d5cced1ce..d976e49714f 100644 --- a/src/emu/crsshair.cpp +++ b/src/emu/crsshair.cpp @@ -113,8 +113,8 @@ crosshair_manager::crosshair_manager(running_machine &machine) m_auto_time = CROSSHAIR_VISIBILITY_AUTOTIME_DEFAULT; /* determine who needs crosshairs */ - for (ioport_port &port : machine.ioport().ports()) - for (ioport_field &field : port.fields()) + for (auto &port : machine.ioport().ports()) + for (ioport_field &field : port.second->fields()) if (field.crosshair_axis() != CROSSHAIR_AXIS_NONE) { int player = field.player(); diff --git a/src/emu/debug/debugcmd.cpp b/src/emu/debug/debugcmd.cpp index 0ee23f94638..97eeb525fe1 100644 --- a/src/emu/debug/debugcmd.cpp +++ b/src/emu/debug/debugcmd.cpp @@ -26,144 +26,10 @@ CONSTANTS ***************************************************************************/ -#define MAX_GLOBALS 1000 - - +const size_t debugger_commands::MAX_GLOBALS = 1000; /*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -struct global_entry -{ - void * base; - UINT32 size; -}; - - -struct cheat_map -{ - UINT64 offset; - UINT64 first_value; - UINT64 previous_value; - UINT8 state:1; - UINT8 undo:7; -}; - - -struct cheat_system -{ - char cpu[2]; - UINT8 width; - std::vector cheatmap; - UINT8 undo; - UINT8 signed_cheat; - UINT8 swapped_cheat; -}; - - -struct cheat_region_map -{ - UINT64 offset; - UINT64 endoffset; - const char *share; - UINT8 disabled; -}; - - - -/*************************************************************************** - GLOBAL VARIABLES -***************************************************************************/ - -static global_entry global_array[MAX_GLOBALS]; -static cheat_system cheat; - - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -static void debug_command_exit(running_machine &machine); - -static UINT64 execute_min(symbol_table &table, void *ref, int params, const UINT64 *param); -static UINT64 execute_max(symbol_table &table, void *ref, int params, const UINT64 *param); -static UINT64 execute_if(symbol_table &table, void *ref, int params, const UINT64 *param); - -static UINT64 global_get(symbol_table &table, void *ref); -static void global_set(symbol_table &table, void *ref, UINT64 value); - -static void execute_help(running_machine &machine, int ref, int params, const char **param); -static void execute_print(running_machine &machine, int ref, int params, const char **param); -static void execute_printf(running_machine &machine, int ref, int params, const char **param); -static void execute_logerror(running_machine &machine, int ref, int params, const char **param); -static void execute_tracelog(running_machine &machine, int ref, int params, const char **param); -static void execute_quit(running_machine &machine, int ref, int params, const char **param); -static void execute_do(running_machine &machine, int ref, int params, const char **param); -static void execute_step(running_machine &machine, int ref, int params, const char **param); -static void execute_over(running_machine &machine, int ref, int params, const char **param); -static void execute_out(running_machine &machine, int ref, int params, const char **param); -static void execute_go(running_machine &machine, int ref, int params, const char **param); -static void execute_go_vblank(running_machine &machine, int ref, int params, const char **param); -static void execute_go_interrupt(running_machine &machine, int ref, int params, const char **param); -static void execute_go_time(running_machine &machine, int ref, int params, const char *param[]); -static void execute_focus(running_machine &machine, int ref, int params, const char **param); -static void execute_ignore(running_machine &machine, int ref, int params, const char **param); -static void execute_observe(running_machine &machine, int ref, int params, const char **param); -static void execute_next(running_machine &machine, int ref, int params, const char **param); -static void execute_comment_add(running_machine &machine, int ref, int params, const char **param); -static void execute_comment_del(running_machine &machine, int ref, int params, const char **param); -static void execute_comment_save(running_machine &machine, int ref, int params, const char **param); -static void execute_comment_list(running_machine &machine, int ref, int params, const char **param); -static void execute_comment_commit(running_machine &machine, int ref, int params, const char **param); -static void execute_bpset(running_machine &machine, int ref, int params, const char **param); -static void execute_bpclear(running_machine &machine, int ref, int params, const char **param); -static void execute_bpdisenable(running_machine &machine, int ref, int params, const char **param); -static void execute_bplist(running_machine &machine, int ref, int params, const char **param); -static void execute_wpset(running_machine &machine, int ref, int params, const char **param); -static void execute_wpclear(running_machine &machine, int ref, int params, const char **param); -static void execute_wpdisenable(running_machine &machine, int ref, int params, const char **param); -static void execute_wplist(running_machine &machine, int ref, int params, const char **param); -static void execute_rpset(running_machine &machine, int ref, int params, const char **param); -static void execute_rpclear(running_machine &machine, int ref, int params, const char **param); -static void execute_rpdisenable(running_machine &machine, int ref, int params, const char **param); -static void execute_rplist(running_machine &machine, int ref, int params, const char **param); -static void execute_hotspot(running_machine &machine, int ref, int params, const char **param); -static void execute_statesave(running_machine &machine, int ref, int params, const char **param); -static void execute_stateload(running_machine &machine, int ref, int params, const char **param); -static void execute_save(running_machine &machine, int ref, int params, const char **param); -static void execute_load(running_machine &machine, int ref, int params, const char **param); -static void execute_dump(running_machine &machine, int ref, int params, const char **param); -static void execute_cheatinit(running_machine &machine, int ref, int params, const char **param); -static void execute_cheatnext(running_machine &machine, int ref, int params, const char **param); -static void execute_cheatlist(running_machine &machine, int ref, int params, const char **param); -static void execute_cheatundo(running_machine &machine, int ref, int params, const char **param); -static void execute_dasm(running_machine &machine, int ref, int params, const char **param); -static void execute_find(running_machine &machine, int ref, int params, const char **param); -static void execute_trace(running_machine &machine, int ref, int params, const char **param); -static void execute_traceover(running_machine &machine, int ref, int params, const char **param); -static void execute_traceflush(running_machine &machine, int ref, int params, const char **param); -static void execute_history(running_machine &machine, int ref, int params, const char **param); -static void execute_trackpc(running_machine &machine, int ref, int params, const char **param); -static void execute_trackmem(running_machine &machine, int ref, int params, const char **param); -static void execute_pcatmem(running_machine &machine, int ref, int params, const char **param); -static void execute_snap(running_machine &machine, int ref, int params, const char **param); -static void execute_source(running_machine &machine, int ref, int params, const char **param); -static void execute_map(running_machine &machine, int ref, int params, const char **param); -static void execute_memdump(running_machine &machine, int ref, int params, const char **param); -static void execute_symlist(running_machine &machine, int ref, int params, const char **param); -static void execute_softreset(running_machine &machine, int ref, int params, const char **param); -static void execute_hardreset(running_machine &machine, int ref, int params, const char **param); -static void execute_images(running_machine &machine, int ref, int params, const char **param); -static void execute_mount(running_machine &machine, int ref, int params, const char **param); -static void execute_unmount(running_machine &machine, int ref, int params, const char **param); -static void execute_input(running_machine &machine, int ref, int params, const char **param); -static void execute_dumpkbd(running_machine &machine, int ref, int params, const char **param); - - -/*************************************************************************** - INLINE FUNCTIONS + FUNCTIONS ***************************************************************************/ /*------------------------------------------------- @@ -171,9 +37,9 @@ static void execute_dumpkbd(running_machine &machine, int ref, int params, const given address is valid for cheating -------------------------------------------------*/ -static inline int cheat_address_is_valid(address_space &space, offs_t address) +bool debugger_commands::cheat_address_is_valid(address_space &space, offs_t address) { - return debug_cpu_translate(space, TRANSLATE_READ, &address) && (space.get_write_ptr(address) != nullptr); + return m_cpu.translate(space, TRANSLATE_READ, &address) && (space.get_write_ptr(address) != nullptr); } @@ -182,7 +48,7 @@ static inline int cheat_address_is_valid(address_space &space, offs_t address) the current cheat width, if signed -------------------------------------------------*/ -static inline UINT64 cheat_sign_extend(const cheat_system *cheatsys, UINT64 value) +UINT64 debugger_commands::cheat_sign_extend(const cheat_system *cheatsys, UINT64 value) { if (cheatsys->signed_cheat) { @@ -195,11 +61,12 @@ static inline UINT64 cheat_sign_extend(const cheat_system *cheatsys, UINT64 valu } return value; } + /*------------------------------------------------- cheat_byte_swap - swap a value -------------------------------------------------*/ -static inline UINT64 cheat_byte_swap(const cheat_system *cheatsys, UINT64 value) +UINT64 debugger_commands::cheat_byte_swap(const cheat_system *cheatsys, UINT64 value) { if (cheatsys->swapped_cheat) { @@ -220,41 +87,34 @@ static inline UINT64 cheat_byte_swap(const cheat_system *cheatsys, UINT64 value) and swapping if necessary -------------------------------------------------*/ -static inline UINT64 cheat_read_extended(const cheat_system *cheatsys, address_space &space, offs_t address) +UINT64 debugger_commands::cheat_read_extended(const cheat_system *cheatsys, address_space &space, offs_t address) { - return cheat_sign_extend(cheatsys, cheat_byte_swap(cheatsys, debug_read_memory(space, address, cheatsys->width, TRUE))); + return cheat_sign_extend(cheatsys, cheat_byte_swap(cheatsys, m_cpu.read_memory(space, address, cheatsys->width, TRUE))); } - - -/*************************************************************************** - INITIALIZATION -***************************************************************************/ - -/*------------------------------------------------- - debug_command_init - initializes the command - system --------------------------------------------------*/ - -void debug_command_init(running_machine &machine) +debugger_commands::debugger_commands(running_machine& machine, debugger_cpu& cpu, debugger_console& console) + : m_machine(machine) + , m_cpu(cpu) + , m_console(console) { - symbol_table *symtable = debug_cpu_get_global_symtable(machine); - const char *name; - int itemnum; + m_global_array = auto_alloc_array_clear(m_machine, global_entry, MAX_GLOBALS); + + symbol_table *symtable = m_cpu.get_global_symtable(); /* add a few simple global functions */ - symtable->add("min", nullptr, 2, 2, execute_min); - symtable->add("max", nullptr, 2, 2, execute_max); - symtable->add("if", nullptr, 3, 3, execute_if); + using namespace std::placeholders; + symtable->add("min", nullptr, 2, 2, std::bind(&debugger_commands::execute_min, this, _1, _2, _3, _4)); + symtable->add("max", nullptr, 2, 2, std::bind(&debugger_commands::execute_max, this, _1, _2, _3, _4)); + symtable->add("if", nullptr, 3, 3, std::bind(&debugger_commands::execute_if, this, _1, _2, _3, _4)); /* add all single-entry save state globals */ - for (itemnum = 0; itemnum < MAX_GLOBALS; itemnum++) + for (int itemnum = 0; itemnum < MAX_GLOBALS; itemnum++) { UINT32 valsize, valcount; void *base; /* stop when we run out of items */ - name = machine.save().indexed_item(itemnum, base, valsize, valcount); + const char* name = m_machine.save().indexed_item(itemnum, base, valsize, valcount); if (name == nullptr) break; @@ -263,181 +123,164 @@ void debug_command_init(running_machine &machine) { char symname[100]; sprintf(symname, ".%s", strrchr(name, '/') + 1); - global_array[itemnum].base = base; - global_array[itemnum].size = valsize; - symtable->add(symname, &global_array, global_get, global_set); + m_global_array[itemnum].base = base; + m_global_array[itemnum].size = valsize; + symtable->add(symname, &m_global_array, std::bind(&debugger_commands::global_get, this, _1, _2), std::bind(&debugger_commands::global_set, this, _1, _2, _3)); } } /* add all the commands */ - debug_console_register_command(machine, "help", CMDFLAG_NONE, 0, 0, 1, execute_help); - debug_console_register_command(machine, "print", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, execute_print); - debug_console_register_command(machine, "printf", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, execute_printf); - debug_console_register_command(machine, "logerror", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, execute_logerror); - debug_console_register_command(machine, "tracelog", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, execute_tracelog); - debug_console_register_command(machine, "quit", CMDFLAG_NONE, 0, 0, 0, execute_quit); - debug_console_register_command(machine, "exit", CMDFLAG_NONE, 0, 0, 0, execute_quit); - debug_console_register_command(machine, "do", CMDFLAG_NONE, 0, 1, 1, execute_do); - debug_console_register_command(machine, "step", CMDFLAG_NONE, 0, 0, 1, execute_step); - debug_console_register_command(machine, "s", CMDFLAG_NONE, 0, 0, 1, execute_step); - debug_console_register_command(machine, "over", CMDFLAG_NONE, 0, 0, 1, execute_over); - debug_console_register_command(machine, "o", CMDFLAG_NONE, 0, 0, 1, execute_over); - debug_console_register_command(machine, "out" , CMDFLAG_NONE, 0, 0, 0, execute_out); - debug_console_register_command(machine, "go", CMDFLAG_NONE, 0, 0, 1, execute_go); - debug_console_register_command(machine, "g", CMDFLAG_NONE, 0, 0, 1, execute_go); - debug_console_register_command(machine, "gvblank", CMDFLAG_NONE, 0, 0, 0, execute_go_vblank); - debug_console_register_command(machine, "gv", CMDFLAG_NONE, 0, 0, 0, execute_go_vblank); - debug_console_register_command(machine, "gint", CMDFLAG_NONE, 0, 0, 1, execute_go_interrupt); - debug_console_register_command(machine, "gi", CMDFLAG_NONE, 0, 0, 1, execute_go_interrupt); - debug_console_register_command(machine, "gtime", CMDFLAG_NONE, 0, 0, 1, execute_go_time); - debug_console_register_command(machine, "gt", CMDFLAG_NONE, 0, 0, 1, execute_go_time); - debug_console_register_command(machine, "next", CMDFLAG_NONE, 0, 0, 0, execute_next); - debug_console_register_command(machine, "n", CMDFLAG_NONE, 0, 0, 0, execute_next); - debug_console_register_command(machine, "focus", CMDFLAG_NONE, 0, 1, 1, execute_focus); - debug_console_register_command(machine, "ignore", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, execute_ignore); - debug_console_register_command(machine, "observe", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, execute_observe); + m_console.register_command("help", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_help, this, _1, _2, _3)); + m_console.register_command("print", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_print, this, _1, _2, _3)); + m_console.register_command("printf", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_printf, this, _1, _2, _3)); + m_console.register_command("logerror", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_logerror, this, _1, _2, _3)); + m_console.register_command("tracelog", CMDFLAG_NONE, 0, 1, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_tracelog, this, _1, _2, _3)); + m_console.register_command("quit", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_quit, this, _1, _2, _3)); + m_console.register_command("exit", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_quit, this, _1, _2, _3)); + m_console.register_command("do", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_do, this, _1, _2, _3)); + m_console.register_command("step", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_step, this, _1, _2, _3)); + m_console.register_command("s", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_step, this, _1, _2, _3)); + m_console.register_command("over", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_over, this, _1, _2, _3)); + m_console.register_command("o", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_over, this, _1, _2, _3)); + m_console.register_command("out" , CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_out, this, _1, _2, _3)); + m_console.register_command("go", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_go, this, _1, _2, _3)); + m_console.register_command("g", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_go, this, _1, _2, _3)); + m_console.register_command("gvblank", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_go_vblank, this, _1, _2, _3)); + m_console.register_command("gv", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_go_vblank, this, _1, _2, _3)); + m_console.register_command("gint", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_go_interrupt, this, _1, _2, _3)); + m_console.register_command("gi", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_go_interrupt, this, _1, _2, _3)); + m_console.register_command("gtime", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_go_time, this, _1, _2, _3)); + m_console.register_command("gt", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_go_time, this, _1, _2, _3)); + m_console.register_command("next", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_next, this, _1, _2, _3)); + m_console.register_command("n", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_next, this, _1, _2, _3)); + m_console.register_command("focus", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_focus, this, _1, _2, _3)); + m_console.register_command("ignore", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_ignore, this, _1, _2, _3)); + m_console.register_command("observe", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_observe, this, _1, _2, _3)); - debug_console_register_command(machine, "comadd", CMDFLAG_NONE, 0, 1, 2, execute_comment_add); - debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment_add); - debug_console_register_command(machine, "comdelete", CMDFLAG_NONE, 0, 1, 1, execute_comment_del); - debug_console_register_command(machine, "comsave", CMDFLAG_NONE, 0, 0, 0, execute_comment_save); - debug_console_register_command(machine, "comlist", CMDFLAG_NONE, 0, 0, 0, execute_comment_list); - debug_console_register_command(machine, "commit", CMDFLAG_NONE, 0, 1, 2, execute_comment_commit); - debug_console_register_command(machine, "/*", CMDFLAG_NONE, 0, 1, 2, execute_comment_commit); - - debug_console_register_command(machine, "bpset", CMDFLAG_NONE, 0, 1, 3, execute_bpset); - debug_console_register_command(machine, "bp", CMDFLAG_NONE, 0, 1, 3, execute_bpset); - debug_console_register_command(machine, "bpclear", CMDFLAG_NONE, 0, 0, 1, execute_bpclear); - debug_console_register_command(machine, "bpdisable", CMDFLAG_NONE, 0, 0, 1, execute_bpdisenable); - debug_console_register_command(machine, "bpenable", CMDFLAG_NONE, 1, 0, 1, execute_bpdisenable); - debug_console_register_command(machine, "bplist", CMDFLAG_NONE, 0, 0, 0, execute_bplist); + m_console.register_command("comadd", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_comment_add, this, _1, _2, _3)); + m_console.register_command("//", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_comment_add, this, _1, _2, _3)); + m_console.register_command("comdelete", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_comment_del, this, _1, _2, _3)); + m_console.register_command("comsave", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_comment_save, this, _1, _2, _3)); + m_console.register_command("comlist", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_comment_list, this, _1, _2, _3)); + m_console.register_command("commit", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_comment_commit, this, _1, _2, _3)); + m_console.register_command("/*", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_comment_commit, this, _1, _2, _3)); - debug_console_register_command(machine, "wpset", CMDFLAG_NONE, AS_PROGRAM, 3, 5, execute_wpset); - debug_console_register_command(machine, "wp", CMDFLAG_NONE, AS_PROGRAM, 3, 5, execute_wpset); - debug_console_register_command(machine, "wpdset", CMDFLAG_NONE, AS_DATA, 3, 5, execute_wpset); - debug_console_register_command(machine, "wpd", CMDFLAG_NONE, AS_DATA, 3, 5, execute_wpset); - debug_console_register_command(machine, "wpiset", CMDFLAG_NONE, AS_IO, 3, 5, execute_wpset); - debug_console_register_command(machine, "wpi", CMDFLAG_NONE, AS_IO, 3, 5, execute_wpset); - debug_console_register_command(machine, "wpclear", CMDFLAG_NONE, 0, 0, 1, execute_wpclear); - debug_console_register_command(machine, "wpdisable", CMDFLAG_NONE, 0, 0, 1, execute_wpdisenable); - debug_console_register_command(machine, "wpenable", CMDFLAG_NONE, 1, 0, 1, execute_wpdisenable); - debug_console_register_command(machine, "wplist", CMDFLAG_NONE, 0, 0, 0, execute_wplist); + m_console.register_command("bpset", CMDFLAG_NONE, 0, 1, 3, std::bind(&debugger_commands::execute_bpset, this, _1, _2, _3)); + m_console.register_command("bp", CMDFLAG_NONE, 0, 1, 3, std::bind(&debugger_commands::execute_bpset, this, _1, _2, _3)); + m_console.register_command("bpclear", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_bpclear, this, _1, _2, _3)); + m_console.register_command("bpdisable", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_bpdisenable, this, _1, _2, _3)); + m_console.register_command("bpenable", CMDFLAG_NONE, 1, 0, 1, std::bind(&debugger_commands::execute_bpdisenable, this, _1, _2, _3)); + m_console.register_command("bplist", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_bplist, this, _1, _2, _3)); - debug_console_register_command(machine, "rpset", CMDFLAG_NONE, 0, 1, 2, execute_rpset); - debug_console_register_command(machine, "rp", CMDFLAG_NONE, 0, 1, 2, execute_rpset); - debug_console_register_command(machine, "rpclear", CMDFLAG_NONE, 0, 0, 1, execute_rpclear); - debug_console_register_command(machine, "rpdisable", CMDFLAG_NONE, 0, 0, 1, execute_rpdisenable); - debug_console_register_command(machine, "rpenable", CMDFLAG_NONE, 1, 0, 1, execute_rpdisenable); - debug_console_register_command(machine, "rplist", CMDFLAG_NONE, 0, 0, 0, execute_rplist); + m_console.register_command("wpset", CMDFLAG_NONE, AS_PROGRAM, 3, 5, std::bind(&debugger_commands::execute_wpset, this, _1, _2, _3)); + m_console.register_command("wp", CMDFLAG_NONE, AS_PROGRAM, 3, 5, std::bind(&debugger_commands::execute_wpset, this, _1, _2, _3)); + m_console.register_command("wpdset", CMDFLAG_NONE, AS_DATA, 3, 5, std::bind(&debugger_commands::execute_wpset, this, _1, _2, _3)); + m_console.register_command("wpd", CMDFLAG_NONE, AS_DATA, 3, 5, std::bind(&debugger_commands::execute_wpset, this, _1, _2, _3)); + m_console.register_command("wpiset", CMDFLAG_NONE, AS_IO, 3, 5, std::bind(&debugger_commands::execute_wpset, this, _1, _2, _3)); + m_console.register_command("wpi", CMDFLAG_NONE, AS_IO, 3, 5, std::bind(&debugger_commands::execute_wpset, this, _1, _2, _3)); + m_console.register_command("wpclear", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_wpclear, this, _1, _2, _3)); + m_console.register_command("wpdisable", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_wpdisenable, this, _1, _2, _3)); + m_console.register_command("wpenable", CMDFLAG_NONE, 1, 0, 1, std::bind(&debugger_commands::execute_wpdisenable, this, _1, _2, _3)); + m_console.register_command("wplist", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_wplist, this, _1, _2, _3)); - debug_console_register_command(machine, "hotspot", CMDFLAG_NONE, 0, 0, 3, execute_hotspot); + m_console.register_command("rpset", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_rpset, this, _1, _2, _3)); + m_console.register_command("rp", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_rpset, this, _1, _2, _3)); + m_console.register_command("rpclear", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_rpclear, this, _1, _2, _3)); + m_console.register_command("rpdisable", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_rpdisenable, this, _1, _2, _3)); + m_console.register_command("rpenable", CMDFLAG_NONE, 1, 0, 1, std::bind(&debugger_commands::execute_rpdisenable, this, _1, _2, _3)); + m_console.register_command("rplist", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_rplist, this, _1, _2, _3)); - debug_console_register_command(machine, "statesave", CMDFLAG_NONE, 0, 1, 1, execute_statesave); - debug_console_register_command(machine, "ss", CMDFLAG_NONE, 0, 1, 1, execute_statesave); - debug_console_register_command(machine, "stateload", CMDFLAG_NONE, 0, 1, 1, execute_stateload); - debug_console_register_command(machine, "sl", CMDFLAG_NONE, 0, 1, 1, execute_stateload); + m_console.register_command("hotspot", CMDFLAG_NONE, 0, 0, 3, std::bind(&debugger_commands::execute_hotspot, this, _1, _2, _3)); - debug_console_register_command(machine, "save", CMDFLAG_NONE, AS_PROGRAM, 3, 4, execute_save); - debug_console_register_command(machine, "saved", CMDFLAG_NONE, AS_DATA, 3, 4, execute_save); - debug_console_register_command(machine, "savei", CMDFLAG_NONE, AS_IO, 3, 4, execute_save); + m_console.register_command("statesave", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_statesave, this, _1, _2, _3)); + m_console.register_command("ss", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_statesave, this, _1, _2, _3)); + m_console.register_command("stateload", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_stateload, this, _1, _2, _3)); + m_console.register_command("sl", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_stateload, this, _1, _2, _3)); - debug_console_register_command(machine, "load", CMDFLAG_NONE, AS_PROGRAM, 3, 4, execute_load); - debug_console_register_command(machine, "loadd", CMDFLAG_NONE, AS_DATA, 3, 4, execute_load); - debug_console_register_command(machine, "loadi", CMDFLAG_NONE, AS_IO, 3, 4, execute_load); + m_console.register_command("save", CMDFLAG_NONE, AS_PROGRAM, 3, 4, std::bind(&debugger_commands::execute_save, this, _1, _2, _3)); + m_console.register_command("saved", CMDFLAG_NONE, AS_DATA, 3, 4, std::bind(&debugger_commands::execute_save, this, _1, _2, _3)); + m_console.register_command("savei", CMDFLAG_NONE, AS_IO, 3, 4, std::bind(&debugger_commands::execute_save, this, _1, _2, _3)); - debug_console_register_command(machine, "dump", CMDFLAG_NONE, AS_PROGRAM, 3, 6, execute_dump); - debug_console_register_command(machine, "dumpd", CMDFLAG_NONE, AS_DATA, 3, 6, execute_dump); - debug_console_register_command(machine, "dumpi", CMDFLAG_NONE, AS_IO, 3, 6, execute_dump); + m_console.register_command("load", CMDFLAG_NONE, AS_PROGRAM, 3, 4, std::bind(&debugger_commands::execute_load, this, _1, _2, _3)); + m_console.register_command("loadd", CMDFLAG_NONE, AS_DATA, 3, 4, std::bind(&debugger_commands::execute_load, this, _1, _2, _3)); + m_console.register_command("loadi", CMDFLAG_NONE, AS_IO, 3, 4, std::bind(&debugger_commands::execute_load, this, _1, _2, _3)); - debug_console_register_command(machine, "cheatinit", CMDFLAG_NONE, 0, 0, 4, execute_cheatinit); - debug_console_register_command(machine, "ci", CMDFLAG_NONE, 0, 0, 4, execute_cheatinit); + m_console.register_command("dump", CMDFLAG_NONE, AS_PROGRAM, 3, 6, std::bind(&debugger_commands::execute_dump, this, _1, _2, _3)); + m_console.register_command("dumpd", CMDFLAG_NONE, AS_DATA, 3, 6, std::bind(&debugger_commands::execute_dump, this, _1, _2, _3)); + m_console.register_command("dumpi", CMDFLAG_NONE, AS_IO, 3, 6, std::bind(&debugger_commands::execute_dump, this, _1, _2, _3)); - debug_console_register_command(machine, "cheatrange",CMDFLAG_NONE, 1, 2, 2, execute_cheatinit); - debug_console_register_command(machine, "cr", CMDFLAG_NONE, 1, 2, 2, execute_cheatinit); + m_console.register_command("cheatinit", CMDFLAG_NONE, 0, 0, 4, std::bind(&debugger_commands::execute_cheatinit, this, _1, _2, _3)); + m_console.register_command("ci", CMDFLAG_NONE, 0, 0, 4, std::bind(&debugger_commands::execute_cheatinit, this, _1, _2, _3)); - debug_console_register_command(machine, "cheatnext", CMDFLAG_NONE, 0, 1, 2, execute_cheatnext); - debug_console_register_command(machine, "cn", CMDFLAG_NONE, 0, 1, 2, execute_cheatnext); - debug_console_register_command(machine, "cheatnextf",CMDFLAG_NONE, 1, 1, 2, execute_cheatnext); - debug_console_register_command(machine, "cnf", CMDFLAG_NONE, 1, 1, 2, execute_cheatnext); + m_console.register_command("cheatrange",CMDFLAG_NONE, 1, 2, 2, std::bind(&debugger_commands::execute_cheatinit, this, _1, _2, _3)); + m_console.register_command("cr", CMDFLAG_NONE, 1, 2, 2, std::bind(&debugger_commands::execute_cheatinit, this, _1, _2, _3)); - debug_console_register_command(machine, "cheatlist", CMDFLAG_NONE, 0, 0, 1, execute_cheatlist); - debug_console_register_command(machine, "cl", CMDFLAG_NONE, 0, 0, 1, execute_cheatlist); + m_console.register_command("cheatnext", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_cheatnext, this, _1, _2, _3)); + m_console.register_command("cn", CMDFLAG_NONE, 0, 1, 2, std::bind(&debugger_commands::execute_cheatnext, this, _1, _2, _3)); + m_console.register_command("cheatnextf",CMDFLAG_NONE, 1, 1, 2, std::bind(&debugger_commands::execute_cheatnext, this, _1, _2, _3)); + m_console.register_command("cnf", CMDFLAG_NONE, 1, 1, 2, std::bind(&debugger_commands::execute_cheatnext, this, _1, _2, _3)); - debug_console_register_command(machine, "cheatundo", CMDFLAG_NONE, 0, 0, 0, execute_cheatundo); - debug_console_register_command(machine, "cu", CMDFLAG_NONE, 0, 0, 0, execute_cheatundo); + m_console.register_command("cheatlist", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_cheatlist, this, _1, _2, _3)); + m_console.register_command("cl", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_cheatlist, this, _1, _2, _3)); - debug_console_register_command(machine, "f", CMDFLAG_KEEP_QUOTES, AS_PROGRAM, 3, MAX_COMMAND_PARAMS, execute_find); - debug_console_register_command(machine, "find", CMDFLAG_KEEP_QUOTES, AS_PROGRAM, 3, MAX_COMMAND_PARAMS, execute_find); - debug_console_register_command(machine, "fd", CMDFLAG_KEEP_QUOTES, AS_DATA, 3, MAX_COMMAND_PARAMS, execute_find); - debug_console_register_command(machine, "findd", CMDFLAG_KEEP_QUOTES, AS_DATA, 3, MAX_COMMAND_PARAMS, execute_find); - debug_console_register_command(machine, "fi", CMDFLAG_KEEP_QUOTES, AS_IO, 3, MAX_COMMAND_PARAMS, execute_find); - debug_console_register_command(machine, "findi", CMDFLAG_KEEP_QUOTES, AS_IO, 3, MAX_COMMAND_PARAMS, execute_find); + m_console.register_command("cheatundo", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_cheatundo, this, _1, _2, _3)); + m_console.register_command("cu", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_cheatundo, this, _1, _2, _3)); - debug_console_register_command(machine, "dasm", CMDFLAG_NONE, 0, 3, 5, execute_dasm); + m_console.register_command("f", CMDFLAG_KEEP_QUOTES, AS_PROGRAM, 3, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_find, this, _1, _2, _3)); + m_console.register_command("find", CMDFLAG_KEEP_QUOTES, AS_PROGRAM, 3, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_find, this, _1, _2, _3)); + m_console.register_command("fd", CMDFLAG_KEEP_QUOTES, AS_DATA, 3, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_find, this, _1, _2, _3)); + m_console.register_command("findd", CMDFLAG_KEEP_QUOTES, AS_DATA, 3, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_find, this, _1, _2, _3)); + m_console.register_command("fi", CMDFLAG_KEEP_QUOTES, AS_IO, 3, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_find, this, _1, _2, _3)); + m_console.register_command("findi", CMDFLAG_KEEP_QUOTES, AS_IO, 3, MAX_COMMAND_PARAMS, std::bind(&debugger_commands::execute_find, this, _1, _2, _3)); - debug_console_register_command(machine, "trace", CMDFLAG_NONE, 0, 1, 3, execute_trace); - debug_console_register_command(machine, "traceover", CMDFLAG_NONE, 0, 1, 3, execute_traceover); - debug_console_register_command(machine, "traceflush",CMDFLAG_NONE, 0, 0, 0, execute_traceflush); + m_console.register_command("dasm", CMDFLAG_NONE, 0, 3, 5, std::bind(&debugger_commands::execute_dasm, this, _1, _2, _3)); - debug_console_register_command(machine, "history", CMDFLAG_NONE, 0, 0, 2, execute_history); - debug_console_register_command(machine, "trackpc", CMDFLAG_NONE, 0, 0, 3, execute_trackpc); + m_console.register_command("trace", CMDFLAG_NONE, 0, 1, 3, std::bind(&debugger_commands::execute_trace, this, _1, _2, _3)); + m_console.register_command("traceover", CMDFLAG_NONE, 0, 1, 3, std::bind(&debugger_commands::execute_traceover, this, _1, _2, _3)); + m_console.register_command("traceflush",CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_traceflush, this, _1, _2, _3)); - debug_console_register_command(machine, "trackmem", CMDFLAG_NONE, 0, 0, 3, execute_trackmem); - debug_console_register_command(machine, "pcatmemp", CMDFLAG_NONE, AS_PROGRAM, 1, 2, execute_pcatmem); - debug_console_register_command(machine, "pcatmemd", CMDFLAG_NONE, AS_DATA, 1, 2, execute_pcatmem); - debug_console_register_command(machine, "pcatmemi", CMDFLAG_NONE, AS_IO, 1, 2, execute_pcatmem); + m_console.register_command("history", CMDFLAG_NONE, 0, 0, 2, std::bind(&debugger_commands::execute_history, this, _1, _2, _3)); + m_console.register_command("trackpc", CMDFLAG_NONE, 0, 0, 3, std::bind(&debugger_commands::execute_trackpc, this, _1, _2, _3)); - debug_console_register_command(machine, "snap", CMDFLAG_NONE, 0, 0, 1, execute_snap); + m_console.register_command("trackmem", CMDFLAG_NONE, 0, 0, 3, std::bind(&debugger_commands::execute_trackmem, this, _1, _2, _3)); + m_console.register_command("pcatmemp", CMDFLAG_NONE, AS_PROGRAM, 1, 2, std::bind(&debugger_commands::execute_pcatmem, this, _1, _2, _3)); + m_console.register_command("pcatmemd", CMDFLAG_NONE, AS_DATA, 1, 2, std::bind(&debugger_commands::execute_pcatmem, this, _1, _2, _3)); + m_console.register_command("pcatmemi", CMDFLAG_NONE, AS_IO, 1, 2, std::bind(&debugger_commands::execute_pcatmem, this, _1, _2, _3)); - debug_console_register_command(machine, "source", CMDFLAG_NONE, 0, 1, 1, execute_source); + m_console.register_command("snap", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_snap, this, _1, _2, _3)); - debug_console_register_command(machine, "map", CMDFLAG_NONE, AS_PROGRAM, 1, 1, execute_map); - debug_console_register_command(machine, "mapd", CMDFLAG_NONE, AS_DATA, 1, 1, execute_map); - debug_console_register_command(machine, "mapi", CMDFLAG_NONE, AS_IO, 1, 1, execute_map); - debug_console_register_command(machine, "memdump", CMDFLAG_NONE, 0, 0, 1, execute_memdump); + m_console.register_command("source", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_source, this, _1, _2, _3)); - debug_console_register_command(machine, "symlist", CMDFLAG_NONE, 0, 0, 1, execute_symlist); + m_console.register_command("map", CMDFLAG_NONE, AS_PROGRAM, 1, 1, std::bind(&debugger_commands::execute_map, this, _1, _2, _3)); + m_console.register_command("mapd", CMDFLAG_NONE, AS_DATA, 1, 1, std::bind(&debugger_commands::execute_map, this, _1, _2, _3)); + m_console.register_command("mapi", CMDFLAG_NONE, AS_IO, 1, 1, std::bind(&debugger_commands::execute_map, this, _1, _2, _3)); + m_console.register_command("memdump", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_memdump, this, _1, _2, _3)); - debug_console_register_command(machine, "softreset", CMDFLAG_NONE, 0, 0, 1, execute_softreset); - debug_console_register_command(machine, "hardreset", CMDFLAG_NONE, 0, 0, 1, execute_hardreset); + m_console.register_command("symlist", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_symlist, this, _1, _2, _3)); - debug_console_register_command(machine, "images", CMDFLAG_NONE, 0, 0, 0, execute_images); - debug_console_register_command(machine, "mount", CMDFLAG_NONE, 0, 2, 2, execute_mount); - debug_console_register_command(machine, "unmount", CMDFLAG_NONE, 0, 1, 1, execute_unmount); + m_console.register_command("softreset", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_softreset, this, _1, _2, _3)); + m_console.register_command("hardreset", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_hardreset, this, _1, _2, _3)); - debug_console_register_command(machine, "input", CMDFLAG_NONE, 0, 1, 1, execute_input); - debug_console_register_command(machine, "dumpkbd", CMDFLAG_NONE, 0, 0, 1, execute_dumpkbd); + m_console.register_command("images", CMDFLAG_NONE, 0, 0, 0, std::bind(&debugger_commands::execute_images, this, _1, _2, _3)); + m_console.register_command("mount", CMDFLAG_NONE, 0, 2, 2, std::bind(&debugger_commands::execute_mount, this, _1, _2, _3)); + m_console.register_command("unmount", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_unmount, this, _1, _2, _3)); - machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(debug_command_exit), &machine)); + m_console.register_command("input", CMDFLAG_NONE, 0, 1, 1, std::bind(&debugger_commands::execute_input, this, _1, _2, _3)); + m_console.register_command("dumpkbd", CMDFLAG_NONE, 0, 0, 1, std::bind(&debugger_commands::execute_dumpkbd, this, _1, _2, _3)); /* set up the initial debugscript if specified */ - name = machine.options().debug_script(); + const char* name = m_machine.options().debug_script(); if (name[0] != 0) - debug_cpu_source_script(machine, name); + m_cpu.source_script(name); - cheat.cpu[0] = cheat.cpu[1] = 0; + m_cheat.cpu[0] = m_cheat.cpu[1] = 0; } - -/*------------------------------------------------- - debug_command_exit - exit-time cleanup --------------------------------------------------*/ - -static void debug_command_exit(running_machine &machine) -{ -} - - - -/*************************************************************************** - GLOBAL FUNCTIONS -***************************************************************************/ - /*------------------------------------------------- execute_min - return the minimum of two values -------------------------------------------------*/ -static UINT64 execute_min(symbol_table &table, void *ref, int params, const UINT64 *param) +UINT64 debugger_commands::execute_min(symbol_table &table, void *ref, int params, const UINT64 *param) { return (param[0] < param[1]) ? param[0] : param[1]; } @@ -447,7 +290,7 @@ static UINT64 execute_min(symbol_table &table, void *ref, int params, const UINT execute_max - return the maximum of two values -------------------------------------------------*/ -static UINT64 execute_max(symbol_table &table, void *ref, int params, const UINT64 *param) +UINT64 debugger_commands::execute_max(symbol_table &table, void *ref, int params, const UINT64 *param) { return (param[0] > param[1]) ? param[0] : param[1]; } @@ -457,7 +300,7 @@ static UINT64 execute_max(symbol_table &table, void *ref, int params, const UINT execute_if - if (a) return b; else return c; -------------------------------------------------*/ -static UINT64 execute_if(symbol_table &table, void *ref, int params, const UINT64 *param) +UINT64 debugger_commands::execute_if(symbol_table &table, void *ref, int params, const UINT64 *param) { return param[0] ? param[1] : param[2]; } @@ -472,7 +315,7 @@ static UINT64 execute_if(symbol_table &table, void *ref, int params, const UINT6 global_get - symbol table getter for globals -------------------------------------------------*/ -static UINT64 global_get(symbol_table &table, void *ref) +UINT64 debugger_commands::global_get(symbol_table &table, void *ref) { global_entry *global = (global_entry *)ref; switch (global->size) @@ -490,7 +333,7 @@ static UINT64 global_get(symbol_table &table, void *ref) global_set - symbol table setter for globals -------------------------------------------------*/ -static void global_set(symbol_table &table, void *ref, UINT64 value) +void debugger_commands::global_set(symbol_table &table, void *ref, UINT64 value) { global_entry *global = (global_entry *)ref; switch (global->size) @@ -509,106 +352,104 @@ static void global_set(symbol_table &table, void *ref, UINT64 value) ***************************************************************************/ /*------------------------------------------------- - debug_command_parameter_number - validates a + validate_number_parameter - validates a number parameter -------------------------------------------------*/ -int debug_command_parameter_number(running_machine &machine, const char *param, UINT64 *result) +bool debugger_commands::validate_number_parameter(const char *param, UINT64 *result) { /* nullptr parameter does nothing and returns no error */ if (param == nullptr) - return TRUE; + return true; /* evaluate the expression; success if no error */ try { - parsed_expression expression(debug_cpu_get_visible_symtable(machine), param, result); - return TRUE; + parsed_expression expression(m_cpu.get_visible_symtable(), param, result); + return true; } catch (expression_error &error) { /* print an error pointing to the character that caused it */ - debug_console_printf(machine, "Error in expression: %s\n", param); - debug_console_printf(machine, " %*s^", error.offset(), ""); - debug_console_printf(machine, "%s\n", error.code_string()); - return FALSE; + m_console.printf("Error in expression: %s\n", param); + m_console.printf(" %*s^", error.offset(), ""); + m_console.printf("%s\n", error.code_string()); + return false; } } /*------------------------------------------------- - debug_command_parameter_cpu - validates a + validate_cpu_parameter - validates a parameter as a cpu -------------------------------------------------*/ -int debug_command_parameter_cpu(running_machine &machine, const char *param, device_t **result) +bool debugger_commands::validate_cpu_parameter(const char *param, device_t **result) { - UINT64 cpunum; - /* if no parameter, use the visible CPU */ if (param == nullptr) { - *result = debug_cpu_get_visible_cpu(machine); + *result = m_cpu.get_visible_cpu(); if (*result == nullptr) { - debug_console_printf(machine, "No valid CPU is currently selected\n"); - return FALSE; + m_console.printf("No valid CPU is currently selected\n"); + return false; } - return TRUE; + return true; } /* first look for a tag match */ - *result = machine.device(param); + *result = m_machine.device(param); if (*result != nullptr) - return TRUE; + return true; /* then evaluate as an expression; on an error assume it was a tag */ + UINT64 cpunum; try { - parsed_expression expression(debug_cpu_get_visible_symtable(machine), param, &cpunum); + parsed_expression expression(m_cpu.get_visible_symtable(), param, &cpunum); } catch (expression_error &) { - debug_console_printf(machine, "Unable to find CPU '%s'\n", param); - return FALSE; + m_console.printf("Unable to find CPU '%s'\n", param); + return false; } /* if we got a valid one, return */ - device_execute_interface *exec = execute_interface_iterator(machine.root_device()).byindex(cpunum); + device_execute_interface *exec = execute_interface_iterator(m_machine.root_device()).byindex(cpunum); if (exec != nullptr) { *result = &exec->device(); - return TRUE; + return true; } /* if out of range, complain */ - debug_console_printf(machine, "Invalid CPU index %d\n", (int)cpunum); - return FALSE; + m_console.printf("Invalid CPU index %d\n", (int)cpunum); + return false; } /*------------------------------------------------- - debug_command_parameter_cpu_space - validates + validate_cpu_space_parameter - validates a parameter as a cpu and retrieves the given address space -------------------------------------------------*/ -int debug_command_parameter_cpu_space(running_machine &machine, const char *param, int spacenum, address_space *&result) +bool debugger_commands::validate_cpu_space_parameter(const char *param, int spacenum, address_space *&result) { - device_t *cpu; - /* first do the standard CPU thing */ - if (!debug_command_parameter_cpu(machine, param, &cpu)) - return FALSE; + device_t *cpu; + if (!validate_cpu_parameter(param, &cpu)) + return false; /* fetch the space pointer */ if (!cpu->memory().has_space(spacenum)) { - debug_console_printf(machine, "No matching memory space found for CPU '%s'\n", cpu->tag()); - return FALSE; + m_console.printf("No matching memory space found for CPU '%s'\n", cpu->tag()); + return false; } result = &cpu->memory().space(spacenum); - return TRUE; + return true; } @@ -617,25 +458,25 @@ int debug_command_parameter_cpu_space(running_machine &machine, const char *para an expression parameter -------------------------------------------------*/ -static int debug_command_parameter_expression(running_machine &machine, const char *param, parsed_expression &result) +bool debugger_commands::debug_command_parameter_expression(const char *param, parsed_expression &result) { /* nullptr parameter does nothing and returns no error */ if (param == nullptr) - return TRUE; + return true; /* parse the expression; success if no error */ try { result.parse(param); - return TRUE; + return true; } catch (expression_error &err) { /* output an error */ - debug_console_printf(machine, "Error in expression: %s\n", param); - debug_console_printf(machine, " %*s^", err.offset(), ""); - debug_console_printf(machine, "%s\n", err.code_string()); - return FALSE; + m_console.printf("Error in expression: %s\n", param); + m_console.printf(" %*s^", err.offset(), ""); + m_console.printf("%s\n", err.code_string()); + return false; } } @@ -645,42 +486,34 @@ static int debug_command_parameter_expression(running_machine &machine, const ch command parameter -------------------------------------------------*/ -static int debug_command_parameter_command(running_machine &machine, const char *param) +bool debugger_commands::debug_command_parameter_command(const char *param) { - CMDERR err; - /* nullptr parameter does nothing and returns no error */ if (param == nullptr) - return TRUE; + return true; /* validate the comment; success if no error */ - err = debug_console_validate_command(machine, param); + CMDERR err = m_console.validate_command(param); if (err == CMDERR_NONE) - return TRUE; + return true; /* output an error */ - debug_console_printf(machine, "Error in command: %s\n", param); - debug_console_printf(machine, " %*s^", CMDERR_ERROR_OFFSET(err), ""); - debug_console_printf(machine, "%s\n", debug_cmderr_to_string(err)); + m_console.printf("Error in command: %s\n", param); + m_console.printf(" %*s^", CMDERR_ERROR_OFFSET(err), ""); + m_console.printf("%s\n", debugger_console::cmderr_to_string(err)); return 0; } - - -/*************************************************************************** - COMMAND HELPERS -***************************************************************************/ - /*------------------------------------------------- execute_help - execute the help command -------------------------------------------------*/ -static void execute_help(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_help(int ref, int params, const char *param[]) { if (params == 0) - debug_console_printf_wrap(machine, 80, "%s\n", debug_get_help("")); + m_console.printf_wrap(80, "%s\n", debug_get_help("")); else - debug_console_printf_wrap(machine, 80, "%s\n", debug_get_help(param[0])); + m_console.printf_wrap(80, "%s\n", debug_get_help(param[0])); } @@ -688,20 +521,18 @@ static void execute_help(running_machine &machine, int ref, int params, const ch execute_print - execute the print command -------------------------------------------------*/ -static void execute_print(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_print(int ref, int params, const char *param[]) { - UINT64 values[MAX_COMMAND_PARAMS]; - int i; - /* validate the other parameters */ - for (i = 0; i < params; i++) - if (!debug_command_parameter_number(machine, param[i], &values[i])) + UINT64 values[MAX_COMMAND_PARAMS]; + for (int i = 0; i < params; i++) + if (!validate_number_parameter(param[i], &values[i])) return; /* then print each one */ - for (i = 0; i < params; i++) - debug_console_printf(machine, "%X", values[i]); - debug_console_printf(machine, "\n"); + for (int i = 0; i < params; i++) + m_console.printf("%X", values[i]); + m_console.printf("\n"); } @@ -709,7 +540,7 @@ static void execute_print(running_machine &machine, int ref, int params, const c mini_printf - safe printf to a buffer -------------------------------------------------*/ -static int mini_printf(running_machine &machine, char *buffer, const char *format, int params, UINT64 *param) +int debugger_commands::mini_printf(char *buffer, const char *format, int params, UINT64 *param) { const char *f = format; char *p = buffer; @@ -762,7 +593,7 @@ static int mini_printf(running_machine &machine, char *buffer, const char *forma case 'x': if (params == 0) { - debug_console_printf(machine, "Not enough parameters for format!\n"); + m_console.printf("Not enough parameters for format!\n"); return 0; } if ((UINT32)(*param >> 32) != 0) @@ -778,7 +609,7 @@ static int mini_printf(running_machine &machine, char *buffer, const char *forma case 'd': if (params == 0) { - debug_console_printf(machine, "Not enough parameters for format!\n"); + m_console.printf("Not enough parameters for format!\n"); return 0; } p += sprintf(p, zerofill ? "%0*d" : "%*d", width, (UINT32)*param); @@ -803,20 +634,18 @@ static int mini_printf(running_machine &machine, char *buffer, const char *forma execute_printf - execute the printf command -------------------------------------------------*/ -static void execute_printf(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_printf(int ref, int params, const char *param[]) { - UINT64 values[MAX_COMMAND_PARAMS]; - char buffer[1024]; - int i; - /* validate the other parameters */ - for (i = 1; i < params; i++) - if (!debug_command_parameter_number(machine, param[i], &values[i])) + UINT64 values[MAX_COMMAND_PARAMS]; + for (int i = 1; i < params; i++) + if (!validate_number_parameter(param[i], &values[i])) return; /* then do a printf */ - if (mini_printf(machine, buffer, param[0], params - 1, &values[1])) - debug_console_printf(machine, "%s\n", buffer); + char buffer[1024]; + if (mini_printf(buffer, param[0], params - 1, &values[1])) + m_console.printf("%s\n", buffer); } @@ -824,20 +653,18 @@ static void execute_printf(running_machine &machine, int ref, int params, const execute_logerror - execute the logerror command -------------------------------------------------*/ -static void execute_logerror(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_logerror(int ref, int params, const char *param[]) { - UINT64 values[MAX_COMMAND_PARAMS]; - char buffer[1024]; - int i; - /* validate the other parameters */ - for (i = 1; i < params; i++) - if (!debug_command_parameter_number(machine, param[i], &values[i])) + UINT64 values[MAX_COMMAND_PARAMS]; + for (int i = 1; i < params; i++) + if (!validate_number_parameter(param[i], &values[i])) return; /* then do a printf */ - if (mini_printf(machine, buffer, param[0], params - 1, &values[1])) - machine.logerror("%s", buffer); + char buffer[1024]; + if (mini_printf(buffer, param[0], params - 1, &values[1])) + m_machine.logerror("%s", buffer); } @@ -845,20 +672,18 @@ static void execute_logerror(running_machine &machine, int ref, int params, cons execute_tracelog - execute the tracelog command -------------------------------------------------*/ -static void execute_tracelog(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_tracelog(int ref, int params, const char *param[]) { - UINT64 values[MAX_COMMAND_PARAMS]; - char buffer[1024]; - int i; - /* validate the other parameters */ - for (i = 1; i < params; i++) - if (!debug_command_parameter_number(machine, param[i], &values[i])) + UINT64 values[MAX_COMMAND_PARAMS]; + for (int i = 1; i < params; i++) + if (!validate_number_parameter(param[i], &values[i])) return; /* then do a printf */ - if (mini_printf(machine, buffer, param[0], params - 1, &values[1])) - debug_cpu_get_visible_cpu(machine)->debug()->trace_printf("%s", buffer); + char buffer[1024]; + if (mini_printf(buffer, param[0], params - 1, &values[1])) + m_cpu.get_visible_cpu()->debug()->trace_printf("%s", buffer); } @@ -866,10 +691,10 @@ static void execute_tracelog(running_machine &machine, int ref, int params, cons execute_quit - execute the quit command -------------------------------------------------*/ -static void execute_quit(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_quit(int ref, int params, const char *param[]) { osd_printf_error("Exited via the debugger\n"); - machine.schedule_exit(); + m_machine.schedule_exit(); } @@ -877,10 +702,10 @@ static void execute_quit(running_machine &machine, int ref, int params, const ch execute_do - execute the do command -------------------------------------------------*/ -static void execute_do(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_do(int ref, int params, const char *param[]) { UINT64 dummy; - debug_command_parameter_number(machine, param[0], &dummy); + validate_number_parameter(param[0], &dummy); } @@ -888,15 +713,14 @@ static void execute_do(running_machine &machine, int ref, int params, const char execute_step - execute the step command -------------------------------------------------*/ -static void execute_step(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_step(int ref, int params, const char *param[]) { + /* if we have a parameter, use it */ UINT64 steps = 1; - - /* if we have a parameter, use it instead */ - if (!debug_command_parameter_number(machine, param[0], &steps)) + if (!validate_number_parameter(param[0], &steps)) return; - debug_cpu_get_visible_cpu(machine)->debug()->single_step(steps); + m_cpu.get_visible_cpu()->debug()->single_step(steps); } @@ -904,15 +728,14 @@ static void execute_step(running_machine &machine, int ref, int params, const ch execute_over - execute the over command -------------------------------------------------*/ -static void execute_over(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_over(int ref, int params, const char *param[]) { + /* if we have a parameter, use it */ UINT64 steps = 1; - - /* if we have a parameter, use it instead */ - if (!debug_command_parameter_number(machine, param[0], &steps)) + if (!validate_number_parameter(param[0], &steps)) return; - debug_cpu_get_visible_cpu(machine)->debug()->single_step_over(steps); + m_cpu.get_visible_cpu()->debug()->single_step_over(steps); } @@ -920,9 +743,9 @@ static void execute_over(running_machine &machine, int ref, int params, const ch execute_out - execute the out command -------------------------------------------------*/ -static void execute_out(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_out(int ref, int params, const char *param[]) { - debug_cpu_get_visible_cpu(machine)->debug()->single_step_out(); + m_cpu.get_visible_cpu()->debug()->single_step_out(); } @@ -930,15 +753,15 @@ static void execute_out(running_machine &machine, int ref, int params, const cha execute_go - execute the go command -------------------------------------------------*/ -static void execute_go(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_go(int ref, int params, const char *param[]) { UINT64 addr = ~0; /* if we have a parameter, use it instead */ - if (!debug_command_parameter_number(machine, param[0], &addr)) + if (!validate_number_parameter(param[0], &addr)) return; - debug_cpu_get_visible_cpu(machine)->debug()->go(addr); + m_cpu.get_visible_cpu()->debug()->go(addr); } @@ -947,9 +770,9 @@ static void execute_go(running_machine &machine, int ref, int params, const char command -------------------------------------------------*/ -static void execute_go_vblank(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_go_vblank(int ref, int params, const char *param[]) { - debug_cpu_get_visible_cpu(machine)->debug()->go_vblank(); + m_cpu.get_visible_cpu()->debug()->go_vblank(); } @@ -957,15 +780,15 @@ static void execute_go_vblank(running_machine &machine, int ref, int params, con execute_go_interrupt - execute the goint command -------------------------------------------------*/ -static void execute_go_interrupt(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_go_interrupt(int ref, int params, const char *param[]) { UINT64 irqline = -1; /* if we have a parameter, use it instead */ - if (!debug_command_parameter_number(machine, param[0], &irqline)) + if (!validate_number_parameter(param[0], &irqline)) return; - debug_cpu_get_visible_cpu(machine)->debug()->go_interrupt(irqline); + m_cpu.get_visible_cpu()->debug()->go_interrupt(irqline); } @@ -973,15 +796,15 @@ static void execute_go_interrupt(running_machine &machine, int ref, int params, execute_go_time - execute the gtime command -------------------------------------------------*/ -static void execute_go_time(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_go_time(int ref, int params, const char *param[]) { UINT64 milliseconds = -1; /* if we have a parameter, use it instead */ - if (!debug_command_parameter_number(machine, param[0], &milliseconds)) + if (!validate_number_parameter(param[0], &milliseconds)) return; - debug_cpu_get_visible_cpu(machine)->debug()->go_milliseconds(milliseconds); + m_cpu.get_visible_cpu()->debug()->go_milliseconds(milliseconds); } @@ -989,9 +812,9 @@ static void execute_go_time(running_machine &machine, int ref, int params, const execute_next - execute the next command -------------------------------------------------*/ -static void execute_next(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_next(int ref, int params, const char *param[]) { - debug_cpu_get_visible_cpu(machine)->debug()->go_next_device(); + m_cpu.get_visible_cpu()->debug()->go_next_device(); } @@ -999,21 +822,21 @@ static void execute_next(running_machine &machine, int ref, int params, const ch execute_focus - execute the focus command -------------------------------------------------*/ -static void execute_focus(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_focus(int ref, int params, const char *param[]) { /* validate params */ device_t *cpu; - if (!debug_command_parameter_cpu(machine, param[0], &cpu)) + if (!validate_cpu_parameter(param[0], &cpu)) return; /* first clear the ignore flag on the focused CPU */ cpu->debug()->ignore(false); /* then loop over CPUs and set the ignore flags on all other CPUs */ - for (device_execute_interface &exec : execute_interface_iterator(machine.root_device())) + for (device_execute_interface &exec : execute_interface_iterator(m_machine.root_device())) if (&exec.device() != cpu) exec.device().debug()->ignore(true); - debug_console_printf(machine, "Now focused on CPU '%s'\n", cpu->tag()); + m_console.printf("Now focused on CPU '%s'\n", cpu->tag()); } @@ -1021,7 +844,7 @@ static void execute_focus(running_machine &machine, int ref, int params, const c execute_ignore - execute the ignore command -------------------------------------------------*/ -static void execute_ignore(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_ignore(int ref, int params, const char *param[]) { /* if there are no parameters, dump the ignore list */ if (params == 0) @@ -1029,7 +852,7 @@ static void execute_ignore(running_machine &machine, int ref, int params, const std::string buffer; /* loop over all executable devices */ - for (device_execute_interface &exec : execute_interface_iterator(machine.root_device())) + for (device_execute_interface &exec : execute_interface_iterator(m_machine.root_device())) /* build up a comma-separated list */ if (!exec.device().debug()->observing()) @@ -1043,7 +866,7 @@ static void execute_ignore(running_machine &machine, int ref, int params, const /* special message for none */ if (buffer.empty()) buffer = string_format("Not currently ignoring any devices"); - debug_console_printf(machine, "%s\n", buffer.c_str()); + m_console.printf("%s\n", buffer.c_str()); } /* otherwise clear the ignore flag on all requested CPUs */ @@ -1053,7 +876,7 @@ static void execute_ignore(running_machine &machine, int ref, int params, const /* validate parameters */ for (int paramnum = 0; paramnum < params; paramnum++) - if (!debug_command_parameter_cpu(machine, param[paramnum], &devicelist[paramnum])) + if (!validate_cpu_parameter(param[paramnum], &devicelist[paramnum])) return; /* set the ignore flags */ @@ -1061,7 +884,7 @@ static void execute_ignore(running_machine &machine, int ref, int params, const { /* make sure this isn't the last live CPU */ bool gotone = false; - for (device_execute_interface &exec : execute_interface_iterator(machine.root_device())) + for (device_execute_interface &exec : execute_interface_iterator(m_machine.root_device())) if (&exec.device() != devicelist[paramnum] && exec.device().debug()->observing()) { gotone = true; @@ -1069,12 +892,12 @@ static void execute_ignore(running_machine &machine, int ref, int params, const } if (!gotone) { - debug_console_printf(machine, "Can't ignore all devices!\n"); + m_console.printf("Can't ignore all devices!\n"); return; } devicelist[paramnum]->debug()->ignore(true); - debug_console_printf(machine, "Now ignoring device '%s'\n", devicelist[paramnum]->tag()); + m_console.printf("Now ignoring device '%s'\n", devicelist[paramnum]->tag()); } } } @@ -1084,7 +907,7 @@ static void execute_ignore(running_machine &machine, int ref, int params, const execute_observe - execute the observe command -------------------------------------------------*/ -static void execute_observe(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_observe(int ref, int params, const char *param[]) { /* if there are no parameters, dump the ignore list */ if (params == 0) @@ -1092,7 +915,7 @@ static void execute_observe(running_machine &machine, int ref, int params, const std::string buffer; /* loop over all executable devices */ - for (device_execute_interface &exec : execute_interface_iterator(machine.root_device())) + for (device_execute_interface &exec : execute_interface_iterator(m_machine.root_device())) /* build up a comma-separated list */ if (exec.device().debug()->observing()) @@ -1106,7 +929,7 @@ static void execute_observe(running_machine &machine, int ref, int params, const /* special message for none */ if (buffer.empty()) buffer = string_format("Not currently observing any devices"); - debug_console_printf(machine, "%s\n", buffer.c_str()); + m_console.printf("%s\n", buffer.c_str()); } /* otherwise set the ignore flag on all requested CPUs */ @@ -1116,14 +939,14 @@ static void execute_observe(running_machine &machine, int ref, int params, const /* validate parameters */ for (int paramnum = 0; paramnum < params; paramnum++) - if (!debug_command_parameter_cpu(machine, param[paramnum], &devicelist[paramnum])) + if (!validate_cpu_parameter(param[paramnum], &devicelist[paramnum])) return; /* clear the ignore flags */ for (int paramnum = 0; paramnum < params; paramnum++) { devicelist[paramnum]->debug()->ignore(false); - debug_console_printf(machine, "Now observing device '%s'\n", devicelist[paramnum]->tag()); + m_console.printf("Now observing device '%s'\n", devicelist[paramnum]->tag()); } } } @@ -1133,23 +956,23 @@ static void execute_observe(running_machine &machine, int ref, int params, const execute_comment - add a comment to a line -------------------------------------------------*/ -static void execute_comment_add(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_comment_add(int ref, int params, const char *param[]) { device_t *cpu; UINT64 address; /* param 1 is the address for the comment */ - if (!debug_command_parameter_number(machine, param[0], &address)) + if (!validate_number_parameter(param[0], &address)) return; /* CPU parameter is implicit */ - if (!debug_command_parameter_cpu(machine, nullptr, &cpu)) + if (!validate_cpu_parameter(nullptr, &cpu)) return; /* make sure param 2 exists */ if (strlen(param[1]) == 0) { - debug_console_printf(machine, "Error : comment text empty\n"); + m_console.printf("Error : comment text empty\n"); return; } @@ -1163,17 +986,17 @@ static void execute_comment_add(running_machine &machine, int ref, int params, c execute_comment_del - remove a comment from an addr --------------------------------------------------------*/ -static void execute_comment_del(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_comment_del(int ref, int params, const char *param[]) { device_t *cpu; UINT64 address; /* param 1 can either be a command or the address for the comment */ - if (!debug_command_parameter_number(machine, param[0], &address)) + if (!validate_number_parameter(param[0], &address)) return; /* CPU parameter is implicit */ - if (!debug_command_parameter_cpu(machine, nullptr, &cpu)) + if (!validate_cpu_parameter(nullptr, &cpu)) return; /* If it's a number, it must be an address */ @@ -1189,10 +1012,10 @@ static void execute_comment_del(running_machine &machine, int ref, int params, c * */ -static void execute_comment_list(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_comment_list(int ref, int params, const char *param[]) { - if (debug_comment_load(machine,false) == false) - debug_console_printf(machine, "Error while parsing XML file\n"); + if (!m_machine.debugger().cpu().comment_load(false)) + m_console.printf("Error while parsing XML file\n"); } /** @@ -1201,22 +1024,22 @@ static void execute_comment_list(running_machine &machine, int ref, int params, * */ -static void execute_comment_commit(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_comment_commit(int ref, int params, const char *param[]) { - execute_comment_add(machine,ref,params,param); - execute_comment_save(machine,ref,params,param); + execute_comment_add(ref, params, param); + execute_comment_save(ref, params, param); } /*------------------------------------------------- execute_comment - add a comment to a line -------------------------------------------------*/ -static void execute_comment_save(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_comment_save(int ref, int params, const char *param[]) { - if (debug_comment_save(machine)) - debug_console_printf(machine, "Comment successfully saved\n"); + if (m_cpu.comment_save()) + m_console.printf("Comment successfully saved\n"); else - debug_console_printf(machine, "Comment not saved\n"); + m_console.printf("Comment not saved\n"); } // TODO: add color hex editing capabilities for comments, see below for more info @@ -1238,7 +1061,7 @@ static void execute_comment_save(running_machine &machine, int ref, int params, command -------------------------------------------------*/ -static void execute_bpset(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_bpset(int ref, int params, const char *param[]) { device_t *cpu; const char *action = nullptr; @@ -1246,25 +1069,25 @@ static void execute_bpset(running_machine &machine, int ref, int params, const c int bpnum; /* CPU is implicit */ - if (!debug_command_parameter_cpu(machine, nullptr, &cpu)) + if (!validate_cpu_parameter(nullptr, &cpu)) return; /* param 1 is the address */ - if (!debug_command_parameter_number(machine, param[0], &address)) + if (!validate_number_parameter(param[0], &address)) return; /* param 2 is the condition */ parsed_expression condition(&cpu->debug()->symtable()); - if (!debug_command_parameter_expression(machine, param[1], condition)) + if (!debug_command_parameter_expression(param[1], condition)) return; /* param 3 is the action */ - if (!debug_command_parameter_command(machine, action = param[2])) + if (!debug_command_parameter_command(action = param[2])) return; /* set the breakpoint */ bpnum = cpu->debug()->breakpoint_set(address, (condition.is_empty()) ? nullptr : condition.original_string(), action); - debug_console_printf(machine, "Breakpoint %X set\n", bpnum); + m_console.printf("Breakpoint %X set\n", bpnum); } @@ -1273,31 +1096,31 @@ static void execute_bpset(running_machine &machine, int ref, int params, const c clear command -------------------------------------------------*/ -static void execute_bpclear(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_bpclear(int ref, int params, const char *param[]) { UINT64 bpindex; /* if 0 parameters, clear all */ if (params == 0) { - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->breakpoint_clear_all(); - debug_console_printf(machine, "Cleared all breakpoints\n"); + m_console.printf("Cleared all breakpoints\n"); } /* otherwise, clear the specific one */ - else if (!debug_command_parameter_number(machine, param[0], &bpindex)) + else if (!validate_number_parameter(param[0], &bpindex)) return; else { bool found = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->breakpoint_clear(bpindex)) found = true; if (found) - debug_console_printf(machine, "Breakpoint %X cleared\n", (UINT32)bpindex); + m_console.printf("Breakpoint %X cleared\n", (UINT32)bpindex); else - debug_console_printf(machine, "Invalid breakpoint number %X\n", (UINT32)bpindex); + m_console.printf("Invalid breakpoint number %X\n", (UINT32)bpindex); } } @@ -1307,34 +1130,34 @@ static void execute_bpclear(running_machine &machine, int ref, int params, const disable/enable commands -------------------------------------------------*/ -static void execute_bpdisenable(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_bpdisenable(int ref, int params, const char *param[]) { UINT64 bpindex; /* if 0 parameters, clear all */ if (params == 0) { - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->breakpoint_enable_all(ref); if (ref == 0) - debug_console_printf(machine, "Disabled all breakpoints\n"); + m_console.printf("Disabled all breakpoints\n"); else - debug_console_printf(machine, "Enabled all breakpoints\n"); + m_console.printf("Enabled all breakpoints\n"); } /* otherwise, clear the specific one */ - else if (!debug_command_parameter_number(machine, param[0], &bpindex)) + else if (!validate_number_parameter(param[0], &bpindex)) return; else { bool found = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->breakpoint_enable(bpindex, ref)) found = true; if (found) - debug_console_printf(machine, "Breakpoint %X %s\n", (UINT32)bpindex, ref ? "enabled" : "disabled"); + m_console.printf("Breakpoint %X %s\n", (UINT32)bpindex, ref ? "enabled" : "disabled"); else - debug_console_printf(machine, "Invalid breakpoint number %X\n", (UINT32)bpindex); + m_console.printf("Invalid breakpoint number %X\n", (UINT32)bpindex); } } @@ -1344,16 +1167,16 @@ static void execute_bpdisenable(running_machine &machine, int ref, int params, c command -------------------------------------------------*/ -static void execute_bplist(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_bplist(int ref, int params, const char *param[]) { int printed = 0; std::string buffer; /* loop over all CPUs */ - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->breakpoint_first() != nullptr) { - debug_console_printf(machine, "Device '%s' breakpoints:\n", device.tag()); + m_console.printf("Device '%s' breakpoints:\n", device.tag()); /* loop over the breakpoints */ for (device_debug::breakpoint *bp = device.debug()->breakpoint_first(); bp != nullptr; bp = bp->next()) @@ -1363,13 +1186,13 @@ static void execute_bplist(running_machine &machine, int ref, int params, const buffer.append(string_format(" if %s", bp->condition())); if (std::string(bp->action()).compare("") != 0) buffer.append(string_format(" do %s", bp->action())); - debug_console_printf(machine, "%s\n", buffer.c_str()); + m_console.printf("%s\n", buffer.c_str()); printed++; } } if (printed == 0) - debug_console_printf(machine, "No breakpoints currently installed\n"); + m_console.printf("No breakpoints currently installed\n"); } @@ -1378,7 +1201,7 @@ static void execute_bplist(running_machine &machine, int ref, int params, const command -------------------------------------------------*/ -static void execute_wpset(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_wpset(int ref, int params, const char *param[]) { address_space *space; const char *action = nullptr; @@ -1387,15 +1210,15 @@ static void execute_wpset(running_machine &machine, int ref, int params, const c int wpnum; /* CPU is implicit */ - if (!debug_command_parameter_cpu_space(machine, nullptr, ref, space)) + if (!validate_cpu_space_parameter(nullptr, ref, space)) return; /* param 1 is the address */ - if (!debug_command_parameter_number(machine, param[0], &address)) + if (!validate_number_parameter(param[0], &address)) return; /* param 2 is the length */ - if (!debug_command_parameter_number(machine, param[1], &length)) + if (!validate_number_parameter(param[1], &length)) return; /* param 3 is the type */ @@ -1407,22 +1230,22 @@ static void execute_wpset(running_machine &machine, int ref, int params, const c type = WATCHPOINT_READWRITE; else { - debug_console_printf(machine, "Invalid watchpoint type: expected r, w, or rw\n"); + m_console.printf("Invalid watchpoint type: expected r, w, or rw\n"); return; } /* param 4 is the condition */ parsed_expression condition(&space->device().debug()->symtable()); - if (!debug_command_parameter_expression(machine, param[3], condition)) + if (!debug_command_parameter_expression(param[3], condition)) return; /* param 5 is the action */ - if (!debug_command_parameter_command(machine, action = param[4])) + if (!debug_command_parameter_command(action = param[4])) return; /* set the watchpoint */ wpnum = space->device().debug()->watchpoint_set(*space, type, address, length, (condition.is_empty()) ? nullptr : condition.original_string(), action); - debug_console_printf(machine, "Watchpoint %X set\n", wpnum); + m_console.printf("Watchpoint %X set\n", wpnum); } @@ -1431,31 +1254,31 @@ static void execute_wpset(running_machine &machine, int ref, int params, const c clear command -------------------------------------------------*/ -static void execute_wpclear(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_wpclear(int ref, int params, const char *param[]) { UINT64 wpindex; /* if 0 parameters, clear all */ if (params == 0) { - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->watchpoint_clear_all(); - debug_console_printf(machine, "Cleared all watchpoints\n"); + m_console.printf("Cleared all watchpoints\n"); } /* otherwise, clear the specific one */ - else if (!debug_command_parameter_number(machine, param[0], &wpindex)) + else if (!validate_number_parameter(param[0], &wpindex)) return; else { bool found = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->watchpoint_clear(wpindex)) found = true; if (found) - debug_console_printf(machine, "Watchpoint %X cleared\n", (UINT32)wpindex); + m_console.printf("Watchpoint %X cleared\n", (UINT32)wpindex); else - debug_console_printf(machine, "Invalid watchpoint number %X\n", (UINT32)wpindex); + m_console.printf("Invalid watchpoint number %X\n", (UINT32)wpindex); } } @@ -1465,34 +1288,34 @@ static void execute_wpclear(running_machine &machine, int ref, int params, const disable/enable commands -------------------------------------------------*/ -static void execute_wpdisenable(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_wpdisenable(int ref, int params, const char *param[]) { UINT64 wpindex; /* if 0 parameters, clear all */ if (params == 0) { - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->watchpoint_enable_all(ref); if (ref == 0) - debug_console_printf(machine, "Disabled all watchpoints\n"); + m_console.printf("Disabled all watchpoints\n"); else - debug_console_printf(machine, "Enabled all watchpoints\n"); + m_console.printf("Enabled all watchpoints\n"); } /* otherwise, clear the specific one */ - else if (!debug_command_parameter_number(machine, param[0], &wpindex)) + else if (!validate_number_parameter(param[0], &wpindex)) return; else { bool found = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->watchpoint_enable(wpindex, ref)) found = true; if (found) - debug_console_printf(machine, "Watchpoint %X %s\n", (UINT32)wpindex, ref ? "enabled" : "disabled"); + m_console.printf("Watchpoint %X %s\n", (UINT32)wpindex, ref ? "enabled" : "disabled"); else - debug_console_printf(machine, "Invalid watchpoint number %X\n", (UINT32)wpindex); + m_console.printf("Invalid watchpoint number %X\n", (UINT32)wpindex); } } @@ -1502,19 +1325,19 @@ static void execute_wpdisenable(running_machine &machine, int ref, int params, c command -------------------------------------------------*/ -static void execute_wplist(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_wplist(int ref, int params, const char *param[]) { int printed = 0; std::string buffer; /* loop over all CPUs */ - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) for (address_spacenum spacenum = AS_0; spacenum < ADDRESS_SPACES; ++spacenum) if (device.debug()->watchpoint_first(spacenum) != nullptr) { static const char *const types[] = { "unkn ", "read ", "write", "r/w " }; - debug_console_printf(machine, "Device '%s' %s space watchpoints:\n", device.tag(), + m_console.printf("Device '%s' %s space watchpoints:\n", device.tag(), device.debug()->watchpoint_first(spacenum)->space().name()); /* loop over the watchpoints */ @@ -1528,13 +1351,13 @@ static void execute_wplist(running_machine &machine, int ref, int params, const buffer.append(string_format(" if %s", wp->condition())); if (std::string(wp->action()).compare("") != 0) buffer.append(string_format(" do %s", wp->action())); - debug_console_printf(machine, "%s\n", buffer.c_str()); + m_console.printf("%s\n", buffer.c_str()); printed++; } } if (printed == 0) - debug_console_printf(machine, "No watchpoints currently installed\n"); + m_console.printf("No watchpoints currently installed\n"); } @@ -1543,28 +1366,28 @@ static void execute_wplist(running_machine &machine, int ref, int params, const command -------------------------------------------------*/ -static void execute_rpset(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_rpset(int ref, int params, const char *param[]) { device_t *cpu; const char *action = nullptr; int bpnum; /* CPU is implicit */ - if (!debug_command_parameter_cpu(machine, nullptr, &cpu)) + if (!validate_cpu_parameter(nullptr, &cpu)) return; /* param 1 is the condition */ parsed_expression condition(&cpu->debug()->symtable()); - if (!debug_command_parameter_expression(machine, param[0], condition)) + if (!debug_command_parameter_expression(param[0], condition)) return; /* param 2 is the action */ - if (!debug_command_parameter_command(machine, action = param[1])) + if (!debug_command_parameter_command(action = param[1])) return; /* set the breakpoint */ bpnum = cpu->debug()->registerpoint_set(condition.original_string(), action); - debug_console_printf(machine, "Registerpoint %X set\n", bpnum); + m_console.printf("Registerpoint %X set\n", bpnum); } @@ -1573,31 +1396,31 @@ static void execute_rpset(running_machine &machine, int ref, int params, const c clear command -------------------------------------------------*/ -static void execute_rpclear(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_rpclear(int ref, int params, const char *param[]) { UINT64 rpindex; /* if 0 parameters, clear all */ if (params == 0) { - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->registerpoint_clear_all(); - debug_console_printf(machine, "Cleared all registerpoints\n"); + m_console.printf("Cleared all registerpoints\n"); } /* otherwise, clear the specific one */ - else if (!debug_command_parameter_number(machine, param[0], &rpindex)) + else if (!validate_number_parameter(param[0], &rpindex)) return; else { bool found = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->registerpoint_clear(rpindex)) found = true; if (found) - debug_console_printf(machine, "Registerpoint %X cleared\n", (UINT32)rpindex); + m_console.printf("Registerpoint %X cleared\n", (UINT32)rpindex); else - debug_console_printf(machine, "Invalid registerpoint number %X\n", (UINT32)rpindex); + m_console.printf("Invalid registerpoint number %X\n", (UINT32)rpindex); } } @@ -1607,34 +1430,34 @@ static void execute_rpclear(running_machine &machine, int ref, int params, const disable/enable commands -------------------------------------------------*/ -static void execute_rpdisenable(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_rpdisenable(int ref, int params, const char *param[]) { UINT64 rpindex; /* if 0 parameters, clear all */ if (params == 0) { - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->registerpoint_enable_all(ref); if (ref == 0) - debug_console_printf(machine, "Disabled all registerpoints\n"); + m_console.printf("Disabled all registerpoints\n"); else - debug_console_printf(machine, "Enabled all registeroints\n"); + m_console.printf("Enabled all registeroints\n"); } /* otherwise, clear the specific one */ - else if (!debug_command_parameter_number(machine, param[0], &rpindex)) + else if (!validate_number_parameter(param[0], &rpindex)) return; else { bool found = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->registerpoint_enable(rpindex, ref)) found = true; if (found) - debug_console_printf(machine, "Registerpoint %X %s\n", (UINT32)rpindex, ref ? "enabled" : "disabled"); + m_console.printf("Registerpoint %X %s\n", (UINT32)rpindex, ref ? "enabled" : "disabled"); else - debug_console_printf(machine, "Invalid registerpoint number %X\n", (UINT32)rpindex); + m_console.printf("Invalid registerpoint number %X\n", (UINT32)rpindex); } } @@ -1644,16 +1467,16 @@ static void execute_rpdisenable(running_machine &machine, int ref, int params, c command -------------------------------------------------*/ -static void execute_rplist(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_rplist(int ref, int params, const char *param[]) { int printed = 0; std::string buffer; /* loop over all CPUs */ - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->registerpoint_first() != nullptr) { - debug_console_printf(machine, "Device '%s' registerpoints:\n", device.tag()); + m_console.printf("Device '%s' registerpoints:\n", device.tag()); /* loop over the breakpoints */ for (device_debug::registerpoint *rp = device.debug()->registerpoint_first(); rp != nullptr; rp = rp->next()) @@ -1661,13 +1484,13 @@ static void execute_rplist(running_machine &machine, int ref, int params, const buffer = string_format("%c%4X if %s", rp->enabled() ? ' ' : 'D', rp->index(), rp->condition()); if (rp->action() != nullptr) buffer.append(string_format(" do %s", rp->action())); - debug_console_printf(machine, "%s\n", buffer.c_str()); + m_console.printf("%s\n", buffer.c_str()); printed++; } } if (printed == 0) - debug_console_printf(machine, "No registerpoints currently installed\n"); + m_console.printf("No registerpoints currently installed\n"); } @@ -1676,7 +1499,7 @@ static void execute_rplist(running_machine &machine, int ref, int params, const command -------------------------------------------------*/ -static void execute_hotspot(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_hotspot(int ref, int params, const char *param[]) { /* if no params, and there are live hotspots, clear them */ if (params == 0) @@ -1684,11 +1507,11 @@ static void execute_hotspot(running_machine &machine, int ref, int params, const bool cleared = false; /* loop over CPUs and find live spots */ - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug()->hotspot_tracking_enabled()) { device.debug()->hotspot_track(0, 0); - debug_console_printf(machine, "Cleared hotspot tracking on CPU '%s'\n", device.tag()); + m_console.printf("Cleared hotspot tracking on CPU '%s'\n", device.tag()); cleared = true; } @@ -1699,18 +1522,18 @@ static void execute_hotspot(running_machine &machine, int ref, int params, const /* extract parameters */ device_t *device = nullptr; - if (!debug_command_parameter_cpu(machine, (params > 0) ? param[0] : nullptr, &device)) + if (!validate_cpu_parameter((params > 0) ? param[0] : nullptr, &device)) return; UINT64 count = 64; - if (!debug_command_parameter_number(machine, param[1], &count)) + if (!validate_number_parameter(param[1], &count)) return; UINT64 threshhold = 250; - if (!debug_command_parameter_number(machine, param[2], &threshhold)) + if (!validate_number_parameter(param[2], &threshhold)) return; /* attempt to install */ device->debug()->hotspot_track(count, threshhold); - debug_console_printf(machine, "Now tracking hotspots on CPU '%s' using %d slots with a threshold of %d\n", device->tag(), (int)count, (int)threshhold); + m_console.printf("Now tracking hotspots on CPU '%s' using %d slots with a threshold of %d\n", device->tag(), (int)count, (int)threshhold); } @@ -1718,11 +1541,11 @@ static void execute_hotspot(running_machine &machine, int ref, int params, const execute_statesave - execute the statesave command -------------------------------------------------*/ -static void execute_statesave(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_statesave(int ref, int params, const char *param[]) { std::string filename(param[0]); - machine.immediate_save(filename.c_str()); - debug_console_printf(machine, "State save attempted. Please refer to window message popup for results.\n"); + m_machine.immediate_save(filename.c_str()); + m_console.printf("State save attempted. Please refer to window message popup for results.\n"); } @@ -1730,18 +1553,18 @@ static void execute_statesave(running_machine &machine, int ref, int params, con execute_stateload - execute the stateload command -------------------------------------------------*/ -static void execute_stateload(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_stateload(int ref, int params, const char *param[]) { std::string filename(param[0]); - machine.immediate_load(filename.c_str()); + m_machine.immediate_load(filename.c_str()); // Clear all PC & memory tracks - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) { device.debug()->track_pc_data_clear(); device.debug()->track_mem_data_clear(); } - debug_console_printf(machine, "State load attempted. Please refer to window message popup for results.\n"); + m_console.printf("State load attempted. Please refer to window message popup for results.\n"); } @@ -1749,7 +1572,7 @@ static void execute_stateload(running_machine &machine, int ref, int params, con execute_save - execute the save command -------------------------------------------------*/ -static void execute_save(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_save(int ref, int params, const char *param[]) { UINT64 offset, endoffset, length; address_space *space; @@ -1757,11 +1580,11 @@ static void execute_save(running_machine &machine, int ref, int params, const ch UINT64 i; /* validate parameters */ - if (!debug_command_parameter_number(machine, param[1], &offset)) + if (!validate_number_parameter(param[1], &offset)) return; - if (!debug_command_parameter_number(machine, param[2], &length)) + if (!validate_number_parameter(param[2], &length)) return; - if (!debug_command_parameter_cpu_space(machine, (params > 3) ? param[3] : nullptr, ref, space)) + if (!validate_cpu_space_parameter((params > 3) ? param[3] : nullptr, ref, space)) return; /* determine the addresses to write */ @@ -1772,20 +1595,20 @@ static void execute_save(running_machine &machine, int ref, int params, const ch f = fopen(param[0], "wb"); if (!f) { - debug_console_printf(machine, "Error opening file '%s'\n", param[0]); + m_console.printf("Error opening file '%s'\n", param[0]); return; } /* now write the data out */ for (i = offset; i <= endoffset; i++) { - UINT8 byte = debug_read_byte(*space, i, TRUE); + UINT8 byte = m_cpu.read_byte(*space, i, TRUE); fwrite(&byte, 1, 1, f); } /* close the file */ fclose(f); - debug_console_printf(machine, "Data saved successfully\n"); + m_console.printf("Data saved successfully\n"); } @@ -1793,7 +1616,7 @@ static void execute_save(running_machine &machine, int ref, int params, const ch execute_load - execute the load command -------------------------------------------------*/ -static void execute_load(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_load(int ref, int params, const char *param[]) { UINT64 offset, endoffset, length; address_space *space; @@ -1801,11 +1624,11 @@ static void execute_load(running_machine &machine, int ref, int params, const ch UINT64 i; /* validate parameters */ - if (!debug_command_parameter_number(machine, param[1], &offset)) + if (!validate_number_parameter(param[1], &offset)) return; - if (!debug_command_parameter_number(machine, param[2], &length)) + if (!validate_number_parameter(param[2], &length)) return; - if (!debug_command_parameter_cpu_space(machine, (params > 3) ? param[3] : nullptr, ref, space)) + if (!validate_cpu_space_parameter((params > 3) ? param[3] : nullptr, ref, space)) return; /* determine the addresses to read */ @@ -1816,7 +1639,7 @@ static void execute_load(running_machine &machine, int ref, int params, const ch f = fopen(param[0], "rb"); if (!f) { - debug_console_printf(machine, "Error opening file '%s'\n", param[0]); + m_console.printf("Error opening file '%s'\n", param[0]); return; } @@ -1828,14 +1651,14 @@ static void execute_load(running_machine &machine, int ref, int params, const ch /* check if end of file has been reached and stop loading if it has */ if (feof(f)) break; - debug_write_byte(*space, i, byte, TRUE); + m_cpu.write_byte(*space, i, byte, true); } /* close the file */ fclose(f); if ( i == offset) - debug_console_printf(machine, "Length specified too large, load failed\n"); + m_console.printf("Length specified too large, load failed\n"); else - debug_console_printf(machine, "Data loaded successfully to memory : 0x%X to 0x%X\n", offset, i-1); + m_console.printf("Data loaded successfully to memory : 0x%X to 0x%X\n", offset, i-1); } @@ -1843,23 +1666,27 @@ static void execute_load(running_machine &machine, int ref, int params, const ch execute_dump - execute the dump command -------------------------------------------------*/ -static void execute_dump(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_dump(int ref, int params, const char *param[]) { - UINT64 offset, endoffset, length, width = 0, ascii = 1; - address_space *space; - FILE *f; - UINT64 i, j; - /* validate parameters */ - if (!debug_command_parameter_number(machine, param[1], &offset)) + UINT64 offset; + if (!validate_number_parameter(param[1], &offset)) return; - if (!debug_command_parameter_number(machine, param[2], &length)) + + UINT64 length; + if (!validate_number_parameter(param[2], &length)) return; - if (!debug_command_parameter_number(machine, param[3], &width)) + + UINT64 width = 0; + if (!validate_number_parameter(param[3], &width)) return; - if (!debug_command_parameter_number(machine, param[4], &ascii)) + + UINT64 ascii = 1; + if (!validate_number_parameter(param[4], &ascii)) return; - if (!debug_command_parameter_cpu_space(machine, (params > 5) ? param[5] : nullptr, ref, space)) + + address_space *space; + if (!validate_cpu_space_parameter((params > 5) ? param[5] : nullptr, ref, space)) return; /* further validation */ @@ -1869,24 +1696,24 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch width = space->address_to_byte(1); if (width != 1 && width != 2 && width != 4 && width != 8) { - debug_console_printf(machine, "Invalid width! (must be 1,2,4 or 8)\n"); + m_console.printf("Invalid width! (must be 1,2,4 or 8)\n"); return; } - endoffset = space->address_to_byte(offset + length - 1) & space->bytemask(); + UINT64 endoffset = space->address_to_byte(offset + length - 1) & space->bytemask(); offset = space->address_to_byte(offset) & space->bytemask(); /* open the file */ - f = fopen(param[0], "w"); + FILE* f = fopen(param[0], "w"); if (!f) { - debug_console_printf(machine, "Error opening file '%s'\n", param[0]); + m_console.printf("Error opening file '%s'\n", param[0]); return; } /* now write the data out */ util::ovectorstream output; output.reserve(200); - for (i = offset; i <= endoffset; i += 16) + for (UINT64 i = offset; i <= endoffset; i += 16) { output.clear(); output.rdbuf()->clear(); @@ -1895,18 +1722,20 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch util::stream_format(output, "%0*X: ", space->logaddrchars(), (UINT32)space->byte_to_address(i)); /* print the bytes */ - for (j = 0; j < 16; j += width) + for (UINT64 j = 0; j < 16; j += width) { if (i + j <= endoffset) { offs_t curaddr = i + j; - if (debug_cpu_translate(*space, TRANSLATE_READ_DEBUG, &curaddr)) + if (m_cpu.translate(*space, TRANSLATE_READ_DEBUG, &curaddr)) { - UINT64 value = debug_read_memory(*space, i + j, width, TRUE); + UINT64 value = m_cpu.read_memory(*space, i + j, width, TRUE); util::stream_format(output, " %0*X", width * 2, value); } else + { util::stream_format(output, " %.*s", width * 2, "****************"); + } } else util::stream_format(output, " %*s", width * 2, ""); @@ -1916,16 +1745,18 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch if (ascii) { util::stream_format(output, " "); - for (j = 0; j < 16 && (i + j) <= endoffset; j++) + for (UINT64 j = 0; j < 16 && (i + j) <= endoffset; j++) { offs_t curaddr = i + j; - if (debug_cpu_translate(*space, TRANSLATE_READ_DEBUG, &curaddr)) + if (m_cpu.translate(*space, TRANSLATE_READ_DEBUG, &curaddr)) { - UINT8 byte = debug_read_byte(*space, i + j, TRUE); + UINT8 byte = m_cpu.read_byte(*space, i + j, TRUE); util::stream_format(output, "%c", (byte >= 32 && byte < 127) ? byte : '.'); } else + { util::stream_format(output, " "); + } } } @@ -1936,7 +1767,7 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch /* close the file */ fclose(f); - debug_console_printf(machine, "Data dumped successfully\n"); + m_console.printf("Data dumped successfully\n"); } @@ -1944,7 +1775,7 @@ static void execute_dump(running_machine &machine, int ref, int params, const ch execute_cheatinit - initialize the cheat system -------------------------------------------------*/ -static void execute_cheatinit(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_cheatinit(int ref, int params, const char *param[]) { UINT64 offset, length = 0, real_length = 0; address_space *space; @@ -1957,46 +1788,46 @@ static void execute_cheatinit(running_machine &machine, int ref, int params, con memset(cheat_region, 0, sizeof(cheat_region)); /* validate parameters */ - if (!debug_command_parameter_cpu_space(machine, (params > 3) ? param[3] : nullptr, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter((params > 3) ? param[3] : nullptr, AS_PROGRAM, space)) return; if (ref == 0) { - cheat.width = 1; - cheat.signed_cheat = FALSE; - cheat.swapped_cheat = FALSE; + m_cheat.width = 1; + m_cheat.signed_cheat = FALSE; + m_cheat.swapped_cheat = FALSE; if (params > 0) { char *srtpnt = (char*)param[0]; if (*srtpnt == 's') - cheat.signed_cheat = TRUE; + m_cheat.signed_cheat = TRUE; else if (*srtpnt == 'u') - cheat.signed_cheat = FALSE; + m_cheat.signed_cheat = FALSE; else { - debug_console_printf(machine, "Invalid sign: expected s or u\n"); + m_console.printf("Invalid sign: expected s or u\n"); return; } if (*(++srtpnt) == 'b') - cheat.width = 1; + m_cheat.width = 1; else if (*srtpnt == 'w') - cheat.width = 2; + m_cheat.width = 2; else if (*srtpnt == 'd') - cheat.width = 4; + m_cheat.width = 4; else if (*srtpnt == 'q') - cheat.width = 8; + m_cheat.width = 8; else { - debug_console_printf(machine, "Invalid width: expected b, w, d or q\n"); + m_console.printf("Invalid width: expected b, w, d or q\n"); return; } if (*(++srtpnt) == 's') - cheat.swapped_cheat = TRUE; + m_cheat.swapped_cheat = TRUE; else - cheat.swapped_cheat = FALSE; + m_cheat.swapped_cheat = FALSE; } } @@ -2023,9 +1854,9 @@ static void execute_cheatinit(running_machine &machine, int ref, int params, con else { /* validate parameters */ - if (!debug_command_parameter_number(machine, param[(ref == 0) ? 1 : 0], &offset)) + if (!validate_number_parameter(param[(ref == 0) ? 1 : 0], &offset)) return; - if (!debug_command_parameter_number(machine, param[(ref == 0) ? 2 : 1], &length)) + if (!validate_number_parameter(param[(ref == 0) ? 2 : 1], &length)) return; /* force region to the specified range */ @@ -2039,57 +1870,57 @@ static void execute_cheatinit(running_machine &machine, int ref, int params, con /* determine the writable extent of each region in total */ for (i = 0; i < region_count; i++) if (!cheat_region[i].disabled) - for (curaddr = cheat_region[i].offset; curaddr <= cheat_region[i].endoffset; curaddr += cheat.width) + for (curaddr = cheat_region[i].offset; curaddr <= cheat_region[i].endoffset; curaddr += m_cheat.width) if (cheat_address_is_valid(*space, curaddr)) real_length++; if (real_length == 0) { - debug_console_printf(machine, "No writable bytes found in this area\n"); + m_console.printf("No writable bytes found in this area\n"); return; } if (ref == 0) { /* initialize new cheat system */ - cheat.cheatmap.resize(real_length); - cheat.undo = 0; - cheat.cpu[0] = (params > 3) ? *param[3] : '0'; + m_cheat.cheatmap.resize(real_length); + m_cheat.undo = 0; + m_cheat.cpu[0] = (params > 3) ? *param[3] : '0'; } else { /* add range to cheat system */ - if (cheat.cpu[0] == 0) + if (m_cheat.cpu[0] == 0) { - debug_console_printf(machine, "Use cheatinit before cheatrange\n"); + m_console.printf("Use cheatinit before cheatrange\n"); return; } - if (!debug_command_parameter_cpu_space(machine, cheat.cpu, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter(m_cheat.cpu, AS_PROGRAM, space)) return; - active_cheat = cheat.cheatmap.size(); - cheat.cheatmap.resize(cheat.cheatmap.size() + real_length); + active_cheat = m_cheat.cheatmap.size(); + m_cheat.cheatmap.resize(m_cheat.cheatmap.size() + real_length); } /* initialize cheatmap in the selected space */ for (i = 0; i < region_count; i++) if (!cheat_region[i].disabled) - for (curaddr = cheat_region[i].offset; curaddr <= cheat_region[i].endoffset; curaddr += cheat.width) + for (curaddr = cheat_region[i].offset; curaddr <= cheat_region[i].endoffset; curaddr += m_cheat.width) if (cheat_address_is_valid(*space, curaddr)) { - cheat.cheatmap[active_cheat].previous_value = cheat_read_extended(&cheat, *space, curaddr); - cheat.cheatmap[active_cheat].first_value = cheat.cheatmap[active_cheat].previous_value; - cheat.cheatmap[active_cheat].offset = curaddr; - cheat.cheatmap[active_cheat].state = 1; - cheat.cheatmap[active_cheat].undo = 0; + m_cheat.cheatmap[active_cheat].previous_value = cheat_read_extended(&m_cheat, *space, curaddr); + m_cheat.cheatmap[active_cheat].first_value = m_cheat.cheatmap[active_cheat].previous_value; + m_cheat.cheatmap[active_cheat].offset = curaddr; + m_cheat.cheatmap[active_cheat].state = 1; + m_cheat.cheatmap[active_cheat].undo = 0; active_cheat++; } /* give a detailed init message to avoid searches being mistakingly carried out on the wrong CPU */ device_t *cpu = nullptr; - debug_command_parameter_cpu(machine, cheat.cpu, &cpu); - debug_console_printf(machine, "%u cheat initialized for CPU index %s ( aka %s )\n", active_cheat, cheat.cpu, cpu->tag()); + validate_cpu_parameter(m_cheat.cpu, &cpu); + m_console.printf("%u cheat initialized for CPU index %s ( aka %s )\n", active_cheat, m_cheat.cpu, cpu->tag()); } @@ -2097,7 +1928,7 @@ static void execute_cheatinit(running_machine &machine, int ref, int params, con execute_cheatnext - execute the search -------------------------------------------------*/ -static void execute_cheatnext(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_cheatnext(int ref, int params, const char *param[]) { address_space *space; UINT64 cheatindex; @@ -2123,18 +1954,18 @@ static void execute_cheatnext(running_machine &machine, int ref, int params, con CHEAT_CHANGEDBY }; - if (cheat.cpu[0] == 0) + if (m_cheat.cpu[0] == 0) { - debug_console_printf(machine, "Use cheatinit before cheatnext\n"); + m_console.printf("Use cheatinit before cheatnext\n"); return; } - if (!debug_command_parameter_cpu_space(machine, cheat.cpu, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter(m_cheat.cpu, AS_PROGRAM, space)) return; - if (params > 1 && !debug_command_parameter_number(machine, param[1], &comp_value)) + if (params > 1 && !validate_number_parameter(param[1], &comp_value)) return; - comp_value = cheat_sign_extend(&cheat, comp_value); + comp_value = cheat_sign_extend(&m_cheat, comp_value); /* decode contidion */ if (!strcmp(param[0], "all")) @@ -2159,18 +1990,18 @@ static void execute_cheatnext(running_machine &machine, int ref, int params, con condition = CHEAT_CHANGEDBY; else { - debug_console_printf(machine, "Invalid condition type\n"); + m_console.printf("Invalid condition type\n"); return; } - cheat.undo++; + m_cheat.undo++; /* execute the search */ - for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1) - if (cheat.cheatmap[cheatindex].state == 1) + for (cheatindex = 0; cheatindex < m_cheat.cheatmap.size(); cheatindex += 1) + if (m_cheat.cheatmap[cheatindex].state == 1) { - UINT64 cheat_value = cheat_read_extended(&cheat, *space, cheat.cheatmap[cheatindex].offset); - UINT64 comp_byte = (ref == 0) ? cheat.cheatmap[cheatindex].previous_value : cheat.cheatmap[cheatindex].first_value; + UINT64 cheat_value = cheat_read_extended(&m_cheat, *space, m_cheat.cheatmap[cheatindex].offset); + UINT64 comp_byte = (ref == 0) ? m_cheat.cheatmap[cheatindex].previous_value : m_cheat.cheatmap[cheatindex].first_value; UINT8 disable_byte = FALSE; switch (condition) @@ -2195,28 +2026,28 @@ static void execute_cheatnext(running_machine &machine, int ref, int params, con break; case CHEAT_DECREASE: - if (cheat.signed_cheat) + if (m_cheat.signed_cheat) disable_byte = ((INT64)cheat_value >= (INT64)comp_byte); else disable_byte = ((UINT64)cheat_value >= (UINT64)comp_byte); break; case CHEAT_INCREASE: - if (cheat.signed_cheat) + if (m_cheat.signed_cheat) disable_byte = ((INT64)cheat_value <= (INT64)comp_byte); else disable_byte = ((UINT64)cheat_value <= (UINT64)comp_byte); break; case CHEAT_DECREASE_OR_EQUAL: - if (cheat.signed_cheat) + if (m_cheat.signed_cheat) disable_byte = ((INT64)cheat_value > (INT64)comp_byte); else disable_byte = ((UINT64)cheat_value > (UINT64)comp_byte); break; case CHEAT_INCREASE_OR_EQUAL: - if (cheat.signed_cheat) + if (m_cheat.signed_cheat) disable_byte = ((INT64)cheat_value < (INT64)comp_byte); else disable_byte = ((UINT64)cheat_value < (UINT64)comp_byte); @@ -2231,14 +2062,14 @@ static void execute_cheatnext(running_machine &machine, int ref, int params, con break; case CHEAT_SMALLEROF: - if (cheat.signed_cheat) + if (m_cheat.signed_cheat) disable_byte = ((INT64)cheat_value >= (INT64)comp_value); else disable_byte = ((UINT64)cheat_value >= (UINT64)comp_value); break; case CHEAT_GREATEROF: - if (cheat.signed_cheat) + if (m_cheat.signed_cheat) disable_byte = ((INT64)cheat_value <= (INT64)comp_value); else disable_byte = ((UINT64)cheat_value <= (UINT64)comp_value); @@ -2253,20 +2084,20 @@ static void execute_cheatnext(running_machine &machine, int ref, int params, con if (disable_byte) { - cheat.cheatmap[cheatindex].state = 0; - cheat.cheatmap[cheatindex].undo = cheat.undo; + m_cheat.cheatmap[cheatindex].state = 0; + m_cheat.cheatmap[cheatindex].undo = m_cheat.undo; } else active_cheat++; /* update previous value */ - cheat.cheatmap[cheatindex].previous_value = cheat_value; + m_cheat.cheatmap[cheatindex].previous_value = cheat_value; } if (active_cheat <= 5) - execute_cheatlist(machine, 0, 0, nullptr); + execute_cheatlist(0, 0, nullptr); - debug_console_printf(machine, "%u cheats found\n", active_cheat); + m_console.printf("%u cheats found\n", active_cheat); } @@ -2274,7 +2105,7 @@ static void execute_cheatnext(running_machine &machine, int ref, int params, con execute_cheatlist - show a list of active cheat -------------------------------------------------*/ -static void execute_cheatlist(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_cheatlist(int ref, int params, const char *param[]) { char spaceletter, sizeletter; address_space *space; @@ -2284,10 +2115,10 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con UINT64 sizemask; FILE *f = nullptr; - if (!debug_command_parameter_cpu_space(machine, cheat.cpu, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter(m_cheat.cpu, AS_PROGRAM, space)) return; - if (!debug_command_parameter_cpu(machine, cheat.cpu, &cpu)) + if (!validate_cpu_parameter(m_cheat.cpu, &cpu)) return; if (params > 0) @@ -2301,7 +2132,7 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con case AS_IO: spaceletter = 'i'; break; } - switch (cheat.width) + switch (m_cheat.width) { default: case 1: sizeletter = 'b'; sizemask = 0xff; break; @@ -2312,12 +2143,12 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con /* write the cheat list */ util::ovectorstream output; - for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1) + for (cheatindex = 0; cheatindex < m_cheat.cheatmap.size(); cheatindex += 1) { - if (cheat.cheatmap[cheatindex].state == 1) + if (m_cheat.cheatmap[cheatindex].state == 1) { - UINT64 value = cheat_byte_swap(&cheat, cheat_read_extended(&cheat, *space, cheat.cheatmap[cheatindex].offset)) & sizemask; - offs_t address = space->byte_to_address(cheat.cheatmap[cheatindex].offset); + UINT64 value = cheat_byte_swap(&m_cheat, cheat_read_extended(&m_cheat, *space, m_cheat.cheatmap[cheatindex].offset)) & sizemask; + offs_t address = space->byte_to_address(m_cheat.cheatmap[cheatindex].offset); if (params > 0) { @@ -2331,18 +2162,18 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con " %s.p%c%c@%0*X=%0*X\n" " \n" " \n\n", - active_cheat, space->logaddrchars(), address, cheat.width * 2, value, - cpu->tag(), spaceletter, sizeletter, space->logaddrchars(), address, cheat.width * 2, cheat_byte_swap(&cheat, cheat.cheatmap[cheatindex].first_value) & sizemask); + active_cheat, space->logaddrchars(), address, m_cheat.width * 2, value, + cpu->tag(), spaceletter, sizeletter, space->logaddrchars(), address, m_cheat.width * 2, cheat_byte_swap(&m_cheat, m_cheat.cheatmap[cheatindex].first_value) & sizemask); auto const &text(output.vec()); fprintf(f, "%.*s", int(unsigned(text.size())), &text[0]); } else { - debug_console_printf( - machine, "Address=%0*X Start=%0*X Current=%0*X\n", + m_console.printf( + "Address=%0*X Start=%0*X Current=%0*X\n", space->logaddrchars(), address, - cheat.width * 2, cheat_byte_swap(&cheat, cheat.cheatmap[cheatindex].first_value) & sizemask, - cheat.width * 2, value); + m_cheat.width * 2, cheat_byte_swap(&m_cheat, m_cheat.cheatmap[cheatindex].first_value) & sizemask, + m_cheat.width * 2, value); } } } @@ -2355,28 +2186,28 @@ static void execute_cheatlist(running_machine &machine, int ref, int params, con execute_cheatundo - undo the last search -------------------------------------------------*/ -static void execute_cheatundo(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_cheatundo(int ref, int params, const char *param[]) { UINT64 cheatindex; UINT32 undo_count = 0; - if (cheat.undo > 0) + if (m_cheat.undo > 0) { - for (cheatindex = 0; cheatindex < cheat.cheatmap.size(); cheatindex += 1) + for (cheatindex = 0; cheatindex < m_cheat.cheatmap.size(); cheatindex += 1) { - if (cheat.cheatmap[cheatindex].undo == cheat.undo) + if (m_cheat.cheatmap[cheatindex].undo == m_cheat.undo) { - cheat.cheatmap[cheatindex].state = 1; - cheat.cheatmap[cheatindex].undo = 0; + m_cheat.cheatmap[cheatindex].state = 1; + m_cheat.cheatmap[cheatindex].undo = 0; undo_count++; } } - cheat.undo--; - debug_console_printf(machine, "%u cheat reactivated\n", undo_count); + m_cheat.undo--; + m_console.printf("%u cheat reactivated\n", undo_count); } else - debug_console_printf(machine, "Maximum undo reached\n"); + m_console.printf("Maximum undo reached\n"); } @@ -2384,7 +2215,7 @@ static void execute_cheatundo(running_machine &machine, int ref, int params, con execute_find - execute the find command -------------------------------------------------*/ -static void execute_find(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_find(int ref, int params, const char *param[]) { UINT64 offset, endoffset, length; address_space *space; @@ -2396,11 +2227,11 @@ static void execute_find(running_machine &machine, int ref, int params, const ch int j; /* validate parameters */ - if (!debug_command_parameter_number(machine, param[0], &offset)) + if (!validate_number_parameter(param[0], &offset)) return; - if (!debug_command_parameter_number(machine, param[1], &length)) + if (!validate_number_parameter(param[1], &length)) return; - if (!debug_command_parameter_cpu_space(machine, nullptr, ref, space)) + if (!validate_cpu_space_parameter(nullptr, ref, space)) return; /* further validation */ @@ -2441,7 +2272,7 @@ static void execute_find(running_machine &machine, int ref, int params, const ch data_size[data_count++] |= 0x10; /* otherwise, validate as a number */ - else if (!debug_command_parameter_number(machine, pdata, &data_to_find[data_count++])) + else if (!validate_number_parameter(pdata, &data_to_find[data_count++])) return; } } @@ -2457,10 +2288,10 @@ static void execute_find(running_machine &machine, int ref, int params, const ch { switch (data_size[j]) { - case 1: match = ((UINT8)debug_read_byte(*space, i + suboffset, TRUE) == (UINT8)data_to_find[j]); break; - case 2: match = ((UINT16)debug_read_word(*space, i + suboffset, TRUE) == (UINT16)data_to_find[j]); break; - case 4: match = ((UINT32)debug_read_dword(*space, i + suboffset, TRUE) == (UINT32)data_to_find[j]); break; - case 8: match = ((UINT64)debug_read_qword(*space, i + suboffset, TRUE) == (UINT64)data_to_find[j]); break; + case 1: match = ((UINT8)m_cpu.read_byte(*space, i + suboffset, TRUE) == (UINT8)data_to_find[j]); break; + case 2: match = ((UINT16)m_cpu.read_word(*space, i + suboffset, TRUE) == (UINT16)data_to_find[j]); break; + case 4: match = ((UINT32)m_cpu.read_dword(*space, i + suboffset, TRUE) == (UINT32)data_to_find[j]); break; + case 8: match = ((UINT64)m_cpu.read_qword(*space, i + suboffset, TRUE) == (UINT64)data_to_find[j]); break; default: /* all other cases are wildcards */ break; } suboffset += data_size[j] & 0x0f; @@ -2470,13 +2301,13 @@ static void execute_find(running_machine &machine, int ref, int params, const ch if (match) { found++; - debug_console_printf(machine, "Found at %0*X\n", space->addrchars(), (UINT32)space->byte_to_address(i)); + m_console.printf("Found at %0*X\n", space->addrchars(), (UINT32)space->byte_to_address(i)); } } /* print something if not found */ if (found == 0) - debug_console_printf(machine, "Not found\n"); + m_console.printf("Not found\n"); } @@ -2484,7 +2315,7 @@ static void execute_find(running_machine &machine, int ref, int params, const ch execute_dasm - execute the dasm command -------------------------------------------------*/ -static void execute_dasm(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_dasm(int ref, int params, const char *param[]) { UINT64 offset, length, bytes = 1; int minbytes, maxbytes, byteswidth; @@ -2493,15 +2324,17 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch int j; /* validate parameters */ - if (!debug_command_parameter_number(machine, param[1], &offset)) + if (!validate_number_parameter(param[1], &offset)) return; - if (!debug_command_parameter_number(machine, param[2], &length)) + if (!validate_number_parameter(param[2], &length)) return; - if (!debug_command_parameter_number(machine, param[3], &bytes)) + if (!validate_number_parameter(param[3], &bytes)) return; - if (!debug_command_parameter_cpu_space(machine, (params > 4) ? param[4] : nullptr, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter((params > 4) ? param[4] : nullptr, AS_PROGRAM, space)) return; - if (!debug_command_parameter_cpu_space(machine, (params > 4) ? param[4] : nullptr, AS_DECRYPTED_OPCODES, decrypted_space)) + if (space->device().memory().has_space(AS_DECRYPTED_OPCODES)) + decrypted_space = &space->device().memory().space(AS_DECRYPTED_OPCODES); + else decrypted_space = space; /* determine the width of the bytes */ @@ -2519,7 +2352,7 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch f = fopen(param[0], "w"); if (!f) { - debug_console_printf(machine, "Error opening file '%s'\n", param[0]); + m_console.printf("Error opening file '%s'\n", param[0]); return; } @@ -2541,15 +2374,15 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch /* make sure we can translate the address */ tempaddr = pcbyte; - if (debug_cpu_translate(*space, TRANSLATE_FETCH_DEBUG, &tempaddr)) + if (m_cpu.translate(*space, TRANSLATE_FETCH_DEBUG, &tempaddr)) { UINT8 opbuf[64], argbuf[64]; /* fetch the bytes up to the maximum */ for (numbytes = 0; numbytes < maxbytes; numbytes++) { - opbuf[numbytes] = debug_read_opcode(*decrypted_space, pcbyte + numbytes, 1); - argbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1); + opbuf[numbytes] = m_cpu.read_opcode(*decrypted_space, pcbyte + numbytes, 1); + argbuf[numbytes] = m_cpu.read_opcode(*space, pcbyte + numbytes, 1); } /* disassemble the result */ @@ -2562,7 +2395,7 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch auto const startdex = output.tellp(); numbytes = space->address_to_byte(numbytes); for (j = 0; j < numbytes; j += minbytes) - stream_format(output, "%0*X ", minbytes * 2, debug_read_opcode(*decrypted_space, pcbyte + j, minbytes)); + stream_format(output, "%0*X ", minbytes * 2, m_cpu.read_opcode(*decrypted_space, pcbyte + j, minbytes)); if ((output.tellp() - startdex) < byteswidth) stream_format(output, "%*s", byteswidth - (output.tellp() - startdex), ""); stream_format(output, " "); @@ -2594,7 +2427,7 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch /* close the file */ fclose(f); - debug_console_printf(machine, "Data dumped successfully\n"); + m_console.printf("Data dumped successfully\n"); } @@ -2603,7 +2436,7 @@ static void execute_dasm(running_machine &machine, int ref, int params, const ch trace over and trace info -------------------------------------------------*/ -static void execute_trace_internal(running_machine &machine, int ref, int params, const char *param[], int trace_over) +void debugger_commands::execute_trace_internal(int ref, int params, const char *param[], bool trace_over) { const char *action = nullptr; device_t *cpu; @@ -2612,12 +2445,12 @@ static void execute_trace_internal(running_machine &machine, int ref, int params std::string filename = param[0]; /* replace macros */ - strreplace(filename, "{game}", machine.basename()); + strreplace(filename, "{game}", m_machine.basename()); /* validate parameters */ - if (!debug_command_parameter_cpu(machine, (params > 1) ? param[1] : nullptr, &cpu)) + if (!validate_cpu_parameter((params > 1) ? param[1] : nullptr, &cpu)) return; - if (!debug_command_parameter_command(machine, action = param[2])) + if (!debug_command_parameter_command(action = param[2])) return; /* open the file */ @@ -2635,7 +2468,7 @@ static void execute_trace_internal(running_machine &machine, int ref, int params f = fopen(filename.c_str(), mode); if (!f) { - debug_console_printf(machine, "Error opening file '%s'\n", param[0]); + m_console.printf("Error opening file '%s'\n", param[0]); return; } } @@ -2643,9 +2476,9 @@ static void execute_trace_internal(running_machine &machine, int ref, int params /* do it */ cpu->debug()->trace(f, trace_over, action); if (f) - debug_console_printf(machine, "Tracing CPU '%s' to file %s\n", cpu->tag(), filename.c_str()); + m_console.printf("Tracing CPU '%s' to file %s\n", cpu->tag(), filename.c_str()); else - debug_console_printf(machine, "Stopped tracing on CPU '%s'\n", cpu->tag()); + m_console.printf("Stopped tracing on CPU '%s'\n", cpu->tag()); } @@ -2653,9 +2486,9 @@ static void execute_trace_internal(running_machine &machine, int ref, int params execute_trace - execute the trace command -------------------------------------------------*/ -static void execute_trace(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_trace(int ref, int params, const char *param[]) { - execute_trace_internal(machine, ref, params, param, 0); + execute_trace_internal(ref, params, param, false); } @@ -2663,9 +2496,9 @@ static void execute_trace(running_machine &machine, int ref, int params, const c execute_traceover - execute the trace over command -------------------------------------------------*/ -static void execute_traceover(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_traceover(int ref, int params, const char *param[]) { - execute_trace_internal(machine, ref, params, param, 1); + execute_trace_internal(ref, params, param, true); } @@ -2673,9 +2506,9 @@ static void execute_traceover(running_machine &machine, int ref, int params, con execute_traceflush - execute the trace flush command -------------------------------------------------*/ -static void execute_traceflush(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_traceflush(int ref, int params, const char *param[]) { - debug_cpu_flush_traces(machine); + m_cpu.flush_traces(); } @@ -2683,17 +2516,19 @@ static void execute_traceflush(running_machine &machine, int ref, int params, co execute_history - execute the history command -------------------------------------------------*/ -static void execute_history(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_history(int ref, int params, const char *param[]) { /* validate parameters */ address_space *space, *decrypted_space; - if (!debug_command_parameter_cpu_space(machine, (params > 0) ? param[0] : nullptr, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter((params > 0) ? param[0] : nullptr, AS_PROGRAM, space)) return; - if (!debug_command_parameter_cpu_space(machine, (params > 0) ? param[0] : nullptr, AS_DECRYPTED_OPCODES, decrypted_space)) + if (space->device().memory().has_space(AS_DECRYPTED_OPCODES)) + decrypted_space = &space->device().memory().space(AS_DECRYPTED_OPCODES); + else decrypted_space = space; UINT64 count = device_debug::HISTORY_SIZE; - if (!debug_command_parameter_number(machine, param[1], &count)) + if (!validate_number_parameter(param[1], &count)) return; /* further validation */ @@ -2713,14 +2548,14 @@ static void execute_history(running_machine &machine, int ref, int params, const UINT8 opbuf[64], argbuf[64]; for (int numbytes = 0; numbytes < maxbytes; numbytes++) { - opbuf[numbytes] = debug_read_opcode(*decrypted_space, pcbyte + numbytes, 1); - argbuf[numbytes] = debug_read_opcode(*space, pcbyte + numbytes, 1); + opbuf[numbytes] = m_cpu.read_opcode(*decrypted_space, pcbyte + numbytes, 1); + argbuf[numbytes] = m_cpu.read_opcode(*space, pcbyte + numbytes, 1); } char buffer[200]; debug->disassemble(buffer, pc, opbuf, argbuf); - debug_console_printf(machine, "%0*X: %s\n", space->logaddrchars(), pc, buffer); + m_console.printf("%0*X: %s\n", space->logaddrchars(), pc, buffer); } } @@ -2729,37 +2564,37 @@ static void execute_history(running_machine &machine, int ref, int params, const execute_trackpc - execute the trackpc command -------------------------------------------------*/ -static void execute_trackpc(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_trackpc(int ref, int params, const char *param[]) { // Gather the on/off switch (if present) UINT64 turnOn = true; - if (!debug_command_parameter_number(machine, param[0], &turnOn)) + if (!validate_number_parameter(param[0], &turnOn)) return; // Gather the cpu id (if present) device_t *cpu = nullptr; - if (!debug_command_parameter_cpu(machine, (params > 1) ? param[1] : nullptr, &cpu)) + if (!validate_cpu_parameter((params > 1) ? param[1] : nullptr, &cpu)) return; // Should we clear the existing data? UINT64 clear = false; - if (!debug_command_parameter_number(machine, param[2], &clear)) + if (!validate_number_parameter(param[2], &clear)) return; cpu->debug()->set_track_pc((bool)turnOn); if (turnOn) { // Insert current pc - if (debug_cpu_get_visible_cpu(machine) == cpu) + if (m_cpu.get_visible_cpu() == cpu) { const offs_t pc = cpu->debug()->pc(); cpu->debug()->set_track_pc_visited(pc); } - debug_console_printf(machine, "PC tracking enabled\n"); + m_console.printf("PC tracking enabled\n"); } else { - debug_console_printf(machine, "PC tracking disabled\n"); + m_console.printf("PC tracking disabled\n"); } if (clear) @@ -2771,26 +2606,26 @@ static void execute_trackpc(running_machine &machine, int ref, int params, const execute_trackmem - execute the trackmem command -------------------------------------------------*/ -static void execute_trackmem(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_trackmem(int ref, int params, const char *param[]) { // Gather the on/off switch (if present) UINT64 turnOn = true; - if (!debug_command_parameter_number(machine, param[0], &turnOn)) + if (!validate_number_parameter(param[0], &turnOn)) return; // Gather the cpu id (if present) device_t *cpu = nullptr; - if (!debug_command_parameter_cpu(machine, (params > 1) ? param[1] : nullptr, &cpu)) + if (!validate_cpu_parameter((params > 1) ? param[1] : nullptr, &cpu)) return; // Should we clear the existing data? UINT64 clear = false; - if (!debug_command_parameter_number(machine, param[2], &clear)) + if (!validate_number_parameter(param[2], &clear)) return; // Get the address space for the given cpu address_space *space; - if (!debug_command_parameter_cpu_space(machine, (params > 1) ? param[1] : nullptr, AS_PROGRAM, space)) + if (!validate_cpu_space_parameter((params > 1) ? param[1] : nullptr, AS_PROGRAM, space)) return; // Inform the CPU it's time to start tracking memory writes @@ -2809,37 +2644,34 @@ static void execute_trackmem(running_machine &machine, int ref, int params, cons execute_pcatmem - execute the pcatmem command -------------------------------------------------*/ -static void execute_pcatmem(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_pcatmem(int ref, int params, const char *param[]) { // Gather the required address parameter UINT64 address; - if (!debug_command_parameter_number(machine, param[0], &address)) + if (!validate_number_parameter(param[0], &address)) return; // Gather the cpu id (if present) device_t *cpu = nullptr; - if (!debug_command_parameter_cpu(machine, (params > 1) ? param[1] : nullptr, &cpu)) + if (!validate_cpu_parameter((params > 1) ? param[1] : nullptr, &cpu)) return; // Get the address space for the given cpu address_space *space; - if (!debug_command_parameter_cpu_space(machine, (params > 1) ? param[1] : nullptr, ref, space)) + if (!validate_cpu_space_parameter((params > 1) ? param[1] : nullptr, ref, space)) return; // Get the value of memory at the address - const int nativeDataWidth = space->data_width() / 8; - const UINT64 data = debug_read_memory(*space, - space->address_to_byte(address), - nativeDataWidth, - true); + const int native_data_width = space->data_width() / 8; + const UINT64 data = m_cpu.read_memory(*space, space->address_to_byte(address), native_data_width, true); // Recover the pc & print - const address_spacenum spaceNum = (address_spacenum)ref; - const offs_t result = space->device().debug()->track_mem_pc_from_space_address_data(spaceNum, address, data); + const address_spacenum space_num = (address_spacenum)ref; + const offs_t result = space->device().debug()->track_mem_pc_from_space_address_data(space_num, address, data); if (result != (offs_t)(-1)) - debug_console_printf(machine, "%02x\n", result); + m_console.printf("%02x\n", result); else - debug_console_printf(machine, "UNKNOWN PC\n"); + m_console.printf("UNKNOWN PC\n"); } @@ -2847,13 +2679,13 @@ static void execute_pcatmem(running_machine &machine, int ref, int params, const execute_snap - execute the snapshot command -------------------------------------------------*/ -static void execute_snap(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_snap(int ref, int params, const char *param[]) { /* if no params, use the default behavior */ if (params == 0) { - machine.video().save_active_screen_snapshots(); - debug_console_printf(machine, "Saved snapshot\n"); + m_machine.video().save_active_screen_snapshots(); + m_console.printf("Saved snapshot\n"); } /* otherwise, we have to open the file ourselves */ @@ -2862,29 +2694,29 @@ static void execute_snap(running_machine &machine, int ref, int params, const ch const char *filename = param[0]; int scrnum = (params > 1) ? atoi(param[1]) : 0; - screen_device_iterator iter(machine.root_device()); + screen_device_iterator iter(m_machine.root_device()); screen_device *screen = iter.byindex(scrnum); - if ((screen == nullptr) || !machine.render().is_live(*screen)) + if ((screen == nullptr) || !m_machine.render().is_live(*screen)) { - debug_console_printf(machine, "Invalid screen number '%d'\n", scrnum); + m_console.printf("Invalid screen number '%d'\n", scrnum); return; } std::string fname(filename); if (fname.find(".png") == -1) fname.append(".png"); - emu_file file(machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(m_machine.options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); osd_file::error filerr = file.open(fname.c_str()); if (filerr != osd_file::error::NONE) { - debug_console_printf(machine, "Error creating file '%s'\n", filename); + m_console.printf("Error creating file '%s'\n", filename); return; } screen->machine().video().save_snapshot(screen, file); - debug_console_printf(machine, "Saved screen #%d snapshot as '%s'\n", scrnum, filename); + m_console.printf("Saved screen #%d snapshot as '%s'\n", scrnum, filename); } } @@ -2893,9 +2725,9 @@ static void execute_snap(running_machine &machine, int ref, int params, const ch execute_source - execute the source command -------------------------------------------------*/ -static void execute_source(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_source(int ref, int params, const char *param[]) { - debug_cpu_source_script(machine, param[0]); + m_cpu.source_script(param[0]); } @@ -2903,7 +2735,7 @@ static void execute_source(running_machine &machine, int ref, int params, const execute_map - execute the map command -------------------------------------------------*/ -static void execute_map(running_machine &machine, int ref, int params, const char *param[]) +void debugger_commands::execute_map(int ref, int params, const char *param[]) { address_space *space; offs_t taddress; @@ -2911,11 +2743,11 @@ static void execute_map(running_machine &machine, int ref, int params, const cha int intention; /* validate parameters */ - if (!debug_command_parameter_number(machine, param[0], &address)) + if (!validate_number_parameter(param[0], &address)) return; /* CPU is implicit */ - if (!debug_command_parameter_cpu_space(machine, nullptr, ref, space)) + if (!validate_cpu_space_parameter(nullptr, ref, space)) return; /* do the translation first */ @@ -2923,18 +2755,18 @@ static void execute_map(running_machine &machine, int ref, int params, const cha { static const char *const intnames[] = { "Read", "Write", "Fetch" }; taddress = space->address_to_byte(address) & space->bytemask(); - if (debug_cpu_translate(*space, intention, &taddress)) + if (m_cpu.translate(*space, intention, &taddress)) { const char *mapname = space->get_handler_string((intention == TRANSLATE_WRITE_DEBUG) ? ROW_WRITE : ROW_READ, taddress); - debug_console_printf( - machine, "%7s: %0*X logical == %0*X physical -> %s\n", + m_console.printf( + "%7s: %0*X logical == %0*X physical -> %s\n", intnames[intention & 3], space->logaddrchars(), address, space->addrchars(), space->byte_to_address(taddress), mapname); } else - debug_console_printf(machine, "%7s: %0*X logical is unmapped\n", intnames[intention & 3], space->logaddrchars(), address); + m_console.printf("%7s: %0*X logical is unmapped\n", intnames[intention & 3], space->logaddrchars(), address); } } @@ -2943,19 +2775,19 @@ static void execute_map(running_machine &machine, int ref, int params, const cha execute_memdump - execute the memdump command -------------------------------------------------*/ -static void execute_memdump(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_memdump(int ref, int params, const char **param) { FILE *file; const char *filename; filename = (params == 0) ? "memdump.log" : param[0]; - debug_console_printf(machine, "Dumping memory to %s\n", filename); + m_console.printf("Dumping memory to %s\n", filename); file = fopen(filename, "w"); if (file) { - machine.memory().dump(file); + m_machine.memory().dump(file); fclose(file); } } @@ -2972,7 +2804,7 @@ static int CLIB_DECL symbol_sort_compare(const void *item1, const void *item2) return strcmp(str1, str2); } -static void execute_symlist(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_symlist(int ref, int params, const char **param) { device_t *cpu = nullptr; const char *namelist[1000]; @@ -2983,24 +2815,24 @@ static void execute_symlist(running_machine &machine, int ref, int params, const if (param[0] != nullptr) { /* validate parameters */ - if (!debug_command_parameter_cpu(machine, param[0], &cpu)) + if (!validate_cpu_parameter(param[0], &cpu)) return; symtable = &cpu->debug()->symtable(); - debug_console_printf(machine, "CPU '%s' symbols:\n", cpu->tag()); + m_console.printf("CPU '%s' symbols:\n", cpu->tag()); } else { - symtable = debug_cpu_get_global_symtable(machine); - debug_console_printf(machine, "Global symbols:\n"); + symtable = m_cpu.get_global_symtable(); + m_console.printf("Global symbols:\n"); } /* gather names for all symbols */ - for (symbol_entry &entry : symtable->entries()) + for (auto &entry : symtable->entries()) { /* only display "register" type symbols */ - if (!entry.is_function()) + if (!entry.second->is_function()) { - namelist[count++] = entry.name(); + namelist[count++] = entry.second->name(); if (count >= ARRAY_LENGTH(namelist)) break; } @@ -3018,10 +2850,10 @@ static void execute_symlist(running_machine &machine, int ref, int params, const UINT64 value = entry->value(); /* only display "register" type symbols */ - debug_console_printf(machine, "%s = %X", namelist[symnum], value); + m_console.printf("%s = %X", namelist[symnum], value); if (!entry->is_lval()) - debug_console_printf(machine, " (read-only)"); - debug_console_printf(machine, "\n"); + m_console.printf(" (read-only)"); + m_console.printf("\n"); } } @@ -3030,9 +2862,9 @@ static void execute_symlist(running_machine &machine, int ref, int params, const execute_softreset - execute the softreset command -------------------------------------------------*/ -static void execute_softreset(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_softreset(int ref, int params, const char **param) { - machine.schedule_soft_reset(); + m_machine.schedule_soft_reset(); } @@ -3040,9 +2872,9 @@ static void execute_softreset(running_machine &machine, int ref, int params, con execute_hardreset - execute the hardreset command -------------------------------------------------*/ -static void execute_hardreset(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_hardreset(int ref, int params, const char **param) { - machine.schedule_hard_reset(); + m_machine.schedule_hard_reset(); } /*------------------------------------------------- @@ -3050,57 +2882,57 @@ static void execute_hardreset(running_machine &machine, int ref, int params, con mounted files -------------------------------------------------*/ -static void execute_images(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_images(int ref, int params, const char **param) { - image_interface_iterator iter(machine.root_device()); + image_interface_iterator iter(m_machine.root_device()); for (device_image_interface &img : iter) - debug_console_printf(machine, "%s: %s\n", img.brief_instance_name(), img.exists() ? img.filename() : "[empty slot]"); + m_console.printf("%s: %s\n", img.brief_instance_name(), img.exists() ? img.filename() : "[empty slot]"); if (iter.first() == nullptr) - debug_console_printf(machine, "No image devices in this driver\n"); + m_console.printf("No image devices in this driver\n"); } /*------------------------------------------------- execute_mount - execute the image mount command -------------------------------------------------*/ -static void execute_mount(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_mount(int ref, int params, const char **param) { bool done = false; - for (device_image_interface &img : image_interface_iterator(machine.root_device())) + for (device_image_interface &img : image_interface_iterator(m_machine.root_device())) { if (strcmp(img.brief_instance_name(),param[0]) == 0) { if (img.load(param[1])==IMAGE_INIT_FAIL) - debug_console_printf(machine, "Unable to mount file %s on %s\n",param[1],param[0]); + m_console.printf("Unable to mount file %s on %s\n",param[1],param[0]); else - debug_console_printf(machine, "File %s mounted on %s\n",param[1],param[0]); + m_console.printf("File %s mounted on %s\n",param[1],param[0]); done = true; break; } } if (!done) - debug_console_printf(machine, "There is no image device :%s\n",param[0]); + m_console.printf("There is no image device :%s\n",param[0]); } /*------------------------------------------------- execute_unmount - execute the image unmount command -------------------------------------------------*/ -static void execute_unmount(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_unmount(int ref, int params, const char **param) { bool done = false; - for (device_image_interface &img : image_interface_iterator(machine.root_device())) + for (device_image_interface &img : image_interface_iterator(m_machine.root_device())) { if (strcmp(img.brief_instance_name(),param[0]) == 0) { img.unload(); - debug_console_printf(machine, "Unmounted file from : %s\n",param[0]); + m_console.printf("Unmounted file from : %s\n",param[0]); done = true; break; } } if (!done) - debug_console_printf(machine, "There is no image device :%s\n",param[0]); + m_console.printf("There is no image device :%s\n",param[0]); } @@ -3109,9 +2941,9 @@ static void execute_unmount(running_machine &machine, int ref, int params, const natural keyboard input -------------------------------------------------*/ -static void execute_input(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_input(int ref, int params, const char **param) { - machine.ioport().natkeyboard().post_coded(param[0]); + m_machine.ioport().natkeyboard().post_coded(param[0]); } @@ -3120,7 +2952,7 @@ static void execute_input(running_machine &machine, int ref, int params, const c keyboard codes -------------------------------------------------*/ -static void execute_dumpkbd(running_machine &machine, int ref, int params, const char **param) +void debugger_commands::execute_dumpkbd(int ref, int params, const char **param) { // was there a file specified? const char *filename = (params > 0) ? param[0] : nullptr; @@ -3131,19 +2963,19 @@ static void execute_dumpkbd(running_machine &machine, int ref, int params, const file = fopen(filename, "w"); if (file == nullptr) { - debug_console_printf(machine, "Cannot open \"%s\"\n", filename); + m_console.printf("Cannot open \"%s\"\n", filename); return; } } // loop through all codes - std::string buffer = machine.ioport().natkeyboard().dump(); + std::string buffer = m_machine.ioport().natkeyboard().dump(); // and output it as appropriate if (file != nullptr) fprintf(file, "%s\n", buffer.c_str()); else - debug_console_printf(machine, "%s\n", buffer.c_str()); + m_console.printf("%s\n", buffer.c_str()); // cleanup if (file != nullptr) diff --git a/src/emu/debug/debugcmd.h b/src/emu/debug/debugcmd.h index 311f19e5dbd..b771aa84174 100644 --- a/src/emu/debug/debugcmd.h +++ b/src/emu/debug/debugcmd.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Aaron Giles +// copyright-holders:Aaron Giles,Ryan Holtz /********************************************************************* debugcmd.h @@ -8,31 +8,163 @@ *********************************************************************/ +#pragma once + #ifndef __DEBUGCMD_H__ #define __DEBUGCMD_H__ #include "emu.h" +#include "debugcpu.h" +#include "debugcon.h" -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ +class parsed_expression; +class symbol_table; -/* ----- initialization ----- */ +class debugger_commands +{ +public: + debugger_commands(running_machine& machine, debugger_cpu& cpu, debugger_console& console); -/* initializes the command system */ -void debug_command_init(running_machine &machine); + /* validates a parameter as a numeric value */ + bool validate_number_parameter(const char *param, UINT64 *result); + + /* validates a parameter as a cpu */ + bool validate_cpu_parameter(const char *param, device_t **result); + + /* validates a parameter as a cpu and retrieves the given address space */ + bool validate_cpu_space_parameter(const char *param, int spacenum, address_space *&result); + +private: + struct global_entry + { + void * base; + UINT32 size; + }; + struct cheat_map + { + UINT64 offset; + UINT64 first_value; + UINT64 previous_value; + UINT8 state:1; + UINT8 undo:7; + }; -/* ----- parameter validation ----- */ + // TODO [RH 31 May 2016]: Move this cheat stuff into its own class + struct cheat_system + { + char cpu[2]; + UINT8 width; + std::vector cheatmap; + UINT8 undo; + UINT8 signed_cheat; + UINT8 swapped_cheat; + }; -/* validates a number parameter */ -int debug_command_parameter_number(running_machine &machine, const char *param, UINT64 *result); -/* validates a parameter as a cpu */ -int debug_command_parameter_cpu(running_machine &machine, const char *param, device_t **result); + struct cheat_region_map + { + UINT64 offset; + UINT64 endoffset; + const char *share; + UINT8 disabled; + }; -/* validates a parameter as a cpu and retrieves the given address space */ -int debug_command_parameter_cpu_space(running_machine &machine, const char *param, int spacenum, address_space **result); + bool debug_command_parameter_expression(const char *param, parsed_expression &result); + bool debug_command_parameter_command(const char *param); + + bool cheat_address_is_valid(address_space &space, offs_t address); + UINT64 cheat_sign_extend(const cheat_system *cheatsys, UINT64 value); + UINT64 cheat_byte_swap(const cheat_system *cheatsys, UINT64 value); + UINT64 cheat_read_extended(const cheat_system *cheatsys, address_space &space, offs_t address); + + UINT64 execute_min(symbol_table &table, void *ref, int params, const UINT64 *param); + UINT64 execute_max(symbol_table &table, void *ref, int params, const UINT64 *param); + UINT64 execute_if(symbol_table &table, void *ref, int params, const UINT64 *param); + + UINT64 global_get(symbol_table &table, void *ref); + void global_set(symbol_table &table, void *ref, UINT64 value); + + int mini_printf(char *buffer, const char *format, int params, UINT64 *param); + + void execute_trace_internal(int ref, int params, const char *param[], bool trace_over); + + void execute_help(int ref, int params, const char **param); + void execute_print(int ref, int params, const char **param); + void execute_printf(int ref, int params, const char **param); + void execute_logerror(int ref, int params, const char **param); + void execute_tracelog(int ref, int params, const char **param); + void execute_quit(int ref, int params, const char **param); + void execute_do(int ref, int params, const char **param); + void execute_step(int ref, int params, const char **param); + void execute_over(int ref, int params, const char **param); + void execute_out(int ref, int params, const char **param); + void execute_go(int ref, int params, const char **param); + void execute_go_vblank(int ref, int params, const char **param); + void execute_go_interrupt(int ref, int params, const char **param); + void execute_go_time(int ref, int params, const char *param[]); + void execute_focus(int ref, int params, const char **param); + void execute_ignore(int ref, int params, const char **param); + void execute_observe(int ref, int params, const char **param); + void execute_next(int ref, int params, const char **param); + void execute_comment_add(int ref, int params, const char **param); + void execute_comment_del(int ref, int params, const char **param); + void execute_comment_save(int ref, int params, const char **param); + void execute_comment_list(int ref, int params, const char **param); + void execute_comment_commit(int ref, int params, const char **param); + void execute_bpset(int ref, int params, const char **param); + void execute_bpclear(int ref, int params, const char **param); + void execute_bpdisenable(int ref, int params, const char **param); + void execute_bplist(int ref, int params, const char **param); + void execute_wpset(int ref, int params, const char **param); + void execute_wpclear(int ref, int params, const char **param); + void execute_wpdisenable(int ref, int params, const char **param); + void execute_wplist(int ref, int params, const char **param); + void execute_rpset(int ref, int params, const char **param); + void execute_rpclear(int ref, int params, const char **param); + void execute_rpdisenable(int ref, int params, const char **param); + void execute_rplist(int ref, int params, const char **param); + void execute_hotspot(int ref, int params, const char **param); + void execute_statesave(int ref, int params, const char **param); + void execute_stateload(int ref, int params, const char **param); + void execute_save(int ref, int params, const char **param); + void execute_load(int ref, int params, const char **param); + void execute_dump(int ref, int params, const char **param); + void execute_cheatinit(int ref, int params, const char **param); + void execute_cheatnext(int ref, int params, const char **param); + void execute_cheatlist(int ref, int params, const char **param); + void execute_cheatundo(int ref, int params, const char **param); + void execute_dasm(int ref, int params, const char **param); + void execute_find(int ref, int params, const char **param); + void execute_trace(int ref, int params, const char **param); + void execute_traceover(int ref, int params, const char **param); + void execute_traceflush(int ref, int params, const char **param); + void execute_history(int ref, int params, const char **param); + void execute_trackpc(int ref, int params, const char **param); + void execute_trackmem(int ref, int params, const char **param); + void execute_pcatmem(int ref, int params, const char **param); + void execute_snap(int ref, int params, const char **param); + void execute_source(int ref, int params, const char **param); + void execute_map(int ref, int params, const char **param); + void execute_memdump(int ref, int params, const char **param); + void execute_symlist(int ref, int params, const char **param); + void execute_softreset(int ref, int params, const char **param); + void execute_hardreset(int ref, int params, const char **param); + void execute_images(int ref, int params, const char **param); + void execute_mount(int ref, int params, const char **param); + void execute_unmount(int ref, int params, const char **param); + void execute_input(int ref, int params, const char **param); + void execute_dumpkbd(int ref, int params, const char **param); + + running_machine& m_machine; + debugger_cpu& m_cpu; + debugger_console& m_console; + + global_entry *m_global_array; + cheat_system m_cheat; + + static const size_t MAX_GLOBALS; +}; #endif diff --git a/src/emu/debug/debugcon.cpp b/src/emu/debug/debugcon.cpp index 2ff355f9c27..9ce385554ee 100644 --- a/src/emu/debug/debugcon.cpp +++ b/src/emu/debug/debugcon.cpp @@ -16,8 +16,6 @@ #include "debugger.h" #include - - /*************************************************************************** CONSTANTS ***************************************************************************/ @@ -28,96 +26,61 @@ #define ERRORLOG_BUF_SIZE (1024 * 1024) #define ERRORLOG_MAX_LINES (ERRORLOG_BUF_SIZE / 20) - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -struct debug_command -{ - debug_command * next; - char command[32]; - const char * params; - const char * help; - void (*handler)(running_machine &machine, int ref, int params, const char **param); - void (*handler_ex)(int ref); - UINT32 flags; - int ref; - int minparams; - int maxparams; -}; - - - -/*************************************************************************** - LOCAL VARIABLES -***************************************************************************/ - -static text_buffer *console_textbuf; -static text_buffer *errorlog_textbuf; - -static debug_command *commandlist; - - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -static void debug_console_exit(running_machine &machine); - - - /*************************************************************************** Initialization and tear down ***************************************************************************/ -/*------------------------------------------------- - debug_console_init - initializes the console - system --------------------------------------------------*/ - -void debug_console_init(running_machine &machine) +debugger_console::debugger_console(running_machine &machine) + : m_machine(machine) + , m_console_textbuf(nullptr) + , m_errorlog_textbuf(nullptr) + , m_commandlist(nullptr) { /* allocate text buffers */ - console_textbuf = text_buffer_alloc(CONSOLE_BUF_SIZE, CONSOLE_MAX_LINES); - if (!console_textbuf) + m_console_textbuf = text_buffer_alloc(CONSOLE_BUF_SIZE, CONSOLE_MAX_LINES); + if (!m_console_textbuf) return; - errorlog_textbuf = text_buffer_alloc(ERRORLOG_BUF_SIZE, ERRORLOG_MAX_LINES); - if (!errorlog_textbuf) + m_errorlog_textbuf = text_buffer_alloc(ERRORLOG_BUF_SIZE, ERRORLOG_MAX_LINES); + if (!m_errorlog_textbuf) return; /* print the opening lines */ - debug_console_printf(machine, "%s debugger version %s\n", emulator_info::get_appname(), emulator_info::get_build_version()); - debug_console_printf(machine, "Currently targeting %s (%s)\n", machine.system().name, machine.system().description); + printf("%s debugger version %s\n", emulator_info::get_appname(), emulator_info::get_build_version()); + printf("Currently targeting %s (%s)\n", m_machine.system().name, m_machine.system().description); /* request callback upon exiting */ - machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(debug_console_exit), &machine)); + m_machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(debugger_console::exit), this)); + + /* listen in on the errorlog */ + using namespace std::placeholders; + m_machine.add_logerror_callback(std::bind(&debugger_console::errorlog_write_line, this, _1)); } /*------------------------------------------------- - debug_console_exit - frees the console - system + exit - frees the console system -------------------------------------------------*/ -static void debug_console_exit(running_machine &machine) +void debugger_console::exit() { /* free allocated memory */ - if (console_textbuf) - text_buffer_free(console_textbuf); - console_textbuf = nullptr; + if (m_console_textbuf) + { + text_buffer_free(m_console_textbuf); + } + m_console_textbuf = nullptr; - if (errorlog_textbuf) - text_buffer_free(errorlog_textbuf); - errorlog_textbuf = nullptr; + if (m_errorlog_textbuf) + { + text_buffer_free(m_errorlog_textbuf); + } + m_errorlog_textbuf = nullptr; /* free the command list */ - commandlist = nullptr; + m_commandlist = nullptr; } @@ -133,16 +96,16 @@ static void debug_console_exit(running_machine &machine) command -------------------------------------------------*/ -static void trim_parameter(char **paramptr, int keep_quotes) +void debugger_console::trim_parameter(char **paramptr, bool keep_quotes) { char *param = *paramptr; size_t len = strlen(param); - int repeat; + bool repeat; /* loop until all adornments are gone */ do { - repeat = 0; + repeat = false; /* check for begin/end quotes */ if (len >= 2 && param[0] == '"' && param[len - 1] == '"') @@ -161,7 +124,7 @@ static void trim_parameter(char **paramptr, int keep_quotes) param[len - 1] = 0; param++; len -= 2; - repeat = 1; + repeat = true; } /* check for leading spaces */ @@ -169,7 +132,7 @@ static void trim_parameter(char **paramptr, int keep_quotes) { param++; len--; - repeat = 1; + repeat = true; } /* check for trailing spaces */ @@ -177,7 +140,7 @@ static void trim_parameter(char **paramptr, int keep_quotes) { param[len - 1] = 0; len--; - repeat = 1; + repeat = true; } } while (repeat); @@ -190,7 +153,7 @@ static void trim_parameter(char **paramptr, int keep_quotes) command -------------------------------------------------*/ -static CMDERR internal_execute_command(running_machine &machine, int execute, int params, char **param) +CMDERR debugger_console::internal_execute_command(bool execute, int params, char **param) { debug_command *cmd, *found = nullptr; int i, foundcount = 0; @@ -221,7 +184,7 @@ static CMDERR internal_execute_command(running_machine &machine, int execute, in /* search the command list */ len = strlen(command); - for (cmd = commandlist; cmd != nullptr; cmd = cmd->next) + for (cmd = m_commandlist; cmd != nullptr; cmd = cmd->next) if (!strncmp(command, cmd->command, len)) { foundcount++; @@ -255,7 +218,7 @@ static CMDERR internal_execute_command(running_machine &machine, int execute, in /* execute the handler */ if (execute) - (*found->handler)(machine, found->ref, params, (const char **)param); + found->handler(found->ref, params, (const char **)param); return CMDERR_NONE; } @@ -265,7 +228,7 @@ static CMDERR internal_execute_command(running_machine &machine, int execute, in and either executes or just validates it -------------------------------------------------*/ -static CMDERR internal_parse_command(running_machine &machine, const char *original_command, int execute) +CMDERR debugger_console::internal_parse_command(const char *original_command, bool execute) { char command[MAX_COMMAND_LENGTH], parens[MAX_COMMAND_LENGTH]; char *params[MAX_COMMAND_PARAMS] = { nullptr }; @@ -338,7 +301,7 @@ static CMDERR internal_parse_command(running_machine &machine, const char *origi try { UINT64 expresult; - parsed_expression expression(debug_cpu_get_visible_symtable(machine), command_start, &expresult); + parsed_expression expression(m_machine.debugger().cpu().get_visible_symtable(), command_start, &expresult); } catch (expression_error &err) { @@ -347,7 +310,7 @@ static CMDERR internal_parse_command(running_machine &machine, const char *origi } else { - result = internal_execute_command(machine, execute, paramcount, ¶ms[0]); + result = internal_execute_command(execute, paramcount, ¶ms[0]); if (result != CMDERR_NONE) return MAKE_CMDERR(CMDERR_ERROR_CLASS(result), command_start - command); } @@ -357,64 +320,59 @@ static CMDERR internal_parse_command(running_machine &machine, const char *origi /*------------------------------------------------- - debug_console_execute_command - execute a - command string + execute_command - execute a command string -------------------------------------------------*/ -CMDERR debug_console_execute_command(running_machine &machine, const char *command, int echo) +CMDERR debugger_console::execute_command(const char *command, bool echo) { CMDERR result; /* echo if requested */ if (echo) - debug_console_printf(machine, ">%s\n", command); + printf(">%s\n", command); /* parse and execute */ - result = internal_parse_command(machine, command, TRUE); + result = internal_parse_command(command, TRUE); /* display errors */ if (result != CMDERR_NONE) { if (!echo) - debug_console_printf(machine, ">%s\n", command); - debug_console_printf(machine, " %*s^\n", CMDERR_ERROR_OFFSET(result), ""); - debug_console_printf(machine, "%s\n", debug_cmderr_to_string(result)); + printf(">%s\n", command); + printf(" %*s^\n", CMDERR_ERROR_OFFSET(result), ""); + printf("%s\n", cmderr_to_string(result)); } /* update all views */ if (echo) { - machine.debug_view().update_all(); - machine.debugger().refresh_display(); + m_machine.debug_view().update_all(); + m_machine.debugger().refresh_display(); } return result; } /*------------------------------------------------- - debug_console_validate_command - validate a - command string + validate_command - validate a command string -------------------------------------------------*/ -CMDERR debug_console_validate_command(running_machine &machine, const char *command) +CMDERR debugger_console::validate_command(const char *command) { - return internal_parse_command(machine, command, FALSE); + return internal_parse_command(command, false); } /*------------------------------------------------- - debug_console_register_command - register a - command handler + register_command - register a command handler -------------------------------------------------*/ -void debug_console_register_command(running_machine &machine, const char *command, UINT32 flags, int ref, int minparams, int maxparams, void (*handler)(running_machine &machine, int ref, int params, const char **param)) +void debugger_console::register_command(const char *command, UINT32 flags, int ref, int minparams, int maxparams, std::function handler) { - debug_command *cmd; + assert_always(m_machine.phase() == MACHINE_PHASE_INIT, "Can only call register_command() at init time!"); + assert_always((m_machine.debug_flags & DEBUG_FLAG_ENABLED) != 0, "Cannot call register_command() when debugger is not running"); - assert_always(machine.phase() == MACHINE_PHASE_INIT, "Can only call debug_console_register_command() at init time!"); - assert_always((machine.debug_flags & DEBUG_FLAG_ENABLED) != 0, "Cannot call debug_console_register_command() when debugger is not running"); - - cmd = auto_alloc_clear(machine, ()); + debug_command *cmd = auto_alloc_clear(m_machine, ()); /* fill in the command */ strcpy(cmd->command, command); @@ -425,8 +383,8 @@ void debug_console_register_command(running_machine &machine, const char *comman cmd->handler = handler; /* link it */ - cmd->next = commandlist; - commandlist = cmd; + cmd->next = m_commandlist; + m_commandlist = cmd; } @@ -438,11 +396,11 @@ void debug_console_register_command(running_machine &machine, const char *comman ***************************************************************************/ /*------------------------------------------------- - debug_cmderr_to_string - return a friendly - string for a given command error + cmderr_to_string - return a friendly string + for a given command error -------------------------------------------------*/ -const char *debug_cmderr_to_string(CMDERR error) +const char *debugger_console::cmderr_to_string(CMDERR error) { switch (CMDERR_ERROR_CLASS(error)) { @@ -466,83 +424,61 @@ const char *debug_cmderr_to_string(CMDERR error) ***************************************************************************/ /*------------------------------------------------- - debug_console_vprintf - vprintfs the given - arguments using the format to the debug - console + vprintf - vprintfs the given arguments using + the format to the debug console -------------------------------------------------*/ -void debug_console_vprintf(running_machine &machine, util::format_argument_pack const &args) +void debugger_console::vprintf(util::format_argument_pack const &args) { - text_buffer_print(console_textbuf, util::string_format(args).c_str()); + text_buffer_print(m_console_textbuf, util::string_format(args).c_str()); /* force an update of any console views */ - machine.debug_view().update_all(DVT_CONSOLE); + m_machine.debug_view().update_all(DVT_CONSOLE); } -void debug_console_vprintf(running_machine &machine, util::format_argument_pack &&args) +void debugger_console::vprintf(util::format_argument_pack &&args) { - text_buffer_print(console_textbuf, util::string_format(std::move(args)).c_str()); + text_buffer_print(m_console_textbuf, util::string_format(std::move(args)).c_str()); /* force an update of any console views */ - machine.debug_view().update_all(DVT_CONSOLE); + m_machine.debug_view().update_all(DVT_CONSOLE); } /*------------------------------------------------- - debug_console_vprintf_wrap - vprintfs the given - arguments using the format to the debug - console + vprintf_wrap - vprintfs the given arguments + using the format to the debug console -------------------------------------------------*/ -void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack const &args) +void debugger_console::vprintf_wrap(int wrapcol, util::format_argument_pack const &args) { - text_buffer_print_wrap(console_textbuf, util::string_format(args).c_str(), wrapcol); + text_buffer_print_wrap(m_console_textbuf, util::string_format(args).c_str(), wrapcol); /* force an update of any console views */ - machine.debug_view().update_all(DVT_CONSOLE); + m_machine.debug_view().update_all(DVT_CONSOLE); } -void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack &&args) +void debugger_console::vprintf_wrap(int wrapcol, util::format_argument_pack &&args) { - text_buffer_print_wrap(console_textbuf, util::string_format(std::move(args)).c_str(), wrapcol); + text_buffer_print_wrap(m_console_textbuf, util::string_format(std::move(args)).c_str(), wrapcol); /* force an update of any console views */ - machine.debug_view().update_all(DVT_CONSOLE); + m_machine.debug_view().update_all(DVT_CONSOLE); } /*------------------------------------------------- - debug_console_get_textbuf - return a pointer - to the console text buffer + errorlog_write_line - writes a line to the + errorlog ring buffer -------------------------------------------------*/ -text_buffer *debug_console_get_textbuf(void) +void debugger_console::errorlog_write_line(const char *line) { - return console_textbuf; -} - - -/*------------------------------------------------- - debug_errorlog_write_line - writes a line to - the errorlog ring buffer --------------------------------------------------*/ - -void debug_errorlog_write_line(const running_machine &machine, const char *line) -{ - if (errorlog_textbuf) - text_buffer_print(errorlog_textbuf, line); + if (m_errorlog_textbuf) + { + text_buffer_print(m_errorlog_textbuf, line); + } /* force an update of any log views */ - machine.debug_view().update_all(DVT_LOG); -} - - -/*------------------------------------------------- - debug_errorlog_get_textbuf - return a pointer - to the errorlog text buffer --------------------------------------------------*/ - -text_buffer *debug_errorlog_get_textbuf(void) -{ - return errorlog_textbuf; + m_machine.debug_view().update_all(DVT_LOG); } diff --git a/src/emu/debug/debugcon.h b/src/emu/debug/debugcon.h index 95aa2e0f8c8..5e04d349454 100644 --- a/src/emu/debug/debugcon.h +++ b/src/emu/debug/debugcon.h @@ -11,10 +11,11 @@ #ifndef __DEBUGCON_H__ #define __DEBUGCON_H__ +#include + #include "emu.h" #include "textbuf.h" - /*************************************************************************** CONSTANTS ***************************************************************************/ @@ -68,42 +69,67 @@ /* CMDERR is an error code for command evaluation */ typedef UINT32 CMDERR; - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -/* initialization */ -void debug_console_init(running_machine &machine); - -/* command handling */ -CMDERR debug_console_execute_command(running_machine &machine, const char *command, int echo); -CMDERR debug_console_validate_command(running_machine &machine, const char *command); -void debug_console_register_command(running_machine &machine, const char *command, UINT32 flags, int ref, int minparams, int maxparams, void (*handler)(running_machine &machine, int ref, int params, const char **param)); -const char * debug_cmderr_to_string(CMDERR error); - -/* console management */ -void debug_console_vprintf(running_machine &machine, util::format_argument_pack const &args); -void debug_console_vprintf(running_machine &machine, util::format_argument_pack &&args); -void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack const &args); -void debug_console_vprintf_wrap(running_machine &machine, int wrapcol, util::format_argument_pack &&args); -text_buffer * debug_console_get_textbuf(void); - -/* errorlog management */ -void debug_errorlog_write_line(const running_machine &machine, const char *line); -text_buffer * debug_errorlog_get_textbuf(void); - -/* convenience templates */ -template -inline void debug_console_printf(running_machine &machine, Format &&fmt, Params &&...args) +class debugger_console { - debug_console_vprintf(machine, util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} -template -inline void debug_console_printf_wrap(running_machine &machine, int wrapcol, Format &&fmt, Params &&...args) -{ - debug_console_vprintf_wrap(machine, wrapcol, util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); -} +public: + debugger_console(running_machine &machine); + + /* command handling */ + CMDERR execute_command(const char *command, bool echo); + CMDERR validate_command(const char *command); + void register_command(const char *command, UINT32 flags, int ref, int minparams, int maxparams, std::function handler); + + /* console management */ + void vprintf(util::format_argument_pack const &args); + void vprintf(util::format_argument_pack &&args); + void vprintf_wrap(int wrapcol, util::format_argument_pack const &args); + void vprintf_wrap(int wrapcol, util::format_argument_pack &&args); + text_buffer * get_console_textbuf() const { return m_console_textbuf; } + + /* errorlog management */ + void errorlog_write_line(const char *line); + text_buffer * get_errorlog_textbuf() const { return m_errorlog_textbuf; } + + /* convenience templates */ + template + inline void printf(Format &&fmt, Params &&...args) + { + vprintf(util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); + } + template + inline void printf_wrap(int wrapcol, Format &&fmt, Params &&...args) + { + vprintf_wrap(wrapcol, util::make_format_argument_pack(std::forward(fmt), std::forward(args)...)); + } + + static const char * cmderr_to_string(CMDERR error); + +private: + void exit(); + + void trim_parameter(char **paramptr, bool keep_quotes); + CMDERR internal_execute_command(bool execute, int params, char **param); + CMDERR internal_parse_command(const char *original_command, bool execute); + + struct debug_command + { + debug_command * next; + char command[32]; + const char * params; + const char * help; + std::function handler; + UINT32 flags; + int ref; + int minparams; + int maxparams; + }; + + running_machine &m_machine; + + text_buffer *m_console_textbuf; + text_buffer *m_errorlog_textbuf; + + debug_command *m_commandlist; +}; #endif diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp index 01f15cb3e46..d9a63868899 100644 --- a/src/emu/debug/debugcpu.cpp +++ b/src/emu/debug/debugcpu.cpp @@ -21,157 +21,92 @@ #include "coreutil.h" #include - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -#define NUM_TEMP_VARIABLES 10 - enum { EXECUTION_STATE_STOPPED, EXECUTION_STATE_RUNNING }; - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -struct debugcpu_private -{ - device_t *livecpu; - device_t *visiblecpu; - device_t *breakcpu; - - FILE * source_file; /* script source file */ - - symbol_table * symtable; /* global symbol table */ - - bool within_instruction_hook; - bool vblank_occurred; - bool memory_modified; - bool debugger_access; - - int execution_state; - device_t * m_stop_when_not_device; // stop execution when the device ceases to be this - - UINT32 bpindex; - UINT32 wpindex; - UINT32 rpindex; - - UINT64 wpdata; - UINT64 wpaddr; - UINT64 tempvar[NUM_TEMP_VARIABLES]; - - osd_ticks_t last_periodic_update_time; - - bool comments_loaded; -}; - - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -/* internal helpers */ -static void debug_cpu_exit(running_machine &machine); -static void on_vblank(running_machine &machine, screen_device &device, bool vblank_state); -static void reset_transient_flags(running_machine &machine); -static void process_source_file(running_machine &machine); - -/* expression handlers */ -static UINT64 expression_read_memory(void *param, const char *name, expression_space space, UINT32 address, int size); -static UINT64 expression_read_program_direct(address_space &space, int opcode, offs_t address, int size); -static UINT64 expression_read_memory_region(running_machine &machine, const char *rgntag, offs_t address, int size); -static void expression_write_memory(void *param, const char *name, expression_space space, UINT32 address, int size, UINT64 data); -static void expression_write_program_direct(address_space &space, int opcode, offs_t address, int size, UINT64 data); -static void expression_write_memory_region(running_machine &machine, const char *rgntag, offs_t address, int size, UINT64 data); -static expression_error::error_code expression_validate(void *param, const char *name, expression_space space); - -/* variable getters/setters */ -static UINT64 get_cpunum(symbol_table &table, void *ref); -static UINT64 get_beamx(symbol_table &table, void *ref); -static UINT64 get_beamy(symbol_table &table, void *ref); -static UINT64 get_frame(symbol_table &table, void *ref); - - - -/*************************************************************************** - INITIALIZATION AND CLEANUP -***************************************************************************/ +const size_t debugger_cpu::NUM_TEMP_VARIABLES = 10; /*------------------------------------------------- - debug_cpu_init - initialize the CPU + constructor - initialize the CPU information for debugging -------------------------------------------------*/ -void debug_cpu_init(running_machine &machine) +debugger_cpu::debugger_cpu(running_machine &machine) + : m_machine(machine) + , m_livecpu(nullptr) + , m_visiblecpu(nullptr) + , m_breakcpu(nullptr) + , m_source_file(nullptr) + , m_symtable(nullptr) + , m_execution_state(EXECUTION_STATE_STOPPED) + , m_bpindex(1) + , m_wpindex(1) + , m_rpindex(1) + , m_wpdata(0) + , m_wpaddr(0) + , m_last_periodic_update_time(0) + , m_comments_loaded(false) { - screen_device *first_screen = machine.first_screen(); - debugcpu_private *global; - int regnum; + screen_device *first_screen = m_machine.first_screen(); - /* allocate and reset globals */ - machine.debugcpu_data = global = auto_alloc_clear(machine, ()); - global->execution_state = EXECUTION_STATE_STOPPED; - global->bpindex = 1; - global->wpindex = 1; - global->rpindex = 1; + m_tempvar = make_unique_clear(NUM_TEMP_VARIABLES); /* create a global symbol table */ - global->symtable = global_alloc(symbol_table(&machine)); + m_symtable = std::make_unique(&m_machine); // configure our base memory accessors - debug_cpu_configure_memory(machine, *global->symtable); + configure_memory(*m_symtable); /* add "wpaddr", "wpdata", "cycles", "cpunum", "logunmap" to the global symbol table */ - global->symtable->add("wpaddr", symbol_table::READ_ONLY, &global->wpaddr); - global->symtable->add("wpdata", symbol_table::READ_ONLY, &global->wpdata); - global->symtable->add("cpunum", nullptr, get_cpunum); - global->symtable->add("beamx", (void *)first_screen, get_beamx); - global->symtable->add("beamy", (void *)first_screen, get_beamy); - global->symtable->add("frame", (void *)first_screen, get_frame); + m_symtable->add("wpaddr", symbol_table::READ_ONLY, &m_wpaddr); + m_symtable->add("wpdata", symbol_table::READ_ONLY, &m_wpdata); + + using namespace std::placeholders; + m_symtable->add("cpunum", nullptr, std::bind(&debugger_cpu::get_cpunum, this, _1, _2)); + m_symtable->add("beamx", (void *)first_screen, std::bind(&debugger_cpu::get_beamx, this, _1, _2)); + m_symtable->add("beamy", (void *)first_screen, std::bind(&debugger_cpu::get_beamy, this, _1, _2)); + m_symtable->add("frame", (void *)first_screen, std::bind(&debugger_cpu::get_frame, this, _1, _2)); /* add the temporary variables to the global symbol table */ - for (regnum = 0; regnum < NUM_TEMP_VARIABLES; regnum++) + for (int regnum = 0; regnum < NUM_TEMP_VARIABLES; regnum++) { char symname[10]; sprintf(symname, "temp%d", regnum); - global->symtable->add(symname, symbol_table::READ_WRITE, &global->tempvar[regnum]); + m_symtable->add(symname, symbol_table::READ_WRITE, &m_tempvar[regnum]); } /* first CPU is visible by default */ - global->visiblecpu = machine.firstcpu; + m_visiblecpu = m_machine.firstcpu; /* add callback for breaking on VBLANK */ - if (machine.first_screen() != nullptr) - machine.first_screen()->register_vblank_callback(vblank_state_delegate(FUNC(on_vblank), &machine)); - - machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(debug_cpu_exit), &machine)); + if (m_machine.first_screen() != nullptr) + m_machine.first_screen()->register_vblank_callback(vblank_state_delegate(FUNC(debugger_cpu::on_vblank), this)); } - -void debug_cpu_configure_memory(running_machine &machine, symbol_table &table) +void debugger_cpu::configure_memory(symbol_table &table) { - table.configure_memory(&machine, expression_validate, expression_read_memory, expression_write_memory); + using namespace std::placeholders; + table.configure_memory( + &m_machine, + std::bind(&debugger_cpu::expression_validate, this, _1, _2, _3), + std::bind(&debugger_cpu::expression_read_memory, this, _1, _2, _3, _4, _5), + std::bind(&debugger_cpu::expression_write_memory, this, _1, _2, _3, _4, _5, _6)); } - /*------------------------------------------------- - debug_cpu_flush_traces - flushes all traces; - this is useful if a trace is going on when we + flush_traces - flushes all traces; this is + useful if a trace is going on when we fatalerror -------------------------------------------------*/ -void debug_cpu_flush_traces(running_machine &machine) +void debugger_cpu::flush_traces() { /* this can be called on exit even when no debugging is enabled, so make sure the devdebug is valid before proceeding */ - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug() != nullptr) device.debug()->trace_flush(); } @@ -183,90 +118,86 @@ void debug_cpu_flush_traces(running_machine &machine) ***************************************************************************/ /*------------------------------------------------- - cpu_get_visible_cpu - return the visible CPU + get_visible_cpu - return the visible CPU device (the one that commands should apply to) -------------------------------------------------*/ -device_t *debug_cpu_get_visible_cpu(running_machine &machine) +device_t* debugger_cpu::get_visible_cpu() { - return machine.debugcpu_data->visiblecpu; + return m_visiblecpu; } /*------------------------------------------------- - debug_cpu_within_instruction_hook - true if - the debugger is currently live + within_instruction_hook - true if the debugger + is currently live -------------------------------------------------*/ -int debug_cpu_within_instruction_hook(running_machine &machine) +bool debugger_cpu::within_instruction_hook() { - return machine.debugcpu_data->within_instruction_hook; + return m_within_instruction_hook; } /*------------------------------------------------- - debug_cpu_is_stopped - return true if the + is_stopped - return true if the current execution state is stopped -------------------------------------------------*/ -int debug_cpu_is_stopped(running_machine &machine) +bool debugger_cpu::is_stopped() { - debugcpu_private *global = machine.debugcpu_data; - return (global != nullptr) ? (global->execution_state == EXECUTION_STATE_STOPPED) : false; + return m_execution_state == EXECUTION_STATE_STOPPED; } - /*************************************************************************** SYMBOL TABLE INTERFACES ***************************************************************************/ /*------------------------------------------------- - debug_cpu_get_global_symtable - return the - global symbol table + get_global_symtable - return the global + symbol table -------------------------------------------------*/ -symbol_table *debug_cpu_get_global_symtable(running_machine &machine) +symbol_table* debugger_cpu::get_global_symtable() { - return machine.debugcpu_data->symtable; + return m_symtable.get(); } /*------------------------------------------------- - debug_cpu_get_visible_symtable - return the + get_visible_symtable - return the locally-visible symbol table -------------------------------------------------*/ -symbol_table *debug_cpu_get_visible_symtable(running_machine &machine) +symbol_table* debugger_cpu::get_visible_symtable() { - return &machine.debugcpu_data->visiblecpu->debug()->symtable(); + return &m_visiblecpu->debug()->symtable(); } /*------------------------------------------------- - debug_cpu_source_script - specifies a debug - command script to execute + source_script - specifies a debug command + script to execute -------------------------------------------------*/ -void debug_cpu_source_script(running_machine &machine, const char *file) +void debugger_cpu::source_script(const char *file) { - debugcpu_private *global = machine.debugcpu_data; - /* close any existing source file */ - if (global->source_file != nullptr) + if (m_source_file != nullptr) { - fclose(global->source_file); - global->source_file = nullptr; + fclose(m_source_file); + m_source_file = nullptr; } /* open a new one if requested */ if (file != nullptr) { - global->source_file = fopen(file, "r"); - if (!global->source_file) + m_source_file = fopen(file, "r"); + if (!m_source_file) { - if (machine.phase() == MACHINE_PHASE_RUNNING) - debug_console_printf(machine, "Cannot open command file '%s'\n", file); + if (m_machine.phase() == MACHINE_PHASE_RUNNING) + m_machine.debugger().console().printf("Cannot open command file '%s'\n", file); else fatalerror("Cannot open command file '%s'\n", file); } @@ -280,11 +211,11 @@ void debug_cpu_source_script(running_machine &machine, const char *file) //************************************************************************** //------------------------------------------------- -// debug_comment_save - save all comments for -// the given machine +// omment_save - save all comments for the given +// machine //------------------------------------------------- -bool debug_comment_save(running_machine &machine) +bool debugger_cpu::comment_save() { bool comments_saved = false; @@ -306,11 +237,11 @@ bool debug_comment_save(running_machine &machine) xml_data_node *systemnode = xml_add_child(commentnode, "system", nullptr); if (systemnode == nullptr) throw emu_exception(); - xml_set_attribute(systemnode, "name", machine.system().name); + xml_set_attribute(systemnode, "name", m_machine.system().name); // for each device bool found_comments = false; - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) if (device.debug() && device.debug()->comment_count() > 0) { // create a node for this device @@ -328,8 +259,8 @@ bool debug_comment_save(running_machine &machine) // flush the file if (found_comments) { - emu_file file(machine.options().comment_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); - osd_file::error filerr = file.open(machine.basename(), ".cmt"); + emu_file file(m_machine.options().comment_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + osd_file::error filerr = file.open(m_machine.basename(), ".cmt"); if (filerr == osd_file::error::NONE) { xml_file_write(root, file); @@ -349,15 +280,15 @@ bool debug_comment_save(running_machine &machine) } //------------------------------------------------- -// debug_comment_load - load all comments for -// the given machine +// comment_load - load all comments for the given +// machine //------------------------------------------------- -bool debug_comment_load(running_machine &machine,bool is_inline) +bool debugger_cpu::comment_load(bool is_inline) { // open the file - emu_file file(machine.options().comment_directory(), OPEN_FLAG_READ); - osd_file::error filerr = file.open(machine.basename(), ".cmt"); + emu_file file(m_machine.options().comment_directory(), OPEN_FLAG_READ); + osd_file::error filerr = file.open(m_machine.basename(), ".cmt"); // if an error, just return false if (filerr != osd_file::error::NONE) @@ -384,18 +315,18 @@ bool debug_comment_load(running_machine &machine,bool is_inline) // check to make sure the file is applicable xml_data_node *systemnode = xml_get_sibling(commentnode->child, "system"); const char *name = xml_get_attribute_string(systemnode, "name", ""); - if (strcmp(name, machine.system().name) != 0) + if (strcmp(name, m_machine.system().name) != 0) throw emu_exception(); // iterate over devices for (xml_data_node *cpunode = xml_get_sibling(systemnode->child, "cpu"); cpunode; cpunode = xml_get_sibling(cpunode->next, "cpu")) { const char *cputag_name = xml_get_attribute_string(cpunode, "tag", ""); - device_t *device = machine.device(cputag_name); + device_t *device = m_machine.device(cputag_name); if (device != nullptr) { if(is_inline == false) - debug_console_printf(machine,"@%s\n",cputag_name); + m_machine.debugger().console().printf("@%s\n", cputag_name); if (!device->debug()->comment_import(*cpunode,is_inline)) throw emu_exception(); @@ -422,12 +353,11 @@ bool debug_comment_load(running_machine &machine,bool is_inline) ***************************************************************************/ /*------------------------------------------------- - debug_cpu_translate - return the physical - address corresponding to the given logical - address + translate - return the physical address + corresponding to the given logical address -------------------------------------------------*/ -int debug_cpu_translate(address_space &space, int intention, offs_t *address) +bool debugger_cpu::translate(address_space &space, int intention, offs_t *address) { device_memory_interface *memory; if (space.device().interface(memory)) @@ -441,58 +371,57 @@ int debug_cpu_translate(address_space &space, int intention, offs_t *address) ***************************************************************************/ /*------------------------------------------------- - debug_read_byte - return a byte from the - the specified memory space + read_byte - return a byte from the specified + memory space -------------------------------------------------*/ -UINT8 debug_read_byte(address_space &space, offs_t address, int apply_translation) +UINT8 debugger_cpu::read_byte(address_space &space, offs_t address, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - UINT64 custom; - UINT8 result; - /* mask against the logical byte mask */ address &= space.logbytemask(); /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); /* translate if necessary; if not mapped, return 0xff */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address)) + UINT64 custom; + UINT8 result; + if (apply_translation && !translate(space, TRANSLATE_READ_DEBUG, &address)) + { result = 0xff; - - /* if there is a custom read handler, and it returns true, use that value */ + } else if (space.device().memory().read(space.spacenum(), address, 1, custom)) + { /* if there is a custom read handler, and it returns true, use that value */ result = custom; - - /* otherwise, call the byte reading function for the translated address */ + } else + { /* otherwise, call the byte reading function for the translated address */ result = space.read_byte(address); + } /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); + m_debugger_access = false; + space.set_debugger_access(false); return result; } /*------------------------------------------------- - debug_read_word - return a word from the - specified memory space + read_word - return a word from the specified + memory space -------------------------------------------------*/ -UINT16 debug_read_word(address_space &space, offs_t address, int apply_translation) +UINT16 debugger_cpu::read_word(address_space &space, offs_t address, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - UINT16 result; - /* mask against the logical byte mask */ address &= space.logbytemask(); - /* if this is misaligned read, or if there are no word readers, just read two bytes */ + UINT16 result; if (!WORD_ALIGNED(address)) - { - UINT8 byte0 = debug_read_byte(space, address + 0, apply_translation); - UINT8 byte1 = debug_read_byte(space, address + 1, apply_translation); + { /* if this is misaligned read, or if there are no word readers, just read two bytes */ + UINT8 byte0 = read_byte(space, address + 0, apply_translation); + UINT8 byte1 = read_byte(space, address + 1, apply_translation); /* based on the endianness, the result is assembled differently */ if (space.endianness() == ENDIANNESS_LITTLE) @@ -500,29 +429,31 @@ UINT16 debug_read_word(address_space &space, offs_t address, int apply_translati else result = byte1 | (byte0 << 8); } - - /* otherwise, this proceeds like the byte case */ else - { - UINT64 custom; + { /* otherwise, this proceeds like the byte case */ /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); /* translate if necessary; if not mapped, return 0xffff */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address)) + UINT64 custom; + if (apply_translation && !translate(space, TRANSLATE_READ_DEBUG, &address)) + { result = 0xffff; - - /* if there is a custom read handler, and it returns true, use that value */ + } else if (space.device().memory().read(space.spacenum(), address, 2, custom)) + { /* if there is a custom read handler, and it returns true, use that value */ result = custom; - - /* otherwise, call the byte reading function for the translated address */ + } else + { /* otherwise, call the byte reading function for the translated address */ result = space.read_word(address); + } /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); + m_debugger_access = false; + space.set_debugger_access(false); } return result; @@ -530,23 +461,20 @@ UINT16 debug_read_word(address_space &space, offs_t address, int apply_translati /*------------------------------------------------- - debug_read_dword - return a dword from the - specified memory space + read_dword - return a dword from the specified + memory space -------------------------------------------------*/ -UINT32 debug_read_dword(address_space &space, offs_t address, int apply_translation) +UINT32 debugger_cpu::read_dword(address_space &space, offs_t address, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - UINT32 result; - /* mask against the logical byte mask */ address &= space.logbytemask(); - /* if this is misaligned read, or if there are no dword readers, just read two words */ + UINT32 result; if (!DWORD_ALIGNED(address)) - { - UINT16 word0 = debug_read_word(space, address + 0, apply_translation); - UINT16 word1 = debug_read_word(space, address + 2, apply_translation); + { /* if this is a misaligned read, or if there are no dword readers, just read two words */ + UINT16 word0 = read_word(space, address + 0, apply_translation); + UINT16 word1 = read_word(space, address + 2, apply_translation); /* based on the endianness, the result is assembled differently */ if (space.endianness() == ENDIANNESS_LITTLE) @@ -554,29 +482,30 @@ UINT32 debug_read_dword(address_space &space, offs_t address, int apply_translat else result = word1 | (word0 << 16); } - - /* otherwise, this proceeds like the byte case */ else - { - UINT64 custom; + { /* otherwise, this proceeds like the byte case */ /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); - /* translate if necessary; if not mapped, return 0xffffffff */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address)) + UINT64 custom; + if (apply_translation && !translate(space, TRANSLATE_READ_DEBUG, &address)) + { /* translate if necessary; if not mapped, return 0xffffffff */ result = 0xffffffff; - - /* if there is a custom read handler, and it returns true, use that value */ + } else if (space.device().memory().read(space.spacenum(), address, 4, custom)) + { /* if there is a custom read handler, and it returns true, use that value */ result = custom; - - /* otherwise, call the byte reading function for the translated address */ + } else + { /* otherwise, call the byte reading function for the translated address */ result = space.read_dword(address); + } /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); + m_debugger_access = false; + space.set_debugger_access(false); } return result; @@ -584,23 +513,20 @@ UINT32 debug_read_dword(address_space &space, offs_t address, int apply_translat /*------------------------------------------------- - debug_read_qword - return a qword from the - specified memory space + read_qword - return a qword from the specified + memory space -------------------------------------------------*/ -UINT64 debug_read_qword(address_space &space, offs_t address, int apply_translation) +UINT64 debugger_cpu::read_qword(address_space &space, offs_t address, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - UINT64 result; - /* mask against the logical byte mask */ address &= space.logbytemask(); - /* if this is misaligned read, or if there are no qword readers, just read two dwords */ + UINT64 result; if (!QWORD_ALIGNED(address)) - { - UINT32 dword0 = debug_read_dword(space, address + 0, apply_translation); - UINT32 dword1 = debug_read_dword(space, address + 4, apply_translation); + { /* if this is a misaligned read, or if there are no qword readers, just read two dwords */ + UINT32 dword0 = read_dword(space, address + 0, apply_translation); + UINT32 dword1 = read_dword(space, address + 4, apply_translation); /* based on the endianness, the result is assembled differently */ if (space.endianness() == ENDIANNESS_LITTLE) @@ -608,29 +534,31 @@ UINT64 debug_read_qword(address_space &space, offs_t address, int apply_translat else result = dword1 | ((UINT64)dword0 << 32); } - - /* otherwise, this proceeds like the byte case */ else - { - UINT64 custom; + { /* otherwise, this proceeds like the byte case */ /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); /* translate if necessary; if not mapped, return 0xffffffffffffffff */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address)) + UINT64 custom; + if (apply_translation && !translate(space, TRANSLATE_READ_DEBUG, &address)) + { result = ~(UINT64)0; - - /* if there is a custom read handler, and it returns true, use that value */ + } else if (space.device().memory().read(space.spacenum(), address, 8, custom)) + { /* if there is a custom read handler, and it returns true, use that value */ result = custom; - - /* otherwise, call the byte reading function for the translated address */ + } else + { /* otherwise, call the byte reading function for the translated address */ result = space.read_qword(address); + } /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); + m_debugger_access = false; + space.set_debugger_access(false); } return result; @@ -638,41 +566,40 @@ UINT64 debug_read_qword(address_space &space, offs_t address, int apply_translat /*------------------------------------------------- - debug_read_memory - return 1,2,4 or 8 bytes + read_memory - return 1,2,4 or 8 bytes from the specified memory space -------------------------------------------------*/ -UINT64 debug_read_memory(address_space &space, offs_t address, int size, int apply_translation) +UINT64 debugger_cpu::read_memory(address_space &space, offs_t address, int size, int apply_translation) { UINT64 result = ~(UINT64)0 >> (64 - 8*size); switch (size) { - case 1: result = debug_read_byte(space, address, apply_translation); break; - case 2: result = debug_read_word(space, address, apply_translation); break; - case 4: result = debug_read_dword(space, address, apply_translation); break; - case 8: result = debug_read_qword(space, address, apply_translation); break; + case 1: result = read_byte(space, address, apply_translation); break; + case 2: result = read_word(space, address, apply_translation); break; + case 4: result = read_dword(space, address, apply_translation); break; + case 8: result = read_qword(space, address, apply_translation); break; } return result; } /*------------------------------------------------- - debug_write_byte - write a byte to the - specified memory space + write_byte - write a byte to the specified + memory space -------------------------------------------------*/ -void debug_write_byte(address_space &space, offs_t address, UINT8 data, int apply_translation) +void debugger_cpu::write_byte(address_space &space, offs_t address, UINT8 data, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - /* mask against the logical byte mask */ address &= space.logbytemask(); /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); /* translate if necessary; if not mapped, we're done */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_WRITE_DEBUG, &address)) + if (apply_translation && !translate(space, TRANSLATE_WRITE_DEBUG, &address)) ; /* if there is a custom write handler, and it returns true, use that */ @@ -684,20 +611,20 @@ void debug_write_byte(address_space &space, offs_t address, UINT8 data, int appl space.write_byte(address, data); /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); - global->memory_modified = true; + m_debugger_access = false; + space.set_debugger_access(false); + + m_memory_modified = true; } /*------------------------------------------------- - debug_write_word - write a word to the - specified memory space + write_word - write a word to the specified + memory space -------------------------------------------------*/ -void debug_write_word(address_space &space, offs_t address, UINT16 data, int apply_translation) +void debugger_cpu::write_word(address_space &space, offs_t address, UINT16 data, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - /* mask against the logical byte mask */ address &= space.logbytemask(); @@ -706,13 +633,13 @@ void debug_write_word(address_space &space, offs_t address, UINT16 data, int app { if (space.endianness() == ENDIANNESS_LITTLE) { - debug_write_byte(space, address + 0, data >> 0, apply_translation); - debug_write_byte(space, address + 1, data >> 8, apply_translation); + write_byte(space, address + 0, data >> 0, apply_translation); + write_byte(space, address + 1, data >> 8, apply_translation); } else { - debug_write_byte(space, address + 0, data >> 8, apply_translation); - debug_write_byte(space, address + 1, data >> 0, apply_translation); + write_byte(space, address + 0, data >> 8, apply_translation); + write_byte(space, address + 1, data >> 0, apply_translation); } } @@ -720,10 +647,11 @@ void debug_write_word(address_space &space, offs_t address, UINT16 data, int app else { /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); /* translate if necessary; if not mapped, we're done */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_WRITE_DEBUG, &address)) + if (apply_translation && !translate(space, TRANSLATE_WRITE_DEBUG, &address)) ; /* if there is a custom write handler, and it returns true, use that */ @@ -735,21 +663,21 @@ void debug_write_word(address_space &space, offs_t address, UINT16 data, int app space.write_word(address, data); /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); - global->memory_modified = true; + m_debugger_access = false; + space.set_debugger_access(false); + + m_memory_modified = true; } } /*------------------------------------------------- - debug_write_dword - write a dword to the - specified memory space + write_dword - write a dword to the specified + memory space -------------------------------------------------*/ -void debug_write_dword(address_space &space, offs_t address, UINT32 data, int apply_translation) +void debugger_cpu::write_dword(address_space &space, offs_t address, UINT32 data, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - /* mask against the logical byte mask */ address &= space.logbytemask(); @@ -758,13 +686,13 @@ void debug_write_dword(address_space &space, offs_t address, UINT32 data, int ap { if (space.endianness() == ENDIANNESS_LITTLE) { - debug_write_word(space, address + 0, data >> 0, apply_translation); - debug_write_word(space, address + 2, data >> 16, apply_translation); + write_word(space, address + 0, data >> 0, apply_translation); + write_word(space, address + 2, data >> 16, apply_translation); } else { - debug_write_word(space, address + 0, data >> 16, apply_translation); - debug_write_word(space, address + 2, data >> 0, apply_translation); + write_word(space, address + 0, data >> 16, apply_translation); + write_word(space, address + 2, data >> 0, apply_translation); } } @@ -772,10 +700,10 @@ void debug_write_dword(address_space &space, offs_t address, UINT32 data, int ap else { /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + space.set_debugger_access(m_debugger_access = true); /* translate if necessary; if not mapped, we're done */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_WRITE_DEBUG, &address)) + if (apply_translation && !translate(space, TRANSLATE_WRITE_DEBUG, &address)) ; /* if there is a custom write handler, and it returns true, use that */ @@ -787,21 +715,21 @@ void debug_write_dword(address_space &space, offs_t address, UINT32 data, int ap space.write_dword(address, data); /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); - global->memory_modified = true; + m_debugger_access = false; + space.set_debugger_access(false); + + m_memory_modified = true; } } /*------------------------------------------------- - debug_write_qword - write a qword to the - specified memory space + write_qword - write a qword to the specified + memory space -------------------------------------------------*/ -void debug_write_qword(address_space &space, offs_t address, UINT64 data, int apply_translation) +void debugger_cpu::write_qword(address_space &space, offs_t address, UINT64 data, int apply_translation) { - debugcpu_private *global = space.machine().debugcpu_data; - /* mask against the logical byte mask */ address &= space.logbytemask(); @@ -810,13 +738,13 @@ void debug_write_qword(address_space &space, offs_t address, UINT64 data, int ap { if (space.endianness() == ENDIANNESS_LITTLE) { - debug_write_dword(space, address + 0, data >> 0, apply_translation); - debug_write_dword(space, address + 4, data >> 32, apply_translation); + write_dword(space, address + 0, data >> 0, apply_translation); + write_dword(space, address + 4, data >> 32, apply_translation); } else { - debug_write_dword(space, address + 0, data >> 32, apply_translation); - debug_write_dword(space, address + 4, data >> 0, apply_translation); + write_dword(space, address + 0, data >> 32, apply_translation); + write_dword(space, address + 4, data >> 0, apply_translation); } } @@ -824,10 +752,11 @@ void debug_write_qword(address_space &space, offs_t address, UINT64 data, int ap else { /* all accesses from this point on are for the debugger */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); /* translate if necessary; if not mapped, we're done */ - if (apply_translation && !debug_cpu_translate(space, TRANSLATE_WRITE_DEBUG, &address)) + if (apply_translation && !translate(space, TRANSLATE_WRITE_DEBUG, &address)) ; /* if there is a custom write handler, and it returns true, use that */ @@ -839,48 +768,51 @@ void debug_write_qword(address_space &space, offs_t address, UINT64 data, int ap space.write_qword(address, data); /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); - global->memory_modified = true; + m_debugger_access = false; + space.set_debugger_access(false); + + m_memory_modified = true; } } /*------------------------------------------------- - debug_write_memory - write 1,2,4 or 8 bytes - to the specified memory space + write_memory - write 1,2,4 or 8 bytes to the + specified memory space -------------------------------------------------*/ -void debug_write_memory(address_space &space, offs_t address, UINT64 data, int size, int apply_translation) +void debugger_cpu::write_memory(address_space &space, offs_t address, UINT64 data, int size, int apply_translation) { switch (size) { - case 1: debug_write_byte(space, address, data, apply_translation); break; - case 2: debug_write_word(space, address, data, apply_translation); break; - case 4: debug_write_dword(space, address, data, apply_translation); break; - case 8: debug_write_qword(space, address, data, apply_translation); break; + case 1: write_byte(space, address, data, apply_translation); break; + case 2: write_word(space, address, data, apply_translation); break; + case 4: write_dword(space, address, data, apply_translation); break; + case 8: write_qword(space, address, data, apply_translation); break; } } /*------------------------------------------------- - debug_read_opcode - read 1,2,4 or 8 bytes at - the given offset from opcode space + read_opcode - read 1,2,4 or 8 bytes at the + given offset from opcode space -------------------------------------------------*/ -UINT64 debug_read_opcode(address_space &space, offs_t address, int size) +UINT64 debugger_cpu::read_opcode(address_space &space, offs_t address, int size) { UINT64 result = ~(UINT64)0 & (~(UINT64)0 >> (64 - 8*size)), result2; - debugcpu_private *global = space.machine().debugcpu_data; /* keep in logical range */ address &= space.logbytemask(); /* return early if we got the result directly */ - space.set_debugger_access(global->debugger_access = true); + m_debugger_access = true; + space.set_debugger_access(true); device_memory_interface *memory; if (space.device().interface(memory) && memory->readop(address, size, result2)) { - space.set_debugger_access(global->debugger_access = false); + m_debugger_access = false; + space.set_debugger_access(false); return result2; } @@ -888,8 +820,8 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size) if (size > space.data_width() / 8) { int halfsize = size / 2; - UINT64 r0 = debug_read_opcode(space, address + 0, halfsize); - UINT64 r1 = debug_read_opcode(space, address + halfsize, halfsize); + UINT64 r0 = read_opcode(space, address + 0, halfsize); + UINT64 r1 = read_opcode(space, address + halfsize, halfsize); if (space.endianness() == ENDIANNESS_LITTLE) return r0 | (r1 << (8 * halfsize)); @@ -898,7 +830,7 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size) } /* translate to physical first */ - if (!debug_cpu_translate(space, TRANSLATE_FETCH_DEBUG, &address)) + if (!translate(space, TRANSLATE_FETCH_DEBUG, &address)) return result; /* keep in physical range */ @@ -953,12 +885,15 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size) break; default: - fatalerror("debug_read_opcode: unknown type = %d\n", space.data_width() / 8 * 10 + size); + fatalerror("read_opcode: unknown type = %d\n", space.data_width() / 8 * 10 + size); } /* turn on debugger access */ - if (!global->debugger_access) - space.set_debugger_access(global->debugger_access = true); + if (!m_debugger_access) + { + m_debugger_access = true; + space.set_debugger_access(true); + } /* switch off the size and handle unaligned accesses */ switch (size) @@ -1007,7 +942,9 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size) } /* no longer accessing via the debugger */ - space.set_debugger_access(global->debugger_access = false); + m_debugger_access = false; + space.set_debugger_access(false); + return result; } @@ -1017,29 +954,14 @@ UINT64 debug_read_opcode(address_space &space, offs_t address, int size) INTERNAL HELPERS ***************************************************************************/ -/*------------------------------------------------- - debug_cpu_exit - free all memory --------------------------------------------------*/ - -static void debug_cpu_exit(running_machine &machine) -{ - debugcpu_private *global = machine.debugcpu_data; - - /* free the global symbol table */ - if (global != nullptr) - global_free(global->symtable); -} - - /*------------------------------------------------- on_vblank - called when a VBLANK hits -------------------------------------------------*/ -static void on_vblank(running_machine &machine, screen_device &device, bool vblank_state) +void debugger_cpu::on_vblank(screen_device &device, bool vblank_state) { /* just set a global flag to be consumed later */ - if (vblank_state) - device.machine().debugcpu_data->vblank_occurred = true; + m_vblank_occurred = true; } @@ -1048,12 +970,12 @@ static void on_vblank(running_machine &machine, screen_device &device, bool vbla flags on all CPUs -------------------------------------------------*/ -static void reset_transient_flags(running_machine &machine) +void debugger_cpu::reset_transient_flags() { /* loop over CPUs and reset the transient flags */ - for (device_t &device : device_iterator(machine.root_device())) + for (device_t &device : device_iterator(m_machine.root_device())) device.debug()->reset_transient_flag(); - machine.debugcpu_data->m_stop_when_not_device = nullptr; + m_stop_when_not_device = nullptr; } @@ -1062,42 +984,37 @@ static void reset_transient_flags(running_machine &machine) a source file -------------------------------------------------*/ -static void process_source_file(running_machine &machine) +void debugger_cpu::process_source_file() { - debugcpu_private *global = machine.debugcpu_data; - /* loop until the file is exhausted or until we are executing again */ - while (global->source_file != nullptr && global->execution_state == EXECUTION_STATE_STOPPED) + while (m_source_file != nullptr && m_execution_state == EXECUTION_STATE_STOPPED) { - char buf[512]; - int i; - char *s; - /* stop at the end of file */ - if (feof(global->source_file)) + if (feof(m_source_file)) { - fclose(global->source_file); - global->source_file = nullptr; + fclose(m_source_file); + m_source_file = nullptr; return; } /* fetch the next line */ + char buf[512]; memset(buf, 0, sizeof(buf)); - fgets(buf, sizeof(buf), global->source_file); + fgets(buf, sizeof(buf), m_source_file); /* strip out comments (text after '//') */ - s = strstr(buf, "//"); + char *s = strstr(buf, "//"); if (s) *s = '\0'; /* strip whitespace */ - i = (int)strlen(buf); + int i = (int)strlen(buf); while((i > 0) && (isspace((UINT8)buf[i-1]))) buf[--i] = '\0'; /* execute the command */ if (buf[0]) - debug_console_execute_command(machine, buf, 1); + m_machine.debugger().console().execute_command(buf, true); } } @@ -1112,12 +1029,12 @@ static void process_source_file(running_machine &machine) based on a case insensitive tag search -------------------------------------------------*/ -static device_t *expression_get_device(running_machine &machine, const char *tag) +device_t* debugger_cpu::expression_get_device(const char *tag) { // convert to lowercase then lookup the name (tags are enforced to be all lower case) std::string fullname(tag); strmakelower(fullname); - return machine.device(fullname.c_str()); + return m_machine.device(fullname.c_str()); } @@ -1127,63 +1044,69 @@ static device_t *expression_get_device(running_machine &machine, const char *tag space -------------------------------------------------*/ -static UINT64 expression_read_memory(void *param, const char *name, expression_space spacenum, UINT32 address, int size) +UINT64 debugger_cpu::expression_read_memory(void *param, const char *name, expression_space spacenum, UINT32 address, int size) { - running_machine &machine = *(running_machine *)param; - UINT64 result = ~(UINT64)0 >> (64 - 8*size); - device_t *device = nullptr; - switch (spacenum) { case EXPSPACE_PROGRAM_LOGICAL: case EXPSPACE_DATA_LOGICAL: case EXPSPACE_IO_LOGICAL: case EXPSPACE_SPACE3_LOGICAL: + { + device_t *device = nullptr; if (name != nullptr) - device = expression_get_device(machine, name); + device = expression_get_device(name); if (device == nullptr) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (device->memory().has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL))) { address_space &space = device->memory().space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL)); - result = debug_read_memory(space, space.address_to_byte(address), size, true); + return read_memory(space, space.address_to_byte(address), size, true); } break; + } case EXPSPACE_PROGRAM_PHYSICAL: case EXPSPACE_DATA_PHYSICAL: case EXPSPACE_IO_PHYSICAL: case EXPSPACE_SPACE3_PHYSICAL: + { + device_t *device = nullptr; if (name != nullptr) - device = expression_get_device(machine, name); + device = expression_get_device(name); if (device == nullptr) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (device->memory().has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL))) { address_space &space = device->memory().space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL)); - result = debug_read_memory(space, space.address_to_byte(address), size, false); + return read_memory(space, space.address_to_byte(address), size, false); } break; + } case EXPSPACE_OPCODE: case EXPSPACE_RAMWRITE: + { + device_t *device = nullptr; if (name != nullptr) - device = expression_get_device(machine, name); + device = expression_get_device(name); if (device == nullptr) - device = debug_cpu_get_visible_cpu(machine); - result = expression_read_program_direct(device->memory().space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size); + device = m_machine.debugger().cpu().get_visible_cpu(); + return expression_read_program_direct(device->memory().space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size); break; + } case EXPSPACE_REGION: if (name == nullptr) break; - result = expression_read_memory_region(machine, name, address, size); + return expression_read_memory_region(name, address, size); break; default: break; } - return result; + + return 0; } @@ -1192,9 +1115,8 @@ static UINT64 expression_read_memory(void *param, const char *name, expression_s directly from an opcode or RAM pointer -------------------------------------------------*/ -static UINT64 expression_read_program_direct(address_space &space, int opcode, offs_t address, int size) +UINT64 debugger_cpu::expression_read_program_direct(address_space &space, int opcode, offs_t address, int size) { - UINT64 result = ~(UINT64)0 >> (64 - 8*size); UINT8 *base; /* adjust the address into a byte address, but not if being called recursively */ @@ -1205,17 +1127,16 @@ static UINT64 expression_read_program_direct(address_space &space, int opcode, o if (size > 1) { int halfsize = size / 2; - UINT64 r0, r1; /* read each half, from lower address to upper address */ - r0 = expression_read_program_direct(space, opcode | 2, address + 0, halfsize); - r1 = expression_read_program_direct(space, opcode | 2, address + halfsize, halfsize); + UINT64 r0 = expression_read_program_direct(space, opcode | 2, address + 0, halfsize); + UINT64 r1 = expression_read_program_direct(space, opcode | 2, address + halfsize, halfsize); /* assemble based on the target endianness */ if (space.endianness() == ENDIANNESS_LITTLE) - result = r0 | (r1 << (8 * halfsize)); + return r0 | (r1 << (8 * halfsize)); else - result = r1 | (r0 << (8 * halfsize)); + return r1 | (r0 << (8 * halfsize)); } /* handle the byte-sized final requests */ @@ -1231,12 +1152,13 @@ static UINT64 expression_read_program_direct(address_space &space, int opcode, o if (base != nullptr) { if (space.endianness() == ENDIANNESS_LITTLE) - result = base[BYTE8_XOR_LE(address) & lowmask]; + return base[BYTE8_XOR_LE(address) & lowmask]; else - result = base[BYTE8_XOR_BE(address) & lowmask]; + return base[BYTE8_XOR_BE(address) & lowmask]; } } - return result; + + return 0; } @@ -1245,9 +1167,9 @@ static UINT64 expression_read_program_direct(address_space &space, int opcode, o from a memory region -------------------------------------------------*/ -static UINT64 expression_read_memory_region(running_machine &machine, const char *rgntag, offs_t address, int size) +UINT64 debugger_cpu::expression_read_memory_region(const char *rgntag, offs_t address, int size) { - memory_region *region = machine.root_device().memregion(rgntag); + memory_region *region = m_machine.root_device().memregion(rgntag); UINT64 result = ~(UINT64)0 >> (64 - 8*size); /* make sure we get a valid base before proceeding */ @@ -1260,8 +1182,8 @@ static UINT64 expression_read_memory_region(running_machine &machine, const char UINT64 r0, r1; /* read each half, from lower address to upper address */ - r0 = expression_read_memory_region(machine, rgntag, address + 0, halfsize); - r1 = expression_read_memory_region(machine, rgntag, address + halfsize, halfsize); + r0 = expression_read_memory_region(rgntag, address + 0, halfsize); + r1 = expression_read_memory_region(rgntag, address + halfsize, halfsize); /* assemble based on the target endianness */ if (region->endianness() == ENDIANNESS_LITTLE) @@ -1294,9 +1216,8 @@ static UINT64 expression_read_memory_region(running_machine &machine, const char space -------------------------------------------------*/ -static void expression_write_memory(void *param, const char *name, expression_space spacenum, UINT32 address, int size, UINT64 data) +void debugger_cpu::expression_write_memory(void *param, const char *name, expression_space spacenum, UINT32 address, int size, UINT64 data) { - running_machine &machine = *(running_machine *)param; device_t *device = nullptr; switch (spacenum) @@ -1306,13 +1227,13 @@ static void expression_write_memory(void *param, const char *name, expression_sp case EXPSPACE_IO_LOGICAL: case EXPSPACE_SPACE3_LOGICAL: if (name != nullptr) - device = expression_get_device(machine, name); + device = expression_get_device(name); if (device == nullptr) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (device->memory().has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL))) { address_space &space = device->memory().space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL)); - debug_write_memory(space, space.address_to_byte(address), data, size, true); + write_memory(space, space.address_to_byte(address), data, size, true); } break; @@ -1321,29 +1242,29 @@ static void expression_write_memory(void *param, const char *name, expression_sp case EXPSPACE_IO_PHYSICAL: case EXPSPACE_SPACE3_PHYSICAL: if (name != nullptr) - device = expression_get_device(machine, name); + device = expression_get_device(name); if (device == nullptr) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (device->memory().has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL))) { address_space &space = device->memory().space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL)); - debug_write_memory(space, space.address_to_byte(address), data, size, false); + write_memory(space, space.address_to_byte(address), data, size, false); } break; case EXPSPACE_OPCODE: case EXPSPACE_RAMWRITE: if (name != nullptr) - device = expression_get_device(machine, name); + device = expression_get_device(name); if (device == nullptr) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); expression_write_program_direct(device->memory().space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data); break; case EXPSPACE_REGION: if (name == nullptr) break; - expression_write_memory_region(machine, name, address, size, data); + expression_write_memory_region(name, address, size, data); break; default: @@ -1357,11 +1278,8 @@ static void expression_write_memory(void *param, const char *name, expression_sp directly to an opcode or RAM pointer -------------------------------------------------*/ -static void expression_write_program_direct(address_space &space, int opcode, offs_t address, int size, UINT64 data) +void debugger_cpu::expression_write_program_direct(address_space &space, int opcode, offs_t address, int size, UINT64 data) { - debugcpu_private *global = space.machine().debugcpu_data; - UINT8 *base; - /* adjust the address into a byte address, but not if being called recursively */ if ((opcode & 2) == 0) address = space.address_to_byte(address); @@ -1370,10 +1288,10 @@ static void expression_write_program_direct(address_space &space, int opcode, of if (size > 1) { int halfsize = size / 2; - UINT64 r0, r1, halfmask; /* break apart based on the target endianness */ - halfmask = ~(UINT64)0 >> (64 - 8 * halfsize); + UINT64 halfmask = ~(UINT64)0 >> (64 - 8 * halfsize); + UINT64 r0, r1; if (space.endianness() == ENDIANNESS_LITTLE) { r0 = data & halfmask; @@ -1397,7 +1315,7 @@ static void expression_write_program_direct(address_space &space, int opcode, of offs_t lowmask = space.data_width() / 8 - 1; /* get the base of memory, aligned to the address minus the lowbits */ - base = (UINT8 *)space.get_read_ptr(address & ~lowmask); + UINT8 *base = (UINT8 *)space.get_read_ptr(address & ~lowmask); /* if we have a valid base, write the appropriate byte */ if (base != nullptr) @@ -1406,7 +1324,7 @@ static void expression_write_program_direct(address_space &space, int opcode, of base[BYTE8_XOR_LE(address) & lowmask] = data; else base[BYTE8_XOR_BE(address) & lowmask] = data; - global->memory_modified = true; + m_memory_modified = true; } } } @@ -1417,10 +1335,9 @@ static void expression_write_program_direct(address_space &space, int opcode, of from a memory region -------------------------------------------------*/ -static void expression_write_memory_region(running_machine &machine, const char *rgntag, offs_t address, int size, UINT64 data) +void debugger_cpu::expression_write_memory_region(const char *rgntag, offs_t address, int size, UINT64 data) { - debugcpu_private *global = machine.debugcpu_data; - memory_region *region = machine.root_device().memregion(rgntag); + memory_region *region = m_machine.root_device().memregion(rgntag); /* make sure we get a valid base before proceeding */ if (region != nullptr) @@ -1429,10 +1346,10 @@ static void expression_write_memory_region(running_machine &machine, const char if (size > 1) { int halfsize = size / 2; - UINT64 r0, r1, halfmask; /* break apart based on the target endianness */ - halfmask = ~(UINT64)0 >> (64 - 8 * halfsize); + UINT64 halfmask = ~(UINT64)0 >> (64 - 8 * halfsize); + UINT64 r0, r1; if (region->endianness() == ENDIANNESS_LITTLE) { r0 = data & halfmask; @@ -1445,8 +1362,8 @@ static void expression_write_memory_region(running_machine &machine, const char } /* write each half, from lower address to upper address */ - expression_write_memory_region(machine, rgntag, address + 0, halfsize, r0); - expression_write_memory_region(machine, rgntag, address + halfsize, halfsize, r1); + expression_write_memory_region(rgntag, address + 0, halfsize, r0); + expression_write_memory_region(rgntag, address + halfsize, halfsize, r1); } /* only process if we're within range */ @@ -1458,10 +1375,14 @@ static void expression_write_memory_region(running_machine &machine, const char /* if we have a valid base, set the appropriate byte */ if (region->endianness() == ENDIANNESS_LITTLE) + { base[BYTE8_XOR_LE(address) & lowmask] = data; + } else + { base[BYTE8_XOR_BE(address) & lowmask] = data; - global->memory_modified = true; + } + m_memory_modified = true; } } } @@ -1473,9 +1394,8 @@ static void expression_write_memory_region(running_machine &machine, const char appropriate name -------------------------------------------------*/ -static expression_error::error_code expression_validate(void *param, const char *name, expression_space space) +expression_error::error_code debugger_cpu::expression_validate(void *param, const char *name, expression_space space) { - running_machine &machine = *reinterpret_cast(param); device_t *device = nullptr; switch (space) @@ -1486,12 +1406,12 @@ static expression_error::error_code expression_validate(void *param, const char case EXPSPACE_SPACE3_LOGICAL: if (name) { - device = expression_get_device(machine, name); + device = expression_get_device(name); if (!device) return expression_error::INVALID_MEMORY_NAME; } if (!device) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (!device->memory().has_space(AS_PROGRAM + (space - EXPSPACE_PROGRAM_LOGICAL))) return expression_error::NO_SUCH_MEMORY_SPACE; break; @@ -1502,12 +1422,12 @@ static expression_error::error_code expression_validate(void *param, const char case EXPSPACE_SPACE3_PHYSICAL: if (name) { - device = expression_get_device(machine, name); + device = expression_get_device(name); if (!device) return expression_error::INVALID_MEMORY_NAME; } if (!device) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (!device->memory().has_space(AS_PROGRAM + (space - EXPSPACE_PROGRAM_PHYSICAL))) return expression_error::NO_SUCH_MEMORY_SPACE; break; @@ -1516,12 +1436,12 @@ static expression_error::error_code expression_validate(void *param, const char case EXPSPACE_RAMWRITE: if (name) { - device = expression_get_device(machine, name); + device = expression_get_device(name); if (!device) return expression_error::INVALID_MEMORY_NAME; } if (!device) - device = debug_cpu_get_visible_cpu(machine); + device = m_machine.debugger().cpu().get_visible_cpu(); if (!device->memory().has_space(AS_PROGRAM)) return expression_error::NO_SUCH_MEMORY_SPACE; break; @@ -1529,7 +1449,7 @@ static expression_error::error_code expression_validate(void *param, const char case EXPSPACE_REGION: if (!name) return expression_error::MISSING_MEMORY_NAME; - if (!machine.root_device().memregion(name) || !machine.root_device().memregion(name)->base()) + if (!m_machine.root_device().memregion(name) || !m_machine.root_device().memregion(name)->base()) return expression_error::INVALID_MEMORY_NAME; break; @@ -1549,7 +1469,7 @@ static expression_error::error_code expression_validate(void *param, const char get_beamx - get beam horizontal position -------------------------------------------------*/ -static UINT64 get_beamx(symbol_table &table, void *ref) +UINT64 debugger_cpu::get_beamx(symbol_table &table, void *ref) { screen_device *screen = reinterpret_cast(ref); return (screen != nullptr) ? screen->hpos() : 0; @@ -1560,7 +1480,7 @@ static UINT64 get_beamx(symbol_table &table, void *ref) get_beamy - get beam vertical position -------------------------------------------------*/ -static UINT64 get_beamy(symbol_table &table, void *ref) +UINT64 debugger_cpu::get_beamy(symbol_table &table, void *ref) { screen_device *screen = reinterpret_cast(ref); return (screen != nullptr) ? screen->vpos() : 0; @@ -1571,7 +1491,7 @@ static UINT64 get_beamy(symbol_table &table, void *ref) get_frame - get current frame number -------------------------------------------------*/ -static UINT64 get_frame(symbol_table &table, void *ref) +UINT64 debugger_cpu::get_frame(symbol_table &table, void *ref) { screen_device *screen = reinterpret_cast(ref); return (screen != nullptr) ? screen->frame_number() : 0; @@ -1583,16 +1503,116 @@ static UINT64 get_frame(symbol_table &table, void *ref) 'cpunum' symbol -------------------------------------------------*/ -static UINT64 get_cpunum(symbol_table &table, void *ref) +UINT64 debugger_cpu::get_cpunum(symbol_table &table, void *ref) { - running_machine &machine = *reinterpret_cast(table.globalref()); - device_t *target = machine.debugcpu_data->visiblecpu; - - execute_interface_iterator iter(machine.root_device()); - return iter.indexof(target->execute()); + execute_interface_iterator iter(m_machine.root_device()); + return iter.indexof(m_visiblecpu->execute()); } +void debugger_cpu::start_hook(device_t *device, bool stop_on_vblank) +{ + // stash a pointer to the current live CPU + assert(m_livecpu == nullptr); + m_livecpu = device; + + // if we're a new device, stop now + if (m_stop_when_not_device != nullptr && m_stop_when_not_device != device) + { + m_stop_when_not_device = nullptr; + m_execution_state = EXECUTION_STATE_STOPPED; + reset_transient_flags(); + } + + // if we're running, do some periodic updating + if (m_execution_state != EXECUTION_STATE_STOPPED) + { + if (device == m_visiblecpu && osd_ticks() > m_last_periodic_update_time + osd_ticks_per_second() / 4) + { // check for periodic updates + m_machine.debug_view().update_all(); + m_machine.debug_view().flush_osd_updates(); + m_last_periodic_update_time = osd_ticks(); + } + else if (device == m_breakcpu) + { // check for pending breaks + m_execution_state = EXECUTION_STATE_STOPPED; + m_breakcpu = nullptr; + } + + // if a VBLANK occurred, check on things + if (m_vblank_occurred) + { + m_vblank_occurred = false; + + // if we were waiting for a VBLANK, signal it now + if (stop_on_vblank) + { + m_execution_state = EXECUTION_STATE_STOPPED; + m_machine.debugger().console().printf("Stopped at VBLANK\n"); + } + } + // check for debug keypresses + if (m_machine.ui_input().pressed(IPT_UI_DEBUG_BREAK)) + m_visiblecpu->debug()->halt_on_next_instruction("User-initiated break\n"); + } +} + +void debugger_cpu::stop_hook(device_t *device) +{ + assert(m_livecpu == device); + + // clear the live CPU + m_livecpu = nullptr; +} + +void debugger_cpu::ensure_comments_loaded() +{ + if (!m_comments_loaded) + { + comment_load(true); + m_comments_loaded = true; + } +} + + +//------------------------------------------------- +// go_next_device - execute until we hit the next +// device +//------------------------------------------------- + +void debugger_cpu::go_next_device(device_t *device) +{ + m_stop_when_not_device = device; + m_execution_state = EXECUTION_STATE_RUNNING; +} + +void debugger_cpu::go_vblank() +{ + m_vblank_occurred = false; + m_execution_state = EXECUTION_STATE_RUNNING; +} + +void debugger_cpu::halt_on_next_instruction(device_t *device, util::format_argument_pack &&args) +{ + // if something is pending on this CPU already, ignore this request + if (device == m_breakcpu) + return; + + // output the message to the console + m_machine.debugger().console().vprintf(std::move(args)); + + // if we are live, stop now, otherwise note that we want to break there + if (device == m_livecpu) + { + m_execution_state = EXECUTION_STATE_STOPPED; + if (m_livecpu != nullptr) + m_livecpu->debug()->compute_debug_flags(); + } + else + { + m_breakcpu = device; + } +} //************************************************************************** // DEVICE DEBUG @@ -1603,36 +1623,36 @@ static UINT64 get_cpunum(symbol_table &table, void *ref) //------------------------------------------------- device_debug::device_debug(device_t &device) - : m_device(device), - m_exec(nullptr), - m_memory(nullptr), - m_state(nullptr), - m_disasm(nullptr), - m_flags(0), - m_symtable(&device, debug_cpu_get_global_symtable(device.machine())), - m_instrhook(nullptr), - m_dasm_override(nullptr), - m_opwidth(0), - m_stepaddr(0), - m_stepsleft(0), - m_stopaddr(0), - m_stoptime(attotime::zero), - m_stopirq(0), - m_stopexception(0), - m_endexectime(attotime::zero), - m_total_cycles(0), - m_last_total_cycles(0), - m_pc_history_index(0), - m_bplist(nullptr), - m_rplist(nullptr), - m_trace(nullptr), - m_hotspot_threshhold(0), - m_track_pc_set(), - m_track_pc(false), - m_comment_set(), - m_comment_change(0), - m_track_mem_set(), - m_track_mem(false) + : m_device(device) + , m_exec(nullptr) + , m_memory(nullptr) + , m_state(nullptr) + , m_disasm(nullptr) + , m_flags(0) + , m_symtable(&device, device.machine().debugger().cpu().get_global_symtable()) + , m_instrhook(nullptr) + , m_dasm_override(nullptr) + , m_opwidth(0) + , m_stepaddr(0) + , m_stepsleft(0) + , m_stopaddr(0) + , m_stoptime(attotime::zero) + , m_stopirq(0) + , m_stopexception(0) + , m_endexectime(attotime::zero) + , m_total_cycles(0) + , m_last_total_cycles(0) + , m_pc_history_index(0) + , m_bplist(nullptr) + , m_rplist(nullptr) + , m_trace(nullptr) + , m_hotspot_threshhold(0) + , m_track_pc_set() + , m_track_pc(false) + , m_comment_set() + , m_comment_change(0) + , m_track_mem_set() + , m_track_mem(false) { memset(m_pc_history, 0, sizeof(m_pc_history)); memset(m_wplist, 0, sizeof(m_wplist)); @@ -1699,7 +1719,6 @@ device_debug::~device_debug() registerpoint_clear_all(); } - //------------------------------------------------- // start_hook - the scheduler calls this hook // before beginning execution for the given device @@ -1707,60 +1726,13 @@ device_debug::~device_debug() void device_debug::start_hook(const attotime &endtime) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert((m_device.machine().debug_flags & DEBUG_FLAG_ENABLED) != 0); - // stash a pointer to the current live CPU - assert(global->livecpu == nullptr); - global->livecpu = &m_device; - - // if we're a new device, stop now - if (global->m_stop_when_not_device != nullptr && global->m_stop_when_not_device != &m_device) - { - global->m_stop_when_not_device = nullptr; - global->execution_state = EXECUTION_STATE_STOPPED; - reset_transient_flags(m_device.machine()); - } + m_device.machine().debugger().cpu().start_hook(&m_device, (m_flags & DEBUG_FLAG_STOP_VBLANK) != 0); // update the target execution end time m_endexectime = endtime; - // if we're running, do some periodic updating - if (global->execution_state != EXECUTION_STATE_STOPPED) - { - // check for periodic updates - if (&m_device == global->visiblecpu && osd_ticks() > global->last_periodic_update_time + osd_ticks_per_second()/4) - { - m_device.machine().debug_view().update_all(); - m_device.machine().debug_view().flush_osd_updates(); - global->last_periodic_update_time = osd_ticks(); - } - - // check for pending breaks - else if (&m_device == global->breakcpu) - { - global->execution_state = EXECUTION_STATE_STOPPED; - global->breakcpu = nullptr; - } - - // if a VBLANK occurred, check on things - if (global->vblank_occurred) - { - global->vblank_occurred = false; - - // if we were waiting for a VBLANK, signal it now - if ((m_flags & DEBUG_FLAG_STOP_VBLANK) != 0) - { - global->execution_state = EXECUTION_STATE_STOPPED; - debug_console_printf(m_device.machine(), "Stopped at VBLANK\n"); - } - } - // check for debug keypresses - if (m_device.machine().ui_input().pressed(IPT_UI_DEBUG_BREAK)) - global->visiblecpu->debug()->halt_on_next_instruction("User-initiated break\n"); - } - // recompute the debugging mode compute_debug_flags(); } @@ -1773,12 +1745,7 @@ void device_debug::start_hook(const attotime &endtime) void device_debug::stop_hook() { - debugcpu_private *global = m_device.machine().debugcpu_data; - - assert(global->livecpu == &m_device); - - // clear the live CPU - global->livecpu = nullptr; + m_device.machine().debugger().cpu().stop_hook(&m_device); } @@ -1789,13 +1756,11 @@ void device_debug::stop_hook() void device_debug::interrupt_hook(int irqline) { - debugcpu_private *global = m_device.machine().debugcpu_data; - // see if this matches a pending interrupt request if ((m_flags & DEBUG_FLAG_STOP_INTERRUPT) != 0 && (m_stopirq == -1 || m_stopirq == irqline)) { - global->execution_state = EXECUTION_STATE_STOPPED; - debug_console_printf(m_device.machine(), "Stopped on interrupt (CPU '%s', IRQ %d)\n", m_device.tag(), irqline); + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_STOPPED); + m_device.machine().debugger().console().printf("Stopped on interrupt (CPU '%s', IRQ %d)\n", m_device.tag(), irqline); compute_debug_flags(); } } @@ -1808,13 +1773,11 @@ void device_debug::interrupt_hook(int irqline) void device_debug::exception_hook(int exception) { - debugcpu_private *global = m_device.machine().debugcpu_data; - // see if this matches a pending interrupt request if ((m_flags & DEBUG_FLAG_STOP_EXCEPTION) != 0 && (m_stopexception == -1 || m_stopexception == exception)) { - global->execution_state = EXECUTION_STATE_STOPPED; - debug_console_printf(m_device.machine(), "Stopped on exception (CPU '%s', exception %d)\n", m_device.tag(), exception); + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_STOPPED); + m_device.machine().debugger().console().printf("Stopped on exception (CPU '%s', exception %d)\n", m_device.tag(), exception); compute_debug_flags(); } } @@ -1828,10 +1791,10 @@ void device_debug::exception_hook(int exception) void device_debug::instruction_hook(offs_t curpc) { running_machine &machine = m_device.machine(); - debugcpu_private *global = machine.debugcpu_data; + debugger_cpu& debugcpu = machine.debugger().cpu(); // note that we are in the debugger code - global->within_instruction_hook = true; + debugcpu.set_within_instruction(true); // update the history m_pc_history[m_pc_history_index++ % HISTORY_SIZE] = curpc; @@ -1852,11 +1815,11 @@ void device_debug::instruction_hook(offs_t curpc) m_trace->update(curpc); // per-instruction hook? - if (global->execution_state != EXECUTION_STATE_STOPPED && (m_flags & DEBUG_FLAG_HOOKED) != 0 && (*m_instrhook)(m_device, curpc)) - global->execution_state = EXECUTION_STATE_STOPPED; + if (debugcpu.execution_state() != EXECUTION_STATE_STOPPED && (m_flags & DEBUG_FLAG_HOOKED) != 0 && (*m_instrhook)(m_device, curpc)) + debugcpu.set_execution_state(EXECUTION_STATE_STOPPED); // handle single stepping - if (global->execution_state != EXECUTION_STATE_STOPPED && (m_flags & DEBUG_FLAG_STEPPING_ANY) != 0) + if (debugcpu.execution_state() != EXECUTION_STATE_STOPPED && (m_flags & DEBUG_FLAG_STEPPING_ANY) != 0) { // is this an actual step? if (m_stepaddr == ~0 || curpc == m_stepaddr) @@ -1867,7 +1830,7 @@ void device_debug::instruction_hook(offs_t curpc) // if we hit 0, stop if (m_stepsleft == 0) - global->execution_state = EXECUTION_STATE_STOPPED; + debugcpu.set_execution_state(EXECUTION_STATE_STOPPED); // update every 100 steps until we are within 200 of the end else if ((m_flags & DEBUG_FLAG_STEPPING_OUT) == 0 && (m_stepsleft < 200 || m_stepsleft % 100 == 0)) @@ -1880,20 +1843,20 @@ void device_debug::instruction_hook(offs_t curpc) } // handle breakpoints - if (global->execution_state != EXECUTION_STATE_STOPPED && (m_flags & (DEBUG_FLAG_STOP_TIME | DEBUG_FLAG_STOP_PC | DEBUG_FLAG_LIVE_BP)) != 0) + if (debugcpu.execution_state() != EXECUTION_STATE_STOPPED && (m_flags & (DEBUG_FLAG_STOP_TIME | DEBUG_FLAG_STOP_PC | DEBUG_FLAG_LIVE_BP)) != 0) { // see if we hit a target time if ((m_flags & DEBUG_FLAG_STOP_TIME) != 0 && machine.time() >= m_stoptime) { - debug_console_printf(machine, "Stopped at time interval %.1g\n", machine.time().as_double()); - global->execution_state = EXECUTION_STATE_STOPPED; + machine.debugger().console().printf("Stopped at time interval %.1g\n", machine.time().as_double()); + debugcpu.set_execution_state(EXECUTION_STATE_STOPPED); } // check the temp running breakpoint and break if we hit it else if ((m_flags & DEBUG_FLAG_STOP_PC) != 0 && m_stopaddr == curpc) { - debug_console_printf(machine, "Stopped at temporary breakpoint %X on CPU '%s'\n", m_stopaddr, m_device.tag()); - global->execution_state = EXECUTION_STATE_STOPPED; + machine.debugger().console().printf("Stopped at temporary breakpoint %X on CPU '%s'\n", m_stopaddr, m_device.tag()); + debugcpu.set_execution_state(EXECUTION_STATE_STOPPED); } // check for execution breakpoints @@ -1902,23 +1865,19 @@ void device_debug::instruction_hook(offs_t curpc) } // if we are supposed to halt, do it now - if (global->execution_state == EXECUTION_STATE_STOPPED) + if (debugcpu.execution_state() == EXECUTION_STATE_STOPPED) { bool firststop = true; // load comments if we haven't yet - if (!global->comments_loaded) - { - debug_comment_load(m_device.machine(),true); - global->comments_loaded = true; - } + debugcpu.ensure_comments_loaded(); // reset any transient state - reset_transient_flags(m_device.machine()); - global->breakcpu = nullptr; + debugcpu.reset_transient_flags(); + debugcpu.set_break_cpu(nullptr); // remember the last visible CPU in the debugger - global->visiblecpu = &m_device; + debugcpu.set_visible_cpu(&m_device); // update all views machine.debug_view().update_all(); @@ -1926,7 +1885,7 @@ void device_debug::instruction_hook(offs_t curpc) // wait for the debugger; during this time, disable sound output m_device.machine().sound().debugger_mute(true); - while (global->execution_state == EXECUTION_STATE_STOPPED) + while (debugcpu.execution_state() == EXECUTION_STATE_STOPPED) { // flush any pending updates before waiting again machine.debug_view().flush_osd_updates(); @@ -1934,29 +1893,29 @@ void device_debug::instruction_hook(offs_t curpc) emulator_info::periodic_check(); // clear the memory modified flag and wait - global->memory_modified = false; + debugcpu.set_memory_modified(false); if (machine.debug_flags & DEBUG_FLAG_OSD_ENABLED) machine.osd().wait_for_debugger(m_device, firststop); firststop = false; // if something modified memory, update the screen - if (global->memory_modified) + if (debugcpu.memory_modified()) { machine.debug_view().update_all(DVT_DISASSEMBLY); machine.debugger().refresh_display(); } // check for commands in the source file - process_source_file(m_device.machine()); + machine.debugger().cpu().process_source_file(); // if an event got scheduled, resume if (machine.scheduled_event_pending()) - global->execution_state = EXECUTION_STATE_RUNNING; + debugcpu.set_execution_state(EXECUTION_STATE_RUNNING); } m_device.machine().sound().debugger_mute(false); // remember the last visible CPU in the debugger - global->visiblecpu = &m_device; + debugcpu.set_visible_cpu(&m_device); } // handle step out/over on the instruction we are about to execute @@ -1964,7 +1923,7 @@ void device_debug::instruction_hook(offs_t curpc) prepare_for_step_overout(pc()); // no longer in debugger code - global->within_instruction_hook = false; + debugcpu.set_within_instruction(false); } @@ -2060,8 +2019,6 @@ offs_t device_debug::disassemble(char *buffer, offs_t pc, const UINT8 *oprom, co void device_debug::ignore(bool ignore) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); if (ignore) @@ -2069,8 +2026,11 @@ void device_debug::ignore(bool ignore) else m_flags |= DEBUG_FLAG_OBSERVING; - if (&m_device == global->livecpu && ignore) + if (&m_device == m_device.machine().debugger().cpu().live_cpu() && ignore) + { + assert(m_exec != nullptr); go_next_device(); + } } @@ -2081,14 +2041,12 @@ void device_debug::ignore(bool ignore) void device_debug::single_step(int numsteps) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stepsleft = numsteps; m_stepaddr = ~0; m_flags |= DEBUG_FLAG_STEPPING; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } @@ -2099,14 +2057,12 @@ void device_debug::single_step(int numsteps) void device_debug::single_step_over(int numsteps) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stepsleft = numsteps; m_stepaddr = ~0; m_flags |= DEBUG_FLAG_STEPPING_OVER; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } @@ -2117,14 +2073,12 @@ void device_debug::single_step_over(int numsteps) void device_debug::single_step_out() { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stepsleft = 100; m_stepaddr = ~0; m_flags |= DEBUG_FLAG_STEPPING_OUT; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } @@ -2135,13 +2089,11 @@ void device_debug::single_step_out() void device_debug::go(offs_t targetpc) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stopaddr = targetpc; m_flags |= DEBUG_FLAG_STOP_PC; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } @@ -2151,13 +2103,10 @@ void device_debug::go(offs_t targetpc) void device_debug::go_vblank() { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); - global->vblank_occurred = false; m_flags |= DEBUG_FLAG_STOP_VBLANK; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().go_vblank(); } @@ -2168,15 +2117,17 @@ void device_debug::go_vblank() void device_debug::go_interrupt(int irqline) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stopirq = irqline; m_flags |= DEBUG_FLAG_STOP_INTERRUPT; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } +void device_debug::go_next_device() +{ + m_device.machine().debugger().cpu().go_next_device(&m_device); +} //------------------------------------------------- // go_exception - execute until the specified @@ -2185,13 +2136,11 @@ void device_debug::go_interrupt(int irqline) void device_debug::go_exception(int exception) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stopexception = exception; m_flags |= DEBUG_FLAG_STOP_EXCEPTION; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } @@ -2202,62 +2151,27 @@ void device_debug::go_exception(int exception) void device_debug::go_milliseconds(UINT64 milliseconds) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); m_stoptime = m_device.machine().time() + attotime::from_msec(milliseconds); m_flags |= DEBUG_FLAG_STOP_TIME; - global->execution_state = EXECUTION_STATE_RUNNING; + m_device.machine().debugger().cpu().set_execution_state(EXECUTION_STATE_RUNNING); } //------------------------------------------------- -// go_next_device - execute until we hit the next -// device -//------------------------------------------------- - -void device_debug::go_next_device() -{ - debugcpu_private *global = m_device.machine().debugcpu_data; - - assert(m_exec != nullptr); - - global->m_stop_when_not_device = &m_device; - global->execution_state = EXECUTION_STATE_RUNNING; -} - - -//------------------------------------------------- -// halt_on_next_instruction - halt in the -// debugger on the next instruction +// halt_on_next_instruction_impl - halt in the +// debugger on the next instruction, internal +// implementation which is necessary solely due +// to templates in C++ being janky as all get out //------------------------------------------------- void device_debug::halt_on_next_instruction_impl(util::format_argument_pack &&args) { - debugcpu_private *global = m_device.machine().debugcpu_data; - assert(m_exec != nullptr); - - // if something is pending on this CPU already, ignore this request - if (&m_device == global->breakcpu) - return; - - // output the message to the console - debug_console_vprintf(m_device.machine(), std::move(args)); - - // if we are live, stop now, otherwise note that we want to break there - if (&m_device == global->livecpu) - { - global->execution_state = EXECUTION_STATE_STOPPED; - if (global->livecpu != nullptr) - global->livecpu->debug()->compute_debug_flags(); - } - else - global->breakcpu = &m_device; + m_device.machine().debugger().cpu().halt_on_next_instruction(&m_device, std::move(args)); } - //------------------------------------------------- // breakpoint_set - set a new breakpoint, // returning its index @@ -2266,7 +2180,8 @@ void device_debug::halt_on_next_instruction_impl(util::format_argument_packbpindex++, address, condition, action)); + UINT32 id = m_device.machine().debugger().cpu().get_breakpoint_index(); + breakpoint *bp = auto_alloc(m_device.machine(), breakpoint(this, m_symtable, id, address, condition, action)); // hook it into our list bp->m_next = m_bplist; @@ -2357,7 +2272,8 @@ int device_debug::watchpoint_set(address_space &space, int type, offs_t address, assert(space.spacenum() < ARRAY_LENGTH(m_wplist)); // allocate a new one - watchpoint *wp = auto_alloc(m_device.machine(), watchpoint(this, m_symtable, m_device.machine().debugcpu_data->wpindex++, space, type, address, length, condition, action)); + UINT32 id = m_device.machine().debugger().cpu().get_watchpoint_index(); + watchpoint *wp = auto_alloc(m_device.machine(), watchpoint(this, m_symtable, id, space, type, address, length, condition, action)); // hook it into our list wp->m_next = m_wplist[space.spacenum()]; @@ -2451,7 +2367,8 @@ void device_debug::watchpoint_enable_all(bool enable) int device_debug::registerpoint_set(const char *condition, const char *action) { // allocate a new one - registerpoint *rp = auto_alloc(m_device.machine(), registerpoint(m_symtable, m_device.machine().debugcpu_data->rpindex++, condition, action)); + UINT32 id = m_device.machine().debugger().cpu().get_registerpoint_index(); + registerpoint *rp = auto_alloc(m_device.machine(), registerpoint(m_symtable, id, condition, action)); // hook it into our list rp->m_next = m_rplist; @@ -2713,7 +2630,7 @@ bool device_debug::comment_import(xml_data_node &cpunode,bool is_inline) if(is_inline == true) m_comment_set.insert(dasm_comment(address, crc, datanode->value, color)); else - debug_console_printf(m_device.machine()," %08X - %s\n",address,datanode->value); + m_device.machine().debugger().console().printf(" %08X - %s\n", address, datanode->value); } return true; } @@ -2739,8 +2656,8 @@ UINT32 device_debug::compute_opcode_crc32(offs_t pc) const int maxbytes = max_opcode_bytes(); for (int numbytes = 0; numbytes < maxbytes; numbytes++) { - opbuf[numbytes] = debug_read_opcode(decrypted_space, pcbyte + numbytes, 1); - argbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1); + opbuf[numbytes] = m_device.machine().debugger().cpu().read_opcode(decrypted_space, pcbyte + numbytes, 1); + argbuf[numbytes] = m_device.machine().debugger().cpu().read_opcode(space, pcbyte + numbytes, 1); } // disassemble to our buffer @@ -2793,7 +2710,7 @@ void device_debug::trace_printf(const char *fmt, ...) void device_debug::compute_debug_flags() { running_machine &machine = m_device.machine(); - debugcpu_private *global = machine.debugcpu_data; + debugger_cpu& debugcpu = machine.debugger().cpu(); // clear out global flags by default, keep DEBUG_FLAG_OSD_ENABLED machine.debug_flags &= DEBUG_FLAG_OSD_ENABLED; @@ -2804,7 +2721,7 @@ void device_debug::compute_debug_flags() return; // if we're stopped, keep calling the hook - if (global->execution_state == EXECUTION_STATE_STOPPED) + if (debugcpu.execution_state() == EXECUTION_STATE_STOPPED) machine.debug_flags |= DEBUG_FLAG_CALL_HOOK; // if we're tracking history, or we're hooked, or stepping, or stopping at a breakpoint @@ -2885,9 +2802,8 @@ void device_debug::breakpoint_update_flags() } // push the flags out globally - debugcpu_private *global = m_device.machine().debugcpu_data; - if (global->livecpu != nullptr) - global->livecpu->debug()->compute_debug_flags(); + if (m_device.machine().debugger().cpu().live_cpu() != nullptr) + m_device.machine().debugger().cpu().live_cpu()->debug()->compute_debug_flags(); } @@ -2898,21 +2814,22 @@ void device_debug::breakpoint_update_flags() void device_debug::breakpoint_check(offs_t pc) { + debugger_cpu& debugcpu = m_device.machine().debugger().cpu(); + // see if we match for (breakpoint *bp = m_bplist; bp != nullptr; bp = bp->m_next) if (bp->hit(pc)) { // halt in the debugger by default - debugcpu_private *global = m_device.machine().debugcpu_data; - global->execution_state = EXECUTION_STATE_STOPPED; + debugcpu.set_execution_state(EXECUTION_STATE_STOPPED); // if we hit, evaluate the action if (!bp->m_action.empty()) - debug_console_execute_command(m_device.machine(), bp->m_action.c_str(), 0); + m_device.machine().debugger().console().execute_command(bp->m_action.c_str(), false); // print a notification, unless the action made us go again - if (global->execution_state == EXECUTION_STATE_STOPPED) - debug_console_printf(m_device.machine(), "Stopped at breakpoint %X\n", bp->m_index); + if (debugcpu.execution_state() == EXECUTION_STATE_STOPPED) + m_device.machine().debugger().console().printf("Stopped at breakpoint %X\n", bp->m_index); break; } @@ -2922,19 +2839,18 @@ void device_debug::breakpoint_check(offs_t pc) if (rp->hit()) { // halt in the debugger by default - debugcpu_private *global = m_device.machine().debugcpu_data; - global->execution_state = EXECUTION_STATE_STOPPED; + debugcpu.set_execution_state(EXECUTION_STATE_STOPPED); // if we hit, evaluate the action if (!rp->m_action.empty()) { - debug_console_execute_command(m_device.machine(), rp->m_action.c_str(), 0); + m_device.machine().debugger().console().execute_command(rp->m_action.c_str(), false); } // print a notification, unless the action made us go again - if (global->execution_state == EXECUTION_STATE_STOPPED) + if (debugcpu.execution_state() == EXECUTION_STATE_STOPPED) { - debug_console_printf(m_device.machine(), "Stopped at registerpoint %X\n", rp->m_index); + m_device.machine().debugger().console().printf("Stopped at registerpoint %X\n", rp->m_index); } break; } @@ -2976,14 +2892,18 @@ void device_debug::watchpoint_update_flags(address_space &space) // for a given CPU and address space //------------------------------------------------- -void device_debug::watchpoint_check(address_space &space, int type, offs_t address, UINT64 value_to_write, UINT64 mem_mask) +void device_debug::watchpoint_check(address_space& space, int type, offs_t address, UINT64 value_to_write, UINT64 mem_mask) { - debugcpu_private *global = space.machine().debugcpu_data; + space.machine().debugger().cpu().watchpoint_check(space, type, address, value_to_write, mem_mask, m_wplist); +} +void debugger_cpu::watchpoint_check(address_space& space, int type, offs_t address, UINT64 value_to_write, UINT64 mem_mask, device_debug::watchpoint** wplist) +{ // if we're within debugger code, don't stop - if (global->within_instruction_hook || global->debugger_access) + if (m_within_instruction_hook || m_debugger_access) return; - global->within_instruction_hook = true; + + m_within_instruction_hook = true; // adjust address, size & value_to_write based on mem_mask. offs_t size = 0; @@ -3024,48 +2944,48 @@ void device_debug::watchpoint_check(address_space &space, int type, offs_t addre } // if we are a write watchpoint, stash the value that will be written - global->wpaddr = address; + m_wpaddr = address; if (type & WATCHPOINT_WRITE) - global->wpdata = value_to_write; + m_wpdata = value_to_write; // see if we match - for (watchpoint *wp = m_wplist[space.spacenum()]; wp != nullptr; wp = wp->m_next) + for (device_debug::watchpoint *wp = wplist[space.spacenum()]; wp != nullptr; wp = wp->next()) if (wp->hit(type, address, size)) { // halt in the debugger by default - global->execution_state = EXECUTION_STATE_STOPPED; + m_execution_state = EXECUTION_STATE_STOPPED; // if we hit, evaluate the action - if (!wp->m_action.empty()) - debug_console_execute_command(space.machine(), wp->m_action.c_str(), 0); + if (strlen(wp->action()) > 0) + m_machine.debugger().console().execute_command(wp->action(), false); // print a notification, unless the action made us go again - if (global->execution_state == EXECUTION_STATE_STOPPED) + if (m_execution_state == EXECUTION_STATE_STOPPED) { static const char *const sizes[] = { "0bytes", "byte", "word", "3bytes", "dword", "5bytes", "6bytes", "7bytes", "qword" }; - offs_t pc = (space.device().debug()->m_state != nullptr) ? space.device().debug()->m_state->pc() : 0; + offs_t pc = space.device().debug()->pc(); std::string buffer; if (type & WATCHPOINT_WRITE) { - buffer = string_format("Stopped at watchpoint %X writing %s to %08X (PC=%X)", wp->m_index, sizes[size], space.byte_to_address(address), pc); + buffer = string_format("Stopped at watchpoint %X writing %s to %08X (PC=%X)", wp->index(), sizes[size], space.byte_to_address(address), pc); if (value_to_write >> 32) buffer.append(string_format(" (data=%X%08X)", (UINT32)(value_to_write >> 32), (UINT32)value_to_write)); else buffer.append(string_format(" (data=%X)", (UINT32)value_to_write)); } else - buffer = string_format("Stopped at watchpoint %X reading %s from %08X (PC=%X)", wp->m_index, sizes[size], space.byte_to_address(address), pc); - debug_console_printf(space.machine(), "%s\n", buffer.c_str()); + buffer = string_format("Stopped at watchpoint %X reading %s from %08X (PC=%X)", wp->index(), sizes[size], space.byte_to_address(address), pc); + m_machine.debugger().console().printf("%s\n", buffer.c_str()); space.device().debug()->compute_debug_flags(); } break; } - global->within_instruction_hook = false; + m_within_instruction_hook = false; } @@ -3090,7 +3010,7 @@ void device_debug::hotspot_check(address_space &space, offs_t address) // if the bottom of the list is over the threshold, print it hotspot_entry &spot = m_hotspots[m_hotspots.size() - 1]; if (spot.m_count > m_hotspot_threshhold) - debug_console_printf(space.machine(), "Hotspot @ %s %08X (PC=%08X) hit %d times (fell off bottom)\n", space.name(), spot.m_access, spot.m_pc, spot.m_count); + space.machine().debugger().console().printf("Hotspot @ %s %08X (PC=%08X) hit %d times (fell off bottom)\n", space.name(), spot.m_access, spot.m_pc, spot.m_count); // move everything else down and insert this one at the top memmove(&m_hotspots[1], &m_hotspots[0], sizeof(m_hotspots[0]) * (m_hotspots.size() - 1)); @@ -3134,8 +3054,8 @@ UINT32 device_debug::dasm_wrapped(std::string &buffer, offs_t pc) int maxbytes = max_opcode_bytes(); for (int numbytes = 0; numbytes < maxbytes; numbytes++) { - opbuf[numbytes] = debug_read_opcode(decrypted_space, pcbyte + numbytes, 1); - argbuf[numbytes] = debug_read_opcode(space, pcbyte + numbytes, 1); + opbuf[numbytes] = m_device.machine().debugger().cpu().read_opcode(decrypted_space, pcbyte + numbytes, 1); + argbuf[numbytes] = m_device.machine().debugger().cpu().read_opcode(space, pcbyte + numbytes, 1); } // disassemble to our buffer @@ -3481,7 +3401,7 @@ void device_debug::tracer::update(offs_t pc) // execute any trace actions first if (!m_action.empty()) - debug_console_execute_command(m_debug.m_device.machine(), m_action.c_str(), 0); + m_debug.m_device.machine().debugger().console().execute_command(m_action.c_str(), false); // print the address std::string buffer; diff --git a/src/emu/debug/debugcpu.h b/src/emu/debug/debugcpu.h index 604a6d168b3..af8cb57a2e4 100644 --- a/src/emu/debug/debugcpu.h +++ b/src/emu/debug/debugcpu.h @@ -42,6 +42,8 @@ struct xml_data_node; // ======================> device_debug +// [TODO] This whole thing is terrible. + class device_debug { typedef offs_t (*dasm_override_func)(device_t &device, char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, int options); @@ -118,10 +120,10 @@ public: // setters void setEnabled(bool value) { m_enabled = value; } - private: // internals bool hit(int type, offs_t address, int size); + private: const device_debug * m_debugInterface; // the interface we were created from watchpoint * m_next; // next in the list address_space & m_space; // address space @@ -209,6 +211,7 @@ public: void go_exception(int exception); void go_milliseconds(UINT64 milliseconds); void go_next_device(); + template void halt_on_next_instruction(Format &&fmt, Params &&... args) { @@ -278,11 +281,13 @@ public: static const int HISTORY_SIZE = 256; + // debugger_cpu helpers + void compute_debug_flags(); + private: void halt_on_next_instruction_impl(util::format_argument_pack &&args); // internal helpers - void compute_debug_flags(); void prepare_for_step_overout(offs_t pc); UINT32 dasm_wrapped(std::string &buffer, offs_t pc); @@ -462,100 +467,177 @@ private: DEBUG_FLAG_STOP_INTERRUPT | DEBUG_FLAG_STOP_EXCEPTION | DEBUG_FLAG_STOP_VBLANK | DEBUG_FLAG_STOP_TIME; }; - - //************************************************************************** -// FUNCTION PROTOTYPES +// CPU DEBUGGING //************************************************************************** -/* ----- initialization and cleanup ----- */ +class debugger_cpu +{ +public: + debugger_cpu(running_machine &machine); -/* initialize the CPU tracking for the debugger */ -void debug_cpu_init(running_machine &machine); -void debug_cpu_configure_memory(running_machine &machine, symbol_table &table); + /* ----- initialization and cleanup ----- */ -/* flushes all traces; this is useful if a trace is going on when we fatalerror */ -void debug_cpu_flush_traces(running_machine &machine); + /* flushes all traces; this is useful if a trace is going on when we fatalerror */ + void flush_traces(); + + void configure_memory(symbol_table &table); + /* ----- debugging status & information ----- */ -/* ----- debugging status & information ----- */ + /* return the visible CPU device (the one that commands should apply to) */ + device_t *get_visible_cpu(); -/* return the visible CPU device (the one that commands should apply to) */ -device_t *debug_cpu_get_visible_cpu(running_machine &machine); + /* true if the debugger is currently stopped within an instruction hook callback */ + bool within_instruction_hook(); -/* TRUE if the debugger is currently stopped within an instruction hook callback */ -int debug_cpu_within_instruction_hook(running_machine &machine); - -/* return TRUE if the current execution state is stopped */ -int debug_cpu_is_stopped(running_machine &machine); + /* return true if the current execution state is stopped */ + bool is_stopped(); + /* ----- symbol table interfaces ----- */ -/* ----- symbol table interfaces ----- */ + /* return the global symbol table */ + symbol_table *get_global_symtable(); -/* return the global symbol table */ -symbol_table *debug_cpu_get_global_symtable(running_machine &machine); - -/* return the locally-visible symbol table */ -symbol_table *debug_cpu_get_visible_symtable(running_machine &machine); + /* return the locally-visible symbol table */ + symbol_table *get_visible_symtable(); + /* ----- misc debugger functions ----- */ -/* ----- misc debugger functions ----- */ - -/* specifies a debug command script to execute */ -void debug_cpu_source_script(running_machine &machine, const char *file); + /* specifies a debug command script to execute */ + void source_script(const char *file); + /* ----- debugger comment helpers ----- */ -/* ----- debugger comment helpers ----- */ + // save all comments for a given machine + bool comment_save(); -// save all comments for a given machine -bool debug_comment_save(running_machine &machine); - -// load all comments for a given machine -bool debug_comment_load(running_machine &machine,bool is_inline); + // load all comments for a given machine + bool comment_load(bool is_inline); + /* ----- debugger memory accessors ----- */ -/* ----- debugger memory accessors ----- */ + /* return the physical address corresponding to the given logical address */ + bool translate(address_space &space, int intention, offs_t *address); -/* return the physical address corresponding to the given logical address */ -int debug_cpu_translate(address_space &space, int intention, offs_t *address); + /* return a byte from the specified memory space */ + UINT8 read_byte(address_space &space, offs_t address, int apply_translation); -/* return a byte from the specified memory space */ -UINT8 debug_read_byte(address_space &space, offs_t address, int apply_translation); + /* return a word from the specified memory space */ + UINT16 read_word(address_space &space, offs_t address, int apply_translation); -/* return a word from the specified memory space */ -UINT16 debug_read_word(address_space &space, offs_t address, int apply_translation); + /* return a dword from the specified memory space */ + UINT32 read_dword(address_space &space, offs_t address, int apply_translation); -/* return a dword from the specified memory space */ -UINT32 debug_read_dword(address_space &space, offs_t address, int apply_translation); + /* return a qword from the specified memory space */ + UINT64 read_qword(address_space &space, offs_t address, int apply_translation); -/* return a qword from the specified memory space */ -UINT64 debug_read_qword(address_space &space, offs_t address, int apply_translation); + /* return 1,2,4 or 8 bytes from the specified memory space */ + UINT64 read_memory(address_space &space, offs_t address, int size, int apply_translation); -/* return 1,2,4 or 8 bytes from the specified memory space */ -UINT64 debug_read_memory(address_space &space, offs_t address, int size, int apply_translation); + /* write a byte to the specified memory space */ + void write_byte(address_space &space, offs_t address, UINT8 data, int apply_translation); -/* write a byte to the specified memory space */ -void debug_write_byte(address_space &space, offs_t address, UINT8 data, int apply_translation); + /* write a word to the specified memory space */ + void write_word(address_space &space, offs_t address, UINT16 data, int apply_translation); -/* write a word to the specified memory space */ -void debug_write_word(address_space &space, offs_t address, UINT16 data, int apply_translation); + /* write a dword to the specified memory space */ + void write_dword(address_space &space, offs_t address, UINT32 data, int apply_translation); -/* write a dword to the specified memory space */ -void debug_write_dword(address_space &space, offs_t address, UINT32 data, int apply_translation); + /* write a qword to the specified memory space */ + void write_qword(address_space &space, offs_t address, UINT64 data, int apply_translation); -/* write a qword to the specified memory space */ -void debug_write_qword(address_space &space, offs_t address, UINT64 data, int apply_translation); + /* write 1,2,4 or 8 bytes to the specified memory space */ + void write_memory(address_space &space, offs_t address, UINT64 data, int size, int apply_translation); -/* write 1,2,4 or 8 bytes to the specified memory space */ -void debug_write_memory(address_space &space, offs_t address, UINT64 data, int size, int apply_translation); + /* read 1,2,4 or 8 bytes at the given offset from opcode space */ + UINT64 read_opcode(address_space &space, offs_t offset, int size); -/* read 1,2,4 or 8 bytes at the given offset from opcode space */ -UINT64 debug_read_opcode(address_space &space, offs_t offset, int size); + // getters + bool within_instruction_hook() const { return m_within_instruction_hook; } + bool memory_modified() const { return m_memory_modified; } + int execution_state() const { return m_execution_state; } + device_t *live_cpu() { return m_livecpu; } + UINT32 get_breakpoint_index() { return m_bpindex++; } + UINT32 get_watchpoint_index() { return m_wpindex++; } + UINT32 get_registerpoint_index() { return m_rpindex++; } + // setters + void set_visible_cpu(device_t * visiblecpu) { m_visiblecpu = visiblecpu; } + void set_break_cpu(device_t * breakcpu) { m_breakcpu = breakcpu; } + void set_within_instruction(bool within_instruction) { m_within_instruction_hook = within_instruction; } + void set_memory_modified(bool memory_modified) { m_memory_modified = memory_modified; } + void set_execution_state(int execution_state) { m_execution_state = execution_state; } + + // device_debug helpers + // [TODO] [RH]: Look into this more later, can possibly merge these two classes + void start_hook(device_t *device, bool stop_on_vblank); + void stop_hook(device_t *device); + void go_next_device(device_t *device); + void go_vblank(); + void halt_on_next_instruction(device_t *device, util::format_argument_pack &&args); + void ensure_comments_loaded(); + void reset_transient_flags(); + void process_source_file(); + void watchpoint_check(address_space& space, int type, offs_t address, UINT64 value_to_write, UINT64 mem_mask, device_debug::watchpoint** wplist); + +private: + static const size_t NUM_TEMP_VARIABLES; + + /* expression handlers */ + UINT64 expression_read_memory(void *param, const char *name, expression_space space, UINT32 address, int size); + UINT64 expression_read_program_direct(address_space &space, int opcode, offs_t address, int size); + UINT64 expression_read_memory_region(const char *rgntag, offs_t address, int size); + void expression_write_memory(void *param, const char *name, expression_space space, UINT32 address, int size, UINT64 data); + void expression_write_program_direct(address_space &space, int opcode, offs_t address, int size, UINT64 data); + void expression_write_memory_region(const char *rgntag, offs_t address, int size, UINT64 data); + expression_error::error_code expression_validate(void *param, const char *name, expression_space space); + device_t* expression_get_device(const char *tag); + + /* variable getters/setters */ + UINT64 get_cpunum(symbol_table &table, void *ref); + UINT64 get_beamx(symbol_table &table, void *ref); + UINT64 get_beamy(symbol_table &table, void *ref); + UINT64 get_frame(symbol_table &table, void *ref); + + /* internal helpers */ + void on_vblank(screen_device &device, bool vblank_state); + + running_machine& m_machine; + + device_t * m_livecpu; + device_t * m_visiblecpu; + device_t * m_breakcpu; + + FILE * m_source_file; // script source file + + std::unique_ptr m_symtable; // global symbol table + + bool m_within_instruction_hook; + bool m_vblank_occurred; + bool m_memory_modified; + bool m_debugger_access; + + int m_execution_state; + device_t * m_stop_when_not_device; // stop execution when the device ceases to be this + + UINT32 m_bpindex; + UINT32 m_wpindex; + UINT32 m_rpindex; + + UINT64 m_wpdata; + UINT64 m_wpaddr; + std::unique_ptr m_tempvar; + + osd_ticks_t m_last_periodic_update_time; + + bool m_comments_loaded; +}; #endif + diff --git a/src/emu/debug/debugvw.cpp b/src/emu/debug/debugvw.cpp index 135ac5fb76e..bfeec537118 100644 --- a/src/emu/debug/debugvw.cpp +++ b/src/emu/debug/debugvw.cpp @@ -18,6 +18,7 @@ #include "dvbpoints.h" #include "dvwpoints.h" #include "debugcpu.h" +#include "debugger.h" #include @@ -354,12 +355,6 @@ debug_view *debug_view_manager::alloc_view(debug_view_type type, debug_view_osd_ case DVT_LOG: return append(global_alloc(debug_view_log(machine(), osdupdate, osdprivate))); - case DVT_TIMERS: -// return append(global_alloc(debug_view_timers(machine(), osdupdate, osdprivate))); - - case DVT_ALLOCS: -// return append(global_alloc(debug_view_allocs(machine(), osdupdate, osdprivate))); - case DVT_BREAK_POINTS: return append(global_alloc(debug_view_breakpoints(machine(), osdupdate, osdprivate))); @@ -452,11 +447,11 @@ debug_view *debug_view_manager::append(debug_view *view) //------------------------------------------------- debug_view_expression::debug_view_expression(running_machine &machine) - : m_machine(machine), - m_dirty(true), - m_result(0), - m_parsed(debug_cpu_get_global_symtable(machine)), - m_string("0") + : m_machine(machine) + , m_dirty(true) + , m_result(0) + , m_parsed(machine.debugger().cpu().get_global_symtable()) + , m_string("0") { } @@ -477,7 +472,7 @@ debug_view_expression::~debug_view_expression() void debug_view_expression::set_context(symbol_table *context) { - m_parsed.set_symbols((context != nullptr) ? context : debug_cpu_get_global_symtable(machine())); + m_parsed.set_symbols((context != nullptr) ? context : m_machine.debugger().cpu().get_global_symtable()); m_dirty = true; } diff --git a/src/emu/debug/debugvw.h b/src/emu/debug/debugvw.h index cb1852aed2c..2f5d8c16872 100644 --- a/src/emu/debug/debugvw.h +++ b/src/emu/debug/debugvw.h @@ -27,8 +27,6 @@ enum debug_view_type DVT_DISASSEMBLY, DVT_MEMORY, DVT_LOG, - DVT_TIMERS, - DVT_ALLOCS, DVT_BREAK_POINTS, DVT_WATCH_POINTS }; diff --git a/src/emu/debug/dvdisasm.cpp b/src/emu/debug/dvdisasm.cpp index c0ed17bdde0..a2aad9162cf 100644 --- a/src/emu/debug/dvdisasm.cpp +++ b/src/emu/debug/dvdisasm.cpp @@ -12,7 +12,7 @@ #include "debugvw.h" #include "dvdisasm.h" #include "debugcpu.h" - +#include "debugger.h" //************************************************************************** @@ -254,8 +254,8 @@ offs_t debug_view_disasm::find_pc_backwards(offs_t targetpc, int numinstrs) while (curpcbyte < fillpcbyte) { fillpcbyte--; - opbuf[1000 + fillpcbyte - targetpcbyte] = debug_read_opcode(source.m_decrypted_space, fillpcbyte, 1); - argbuf[1000 + fillpcbyte - targetpcbyte] = debug_read_opcode(source.m_space, fillpcbyte, 1); + opbuf[1000 + fillpcbyte - targetpcbyte] = machine().debugger().cpu().read_opcode(source.m_decrypted_space, fillpcbyte, 1); + argbuf[1000 + fillpcbyte - targetpcbyte] = machine().debugger().cpu().read_opcode(source.m_space, fillpcbyte, 1); } // loop until we get past the target instruction @@ -269,7 +269,7 @@ offs_t debug_view_disasm::find_pc_backwards(offs_t targetpc, int numinstrs) // get the disassembly, but only if mapped instlen = 1; - if (debug_cpu_translate(source.m_space, TRANSLATE_FETCH, &physpcbyte)) + if (machine().debugger().cpu().translate(source.m_space, TRANSLATE_FETCH, &physpcbyte)) { char dasmbuffer[100]; instlen = source.device()->debug()->disassemble(dasmbuffer, scanpc, &opbuf[1000 + scanpcbyte - targetpcbyte], &argbuf[1000 + scanpcbyte - targetpcbyte]) & DASMFLAG_LENGTHMASK; @@ -315,12 +315,12 @@ void debug_view_disasm::generate_bytes(offs_t pcbyte, int numbytes, int minbytes // output the first value int offset = 0; if (maxchars >= char_num * minbytes) - offset += util::stream_format(m_dasm, source.m_space.is_octal() ? "%0*o" : "%0*X", minbytes * char_num, debug_read_opcode(source.m_decrypted_space, pcbyte, minbytes)); + offset += util::stream_format(m_dasm, source.m_space.is_octal() ? "%0*o" : "%0*X", minbytes * char_num, machine().debugger().cpu().read_opcode(source.m_decrypted_space, pcbyte, minbytes)); // output subsequent values int byte; for (byte = minbytes; byte < numbytes && offset + 1 + char_num * minbytes < maxchars; byte += minbytes) - offset += util::stream_format(m_dasm, source.m_space.is_octal() ? " %0*o" : " %0*X", minbytes * char_num, debug_read_opcode(encrypted ? source.m_space : source.m_decrypted_space, pcbyte + byte, minbytes)); + offset += util::stream_format(m_dasm, source.m_space.is_octal() ? " %0*o" : " %0*X", minbytes * char_num, machine().debugger().cpu().read_opcode(encrypted ? source.m_space : source.m_decrypted_space, pcbyte + byte, minbytes)); // if we ran out of room, indicate more if ((byte < numbytes) && (byte != minbytes) && (maxchars > 3)) @@ -395,15 +395,15 @@ bool debug_view_disasm::recompute(offs_t pc, int startline, int lines) char buffer[100]; int numbytes = 0; offs_t physpcbyte = pcbyte; - if (debug_cpu_translate(source.m_space, TRANSLATE_FETCH_DEBUG, &physpcbyte)) + if (machine().debugger().cpu().translate(source.m_space, TRANSLATE_FETCH_DEBUG, &physpcbyte)) { UINT8 opbuf[64], argbuf[64]; // fetch the bytes up to the maximum for (numbytes = 0; numbytes < maxbytes; numbytes++) { - opbuf[numbytes] = debug_read_opcode(source.m_decrypted_space, pcbyte + numbytes, 1); - argbuf[numbytes] = debug_read_opcode(source.m_space, pcbyte + numbytes, 1); + opbuf[numbytes] = machine().debugger().cpu().read_opcode(source.m_decrypted_space, pcbyte + numbytes, 1); + argbuf[numbytes] = machine().debugger().cpu().read_opcode(source.m_space, pcbyte + numbytes, 1); } // disassemble the result diff --git a/src/emu/debug/dvmemory.cpp b/src/emu/debug/dvmemory.cpp index 0724f9fa27d..47a046081a4 100644 --- a/src/emu/debug/dvmemory.cpp +++ b/src/emu/debug/dvmemory.cpp @@ -12,6 +12,7 @@ #include "debugvw.h" #include "dvmemory.h" #include "debugcpu.h" +#include "debugger.h" #include @@ -146,10 +147,10 @@ void debug_view_memory::enumerate_sources() } // then add all the memory regions - for (memory_region ®ion : machine().memory().regions()) + for (auto ®ion : machine().memory().regions()) { - name = string_format("Region '%s'", region.name()); - m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), region))); + name = string_format("Region '%s'", region.second->name()); + m_source_list.append(*global_alloc(debug_view_memory_source(name.c_str(), *region.second.get()))); } // finally add all global array symbols @@ -747,10 +748,10 @@ bool debug_view_memory::read(UINT8 size, offs_t offs, UINT64 &data) { switch (size) { - case 1: data = debug_read_byte(*source.m_space, offs, !m_no_translation); break; - case 2: data = debug_read_word(*source.m_space, offs, !m_no_translation); break; - case 4: data = debug_read_dword(*source.m_space, offs, !m_no_translation); break; - case 8: data = debug_read_qword(*source.m_space, offs, !m_no_translation); break; + case 1: data = machine().debugger().cpu().read_byte(*source.m_space, offs, !m_no_translation); break; + case 2: data = machine().debugger().cpu().read_word(*source.m_space, offs, !m_no_translation); break; + case 4: data = machine().debugger().cpu().read_dword(*source.m_space, offs, !m_no_translation); break; + case 8: data = machine().debugger().cpu().read_qword(*source.m_space, offs, !m_no_translation); break; } } return ismapped; @@ -819,10 +820,10 @@ void debug_view_memory::write(UINT8 size, offs_t offs, UINT64 data) { switch (size) { - case 1: debug_write_byte(*source.m_space, offs, data, !m_no_translation); break; - case 2: debug_write_word(*source.m_space, offs, data, !m_no_translation); break; - case 4: debug_write_dword(*source.m_space, offs, data, !m_no_translation); break; - case 8: debug_write_qword(*source.m_space, offs, data, !m_no_translation); break; + case 1: machine().debugger().cpu().write_byte(*source.m_space, offs, data, !m_no_translation); break; + case 2: machine().debugger().cpu().write_word(*source.m_space, offs, data, !m_no_translation); break; + case 4: machine().debugger().cpu().write_dword(*source.m_space, offs, data, !m_no_translation); break; + case 8: machine().debugger().cpu().write_qword(*source.m_space, offs, data, !m_no_translation); break; } return; } diff --git a/src/emu/debug/dvtext.cpp b/src/emu/debug/dvtext.cpp index ce1d8abdb1b..af4bbba1852 100644 --- a/src/emu/debug/dvtext.cpp +++ b/src/emu/debug/dvtext.cpp @@ -12,8 +12,7 @@ #include "debugvw.h" #include "dvtext.h" #include "debugcon.h" - - +#include "debugger.h" //************************************************************************** // DEBUG VIEW TEXTBUF @@ -135,7 +134,7 @@ void debug_view_textbuf::view_notify(debug_view_notification type) //------------------------------------------------- debug_view_console::debug_view_console(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate) - : debug_view_textbuf(machine, DVT_CONSOLE, osdupdate, osdprivate, *debug_console_get_textbuf()) + : debug_view_textbuf(machine, DVT_CONSOLE, osdupdate, osdprivate, *machine.debugger().console().get_console_textbuf()) { } @@ -150,6 +149,6 @@ debug_view_console::debug_view_console(running_machine &machine, debug_view_osd_ //------------------------------------------------- debug_view_log::debug_view_log(running_machine &machine, debug_view_osd_update_func osdupdate, void *osdprivate) - : debug_view_textbuf(machine, DVT_LOG, osdupdate, osdprivate, *debug_errorlog_get_textbuf()) + : debug_view_textbuf(machine, DVT_LOG, osdupdate, osdprivate, *machine.debugger().console().get_errorlog_textbuf()) { } diff --git a/src/emu/debug/express.cpp b/src/emu/debug/express.cpp index eb2477a1374..000ff270937 100644 --- a/src/emu/debug/express.cpp +++ b/src/emu/debug/express.cpp @@ -274,7 +274,7 @@ bool integer_symbol_entry::is_lval() const UINT64 integer_symbol_entry::value() const { - return (*m_getter)(m_table, m_ref); + return m_getter(m_table, m_ref); } @@ -285,7 +285,7 @@ UINT64 integer_symbol_entry::value() const void integer_symbol_entry::set_value(UINT64 newvalue) { if (m_setter != nullptr) - (*m_setter)(m_table, m_ref, newvalue); + m_setter(m_table, m_ref, newvalue); else throw emu_fatalerror("Symbol '%s' is read-only", m_name.c_str()); } @@ -371,7 +371,7 @@ UINT64 function_symbol_entry::execute(int numparams, const UINT64 *paramlist) throw emu_fatalerror("Function '%s' requires at least %d parameters", m_name.c_str(), m_minparams); if (numparams > m_maxparams) throw emu_fatalerror("Function '%s' accepts no more than %d parameters", m_name.c_str(), m_maxparams); - return (*m_execute)(m_table, m_ref, numparams, paramlist); + return m_execute(m_table, m_ref, numparams, paramlist); } @@ -414,8 +414,8 @@ void symbol_table::configure_memory(void *param, valid_func valid, read_func rea void symbol_table::add(const char *name, read_write rw, UINT64 *ptr) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(integer_symbol_entry(*this, name, rw, ptr))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique(*this, name, rw, ptr)); } @@ -425,8 +425,8 @@ void symbol_table::add(const char *name, read_write rw, UINT64 *ptr) void symbol_table::add(const char *name, UINT64 value) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(integer_symbol_entry(*this, name, value))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique(*this, name, value)); } @@ -436,8 +436,8 @@ void symbol_table::add(const char *name, UINT64 value) void symbol_table::add(const char *name, void *ref, getter_func getter, setter_func setter) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(integer_symbol_entry(*this, name, ref, getter, setter))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique(*this, name, ref, getter, setter)); } @@ -447,8 +447,8 @@ void symbol_table::add(const char *name, void *ref, getter_func getter, setter_f void symbol_table::add(const char *name, void *ref, int minparams, int maxparams, execute_func execute) { - m_symlist.remove(name); - m_symlist.append(name, *global_alloc(function_symbol_entry(*this, name, ref, minparams, maxparams, execute))); + m_symlist.erase(name); + m_symlist.emplace(name, std::make_unique(*this, name, ref, minparams, maxparams, execute)); } @@ -504,7 +504,7 @@ expression_error::error_code symbol_table::memory_valid(const char *name, expres for (symbol_table *symtable = this; symtable != nullptr; symtable = symtable->m_parent) if (symtable->m_memory_valid != nullptr) { - expression_error::error_code err = (*symtable->m_memory_valid)(symtable->m_memory_param, name, space); + expression_error::error_code err = symtable->m_memory_valid(symtable->m_memory_param, name, space); if (err != expression_error::NO_SUCH_MEMORY_SPACE) return err; } @@ -522,9 +522,9 @@ UINT64 symbol_table::memory_value(const char *name, expression_space space, UINT for (symbol_table *symtable = this; symtable != nullptr; symtable = symtable->m_parent) if (symtable->m_memory_valid != nullptr) { - expression_error::error_code err = (*symtable->m_memory_valid)(symtable->m_memory_param, name, space); + expression_error::error_code err = symtable->m_memory_valid(symtable->m_memory_param, name, space); if (err != expression_error::NO_SUCH_MEMORY_SPACE && symtable->m_memory_read != nullptr) - return (*symtable->m_memory_read)(symtable->m_memory_param, name, space, offset, size); + return symtable->m_memory_read(symtable->m_memory_param, name, space, offset, size); return 0; } return 0; @@ -541,9 +541,9 @@ void symbol_table::set_memory_value(const char *name, expression_space space, UI for (symbol_table *symtable = this; symtable != nullptr; symtable = symtable->m_parent) if (symtable->m_memory_valid != nullptr) { - expression_error::error_code err = (*symtable->m_memory_valid)(symtable->m_memory_param, name, space); + expression_error::error_code err = symtable->m_memory_valid(symtable->m_memory_param, name, space); if (err != expression_error::NO_SUCH_MEMORY_SPACE && symtable->m_memory_write != nullptr) - (*symtable->m_memory_write)(symtable->m_memory_param, name, space, offset, size, value); + symtable->m_memory_write(symtable->m_memory_param, name, space, offset, size, value); return; } } diff --git a/src/emu/debug/express.h b/src/emu/debug/express.h index 5eb961606e4..4f57bea70a2 100644 --- a/src/emu/debug/express.h +++ b/src/emu/debug/express.h @@ -13,6 +13,8 @@ #ifndef __EXPRESS_H__ #define __EXPRESS_H__ +#include + #include "emu.h" @@ -115,9 +117,9 @@ protected: // construction/destruction symbol_entry(symbol_table &table, symbol_type type, const char *name, void *ref); +public: virtual ~symbol_entry(); -public: // getters symbol_entry *next() const { return m_next; } const char *name() const { return m_name.c_str(); } @@ -148,16 +150,16 @@ class symbol_table { public: // callback functions for getting/setting a symbol value - typedef UINT64 (*getter_func)(symbol_table &table, void *symref); - typedef void (*setter_func)(symbol_table &table, void *symref, UINT64 value); + typedef std::function getter_func; + typedef std::function setter_func; // callback functions for function execution - typedef UINT64 (*execute_func)(symbol_table &table, void *symref, int numparams, const UINT64 *paramlist); + typedef std::function execute_func; // callback functions for memory reads/writes - typedef expression_error::error_code (*valid_func)(void *cbparam, const char *name, expression_space space); - typedef UINT64 (*read_func)(void *cbparam, const char *name, expression_space space, UINT32 offset, int size); - typedef void (*write_func)(void *cbparam, const char *name, expression_space space, UINT32 offset, int size, UINT64 value); + typedef std::function valid_func; + typedef std::function read_func; + typedef std::function write_func; enum read_write { @@ -169,7 +171,7 @@ public: symbol_table(void *globalref, symbol_table *parent = nullptr); // getters - const tagged_list &entries() const { return m_symlist; } + const std::unordered_map> &entries() const { return m_symlist; } symbol_table *parent() const { return m_parent; } void *globalref() const { return m_globalref; } @@ -181,7 +183,7 @@ public: void add(const char *name, UINT64 constvalue); void add(const char *name, void *ref, getter_func getter, setter_func setter = nullptr); void add(const char *name, void *ref, int minparams, int maxparams, execute_func execute); - symbol_entry *find(const char *name) const { return m_symlist.find(name); } + symbol_entry *find(const char *name) const { if (name) { auto search = m_symlist.find(name); if (search != m_symlist.end()) return search->second.get(); else return nullptr; } else return nullptr; } symbol_entry *find_deep(const char *name); // value getter/setter @@ -197,7 +199,7 @@ private: // internal state symbol_table * m_parent; // pointer to the parent symbol table void * m_globalref; // global reference parameter - tagged_list m_symlist; // list of symbols + std::unordered_map> m_symlist; // list of symbols void * m_memory_param; // callback parameter for memory valid_func m_memory_valid; // validation callback read_func m_memory_read; // read callback diff --git a/src/emu/debugger.cpp b/src/emu/debugger.cpp index 849b16d068d..52031ff7753 100644 --- a/src/emu/debugger.cpp +++ b/src/emu/debugger.cpp @@ -23,6 +23,94 @@ static running_machine *g_machine = nullptr; static int g_atexit_registered = FALSE; +/*------------------------------------------------- + debugger_instruction_hook - CPU cores call + this once per instruction from CPU cores +-------------------------------------------------*/ + +void debugger_instruction_hook(device_t *device, offs_t curpc) +{ +#ifndef MAME_DEBUG_FAST + if ((device->machine().debug_flags & DEBUG_FLAG_CALL_HOOK) != 0) + device->debug()->instruction_hook(curpc); +#endif +} + + +/*------------------------------------------------- + debugger_exception_hook - CPU cores call this + anytime an exception is generated +-------------------------------------------------*/ + +void debugger_exception_hook(device_t *device, int exception) +{ + if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) + device->debug()->exception_hook(exception); +} + +/*------------------------------------------------- + debugger_start_cpu_hook - the CPU execution + system calls this hook before beginning + execution for the given CPU +-------------------------------------------------*/ + +void debugger_start_cpu_hook(device_t *device, const attotime &endtime) +{ + if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) + device->debug()->start_hook(endtime); +} + + +/*------------------------------------------------- + debugger_stop_cpu_hook - the CPU execution + system calls this hook when ending execution + for the given CPU +-------------------------------------------------*/ + +void debugger_stop_cpu_hook(device_t *device) +{ + if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) + device->debug()->stop_hook(); +} + + +/*------------------------------------------------- + debugger_interrupt_hook - the CPU execution + system calls this hook when an interrupt is + acknowledged +-------------------------------------------------*/ + +void debugger_interrupt_hook(device_t *device, int irqline) +{ + if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) + device->debug()->interrupt_hook(irqline); +} + +/*------------------------------------------------- + debug_break - stop in the debugger at the next + opportunity +-------------------------------------------------*/ + +void debugger_manager::debug_break() +{ + m_cpu->get_visible_cpu()->debug()->halt_on_next_instruction("Internal breakpoint\n"); +} + + +/*------------------------------------------------- + within_instruction_hook - call this to + determine if the debugger is currently halted + within the instruction hook +-------------------------------------------------*/ + +bool debugger_manager::within_instruction_hook() +{ + if ((m_machine.debug_flags & DEBUG_FLAG_ENABLED) != 0) + return m_cpu->within_instruction_hook(); + return false; +} + + //************************************************************************** // DEBUGGER MANAGER //************************************************************************** @@ -35,8 +123,9 @@ debugger_manager::debugger_manager(running_machine &machine) : m_machine(machine) { /* initialize the submodules */ - debug_cpu_init(machine); - debug_command_init(machine); + m_cpu = std::make_unique(machine); + m_console = std::make_unique(machine); + m_commands = std::make_unique(machine, cpu(), console()); g_machine = &machine; @@ -45,9 +134,6 @@ debugger_manager::debugger_manager(running_machine &machine) atexit(debugger_flush_all_traces_on_abnormal_exit); g_atexit_registered = TRUE; - /* listen in on the errorlog */ - machine.add_logerror_callback(debug_errorlog_write_line); - /* initialize osd debugger features */ machine.osd().init_debugger(); } @@ -61,15 +147,6 @@ debugger_manager::~debugger_manager() g_machine = nullptr; } -void debugger_manager::initialize() -{ - /* only if debugging is enabled */ - if (machine().debug_flags & DEBUG_FLAG_ENABLED) - { - debug_console_init(machine()); - } -} - /*------------------------------------------------- refresh_display - redraw the current video display @@ -89,8 +166,8 @@ void debugger_manager::refresh_display() void debugger_flush_all_traces_on_abnormal_exit(void) { - if(g_machine!=nullptr) + if(g_machine != nullptr) { - debug_cpu_flush_traces(*g_machine); + g_machine->debugger().cpu().flush_traces(); } } diff --git a/src/emu/debugger.h b/src/emu/debugger.h index 4efcc5c3de6..7760d9193bd 100644 --- a/src/emu/debugger.h +++ b/src/emu/debugger.h @@ -12,7 +12,9 @@ #ifndef __DEBUGGER_H__ #define __DEBUGGER_H__ -#include "debug/debugcpu.h" +class debugger_commands; +class debugger_cpu; +class debugger_console; // ======================> debugger_manager @@ -24,16 +26,26 @@ public: debugger_manager(running_machine &machine); ~debugger_manager(); - void initialize(); + // break into the debugger + void debug_break(); - /* redraw the current video display */ + bool within_instruction_hook(); + + // redraw the current video display void refresh_display(); // getters running_machine &machine() const { return m_machine; } + debugger_commands &commands() const { return *m_commands; } + debugger_cpu &cpu() const { return *m_cpu; } + debugger_console &console() const { return *m_console; } + private: - // internal state - running_machine & m_machine; // reference to our machine + running_machine & m_machine; + + std::unique_ptr m_commands; + std::unique_ptr m_cpu; + std::unique_ptr m_console; }; @@ -47,108 +59,21 @@ void debugger_flush_all_traces_on_abnormal_exit(void); /*************************************************************************** - CPU CORE INLINE FUNCTIONS + CPU CORE STATIC FUNCTIONS ***************************************************************************/ -/*------------------------------------------------- - debugger_instruction_hook - CPU cores call - this once per instruction from CPU cores --------------------------------------------------*/ - -static inline void debugger_instruction_hook(device_t *device, offs_t curpc) -{ -#ifndef MAME_DEBUG_FAST - if ((device->machine().debug_flags & DEBUG_FLAG_CALL_HOOK) != 0) - device->debug()->instruction_hook(curpc); -#endif -} - - -/*------------------------------------------------- - debugger_exception_hook - CPU cores call this - anytime an exception is generated --------------------------------------------------*/ - -static inline void debugger_exception_hook(device_t *device, int exception) -{ - if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) - device->debug()->exception_hook(exception); -} +void debugger_instruction_hook(device_t *device, offs_t curpc); +void debugger_exception_hook(device_t *device, int exception); /*************************************************************************** - CPU EXECUTION SYSTEM INLINE FUNCTIONS + CPU EXECUTION SYSTEM STATIC FUNCTIONS ***************************************************************************/ -/*------------------------------------------------- - debugger_start_cpu_hook - the CPU execution - system calls this hook before beginning - execution for the given CPU --------------------------------------------------*/ - -static inline void debugger_start_cpu_hook(device_t *device, const attotime &endtime) -{ - if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) - device->debug()->start_hook(endtime); -} - - -/*------------------------------------------------- - debugger_stop_cpu_hook - the CPU execution - system calls this hook when ending execution - for the given CPU --------------------------------------------------*/ - -static inline void debugger_stop_cpu_hook(device_t *device) -{ - if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) - device->debug()->stop_hook(); -} - - -/*------------------------------------------------- - debugger_interrupt_hook - the CPU execution - system calls this hook when an interrupt is - acknowledged --------------------------------------------------*/ - -static inline void debugger_interrupt_hook(device_t *device, int irqline) -{ - if ((device->machine().debug_flags & DEBUG_FLAG_ENABLED) != 0) - device->debug()->interrupt_hook(irqline); -} - - - -/*************************************************************************** - GENERAL INLINE FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - debugger_break - stop in the debugger at the - next opportunity --------------------------------------------------*/ - -static inline void debugger_break(running_machine &machine) -{ - if ((machine.debug_flags & DEBUG_FLAG_ENABLED) != 0) - debug_cpu_get_visible_cpu(machine)->debug()->halt_on_next_instruction("Internal breakpoint\n"); -} - - -/*------------------------------------------------- - debugger_within_instruction_hook - call this - to determine if the debugger is currently - halted within the instruction hook --------------------------------------------------*/ - -static inline int debugger_within_instruction_hook(running_machine &machine) -{ - if ((machine.debug_flags & DEBUG_FLAG_ENABLED) != 0) - return debug_cpu_within_instruction_hook(machine); - return FALSE; -} +void debugger_start_cpu_hook(device_t *device, const attotime &endtime); +void debugger_stop_cpu_hook(device_t *device); +void debugger_interrupt_hook(device_t *device, int irqline); #endif /* __DEBUGGER_H__ */ diff --git a/src/emu/devdelegate.h b/src/emu/devdelegate.h index b688cd31261..58974c4f5b3 100644 --- a/src/emu/devdelegate.h +++ b/src/emu/devdelegate.h @@ -74,7 +74,7 @@ public: device_delegate(const thistype &src, device_t &search_root) : basetype(src), device_delegate_helper(src.m_device_name) { bind_relative_to(search_root); } // perform the binding - void bind_relative_to(device_t &search_root) { assert(&search_root != nullptr); if (!basetype::isnull()) basetype::late_bind(bound_object(search_root)); } + void bind_relative_to(device_t &search_root) { if (!basetype::isnull()) basetype::late_bind(bound_object(search_root)); } // getter (for validation purposes) const char *device_name() const { return m_device_name; } diff --git a/src/emu/device.cpp b/src/emu/device.cpp index 97c345788da..8d4ec1b8d62 100644 --- a/src/emu/device.cpp +++ b/src/emu/device.cpp @@ -74,7 +74,16 @@ device_t::~device_t() memory_region *device_t::memregion(const char *_tag) const { // build a fully-qualified name and look it up - return machine().memory().regions().find(subtag(_tag).c_str()); + if (_tag) + { + auto search = machine().memory().regions().find(subtag(_tag).c_str()); + if (search != machine().memory().regions().end()) + return search->second.get(); + else + return nullptr; + } + else + return nullptr; } @@ -86,7 +95,16 @@ memory_region *device_t::memregion(const char *_tag) const memory_share *device_t::memshare(const char *_tag) const { // build a fully-qualified name and look it up - return machine().memory().shares().find(subtag(_tag).c_str()); + if (_tag) + { + auto search = machine().memory().shares().find(subtag(_tag).c_str()); + if (search != machine().memory().shares().end()) + return search->second.get(); + else + return nullptr; + } + else + return nullptr; } @@ -97,8 +115,16 @@ memory_share *device_t::memshare(const char *_tag) const memory_bank *device_t::membank(const char *_tag) const { - // build a fully-qualified name and look it up - return machine().memory().banks().find(subtag(_tag).c_str()); + if (_tag) + { + auto search = machine().memory().banks().find(subtag(_tag).c_str()); + if (search != machine().memory().banks().end()) + return search->second.get(); + else + return nullptr; + } + else + return nullptr; } diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index 3506704d9b5..9347570fee6 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -197,9 +197,9 @@ image_error_t device_image_interface::set_image_filename(const char *filename) const image_device_format *device_image_interface::device_get_named_creatable_format(const char *format_name) { - for (const image_device_format &format : m_formatlist) - if (strcmp(format.name(), format_name) == 0) - return &format; + for (auto &format : m_formatlist) + if (strcmp(format->name(), format_name) == 0) + return format.get(); return nullptr; } @@ -1096,7 +1096,16 @@ bool device_image_interface::finish_load() bool device_image_interface::create(const char *path, const image_device_format *create_format, option_resolution *create_args) { - int format_index = (create_format != nullptr) ? m_formatlist.indexof(*create_format) : 0; + int format_index = 0; + int cnt = 0; + for (auto &format : m_formatlist) + { + if (create_format == format.get()) { + format_index = cnt; + break; + } + cnt++; + } return load_internal(path, TRUE, format_index, create_args, FALSE); } diff --git a/src/emu/diimage.h b/src/emu/diimage.h index 89c402b47fa..53b3f21eefb 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -71,24 +71,19 @@ struct image_device_type_info class image_device_format { - friend class simple_list; - public: image_device_format(const char *name, const char *description, const char *extensions, const char *optspec) - : m_next(nullptr), - m_name(name), + : m_name(name), m_description(description), m_extensions(extensions), m_optspec(optspec) { } - image_device_format *next() const { return m_next; } const char *name() const { return m_name.c_str(); } const char *description() const { return m_description.c_str(); } const char *extensions() const { return m_extensions.c_str(); } const char *optspec() const { return m_optspec.c_str(); } private: - image_device_format *m_next; std::string m_name; std::string m_description; std::string m_extensions; @@ -152,7 +147,7 @@ public: virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return FALSE; } virtual bool call_create(int format_type, option_resolution *format_options) { return FALSE; } virtual void call_unload() { } - virtual void call_display() { } + virtual std::string call_display() { return std::string(); } virtual device_image_partialhash_func get_partial_hash() const { return nullptr; } virtual bool core_opens_image_file() const { return TRUE; } virtual iodevice_t image_type() const = 0; @@ -165,7 +160,7 @@ public: virtual const char *file_extensions() const = 0; virtual const option_guide *create_option_guide() const = 0; - const image_device_format *device_get_indexed_creatable_format(int index) const { return m_formatlist.find(index); } + const image_device_format *device_get_indexed_creatable_format(int index) const { if (index < m_formatlist.size()) return m_formatlist.at(index).get(); else return nullptr; } const image_device_format *device_get_named_creatable_format(const char *format_name); const option_guide *device_get_creation_option_guide() const { return create_option_guide(); } @@ -226,7 +221,7 @@ public: const char *instance_name() const { return m_instance_name.c_str(); } const char *brief_instance_name() const { return m_brief_instance_name.c_str(); } bool uses_file_extension(const char *file_extension) const; - const simple_list &formatlist() const { return m_formatlist; } + const std::vector> &formatlist() const { return m_formatlist; } bool load(const char *path); bool open_image_file(emu_options &options); @@ -320,7 +315,7 @@ protected: std::string m_instance_name; /* creation info */ - simple_list m_formatlist; + std::vector> m_formatlist; /* in the case of arcade cabinet with fixed carts inserted, we want to disable command line cart loading... */ diff --git a/src/emu/dioutput.h b/src/emu/dioutput.h index 94528671ad9..1ba6f9d9f81 100644 --- a/src/emu/dioutput.h +++ b/src/emu/dioutput.h @@ -20,7 +20,7 @@ //************************************************************************** -// TYPE DEFINITIONS +// MACROS //************************************************************************** #define MCFG_OUTPUT_INDEX(_index) \ diff --git a/src/emu/dislot.cpp b/src/emu/dislot.cpp index 051dc33bdb2..5489cdc4453 100644 --- a/src/emu/dislot.cpp +++ b/src/emu/dislot.cpp @@ -21,7 +21,6 @@ device_slot_interface::~device_slot_interface() } device_slot_option::device_slot_option(const char *name, const device_type &devtype): - m_next(nullptr), m_name(name), m_devtype(devtype), m_selectable(true), @@ -36,7 +35,7 @@ void device_slot_interface::static_option_reset(device_t &device) { device_slot_interface &intf = dynamic_cast(device); - intf.m_options.reset(); + intf.m_options.clear(); } void device_slot_interface::static_option_add(device_t &device, const char *name, const device_type &devtype) @@ -46,8 +45,8 @@ void device_slot_interface::static_option_add(device_t &device, const char *name if (option != nullptr) throw emu_fatalerror("slot '%s' duplicate option '%s\n", device.tag(), name); - - intf.m_options.append(name, *global_alloc(device_slot_option(name, devtype))); + if (intf.m_options.count(name) != 0) throw tag_add_exception(name); + intf.m_options.emplace(std::make_pair(name, std::make_unique(name, devtype))); } device_slot_option *device_slot_interface::static_option(device_t &device, const char *name) diff --git a/src/emu/dislot.h b/src/emu/dislot.h index 7aaf28d004d..a5e6d3edfc1 100644 --- a/src/emu/dislot.h +++ b/src/emu/dislot.h @@ -67,12 +67,10 @@ class device_slot_option { friend class device_slot_interface; - friend class simple_list; public: device_slot_option(const char *name, const device_type &devtype); - device_slot_option *next() const { return m_next; } const char *name() const { return m_name; } const device_type &devtype() const { return m_devtype; } bool selectable() const { return m_selectable; } @@ -83,7 +81,6 @@ public: private: // internal state - device_slot_option *m_next; const char *m_name; const device_type &m_devtype; bool m_selectable; @@ -114,15 +111,15 @@ public: static void static_set_option_clock(device_t &device, const char *option, UINT32 default_clock) { static_option(device, option)->m_clock = default_clock; } bool fixed() const { return m_fixed; } const char *default_option() const { return m_default_option; } - const tagged_list &option_list() const { return m_options; } - device_slot_option *option(const char *name) const { if (name) return m_options.find(name); return nullptr; } + const std::unordered_map> &option_list() const { return m_options; } + device_slot_option *option(const char *name) const { if (name) { auto search = m_options.find(name); if (search != m_options.end()) return search->second.get(); else return nullptr; } else return nullptr; } virtual std::string get_default_card_software() { return std::string(); } device_t *get_card_device(); private: // internal state static device_slot_option *static_option(device_t &device, const char *option); - tagged_list m_options; + std::unordered_map> m_options; const char *m_default_option; bool m_fixed; }; diff --git a/src/emu/disound.cpp b/src/emu/disound.cpp index 81c63dd0106..52087560191 100644 --- a/src/emu/disound.cpp +++ b/src/emu/disound.cpp @@ -42,7 +42,7 @@ device_sound_interface::~device_sound_interface() // a new route to the device //------------------------------------------------- -device_sound_interface::sound_route &device_sound_interface::static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input, UINT32 mixoutput) +void device_sound_interface::static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input, UINT32 mixoutput) { // find our sound interface device_sound_interface *sound; @@ -50,7 +50,7 @@ device_sound_interface::sound_route &device_sound_interface::static_add_route(de throw emu_fatalerror("MCFG_SOUND_ROUTE called on device '%s' with no sound interface", device.tag()); // append a new route to the list - return sound->m_route_list.append(*global_alloc(sound_route(output, input, gain, target, mixoutput))); + sound->m_route_list.push_back(std::make_unique(output, input, gain, target, mixoutput)); } @@ -67,7 +67,7 @@ void device_sound_interface::static_reset_routes(device_t &device) throw emu_fatalerror("MCFG_SOUND_ROUTES_RESET called on device '%s' with no sound interface", device.tag()); // reset the routine list - sound->m_route_list.reset(); + sound->m_route_list.clear(); } @@ -91,9 +91,9 @@ int device_sound_interface::inputs() const { // scan the list counting streams we own and summing their inputs int inputs = 0; - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &m_device) - inputs += stream.input_count(); + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &m_device) + inputs += stream->input_count(); return inputs; } @@ -107,9 +107,9 @@ int device_sound_interface::outputs() const { // scan the list counting streams we own and summing their outputs int outputs = 0; - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &m_device) - outputs += stream.output_count(); + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &m_device) + outputs += stream->output_count(); return outputs; } @@ -125,15 +125,15 @@ sound_stream *device_sound_interface::input_to_stream_input(int inputnum, int &s assert(inputnum >= 0); // scan the list looking for streams owned by this device - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &m_device) + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &m_device) { - if (inputnum < stream.input_count()) + if (inputnum < stream->input_count()) { stream_inputnum = inputnum; - return &stream; + return stream.get(); } - inputnum -= stream.input_count(); + inputnum -= stream->input_count(); } // not found @@ -152,15 +152,15 @@ sound_stream *device_sound_interface::output_to_stream_output(int outputnum, int assert(outputnum >= 0); // scan the list looking for streams owned by this device - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &device()) + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &device()) { - if (outputnum < stream.output_count()) + if (outputnum < stream->output_count()) { stream_outputnum = outputnum; - return &stream; + return stream.get(); } - outputnum -= stream.output_count(); + outputnum -= stream->output_count(); } // not found @@ -192,10 +192,10 @@ void device_sound_interface::set_output_gain(int outputnum, float gain) // handle ALL_OUTPUTS as a special case if (outputnum == ALL_OUTPUTS) { - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &device()) - for (int num = 0; num < stream.output_count(); num++) - stream.set_output_gain(num, gain); + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &device()) + for (int num = 0; num < stream->output_count(); num++) + stream->set_output_gain(num, gain); } // look up the stream and stream output index @@ -217,10 +217,10 @@ void device_sound_interface::set_output_gain(int outputnum, float gain) int device_sound_interface::inputnum_from_device(device_t &source_device, int outputnum) const { int overall = 0; - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &device()) - for (int inputnum = 0; inputnum < stream.input_count(); inputnum++, overall++) - if (stream.input_source_device(inputnum) == &source_device && stream.input_source_outputnum(inputnum) == outputnum) + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &device()) + for (int inputnum = 0; inputnum < stream->input_count(); inputnum++, overall++) + if (stream->input_source_device(inputnum) == &source_device && stream->input_source_outputnum(inputnum) == outputnum) return overall; return -1; } @@ -235,17 +235,17 @@ int device_sound_interface::inputnum_from_device(device_t &source_device, int ou void device_sound_interface::interface_validity_check(validity_checker &valid) const { // loop over all the routes - for (const sound_route &route : routes()) + for (auto &route : routes()) { // find a device with the requested tag - const device_t *target = device().siblingdevice(route.m_target.c_str()); + const device_t *target = device().siblingdevice(route->m_target.c_str()); if (target == nullptr) - osd_printf_error("Attempting to route sound to non-existant device '%s'\n", route.m_target.c_str()); + osd_printf_error("Attempting to route sound to non-existant device '%s'\n", route->m_target.c_str()); // if it's not a speaker or a sound device, error const device_sound_interface *sound; if (target != nullptr && target->type() != SPEAKER && !target->interface(sound)) - osd_printf_error("Attempting to route sound to a non-sound device '%s' (%s)\n", route.m_target.c_str(), target->name()); + osd_printf_error("Attempting to route sound to a non-sound device '%s' (%s)\n", route->m_target.c_str(), target->name()); } } @@ -262,10 +262,10 @@ void device_sound_interface::interface_pre_start() for (device_sound_interface &sound : iter) { // scan each route on the device - for (const sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // see if we are the target of this route; if we are, make sure the source device is started - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); if (target_device == &m_device && !sound.device().started()) throw device_missing_dependencies(); } @@ -276,14 +276,14 @@ void device_sound_interface::interface_pre_start() for (device_sound_interface &sound : iter) { // scan each route on the device - for (sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // see if we are the target of this route - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); - if (target_device == &m_device && route.m_input == AUTO_ALLOC_INPUT) + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); + if (target_device == &m_device && route->m_input == AUTO_ALLOC_INPUT) { - route.m_input = m_auto_allocated_inputs; - m_auto_allocated_inputs += (route.m_output == ALL_OUTPUTS) ? sound.outputs() : 1; + route->m_input = m_auto_allocated_inputs; + m_auto_allocated_inputs += (route->m_output == ALL_OUTPUTS) ? sound.outputs() : 1; } } } @@ -301,32 +301,32 @@ void device_sound_interface::interface_post_start() for (device_sound_interface &sound : sound_interface_iterator(m_device.machine().root_device())) { // scan each route on the device - for (const sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // if we are the target of this route, hook it up - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); if (target_device == &m_device) { // iterate over all outputs, matching any that apply - int inputnum = route.m_input; + int inputnum = route->m_input; int numoutputs = sound.outputs(); for (int outputnum = 0; outputnum < numoutputs; outputnum++) - if (route.m_output == outputnum || route.m_output == ALL_OUTPUTS) + if (route->m_output == outputnum || route->m_output == ALL_OUTPUTS) { // find the output stream to connect from int streamoutputnum; sound_stream *outputstream = sound.output_to_stream_output(outputnum, streamoutputnum); if (outputstream == nullptr) - fatalerror("Sound device '%s' specifies route for non-existant output #%d\n", route.m_target.c_str(), outputnum); + fatalerror("Sound device '%s' specifies route for non-existant output #%d\n", route->m_target.c_str(), outputnum); // find the input stream to connect to int streaminputnum; sound_stream *inputstream = input_to_stream_input(inputnum++, streaminputnum); if (inputstream == nullptr) - fatalerror("Sound device '%s' targeted output #%d to non-existant device '%s' input %d\n", route.m_target.c_str(), outputnum, m_device.tag(), inputnum - 1); + fatalerror("Sound device '%s' targeted output #%d to non-existant device '%s' input %d\n", route->m_target.c_str(), outputnum, m_device.tag(), inputnum - 1); // set the input - inputstream->set_input(streaminputnum, outputstream, streamoutputnum, route.m_gain); + inputstream->set_input(streaminputnum, outputstream, streamoutputnum, route->m_gain); } } } @@ -342,9 +342,9 @@ void device_sound_interface::interface_post_start() void device_sound_interface::interface_pre_reset() { // update all streams on this device prior to reset - for (sound_stream &stream : m_device.machine().sound().streams()) - if (&stream.device() == &device()) - stream.update(); + for (auto &stream : m_device.machine().sound().streams()) + if (&stream->device() == &device()) + stream->update(); } @@ -358,8 +358,7 @@ void device_sound_interface::interface_pre_reset() //------------------------------------------------- device_sound_interface::sound_route::sound_route(int output, int input, float gain, const char *target, UINT32 mixoutput) - : m_next(nullptr), - m_output(output), + : m_output(output), m_input(input), m_mixoutput(mixoutput), m_gain(gain), @@ -416,15 +415,15 @@ void device_mixer_interface::interface_pre_start() // iterate through all routes that point to us and note their mixer output for (device_sound_interface &sound : sound_interface_iterator(m_device.machine().root_device())) - for (const sound_route &route : sound.routes()) + for (auto &route : sound.routes()) { // see if we are the target of this route - device_t *target_device = sound.device().siblingdevice(route.m_target.c_str()); - if (target_device == &device() && route.m_input < m_auto_allocated_inputs) + device_t *target_device = sound.device().siblingdevice(route->m_target.c_str()); + if (target_device == &device() && route->m_input < m_auto_allocated_inputs) { - int count = (route.m_output == ALL_OUTPUTS) ? sound.outputs() : 1; + int count = (route->m_output == ALL_OUTPUTS) ? sound.outputs() : 1; for (int output = 0; output < count; output++) - m_outputmap[route.m_input + output] = route.m_mixoutput; + m_outputmap[route->m_input + output] = route->m_mixoutput; } } diff --git a/src/emu/disound.h b/src/emu/disound.h index 055f59d921e..f981113317e 100644 --- a/src/emu/disound.h +++ b/src/emu/disound.h @@ -70,9 +70,6 @@ public: public: sound_route(int output, int input, float gain, const char *target, UINT32 mixoutput); - sound_route *next() const { return m_next; } - - sound_route * m_next; // pointer to next route UINT32 m_output; // output index, or ALL_OUTPUTS UINT32 m_input; // target input index UINT32 m_mixoutput; // target mixer output @@ -85,10 +82,10 @@ public: virtual ~device_sound_interface(); // configuration access - const simple_list &routes() const { return m_route_list; } + const std::vector> &routes() const { return m_route_list; } // static inline configuration helpers - static sound_route &static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input = AUTO_ALLOC_INPUT, UINT32 mixoutput = 0); + static void static_add_route(device_t &device, UINT32 output, const char *target, double gain, UINT32 input = AUTO_ALLOC_INPUT, UINT32 mixoutput = 0); static void static_reset_routes(device_t &device); // sound stream update overrides @@ -114,7 +111,7 @@ protected: virtual void interface_pre_reset() override; // internal state - simple_list m_route_list; // list of sound routes + std::vector> m_route_list; // list of sound routes int m_outputs; // number of outputs from this instance int m_auto_allocated_inputs; // number of auto-allocated inputs targeting us }; diff --git a/src/emu/driver.cpp b/src/emu/driver.cpp index b504f9b6694..510cf8d9199 100644 --- a/src/emu/driver.cpp +++ b/src/emu/driver.cpp @@ -37,12 +37,9 @@ driver_device::driver_device(const machine_config &mconfig, device_type type, co device_memory_interface(mconfig, *this), m_space_config("generic", ENDIANNESS_LITTLE, 8, 32, 0, nullptr, *ADDRESS_MAP_NAME(generic)), m_system(nullptr), - m_latch_clear_value(0), m_flip_screen_x(0), m_flip_screen_y(0) { - memset(m_latched_value, 0, sizeof(m_latched_value)); - memset(m_latch_read, 0, sizeof(m_latch_read)); } @@ -231,8 +228,6 @@ void driver_device::device_start() video_start(); // save generic states - save_item(NAME(m_latch_clear_value)); - save_item(NAME(m_latched_value)); save_item(NAME(m_flip_screen_x)); save_item(NAME(m_flip_screen_y)); } @@ -375,74 +370,6 @@ INTERRUPT_GEN_MEMBER( driver_device::irq7_line_hold ) { device.execute().set_i INTERRUPT_GEN_MEMBER( driver_device::irq7_line_pulse ) { generic_pulse_irq_line(device.execute(), 7, 1); } INTERRUPT_GEN_MEMBER( driver_device::irq7_line_assert ) { device.execute().set_input_line(7, ASSERT_LINE); } -//************************************************************************** -// GENERIC SOUND COMMAND LATCHING -//************************************************************************** - -//------------------------------------------------- -// soundlatch_sync_callback - time-delayed -// callback to set a latch value -//------------------------------------------------- - -void driver_device::soundlatch_sync_callback(void *ptr, INT32 param) -{ - UINT16 value = param >> 8; - int which = param & 0xff; - - // if the latch hasn't been read and the value is changed, log a warning - if (!m_latch_read[which] && m_latched_value[which] != value) - logerror("Warning: sound latch %d written before being read. Previous: %02x, new: %02x\n", which, m_latched_value[which], value); - - // store the new value and mark it not read - m_latched_value[which] = value; - m_latch_read[which] = 0; -} - - -//------------------------------------------------- -// soundlatch_byte_w - global write handlers for -// writing to sound latches -//------------------------------------------------- - -void driver_device::soundlatch_write(UINT8 index, UINT32 data) { machine().scheduler().synchronize(timer_expired_delegate(FUNC(driver_device::soundlatch_sync_callback), this), index | (data << 8)); } -WRITE8_MEMBER( driver_device::soundlatch_byte_w ) { soundlatch_write(0, data); } -WRITE16_MEMBER( driver_device::soundlatch_word_w ) { soundlatch_write(0, data); } -WRITE8_MEMBER( driver_device::soundlatch2_byte_w ) { soundlatch_write(1, data); } -WRITE16_MEMBER( driver_device::soundlatch2_word_w ) { soundlatch_write(1, data); } -WRITE8_MEMBER( driver_device::soundlatch3_byte_w ) { soundlatch_write(2, data); } -WRITE16_MEMBER( driver_device::soundlatch3_word_w ) { soundlatch_write(2, data); } -WRITE8_MEMBER( driver_device::soundlatch4_byte_w ) { soundlatch_write(3, data); } -WRITE16_MEMBER( driver_device::soundlatch4_word_w ) { soundlatch_write(3, data); } - - -//------------------------------------------------- -// soundlatch_byte_r - global read handlers for -// reading from sound latches -//------------------------------------------------- - -UINT32 driver_device::soundlatch_read(UINT8 index) { m_latch_read[index] = 1; return m_latched_value[index]; } -READ8_MEMBER( driver_device::soundlatch_byte_r ) { return soundlatch_read(0); } -READ16_MEMBER( driver_device::soundlatch_word_r ) { return soundlatch_read(0); } -READ8_MEMBER( driver_device::soundlatch2_byte_r ) { return soundlatch_read(1); } -READ16_MEMBER( driver_device::soundlatch2_word_r ) { return soundlatch_read(1); } -READ8_MEMBER( driver_device::soundlatch3_byte_r ) { return soundlatch_read(2); } -READ16_MEMBER( driver_device::soundlatch3_word_r ) { return soundlatch_read(2); } -READ8_MEMBER( driver_device::soundlatch4_byte_r ) { return soundlatch_read(3); } -READ16_MEMBER( driver_device::soundlatch4_word_r ) { return soundlatch_read(3); } - - -//------------------------------------------------- -// soundlatch_clear_byte_w - global write handlers -// for clearing sound latches -//------------------------------------------------- - -void driver_device::soundlatch_clear(UINT8 index) { m_latched_value[index] = m_latch_clear_value; } -WRITE8_MEMBER( driver_device::soundlatch_clear_byte_w ) { soundlatch_clear(0); } -WRITE8_MEMBER( driver_device::soundlatch2_clear_byte_w ) { soundlatch_clear(1); } -WRITE8_MEMBER( driver_device::soundlatch3_clear_byte_w ) { soundlatch_clear(2); } -WRITE8_MEMBER( driver_device::soundlatch4_clear_byte_w ) { soundlatch_clear(3); } - - //************************************************************************** // GENERIC FLIP SCREEN HANDLING diff --git a/src/emu/driver.h b/src/emu/driver.h index 16c66ef9ec4..9d1bd42727e 100644 --- a/src/emu/driver.h +++ b/src/emu/driver.h @@ -179,38 +179,6 @@ public: INTERRUPT_GEN_MEMBER( irq7_line_pulse ); INTERRUPT_GEN_MEMBER( irq7_line_assert ); - // generic audio - void soundlatch_setclearedvalue(UINT16 value) { m_latch_clear_value = value; } - - // sound latch readers - UINT32 soundlatch_read(UINT8 index = 0); - DECLARE_READ8_MEMBER( soundlatch_byte_r ); - DECLARE_READ8_MEMBER( soundlatch2_byte_r ); - DECLARE_READ8_MEMBER( soundlatch3_byte_r ); - DECLARE_READ8_MEMBER( soundlatch4_byte_r ); - DECLARE_READ16_MEMBER( soundlatch_word_r ); - DECLARE_READ16_MEMBER( soundlatch2_word_r ); - DECLARE_READ16_MEMBER( soundlatch3_word_r ); - DECLARE_READ16_MEMBER( soundlatch4_word_r ); - - // sound latch writers - void soundlatch_write(UINT8 index, UINT32 data); - void soundlatch_write(UINT32 data) { soundlatch_write(0, data); } - DECLARE_WRITE8_MEMBER( soundlatch_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch2_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch3_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch4_byte_w ); - DECLARE_WRITE16_MEMBER( soundlatch_word_w ); - DECLARE_WRITE16_MEMBER( soundlatch2_word_w ); - DECLARE_WRITE16_MEMBER( soundlatch3_word_w ); - DECLARE_WRITE16_MEMBER( soundlatch4_word_w ); - - // sound latch clearers - void soundlatch_clear(UINT8 index = 0); - DECLARE_WRITE8_MEMBER( soundlatch_clear_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch2_clear_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch3_clear_byte_w ); - DECLARE_WRITE8_MEMBER( soundlatch4_clear_byte_w ); // generic video void flip_screen_set(UINT32 on); @@ -252,7 +220,6 @@ protected: private: // helpers void irq_pulse_clear(void *ptr, INT32 param); - void soundlatch_sync_callback(void *ptr, INT32 param); void updateflip(); // configuration state @@ -262,11 +229,6 @@ private: const game_driver * m_system; // pointer to the game driver driver_callback_delegate m_callbacks[CB_COUNT]; // start/reset callbacks - // generic audio - UINT16 m_latch_clear_value; - UINT16 m_latched_value[4]; - UINT8 m_latch_read[4]; - // generic video UINT8 m_flip_screen_x; UINT8 m_flip_screen_y; diff --git a/src/emu/emucore.h b/src/emu/emucore.h index c8c95c1af48..121ea41481c 100644 --- a/src/emu/emucore.h +++ b/src/emu/emucore.h @@ -28,6 +28,7 @@ // standard C++ includes #include +#include #include // core system includes @@ -35,8 +36,6 @@ #include "emualloc.h" #include "corestr.h" #include "bitmap.h" -#include "tagmap.h" - //************************************************************************** @@ -301,7 +300,14 @@ private: int code; }; - +class tag_add_exception +{ +public: + tag_add_exception(const char *tag) : m_tag(tag) { } + const char *tag() const { return m_tag.c_str(); } +private: + std::string m_tag; +}; //************************************************************************** // CASTING TEMPLATES @@ -312,48 +318,41 @@ class device_t; void report_bad_cast(const std::type_info &src_type, const std::type_info &dst_type); void report_bad_device_cast(const device_t *dev, const std::type_info &src_type, const std::type_info &dst_type); -// template function for casting from a base class to a derived class that is checked -// in debug builds and fast in release builds -template -inline _Dest downcast(_Source *src) +template +inline std::enable_if_t::value> report_bad_cast(Source *const src) { -#if defined(MAME_DEBUG) && !defined(MAME_DEBUG_FAST) - try { - if (dynamic_cast<_Dest>(src) != src) - { - if (dynamic_cast(src) != nullptr) - report_bad_device_cast(dynamic_cast(src), typeid(src), typeid(_Dest)); - else - report_bad_cast(typeid(src), typeid(_Dest)); - } - } - catch (std::bad_cast &) - { - report_bad_cast(typeid(src), typeid(_Dest)); - } -#endif - return static_cast<_Dest>(src); + if (src) report_bad_device_cast(src, typeid(Source), typeid(Dest)); + else report_bad_cast(typeid(Source), typeid(Dest)); } -template -inline _Dest downcast(_Source &src) +template +inline std::enable_if_t::value> report_bad_cast(Source *const src) +{ + device_t const *dev(dynamic_cast(src)); + if (dev) report_bad_device_cast(dev, typeid(Source), typeid(Dest)); + else report_bad_cast(typeid(Source), typeid(Dest)); +} + +// template function for casting from a base class to a derived class that is checked +// in debug builds and fast in release builds +template +inline Dest downcast(Source *src) { #if defined(MAME_DEBUG) && !defined(MAME_DEBUG_FAST) - try { - if (&dynamic_cast<_Dest>(src) != &src) - { - if (dynamic_cast(&src) != nullptr) - report_bad_device_cast(dynamic_cast(&src), typeid(src), typeid(_Dest)); - else - report_bad_cast(typeid(src), typeid(_Dest)); - } - } - catch (std::bad_cast &) - { - report_bad_cast(typeid(src), typeid(_Dest)); - } + Dest const chk(dynamic_cast(src)); + if (chk != src) report_bad_cast, Source>(src); #endif - return static_cast<_Dest>(src); + return static_cast(src); +} + +template +inline Dest downcast(Source &src) +{ +#if defined(MAME_DEBUG) && !defined(MAME_DEBUG_FAST) + std::remove_reference_t *const chk(dynamic_cast *>(&src)); + if (chk != &src) report_bad_cast, Source>(&src); +#endif + return static_cast(src); } diff --git a/src/emu/emumem.cpp b/src/emu/emumem.cpp index 0f530ecd712..8db1bffc772 100644 --- a/src/emu/emumem.cpp +++ b/src/emu/emumem.cpp @@ -67,9 +67,9 @@ Specifies a mask for the addresses in the current bucket. This mask is applied after a positive hit in the bucket specified by AM_RANGE or AM_SPACE, and is computed before accessing the RAM or calling - through to the read/write handler. If you use AM_MIRROR, below, the - mask is ANDed implicitly with the logical NOT of the mirror. The - mask specified by this macro is ANDed against any implicit masks. + through to the read/write handler. If you use AM_MIRROR, below, there + should not be any bits in common between mask and mirror. Same for + select. AM_MIRROR(mirror) Specifies mirror addresses for the given bucket. The current bucket @@ -78,6 +78,12 @@ value of 0x14000 would map the bucket at 0x00000, 0x04000, 0x10000, and 0x14000. + AM_SELECT(select) + Mirrors the addresses for the given bucket and pass the corresponding + address bits to the handler. Very useful for devices with multiple + slots/channels/etc were each slot is on a series of consecutive + addresses regrouping all its registers. + AM_ROM Specifies that this bucket contains ROM data by attaching an internal read handler. If this address space describes the first @@ -303,6 +309,12 @@ public: m_bytemask = bytemask; } + // Re-expand the bytemask after subunit fun + void expand_bytemask(offs_t previous_mask) + { + m_bytemask |= previous_mask; + } + // reconfigure the subunits on a base address change void reconfigure_subunits(offs_t bytestart); @@ -323,6 +335,7 @@ protected: // Subunit description information struct subunit_info { + offs_t m_bytemask; // bytemask for this subunit UINT32 m_mask; // mask (ff, ffff or ffffffff) INT32 m_offset; // offset to add to the address UINT32 m_multiplier; // multiplier to the pre-split address @@ -1555,30 +1568,30 @@ void memory_manager::initialize() // if there is a configuration for this space, we need an address space const address_space_config *spaceconfig = memory.space_config(spacenum); if (spaceconfig != nullptr) - m_spacelist.append(address_space::allocate(*this, *spaceconfig, memory, spacenum)); + address_space::allocate(m_spacelist,*this, *spaceconfig, memory, spacenum); } // construct and preprocess the address_map for each space - for (address_space &space : m_spacelist) - space.prepare_map(); + for (auto &space : m_spacelist) + space->prepare_map(); // create the handlers from the resulting address maps - for (address_space &space : m_spacelist) - space.populate_from_map(); + for (auto &space : m_spacelist) + space->populate_from_map(); // allocate memory needed to back each address space - for (address_space &space : m_spacelist) - space.allocate_memory(); + for (auto &space : m_spacelist) + space->allocate_memory(); // find all the allocated pointers - for (address_space &space : m_spacelist) - space.locate_memory(); + for (auto &space : m_spacelist) + space->locate_memory(); // disable logging of unmapped access when no one receives it - for (address_space &space : m_spacelist) + for (auto &space : m_spacelist) { if (!machine().options().log() && !machine().options().oslog() && !(machine().debug_flags & DEBUG_FLAG_ENABLED)) - space.set_log_unmap(false); + space->set_log_unmap(false); } // register a callback to reset banks when reloading state @@ -1604,19 +1617,19 @@ void memory_manager::dump(FILE *file) return; // loop over address spaces - for (address_space &space : m_spacelist) + for (auto &space : m_spacelist) { fprintf(file, "\n\n" "====================================================\n" "Device '%s' %s address space read handler dump\n" - "====================================================\n", space.device().tag(), space.name()); - space.dump_map(file, ROW_READ); + "====================================================\n", space->device().tag(), space->name()); + space->dump_map(file, ROW_READ); fprintf(file, "\n\n" "====================================================\n" "Device '%s' %s address space write handler dump\n" - "====================================================\n", space.device().tag(), space.name()); - space.dump_map(file, ROW_WRITE); + "====================================================\n", space->device().tag(), space->name()); + space->dump_map(file, ROW_WRITE); } } @@ -1627,14 +1640,14 @@ void memory_manager::dump(FILE *file) memory_region *memory_manager::region_alloc(const char *name, UINT32 length, UINT8 width, endianness_t endian) { -osd_printf_verbose("Region '%s' created\n", name); + osd_printf_verbose("Region '%s' created\n", name); // make sure we don't have a region of the same name; also find the end of the list - memory_region *info = m_regionlist.find(name); - if (info != nullptr) + if (m_regionlist.find(name) != m_regionlist.end()) fatalerror("region_alloc called with duplicate region name \"%s\"\n", name); // allocate the region - return &m_regionlist.append(name, *global_alloc(memory_region(machine(), name, length, width, endian))); + m_regionlist.emplace(name, std::make_unique(machine(), name, length, width, endian)); + return m_regionlist.find(name)->second.get(); } @@ -1644,7 +1657,7 @@ osd_printf_verbose("Region '%s' created\n", name); void memory_manager::region_free(const char *name) { - m_regionlist.remove(name); + m_regionlist.erase(name); } @@ -1658,9 +1671,9 @@ memory_region *memory_manager::region_containing(const void *memory, offs_t byte const UINT8 *data = reinterpret_cast(memory); // look through the region list and return the first match - for (memory_region ®ion : m_regionlist) - if (data >= region.base() && (data + bytes) <= region.end()) - return ®ion; + for (auto ®ion : m_regionlist) + if (data >= region.second->base() && (data + bytes) <= region.second->end()) + return region.second.get(); // didn't find one return nullptr; @@ -1692,9 +1705,9 @@ static void generate_memdump(running_machine &machine) void memory_manager::bank_reattach() { // for each non-anonymous bank, explicitly reset its entry - for (memory_bank &bank : m_banklist) - if (!bank.anonymous() && bank.entry() != BANK_ENTRY_UNSPECIFIED) - bank.set_entry(bank.entry()); + for (auto &bank : m_banklist) + if (!bank.second->anonymous() && bank.second->entry() != BANK_ENTRY_UNSPECIFIED) + bank.second->set_entry(bank.second->entry()); } @@ -1708,8 +1721,7 @@ void memory_manager::bank_reattach() //------------------------------------------------- address_space::address_space(memory_manager &manager, device_memory_interface &memory, address_spacenum spacenum, bool large) - : m_next(nullptr), - m_config(*memory.space_config(spacenum)), + : m_config(*memory.space_config(spacenum)), m_device(memory.device()), m_addrmask(0xffffffffUL >> (32 - m_config.m_addrbus_width)), m_bytemask(address_to_byte_end(m_addrmask)), @@ -1744,7 +1756,7 @@ address_space::~address_space() // allocate - static smart allocator of subtypes //------------------------------------------------- -address_space &address_space::allocate(memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum) +void address_space::allocate(std::vector> &space_list,memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum) { // allocate one of the appropriate type bool large = (config.addr2byte_end(0xffffffffUL >> (32 - config.m_addrbus_width)) >= (1 << 18)); @@ -1754,68 +1766,73 @@ address_space &address_space::allocate(memory_manager &manager, const address_sp case 8: if (config.endianness() == ENDIANNESS_LITTLE) { - if (large) - return *global_alloc(address_space_8le_large(manager, memory, spacenum)); + if (large) + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_8le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } else { - if (large) - return *global_alloc(address_space_8be_large(manager, memory, spacenum)); + if (large) + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_8be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } + break; case 16: if (config.endianness() == ENDIANNESS_LITTLE) { - if (large) - return *global_alloc(address_space_16le_large(manager, memory, spacenum)); + if (large) + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_16le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } else { if (large) - return *global_alloc(address_space_16be_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_16be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } + break; case 32: if (config.endianness() == ENDIANNESS_LITTLE) { if (large) - return *global_alloc(address_space_32le_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_32le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } else { if (large) - return *global_alloc(address_space_32be_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_32be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } + break; case 64: if (config.endianness() == ENDIANNESS_LITTLE) { if (large) - return *global_alloc(address_space_64le_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_64le_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } else { if (large) - return *global_alloc(address_space_64be_large(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); else - return *global_alloc(address_space_64be_small(manager, memory, spacenum)); + space_list.push_back(std::make_unique(manager, memory, spacenum)); } - } - throw emu_fatalerror("Invalid width %d specified for address_space::allocate", config.data_width()); + break; + default: + throw emu_fatalerror("Invalid width %d specified for address_space::allocate", config.data_width()); + } } @@ -1841,6 +1858,133 @@ inline void address_space::adjust_addresses(offs_t &start, offs_t &end, offs_t & mirror = address_to_byte(mirror); } +void address_space::check_optimize_all(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror) +{ + if (addrstart > addrend) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, start address is after the end address.\n", function, addrstart, addrend, addrmask, addrmirror, addrselect); + if (addrstart & ~m_addrmask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, start address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_addrmask, addrstart & m_addrmask); + if (addrend & ~m_addrmask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, end address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_addrmask, addrend & m_addrmask); + + offs_t lowbits_mask = (m_config.data_width() >> (3 - m_config.m_addrbus_shift)) - 1; + if (addrstart & lowbits_mask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, start address has low bits set, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrstart & ~lowbits_mask); + if ((~addrend) & lowbits_mask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, end address has low bits unset, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrend | lowbits_mask); + + offs_t set_bits = addrstart | addrend; + offs_t changing_bits = addrstart ^ addrend; + // Round up to the nearest power-of-two-minus-one + changing_bits |= changing_bits >> 1; + changing_bits |= changing_bits >> 2; + changing_bits |= changing_bits >> 4; + changing_bits |= changing_bits >> 8; + changing_bits |= changing_bits >> 16; + + if (addrmask & ~m_addrmask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mask is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_addrmask, addrmask & m_addrmask); + if (addrmirror & ~m_addrmask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_addrmask, addrmirror & m_addrmask); + if (addrselect & ~m_addrmask) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, select is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, m_addrmask, addrselect & m_addrmask); + if (addrmask & ~changing_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mask is trying to unmask an unchanging address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmask & changing_bits); + if (addrmirror & changing_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror touches a changing address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmirror & ~changing_bits); + if (addrselect & changing_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, select touches a changing address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrselect & ~changing_bits); + if (addrmirror & set_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror touches a set address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmirror & ~set_bits); + if (addrselect & set_bits) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, select touches a set address bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrselect & ~set_bits); + if (addrmirror & addrselect) + fatalerror("%s: In range %x-%x mask %x mirror %x select %x, mirror touches a select bit, did you mean %x ?\n", function, addrstart, addrend, addrmask, addrmirror, addrselect, addrmirror & ~addrselect); + + nstart = addrstart; + nend = addrend; + nmask = (addrmask ? addrmask : changing_bits) | addrselect; + nmirror = addrmirror | addrselect; + if(nmirror && !(nstart & changing_bits) && !((~nend) & changing_bits)) { + // If the range covers the a complete power-of-two zone, it is + // possible to remove 1 bits from the mirror, pushing the end + // address. The mask will clamp, and installing the range + // will be faster. + while(nmirror & (changing_bits+1)) { + offs_t bit = nmirror & (changing_bits+1); + nmirror &= ~bit; + nend |= bit; + changing_bits |= bit; + } + } +} + +void address_space::check_optimize_mirror(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmirror, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror) +{ + if (addrstart > addrend) + fatalerror("%s: In range %x-%x mirror %x, start address is after the end address.\n", function, addrstart, addrend, addrmirror); + if (addrstart & ~m_addrmask) + fatalerror("%s: In range %x-%x mirror %x, start address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmirror, m_addrmask, addrstart & m_addrmask); + if (addrend & ~m_addrmask) + fatalerror("%s: In range %x-%x mirror %x, end address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmirror, m_addrmask, addrend & m_addrmask); + + offs_t lowbits_mask = (m_config.data_width() >> (3 - m_config.m_addrbus_shift)) - 1; + if (addrstart & lowbits_mask) + fatalerror("%s: In range %x-%x mirror %x, start address has low bits set, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrstart & ~lowbits_mask); + if ((~addrend) & lowbits_mask) + fatalerror("%s: In range %x-%x mirror %x, end address has low bits unset, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrend | lowbits_mask); + + offs_t set_bits = addrstart | addrend; + offs_t changing_bits = addrstart ^ addrend; + // Round up to the nearest power-of-two-minus-one + changing_bits |= changing_bits >> 1; + changing_bits |= changing_bits >> 2; + changing_bits |= changing_bits >> 4; + changing_bits |= changing_bits >> 8; + changing_bits |= changing_bits >> 16; + + if (addrmirror & ~m_addrmask) + fatalerror("%s: In range %x-%x mirror %x, mirror is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, addrmirror, m_addrmask, addrmirror & m_addrmask); + if (addrmirror & changing_bits) + fatalerror("%s: In range %x-%x mirror %x, mirror touches a changing address bit, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrmirror & ~changing_bits); + if (addrmirror & set_bits) + fatalerror("%s: In range %x-%x mirror %x, mirror touches a set address bit, did you mean %x ?\n", function, addrstart, addrend, addrmirror, addrmirror & ~set_bits); + + nstart = addrstart; + nend = addrend; + nmask = changing_bits; + nmirror = addrmirror; + + if(nmirror && !(nstart & changing_bits) && !((~nend) & changing_bits)) { + // If the range covers the a complete power-of-two zone, it is + // possible to remove 1 bits from the mirror, pushing the end + // address. The mask will clamp, and installing the range + // will be faster. + while(nmirror & (changing_bits+1)) { + offs_t bit = nmirror & (changing_bits+1); + nmirror &= ~bit; + nend |= bit; + changing_bits |= bit; + } + } +} + +void address_space::check_address(const char *function, offs_t addrstart, offs_t addrend) +{ + if (addrstart > addrend) + fatalerror("%s: In range %x-%x, start address is after the end address.\n", function, addrstart, addrend); + if (addrstart & ~m_addrmask) + fatalerror("%s: In range %x-%x, start address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, m_addrmask, addrstart & m_addrmask); + if (addrend & ~m_addrmask) + fatalerror("%s: In range %x-%x, end address is outside of the global address mask %x, did you mean %x ?\n", function, addrstart, addrend, m_addrmask, addrend & m_addrmask); + + offs_t lowbits_mask = (m_config.data_width() >> (3 - m_config.m_addrbus_shift)) - 1; + if (addrstart & lowbits_mask) + fatalerror("%s: In range %x-%x, start address has low bits set, did you mean %x ?\n", function, addrstart, addrend, addrstart & ~lowbits_mask); + if ((~addrend) & lowbits_mask) + fatalerror("%s: In range %x-%x, end address has low bits unset, did you mean %x ?\n", function, addrstart, addrend, addrend | lowbits_mask); +} + //------------------------------------------------- // prepare_map - allocate the address map and @@ -1882,11 +2026,10 @@ void address_space::prepare_map() { // if we can't find it, add it to our map std::string fulltag = entry.m_devbase.subtag(entry.m_share); - if (manager().m_sharelist.find(fulltag.c_str()) == nullptr) + if (manager().m_sharelist.find(fulltag.c_str()) == manager().m_sharelist.end()) { VPRINTF(("Creating share '%s' of length 0x%X\n", fulltag.c_str(), entry.m_byteend + 1 - entry.m_bytestart)); - auto share = global_alloc(memory_share(m_map->m_databits, entry.m_byteend + 1 - entry.m_bytestart, endianness())); - manager().m_sharelist.append(fulltag.c_str(), *share); + manager().m_sharelist.emplace(fulltag.c_str(), std::make_unique(m_map->m_databits, entry.m_byteend + 1 - entry.m_bytestart, endianness())); } } @@ -1989,44 +2132,44 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w // fall through to the RAM case otherwise case AMH_RAM: - install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, nullptr); + install_ram_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, nullptr); break; case AMH_NOP: - unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, true); + unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, true); break; case AMH_UNMAP: - unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, readorwrite, false); + unmap_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, readorwrite, false); break; case AMH_DEVICE_DELEGATE: if (readorwrite == ROW_READ) switch (data.m_bits) { - case 8: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read8_delegate(entry.m_rproto8, entry.m_devbase), data.m_mask); break; - case 16: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read16_delegate(entry.m_rproto16, entry.m_devbase), data.m_mask); break; - case 32: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read32_delegate(entry.m_rproto32, entry.m_devbase), data.m_mask); break; - case 64: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, read64_delegate(entry.m_rproto64, entry.m_devbase), data.m_mask); break; + case 8: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read8_delegate(entry.m_rproto8, entry.m_devbase), data.m_mask); break; + case 16: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read16_delegate(entry.m_rproto16, entry.m_devbase), data.m_mask); break; + case 32: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read32_delegate(entry.m_rproto32, entry.m_devbase), data.m_mask); break; + case 64: install_read_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, read64_delegate(entry.m_rproto64, entry.m_devbase), data.m_mask); break; } else switch (data.m_bits) { - case 8: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write8_delegate(entry.m_wproto8, entry.m_devbase), data.m_mask); break; - case 16: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write16_delegate(entry.m_wproto16, entry.m_devbase), data.m_mask); break; - case 32: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write32_delegate(entry.m_wproto32, entry.m_devbase), data.m_mask); break; - case 64: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, write64_delegate(entry.m_wproto64, entry.m_devbase), data.m_mask); break; + case 8: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write8_delegate(entry.m_wproto8, entry.m_devbase), data.m_mask); break; + case 16: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write16_delegate(entry.m_wproto16, entry.m_devbase), data.m_mask); break; + case 32: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write32_delegate(entry.m_wproto32, entry.m_devbase), data.m_mask); break; + case 64: install_write_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, entry.m_addrselect, write64_delegate(entry.m_wproto64, entry.m_devbase), data.m_mask); break; } break; case AMH_PORT: - install_readwrite_port(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, + install_readwrite_port(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, (readorwrite == ROW_READ) ? data.m_tag : nullptr, (readorwrite == ROW_WRITE) ? data.m_tag : nullptr); break; case AMH_BANK: - install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, entry.m_addrmirror, + install_bank_generic(entry.m_addrstart, entry.m_addrend, entry.m_addrmirror, (readorwrite == ROW_READ) ? data.m_tag : nullptr, (readorwrite == ROW_WRITE) ? data.m_tag : nullptr); break; @@ -2043,7 +2186,7 @@ void address_space::populate_map_entry(const address_map_entry &entry, read_or_w void address_space::populate_map_entry_setoffset(const address_map_entry &entry) { install_setoffset_handler(entry.m_addrstart, entry.m_addrend, entry.m_addrmask, - entry.m_addrmirror, setoffset_delegate(entry.m_soproto, entry.m_devbase), entry.m_setoffsethd.m_mask); + entry.m_addrmirror, entry.m_addrselect, setoffset_delegate(entry.m_soproto, entry.m_devbase), entry.m_setoffsethd.m_mask); } //------------------------------------------------- @@ -2054,20 +2197,20 @@ void address_space::populate_map_entry_setoffset(const address_map_entry &entry) void address_space::allocate_memory() { - simple_list &blocklist = manager().m_blocklist; + auto &blocklist = manager().m_blocklist; // make a first pass over the memory map and track blocks with hardcoded pointers // we do this to make sure they are found by space_find_backing_memory first - memory_block *prev_memblock_tail = blocklist.last(); + int tail = blocklist.size(); for (address_map_entry &entry : m_map->m_entrylist) if (entry.m_memory != nullptr) - blocklist.append(*global_alloc(memory_block(*this, entry.m_bytestart, entry.m_byteend, entry.m_memory))); + blocklist.push_back(std::make_unique(*this, entry.m_bytestart, entry.m_byteend, entry.m_memory)); // loop over all blocks just allocated and assign pointers from them address_map_entry *unassigned = nullptr; - memory_block *first_new_block = (prev_memblock_tail != nullptr) ? prev_memblock_tail->next() : blocklist.first(); - for (memory_block *memblock = first_new_block; memblock != nullptr; memblock = memblock->next()) - unassigned = block_assign_intersecting(memblock->bytestart(), memblock->byteend(), memblock->data()); + + for (auto memblock = blocklist.begin() + tail; memblock != blocklist.end(); ++memblock) + unassigned = block_assign_intersecting(memblock->get()->bytestart(), memblock->get()->byteend(), memblock->get()->data()); // if we don't have an unassigned pointer yet, try to find one if (unassigned == nullptr) @@ -2108,10 +2251,11 @@ void address_space::allocate_memory() // we now have a block to allocate; do it offs_t curbytestart = curblockstart * MEMORY_BLOCK_CHUNK; offs_t curbyteend = curblockend * MEMORY_BLOCK_CHUNK + (MEMORY_BLOCK_CHUNK - 1); - memory_block &block = blocklist.append(*global_alloc(memory_block(*this, curbytestart, curbyteend))); - + auto block = std::make_unique(*this, curbytestart, curbyteend); + // assign memory that intersected the new block - unassigned = block_assign_intersecting(curbytestart, curbyteend, block.data()); + unassigned = block_assign_intersecting(curbytestart, curbyteend, block.get()->data()); + blocklist.push_back(std::move(block)); } } @@ -2124,21 +2268,21 @@ void address_space::allocate_memory() void address_space::locate_memory() { // once this is done, find the starting bases for the banks - for (memory_bank &bank : manager().banks()) - if (bank.base() == nullptr && bank.references_space(*this, ROW_READWRITE)) + for (auto &bank : manager().banks()) + if (bank.second->base() == nullptr && bank.second->references_space(*this, ROW_READWRITE)) { // set the initial bank pointer for (address_map_entry &entry : m_map->m_entrylist) - if (entry.m_bytestart == bank.bytestart() && entry.m_memory != nullptr) + if (entry.m_bytestart == bank.second->bytestart() && entry.m_memory != nullptr) { - bank.set_base(entry.m_memory); - VPRINTF(("assigned bank '%s' pointer to memory from range %08X-%08X [%p]\n", bank.tag(), entry.m_addrstart, entry.m_addrend, entry.m_memory)); + bank.second->set_base(entry.m_memory); + VPRINTF(("assigned bank '%s' pointer to memory from range %08X-%08X [%p]\n", bank.second->tag(), entry.m_addrstart, entry.m_addrend, entry.m_memory)); break; } // if the entry was set ahead of time, override the automatically found pointer - if (!bank.anonymous() && bank.entry() != BANK_ENTRY_UNSPECIFIED) - bank.set_entry(bank.entry()); + if (!bank.second->anonymous() && bank.second->entry() != BANK_ENTRY_UNSPECIFIED) + bank.second->set_entry(bank.second->entry()); } } @@ -2161,10 +2305,10 @@ address_map_entry *address_space::block_assign_intersecting(offs_t bytestart, of if (entry.m_memory == nullptr && entry.m_share != nullptr) { std::string fulltag = entry.m_devbase.subtag(entry.m_share); - memory_share *share = manager().shares().find(fulltag.c_str()); - if (share != nullptr && share->ptr() != nullptr) + auto share = manager().shares().find(fulltag.c_str()); + if (share != manager().shares().end() && share->second->ptr() != nullptr) { - entry.m_memory = share->ptr(); + entry.m_memory = share->second->ptr(); VPRINTF(("memory range %08X-%08X -> shared_ptr '%s' [%p]\n", entry.m_addrstart, entry.m_addrend, entry.m_share, entry.m_memory)); } else @@ -2184,10 +2328,10 @@ address_map_entry *address_space::block_assign_intersecting(offs_t bytestart, of if (entry.m_memory != nullptr && entry.m_share != nullptr) { std::string fulltag = entry.m_devbase.subtag(entry.m_share); - memory_share *share = manager().shares().find(fulltag.c_str()); - if (share != nullptr && share->ptr() == nullptr) + auto share = manager().shares().find(fulltag.c_str()); + if (share != manager().shares().end() && share->second->ptr() == nullptr) { - share->set_ptr(entry.m_memory); + share->second->set_ptr(entry.m_memory); VPRINTF(("setting shared_ptr '%s' = %p\n", entry.m_share, entry.m_memory)); } } @@ -2251,21 +2395,24 @@ void address_space::dump_map(FILE *file, read_or_write readorwrite) // unmap - unmap a section of address space //------------------------------------------------- -void address_space::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, bool quiet) +void address_space::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet) { - VPRINTF(("address_space::unmap(%s-%s mask=%s mirror=%s, %s, %s)\n", + VPRINTF(("address_space::unmap(%s-%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (readorwrite == ROW_READ) ? "read" : (readorwrite == ROW_WRITE) ? "write" : (readorwrite == ROW_READWRITE) ? "read/write" : "??", quiet ? "quiet" : "normal")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("unmap_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // read space if (readorwrite == ROW_READ || readorwrite == ROW_READWRITE) - read().map_range(addrstart, addrend, addrmask, addrmirror, quiet ? STATIC_NOP : STATIC_UNMAP); + read().map_range(nstart, nend, nmask, nmirror, quiet ? STATIC_NOP : STATIC_UNMAP); // write space if (readorwrite == ROW_WRITE || readorwrite == ROW_READWRITE) - write().map_range(addrstart, addrend, addrmask, addrmirror, quiet ? STATIC_NOP : STATIC_UNMAP); + write().map_range(nstart, nend, nmask, nmirror, quiet ? STATIC_NOP : STATIC_UNMAP); } @@ -2276,6 +2423,7 @@ void address_space::unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrm void address_space::install_device_delegate(offs_t addrstart, offs_t addrend, device_t &device, address_map_delegate &delegate, int bits, UINT64 unitmask) { + check_address("install_device_delegate", addrstart, addrend); address_map map(*this, addrstart, addrend, bits, unitmask, device, delegate); map.uplift_submaps(machine(), m_device, device, endianness()); populate_from_map(&map); @@ -2288,13 +2436,16 @@ void address_space::install_device_delegate(offs_t addrstart, offs_t addrend, de // handler into this address space //------------------------------------------------- -void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag) +void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag) { - VPRINTF(("address_space::install_readwrite_port(%s-%s mask=%s mirror=%s, read=\"%s\" / write=\"%s\")\n", + VPRINTF(("address_space::install_readwrite_port(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (rtag != nullptr) ? rtag : "(none)", (wtag != nullptr) ? wtag : "(none)")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_readwrite_port", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // read handler if (rtag != nullptr) { @@ -2304,7 +2455,7 @@ void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, off throw emu_fatalerror("Attempted to map non-existent port '%s' for read in space %s of device '%s'\n", rtag, m_name, m_device.tag()); // map the range and set the ioport - read().handler_map_range(addrstart, addrend, addrmask, addrmirror).set_ioport(*port); + read().handler_map_range(nstart, nend, nmask, nmirror).set_ioport(*port); } if (wtag != nullptr) @@ -2315,7 +2466,7 @@ void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, off fatalerror("Attempted to map non-existent port '%s' for write in space %s of device '%s'\n", wtag, m_name, m_device.tag()); // map the range and set the ioport - write().handler_map_range(addrstart, addrend, addrmask, addrmirror).set_ioport(*port); + write().handler_map_range(nstart, nend, nmask, nmirror).set_ioport(*port); } // update the memory dump @@ -2328,27 +2479,30 @@ void address_space::install_readwrite_port(offs_t addrstart, offs_t addrend, off // mapping to a particular bank //------------------------------------------------- -void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag) +void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag) { - VPRINTF(("address_space::install_readwrite_bank(%s-%s mask=%s mirror=%s, read=\"%s\" / write=\"%s\")\n", + VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (rtag != nullptr) ? rtag : "(none)", (wtag != nullptr) ? wtag : "(none)")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // map the read bank if (rtag != nullptr) { std::string fulltag = device().siblingtag(rtag); - memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmask, addrmirror, ROW_READ); - read().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, ROW_READ); + read().map_range(nstart, nend, nmask, nmirror, bank.index()); } // map the write bank if (wtag != nullptr) { std::string fulltag = device().siblingtag(wtag); - memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmask, addrmirror, ROW_WRITE); - write().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(fulltag.c_str(), addrstart, addrend, addrmirror, ROW_WRITE); + write().map_range(nstart, nend, nmask, nmirror, bank.index()); } // update the memory dump @@ -2356,23 +2510,26 @@ void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_ } -void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) +void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank) { - VPRINTF(("address_space::install_readwrite_bank(%s-%s mask=%s mirror=%s, read=\"%s\" / write=\"%s\")\n", + VPRINTF(("address_space::install_readwrite_bank(%s-%s mirror=%s, read=\"%s\" / write=\"%s\")\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (rbank != nullptr) ? rbank->tag() : "(none)", (wbank != nullptr) ? wbank->tag() : "(none)")); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_bank_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // map the read bank if (rbank != nullptr) { - read().map_range(addrstart, addrend, addrmask, addrmirror, rbank->index()); + read().map_range(nstart, nend, nmask, nmirror, rbank->index()); } // map the write bank if (wbank != nullptr) { - write().map_range(addrstart, addrend, addrmask, addrmirror, wbank->index()); + write().map_range(nstart, nend, nmask, nmirror, wbank->index()); } // update the memory dump @@ -2385,20 +2542,23 @@ void address_space::install_bank_generic(offs_t addrstart, offs_t addrend, offs_ // RAM region into the given address space //------------------------------------------------- -void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr) +void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr) { - VPRINTF(("address_space::install_ram_generic(%s-%s mask=%s mirror=%s, %s, %p)\n", + VPRINTF(("address_space::install_ram_generic(%s-%s mirror=%s, %s, %p)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), - core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), + core_i64_hex_format(addrmirror, m_addrchars), (readorwrite == ROW_READ) ? "read" : (readorwrite == ROW_WRITE) ? "write" : (readorwrite == ROW_READWRITE) ? "read/write" : "??", baseptr)); + offs_t nstart, nend, nmask, nmirror; + check_optimize_mirror("install_ram_generic", addrstart, addrend, addrmirror, nstart, nend, nmask, nmirror); + // map for read if (readorwrite == ROW_READ || readorwrite == ROW_READWRITE) { // find a bank and map it - memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmask, addrmirror, ROW_READ); - read().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, ROW_READ); + read().map_range(nstart, nend, nmask, nmirror, bank.index()); // if we are provided a pointer, set it if (baseptr != nullptr) @@ -2417,8 +2577,9 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t { if (machine().phase() >= MACHINE_PHASE_RESET) fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n"); - memory_block &block = manager().m_blocklist.append(*global_alloc(memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); - bank.set_base(block.data()); + auto block = std::make_unique(*this, address_to_byte(addrstart), address_to_byte_end(addrend)); + bank.set_base(block.get()->data()); + manager().m_blocklist.push_back(std::move(block)); } } @@ -2426,8 +2587,8 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t if (readorwrite == ROW_WRITE || readorwrite == ROW_READWRITE) { // find a bank and map it - memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmask, addrmirror, ROW_WRITE); - write().map_range(addrstart, addrend, addrmask, addrmirror, bank.index()); + memory_bank &bank = bank_find_or_allocate(nullptr, addrstart, addrend, addrmirror, ROW_WRITE); + write().map_range(nstart, nend, nmask, nmirror, bank.index()); // if we are provided a pointer, set it if (baseptr != nullptr) @@ -2446,8 +2607,9 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t { if (machine().phase() >= MACHINE_PHASE_RESET) fatalerror("Attempted to call install_ram_generic() after initialization time without a baseptr!\n"); - memory_block &block = manager().m_blocklist.append(*global_alloc(memory_block(*this, address_to_byte(addrstart), address_to_byte_end(addrend)))); - bank.set_base(block.data()); + auto block = std::make_unique(*this, address_to_byte(addrstart), address_to_byte_end(addrend)); + bank.set_base(block.get()->data()); + manager().m_blocklist.push_back(std::move(block)); } } } @@ -2458,32 +2620,38 @@ void address_space::install_ram_generic(offs_t addrstart, offs_t addrend, offs_t // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate handler, UINT64 unitmask) { VPRINTF(("address_space::install_read_handler(%s-%s mask=%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), handler.name(), core_i64_hex_format(unitmask, data_width() / 4))); - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate handler, UINT64 unitmask) { VPRINTF(("address_space::install_write_handler(%s-%s mask=%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), handler.name(), core_i64_hex_format(unitmask, data_width() / 4))); - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2492,22 +2660,26 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate handler, UINT64 unitmask) { - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate handler, UINT64 unitmask) { - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2516,22 +2688,26 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate handler, UINT64 unitmask) { - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate handler, UINT64 unitmask) { - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2540,22 +2716,26 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // delegate handlers for the space //------------------------------------------------- -void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate handler, UINT64 unitmask) +void address_space::install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate handler, UINT64 unitmask) { - read().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_read_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + read().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_delegate handler, UINT64 unitmask) +void address_space::install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64_delegate handler, UINT64 unitmask) { - write().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_write_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + write().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); generate_memdump(machine()); } -void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask) +void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask) { - install_read_handler(addrstart, addrend, addrmask, addrmirror, rhandler, unitmask); - install_write_handler(addrstart, addrend, addrmask, addrmirror, whandler, unitmask); + install_read_handler(addrstart, addrend, addrmask, addrmirror, addrselect, rhandler, unitmask); + install_write_handler(addrstart, addrend, addrmask, addrmirror, addrselect, whandler, unitmask); } @@ -2563,14 +2743,16 @@ void address_space::install_readwrite_handler(offs_t addrstart, offs_t addrend, // install_setoffset_handler - install set_offset delegate handlers for the space //----------------------------------------------------------------------- -void address_space::install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, setoffset_delegate handler, UINT64 unitmask) +void address_space::install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, setoffset_delegate handler, UINT64 unitmask) { VPRINTF(("address_space::install_setoffset_handler(%s-%s mask=%s mirror=%s, %s, %s)\n", core_i64_hex_format(addrstart, m_addrchars), core_i64_hex_format(addrend, m_addrchars), core_i64_hex_format(addrmask, m_addrchars), core_i64_hex_format(addrmirror, m_addrchars), handler.name(), core_i64_hex_format(unitmask, data_width() / 4))); - setoffset().handler_map_range(addrstart, addrend, addrmask, addrmirror, unitmask).set_delegate(handler); + offs_t nstart, nend, nmask, nmirror; + check_optimize_all("install_setoffset_handler", addrstart, addrend, addrmask, addrmirror, addrselect, nstart, nend, nmask, nmirror); + setoffset().handler_map_range(nstart, nend, nmask, nmirror, unitmask).set_delegate(handler); } //************************************************************************** @@ -2606,11 +2788,11 @@ void *address_space::find_backing_memory(offs_t addrstart, offs_t addrend) } // if not found there, look in the allocated blocks - for (memory_block &block : manager().m_blocklist) - if (block.contains(*this, bytestart, byteend)) + for (auto &block : manager().m_blocklist) + if (block->contains(*this, bytestart, byteend)) { - VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block.bytestart(), block.byteend(), block.data() + (bytestart - block.bytestart()))); - return block.data() + bytestart - block.bytestart(); + VPRINTF(("found in allocated memory block %08X-%08X [%p]\n", block->bytestart(), block->byteend(), block->data() + (bytestart - block->bytestart()))); + return block->data() + bytestart - block->bytestart(); } VPRINTF(("did not find\n")); @@ -2630,8 +2812,8 @@ bool address_space::needs_backing_store(const address_map_entry &entry) if (entry.m_share != nullptr) { std::string fulltag = entry.m_devbase.subtag(entry.m_share); - memory_share *share = manager().shares().find(fulltag.c_str()); - if (share != nullptr && share->ptr() == nullptr) + auto share = manager().shares().find(fulltag.c_str()); + if (share != manager().shares().end() && share->second->ptr() == nullptr) return true; } @@ -2661,17 +2843,25 @@ bool address_space::needs_backing_store(const address_map_entry &entry) // read/write handler //------------------------------------------------- -memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite) +memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite) { // adjust the addresses, handling mirrors and such offs_t bytemirror = addrmirror; offs_t bytestart = addrstart; - offs_t bytemask = addrmask; + offs_t bytemask = 0; offs_t byteend = addrend; adjust_addresses(bytestart, byteend, bytemask, bytemirror); // look up the bank by name, or else by byte range - memory_bank *membank = (tag != nullptr) ? manager().banks().find(tag) : bank_find_anonymous(bytestart, byteend); + memory_bank *membank = nullptr; + if (tag != nullptr) { + auto bank = manager().banks().find(tag); + if (bank != manager().banks().end()) + membank = bank->second.get(); + } + else { + membank = bank_find_anonymous(bytestart, byteend); + } // if we don't have a bank yet, find a free one if (membank == nullptr) @@ -2687,13 +2877,14 @@ memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrst } // if no tag, create a unique one - membank = global_alloc(memory_bank(*this, banknum, bytestart, byteend, tag)); + auto bank = std::make_unique(*this, banknum, bytestart, byteend, tag); std::string temptag; if (tag == nullptr) { - temptag = string_format("anon_%p", membank); + temptag = string_format("anon_%p", bank.get()); tag = temptag.c_str(); } - manager().m_banklist.append(tag, *membank); + manager().m_banklist.emplace(tag, std::move(bank)); + membank = manager().m_banklist.find(tag)->second.get(); } // add a reference for this space @@ -2709,9 +2900,9 @@ memory_bank &address_space::bank_find_or_allocate(const char *tag, offs_t addrst memory_bank *address_space::bank_find_anonymous(offs_t bytestart, offs_t byteend) const { // try to find an exact match - for (memory_bank &bank : manager().banks()) - if (bank.anonymous() && bank.references_space(*this, ROW_READWRITE) && bank.matches_exactly(bytestart, byteend)) - return &bank; + for (auto &bank : manager().banks()) + if (bank.second->anonymous() && bank.second->references_space(*this, ROW_READWRITE) && bank.second->matches_exactly(bytestart, byteend)) + return bank.second.get(); // not found return nullptr; @@ -2921,7 +3112,7 @@ void address_table::setup_range_masked(offs_t addrstart, offs_t addrend, offs_t m_space.m_direct->force_update(entry); } - // Ranges in range_partial must duplicated then partially changed + // Ranges in range_partial must be duplicated then partially changed if (!range_partial.empty()) { for (std::map >::const_iterator i = range_partial.begin(); i != range_partial.end(); ++i) @@ -2937,10 +3128,7 @@ void address_table::setup_range_masked(offs_t addrstart, offs_t addrend, offs_t // Get the original handler handler_entry *base_entry = &handler(i->first); - // Verify it is compatible enough with ours given what we can - // support. - if (base_entry->bytemask() != bytemask) - throw emu_fatalerror("Handlers on different subunits of the same address with different address masks are not supported."); + offs_t previous_bytemask = base_entry->bytemask(); // Grab a new handler and copy it there UINT16 entry = get_free_handler(); @@ -2957,6 +3145,8 @@ void address_table::setup_range_masked(offs_t addrstart, offs_t addrend, offs_t for (const auto & elem : i->second) populate_range(elem.start, elem.end, entry); + curentry.expand_bytemask(previous_bytemask); + // Add it in the "to be setup" list entries.push_back(entry); @@ -3519,9 +3709,9 @@ const char *address_table::handler_name(UINT16 entry) const { // banks have names if (entry >= STATIC_BANK1 && entry <= STATIC_BANKMAX) - for (memory_bank &info : m_space.manager().banks()) - if (info.index() == entry) - return info.name(); + for (auto &info : m_space.manager().banks()) + if (info.second->index() == entry) + return info.second->name(); // constant strings for static entries if (entry == STATIC_INVALID) return "invalid"; @@ -3770,22 +3960,23 @@ direct_read_data::direct_range *direct_read_data::find_range(offs_t byteaddress, entry = m_space.read().lookup_live_nowp(byteaddress); // scan our table - for (direct_range &range : m_rangelist[entry]) + for (auto &range : m_rangelist[entry]) if (byteaddress >= range.m_bytestart && byteaddress <= range.m_byteend) return ⦥ // didn't find out; allocate a new one - direct_range *range = m_freerangelist.first(); - if (range != nullptr) - m_freerangelist.detach(*range); - else - range = global_alloc(direct_range); + direct_range range; + if (m_freerangelist.size() > 0) + { + range = m_freerangelist.front(); + m_freerangelist.pop_front(); + } // fill in the range - m_space.read().derive_range(byteaddress, range->m_bytestart, range->m_byteend); - m_rangelist[entry].prepend(*range); + m_space.read().derive_range(byteaddress, range.m_bytestart, range.m_byteend); + m_rangelist[entry].push_front(range); - return range; + return &m_rangelist[entry].front(); } @@ -3800,16 +3991,13 @@ void direct_read_data::remove_intersecting_ranges(offs_t bytestart, offs_t bytee for (auto & elem : m_rangelist) { // loop over all ranges in this entry's list - direct_range *nextrange; - for (direct_range *range = elem.first(); range != nullptr; range = nextrange) + for (std::list::iterator range = elem.begin(); range!=elem.end();++range) { - nextrange = range->next(); - // if we intersect, remove and add to the free range list if (bytestart <= range->m_byteend && byteend >= range->m_bytestart) { - elem.detach(*range); - m_freerangelist.prepend(*range); + m_freerangelist.push_front(*range); + elem.erase(range); } } } @@ -3854,8 +4042,7 @@ void direct_read_data::explicit_configure(offs_t bytestart, offs_t byteend, offs //------------------------------------------------- memory_block::memory_block(address_space &space, offs_t bytestart, offs_t byteend, void *memory) - : m_next(nullptr), - m_machine(space.machine()), + : m_machine(space.machine()), m_space(space), m_bytestart(bytestart), m_byteend(byteend), @@ -3912,8 +4099,7 @@ memory_block::~memory_block() //------------------------------------------------- memory_bank::memory_bank(address_space &space, int index, offs_t bytestart, offs_t byteend, const char *tag) - : m_next(nullptr), - m_machine(space.machine()), + : m_machine(space.machine()), m_baseptr(space.manager().bank_pointer_addr(index)), m_index(index), m_anonymous(tag == nullptr), @@ -3955,8 +4141,8 @@ memory_bank::~memory_bank() bool memory_bank::references_space(const address_space &space, read_or_write readorwrite) const { - for (bank_reference &ref : m_reflist) - if (ref.matches(space, readorwrite)) + for (auto &ref : m_reflist) + if (ref->matches(space, readorwrite)) return true; return false; } @@ -3972,7 +4158,7 @@ void memory_bank::add_reference(address_space &space, read_or_write readorwrite) // if we already have a reference, skip it if (references_space(space, readorwrite)) return; - m_reflist.append(*global_alloc(bank_reference(space, readorwrite))); + m_reflist.push_back(std::make_unique(space, readorwrite)); } @@ -3984,8 +4170,8 @@ void memory_bank::add_reference(address_space &space, read_or_write readorwrite) void memory_bank::invalidate_references() { // invalidate all the direct references to any referenced address spaces - for (bank_reference &ref : m_reflist) - ref.space().direct().force_update(); + for (auto &ref : m_reflist) + ref->space().direct().force_update(); } @@ -4086,8 +4272,7 @@ void memory_bank::configure_entries(int startentry, int numentries, void *base, //------------------------------------------------- memory_region::memory_region(running_machine &machine, const char *name, UINT32 length, UINT8 width, endianness_t endian) - : m_machine(machine), - m_next(nullptr), + : m_machine(machine), m_name(name), m_buffer(length), m_endianness(endian), @@ -4205,6 +4390,7 @@ void handler_entry::configure_subunits(UINT64 handlermask, int handlerbits, int UINT32 shift = (unitnum^shift_xor_mask) * handlerbits; if (((handlermask >> shift) & unitmask) != 0) { + m_subunit_infos[m_subunits].m_bytemask = m_bytemask; m_subunit_infos[m_subunits].m_mask = unitmask; m_subunit_infos[m_subunits].m_offset = cur_offset++; m_subunit_infos[m_subunits].m_size = handlerbits; @@ -4293,11 +4479,12 @@ void handler_entry::description(char *buffer) const { if (i) *buffer++ = ' '; - buffer += sprintf (buffer, "%d:%d:%x:%d:%s", + buffer += sprintf (buffer, "%d:%d:%x:%d:%x:%s", m_subunit_infos[i].m_size, m_subunit_infos[i].m_shift, m_subunit_infos[i].m_offset, m_subunit_infos[i].m_multiplier, + m_subunit_infos[i].m_bytemask, subunit_name(i)); } } @@ -4544,7 +4731,7 @@ UINT16 handler_entry_read::read_stub_16(address_space &space, offs_t offset, UIN { offs_t aoffset = offset * si.m_multiplier + si.m_offset; UINT8 val; - val = m_subread[index].r8(space, aoffset, submask); + val = m_subread[index].r8(space, aoffset & si.m_bytemask, submask); result |= val << si.m_shift; } } @@ -4571,10 +4758,10 @@ UINT32 handler_entry_read::read_stub_32(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - val = m_subread[index].r8(space, aoffset, submask); + val = m_subread[index].r8(space, aoffset & si.m_bytemask, submask); break; case 16: - val = m_subread[index].r16(space, aoffset, submask); + val = m_subread[index].r16(space, aoffset & si.m_bytemask, submask); break; } result |= val << si.m_shift; @@ -4603,13 +4790,13 @@ UINT64 handler_entry_read::read_stub_64(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - val = m_subread[index].r8(space, aoffset, submask); + val = m_subread[index].r8(space, aoffset & si.m_bytemask, submask); break; case 16: - val = m_subread[index].r16(space, aoffset, submask); + val = m_subread[index].r16(space, aoffset & si.m_bytemask, submask); break; case 32: - val = m_subread[index].r32(space, aoffset, submask); + val = m_subread[index].r32(space, aoffset & si.m_bytemask, submask); break; } result |= UINT64(val) << si.m_shift; @@ -4837,7 +5024,7 @@ void handler_entry_write::write_stub_16(address_space &space, offs_t offset, UIN { offs_t aoffset = offset * si.m_multiplier + si.m_offset; UINT8 adata = data >> si.m_shift; - m_subwrite[index].w8(space, aoffset, adata, submask); + m_subwrite[index].w8(space, aoffset & si.m_bytemask, adata, submask); } } } @@ -4861,10 +5048,10 @@ void handler_entry_write::write_stub_32(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - m_subwrite[index].w8(space, aoffset, adata, submask); + m_subwrite[index].w8(space, aoffset & si.m_bytemask, adata, submask); break; case 16: - m_subwrite[index].w16(space, aoffset, adata, submask); + m_subwrite[index].w16(space, aoffset & si.m_bytemask, adata, submask); break; } } @@ -4890,13 +5077,13 @@ void handler_entry_write::write_stub_64(address_space &space, offs_t offset, UIN switch (si.m_size) { case 8: - m_subwrite[index].w8(space, aoffset, adata, submask); + m_subwrite[index].w8(space, aoffset & si.m_bytemask, adata, submask); break; case 16: - m_subwrite[index].w16(space, aoffset, adata, submask); + m_subwrite[index].w16(space, aoffset & si.m_bytemask, adata, submask); break; case 32: - m_subwrite[index].w32(space, aoffset, adata, submask); + m_subwrite[index].w32(space, aoffset & si.m_bytemask, adata, submask); break; } } diff --git a/src/emu/emumem.h b/src/emu/emumem.h index 25d9e7c80c8..1bb4a2e278a 100644 --- a/src/emu/emumem.h +++ b/src/emu/emumem.h @@ -147,16 +147,14 @@ public: { public: // construction - direct_range() - : m_next(nullptr), - m_bytestart(0), - m_byteend(~0) { } - - // getters - direct_range *next() const { return m_next; } + direct_range(): m_bytestart(0),m_byteend(~0) { } + + inline bool operator==(direct_range val) noexcept + { // return true if _Left and _Right identify the same thread + return (m_bytestart == val.m_bytestart) && (m_byteend == val.m_byteend); + } // internal state - direct_range * m_next; // pointer to the next range in the list offs_t m_bytestart; // starting byte offset of the range offs_t m_byteend; // ending byte offset of the range }; @@ -200,8 +198,8 @@ private: offs_t m_bytestart; // minimum valid byte address offs_t m_byteend; // maximum valid byte address UINT16 m_entry; // live entry - simple_list m_rangelist[TOTAL_MEMORY_BANKS]; // list of ranges for each entry - simple_list m_freerangelist; // list of recycled range entries + std::list m_rangelist[TOTAL_MEMORY_BANKS]; // list of ranges for each entry + std::list m_freerangelist; // list of recycled range entries direct_update_delegate m_directupdate; // fast direct-access update callback }; @@ -258,20 +256,17 @@ class address_space friend class address_table_write; friend class address_table_setoffset; friend class direct_read_data; - friend class simple_list; - friend resource_pool_object::~resource_pool_object(); protected: // construction/destruction address_space(memory_manager &manager, device_memory_interface &memory, address_spacenum spacenum, bool large); - virtual ~address_space(); public: + virtual ~address_space(); // public allocator - static address_space &allocate(memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum); + static void allocate(std::vector> &space_list, memory_manager &manager, const address_space_config &config, device_memory_interface &memory, address_spacenum spacenum); // getters - address_space *next() const { return m_next; } memory_manager &manager() const { return m_manager; } device_t &device() const { return m_device; } running_machine &machine() const { return m_machine; } @@ -354,48 +349,40 @@ public: direct_update_delegate set_direct_update_handler(direct_update_delegate function) { return m_direct->set_direct_update(function); } // umap ranges (short form) - void unmap_read(offs_t addrstart, offs_t addrend) { unmap_read(addrstart, addrend, 0, 0); } - void unmap_write(offs_t addrstart, offs_t addrend) { unmap_write(addrstart, addrend, 0, 0); } - void unmap_readwrite(offs_t addrstart, offs_t addrend) { unmap_readwrite(addrstart, addrend, 0, 0); } - void nop_read(offs_t addrstart, offs_t addrend) { nop_read(addrstart, addrend, 0, 0); } - void nop_write(offs_t addrstart, offs_t addrend) { nop_write(addrstart, addrend, 0, 0); } - void nop_readwrite(offs_t addrstart, offs_t addrend) { nop_readwrite(addrstart, addrend, 0, 0); } - - // umap ranges (with mirror/mask) - void unmap_read(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READ, false); } - void unmap_write(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_WRITE, false); } - void unmap_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READWRITE, false); } - void nop_read(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READ, true); } - void nop_write(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_WRITE, true); } - void nop_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror) { unmap_generic(addrstart, addrend, addrmask, addrmirror, ROW_READWRITE, true); } + void unmap_read(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READ, false); } + void unmap_write(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_WRITE, false); } + void unmap_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READWRITE, false); } + void nop_read(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READ, true); } + void nop_write(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_WRITE, true); } + void nop_readwrite(offs_t addrstart, offs_t addrend, offs_t addrmirror = 0) { unmap_generic(addrstart, addrend, addrmirror, ROW_READWRITE, true); } // install ports, banks, RAM (short form) - void install_read_port(offs_t addrstart, offs_t addrend, const char *rtag) { install_read_port(addrstart, addrend, 0, 0, rtag); } - void install_write_port(offs_t addrstart, offs_t addrend, const char *wtag) { install_write_port(addrstart, addrend, 0, 0, wtag); } - void install_readwrite_port(offs_t addrstart, offs_t addrend, const char *rtag, const char *wtag) { install_readwrite_port(addrstart, addrend, 0, 0, rtag, wtag); } - void install_read_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_read_bank(addrstart, addrend, 0, 0, tag); } - void install_write_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_write_bank(addrstart, addrend, 0, 0, tag); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_readwrite_bank(addrstart, addrend, 0, 0, tag); } - void install_read_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_read_bank(addrstart, addrend, 0, 0, bank); } - void install_write_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_write_bank(addrstart, addrend, 0, 0, bank); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_readwrite_bank(addrstart, addrend, 0, 0, bank); } - void install_rom(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_rom(addrstart, addrend, 0, 0, baseptr); } - void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_writeonly(addrstart, addrend, 0, 0, baseptr); } - void install_ram(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_ram(addrstart, addrend, 0, 0, baseptr); } + void install_read_port(offs_t addrstart, offs_t addrend, const char *rtag) { install_read_port(addrstart, addrend, 0, rtag); } + void install_write_port(offs_t addrstart, offs_t addrend, const char *wtag) { install_write_port(addrstart, addrend, 0, wtag); } + void install_readwrite_port(offs_t addrstart, offs_t addrend, const char *rtag, const char *wtag) { install_readwrite_port(addrstart, addrend, 0, rtag, wtag); } + void install_read_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_read_bank(addrstart, addrend, 0, tag); } + void install_write_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_write_bank(addrstart, addrend, 0, tag); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, const char *tag) { install_readwrite_bank(addrstart, addrend, 0, tag); } + void install_read_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_read_bank(addrstart, addrend, 0, bank); } + void install_write_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_write_bank(addrstart, addrend, 0, bank); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, memory_bank *bank) { install_readwrite_bank(addrstart, addrend, 0, bank); } + void install_rom(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_rom(addrstart, addrend, 0, baseptr); } + void install_writeonly(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_writeonly(addrstart, addrend, 0, baseptr); } + void install_ram(offs_t addrstart, offs_t addrend, void *baseptr = nullptr) { install_ram(addrstart, addrend, 0, baseptr); } // install ports, banks, RAM (with mirror/mask) - void install_read_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag) { install_readwrite_port(addrstart, addrend, addrmask, addrmirror, rtag, nullptr); } - void install_write_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *wtag) { install_readwrite_port(addrstart, addrend, addrmask, addrmirror, nullptr, wtag); } - void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag); - void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, tag, nullptr); } - void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, nullptr, tag); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, tag, tag); } - void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, bank, nullptr); } - void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, nullptr, bank); } - void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmask, addrmirror, bank, bank); } - void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmask, addrmirror, ROW_READ, baseptr); } - void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmask, addrmirror, ROW_WRITE, baseptr); } - void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmask, addrmirror, ROW_READWRITE, baseptr); } + void install_read_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag) { install_readwrite_port(addrstart, addrend, addrmirror, rtag, nullptr); } + void install_write_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *wtag) { install_readwrite_port(addrstart, addrend, addrmirror, nullptr, wtag); } + void install_readwrite_port(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag); + void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, nullptr); } + void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, nullptr, tag); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *tag) { install_bank_generic(addrstart, addrend, addrmirror, tag, tag); } + void install_read_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, nullptr); } + void install_write_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, nullptr, bank); } + void install_readwrite_bank(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *bank) { install_bank_generic(addrstart, addrend, addrmirror, bank, bank); } + void install_rom(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, ROW_READ, baseptr); } + void install_writeonly(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, ROW_WRITE, baseptr); } + void install_ram(offs_t addrstart, offs_t addrend, offs_t addrmirror, void *baseptr = nullptr) { install_ram_generic(addrstart, addrend, addrmirror, ROW_READWRITE, baseptr); } // install device memory maps template void install_device(offs_t addrstart, offs_t addrend, T &device, void (T::*map)(address_map &map, device_t &device), int bits = 0, UINT64 unitmask = 0) { @@ -406,36 +393,36 @@ public: void install_device_delegate(offs_t addrstart, offs_t addrend, device_t &device, address_map_delegate &map, int bits = 0, UINT64 unitmask = 0); // install setoffset handler - void install_setoffset_handler(offs_t addrstart, offs_t addrend, setoffset_delegate sohandler, UINT64 unitmask = 0) { install_setoffset_handler(addrstart, addrend, 0, 0, sohandler, unitmask); } - void install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, setoffset_delegate sohandler, UINT64 unitmask = 0); + void install_setoffset_handler(offs_t addrstart, offs_t addrend, setoffset_delegate sohandler, UINT64 unitmask = 0) { install_setoffset_handler(addrstart, addrend, 0, 0, 0, sohandler, unitmask); } + void install_setoffset_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, setoffset_delegate sohandler, UINT64 unitmask = 0); // install new-style delegate handlers (short form) - void install_read_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write8_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } - void install_read_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write16_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } - void install_read_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write32_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } - void install_read_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, rhandler, unitmask); } - void install_write_handler(offs_t addrstart, offs_t addrend, write64_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, whandler, unitmask); } - void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write8_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write16_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write32_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0) { return install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } + void install_read_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, UINT64 unitmask = 0) { install_read_handler(addrstart, addrend, 0, 0, 0, rhandler, unitmask); } + void install_write_handler(offs_t addrstart, offs_t addrend, write64_delegate whandler, UINT64 unitmask = 0) { install_write_handler(addrstart, addrend, 0, 0, 0, whandler, unitmask); } + void install_readwrite_handler(offs_t addrstart, offs_t addrend, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0) { install_readwrite_handler(addrstart, addrend, 0, 0, 0, rhandler, whandler, unitmask); } // install new-style delegate handlers (with mirror/mask) - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write8_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0); - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write16_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0); - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write32_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0); - void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate rhandler, UINT64 unitmask = 0); - void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, write64_delegate whandler, UINT64 unitmask = 0); - void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write8_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read8_delegate rhandler, write8_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write16_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read16_delegate rhandler, write16_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write32_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read32_delegate rhandler, write32_delegate whandler, UINT64 unitmask = 0); + void install_read_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, UINT64 unitmask = 0); + void install_write_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, write64_delegate whandler, UINT64 unitmask = 0); + void install_readwrite_handler(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, read64_delegate rhandler, write64_delegate whandler, UINT64 unitmask = 0); // setup void prepare_map(); @@ -451,20 +438,22 @@ private: void populate_map_entry(const address_map_entry &entry, read_or_write readorwrite); void populate_map_entry_setoffset(const address_map_entry &entry); - void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, bool quiet); - void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite, void *baseptr); - void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, const char *rtag, const char *wtag); - void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank); + void unmap_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, bool quiet); + void install_ram_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite, void *baseptr); + void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, const char *rtag, const char *wtag); + void install_bank_generic(offs_t addrstart, offs_t addrend, offs_t addrmirror, memory_bank *rbank, memory_bank *wbank); void adjust_addresses(offs_t &start, offs_t &end, offs_t &mask, offs_t &mirror); void *find_backing_memory(offs_t addrstart, offs_t addrend); bool needs_backing_store(const address_map_entry &entry); - memory_bank &bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, read_or_write readorwrite); + memory_bank &bank_find_or_allocate(const char *tag, offs_t addrstart, offs_t addrend, offs_t addrmirror, read_or_write readorwrite); memory_bank *bank_find_anonymous(offs_t bytestart, offs_t byteend) const; address_map_entry *block_assign_intersecting(offs_t bytestart, offs_t byteend, UINT8 *base); + void check_optimize_all(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, offs_t addrselect, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror); + void check_optimize_mirror(const char *function, offs_t addrstart, offs_t addrend, offs_t addrmirror, offs_t &nstart, offs_t &nend, offs_t &nmask, offs_t &nmirror); + void check_address(const char *function, offs_t addrstart, offs_t addrend); protected: // private state - address_space * m_next; // next address space in the global list const address_space_config &m_config; // configuration of this space device_t & m_device; // reference to the owning device std::unique_ptr m_map; // original memory map @@ -494,9 +483,6 @@ class memory_block { DISABLE_COPYING(memory_block); - friend class simple_list; - friend resource_pool_object::~resource_pool_object(); - public: // construction/destruction memory_block(address_space &space, offs_t bytestart, offs_t byteend, void *memory = nullptr); @@ -504,7 +490,6 @@ public: // getters running_machine &machine() const { return m_machine; } - memory_block *next() const { return m_next; } offs_t bytestart() const { return m_bytestart; } offs_t byteend() const { return m_byteend; } UINT8 *data() const { return m_data; } @@ -517,7 +502,6 @@ public: private: // internal state - memory_block * m_next; // next memory block in the list running_machine & m_machine; // need the machine to free our memory address_space & m_space; // which address space are we associated with? offs_t m_bytestart, m_byteend; // byte-normalized start/end for verifying a match @@ -531,24 +515,16 @@ private: // a memory bank is a global pointer to memory that can be shared across devices and changed dynamically class memory_bank { - friend class simple_list; - friend resource_pool_object::~resource_pool_object(); - // a bank reference is an entry in a list of address spaces that reference a given bank class bank_reference { - friend class simple_list; - friend resource_pool_object::~resource_pool_object(); - public: // construction/destruction bank_reference(address_space &space, read_or_write readorwrite) - : m_next(nullptr), - m_space(space), - m_readorwrite(readorwrite) { } + : m_space(space), + m_readorwrite(readorwrite) { } // getters - bank_reference *next() const { return m_next; } address_space &space() const { return m_space; } // does this reference match the space+read/write combination? @@ -559,7 +535,6 @@ class memory_bank private: // internal state - bank_reference * m_next; // link to the next reference address_space & m_space; // address space that references us read_or_write m_readorwrite; // used for read or write? }; @@ -576,7 +551,6 @@ public: ~memory_bank(); // getters - memory_bank *next() const { return m_next; } running_machine &machine() const { return m_machine; } int index() const { return m_index; } int entry() const { return m_curentry; } @@ -610,7 +584,6 @@ private: void expand_entries(int entrynum); // internal state - memory_bank * m_next; // next bank in sequence running_machine & m_machine; // need the machine to free our memory UINT8 ** m_baseptr; // pointer to our base pointer in the global array UINT16 m_index; // array index for this handler @@ -621,7 +594,7 @@ private: std::vector m_entry; // array of entries (dynamically allocated) std::string m_name; // friendly name for this bank std::string m_tag; // tag for this bank - simple_list m_reflist; // linked list of address spaces referencing this bank + std::vector> m_reflist; // linked list of address spaces referencing this bank }; @@ -630,13 +603,10 @@ private: // a memory share contains information about shared memory region class memory_share { - friend class simple_list; - public: // construction/destruction memory_share(UINT8 width, size_t bytes, endianness_t endianness, void *ptr = nullptr) - : m_next(nullptr), - m_ptr(ptr), + : m_ptr(ptr), m_bytes(bytes), m_endianness(endianness), m_bitwidth(width), @@ -644,7 +614,6 @@ public: { } // getters - memory_share *next() const { return m_next; } void *ptr() const { return m_ptr; } size_t bytes() const { return m_bytes; } endianness_t endianness() const { return m_endianness; } @@ -656,7 +625,6 @@ public: private: // internal state - memory_share * m_next; // next share in the list void * m_ptr; // pointer to the memory backing the region size_t m_bytes; // size of the shared region in bytes endianness_t m_endianness; // endianness of the memory @@ -674,16 +642,12 @@ class memory_region DISABLE_COPYING(memory_region); friend class memory_manager; - friend class simple_list; - friend resource_pool_object::~resource_pool_object(); - +public: // construction/destruction memory_region(running_machine &machine, const char *name, UINT32 length, UINT8 width, endianness_t endian); -public: // getters running_machine &machine() const { return m_machine; } - memory_region *next() const { return m_next; } UINT8 *base() { return (m_buffer.size() > 0) ? &m_buffer[0] : nullptr; } UINT8 *end() { return base() + m_buffer.size(); } UINT32 bytes() const { return m_buffer.size(); } @@ -703,7 +667,6 @@ public: private: // internal data running_machine & m_machine; - memory_region * m_next; std::string m_name; dynamic_buffer m_buffer; endianness_t m_endianness; @@ -719,7 +682,7 @@ private: class memory_manager { friend class address_space; - + friend memory_region::memory_region(running_machine &machine, const char *name, UINT32 length, UINT8 width, endianness_t endian); public: // construction/destruction memory_manager(running_machine &machine); @@ -727,9 +690,9 @@ public: // getters running_machine &machine() const { return m_machine; } - const tagged_list &banks() const { return m_banklist; } - const tagged_list ®ions() const { return m_regionlist; } - const tagged_list &shares() const { return m_sharelist; } + const std::unordered_map> &banks() const { return m_banklist; } + const std::unordered_map> ®ions() const { return m_regionlist; } + const std::unordered_map> &shares() const { return m_sharelist; } // dump the internal memory tables to the given file void dump(FILE *file); @@ -752,15 +715,15 @@ private: UINT8 * m_bank_ptr[TOTAL_MEMORY_BANKS]; // array of bank pointers - simple_list m_spacelist; // list of address spaces - simple_list m_blocklist; // head of the list of memory blocks + std::vector> m_spacelist; // list of address spaces + std::vector> m_blocklist; // head of the list of memory blocks - tagged_list m_banklist; // data gathered for each bank + std::unordered_map> m_banklist; // data gathered for each bank UINT16 m_banknext; // next bank to allocate - tagged_list m_sharelist; // map for share lookups + std::unordered_map> m_sharelist; // map for share lookups - tagged_list m_regionlist; // list of memory regions + std::unordered_map> m_regionlist; // list of memory regions }; diff --git a/src/emu/emupal.cpp b/src/emu/emupal.cpp index ccd0b26d324..ce6b17d721a 100644 --- a/src/emu/emupal.cpp +++ b/src/emu/emupal.cpp @@ -466,7 +466,7 @@ void palette_device::device_start() for (int color = 0; color < m_indirect_entries; color++) { // alpha = 0 ensures change is detected the first time set_indirect_color() is called - m_indirect_colors[color] = rgb_t(0, 0, 0, 0); + m_indirect_colors[color] = rgb_t::transparent; } m_indirect_pens.resize(m_entries); diff --git a/src/emu/hashfile.cpp b/src/emu/hashfile.cpp index d37d6cbe21b..0d41f278f37 100644 --- a/src/emu/hashfile.cpp +++ b/src/emu/hashfile.cpp @@ -89,16 +89,6 @@ struct hash_parse_state -/*************************************************************************** - PROTOTYPES -***************************************************************************/ - -static void *expat_malloc(size_t size); -static void *expat_realloc(void *ptr, size_t size); -static void expat_free(void *ptr); - - - /*************************************************************************** CORE IMPLEMENTATION ***************************************************************************/ @@ -358,8 +348,6 @@ static void hashfile_parse(hash_file *hashfile, struct hash_parse_state state; char buf[1024]; UINT32 len; - XML_Memory_Handling_Suite memcallbacks; - hashfile->file->seek(0, SEEK_SET); memset(&state, 0, sizeof(state)); @@ -370,10 +358,7 @@ static void hashfile_parse(hash_file *hashfile, state.param = param; /* create the XML parser */ - memcallbacks.malloc_fcn = expat_malloc; - memcallbacks.realloc_fcn = expat_realloc; - memcallbacks.free_fcn = expat_free; - state.parser = XML_ParserCreate_MM(nullptr, &memcallbacks, nullptr); + state.parser = XML_ParserCreate_MM(nullptr, nullptr, nullptr); if (!state.parser) goto done; @@ -590,30 +575,3 @@ bool hashfile_extrainfo(device_image_interface &image, std::string &result) while (!hashfound && open != -1); return hashfound; } - -/*************************************************************************** - EXPAT INTERFACES -***************************************************************************/ - -/*------------------------------------------------- - expat_malloc/expat_realloc/expat_free - - wrappers for memory allocation functions so - that they pass through out memory tracking - systems --------------------------------------------------*/ - -static void *expat_malloc(size_t size) -{ - return global_alloc_array_clear(size); -} - -static void *expat_realloc(void *ptr, size_t size) -{ - if (ptr) global_free_array((UINT8 *)ptr); - return global_alloc_array_clear(size); -} - -static void expat_free(void *ptr) -{ - global_free_array((UINT8 *)ptr); -} diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp index e0e8e76015d..0590f22c71a 100644 --- a/src/emu/ioport.cpp +++ b/src/emu/ioport.cpp @@ -616,7 +616,7 @@ const struct { INPUT_STRING_None, "None" }, }; -} // anonymous namespace +} // TODO: anonymous namespace std::uint8_t const inp_header::MAGIC[inp_header::OFFS_BASETIME - inp_header::OFFS_MAGIC] = { 'M', 'A', 'M', 'E', 'I', 'N', 'P', 0 }; @@ -658,8 +658,8 @@ void ioport_list::append(device_t &device, std::string &errorbuf) (*constructor)(device, *this, errorbuf); // collapse fields and sort the list - for (ioport_port &port : *this) - port.collapse_fields(errorbuf); + for (auto &port : *this) + port.second->collapse_fields(errorbuf); } @@ -1073,8 +1073,8 @@ void natural_keyboard::build_codes(ioport_manager &manager) if (curshift == 0 || shift[curshift - 1] != nullptr) // iterate over ports and fields - for (ioport_port &port : manager.ports()) - for (ioport_field &field : port.fields()) + for (auto &port : manager.ports()) + for (ioport_field &field : port.second->fields()) if (field.type() == IPT_KEYBOARD) { // fetch the code, ignoring 0 @@ -2485,11 +2485,11 @@ time_t ioport_manager::initialize() for (device_t &device : iter) { int players = 0; - for (ioport_port &port : m_portlist) + for (auto &port : m_portlist) { - if (&port.device() == &device) + if (&port.second->device() == &device) { - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) if (field.type_class()==INPUT_CLASS_CONTROLLER) { if (players < field.player() + 1) players = field.player() + 1; @@ -2501,8 +2501,8 @@ time_t ioport_manager::initialize() } // allocate live structures to mirror the configuration - for (ioport_port &port : m_portlist) - port.init_live_state(); + for (auto &port : m_portlist) + port.second->init_live_state(); // handle autoselection of devices init_autoselect_devices(IPT_AD_STICK_X, IPT_AD_STICK_Y, IPT_AD_STICK_Z, OPTION_ADSTICK_DEVICE, "analog joystick"); @@ -2517,8 +2517,8 @@ time_t ioport_manager::initialize() // look for 4-way diagonal joysticks and change the default map if we find any const char *joystick_map_default = machine().options().joystick_map(); if (joystick_map_default[0] == 0 || strcmp(joystick_map_default, "auto") == 0) - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.live().joystick != nullptr && field.rotated()) { machine().input().set_global_joystick_map(joystick_map_4way_diagonal); @@ -2537,8 +2537,8 @@ time_t ioport_manager::initialize() m_has_bioses = false; // scan the input port array to see what options we need to enable - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) { if (field.type() == IPT_DIPSWITCH) m_has_dips = true; @@ -2627,8 +2627,8 @@ void ioport_manager::init_autoselect_devices(int type1, int type2, int type3, co // only scan the list if we haven't already enabled this class of control if (!m_portlist.empty() && !machine().input().device_class(autoenable).enabled()) - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) // if this port type is in use, apply the autoselect criteria if ((type1 != 0 && field.type() == type1) || (type2 != 0 && field.type() == type2) || (type3 != 0 && field.type() == type3)) @@ -2738,8 +2738,8 @@ bool ioport_manager::type_pressed(ioport_type type, int player) bool ioport_manager::type_class_present(ioport_type_class inputclass) { - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.type_class() == inputclass) return true; return false; @@ -2754,8 +2754,8 @@ bool ioport_manager::type_class_present(ioport_type_class inputclass) bool ioport_manager::has_keyboard() const { // iterate over ports and fields - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) { // if we are at init, check IPT_KEYBOARD if (!m_safe_to_read && field.type() == IPT_KEYBOARD) @@ -2777,8 +2777,8 @@ bool ioport_manager::has_keyboard() const int ioport_manager::count_players() const { int max_player = 0; - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.type_class() == INPUT_CLASS_CONTROLLER && max_player <= field.player() + 1) max_player = field.player() + 1; @@ -2795,8 +2795,8 @@ bool ioport_manager::crosshair_position(int player, float &x, float &y) { // read all the lightgun values bool gotx = false, goty = false; - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (field.player() == player && field.crosshair_axis() != CROSSHAIR_AXIS_NONE && field.enabled()) { field.crosshair_position(x, y, gotx, goty); @@ -2863,23 +2863,23 @@ g_profiler.start(PROFILER_INPUT); // compute default values for all the ports // two passes to catch conditionals properly - for (ioport_port &port : m_portlist) - port.update_defvalue(true); - for (ioport_port &port : m_portlist) - port.update_defvalue(false); + for (auto &port : m_portlist) + port.second->update_defvalue(true); + for (auto &port : m_portlist) + port.second->update_defvalue(false); // loop over all input ports - for (ioport_port &port : m_portlist) + for (auto &port : m_portlist) { - port.frame_update(); + port.second->frame_update(); // handle playback/record - playback_port(port); - record_port(port); + playback_port(*port.second.get()); + record_port(*port.second.get()); // call device line write handlers - ioport_value newvalue = port.read(); - for (dynamic_field &dynfield : port.live().writelist) + ioport_value newvalue = port.second->read(); + for (dynamic_field &dynfield : port.second->live().writelist) if (dynfield.field().type() != IPT_OUTPUT) dynfield.write(newvalue); } @@ -3045,9 +3045,9 @@ bool ioport_manager::load_game_config(xml_data_node *portnode, int type, int pla ioport_value defvalue = xml_get_attribute_int(portnode, "defvalue", 0); // find the port we want; if no tag, search them all - for (ioport_port &port : m_portlist) - if (tag == nullptr || strcmp(port.tag(), tag) == 0) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + if (tag == nullptr || strcmp(port.second->tag(), tag) == 0) + for (ioport_field &field : port.second->fields()) // find the matching mask and defvalue if (field.type() == type && field.player() == player && @@ -3206,8 +3206,8 @@ void ioport_manager::save_default_inputs(xml_data_node *parentnode) void ioport_manager::save_game_inputs(xml_data_node *parentnode) { // iterate over ports - for (ioport_port &port : m_portlist) - for (ioport_field &field : port.fields()) + for (auto &port : m_portlist) + for (ioport_field &field : port.second->fields()) if (save_this_input_field_type(field.type())) { // determine if we changed @@ -3239,7 +3239,7 @@ void ioport_manager::save_game_inputs(xml_data_node *parentnode) if (portnode != nullptr) { // add the identifying information and attributes - xml_set_attribute(portnode, "tag", port.tag()); + xml_set_attribute(portnode, "tag", port.second->tag()); xml_set_attribute(portnode, "type", input_type_to_token(field.type(), field.player()).c_str()); xml_set_attribute_int(portnode, "mask", field.mask()); xml_set_attribute_int(portnode, "defvalue", field.defvalue() & field.mask()); @@ -3802,7 +3802,9 @@ void ioport_configurer::port_alloc(const char *tag) std::string fulltag = m_owner.subtag(tag); // add it to the list, and reset current field/setting - m_curport = &m_portlist.append(fulltag.c_str(), *global_alloc(ioport_port(m_owner, fulltag.c_str()))); + if (m_portlist.count(fulltag) != 0) throw tag_add_exception(fulltag.c_str()); + m_portlist.emplace(std::make_pair(fulltag, std::make_unique(m_owner, fulltag.c_str()))); + m_curport = m_portlist.find(fulltag)->second.get(); m_curfield = nullptr; m_cursetting = nullptr; } @@ -3819,7 +3821,7 @@ void ioport_configurer::port_modify(const char *tag) std::string fulltag = m_owner.subtag(tag); // find the existing port - m_curport = m_portlist.find(fulltag.c_str()); + m_curport = m_portlist.find(fulltag.c_str())->second.get(); if (m_curport == nullptr) throw emu_fatalerror("Requested to modify nonexistent port '%s'", fulltag.c_str()); diff --git a/src/emu/ioport.h b/src/emu/ioport.h index 47574421d89..455ef660e60 100644 --- a/src/emu/ioport.h +++ b/src/emu/ioport.h @@ -1265,14 +1265,13 @@ struct ioport_field_live // ======================> ioport_list // class that holds a list of I/O ports -class ioport_list : public tagged_list +class ioport_list : public std::unordered_map> { DISABLE_COPYING(ioport_list); public: ioport_list() { } - using tagged_list::append; void append(device_t &device, std::string &errorbuf); }; @@ -1515,7 +1514,7 @@ private: void frame_update_callback(); void frame_update(); - ioport_port *port(const char *tag) const { return m_portlist.find(tag); } + ioport_port *port(const char *tag) const { if (tag) { auto search = m_portlist.find(tag); if (search != m_portlist.end()) return search->second.get(); else return nullptr; } else return nullptr; } void exit(); input_seq_type token_to_seq_type(const char *string); diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 12c127f0e03..4759432ff00 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -78,6 +78,7 @@ #include "crsshair.h" #include "unzip.h" #include "debug/debugvw.h" +#include "debug/debugcpu.h" #include "image.h" #include "network.h" #include "ui/uimain.h" @@ -108,7 +109,6 @@ running_machine::running_machine(const machine_config &_config, machine_manager : firstcpu(nullptr), primary_screen(nullptr), debug_flags(0), - debugcpu_data(nullptr), m_config(_config), m_system(_config.gamedrv()), m_manager(manager), @@ -245,7 +245,6 @@ void running_machine::start() { m_debug_view = std::make_unique(*this); m_debugger = std::make_unique(*this); - m_debugger->initialize(); } m_render->resolve_tags(); @@ -293,7 +292,9 @@ int running_machine::run(bool quiet) m_logfile = std::make_unique(OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); osd_file::error filerr = m_logfile->open("error.log"); assert_always(filerr == osd_file::error::NONE, "unable to open log file"); - add_logerror_callback(logfile_callback); + + using namespace std::placeholders; + add_logerror_callback(std::bind(&running_machine::logfile_callback, this, _1)); } // then finish setting up our local machine @@ -376,9 +377,9 @@ int running_machine::run(bool quiet) osd_printf_error("Error performing a late bind of type %s to %s\n", btex.m_actual_type.name(), btex.m_target_type.name()); error = EMU_ERR_FATALERROR; } - catch (add_exception &aex) + catch (tag_add_exception &aex) { - osd_printf_error("Tag '%s' already exists in tagged_list\n", aex.tag()); + osd_printf_error("Tag '%s' already exists in tagged map\n", aex.tag()); error = EMU_ERR_FATALERROR; } catch (std::exception &ex) @@ -726,6 +727,17 @@ void running_machine::add_logerror_callback(logerror_callback callback) } +//------------------------------------------------- +// debug_break - breaks into the debugger, if +// enabled +//------------------------------------------------- + +void running_machine::debug_break() +{ + if ((debug_flags & DEBUG_FLAG_ENABLED) != 0) + debugger().debug_break(); +} + //------------------------------------------------- // base_datetime - retrieve the time of the host // system; useful for RTC implementations @@ -883,12 +895,12 @@ void running_machine::soft_reset(void *ptr, INT32 param) // logfile //------------------------------------------------- -void running_machine::logfile_callback(const running_machine &machine, const char *buffer) +void running_machine::logfile_callback(const char *buffer) { - if (machine.m_logfile != nullptr) + if (m_logfile != nullptr) { - machine.m_logfile->puts(buffer); - machine.m_logfile->flush(); + m_logfile->puts(buffer); + m_logfile->flush(); } } @@ -959,7 +971,7 @@ void running_machine::stop_all_devices() { // first let the debugger save comments if ((debug_flags & DEBUG_FLAG_ENABLED) != 0) - debug_comment_save(*this); + debugger().cpu().comment_save(); // iterate over devices and stop them for (device_t &device : device_iterator(root_device())) diff --git a/src/emu/machine.h b/src/emu/machine.h index 91cb551be33..55af0512525 100644 --- a/src/emu/machine.h +++ b/src/emu/machine.h @@ -17,6 +17,8 @@ #ifndef __MACHINE_H__ #define __MACHINE_H__ +#include + #include "strformat.h" #include "vecstream.h" @@ -99,7 +101,6 @@ class rom_load_manager; class debugger_manager; class osd_interface; enum class config_type; -struct debugcpu_private; // ======================> system_time @@ -144,7 +145,7 @@ class running_machine friend class sound_manager; - typedef void (*logerror_callback)(const running_machine &machine, const char *string); + typedef std::function logerror_callback; // must be at top of member variables resource_pool m_respool; // pool of resources for this machine @@ -211,6 +212,7 @@ public: void call_notifiers(machine_notification which); void add_logerror_callback(logerror_callback callback); void set_ui_active(bool active) { m_ui_active = active; } + void debug_break(); // TODO: Do saves and loads still require scheduling? void immediate_save(const char *filename); @@ -245,9 +247,6 @@ public: // debugger-related information UINT32 debug_flags; // the current debug flags - // internal core information - debugcpu_private * debugcpu_data; // internal data from debugcpu.c - private: // internal helpers template struct is_null { template static bool value(U &&x) { return false; } }; @@ -264,7 +263,7 @@ private: void popup_message(util::format_argument_pack const &args) const; // internal callbacks - static void logfile_callback(const running_machine &machine, const char *buffer); + void logfile_callback(const char *buffer); // internal device helpers void start_all_devices(); @@ -401,7 +400,7 @@ inline void running_machine::logerror(Format &&fmt, Params &&... args) const // log to all callbacks char const *const str(&m_string_buffer.vec()[0]); for (auto &cb : m_logerror_list) - (cb->m_func)(*this, str); + cb->m_func(str); g_profiler.stop(); } diff --git a/src/emu/render.cpp b/src/emu/render.cpp index f8cc9529f42..636cc3d2c6d 100644 --- a/src/emu/render.cpp +++ b/src/emu/render.cpp @@ -772,6 +772,11 @@ render_container::item &render_container::add_generic(UINT8 type, float x0, floa { item *newitem = m_item_allocator.alloc(); + assert(x0 == x0); + assert(x1 == x1); + assert(y0 == y0); + assert(y1 == y1); + // copy the data into the new item newitem->m_type = type; newitem->m_bounds.x0 = x0; diff --git a/src/emu/rendutil.cpp b/src/emu/rendutil.cpp index 8fa5b1b7046..c356a1d0abd 100644 --- a/src/emu/rendutil.cpp +++ b/src/emu/rendutil.cpp @@ -12,7 +12,7 @@ #include "rendutil.h" #include "png.h" -#include "libjpeg/jpeglib.h" +#include "jpeglib.h" /*************************************************************************** FUNCTION PROTOTYPES @@ -570,11 +570,11 @@ void render_load_jpeg(bitmap_argb32 &bitmap, emu_file &file, const char *dirname // allocates a buffer for the image UINT32 jpg_size = file.size(); - unsigned char *jpg_buffer = global_alloc_array(unsigned char, jpg_size); + std::unique_ptr jpg_buffer = std::make_unique(jpg_size); // read data from the file and set them in the buffer - file.read(jpg_buffer, jpg_size); - jpeg_mem_src(&cinfo, jpg_buffer, jpg_size); + file.read(jpg_buffer.get(), jpg_size); + jpeg_mem_src(&cinfo, jpg_buffer.get(), jpg_size); // read JPEG header and start decompression jpeg_read_header(&cinfo, TRUE); @@ -617,7 +617,6 @@ void render_load_jpeg(bitmap_argb32 &bitmap, emu_file &file, const char *dirname file.close(); free(buffer[0]); free(buffer); - global_free_array(jpg_buffer); } diff --git a/src/emu/romload.cpp b/src/emu/romload.cpp index 2efc80a4dc5..e158f7ea304 100644 --- a/src/emu/romload.cpp +++ b/src/emu/romload.cpp @@ -801,6 +801,7 @@ int rom_load_manager::read_rom_data(const rom_entry *parent_region, const rom_en void rom_load_manager::fill_rom_data(const rom_entry *romp) { UINT32 numbytes = ROM_GETLENGTH(romp); + int skip = ROM_GETSKIPCOUNT(romp); UINT8 *base = m_region->base() + ROM_GETOFFSET(romp); /* make sure we fill within the region space */ @@ -810,9 +811,15 @@ void rom_load_manager::fill_rom_data(const rom_entry *romp) /* make sure the length was valid */ if (numbytes == 0) fatalerror("Error in RomModule definition: FILL has an invalid length\n"); - + /* fill the data (filling value is stored in place of the hashdata) */ - memset(base, (FPTR)ROM_GETHASHDATA(romp) & 0xff, numbytes); + if(skip != 0) + { + for (int i = 0; i < numbytes; i+= skip + 1) + base[i] = (FPTR)ROM_GETHASHDATA(romp) & 0xff; + } + else + memset(base, (FPTR)ROM_GETHASHDATA(romp) & 0xff, numbytes); } diff --git a/src/emu/romload.h b/src/emu/romload.h index f0553949d96..860f50cbe95 100644 --- a/src/emu/romload.h +++ b/src/emu/romload.h @@ -236,6 +236,7 @@ struct rom_entry #define ROM_CONTINUE(offset,length) { nullptr, nullptr, offset, length, ROMENTRYTYPE_CONTINUE | ROM_INHERITFLAGS }, #define ROM_IGNORE(length) { nullptr, nullptr, 0, length, ROMENTRYTYPE_IGNORE | ROM_INHERITFLAGS }, #define ROM_FILL(offset,length,value) { nullptr, (const char *)value, offset, length, ROMENTRYTYPE_FILL }, +#define ROMX_FILL(offset,length,value,flags) { nullptr, (const char *)value, offset, length, ROMENTRYTYPE_FILL | flags }, #define ROM_COPY(srctag,srcoffs,offset,length) { srctag, (const char *)srcoffs, offset, length, ROMENTRYTYPE_COPY }, diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp index 0e298148d13..8afb7a37e9a 100644 --- a/src/emu/screen.cpp +++ b/src/emu/screen.cpp @@ -1097,8 +1097,8 @@ void screen_device::realloc_screen_bitmaps() INT32 effheight = MAX(m_height, m_visarea.max_y + 1); // reize all registered screen bitmaps - for (auto_bitmap_item &item : m_auto_bitmap_list) - item.m_bitmap.resize(effwidth, effheight); + for (auto &item : m_auto_bitmap_list) + item->m_bitmap.resize(effwidth, effheight); // re-set up textures if (m_palette != nullptr) @@ -1449,12 +1449,12 @@ void screen_device::register_vblank_callback(vblank_state_delegate vblank_callba assert(!vblank_callback.isnull()); // do nothing if we already have this callback registered - for (callback_item &item : m_callback_list) - if (item.m_callback == vblank_callback) + for (auto &item : m_callback_list) + if (item->m_callback == vblank_callback) return; // if not found, register - m_callback_list.append(*global_alloc(callback_item(vblank_callback))); + m_callback_list.push_back(std::make_unique(vblank_callback)); } @@ -1466,7 +1466,7 @@ void screen_device::register_vblank_callback(vblank_state_delegate vblank_callba void screen_device::register_screen_bitmap(bitmap_t &bitmap) { // append to the list - m_auto_bitmap_list.append(*global_alloc(auto_bitmap_item(bitmap))); + m_auto_bitmap_list.push_back(std::make_unique(bitmap)); // if allocating now, just do it bitmap.allocate(width(), height()); @@ -1491,8 +1491,8 @@ void screen_device::vblank_begin() machine().video().frame_update(); // call the screen specific callbacks - for (callback_item &item : m_callback_list) - item.m_callback(*this, true); + for (auto &item : m_callback_list) + item->m_callback(*this, true); if (!m_screen_vblank.isnull()) m_screen_vblank(*this, true); @@ -1515,8 +1515,8 @@ void screen_device::vblank_begin() void screen_device::vblank_end() { // call the screen specific callbacks - for (callback_item &item : m_callback_list) - item.m_callback(*this, false); + for (auto &item : m_callback_list) + item->m_callback(*this, false); if (!m_screen_vblank.isnull()) m_screen_vblank(*this, false); @@ -1572,6 +1572,7 @@ bool screen_device::update_quads() void screen_device::update_burnin() { +// TODO: other than being unnecessary (we should use our rand function first off), this is a simplification of how analog signals really works! #undef rand if (!m_burnin.valid()) return; diff --git a/src/emu/screen.h b/src/emu/screen.h index 5650365032a..8a969c5e9b8 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -48,19 +48,35 @@ enum texture_format // screen_update callback flags const UINT32 UPDATE_HAS_NOT_CHANGED = 0x0001; // the video has not changed -// ----- flags for video_attributes ----- +/*! + @defgroup flags for video_attributes + @{ + @def VIDEO_UPDATE_BEFORE_VBLANK + update_video called at the start of the VBLANK period + @todo hack, remove me + + @def VIDEO_UPDATE_AFTER_VBLANK + update_video called at the end of the VBLANK period + @todo hack, remove me + + @def VIDEO_SELF_RENDER + indicates VIDEO_UPDATE will add container bits itself + + @def VIDEO_ALWAYS_UPDATE + force VIDEO_UPDATE to be called even for skipped frames. + @todo in case you need this one for model updating, then you're doing it wrong (read: hack) + + @def VIDEO_UPDATE_SCANLINE + calls VIDEO_UPDATE for every visible scanline, even for skipped frames + + @} + */ -// should VIDEO_UPDATE by called at the start of VBLANK or at the end? #define VIDEO_UPDATE_BEFORE_VBLANK 0x0000 #define VIDEO_UPDATE_AFTER_VBLANK 0x0004 -// indicates VIDEO_UPDATE will add container bits its #define VIDEO_SELF_RENDER 0x0008 - -// force VIDEO_UPDATE to be called even for skipped frames #define VIDEO_ALWAYS_UPDATE 0x0080 - -// calls VIDEO_UPDATE for every visible scanline, even for skipped frames #define VIDEO_UPDATE_SCANLINE 0x0100 @@ -329,28 +345,21 @@ private: { public: callback_item(vblank_state_delegate callback) - : m_next(nullptr), - m_callback(std::move(callback)) { } - callback_item *next() const { return m_next; } + : m_callback(std::move(callback)) { } - callback_item * m_next; vblank_state_delegate m_callback; }; - simple_list m_callback_list; // list of VBLANK callbacks + std::vector> m_callback_list; // list of VBLANK callbacks // auto-sizing bitmaps class auto_bitmap_item { public: auto_bitmap_item(bitmap_t &bitmap) - : m_next(nullptr), - m_bitmap(bitmap) { } - auto_bitmap_item *next() const { return m_next; } - - auto_bitmap_item * m_next; + : m_bitmap(bitmap) { } bitmap_t & m_bitmap; }; - simple_list m_auto_bitmap_list; // list of registered bitmaps + std::vector> m_auto_bitmap_list; // list of registered bitmaps // static data static UINT32 m_id_counter; // incremented for each constructed screen_device, @@ -363,11 +372,89 @@ extern const device_type SCREEN; // iterator helper typedef device_type_iterator<&device_creator, screen_device> screen_device_iterator; +/*! + @defgroup Screen device configuration macros + @{ + @def MCFG_SCREEN_ADD + Add a new legacy screen color device + + @def MCFG_SCREEN_ADD_MONOCHROME + Add a new legacy monochrome screen device + + @def MCFG_SCREEN_MODIFY + Modify a legacy screen device + + @def MCFG_SCREEN_TYPE + Modify the screen device type + @see screen_type_enum + + @def MCFG_SCREEN_RAW_PARAMS + Configures screen parameters for the given screen. + @remark It's better than using @see MCFG_SCREEN_REFRESH_RATE and @see MCFG_SCREEN_VBLANK_TIME but still not enough. + + @param _pixclock + Pixel Clock frequency value + + @param _htotal + Total number of horizontal pixels, including hblank period. + + @param _hbend + Horizontal pixel position for HBlank end event, also first pixel where screen rectangle is visible. + + @param _hbstart + Horizontal pixel position for HBlank start event, also last pixel where screen rectangle is visible. + + @param _vtotal + Total number of vertical pixels, including vblank period. + + @param _vbend + Vertical pixel position for VBlank end event, also first pixel where screen rectangle is visible. + + @param _vbstart + Vertical pixel position for VBlank start event, also last pixel where screen rectangle is visible. + + @def MCFG_SCREEN_REFRESH_RATE + Sets the number of Frames Per Second for this screen + @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + @param _rate + FPS number -//************************************************************************** -// SCREEN DEVICE CONFIGURATION MACROS -//************************************************************************** + @def MCFG_SCREEN_VBLANK_TIME + Sets the vblank time of the given screen + @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _time + Time parameter, in attotime value + + @def MCFG_SCREEN_SIZE + Sets total screen size, including H/V-Blanks + @remarks Please use @see MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _width + Screen horizontal size + + @param _height + Screen vertical size + + @def MCFG_SCREEN_VISIBLE_AREA + Sets screen visible area + @remarks Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. + + @param _minx + Screen left border + + @param _maxx + Screen right border, must be in N-1 format + + @param _miny + Screen top border + + @param _maxx + Screen bottom border, must be in N-1 format + + @} + */ #define MCFG_SCREEN_ADD(_tag, _type) \ MCFG_DEVICE_ADD(_tag, SCREEN, 0) \ @@ -389,57 +476,18 @@ typedef device_type_iterator<&device_creator, screen_device> scre MCFG_SCREEN_TYPE(SVG) \ screen_device::static_set_svg_region(*device, _region); -/*! - @brief Configures screen parameters for the given screen. - - @param _pixclock Pixel Clock frequency value - @param _htotal Total number of horizontal pixels, including hblank period. - @param _hbend Horizontal pixel position for HBlank end event, also first pixel where screen rectangle is visible. - @param _hbstart Horizontal pixel position for HBlank start event, also last pixel where screen rectangle is visible. - @param _vtotal Total number of vertical pixels, including vblank period. - @param _vbend Vertical pixel position for VBlank end event, also first pixel where screen rectangle is visible. - @param _vbstart Vertical pixel position for VBlank start event, also last pixel where screen rectangle is visible. - */ #define MCFG_SCREEN_RAW_PARAMS(_pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart) \ screen_device::static_set_raw(*device, _pixclock, _htotal, _hbend, _hbstart, _vtotal, _vbend, _vbstart); -/*! - @brief Sets the number of Frames Per Second for this screen - - @param _rate FPS number - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_REFRESH_RATE(_rate) \ screen_device::static_set_refresh(*device, HZ_TO_ATTOSECONDS(_rate)); -/*! - @brief Sets the vblank time of the given screen - - @param _time Time parameter, in attotime value\ - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_VBLANK_TIME(_time) \ screen_device::static_set_vblank_time(*device, _time); -/*! - @brief Sets total screen size, including H/V-Blanks - - @param _width Screen horizontal size - @param _height Screen vertical size - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_SIZE(_width, _height) \ screen_device::static_set_size(*device, _width, _height); -/*! - @brief Sets screen visible area - - @param _minx Screen left border - @param _maxx Screen right border, must be in N-1 format - @param _miny Screen top border - @param _maxx Screen bottom border, must be in N-1 format - @deprecated Please use MCFG_SCREEN_RAW_PARAMS instead. Gives imprecise timings. - */ #define MCFG_SCREEN_VISIBLE_AREA(_minx, _maxx, _miny, _maxy) \ screen_device::static_set_visarea(*device, _minx, _maxx, _miny, _maxy); #define MCFG_SCREEN_DEFAULT_POSITION(_xscale, _xoffs, _yscale, _yoffs) \ diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp index 6f4955e61b1..381d32fd4c4 100644 --- a/src/emu/softlist.cpp +++ b/src/emu/softlist.cpp @@ -59,9 +59,6 @@ private: void add_rom_entry(const char *name, const char *hashdata, UINT32 offset, UINT32 length, UINT32 flags); // expat callbacks - static void *expat_malloc(size_t size); - static void *expat_realloc(void *ptr, size_t size); - static void expat_free(void *ptr); static void start_handler(void *data, const char *tagname, const char **attributes); static void data_handler(void *data, const XML_Char *s, int len); static void end_handler(void *data, const char *name); @@ -708,14 +705,8 @@ softlist_parser::softlist_parser(software_list_device &list, std::ostringstream { osd_printf_verbose("Parsing %s\n", m_list.m_file.filename()); - // set up memory callbacks - XML_Memory_Handling_Suite memcallbacks; - memcallbacks.malloc_fcn = expat_malloc; - memcallbacks.realloc_fcn = expat_realloc; - memcallbacks.free_fcn = expat_free; - // create the parser - m_parser = XML_ParserCreate_MM(nullptr, &memcallbacks, nullptr); + m_parser = XML_ParserCreate_MM(nullptr, nullptr, nullptr); if (m_parser == nullptr) throw std::bad_alloc(); @@ -743,31 +734,6 @@ softlist_parser::softlist_parser(software_list_device &list, std::ostringstream osd_printf_verbose("Parsing complete\n"); } - -//------------------------------------------------- -// expat_malloc/expat_realloc/expat_free - -// wrappers for memory allocation functions so -// that they pass through out memory tracking -// systems -//------------------------------------------------- - -void *softlist_parser::expat_malloc(size_t size) -{ - return global_alloc_array_clear(size); -} - -void *softlist_parser::expat_realloc(void *ptr, size_t size) -{ - if (ptr != nullptr) global_free_array((UINT8 *)ptr); - return global_alloc_array_clear(size); -} - -void softlist_parser::expat_free(void *ptr) -{ - global_free_array((UINT8 *)ptr); -} - - //------------------------------------------------- // parse_error - append a parsing error with // filename, line and column information diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp index 0983a5f0a22..1d26b77f992 100644 --- a/src/emu/sound.cpp +++ b/src/emu/sound.cpp @@ -75,7 +75,7 @@ sound_stream::sound_stream(device_t &device, int inputs, int outputs, int sample m_callback = stream_update_delegate(FUNC(device_sound_interface::sound_stream_update),(device_sound_interface *)sound); // create a unique tag for saving - std::string state_tag = string_format("%d", m_device.machine().sound().m_stream_list.count()); + std::string state_tag = string_format("%d", m_device.machine().sound().m_stream_list.size()); m_device.machine().save().save_item(&m_device, "stream", state_tag.c_str(), 0, NAME(m_sample_rate)); m_device.machine().save().register_postload(save_prepost_delegate(FUNC(sound_stream::postload), this)); @@ -894,7 +894,8 @@ void sound_manager::stop_recording() sound_stream *sound_manager::stream_alloc(device_t &device, int inputs, int outputs, int sample_rate, stream_update_delegate callback) { - return &m_stream_list.append(*global_alloc(sound_stream(device, inputs, outputs, sample_rate, callback))); + m_stream_list.push_back(std::make_unique(device, inputs, outputs, sample_rate, callback)); + return m_stream_list.back().get(); } @@ -1109,15 +1110,15 @@ void sound_manager::update(void *ptr, int param) } // iterate over all the streams and update them - for (sound_stream &stream : m_stream_list) - stream.update_with_accounting(second_tick); + for (auto &stream : m_stream_list) + stream->update_with_accounting(second_tick); // remember the update time m_last_update = curtime; // update sample rates if they have changed - for (sound_stream &stream : m_stream_list) - stream.apply_sample_rate_changes(); + for (auto &stream : m_stream_list) + stream->apply_sample_rate_changes(); g_profiler.stop(); } diff --git a/src/emu/sound.h b/src/emu/sound.h index 8cafe52e069..c60ac53a628 100644 --- a/src/emu/sound.h +++ b/src/emu/sound.h @@ -52,7 +52,6 @@ struct mixer_input class sound_stream { - friend class simple_list; friend class sound_manager; typedef void (*stream_update_func)(device_t *device, sound_stream *stream, void *param, stream_sample_t **inputs, stream_sample_t **outputs, int samples); @@ -94,10 +93,10 @@ class sound_stream static const UINT32 FRAC_ONE = 1 << FRAC_BITS; static const UINT32 FRAC_MASK = FRAC_ONE - 1; +public: // construction/destruction sound_stream(device_t &device, int inputs, int outputs, int sample_rate, stream_update_delegate callback); -public: // getters sound_stream *next() const { return m_next; } device_t &device() const { return m_device; } @@ -199,7 +198,7 @@ public: // getters running_machine &machine() const { return m_machine; } int attenuation() const { return m_attenuation; } - const simple_list &streams() const { return m_stream_list; } + const std::vector> &streams() const { return m_stream_list; } attotime last_update() const { return m_last_update; } attoseconds_t update_attoseconds() const { return m_update_attoseconds; } @@ -245,7 +244,7 @@ private: wav_file * m_wavfile; // streams data - simple_list m_stream_list; // list of streams + std::vector> m_stream_list; // list of streams attoseconds_t m_update_attoseconds; // attoseconds between global updates attotime m_last_update; // last update time }; diff --git a/src/emu/ui/uimain.h b/src/emu/ui/uimain.h index 9e18a667ec7..49d2dd023a5 100644 --- a/src/emu/ui/uimain.h +++ b/src/emu/ui/uimain.h @@ -41,8 +41,6 @@ public: virtual void popup_time_string(int seconds, std::string message) { } - virtual void image_display(const device_type &type, device_image_interface *image) { } - virtual void menu_reset() { } template void popup_time(int seconds, Format &&fmt, Params &&... args); diff --git a/src/emu/validity.cpp b/src/emu/validity.cpp index f31cd20a8cd..d732d3e892e 100644 --- a/src/emu/validity.cpp +++ b/src/emu/validity.cpp @@ -849,17 +849,17 @@ void validity_checker::validate_inputs() osd_printf_error("I/O port error during construction:\n%s\n", errorbuf.c_str()); // do a first pass over ports to add their names and find duplicates - for (ioport_port &port : portlist) - if (!port_map.insert(port.tag()).second) - osd_printf_error("Multiple I/O ports with the same tag '%s' defined\n", port.tag()); + for (auto &port : portlist) + if (!port_map.insert(port.second->tag()).second) + osd_printf_error("Multiple I/O ports with the same tag '%s' defined\n", port.second->tag()); // iterate over ports - for (ioport_port &port : portlist) + for (auto &port : portlist) { - m_current_ioport = port.tag(); + m_current_ioport = port.second->tag(); // iterate through the fields on this port - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { // verify analog inputs if (field.is_analog()) @@ -971,11 +971,11 @@ void validity_checker::validate_devices() std::unordered_set slot_device_map; for (const device_slot_interface &slot : slot_interface_iterator(m_current_config->root_device())) { - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { std::string temptag("_"); - temptag.append(option.name()); - device_t *dev = const_cast(*m_current_config).device_add(&m_current_config->root_device(), temptag.c_str(), option.devtype(), 0); + temptag.append(option.second->name()); + device_t *dev = const_cast(*m_current_config).device_add(&m_current_config->root_device(), temptag.c_str(), option.second->devtype(), 0); // notify this device and all its subdevices that they are now configured for (device_t &device : device_iterator(*dev)) diff --git a/src/emu/video.cpp b/src/emu/video.cpp index 0f534f759e1..32d295fe425 100644 --- a/src/emu/video.cpp +++ b/src/emu/video.cpp @@ -203,7 +203,7 @@ void video_manager::set_frameskip(int frameskip) // operations //------------------------------------------------- -void video_manager::frame_update(bool debug) +void video_manager::frame_update(bool from_debugger) { // only render sound and video if we're in the running phase int phase = machine().phase(); @@ -226,34 +226,36 @@ void video_manager::frame_update(bool debug) // if we're throttling, synchronize before rendering attotime current_time = machine().time(); - if (!debug && !skipped_it && effective_throttle()) + if (!from_debugger && !skipped_it && effective_throttle()) update_throttle(current_time); // ask the OSD to update g_profiler.start(PROFILER_BLIT); - machine().osd().update(!debug && skipped_it); + machine().osd().update(!from_debugger && skipped_it); g_profiler.stop(); emulator_info::periodic_check(); // perform tasks for this frame - if (!debug) + if (!from_debugger) machine().call_notifiers(MACHINE_NOTIFY_FRAME); // update frameskipping - if (!debug) + if (!from_debugger) update_frameskip(); // update speed computations - if (!debug && !skipped_it) + if (!from_debugger && !skipped_it) recompute_speed(current_time); // call the end-of-frame callback if (phase == MACHINE_PHASE_RUNNING) { // reset partial updates if we're paused or if the debugger is active - screen_device *screen = machine().first_screen(); - if (screen != nullptr && (machine().paused() || debug || debugger_within_instruction_hook(machine()))) + screen_device *const screen = machine().first_screen(); + bool const debugger_enabled = machine().debug_flags & DEBUG_FLAG_ENABLED; + bool const within_instruction_hook = debugger_enabled && machine().debugger().within_instruction_hook(); + if (screen && (machine().paused() || from_debugger || within_instruction_hook)) screen->reset_partial_updates(); } } diff --git a/src/emu/video.h b/src/emu/video.h index 019b2b0a472..cf6a1a05017 100644 --- a/src/emu/video.h +++ b/src/emu/video.h @@ -81,7 +81,7 @@ public: osd_file::error open_next(emu_file &file, const char *extension); // render a frame - void frame_update(bool debug = false); + void frame_update(bool from_debugger = false); // current speed helpers std::string speed_text(); diff --git a/src/frontend/mame/cheat.cpp b/src/frontend/mame/cheat.cpp index a2d4eeadc1f..3116be74b32 100644 --- a/src/frontend/mame/cheat.cpp +++ b/src/frontend/mame/cheat.cpp @@ -430,12 +430,12 @@ cheat_script::script_entry::script_entry(cheat_manager &manager, symbol_table &s // extract other attributes m_line = xml_get_attribute_int(&entrynode, "line", 0); - m_justify = JUSTIFY_LEFT; + m_justify = ui::text_layout::LEFT; const char *align = xml_get_attribute_string(&entrynode, "align", "left"); if (strcmp(align, "center") == 0) - m_justify = JUSTIFY_CENTER; + m_justify = ui::text_layout::CENTER; else if (strcmp(align, "right") == 0) - m_justify = JUSTIFY_RIGHT; + m_justify = ui::text_layout::RIGHT; else if (strcmp(align, "left") != 0) throw emu_fatalerror("%s.xml(%d): invalid alignment '%s' specified\n", filename, entrynode.line, align); @@ -509,7 +509,7 @@ void cheat_script::script_entry::execute(cheat_manager &manager, UINT64 &arginde curarg += arg->values(argindex, ¶ms[curarg]); // generate the astring - manager.get_output_astring(m_line, m_justify) = string_format(m_format, + manager.get_output_string(m_line, m_justify) = string_format(m_format, (UINT32)params[0], (UINT32)params[1], (UINT32)params[2], (UINT32)params[3], (UINT32)params[4], (UINT32)params[5], (UINT32)params[6], (UINT32)params[7], (UINT32)params[8], (UINT32)params[9], (UINT32)params[10], (UINT32)params[11], @@ -545,9 +545,9 @@ void cheat_script::script_entry::save(emu_file &cheatfile) const cheatfile.printf(" condition=\"%s\"", cheat_manager::quote_expression(m_condition).c_str()); if (m_line != 0) cheatfile.printf(" line=\"%d\"", m_line); - if (m_justify == JUSTIFY_CENTER) + if (m_justify == ui::text_layout::CENTER) cheatfile.printf(" align=\"center\""); - else if (m_justify == JUSTIFY_RIGHT) + else if (m_justify == ui::text_layout::RIGHT) cheatfile.printf(" align=\"right\""); if (m_arglist.size() == 0) cheatfile.printf(" />\n"); @@ -1078,10 +1078,12 @@ cheat_manager::cheat_manager(running_machine &machine) // we rely on the debugger expression callbacks; if the debugger isn't // enabled, we must jumpstart them manually if ((machine.debug_flags & DEBUG_FLAG_ENABLED) == 0) - debug_cpu_init(machine); + { + m_cpu = std::make_unique(machine); - // configure for memory access (shared with debugger) - debug_cpu_configure_memory(machine, m_symtable); + // configure for memory access (shared with debugger) + m_cpu->configure_memory(m_symtable); + } // load the cheats reload(); @@ -1234,19 +1236,19 @@ void cheat_manager::render_text(mame_ui_manager &mui, render_container &containe // output the text mui.draw_text_full(&container, m_output[linenum].c_str(), 0.0f, (float)linenum * mui.get_line_height(), 1.0f, - m_justify[linenum], WRAP_NEVER, DRAW_OPAQUE, + m_justify[linenum], ui::text_layout::NEVER, mame_ui_manager::OPAQUE_, rgb_t::white, rgb_t::black, nullptr, nullptr); } } //------------------------------------------------- -// get_output_astring - return a reference to +// get_output_string - return a reference to // the given row's string, and set the // justification //------------------------------------------------- -std::string &cheat_manager::get_output_astring(int row, int justify) +std::string &cheat_manager::get_output_string(int row, ui::text_layout::text_justify justify) { // if the row is not specified, grab the next one if (row == 0) diff --git a/src/frontend/mame/cheat.h b/src/frontend/mame/cheat.h index cc6dcf14e59..f69e3dfd94c 100644 --- a/src/frontend/mame/cheat.h +++ b/src/frontend/mame/cheat.h @@ -14,6 +14,8 @@ #define __CHEAT_H__ #include "debug/express.h" +#include "debug/debugcpu.h" +#include "ui/text.h" //************************************************************************** @@ -48,8 +50,10 @@ class number_and_format public: // construction/destruction number_and_format(UINT64 value = 0, int format = 0) - : m_value(value), - m_format(format) { } + : m_value(value) + , m_format(format) + { + } // pass-through to look like a regular number operator UINT64 &() { return m_value; } @@ -171,12 +175,12 @@ private: void validate_format(const char *filename, int line); // internal state - parsed_expression m_condition; // condition under which this is executed - parsed_expression m_expression; // expression to execute - std::string m_format; // string format to print - std::vector> m_arglist; // list of arguments - INT8 m_line; // which line to print on - UINT8 m_justify; // justification when printing + parsed_expression m_condition; // condition under which this is executed + parsed_expression m_expression; // expression to execute + std::string m_format; // string format to print + std::vector> m_arglist; // list of arguments + INT8 m_line; // which line to print on + ui::text_layout::text_justify m_justify; // justification when printing // constants static const int MAX_ARGUMENTS = 32; @@ -285,7 +289,7 @@ public: void render_text(mame_ui_manager &mui, render_container &container); // output helpers - std::string &get_output_astring(int row, int justify); + std::string &get_output_string(int row, ui::text_layout::text_justify justify); // global helpers static std::string quote_expression(const parsed_expression &expression); @@ -302,11 +306,12 @@ private: std::vector> m_cheatlist; // cheat list UINT64 m_framecount; // frame count std::vector m_output; // array of output strings - std::vector m_justify; // justification for each string + std::vector m_justify; // justification for each string UINT8 m_numlines; // number of lines available for output INT8 m_lastline; // last line used for output bool m_disabled; // true if the cheat engine is disabled symbol_table m_symtable; // global symbol table + std::unique_ptr m_cpu; // debugger interface for cpus/memory // constants static constexpr int CHEAT_VERSION = 1; diff --git a/src/frontend/mame/clifront.cpp b/src/frontend/mame/clifront.cpp index a03479cde61..39033e84d20 100644 --- a/src/frontend/mame/clifront.cpp +++ b/src/frontend/mame/clifront.cpp @@ -313,9 +313,9 @@ int cli_frontend::execute(int argc, char **argv) osd_printf_error("Caught unhandled emulator exception\n"); m_result = EMU_ERR_FATALERROR; } - catch (add_exception &aex) + catch (tag_add_exception &aex) { - osd_printf_error("Tag '%s' already exists in tagged_list\n", aex.tag()); + osd_printf_error("Tag '%s' already exists in tagged map\n", aex.tag()); m_result = EMU_ERR_FATALERROR; } catch (std::exception &ex) @@ -721,16 +721,16 @@ void cli_frontend::listslots(const char *gamename) bool first_option = true; // get the options and print them - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { - if (option.selectable()) + if (option.second->selectable()) { - device_t *dev = (*option.devtype())(drivlist.config(), "dummy", &drivlist.config().root_device(), 0); + device_t *dev = (*option.second->devtype())(drivlist.config(), "dummy", &drivlist.config().root_device(), 0); dev->config_complete(); if (first_option) { - printf("%-15s %s\n", option.name(),dev->name()); + printf("%-15s %s\n", option.second->name(),dev->name()); } else { - printf("%-23s %-15s %s\n", "",option.name(),dev->name()); + printf("%-23s %-15s %s\n", "", option.second->name(),dev->name()); } global_free(dev); @@ -929,11 +929,11 @@ void cli_frontend::verifyroms(const char *gamename) for (const device_slot_interface &slot : slot_interface_iterator(config.root_device())) { - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { std::string temptag("_"); - temptag.append(option.name()); - device_t *dev = const_cast(config).device_add(&config.root_device(), temptag.c_str(), option.devtype(), 0); + temptag.append(option.second->name()); + device_t *dev = const_cast(config).device_add(&config.root_device(), temptag.c_str(), option.second->devtype(), 0); // notify this device and all its subdevices that they are now configured for (device_t &device : device_iterator(*dev)) diff --git a/src/frontend/mame/info.cpp b/src/frontend/mame/info.cpp index e5b1677370e..db9f003f09d 100644 --- a/src/frontend/mame/info.cpp +++ b/src/frontend/mame/info.cpp @@ -261,9 +261,9 @@ void info_xml_creator::output_one() { int nplayers = 0; bool new_kbd = false; - for (ioport_port &port : portlist) - if (&port.device() == &device) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + if (&port.second->device() == &device) + for (ioport_field &field : port.second->fields()) if (field.type() >= IPT_START && field.type() < IPT_ANALOG_LAST) { if (field.type() == IPT_KEYBOARD) @@ -366,8 +366,8 @@ void info_xml_creator::output_one_device(device_t &device, const char *devtag) for (device_t &dev : device_iterator(device)) portlist.append(dev, errors); // check if the device adds player inputs (other than dsw and configs) to the system - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) if (field.type() >= IPT_START1 && field.type() < IPT_UI_FIRST) { has_input = TRUE; @@ -438,11 +438,11 @@ void info_xml_creator::output_devices() // then, run through slot devices for (const device_slot_interface &slot : slot_interface_iterator(m_drivlist.config().root_device())) { - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { std::string temptag("_"); - temptag.append(option.name()); - device_t *dev = const_cast(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), temptag.c_str(), option.devtype(), 0); + temptag.append(option.second->name()); + device_t *dev = const_cast(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), temptag.c_str(), option.second->devtype(), 0); // notify this device and all its subdevices that they are now configured for (device_t &device : device_iterator(*dev)) @@ -891,11 +891,11 @@ void info_xml_creator::output_input(const ioport_list &portlist) bool tilt = false; // iterate over the ports - for (ioport_port &port : portlist) + for (auto &port : portlist) { int ctrl_type = CTRL_DIGITAL_BUTTONS; bool ctrl_analog = FALSE; - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { // track the highest player number if (nplayer < field.player() + 1) @@ -1317,13 +1317,13 @@ void info_xml_creator::output_input(const ioport_list &portlist) void info_xml_creator::output_switches(const ioport_list &portlist, const char *root_tag, int type, const char *outertag, const char *innertag) { // iterate looking for DIP switches - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) if (field.type() == type) { std::ostringstream output; - std::string newtag(port.tag()), oldtag(":"); + std::string newtag(port.second->tag()), oldtag(":"); newtag = newtag.substr(newtag.find(oldtag.append(root_tag)) + oldtag.length()); // output the switch name information @@ -1351,10 +1351,10 @@ void info_xml_creator::output_switches(const ioport_list &portlist, const char * void info_xml_creator::output_ports(const ioport_list &portlist) { // cycle through ports - for (ioport_port &port : portlist) + for (auto &port : portlist) { - fprintf(m_output,"\t\t\n", xml_normalize_string(port.tag())); - for (ioport_field &field : port.fields()) + fprintf(m_output,"\t\t\n", xml_normalize_string(port.second->tag())); + for (ioport_field &field : port.second->fields()) { if(field.is_analog()) fprintf(m_output,"\t\t\t\n", field.mask()); @@ -1373,8 +1373,8 @@ void info_xml_creator::output_ports(const ioport_list &portlist) void info_xml_creator::output_adjusters(const ioport_list &portlist) { // iterate looking for Adjusters - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) if (field.type() == IPT_ADJUSTER) fprintf(m_output, "\t\t\n", xml_normalize_string(field.name()), field.defvalue()); } @@ -1528,18 +1528,18 @@ void info_xml_creator::output_slots(device_t &device, const char *root_tag) fprintf(m_output, " interface=\"%s\"", xml_normalize_string(slot.slot_interface())); */ - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { - if (option.selectable()) + if (option.second->selectable()) { - device_t *dev = const_cast(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", option.devtype(), 0); + device_t *dev = const_cast(m_drivlist.config()).device_add(&m_drivlist.config().root_device(), "dummy", option.second->devtype(), 0); if (!dev->configured()) dev->config_complete(); fprintf(m_output, "\t\t\tname())); fprintf(m_output, " devname=\"%s\"", xml_normalize_string(dev->shortname())); - if (slot.default_option() != nullptr && strcmp(slot.default_option(),option.name())==0) + if (slot.default_option() != nullptr && strcmp(slot.default_option(), option.second->name())==0) fprintf(m_output, " default=\"yes\""); fprintf(m_output, "/>\n"); const_cast(m_drivlist.config()).device_remove(&m_drivlist.config().root_device(), "dummy"); diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp index 1ab9ba8cc1a..dade6bc99f3 100644 --- a/src/frontend/mame/luaengine.cpp +++ b/src/frontend/mame/luaengine.cpp @@ -568,8 +568,8 @@ luabridge::LuaRef lua_engine::l_memory_get_banks(const memory_manager *m) lua_State *L = luaThis->m_lua_state; luabridge::LuaRef table = luabridge::LuaRef::newTable(L); - for (memory_bank &bank : mm->banks()) { - table[bank.tag()] = &bank; + for (auto &bank : mm->banks()) { + table[bank.second->tag()] = bank.second.get(); } return table; @@ -586,8 +586,8 @@ luabridge::LuaRef lua_engine::l_memory_get_regions(const memory_manager *m) lua_State *L = luaThis->m_lua_state; luabridge::LuaRef table = luabridge::LuaRef::newTable(L); - for (memory_region ®ion: mm->regions()) { - table[region.name()] = ®ion; + for (auto ®ion: mm->regions()) { + table[region.second->name()] = ®ion; } return table; @@ -644,8 +644,8 @@ luabridge::LuaRef lua_engine::l_ioport_get_ports(const ioport_manager *m) lua_State *L = luaThis->m_lua_state; luabridge::LuaRef port_table = luabridge::LuaRef::newTable(L); - for (ioport_port &port : im->ports()) { - port_table[port.tag()] = &port; + for (auto &port : im->ports()) { + port_table[port.second->tag()] = &port; } return port_table; @@ -1490,7 +1490,7 @@ int lua_engine::lua_screen::l_draw_text(lua_State *L) // retrieve all parameters int sc_width = sc->visible_area().width(); int sc_height = sc->visible_area().height(); - int justify = JUSTIFY_LEFT; + auto justify = ui::text_layout::LEFT; float y, x = 0; if(lua_isnumber(L, 2)) { @@ -1501,9 +1501,9 @@ int lua_engine::lua_screen::l_draw_text(lua_State *L) { std::string just_str = lua_tostring(L, 2); if(just_str == "right") - justify = JUSTIFY_RIGHT; + justify = ui::text_layout::RIGHT; else if(just_str == "center") - justify = JUSTIFY_CENTER; + justify = ui::text_layout::CENTER; y = lua_tonumber(L, 3); } const char *msg = luaL_checkstring(L,4); @@ -1516,7 +1516,7 @@ int lua_engine::lua_screen::l_draw_text(lua_State *L) // draw the text render_container &rc = sc->container(); mame_machine_manager::instance()->ui().draw_text_full(&rc, msg, x, y, (1.0f - x), - justify, WRAP_WORD, DRAW_NORMAL, textcolor, + justify, ui::text_layout::WORD, mame_ui_manager::NORMAL, textcolor, bgcolor, nullptr, nullptr); return 0; } @@ -1977,9 +1977,9 @@ void lua_engine::update_machine() if (m_machine!=nullptr) { // Create the ioport array - for (ioport_port &port : machine().ioport().ports()) + for (auto &port : machine().ioport().ports()) { - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { if (field.type_class() != INPUT_CLASS_INTERNAL) { diff --git a/src/frontend/mame/ui/auditmenu.cpp b/src/frontend/mame/ui/auditmenu.cpp index 8c148c09c00..5da65f597c9 100644 --- a/src/frontend/mame/ui/auditmenu.cpp +++ b/src/frontend/mame/ui/auditmenu.cpp @@ -27,8 +27,8 @@ inline int cs_stricmp(const char *s1, const char *s2) { for (;;) { - int c1 = tolower((UINT8)*s1++); - int c2 = tolower((UINT8)*s2++); + int c1 = tolower(*s1++); + int c2 = tolower(*s2++); if (c1 == 0 || c1 != c2) return c1 - c2; } @@ -36,8 +36,8 @@ inline int cs_stricmp(const char *s1, const char *s2) bool sorted_game_list(const game_driver *x, const game_driver *y) { - bool clonex = strcmp(x->parent, "0"); - bool cloney = strcmp(y->parent, "0"); + bool clonex = (x->parent[0] != '0'); + bool cloney = (y->parent[0] != '0'); if (!clonex && !cloney) return (cs_stricmp(x->description, y->description) < 0); @@ -114,7 +114,7 @@ void menu_audit::handle() if (m_first) { - ui().draw_text_box(container, _("Audit in progress..."), JUSTIFY_CENTER, 0.5f, 0.5f, UI_GREEN_COLOR); + ui().draw_text_box(container, _("Audit in progress..."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_GREEN_COLOR); m_first = false; return; } diff --git a/src/frontend/mame/ui/cheatopt.cpp b/src/frontend/mame/ui/cheatopt.cpp index b194510e1c9..f72eed5d20f 100644 --- a/src/frontend/mame/ui/cheatopt.cpp +++ b/src/frontend/mame/ui/cheatopt.cpp @@ -145,7 +145,10 @@ void menu_cheat::populate() { UINT32 flags; curcheat->menu_text(text, subtext, flags); - item_append(text.c_str(), subtext.c_str(), flags, curcheat.get()); + if (text == MENU_SEPARATOR_ITEM) + item_append(menu_item_type::SEPARATOR); + else + item_append(text.c_str(), subtext.c_str(), flags, curcheat.get()); } /* add a separator */ @@ -273,10 +276,10 @@ void menu_autofire::populate() /* iterate over the input ports and add autofire toggle items */ int menu_items = 0; - for (ioport_port &port : machine().ioport().ports()) + for (auto &port : machine().ioport().ports()) { bool is_first_button = true; - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { if (field.type() >= IPT_BUTTON1 && field.type() <= IPT_BUTTON16) { diff --git a/src/frontend/mame/ui/custmenu.cpp b/src/frontend/mame/ui/custmenu.cpp index 62a12d3ac99..67c056be682 100644 --- a/src/frontend/mame/ui/custmenu.cpp +++ b/src/frontend/mame/ui/custmenu.cpp @@ -210,8 +210,8 @@ void menu_custom_filter::custom_render(void *selectedref, float top, float botto float width; // get the size of the text - ui().draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -230,8 +230,8 @@ void menu_custom_filter::custom_render(void *selectedref, float top, float botto y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } //------------------------------------------------- @@ -525,8 +525,8 @@ void menu_swcustom_filter::custom_render(void *selectedref, float top, float bot float width; // get the size of the text - ui().draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Select custom filters:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -545,8 +545,8 @@ void menu_swcustom_filter::custom_render(void *selectedref, float top, float bot y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Select custom filters:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } //------------------------------------------------- diff --git a/src/frontend/mame/ui/custui.cpp b/src/frontend/mame/ui/custui.cpp index 5b10342f310..95a5ead8a8b 100644 --- a/src/frontend/mame/ui/custui.cpp +++ b/src/frontend/mame/ui/custui.cpp @@ -35,14 +35,14 @@ menu_custom_ui::menu_custom_ui(mame_ui_manager &mui, render_container *container { // load languages file_enumerator path(mui.machine().options().language_path()); - const char *lang = mui.machine().options().language(); + auto lang = mui.machine().options().language(); const osd_directory_entry *dirent; int cnt = 0; while ((dirent = path.next()) != nullptr) if (dirent->type == ENTTYPE_DIR && strcmp(dirent->name, ".") != 0 && strcmp(dirent->name, "..") != 0) { auto name = std::string(dirent->name); - int i = strreplace(name, "_", " ("); + auto i = strreplace(name, "_", " ("); if (i > 0) name = name.append(")"); m_lang.push_back(name); if (strcmp(name.c_str(), lang) == 0) @@ -165,8 +165,8 @@ void menu_custom_ui::custom_render(void *selectedref, float top, float bottom, f { float width; - ui().draw_text_full(container, _("Custom UI Settings"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Custom UI Settings"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -185,8 +185,8 @@ void menu_custom_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Custom UI Settings"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Custom UI Settings"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } //------------------------------------------------- @@ -381,8 +381,8 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo // top text std::string topbuf(_("UI Fonts Settings")); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -401,15 +401,15 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); if ((FPTR)selectedref == INFOS_SIZE) { topbuf = _("Sample text - Lorem ipsum dolor sit amet, consectetur adipiscing elit."); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr, m_info_size); + ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr, m_info_size); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(origx2 - origx1, width); @@ -428,8 +428,8 @@ void menu_font_ui::custom_render(void *selectedref, float top, float bottom, flo y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_LEFT, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, m_info_size); + ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, m_info_size); } } @@ -539,8 +539,8 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f // top text std::string topbuf(_("UI Colors Settings")); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -559,16 +559,16 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // bottom text // get the text for 'UI Select' std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD)); topbuf = string_format(_("Double click or press %1$s to change the color value"), ui_select_text); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -587,14 +587,14 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // compute maxwidth topbuf = _("Menu Preview"); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); maxwidth = width + 2.0f * UI_BOX_LR_BORDER; std::string sampletxt[5]; @@ -607,8 +607,8 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f for (auto & elem: sampletxt) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } @@ -629,8 +629,8 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y2 -= UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // compute our bounds for menu preview x1 -= UI_BOX_LR_BORDER; @@ -647,30 +647,30 @@ void menu_colors_ui::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw normal text - ui().draw_text_full(container, sampletxt[0].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, m_color_table[MUI_TEXT_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); + ui().draw_text_full(container, sampletxt[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, m_color_table[MUI_TEXT_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw subitem text - ui().draw_text_full(container, sampletxt[1].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, m_color_table[MUI_SUBITEM_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); + ui().draw_text_full(container, sampletxt[1].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, m_color_table[MUI_SUBITEM_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw selected text highlight(container, x1, y1, x2, y1 + line_height, m_color_table[MUI_SELECTED_BG_COLOR].color); - ui().draw_text_full(container, sampletxt[2].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, m_color_table[MUI_SELECTED_COLOR].color, m_color_table[MUI_SELECTED_BG_COLOR].color, nullptr, nullptr); + ui().draw_text_full(container, sampletxt[2].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, m_color_table[MUI_SELECTED_COLOR].color, m_color_table[MUI_SELECTED_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw mouse over text highlight(container, x1, y1, x2, y1 + line_height, m_color_table[MUI_MOUSEOVER_BG_COLOR].color); - ui().draw_text_full(container, sampletxt[3].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, m_color_table[MUI_MOUSEOVER_COLOR].color, m_color_table[MUI_MOUSEOVER_BG_COLOR].color, nullptr, nullptr); + ui().draw_text_full(container, sampletxt[3].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, m_color_table[MUI_MOUSEOVER_COLOR].color, m_color_table[MUI_MOUSEOVER_BG_COLOR].color, nullptr, nullptr); y1 += line_height; // draw clone text - ui().draw_text_full(container, sampletxt[4].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, m_color_table[MUI_CLONE_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); + ui().draw_text_full(container, sampletxt[4].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, m_color_table[MUI_CLONE_COLOR].color, m_color_table[MUI_TEXT_BG_COLOR].color, nullptr, nullptr); } @@ -880,8 +880,8 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa // top text std::string topbuf = std::string(m_title).append(_(" - ARGB Settings")); - ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, topbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -900,13 +900,13 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, topbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); std::string sampletxt(_("Color preview =")); maxwidth = origx2 - origx1; - ui().draw_text_full(container, sampletxt.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, sampletxt.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -925,8 +925,8 @@ void menu_rgb_ui::custom_render(void *selectedref, float top, float bottom, floa y1 += UI_BOX_TB_BORDER; // draw the normal text - ui().draw_text_full(container, sampletxt.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); + ui().draw_text_full(container, sampletxt.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); float t_x2 = x1 - UI_BOX_LR_BORDER + maxwidth; x1 = x2 + 2.0f * UI_BOX_LR_BORDER; @@ -1002,7 +1002,7 @@ void menu_rgb_ui::inkey_special(const event *menu_event) } } -menu_palette_sel::palcolor menu_palette_sel::m_palette[] = { +std::vector> menu_palette_sel::m_palette = { { __("White"), "FFFFFFFF" }, { __("Silver"), "FFC0C0C0" }, { __("Gray"), "FF808080" }, @@ -1057,8 +1057,8 @@ void menu_palette_sel::handle() void menu_palette_sel::populate() { - for (int x = 0; x < ARRAY_LENGTH(m_palette); ++x) - item_append(_(m_palette[x].name), m_palette[x].argb, FLAG_UI_PALETTE, (void *)(FPTR)(x + 1)); + for (int x = 0; x < m_palette.size(); ++x) + item_append(_(m_palette[x].first), m_palette[x].second, FLAG_UI_PALETTE, (void *)(FPTR)(x + 1)); item_append(menu_item_type::SEPARATOR); } diff --git a/src/frontend/mame/ui/custui.h b/src/frontend/mame/ui/custui.h index 217bc4e6ac4..7cf10d44a45 100644 --- a/src/frontend/mame/ui/custui.h +++ b/src/frontend/mame/ui/custui.h @@ -169,13 +169,8 @@ public: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; private: - struct palcolor - { - const char *name; - const char *argb; - }; - static palcolor m_palette[]; + static std::vector> m_palette; rgb_t &m_original; }; diff --git a/src/frontend/mame/ui/datfile.cpp b/src/frontend/mame/ui/datfile.cpp index 51b0289e75f..ea391a9eadf 100644 --- a/src/frontend/mame/ui/datfile.cpp +++ b/src/frontend/mame/ui/datfile.cpp @@ -55,55 +55,25 @@ std::string datfile_manager::m_story_rev; std::string datfile_manager::m_ginit_rev; bool datfile_manager::first_run = true; +#define opendatsfile(f) if (parseopen(#f".dat")) { init_##f(); parseclose(); } + //------------------------------------------------- // ctor //------------------------------------------------- -datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) : m_machine(machine), m_options(moptions) +datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) + : m_machine(machine) + , m_options(moptions) { if (m_options.enabled_dats() && first_run) { first_run = false; - if (parseopen("mameinfo.dat")) - { - init_mameinfo(); - parseclose(); - } - - if (parseopen("command.dat")) - { - init_command(); - parseclose(); - } - - if (parseopen("story.dat")) - { - init_storyinfo(); - parseclose(); - } - - if (parseopen("messinfo.dat")) - { - init_messinfo(); - parseclose(); - } - - if (parseopen("sysinfo.dat")) - { - init_sysinfo(); - parseclose(); - } - - if (parseopen("history.dat")) - { - init_history(); - parseclose(); - } - - if (parseopen("gameinit.dat")) - { - init_gameinit(); - parseclose(); - } + opendatsfile(mameinfo); + opendatsfile(command); + opendatsfile(story); + opendatsfile(messinfo); + opendatsfile(sysinfo); + opendatsfile(history); + opendatsfile(gameinit); } } @@ -113,7 +83,7 @@ datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) void datfile_manager::init_sysinfo() { int swcount = 0; - int count = index_datafile(m_sysidx, swcount); + auto count = index_datafile(m_sysidx, swcount, TAG_SYSINFO_R, m_sysinfo_rev, '.'); osd_printf_verbose("Sysinfo.dat games found = %i\n", count); osd_printf_verbose("Rev = %s\n", m_sysinfo_rev.c_str()); } @@ -121,10 +91,10 @@ void datfile_manager::init_sysinfo() //------------------------------------------------- // initialize story.dat index //------------------------------------------------- -void datfile_manager::init_storyinfo() +void datfile_manager::init_story() { int swcount = 0; - int count = index_datafile(m_storyidx, swcount); + auto count = index_datafile(m_storyidx, swcount, TAG_STORY_R, m_story_rev, 's'); osd_printf_verbose("Story.dat games found = %i\n", count); } @@ -134,7 +104,7 @@ void datfile_manager::init_storyinfo() void datfile_manager::init_history() { int swcount = 0; - int count = index_datafile(m_histidx, swcount); + auto count = index_datafile(m_histidx, swcount, TAG_HISTORY_R, m_history_rev, ' '); osd_printf_verbose("History.dat systems found = %i\n", count); osd_printf_verbose("History.dat software packages found = %i\n", swcount); osd_printf_verbose("Rev = %s\n", m_history_rev.c_str()); @@ -147,7 +117,7 @@ void datfile_manager::init_gameinit() { int swcount = 0; drvindex tmp; - int count = index_mame_mess_info(m_ginitidx, tmp, swcount); + auto count = index_mame_mess_info(m_ginitidx, tmp, swcount); osd_printf_verbose("Gameinit.dat games found = %i\n", count); osd_printf_verbose("Rev = %s\n", m_ginit_rev.c_str()); } @@ -158,7 +128,7 @@ void datfile_manager::init_gameinit() void datfile_manager::init_mameinfo() { int drvcount = 0; - int count = index_mame_mess_info(m_mameidx, m_drvidx, drvcount); + auto count = index_mame_mess_info(m_mameidx, m_drvidx, drvcount); osd_printf_verbose("Mameinfo.dat games found = %i\n", count); osd_printf_verbose("Mameinfo.dat drivers found = %d\n", drvcount); osd_printf_verbose("Rev = %s\n", m_mame_rev.c_str()); @@ -170,7 +140,7 @@ void datfile_manager::init_mameinfo() void datfile_manager::init_messinfo() { int drvcount = 0; - int count = index_mame_mess_info(m_messidx, m_messdrvidx, drvcount); + auto count = index_mame_mess_info(m_messidx, m_messdrvidx, drvcount); osd_printf_verbose("Messinfo.dat games found = %i\n", count); osd_printf_verbose("Messinfo.dat drivers found = %d\n", drvcount); osd_printf_verbose("Rev = %s\n", m_mess_rev.c_str()); @@ -182,7 +152,8 @@ void datfile_manager::init_messinfo() void datfile_manager::init_command() { int swcount = 0; - int count = index_datafile(m_cmdidx, swcount); + std::string tmp, tmp2; + auto count = index_datafile(m_cmdidx, swcount, tmp, tmp2, 'c'); osd_printf_verbose("Command.dat games found = %i\n", count); } @@ -213,7 +184,7 @@ void datfile_manager::load_software_info(std::string &softlist, std::string &buf if (!has_software(softlist, softname, parentname)) return; - long s_offset = (*m_itemsiter).second; + auto s_offset = m_itemsiter->second; char rbuf[64 * 1024]; fseek(fp, s_offset, SEEK_SET); std::string readbuf; @@ -239,8 +210,7 @@ void datfile_manager::load_data_info(const game_driver *drv, std::string &buffer { dataindex index_idx; drvindex driver_idx; - std::string tag; - std::string filename; + std::string tag, filename; switch (type) { @@ -299,22 +269,22 @@ void datfile_manager::load_data_info(const game_driver *drv, std::string &buffer //------------------------------------------------- void datfile_manager::load_data_text(const game_driver *drv, std::string &buffer, dataindex &idx, std::string &tag) { - dataindex::iterator itemsiter = idx.find(drv); + auto itemsiter = idx.find(drv); if (itemsiter == idx.end()) { - int cloneof = driver_list::non_bios_clone(*drv); + auto cloneof = driver_list::non_bios_clone(*drv); if (cloneof == -1) return; else { - const game_driver *c_drv = &driver_list::driver(cloneof); + auto c_drv = &driver_list::driver(cloneof); itemsiter = idx.find(c_drv); if (itemsiter == idx.end()) return; } } - long s_offset = (*itemsiter).second; + auto s_offset = itemsiter->second; fseek(fp, s_offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -342,14 +312,14 @@ void datfile_manager::load_data_text(const game_driver *drv, std::string &buffer void datfile_manager::load_driver_text(const game_driver *drv, std::string &buffer, drvindex &idx, std::string &tag) { std::string s(core_filename_extract_base(drv->source_file)); - drvindex::const_iterator index = idx.find(s); + auto index = idx.find(s); // if driver not found, return if (index == idx.end()) return; buffer.append("\n--- DRIVER INFO ---\n").append("Driver: ").append(s).append("\n\n"); - long s_offset = (*index).second; + auto s_offset = index->second; fseek(fp, s_offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -376,31 +346,30 @@ void datfile_manager::load_driver_text(const game_driver *drv, std::string &buff //------------------------------------------------- int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, int &drvcount) { - std::string name; size_t foundtag; - size_t t_mame = TAG_MAMEINFO_R.size(); - size_t t_mess = TAG_MESSINFO_R.size(); - size_t t_ginit = TAG_GAMEINIT_R.size(); - size_t t_info = TAG_INFO.size(); + auto t_mame = TAG_MAMEINFO_R.size(); + auto t_mess = TAG_MESSINFO_R.size(); + auto t_ginit = TAG_GAMEINIT_R.size(); + auto t_info = TAG_INFO.size(); char rbuf[64 * 1024]; - std::string readbuf, xid; + std::string readbuf, xid, name; while (fgets(rbuf, 64 * 1024, fp) != nullptr) { readbuf = chartrimcarriage(rbuf); if (m_mame_rev.empty() && readbuf.compare(0, t_mame, TAG_MAMEINFO_R) == 0) { - size_t found = readbuf.find(" ", t_mame + 1); + auto found = readbuf.find(" ", t_mame + 1); m_mame_rev = readbuf.substr(t_mame + 1, found - t_mame); } else if (m_mess_rev.empty() && (foundtag = readbuf.find(TAG_MESSINFO_R)) != std::string::npos) { - size_t found = readbuf.find(" ", foundtag + t_mess + 1); + auto found = readbuf.find(" ", foundtag + t_mess + 1); m_mess_rev = readbuf.substr(foundtag + t_mess + 1, found - t_mess - foundtag); } else if (m_ginit_rev.empty() && readbuf.compare(0, t_ginit, TAG_GAMEINIT_R) == 0) { - size_t found = readbuf.find(" ", t_ginit + 1); + auto found = readbuf.find(" ", t_ginit + 1); m_ginit_rev = readbuf.substr(t_ginit + 1, found - t_ginit); } else if (readbuf.compare(0, t_info, TAG_INFO) == 0) @@ -412,7 +381,7 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, if (xid == TAG_MAME) { // validate driver - int game_index = driver_list::find(name.c_str()); + auto game_index = driver_list::find(name.c_str()); if (game_index != -1) index.emplace(&driver_list::driver(game_index), ftell(fp)); } @@ -430,139 +399,57 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, // load a game name and offset into an // indexed array //------------------------------------------------- -int datfile_manager::index_datafile(dataindex &index, int &swcount) +int datfile_manager::index_datafile(dataindex &index, int &swcount, std::string &tag, std::string &str, char sep) { - std::string readbuf, name; - size_t t_hist = TAG_HISTORY_R.size(); - size_t t_story = TAG_STORY_R.size(); - size_t t_sysinfo = TAG_SYSINFO_R.size(); - size_t t_info = TAG_INFO.size(); - size_t t_bio = TAG_BIO.size(); + std::string readbuf; + auto tag_size = tag.size(); + auto t_info = TAG_INFO.size(); + auto t_bio = TAG_BIO.size(); char rbuf[64 * 1024]; while (fgets(rbuf, 64 * 1024, fp) != nullptr) { readbuf = chartrimcarriage(rbuf); - if (m_history_rev.empty() && readbuf.compare(0, t_hist, TAG_HISTORY_R) == 0) - { - size_t found = readbuf.find(" ", t_hist + 1); - m_history_rev = readbuf.substr(t_hist + 1, found - t_hist); - } - else if (m_sysinfo_rev.empty() && readbuf.compare(0, t_sysinfo, TAG_SYSINFO_R) == 0) - { - size_t found = readbuf.find(".", t_sysinfo + 1); - m_sysinfo_rev = readbuf.substr(t_sysinfo + 1, found - t_sysinfo); - } - else if (m_story_rev.empty() && readbuf.compare(0, t_story, TAG_STORY_R) == 0) - m_story_rev = readbuf.substr(t_story + 1); - else if (readbuf.compare(0, t_info, TAG_INFO) == 0) - { - int curpoint = t_info + 1; - int ends = readbuf.size(); - while (curpoint < ends) + if (!tag.empty()) + if (str.empty() && readbuf.compare(0, tag_size, tag) == 0) { - // search for comma - size_t found = readbuf.find(",", curpoint); - - // found it - if (found != std::string::npos) + if (sep != 's') { - // copy data and validate driver - name = readbuf.substr(curpoint, found - curpoint); - - // validate driver - int game_index = driver_list::find(name.c_str()); - if (game_index != -1) - index.emplace(&driver_list::driver(game_index), ftell(fp)); - - // update current point - curpoint = ++found; + auto found = readbuf.find(sep, tag_size + 1); + str = readbuf.substr(tag_size + 1, found - tag_size); } - // if comma not found, copy data while until reach the end of string - else if (curpoint < ends) - { - name = readbuf.substr(curpoint); - int game_index = driver_list::find(name.c_str()); - if (game_index != -1) - index.emplace(&driver_list::driver(game_index), ftell(fp)); + else + str = readbuf.substr(tag_size + 1); + } - // update current point - curpoint = ends; - } + if (readbuf.compare(0, t_info, TAG_INFO) == 0) + { + // search for game info + auto rd = readbuf.substr(t_info + 1); + std::vector gamelist = tokenize(rd, ','); + for (auto & e : gamelist) + { + auto game_index = driver_list::find(e.c_str()); + if (game_index != -1) + index.emplace(&driver_list::driver(game_index), ftell(fp)); } } - // search for software info else if (!readbuf.empty() && readbuf[0] == DATAFILE_TAG[0]) { + // search for software info fgets(rbuf, 64 * 1024, fp); std::string readbuf_2(chartrimcarriage(rbuf)); - - // TAG_BIO identifies software list if (readbuf_2.compare(0, t_bio, TAG_BIO) == 0) { - size_t eq_sign = readbuf.find("="); + auto eq_sign = readbuf.find('='); std::string s_list(readbuf.substr(1, eq_sign - 1)); std::string s_roms(readbuf.substr(eq_sign + 1)); - int ends = s_list.size(); - int curpoint = 0; - - while (curpoint < ends) - { - size_t found = s_list.find(",", curpoint); - - // found it - if (found != std::string::npos) - { - name = s_list.substr(curpoint, found - curpoint); - curpoint = ++found; - } - else - { - name = s_list.substr(curpoint); - curpoint = ends; - } - - // search for a software list in the index, if not found then allocates - std::string lname(name); - int cpoint = 0; - int cends = s_roms.size(); - - while (cpoint < cends) - { - // search for comma - size_t comma_found = s_roms.find(",", cpoint); - - // found it - if (comma_found != std::string::npos) - { - // copy data - name = s_roms.substr(cpoint, comma_found - cpoint); - - // add a SoftwareItem - m_swindex[lname].emplace(name, ftell(fp)); - - // update current point - cpoint = ++comma_found; - swcount++; - } - else - { - // if reach the end, bail out - if (s_roms[cpoint] == '\r' || s_roms[cpoint] == '\n') - break; - - // copy data - name = s_roms.substr(cpoint); - - // add a SoftwareItem - m_swindex[lname].emplace(name, ftell(fp)); - - // update current point - cpoint = cends; - swcount++; - } - } - } + std::vector token_list = tokenize(s_list, ','); + std::vector token_roms = tokenize(s_roms, ','); + for (auto & li : token_list) + for (auto & ro : token_roms) + m_swindex[li].emplace(ro, ftell(fp)); + swcount++; } } } @@ -574,9 +461,6 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount) //--------------------------------------------------------- bool datfile_manager::parseopen(const char *filename) { - // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, - // so it's better and faster use standard C fileio functions. - emu_file file(m_options.history_path(), OPEN_FLAG_READ); if (file.open(filename) != osd_file::error::NONE) return false; @@ -598,22 +482,21 @@ void datfile_manager::index_menuidx(const game_driver *drv, dataindex &idx, drvi dataindex::iterator itemsiter = idx.find(drv); if (itemsiter == idx.end()) { - int cloneof = driver_list::non_bios_clone(*drv); + auto cloneof = driver_list::non_bios_clone(*drv); if (cloneof == -1) return; else { - const game_driver *c_drv = &driver_list::driver(cloneof); - itemsiter = idx.find(c_drv); - if (itemsiter == idx.end()) + auto c_drv = &driver_list::driver(cloneof); + if ((itemsiter = idx.find(c_drv)) == idx.end()) return; } } // seek to correct point in datafile - long s_offset = (*itemsiter).second; + auto s_offset = itemsiter->second; fseek(fp, s_offset, SEEK_SET); - size_t tinfo = TAG_INFO.size(); + auto tinfo = TAG_INFO.size(); char rbuf[64 * 1024]; std::string readbuf; while (fgets(rbuf, 64 * 1024, fp) != nullptr) @@ -641,7 +524,7 @@ void datfile_manager::load_command_info(std::string &buffer, std::string &sel) if (parseopen("command.dat")) { // open and seek to correct point in datafile - long offset = m_menuidx.at(sel); + auto offset = m_menuidx.at(sel); fseek(fp, offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -673,6 +556,7 @@ void datfile_manager::command_sub_menu(const game_driver *drv, std::vectorlongname : m_driver->description; - ui().draw_text_full(container, driver.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, driver.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -148,14 +148,14 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f x2 -= UI_BOX_LR_BORDER; y1 += UI_BOX_TB_BORDER; - ui().draw_text_full(container, driver.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, driver.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); maxwidth = 0; for (auto & elem : m_items_list) { - ui().draw_text_full(container, elem.label.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.label.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); maxwidth += width; } @@ -171,7 +171,6 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); // take off the borders - x2 -= UI_BOX_LR_BORDER; y1 += UI_BOX_TB_BORDER; // draw the text within it @@ -181,13 +180,13 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f x1 += space; rgb_t fcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0x00) : UI_TEXT_COLOR; rgb_t bcolor = (m_actual == x) ? rgb_t(0xff, 0xff, 0xff, 0xff) : UI_TEXT_BG_COLOR; - ui().draw_text_full(container, elem.label.c_str(), x1, y1, 1.0f, JUSTIFY_LEFT, WRAP_NEVER, DRAW_NONE, fcolor, bcolor, &width, nullptr); + ui().draw_text_full(container, elem.label.c_str(), x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NONE, fcolor, bcolor, &width, nullptr); if (bcolor != UI_TEXT_BG_COLOR) ui().draw_textured_box(container, x1 - (space / 2), y1, x1 + width + (space / 2), y2, bcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, elem.label.c_str(), x1, y1, 1.0f, JUSTIFY_LEFT, WRAP_NEVER, DRAW_NORMAL, fcolor, bcolor, &width, nullptr); + ui().draw_text_full(container, elem.label.c_str(), x1, y1, 1.0f, ui::text_layout::LEFT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fcolor, bcolor, &width, nullptr); x1 += width + space; ++x; } @@ -195,7 +194,7 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f // bottom std::string revision; revision.assign(_("Revision: ")).append(m_items_list[m_actual].revision); - ui().draw_text_full(container, revision.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, revision.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(origx2 - origx1, width); @@ -214,8 +213,8 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, revision.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, revision.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } //------------------------------------------------- @@ -224,22 +223,20 @@ void menu_dats_view::custom_render(void *selectedref, float top, float bottom, f void menu_dats_view::get_data() { - std::vector xstart; - std::vector xend; + std::vector xstart, xend; std::string buffer; - std::vector m_item; if (m_items_list[m_actual].option == UI_COMMAND_LOAD) { + std::vector m_item; mame_machine_manager::instance()->datfile().command_sub_menu(m_driver, m_item); if (!m_item.empty()) { - for (size_t x = 0; x < m_item.size(); ++x) + for (auto & e : m_item) { std::string t_buffer; - buffer.append(m_item[x]).append("\n"); - mame_machine_manager::instance()->datfile().load_command_info(t_buffer, m_item[x]); - if (!t_buffer.empty()) - buffer.append(t_buffer).append("\n"); + buffer.append(e).append("\n"); + mame_machine_manager::instance()->datfile().load_command_info(t_buffer, e); + if (!t_buffer.empty()) buffer.append(t_buffer).append("\n"); } convert_command_glyph(buffer); } @@ -247,7 +244,7 @@ void menu_dats_view::get_data() else mame_machine_manager::instance()->datfile().load_data_info(m_driver, buffer, m_items_list[m_actual].option); - int lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); + auto lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); for (int x = 0; x < lines; ++x) { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); @@ -270,7 +267,7 @@ void menu_dats_view::get_data_sw() mame_machine_manager::instance()->datfile().load_software_info(m_swinfo->listname, buffer, m_swinfo->shortname, m_swinfo->parentname); } - int lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); + auto lines = ui().wrap_text(container, buffer.c_str(), 0.0f, 0.0f, 1.0f - (4.0f * UI_BOX_LR_BORDER), xstart, xend); for (int x = 0; x < lines; ++x) { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); diff --git a/src/frontend/mame/ui/devopt.cpp b/src/frontend/mame/ui/devopt.cpp index 3b8fa1442c1..52e0264b43f 100644 --- a/src/frontend/mame/ui/devopt.cpp +++ b/src/frontend/mame/ui/devopt.cpp @@ -176,8 +176,8 @@ void menu_device_config::populate() portlist.append(iptdev, errors); // check if the device adds inputs to the system - for (ioport_port &port : portlist) - for (ioport_field &field : port.fields()) + for (auto &port : portlist) + for (ioport_field &field : port.second->fields()) { if (field.type() >= IPT_MAHJONG_FIRST && field.type() < IPT_MAHJONG_LAST) input_mj++; diff --git a/src/frontend/mame/ui/dirmenu.cpp b/src/frontend/mame/ui/dirmenu.cpp index 420e3d8aac9..359d6d63420 100644 --- a/src/frontend/mame/ui/dirmenu.cpp +++ b/src/frontend/mame/ui/dirmenu.cpp @@ -118,8 +118,8 @@ void menu_directory::custom_render(void *selectedref, float top, float bottom, f float width; // get the size of the text - ui().draw_text_full(container, _("Folders Setup"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Folders Setup"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -138,8 +138,8 @@ void menu_directory::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Folders Setup"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Folders Setup"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } /************************************************** @@ -217,13 +217,13 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott for (auto & elem : m_folders) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; maxwidth = MAX(maxwidth, width); } // get the size of the text - ui().draw_text_full(container, m_tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, m_tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; maxwidth = MAX(width, maxwidth); @@ -242,8 +242,8 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, m_tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, m_tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // compute our bounds x1 = 0.5f - 0.5f * maxwidth; @@ -262,8 +262,8 @@ void menu_display_actual::custom_render(void *selectedref, float top, float bott // draw the text within it for (auto & elem : m_folders) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, JUSTIFY_LEFT, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 += lineh; } @@ -506,8 +506,8 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b // get the size of the text for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; maxwidth = MAX(width, maxwidth); } @@ -529,16 +529,16 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b // draw the text within it for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 = y1 + ui().get_line_height(); } // bottom text tempbuf[0] = _("Press TAB to set"); - ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -557,8 +557,8 @@ void menu_add_change_folder::custom_render(void *selectedref, float top, float b y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf[0].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, tempbuf[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } @@ -643,7 +643,7 @@ void menu_remove_folder::custom_render(void *selectedref, float top, float botto std::string tempbuf = string_format(_("Remove %1$s Folder"), _(s_folders[m_ref].name)); // get the size of the text - ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -662,7 +662,7 @@ void menu_remove_folder::custom_render(void *selectedref, float top, float botto y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, DRAW_NORMAL, + ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index 03e9f5c5dd4..7c1d3ccfed6 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -108,7 +108,7 @@ menu_confirm_save_as::~menu_confirm_save_as() void menu_confirm_save_as::populate() { item_append(_("File Already Exists - Override?"), nullptr, FLAG_DISABLE, nullptr); - item_append(MENU_SEPARATOR_ITEM, nullptr, FLAG_DISABLE, nullptr); + item_append(menu_item_type::SEPARATOR); item_append(_("No"), nullptr, 0, ITEMREF_NO); item_append(_("Yes"), nullptr, 0, ITEMREF_YES); } @@ -224,7 +224,7 @@ void menu_file_create::populate() item_append(_("New Image Name:"), new_image_name, 0, ITEMREF_NEW_IMAGE_NAME); // do we support multiple formats? - if (ENABLE_FORMATS) format = m_image->formatlist().first(); + if (ENABLE_FORMATS) format = m_image->formatlist().front().get(); if (ENABLE_FORMATS && (format != nullptr)) { item_append(_("Image Format:"), m_current_format->description(), 0, ITEMREF_FORMAT); @@ -319,13 +319,63 @@ menu_file_selector::~menu_file_selector() void menu_file_selector::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { - extra_text_render(top, bottom, - origx1, origy1, origx2, origy2, - m_current_directory.c_str(), - nullptr); + // lay out extra text + auto layout = ui().create_layout(container); + layout.add_text(m_current_directory.c_str()); + + // position this extra text + float x1, y1, x2, y2; + extra_text_position(origx1, origx2, origy1, top, layout, -1, x1, y1, x2, y2); + + // draw a box + ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); + + // take off the borders + x1 += UI_BOX_LR_BORDER; + y1 += UI_BOX_TB_BORDER; + + size_t hit_start = 0, hit_span = 0; + if (mouse_hit + && layout.hit_test(mouse_x - x1, mouse_y - y1, hit_start, hit_span) + && m_current_directory.substr(hit_start, hit_span) != PATH_SEPARATOR) + { + // we're hovering over a directory! highlight it + auto target_dir_start = m_current_directory.rfind(PATH_SEPARATOR, hit_start) + 1; + auto target_dir_end = m_current_directory.find(PATH_SEPARATOR, hit_start + hit_span); + m_hover_directory = m_current_directory.substr(0, target_dir_end); + + // highlight the text in question + rgb_t fgcolor = UI_MOUSEOVER_COLOR; + rgb_t bgcolor = UI_MOUSEOVER_BG_COLOR; + layout.restyle(target_dir_start, target_dir_end - target_dir_start, &fgcolor, &bgcolor); + } + else + { + // we are not hovering over anything + m_hover_directory.clear(); + } + + // draw the text within it + layout.emit(container, x1, y1); } +//------------------------------------------------- +// custom_mouse_down - perform our special mouse down +//------------------------------------------------- + +bool menu_file_selector::custom_mouse_down() +{ + if (m_hover_directory.length() > 0) + { + m_current_directory = m_hover_directory; + reset(reset_options::SELECT_FIRST); + return true; + } + + return false; +} + //------------------------------------------------- // compare_file_selector_entries - sorting proc diff --git a/src/frontend/mame/ui/filesel.h b/src/frontend/mame/ui/filesel.h index e7988ed7912..66be755f699 100644 --- a/src/frontend/mame/ui/filesel.h +++ b/src/frontend/mame/ui/filesel.h @@ -69,6 +69,9 @@ public: virtual void handle() override; virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; +protected: + virtual bool custom_mouse_down() override; + private: enum file_selector_entry_type { @@ -98,6 +101,7 @@ private: bool m_has_create; int * m_result; file_selector_entry * m_entrylist; + std::string m_hover_directory; char m_filename_buffer[1024]; // methods diff --git a/src/frontend/mame/ui/inifile.cpp b/src/frontend/mame/ui/inifile.cpp index f176073786d..d9f5cbeef8a 100644 --- a/src/frontend/mame/ui/inifile.cpp +++ b/src/frontend/mame/ui/inifile.cpp @@ -25,7 +25,8 @@ UINT16 inifile_manager::c_file = 0; //------------------------------------------------- inifile_manager::inifile_manager(running_machine &machine, ui_options &moptions) - : m_machine(machine), m_options(moptions) + : m_machine(machine) + , m_options(moptions) { ini_index.clear(); directory_scan(); @@ -37,28 +38,15 @@ inifile_manager::inifile_manager(running_machine &machine, ui_options &moptions) void inifile_manager::directory_scan() { - // open extra INIs folder file_enumerator path(m_options.extraini_path()); const osd_directory_entry *dir; - // loop into folder's file while ((dir = path.next()) != nullptr) - { - int length = strlen(dir->name); - std::string filename(dir->name); - - // check .ini file ending - if ((length > 4) && dir->name[length - 4] == '.' && tolower((UINT8)dir->name[length - 3]) == 'i' && - tolower((UINT8)dir->name[length - 2]) == 'n' && tolower((UINT8)dir->name[length - 1]) == 'i') + if (core_filename_ends_with(dir->name, ".ini") && parseopen(dir->name)) { - // try to open file and indexing - if (parseopen(filename.c_str())) - { - init_category(filename); - parseclose(); - } + init_category(std::string(dir->name)); + parseclose(); } - } // sort std::stable_sort(ini_index.begin(), ini_index.end()); @@ -68,30 +56,25 @@ void inifile_manager::directory_scan() // initialize category //------------------------------------------------- -void inifile_manager::init_category(std::string &filename) +void inifile_manager::init_category(std::string filename) { categoryindex index; char rbuf[MAX_CHAR_INFO]; - std::string readbuf, name; + std::string readbuf; while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr) - { - readbuf = rbuf; - if (readbuf[0] == '[') + if (rbuf[0] == '[') { - size_t found = readbuf.find("]"); - name = readbuf.substr(1, found - 1); - if (name == "FOLDER_SETTINGS" || name == "ROOT_FOLDER") - continue; - else - index.emplace_back(name, ftell(fp)); + readbuf = rbuf; + auto name = readbuf.substr(1, readbuf.find("]") - 1); + if (name == "FOLDER_SETTINGS") continue; + index.emplace_back(name, ftell(fp)); } - } // sort std::stable_sort(index.begin(), index.end()); if (!index.empty()) - ini_index.emplace_back(filename, index); + ini_index.emplace_back(strmakelower(filename), index); } //------------------------------------------------- @@ -103,17 +86,16 @@ void inifile_manager::load_ini_category(std::vector &temp_filter) if (ini_index.empty()) return; - bool search_clones = false; + auto search_clones = false; std::string filename(ini_index[c_file].first); - long offset = ini_index[c_file].second[c_cat].second; + auto offset = ini_index[c_file].second[c_cat].second; - if (!core_stricmp(filename.c_str(), "category.ini") || !core_stricmp(filename.c_str(), "alltime.ini")) + if (filename == "category.ini" || filename == "alltime.ini") search_clones = true; if (parseopen(filename.c_str())) { fseek(fp, offset, SEEK_SET); - int num_game = driver_list::total(); char rbuf[MAX_CHAR_INFO]; std::string readbuf; while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr) @@ -123,20 +105,15 @@ void inifile_manager::load_ini_category(std::vector &temp_filter) if (readbuf.empty() || readbuf[0] == '[') break; - int dfind = driver_list::find(readbuf.c_str()); - if (dfind != -1 && search_clones) + auto dfind = driver_list::find(readbuf.c_str()); + if (dfind != -1) { temp_filter.push_back(dfind); - int clone_of = driver_list::non_bios_clone(dfind); - if (clone_of == -1) - { - for (int x = 0; x < num_game; x++) + if (search_clones && driver_list::non_bios_clone(dfind) == -1) + for (int x = 0; x < driver_list::total(); x++) if (readbuf == driver_list::driver(x).parent && readbuf != driver_list::driver(x).name) temp_filter.push_back(x); - } } - else if (dfind != -1) - temp_filter.push_back(dfind); } parseclose(); } @@ -148,9 +125,6 @@ void inifile_manager::load_ini_category(std::vector &temp_filter) bool inifile_manager::parseopen(const char *filename) { - // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, - // so it's better and faster use standard C fileio functions. - emu_file file(m_options.extraini_path(), OPEN_FLAG_READ); if (file.open(filename) != osd_file::error::NONE) return false; @@ -173,7 +147,8 @@ bool inifile_manager::parseopen(const char *filename) //------------------------------------------------- favorite_manager::favorite_manager(running_machine &machine, ui_options &moptions) - : m_machine(machine), m_options(moptions) + : m_machine(machine) + , m_options(moptions) { m_current = -1; parse_favorite(); @@ -211,13 +186,13 @@ void favorite_manager::add_favorite_game() return; } - bool software_avail = false; + auto software_avail = false; for (device_image_interface &image : image_interface_iterator(machine().root_device())) { if (image.exists() && image.software_entry()) { - const software_info *swinfo = image.software_entry(); - const software_part *part = image.part_entry(); + auto swinfo = image.software_entry(); + auto part = image.part_entry(); ui_software_info tmpmatches; tmpmatches.shortname = strensure(swinfo->shortname()); tmpmatches.longname = strensure(image.longname()); @@ -234,7 +209,7 @@ void favorite_manager::add_favorite_game() tmpmatches.parentlongname.clear(); if (swinfo->parentname()) { - software_list_device *swlist = software_list_device::find_by_name(machine().config(), image.software_list_name()); + auto swlist = software_list_device::find_by_name(machine().config(), image.software_list_name()); for (software_info &c_swinfo : swlist->get_info()) { std::string c_parent(c_swinfo.parentname()); @@ -292,7 +267,7 @@ bool favorite_manager::isgame_favorite() if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0) return isgame_favorite(&machine().system()); - bool image_loaded = false; + auto image_loaded = false; for (device_image_interface &image : image_interface_iterator(machine().root_device())) { @@ -384,7 +359,7 @@ void favorite_manager::parse_favorite() tmpmatches.part = chartrimcarriage(readbuf); file.gets(readbuf, 1024); chartrimcarriage(readbuf); - int dx = driver_list::find(readbuf); + auto dx = driver_list::find(readbuf); if (dx == -1) continue; tmpmatches.driver = &driver_list::driver(dx); file.gets(readbuf, 1024); diff --git a/src/frontend/mame/ui/inifile.h b/src/frontend/mame/ui/inifile.h index b8ba87addae..0658cf1f7db 100644 --- a/src/frontend/mame/ui/inifile.h +++ b/src/frontend/mame/ui/inifile.h @@ -29,10 +29,12 @@ public: // getters running_machine &machine() const { return m_machine; } - std::string get_file(int file = -1) { return ((file == -1) ? ini_index[c_file].first : ini_index[file].first); } - std::string get_category(int cat = -1) { return ((cat == -1) ? ini_index[c_file].second[c_cat].first : ini_index[c_file].second[cat].first); } + std::string get_file() { return ini_index[c_file].first; } + std::string get_file(int file) { return ini_index[file].first; } + std::string get_category(int cat) { return ini_index[c_file].second[cat].first; } + std::string get_category() { return ini_index[c_file].second[c_cat].first; } size_t total() { return ini_index.size(); } - size_t cat_total(int cat = -1) { return ((cat == -1) ? ini_index[c_file].second.size() : ini_index[cat].second.size()); } + size_t cat_total() { return ini_index[c_file].second.size(); } UINT16 &cur_file() { return c_file; } UINT16 &cur_cat() { return c_cat; } @@ -42,8 +44,8 @@ public: // setters void move_file(int d) { c_file += d; c_cat = 0; } void move_cat(int d) { c_cat += d; } - void set_cat(int i = -1) { (i == -1) ? c_cat = 0 : c_cat = i; } - void set_file(int i = -1) { (i == -1) ? c_file = 0 : c_file = i; } + void set_cat(int i) { c_cat = i; } + void set_file(int i) { c_file = i; } private: @@ -55,7 +57,7 @@ private: std::vector> ini_index; // init category index - void init_category(std::string &filename); + void init_category(std::string filename); // init file index void directory_scan(); diff --git a/src/frontend/mame/ui/inputmap.cpp b/src/frontend/mame/ui/inputmap.cpp index 5552f46d38c..0762db03a9e 100644 --- a/src/frontend/mame/ui/inputmap.cpp +++ b/src/frontend/mame/ui/inputmap.cpp @@ -164,10 +164,10 @@ void menu_input_specific::populate() suborder[SEQ_TYPE_INCREMENT] = 2; /* iterate over the input ports and add menu items */ - for (ioport_port &port : machine().ioport().ports()) + for (auto &port : machine().ioport().ports()) { port_count++; - for (ioport_field &field : port.fields()) + for (ioport_field &field : port.second->fields()) { ioport_type_class type_class = field.type_class(); @@ -548,8 +548,8 @@ void menu_settings::populate() diplist_tailptr = &diplist; /* loop over input ports and set up the current values */ - for (ioport_port &port : machine().ioport().ports()) - for (ioport_field &field : port.fields()) + for (auto &port : machine().ioport().ports()) + for (ioport_field &field : port.second->fields()) if (field.type() == type && field.enabled()) { UINT32 flags = 0; @@ -694,9 +694,9 @@ void menu_settings_dip_switches::custom_render_one(float x1, float y1, float x2, 0, y1 + (DIP_SWITCH_HEIGHT - UI_TARGET_FONT_HEIGHT) / 2, x1 - ui().get_string_width(" "), - JUSTIFY_RIGHT, - WRAP_NEVER, - DRAW_NORMAL, + ui::text_layout::RIGHT, + ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA), nullptr , @@ -818,8 +818,8 @@ void menu_analog::populate() bool first_entry = true; /* loop over input ports and add the items */ - for (ioport_port &port : machine().ioport().ports()) - for (ioport_field &field : port.fields()) + for (auto &port : machine().ioport().ports()) + for (ioport_field &field : port.second->fields()) if (field.is_analog() && field.enabled()) { ioport_field::user_settings settings; diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp index 35e325a35e7..bf936e7b779 100644 --- a/src/frontend/mame/ui/menu.cpp +++ b/src/frontend/mame/ui/menu.cpp @@ -37,12 +37,7 @@ namespace ui { #define UI_MENU_POOL_SIZE 65536 #define MAX_ICONS_RENDER 40 -struct arts_info -{ - const char *title, *path; -}; - -static const arts_info arts_info[] = +static std::vector> arts_info = { { __("Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, { __("Cabinets"), OPTION_CABINETS_PATH }, @@ -61,7 +56,6 @@ static const arts_info arts_info[] = { __("Select"), OPTION_SELECT_PATH }, { __("Marquees"), OPTION_MARQUEES_PATH }, { __("Covers"), OPTION_COVER_PATH }, - { nullptr } }; static const char *hover_msg[] = { @@ -90,10 +84,11 @@ std::unique_ptr menu::snapx_bitmap; std::unique_ptr menu::no_avail_bitmap; std::unique_ptr menu::star_bitmap; std::unique_ptr menu::bgrnd_bitmap; -bitmap_argb32 *menu::icons_bitmap[MAX_ICONS_RENDER]; +std::vector> menu::icons_bitmap; std::unique_ptr menu::hilight_main_bitmap; -bitmap_argb32 *menu::toolbar_bitmap[UI_TOOLBAR_BUTTONS]; -bitmap_argb32 *menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS]; +std::vector> menu::toolbar_bitmap; +std::vector> menu::sw_toolbar_bitmap; +std::vector menu::m_old_icons; /*************************************************************************** INLINE FUNCTIONS @@ -106,7 +101,7 @@ bitmap_argb32 *menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS]; inline bool is_selectable(menu_item const &item) { - return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && strcmp(item.text, MENU_SEPARATOR_ITEM) != 0); + return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && item.type != menu_item_type::SEPARATOR); } @@ -186,11 +181,14 @@ void menu::exit(running_machine &machine) for (auto & elem : icons_texture) mre.texture_free(elem); - for (int i = 0; i < UI_TOOLBAR_BUTTONS; i++) + for (int i = 0; i < UI_TOOLBAR_BUTTONS; ++i) { mre.texture_free(sw_toolbar_texture[i]); mre.texture_free(toolbar_texture[i]); } + + icons_bitmap.clear(); + m_old_icons.clear(); } @@ -322,7 +320,7 @@ void menu::item_append(menu_item item) void menu::item_append(menu_item_type type) { if (type == menu_item_type::SEPARATOR) - item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr); + item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr, menu_item_type::SEPARATOR); } //------------------------------------------------- @@ -396,7 +394,7 @@ const menu::event *menu::process(UINT32 flags, float x0, float y0) { // read events if ((item[0].flags & FLAG_UI ) != 0 || (item[0].flags & FLAG_UI_SWLIST ) != 0) - handle_main_events(flags); + handle_main_events(); else handle_events(flags); @@ -507,7 +505,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) if (ui().show_fps_counter()) { ui().draw_text_full(container, machine().video().speed_text().c_str(), 0.0f, 0.0f, 1.0f, - JUSTIFY_RIGHT, WRAP_WORD, DRAW_OPAQUE, rgb_t::white, rgb_t::black, nullptr, nullptr); + ui::text_layout::RIGHT, ui::text_layout::WORD, mame_ui_manager::OPAQUE_, rgb_t::white, rgb_t::black, nullptr, nullptr); } bool const customonly = (flags & PROCESS_CUSTOM_ONLY); @@ -520,8 +518,6 @@ void menu::draw(UINT32 flags, float origx0, float origy0) bool selected_subitem_too_big = false; int itemnum, linenum; - bool mouse_hit, mouse_button; - float mouse_x = -1, mouse_y = -1; if (ui().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid() && !noimage) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); @@ -529,9 +525,8 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // compute the width and height of the full menu float visible_width = 0; float visible_main_menu_height = 0; - for (itemnum = 0; itemnum < item.size(); itemnum++) + for (auto & pitem : item) { - const menu_item &pitem = item[itemnum]; float total_width; // compute width of left hand side @@ -572,38 +567,6 @@ void menu::draw(UINT32 flags, float origx0, float origy0) float visible_left = (1.0f - visible_width) * 0.5f; float visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; -/* float visible_left; - float visible_top; - if (origx0 == 0.0f && origy0 == 0.0f) - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - else - { - INT32 mouse_target_x, mouse_target_y; - float m_x, m_y; - render_target *mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); - if (mouse_target != nullptr) - { - if (mouse_target->map_point_container(origx0, origy0, *container, m_x, m_y)) - { - visible_left = m_x; - visible_top = m_y; - } - else - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - } - else - { - visible_left = (1.0f - visible_width) * 0.5f; - visible_top = (1.0f - (visible_main_menu_height + visible_extra_menu_height)) * 0.5f; - } - } -*/ // if the menu is at the bottom of the extra, adjust visible_top += customtop; @@ -619,6 +582,8 @@ void menu::draw(UINT32 flags, float origx0, float origy0) top_line = 0; if (top_line > item.size() - visible_lines || selected == (item.size() - 1)) top_line = item.size() - visible_lines; + if (selected >= top_line + visible_lines) + top_line = selected - (visible_lines / 2); bool show_top_arrow = false; bool show_bottom_arrow = false; @@ -677,19 +642,15 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // if we're selected, draw with a different background if (itemnum == selected) { - fgcolor = UI_SELECTED_COLOR; + fgcolor = fgcolor2 = fgcolor3 = UI_SELECTED_COLOR; bgcolor = UI_SELECTED_BG_COLOR; - fgcolor2 = UI_SELECTED_COLOR; - fgcolor3 = UI_SELECTED_COLOR; } // else if the mouse is over this item, draw with a different background else if (itemnum == hover) { - fgcolor = UI_MOUSEOVER_COLOR; + fgcolor = fgcolor2 = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - fgcolor2 = UI_MOUSEOVER_COLOR; - fgcolor3 = UI_MOUSEOVER_COLOR; } // if we have some background hilighting to do, add a quad behind everything else @@ -700,12 +661,12 @@ void menu::draw(UINT32 flags, float origx0, float origy0) if (linenum == 0 && show_top_arrow) { draw_arrow(container, - 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, - line_y + 0.25f * line_height, - 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, - line_y + 0.75f * line_height, - fgcolor, - ROT0); + 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, + line_y + 0.25f * line_height, + 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, + line_y + 0.75f * line_height, + fgcolor, + ROT0); if (hover == itemnum) hover = HOVER_ARROW_UP; } @@ -714,18 +675,18 @@ void menu::draw(UINT32 flags, float origx0, float origy0) else if (linenum == visible_lines - 1 && show_bottom_arrow) { draw_arrow(container, - 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, - line_y + 0.25f * line_height, - 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, - line_y + 0.75f * line_height, - fgcolor, - ROT0 ^ ORIENTATION_FLIP_Y); + 0.5f * (x1 + x2) - 0.5f * ud_arrow_width, + line_y + 0.25f * line_height, + 0.5f * (x1 + x2) + 0.5f * ud_arrow_width, + line_y + 0.75f * line_height, + fgcolor, + ROT0 ^ ORIENTATION_FLIP_Y); if (hover == itemnum) hover = HOVER_ARROW_DOWN; } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered @@ -738,7 +699,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) container->add_line(visible_left + visible_width - ((visible_width - heading_width) / 2) + UI_BOX_LR_BORDER, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); } ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); } // otherwise, draw the item on the left and the subitem text on the right @@ -750,7 +711,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // draw the left-side text ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, &item_width, nullptr); + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, &item_width, nullptr); // give 2 spaces worth of padding item_width += 2.0f * gutter_width; @@ -765,38 +726,38 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // customize subitem text color if (!core_stricmp(subitem_text, _("On"))) - fgcolor2 = rgb_t(0xff,0x00,0xff,0x00); + fgcolor2 = rgb_t(0x00,0xff,0x00); if (!core_stricmp(subitem_text, _("Off"))) - fgcolor2 = rgb_t(0xff,0xff,0x00,0x00); + fgcolor2 = rgb_t(0xff,0x00,0x00); if (!core_stricmp(subitem_text, _("Auto"))) - fgcolor2 = rgb_t(0xff,0xff,0xff,0x00); + fgcolor2 = rgb_t(0xff,0xff,0x00); // draw the subitem right-justified ui().draw_text_full(container, subitem_text, effective_left + item_width, line_y, effective_width - item_width, - JUSTIFY_RIGHT, WRAP_TRUNCATE, DRAW_NORMAL, subitem_invert ? fgcolor3 : fgcolor2, bgcolor, &subitem_width, nullptr); + ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, subitem_invert ? fgcolor3 : fgcolor2, bgcolor, &subitem_width, nullptr); // apply arrows if (itemnum == selected && (pitem.flags & FLAG_LEFT_ARROW)) { draw_arrow(container, - effective_left + effective_width - subitem_width - gutter_width, - line_y + 0.1f * line_height, - effective_left + effective_width - subitem_width - gutter_width + lr_arrow_width, - line_y + 0.9f * line_height, - fgcolor, - ROT90 ^ ORIENTATION_FLIP_X); + effective_left + effective_width - subitem_width - gutter_width, + line_y + 0.1f * line_height, + effective_left + effective_width - subitem_width - gutter_width + lr_arrow_width, + line_y + 0.9f * line_height, + fgcolor, + ROT90 ^ ORIENTATION_FLIP_X); } if (itemnum == selected && (pitem.flags & FLAG_RIGHT_ARROW)) { draw_arrow(container, - effective_left + effective_width + gutter_width - lr_arrow_width, - line_y + 0.1f * line_height, - effective_left + effective_width + gutter_width, - line_y + 0.9f * line_height, - fgcolor, - ROT90); + effective_left + effective_width + gutter_width - lr_arrow_width, + line_y + 0.1f * line_height, + effective_left + effective_width + gutter_width, + line_y + 0.9f * line_height, + fgcolor, + ROT90); } } } @@ -814,7 +775,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) // compute the multi-line target width/height ui().draw_text_full(container, pitem.subtext, 0, 0, visible_width * 0.75f, - JUSTIFY_RIGHT, WRAP_WORD, DRAW_NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); + ui::text_layout::RIGHT, ui::text_layout::WORD, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); // determine the target location target_x = visible_left + visible_width - target_width - UI_BOX_LR_BORDER; @@ -828,8 +789,9 @@ void menu::draw(UINT32 flags, float origx0, float origy0) target_x + target_width + UI_BOX_LR_BORDER, target_y + target_height + UI_BOX_TB_BORDER, subitem_invert ? UI_SELECTED_BG_COLOR : UI_BACKGROUND_COLOR); + ui().draw_text_full(container, pitem.subtext, target_x, target_y, target_width, - JUSTIFY_RIGHT, WRAP_WORD, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); + ui::text_layout::RIGHT, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); } // if there is something special to add, do it by calling the virtual method @@ -858,7 +820,7 @@ void menu::draw_text_box() // compute the multi-line target width/height ui().draw_text_full(container, text, 0, 0, 1.0f - 2.0f * UI_BOX_LR_BORDER - 2.0f * gutter_width, - JUSTIFY_LEFT, WRAP_WORD, DRAW_NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); + ui::text_layout::LEFT, ui::text_layout::WORD, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &target_width, &target_height); target_height += 2.0f * line_height; if (target_height > 1.0f - 2.0f * UI_BOX_TB_BORDER) target_height = floorf((1.0f - 2.0f * UI_BOX_TB_BORDER) / line_height) * line_height; @@ -883,12 +845,12 @@ void menu::draw_text_box() // add a box around that ui().draw_outlined_box(container, target_x - UI_BOX_LR_BORDER - gutter_width, - target_y - UI_BOX_TB_BORDER, - target_x + target_width + gutter_width + UI_BOX_LR_BORDER, - target_y + target_height + UI_BOX_TB_BORDER, - (item[0].flags & FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR); + target_y - UI_BOX_TB_BORDER, + target_x + target_width + gutter_width + UI_BOX_LR_BORDER, + target_y + target_height + UI_BOX_TB_BORDER, + (item[0].flags & FLAG_REDTEXT) ? UI_RED_COLOR : UI_BACKGROUND_COLOR); ui().draw_text_full(container, text, target_x, target_y, target_width, - JUSTIFY_LEFT, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui::text_layout::LEFT, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // draw the "return to prior menu" text with a hilight behind it highlight(container, @@ -898,7 +860,7 @@ void menu::draw_text_box() target_y + target_height, UI_SELECTED_BG_COLOR); ui().draw_text_full(container, backtext, target_x, target_y + target_height - line_height, target_width, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_SELECTED_COLOR, UI_SELECTED_BG_COLOR, nullptr, nullptr); // artificially set the hover to the last item so a double-click exits hover = item.size() - 1; @@ -922,6 +884,9 @@ void menu::handle_events(UINT32 flags) { // if we are hovering over a valid item, select it with a single click case UI_EVENT_MOUSE_DOWN: + if (custom_mouse_down()) + return; + if ((flags & PROCESS_ONLYCHAR) == 0) { if (hover >= 0 && hover < item.size()) @@ -955,7 +920,7 @@ void menu::handle_events(UINT32 flags) // if we are hovering over a valid item, fake a UI_SELECT with a double-click case UI_EVENT_MOUSE_DOUBLE_CLICK: - if ((flags & PROCESS_ONLYCHAR) == 0 && hover >= 0 && hover < item.size()) + if (!(flags & PROCESS_ONLYCHAR) && hover >= 0 && hover < item.size()) { selected = hover; m_event.iptkey = IPT_UI_SELECT; @@ -970,7 +935,7 @@ void menu::handle_events(UINT32 flags) // caught scroll event case UI_EVENT_MOUSE_WHEEL: - if ((flags & PROCESS_ONLYCHAR) == 0) + if (!(flags & PROCESS_ONLYCHAR)) { if (local_menu_event.zdelta > 0) { @@ -987,7 +952,7 @@ void menu::handle_events(UINT32 flags) } else { - if ((flags & FLAG_UI_DATS) != 0) + if ((flags & FLAG_UI_DATS)) { top_line += local_menu_event.num_lines; return; @@ -1042,7 +1007,7 @@ void menu::handle_keys(UINT32 flags) } // bail out - if ((flags & PROCESS_ONLYCHAR) != 0) + if ((flags & PROCESS_ONLYCHAR)) return; // hitting cancel also pops the stack @@ -1060,7 +1025,7 @@ void menu::handle_keys(UINT32 flags) bool ignoreleft = ((item[selected].flags & FLAG_LEFT_ARROW) == 0); bool ignoreright = ((item[selected].flags & FLAG_RIGHT_ARROW) == 0); - if ((item[0].flags & FLAG_UI_DATS) != 0) + if ((item[0].flags & FLAG_UI_DATS)) ignoreleft = ignoreright = false; // accept left/right keys as-is with repeat @@ -1072,7 +1037,7 @@ void menu::handle_keys(UINT32 flags) // up backs up by one item if (exclusive_input_pressed(IPT_UI_UP, 6)) { - if ((item[0].flags & FLAG_UI_DATS) != 0) + if ((item[0].flags & FLAG_UI_DATS)) { top_line--; return; @@ -1087,7 +1052,7 @@ void menu::handle_keys(UINT32 flags) // down advances by one item if (exclusive_input_pressed(IPT_UI_DOWN, 6)) { - if ((item[0].flags & FLAG_UI_DATS) != 0) + if ((item[0].flags & FLAG_UI_DATS)) { top_line++; return; @@ -1376,15 +1341,15 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) { render_manager &mrender = machine.render(); // create a texture for hilighting items in main menu - hilight_main_bitmap = std::make_unique(1, 26); + hilight_main_bitmap = std::make_unique(1, 128); int r1 = 0, g1 = 169, b1 = 255; //Any start color int r2 = 0, g2 = 39, b2 = 130; //Any stop color - for (int y = 0; y < 26; y++) + for (int y = 0; y < 128; y++) { - int r = r1 + (y * (r2 - r1) / 26); - int g = g1 + (y * (g2 - g1) / 26); - int b = b1 + (y * (b2 - b1) / 26); - hilight_main_bitmap->pix32(y, 0) = rgb_t(0xff, r, g, b); + int r = r1 + (y * (r2 - r1) / 128); + int g = g1 + (y * (g2 - g1) / 128); + int b = b1 + (y * (b2 - b1) / 128); + hilight_main_bitmap->pix32(y, 0) = rgb_t(r, g, b); } hilight_main_texture = mrender.texture_alloc(); @@ -1407,10 +1372,11 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) star_texture->set_bitmap(*star_bitmap, star_bitmap->cliprect(), TEXFORMAT_ARGB32); // allocate icons - for (int i = 0; i < MAX_ICONS_RENDER; i++) + for (auto & icons : icons_texture) { - icons_bitmap[i] = auto_alloc(machine, bitmap_argb32); - icons_texture[i] = mrender.texture_alloc(); + m_old_icons.emplace_back(nullptr); + icons_bitmap.emplace_back(std::make_unique()); + icons = mrender.texture_alloc(); } // create a texture for main menu background @@ -1436,28 +1402,28 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) // create a texture for toolbar for (int x = 0; x < UI_TOOLBAR_BUTTONS; ++x) { - toolbar_bitmap[x] = auto_alloc(machine, bitmap_argb32(32, 32)); - sw_toolbar_bitmap[x] = auto_alloc(machine, bitmap_argb32(32, 32)); + toolbar_bitmap.emplace_back(std::make_shared(32, 32)); + sw_toolbar_bitmap.emplace_back(std::make_shared(32, 32)); toolbar_texture[x] = mrender.texture_alloc(); sw_toolbar_texture[x] = mrender.texture_alloc(); - UINT32 *texture_dst = &toolbar_bitmap[x]->pix32(0); + UINT32 *texture_dst = &toolbar_bitmap.back()->pix32(0); memcpy(texture_dst, toolbar_bitmap_bmp[x], 32 * 32 * sizeof(UINT32)); - if (toolbar_bitmap[x]->valid()) - toolbar_texture[x]->set_bitmap(*toolbar_bitmap[x], toolbar_bitmap[x]->cliprect(), TEXFORMAT_ARGB32); + if (toolbar_bitmap.back()->valid()) + toolbar_texture[x]->set_bitmap(*toolbar_bitmap.back(), toolbar_bitmap.back()->cliprect(), TEXFORMAT_ARGB32); else - toolbar_bitmap[x]->reset(); + toolbar_bitmap.back()->reset(); if (x == 0 || x == 2) { texture_dst = &sw_toolbar_bitmap[x]->pix32(0); memcpy(texture_dst, toolbar_bitmap_bmp[x], 32 * 32 * sizeof(UINT32)); - if (sw_toolbar_bitmap[x]->valid()) - sw_toolbar_texture[x]->set_bitmap(*sw_toolbar_bitmap[x], sw_toolbar_bitmap[x]->cliprect(), TEXFORMAT_ARGB32); + if (sw_toolbar_bitmap.back()->valid()) + sw_toolbar_texture[x]->set_bitmap(*sw_toolbar_bitmap.back(), sw_toolbar_bitmap.back()->cliprect(), TEXFORMAT_ARGB32); else - sw_toolbar_bitmap[x]->reset(); + sw_toolbar_bitmap.back()->reset(); } else - sw_toolbar_bitmap[x]->reset(); + sw_toolbar_bitmap.back()->reset(); } } @@ -1478,8 +1444,7 @@ void menu::draw_select_game(UINT32 flags) float visible_width = 1.0f - 4.0f * UI_BOX_LR_BORDER; float primary_left = (1.0f - visible_width) * 0.5f; float primary_width = visible_width; - bool is_swlist = ((item[0].flags & FLAG_UI_SWLIST) != 0); - bool is_favorites = ((item[0].flags & FLAG_UI_FAVORITE) != 0); + bool is_swlist = (item[0].flags & FLAG_UI_SWLIST); // draw background image if available if (ui().options().use_background_image() && bgrnd_bitmap->valid()) @@ -1496,7 +1461,7 @@ void menu::draw_select_game(UINT32 flags) if (!noinput) { mouse_target = machine().ui_input().find_mouse(&mouse_target_x, &mouse_target_y, &mouse_button); - if (mouse_target != nullptr) + if (mouse_target) if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) mouse_hit = true; } @@ -1554,7 +1519,6 @@ void menu::draw_select_game(UINT32 flags) float line_y = visible_top + (float)linenum * line_height; int itemnum = top_line + linenum; const menu_item &pitem = item[itemnum]; - const char *itemtext = pitem.text; rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; rgb_t fgcolor3 = UI_CLONE_COLOR; @@ -1570,10 +1534,10 @@ void menu::draw_select_game(UINT32 flags) // if we're selected, draw with a different background if (itemnum == selected && m_focus == focused_menu::main) { - fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); - bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); - fgcolor3 = rgb_t(0xff, 0xcc, 0xcc, 0x00); - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43), + fgcolor = rgb_t(0xff, 0xff, 0x00); + bgcolor = rgb_t(0xff, 0xff, 0xff); + fgcolor3 = rgb_t(0xcc, 0xcc, 0x00); + ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } // else if the mouse is over this item, draw with a different background @@ -1587,7 +1551,7 @@ void menu::draw_select_game(UINT32 flags) { fgcolor = fgcolor3 = UI_MOUSEOVER_COLOR; bgcolor = UI_MOUSEOVER_BG_COLOR; - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } @@ -1610,56 +1574,41 @@ void menu::draw_select_game(UINT32 flags) hover = HOVER_ARROW_DOWN; } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + // draw the item centered else if (pitem.subtext == nullptr) { int item_invert = pitem.flags & FLAG_INVERT; - float space = 0.0f; - - if (ui_globals::has_icons && !is_swlist) - { - if (is_favorites) - { - ui_software_info *soft = (ui_software_info *)item[itemnum].ref; - if (soft->startempty == 1) - draw_icon(linenum, (void *)soft->driver, effective_left, line_y); - } - else - draw_icon(linenum, item[itemnum].ref, effective_left, line_y); - - space = ud_arrow_width * 1.5f; - } - ui().draw_text_full(container, itemtext, effective_left + space, line_y, effective_width - space, JUSTIFY_LEFT, WRAP_TRUNCATE, - DRAW_NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); + auto icon = draw_icon(linenum, item[itemnum].ref, effective_left, line_y); + ui().draw_text_full(container, pitem.text, effective_left + icon, line_y, effective_width - icon, ui::text_layout::LEFT, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); } else { - int item_invert = pitem.flags & FLAG_INVERT; - const char *subitem_text = pitem.subtext; + auto item_invert = pitem.flags & FLAG_INVERT; float item_width, subitem_width; // compute right space for subitem - ui().draw_text_full(container, subitem_text, effective_left, line_y, ui().get_string_width(pitem.subtext), - JUSTIFY_RIGHT, WRAP_NEVER, DRAW_NONE, item_invert ? fgcolor3 : fgcolor, bgcolor, &subitem_width, nullptr); + ui().draw_text_full(container, pitem.subtext, effective_left, line_y, ui().get_string_width(pitem.subtext), + ui::text_layout::RIGHT, ui::text_layout::NEVER, mame_ui_manager::NONE, item_invert ? fgcolor3 : fgcolor, bgcolor, &subitem_width, nullptr); subitem_width += gutter_width; // draw the item left-justified - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width - subitem_width, - JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, &item_width, nullptr); + ui().draw_text_full(container, pitem.text, effective_left, line_y, effective_width - subitem_width, + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, &item_width, nullptr); // draw the subitem right-justified - ui().draw_text_full(container, subitem_text, effective_left + item_width, line_y, effective_width - item_width, - JUSTIFY_RIGHT, WRAP_NEVER, DRAW_NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container, pitem.subtext, effective_left + item_width, line_y, effective_width - item_width, + ui::text_layout::RIGHT, ui::text_layout::NEVER, mame_ui_manager::NORMAL, item_invert ? fgcolor3 : fgcolor, bgcolor, nullptr, nullptr); } } for (size_t count = visible_items; count < item.size(); count++) { const menu_item &pitem = item[count]; - const char *itemtext = pitem.text; float line_x0 = x1 + 0.5f * UI_LINE_WIDTH; float line_y0 = line; float line_x1 = x2 - 0.5f * UI_LINE_WIDTH; @@ -1673,9 +1622,9 @@ void menu::draw_select_game(UINT32 flags) // if we're selected, draw with a different background if (count == selected && m_focus == focused_menu::main) { - fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); - bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); - ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(255, 43, 43, 43), + fgcolor = rgb_t(0xff, 0xff, 0x00); + bgcolor = rgb_t(0xff, 0xff, 0xff); + ui().draw_textured_box(container, line_x0 + 0.01f, line_y0, line_x1 - 0.01f, line_y1, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } // else if the mouse is over this item, draw with a different background @@ -1686,12 +1635,12 @@ void menu::draw_select_game(UINT32 flags) highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); } - if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else - ui().draw_text_full(container, itemtext, effective_left, line, effective_width, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container, pitem.text, effective_left, line, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); line += line_height; } @@ -1710,8 +1659,7 @@ void menu::draw_select_game(UINT32 flags) visitems = visible_lines - (top_line != 0) - (top_line + visible_lines != visible_items); // reset redraw icon stage - if (!is_swlist) - ui_globals::redraw_icon = false; + if (!is_swlist) ui_globals::redraw_icon = false; // noinput if (noinput) @@ -1731,21 +1679,21 @@ void menu::draw_select_game(UINT32 flags) void menu::get_title_search(std::string &snaptext, std::string &searchstr) { // get arts title text - snaptext.assign(_(arts_info[ui_globals::curimage_view].title)); + snaptext.assign(_(arts_info[ui_globals::curimage_view].first)); // get search path std::string addpath; if (ui_globals::curimage_view == SNAPSHOT_VIEW) { emu_options moptions; - searchstr = machine().options().value(arts_info[ui_globals::curimage_view].path); - addpath = moptions.value(arts_info[ui_globals::curimage_view].path); + searchstr = machine().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } else { ui_options moptions; - searchstr = ui().options().value(arts_info[ui_globals::curimage_view].path); - addpath = moptions.value(arts_info[ui_globals::curimage_view].path); + searchstr = ui().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } std::string tmp(searchstr); @@ -1768,7 +1716,7 @@ void menu::get_title_search(std::string &snaptext, std::string &searchstr) void menu::handle_main_keys(UINT32 flags) { - bool ignorepause = menu::stack_has_special_main_menu(); + auto ignorepause = menu::stack_has_special_main_menu(); // bail if no items if (item.size() == 0) @@ -1979,9 +1927,9 @@ void menu::handle_main_keys(UINT32 flags) // handle input events for main menu //------------------------------------------------- -void menu::handle_main_events(UINT32 flags) +void menu::handle_main_events() { - bool stop = false; + auto stop = false; ui_event local_menu_event; if (m_pressed) @@ -1989,8 +1937,8 @@ void menu::handle_main_events(UINT32 flags) bool pressed = mouse_pressed(); INT32 m_target_x, m_target_y; bool m_button; - render_target *mouse_target = machine().ui_input().find_mouse(&m_target_x, &m_target_y, &m_button); - if (mouse_target != nullptr && m_button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP)) + auto mouse_target = machine().ui_input().find_mouse(&m_target_x, &m_target_y, &m_button); + if (mouse_target && m_button && (hover == HOVER_ARROW_DOWN || hover == HOVER_ARROW_UP)) { if (pressed) machine().ui_input().push_mouse_down_event(mouse_target, m_target_x, m_target_y); @@ -2185,7 +2133,7 @@ void menu::handle_main_events(UINT32 flags) float menu::draw_right_box_title(float x1, float y1, float x2, float y2) { - float line_height = ui().get_line_height(); + auto line_height = ui().get_line_height(); float midl = (x2 - x1) * 0.5f; // add outlined box for options @@ -2202,7 +2150,7 @@ float menu::draw_right_box_title(float x1, float y1, float x2, float y2) float text_size = 1.0f; for (auto & elem : buffer) { - float textlen = ui().get_string_width(elem.c_str()) + 0.01f; + auto textlen = ui().get_string_width(elem.c_str()) + 0.01f; float tmp_size = (textlen > midl) ? (midl / textlen) : 1.0f; text_size = MIN(text_size, tmp_size); } @@ -2232,17 +2180,17 @@ float menu::draw_right_box_title(float x1, float y1, float x2, float y2) if (m_focus == focused_menu::righttop && ui_globals::rpanel == cells) { - fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); - bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); + fgcolor = rgb_t(0xff, 0xff, 0x00); + bgcolor = rgb_t(0xff, 0xff, 0xff); ui().draw_textured_box(container, x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, - bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); } else if (bgcolor == UI_MOUSEOVER_BG_COLOR) container->add_rect(x1 + UI_LINE_WIDTH, y1 + UI_LINE_WIDTH, x1 + midl - UI_LINE_WIDTH, y1 + line_height, bgcolor, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); ui().draw_text_full(container, buffer[cells].c_str(), x1 + UI_LINE_WIDTH, y1, midl - UI_LINE_WIDTH, - JUSTIFY_CENTER, WRAP_NEVER, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); + ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); x1 += midl; } @@ -2255,25 +2203,25 @@ float menu::draw_right_box_title(float x1, float y1, float x2, float y2) std::string menu::arts_render_common(float origx1, float origy1, float origx2, float origy2) { - float line_height = ui().get_line_height(); + auto line_height = ui().get_line_height(); std::string snaptext, searchstr; - float title_size = 0.0f; - float txt_lenght = 0.0f; - float gutter_width = 0.4f * line_height * machine().render().ui_aspect() * 1.3f; + auto title_size = 0.0f; + auto txt_lenght = 0.0f; + auto gutter_width = 0.4f * line_height * machine().render().ui_aspect() * 1.3f; get_title_search(snaptext, searchstr); // apply title to right panel for (int x = FIRST_VIEW; x < LAST_VIEW; x++) { - ui().draw_text_full(container, _(arts_info[x].title), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, - WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, &txt_lenght, nullptr); + ui().draw_text_full(container, _(arts_info[x].first), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &txt_lenght, nullptr); txt_lenght += 0.01f; title_size = MAX(txt_lenght, title_size); } - rgb_t fgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0xff, 0x00) : UI_TEXT_COLOR; - rgb_t bgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0xff, 0xff) : UI_TEXT_BG_COLOR; + rgb_t fgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0x00) : UI_TEXT_COLOR; + rgb_t bgcolor = (m_focus == focused_menu::rightbottom) ? rgb_t(0xff, 0xff, 0xff) : UI_TEXT_BG_COLOR; float middle = origx2 - origx1; // check size @@ -2283,10 +2231,10 @@ std::string menu::arts_render_common(float origx1, float origy1, float origx2, f if (bgcolor != UI_TEXT_BG_COLOR) ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), - origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + origy1 + line_height, bgcolor, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); + ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::curimage_view, FIRST_VIEW, LAST_VIEW, title_size); @@ -2320,16 +2268,11 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) y2 -= UI_BOX_TB_BORDER; render_texture **t_texture = (software) ? sw_toolbar_texture : toolbar_texture; - bitmap_argb32 **t_bitmap = (software) ? sw_toolbar_bitmap : toolbar_bitmap; + auto t_bitmap = (software) ? sw_toolbar_bitmap : toolbar_bitmap; int m_valid = 0; - for (int x = 0; x < UI_TOOLBAR_BUTTONS; ++x) - { - if (t_bitmap[x]->valid()) - { - m_valid++; - } - } + for (auto & e : t_bitmap) + if (e->valid()) m_valid++; float space_x = (y2 - y1) * container->manager().ui_aspect(); float total = (m_valid * space_x) + ((m_valid - 1) * 0.001f); @@ -2337,7 +2280,6 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) x2 = x1 + space_x; for (int z = 0; z < UI_TOOLBAR_BUTTONS; ++z) - { if (t_bitmap[z]->valid()) { rgb_t color(0xEFEFEFEF); @@ -2346,14 +2288,13 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) hover = HOVER_B_FAV + z; color = rgb_t::white; float ypos = y2 + ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; - ui().draw_text_box(container, _(hover_msg[z]), JUSTIFY_CENTER, 0.5f, ypos, UI_BACKGROUND_COLOR); + ui().draw_text_box(container, _(hover_msg[z]), ui::text_layout::CENTER, 0.5f, ypos, UI_BACKGROUND_COLOR); } container->add_quad(x1, y1, x2, y2, color, t_texture[z], PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); x1 += space_x + ((z < UI_TOOLBAR_BUTTONS - 1) ? 0.001f : 0.0f); x2 = x1 + space_x; } - } } @@ -2361,7 +2302,7 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) // perform rendering of image //------------------------------------------------- -void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float origy1, float origx2, float origy2, bool software) +void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float origy1, float origx2, float origy2) { bool no_available = false; float line_height = ui().get_line_height(); @@ -2390,11 +2331,11 @@ void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float ori int panel_height_pixel = panel_height * screen_height; // Calculate resize ratios for resizing - float ratioW = (float)panel_width_pixel / tmp_bitmap->width(); - float ratioH = (float)panel_height_pixel / tmp_bitmap->height(); - float ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width(); - int dest_xPixel = tmp_bitmap->width(); - int dest_yPixel = tmp_bitmap->height(); + auto ratioW = (float)panel_width_pixel / tmp_bitmap->width(); + auto ratioH = (float)panel_height_pixel / tmp_bitmap->height(); + auto ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width(); + auto dest_xPixel = tmp_bitmap->width(); + auto dest_yPixel = tmp_bitmap->height(); // force 4:3 ratio min if (ui().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW) @@ -2451,9 +2392,9 @@ void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float ori void menu::draw_common_arrow(float origx1, float origy1, float origx2, float origy2, int current, int dmin, int dmax, float title_size) { - float line_height = ui().get_line_height(); - float lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); - float gutter_width = lr_arrow_width * 1.3f; + auto line_height = ui().get_line_height(); + auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); + auto gutter_width = lr_arrow_width * 1.3f; // set left-right arrows dimension float ar_x0 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width - lr_arrow_width; @@ -2472,14 +2413,14 @@ void menu::draw_common_arrow(float origx1, float origy1, float origx2, float ori // set hover if (mouse_hit && ar_x0 <= mouse_x && ar_x1 > mouse_x && ar_y0 <= mouse_y && ar_y1 > mouse_y && current != dmax) { - ui().draw_textured_box(container, ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container, ar_x0 + 0.01f, ar_y0, ar_x1 - 0.01f, ar_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = HOVER_UI_RIGHT; fgcolor_right = UI_MOUSEOVER_COLOR; } else if (mouse_hit && al_x0 <= mouse_x && al_x1 > mouse_x && al_y0 <= mouse_y && al_y1 > mouse_y && current != dmin) { - ui().draw_textured_box(container, al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(255, 43, 43, 43), + ui().draw_textured_box(container, al_x0 + 0.01f, al_y0, al_x1 - 0.01f, al_y1, UI_MOUSEOVER_BG_COLOR, rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = HOVER_UI_LEFT; fgcolor_left = UI_MOUSEOVER_COLOR; @@ -2501,22 +2442,35 @@ void menu::draw_common_arrow(float origx1, float origy1, float origx2, float ori // draw icons //------------------------------------------------- -void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) +float menu::draw_icon(int linenum, void *selectedref, float x0, float y0) { - static const game_driver *olddriver[MAX_ICONS_RENDER] = { nullptr }; - float x1 = x0 + ui().get_line_height() * container->manager().ui_aspect(container); - float y1 = y0 + ui().get_line_height(); - const game_driver *driver = (const game_driver *)selectedref; + if (!ui_globals::has_icons || (item[0].flags & FLAG_UI_SWLIST)) + return 0.0f; - if (olddriver[linenum] != driver || ui_globals::redraw_icon) + float ud_arrow_width = ui().get_line_height() * container->manager().ui_aspect(container); + const game_driver *driver = nullptr; + + if (item[0].flags & FLAG_UI_FAVORITE) { - olddriver[linenum] = driver; + ui_software_info *soft = (ui_software_info *)selectedref; + if (soft->startempty == 1) + driver = soft->driver; + } + else + driver = (const game_driver *)selectedref; + + auto x1 = x0 + ud_arrow_width; + auto y1 = y0 + ui().get_line_height(); + + if (m_old_icons[linenum] != driver || ui_globals::redraw_icon) + { + m_old_icons[linenum] = driver; // set clone status bool cloneof = strcmp(driver->parent, "0"); if (cloneof) { - int cx = driver_list::find(driver->parent); + auto cx = driver_list::find(driver->parent); if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) cloneof = false; } @@ -2545,8 +2499,8 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) { float panel_width = x1 - x0; float panel_height = y1 - y0; - int screen_width = machine().render().ui_target().width(); - int screen_height = machine().render().ui_target().height(); + auto screen_width = machine().render().ui_target().width(); + auto screen_height = machine().render().ui_target().height(); if (machine().render().ui_target().orientation() & ORIENTATION_SWAP_XY) std::swap(screen_height, screen_width); @@ -2555,10 +2509,10 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) int panel_height_pixel = panel_height * screen_height; // Calculate resize ratios for resizing - float ratioW = (float)panel_width_pixel / tmp->width(); - float ratioH = (float)panel_height_pixel / tmp->height(); - int dest_xPixel = tmp->width(); - int dest_yPixel = tmp->height(); + auto ratioW = (float)panel_width_pixel / tmp->width(); + auto ratioH = (float)panel_height_pixel / tmp->height(); + auto dest_xPixel = tmp->width(); + auto dest_yPixel = tmp->height(); if (ratioW < 1 || ratioH < 1) { @@ -2581,7 +2535,6 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) else dest_bitmap = tmp; - icons_bitmap[linenum]->reset(); icons_bitmap[linenum]->allocate(panel_width_pixel, panel_height_pixel); for (int x = 0; x < dest_xPixel; x++) @@ -2600,6 +2553,8 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) if (icons_bitmap[linenum] != nullptr && icons_bitmap[linenum]->valid()) container->add_quad(x0, y0, x1, y1, rgb_t::white, icons_texture[linenum], PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + + return ud_arrow_width * 1.5f; } //------------------------------------------------- @@ -2614,7 +2569,7 @@ void menu::info_arrow(int ub, float origx1, float origx2, float oy1, float line_ if (mouse_hit && origx1 <= mouse_x && origx2 > mouse_x && oy1 <= mouse_y && oy1 + (line_height * text_size) > mouse_y) { ui().draw_textured_box(container, origx1 + 0.01f, oy1, origx2 - 0.01f, oy1 + (line_height * text_size), UI_MOUSEOVER_BG_COLOR, - rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); + rgb_t(43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); hover = (!ub) ? HOVER_DAT_UP : HOVER_DAT_DOWN; fgcolor = UI_MOUSEOVER_COLOR; } @@ -2629,24 +2584,22 @@ void menu::info_arrow(int ub, float origx1, float origx2, float oy1, float line_ void menu::draw_palette_menu() { - float line_height = ui().get_line_height(); - float lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); - float ud_arrow_width = line_height * machine().render().ui_aspect(); - float gutter_width = lr_arrow_width * 1.3f; + auto line_height = ui().get_line_height(); + auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); + auto ud_arrow_width = line_height * machine().render().ui_aspect(); + auto gutter_width = lr_arrow_width * 1.3f; int itemnum, linenum; if (ui().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid()) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // compute the width and height of the full menu - float visible_width = 0; - float visible_main_menu_height = 0; - for (itemnum = 0; itemnum < item.size(); itemnum++) + auto visible_width = 0.0f; + auto visible_main_menu_height = 0.0f; + for (auto & pitem : item) { - const menu_item &pitem = item[itemnum]; - // compute width of left hand side - float total_width = gutter_width + ui().get_string_width(pitem.text) + gutter_width; + auto total_width = gutter_width + ui().get_string_width(pitem.text) + gutter_width; // add in width of right hand side if (pitem.subtext) @@ -2661,7 +2614,7 @@ void menu::draw_palette_menu() } // account for extra space at the top and bottom - float visible_extra_menu_height = customtop + custombottom; + auto visible_extra_menu_height = customtop + custombottom; // add a little bit of slop for rounding visible_width += 0.01f; @@ -2778,13 +2731,13 @@ void menu::draw_palette_menu() } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered else if (pitem.subtext == nullptr) ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); // otherwise, draw the item on the left and the subitem text on the right else @@ -2794,7 +2747,7 @@ void menu::draw_palette_menu() // draw the left-side text ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); // give 2 spaces worth of padding float subitem_width = ui().get_string_width("FF00FF00"); @@ -2817,9 +2770,9 @@ void menu::draw_palette_menu() void menu::draw_dats_menu() { - float line_height = ui().get_line_height(); - float ud_arrow_width = line_height * machine().render().ui_aspect(); - float gutter_width = 0.52f * line_height * machine().render().ui_aspect(); + auto line_height = ui().get_line_height(); + auto ud_arrow_width = line_height * machine().render().ui_aspect(); + auto gutter_width = 0.52f * line_height * machine().render().ui_aspect(); mouse_x = -1, mouse_y = -1; float visible_width = 1.0f - 2.0f * UI_BOX_LR_BORDER; float visible_left = (1.0f - visible_width) * 0.5f; @@ -2919,8 +2872,8 @@ void menu::draw_dats_menu() // draw dats text else if (pitem.subtext == nullptr) { - ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, JUSTIFY_LEFT, WRAP_NEVER, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); } } @@ -2938,14 +2891,14 @@ void menu::draw_dats_menu() if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem)) hover = count; - if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else { highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); - ui().draw_text_full(container, itemtext, effective_left, line, effective_width, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container, itemtext, effective_left, line, effective_width, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); } line += line_height; } @@ -2971,28 +2924,13 @@ void menu::set_pressed() void menu::extra_text_draw_box(float origx1, float origx2, float origy, float yspan, const char *text, int direction) { - float text_width, text_height; - float width, maxwidth; - float x1, y1, x2, y2, temp; - // get the size of the text - ui().draw_text_full(container,text, 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_WORD, - DRAW_NONE, rgb_t::white, rgb_t::black, &text_width, &text_height); - width = text_width + (2 * UI_BOX_LR_BORDER); - maxwidth = MAX(width, origx2 - origx1); + auto layout = ui().create_layout(container); + layout.add_text(text); - // compute our bounds - x1 = 0.5f - 0.5f * maxwidth; - x2 = x1 + maxwidth; - y1 = origy + (yspan * direction); - y2 = origy + (UI_BOX_TB_BORDER * direction); - - if (y1 > y2) - { - temp = y1; - y1 = y2; - y2 = temp; - } + // position this extra text + float x1, y1, x2, y2; + extra_text_position(origx1, origx2, origy, yspan, layout, direction, x1, y1, x2, y2); // draw a box ui().draw_outlined_box(container,x1, y1, x2, y2, UI_BACKGROUND_COLOR); @@ -3002,8 +2940,29 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container,text, x1, y1, text_width, JUSTIFY_LEFT, WRAP_WORD, - DRAW_NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); + layout.emit(container, x1, y1); +} + + +//------------------------------------------------- +// extra_text_position - given extra text that has +// been put into a layout, position it +//------------------------------------------------- + +void menu::extra_text_position(float origx1, float origx2, float origy, float yspan, text_layout &layout, + int direction, float &x1, float &y1, float &x2, float &y2) +{ + float width = layout.actual_width() + (2 * UI_BOX_LR_BORDER); + float maxwidth = MAX(width, origx2 - origx1); + + // compute our bounds + x1 = 0.5f - 0.5f * maxwidth; + x2 = x1 + maxwidth; + y1 = origy + (yspan * direction); + y2 = origy + (UI_BOX_TB_BORDER * direction); + + if (y1 > y2) + std::swap(y1, y2); } @@ -3012,9 +2971,7 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys // and footer text //------------------------------------------------- -void menu::extra_text_render(float top, float bottom, - float origx1, float origy1, float origx2, float origy2, - const char *header, const char *footer) +void menu::extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, const char *header, const char *footer) { header = ((header != nullptr) && (header[0] != '\0')) ? header : nullptr; footer = ((footer != nullptr) && (footer[0] != '\0')) ? footer : nullptr; diff --git a/src/frontend/mame/ui/menu.h b/src/frontend/mame/ui/menu.h index e450cf7399b..d1e3b500898 100644 --- a/src/frontend/mame/ui/menu.h +++ b/src/frontend/mame/ui/menu.h @@ -268,7 +268,7 @@ protected: const event *process(UINT32 flags, float x0 = 0.0f, float y0 = 0.0f); void process_parent() { m_parent->process(PROCESS_NOINPUT); } - bool is_focus(focused_menu focus) const { return m_focus == focus; } + focused_menu get_focus() const { return m_focus; } void set_focus(focused_menu focus) { m_focus = focus; } // draw right box @@ -280,10 +280,15 @@ protected: // images render std::string arts_render_common(float origx1, float origy1, float origx2, float origy2); - void arts_render_images(bitmap_argb32 *bitmap, float origx1, float origy1, float origx2, float origy2, bool software); + void arts_render_images(bitmap_argb32 *bitmap, float origx1, float origy1, float origx2, float origy2); // draw header and footer text void extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, const char *header, const char *footer); + void extra_text_position(float origx1, float origx2, float origy, float yspan, text_layout &layout, + int direction, float &x1, float &y1, float &x2, float &y2); + + // custom events + virtual bool custom_mouse_down() { return false; } template static T *topmost_menu() { return dynamic_cast(menu_stack.get()); } @@ -312,7 +317,7 @@ private: static std::unique_ptr no_avail_bitmap, bgrnd_bitmap, star_bitmap; static render_texture *bgrnd_texture, *star_texture; - static bitmap_argb32 *icons_bitmap[]; + static std::vector> icons_bitmap; static render_texture *icons_texture[]; // request the specific handling of the game selection main menu @@ -322,7 +327,7 @@ private: static void stack_push(std::unique_ptr &&menu); // toolbar - static bitmap_argb32 *toolbar_bitmap[], *sw_toolbar_bitmap[]; + static std::vector> toolbar_bitmap, sw_toolbar_bitmap; static render_texture *toolbar_texture[], *sw_toolbar_texture[]; // draw game list @@ -340,9 +345,9 @@ private: void handle_main_keys(UINT32 flags); // handle mouse - void handle_main_events(UINT32 flags); + void handle_main_events(); - void draw_icon(int linenum, void *selectedref, float x1, float y1); + float draw_icon(int linenum, void *selectedref, float x1, float y1); void extra_text_draw_box(float origx1, float origx2, float origy, float yspan, const char *text, int direction); bool m_special_main_menu; @@ -353,6 +358,7 @@ private: event m_event; // the UI event that occurred pool *m_pool; // list of memory pools focused_menu m_focus; + static std::vector m_old_icons; static std::unique_ptr menu_stack; static std::unique_ptr menu_free; diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index 3158055febd..4e243f8ea8f 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -450,12 +450,7 @@ void menu_crosshair::populate() int length = strlen(dir->name); /* look for files ending in .png with a name not larger then 9 chars*/ - if ((length > 4) && (length <= CROSSHAIR_PIC_NAME_LENGTH + 4) && - dir->name[length - 4] == '.' && - tolower((UINT8)dir->name[length - 3]) == 'p' && - tolower((UINT8)dir->name[length - 2]) == 'n' && - tolower((UINT8)dir->name[length - 1]) == 'g') - + if ((length > 4) && (length <= CROSSHAIR_PIC_NAME_LENGTH + 4) && core_filename_ends_with(dir->name, ".png")) { /* remove .png from length */ length -= 4; @@ -818,15 +813,14 @@ void menu_machine_configure::custom_render(void *selectedref, float top, float b for (auto & elem : text) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } // compute our bounds float x1 = 0.5f - 0.5f * maxwidth; -// float x1 = origx1; float x2 = x1 + maxwidth; float y1 = origy1 - top; float y2 = origy1 - UI_BOX_TB_BORDER; @@ -842,8 +836,8 @@ void menu_machine_configure::custom_render(void *selectedref, float top, float b // draw the text within it for (auto & elem : text) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 += ui().get_line_height(); } } @@ -900,7 +894,11 @@ menu_plugins_configure::~menu_plugins_configure() { emu_file file_plugin(OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file_plugin.open("plugin.ini") != osd_file::error::NONE) - throw emu_fatalerror("Unable to create file plugin.ini\n"); + // Can't throw in a destructor, so let's ignore silently for + // now. We shouldn't write files in a destructor in any case. + // + // throw emu_fatalerror("Unable to create file plugin.ini\n"); + return; // generate the updated INI file_plugin.puts(mame_machine_manager::instance()->plugins().output_ini().c_str()); } @@ -959,8 +957,8 @@ void menu_plugins_configure::custom_render(void *selectedref, float top, float b { float width; - ui().draw_text_full(container, _("Plugins"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Plugins"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -979,8 +977,8 @@ void menu_plugins_configure::custom_render(void *selectedref, float top, float b y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Plugins"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Plugins"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } -} // namespace ui \ No newline at end of file +} // namespace ui diff --git a/src/frontend/mame/ui/optsmenu.cpp b/src/frontend/mame/ui/optsmenu.cpp index e0d3e2ff663..6872c3498da 100644 --- a/src/frontend/mame/ui/optsmenu.cpp +++ b/src/frontend/mame/ui/optsmenu.cpp @@ -297,8 +297,8 @@ void menu_game_options::populate() void menu_game_options::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Settings"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Settings"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -317,8 +317,8 @@ void menu_game_options::custom_render(void *selectedref, float top, float bottom y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Settings"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Settings"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } diff --git a/src/frontend/mame/ui/selector.cpp b/src/frontend/mame/ui/selector.cpp index a60bb6ce070..e1f05e6e47d 100644 --- a/src/frontend/mame/ui/selector.cpp +++ b/src/frontend/mame/ui/selector.cpp @@ -168,8 +168,8 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl std::string tempbuf = std::string(_("Selection List - Search: ")).append(m_search).append("_"); // get the size of the text - ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += (2.0f * UI_BOX_LR_BORDER) + 0.01f; float maxwidth = MAX(width, origx2 - origx1); @@ -188,16 +188,16 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // bottom text // get the text for 'UI Select' std::string ui_select_text = machine().input().seq_name(machine().ioport().type_seq(IPT_UI_SELECT, 0, SEQ_TYPE_STANDARD)); tempbuf = string_format(_("Double click or press %1$s to select"), ui_select_text); - ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); @@ -216,8 +216,8 @@ void menu_selector::custom_render(void *selectedref, float top, float bottom, fl y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, tempbuf.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } //------------------------------------------------- @@ -235,7 +235,6 @@ void menu_selector::find_matches(const char *str) if (m_str_items[index] == "_skip_") continue; - // pick the best match between driver name and description int curpenalty = fuzzy_substring(str, m_str_items[index]); // insert into the sorted table of matches diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index 7143096f3b4..37ec5915885 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -217,14 +217,14 @@ void menu_select_game::handle() else if (menu_event->iptkey == IPT_UI_SELECT) { // handle selections - if (is_focus(focused_menu::main)) + if (get_focus() == focused_menu::main) { if (isfavorite()) inkey_select_favorite(menu_event); else inkey_select(menu_event); } - else if (is_focus(focused_menu::left)) + else if (get_focus() == focused_menu::left) { l_hover = highlight; check_filter = true; @@ -236,6 +236,11 @@ void menu_select_game::handle() // handle IPT_CUSTOM (mouse right click) if (!isfavorite()) menu::stack_push(ui(), container, (const game_driver *)m_prev_selected, menu_event->mouse.x0, menu_event->mouse.y0); + else + { + ui_software_info *sw = (ui_software_info *)m_prev_selected; + menu::stack_push(ui(), container, (const game_driver *)sw->driver, menu_event->mouse.x0, menu_event->mouse.y0); + } } else if (menu_event->iptkey == IPT_UI_LEFT) { @@ -417,7 +422,7 @@ void menu_select_game::handle() inkey_special(menu_event); } else if (menu_event->iptkey == IPT_UI_CONFIGURE) - inkey_configure(menu_event); + inkey_navigation(); else if (menu_event->iptkey == IPT_OTHER) { @@ -435,7 +440,7 @@ void menu_select_game::handle() } else if (menu_event->iptkey == IPT_UI_CONFIGURE) { - inkey_configure(menu_event); + inkey_navigation(); } else if (menu_event->iptkey == IPT_OTHER) { @@ -459,7 +464,7 @@ void menu_select_game::handle() // if we're in an error state, overlay an error message if (ui_error) ui().draw_text_box(container, _("The selected machine is missing one or more required ROM or CHD images. " - "Please select a different machine.\n\nPress any key to continue."), JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR); + "Please select a different machine.\n\nPress any key to continue."), ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); // handle filters selection from key shortcuts if (check_filter) @@ -590,7 +595,7 @@ void menu_select_game::populate() } } - item_append(MENU_SEPARATOR_ITEM, nullptr, FLAG_UI, nullptr); + item_append(menu_item_type::SEPARATOR); // add special items if (menu::stack_has_special_main_menu()) @@ -664,11 +669,11 @@ void menu_select_game::build_available_list() // now check and include NONE_NEEDED for (int x = 0; x < m_total; ++x) { - const game_driver *driver = &driver_list::driver(x); + auto driver = &driver_list::driver(x); if (!m_included[x] && driver != &GAME_NAME(___empty)) { const rom_entry *rom = driver->rom; - bool noroms = true; + auto noroms = true; // check NO-DUMP for (; !ROMENTRY_ISEND(rom) && noroms == true; ++rom) @@ -685,8 +690,8 @@ void menu_select_game::build_available_list() int cx = driver_list::clone(*driver); if (cx != -1 && m_included[cx]) { - const game_driver *drv = &driver_list::driver(cx); - const rom_entry *parentrom = drv->rom; + auto drv = &driver_list::driver(cx); + auto parentrom = drv->rom; if ((rom = driver->rom) == parentrom) noroms = true; @@ -703,7 +708,7 @@ void menu_select_game::build_available_list() continue; UINT64 lenght = ROM_GETLENGTH(rom); - bool found = false; + auto found = false; for (parentrom = drv->rom; !ROMENTRY_ISEND(parentrom) && found == false; ++parentrom) { if (ROMENTRY_ISFILE(parentrom) && ROM_GETLENGTH(parentrom) == lenght) @@ -796,8 +801,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // get the size of the text for (int line = 0; line < 2; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(width, maxwidth); } @@ -825,8 +830,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // draw the text within it for (int line = 0; line < 2; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } @@ -951,8 +956,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } @@ -984,8 +989,8 @@ void menu_select_game::custom_render(void *selectedref, float top, float bottom, // draw all lines for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } } @@ -1028,8 +1033,7 @@ void menu_select_game::inkey_select(const event *menu_event) { if (m_prev_selected != nullptr) menu::stack_push(ui(), container, (const game_driver *)m_prev_selected); - else - return; + return; } // special case for configure plugins @@ -1093,18 +1097,16 @@ void menu_select_game::inkey_select_favorite(const event *menu_event) // special case for configure options if ((FPTR)ui_swinfo == CONF_OPTS) menu::stack_push(ui(), container); - /* special case for configure machine TODO + // special case for configure machine else if ((FPTR)ui_swinfo == CONF_MACHINE) { if (m_prev_selected != nullptr) { ui_software_info *swinfo = (ui_software_info *)m_prev_selected; - if (swinfo->startempty == 1) - menu::stack_push(ui(), container, swinfo->driver); + menu::stack_push(ui(), container, (const game_driver *)swinfo->driver); } - else - return; - } */ + return; + } // special case for configure plugins else if ((FPTR)ui_swinfo == CONF_PLUGINS) { @@ -1239,40 +1241,59 @@ void menu_select_game::inkey_special(const event *menu_event) } -void menu_select_game::inkey_configure(const event *menu_event) +void menu_select_game::inkey_navigation() { - if (is_focus(focused_menu::main)) + switch (get_focus()) { - if (selected <= visible_items) - { - m_prev_selected = item[selected].ref; - selected = visible_items + 1; - } - else - { - if (ui_globals::panels_status != HIDE_LEFT_PANEL) - set_focus(focused_menu::left); - - else if (ui_globals::panels_status == HIDE_BOTH) + case focused_menu::main: + if (selected <= visible_items) { + m_prev_selected = item[selected].ref; + selected = visible_items + 1; + } + else + { + if (ui_globals::panels_status != HIDE_LEFT_PANEL) + set_focus(focused_menu::left); + + else if (ui_globals::panels_status == HIDE_BOTH) + { + for (int x = 0; x < item.size(); ++x) + if (item[x].ref == m_prev_selected) + selected = x; + } + else + { + set_focus(focused_menu::righttop); + } + } + break; + + case focused_menu::left: + if (ui_globals::panels_status != HIDE_RIGHT_PANEL) + { + set_focus(focused_menu::righttop); + } + else + { + set_focus(focused_menu::main); + if (m_prev_selected == nullptr) + { + selected = 0; + return; + } + for (int x = 0; x < item.size(); ++x) if (item[x].ref == m_prev_selected) selected = x; } - else - { - set_focus(focused_menu::righttop); - } - } - } - else if (is_focus(focused_menu::left)) - { - if (ui_globals::panels_status != HIDE_RIGHT_PANEL) - { - set_focus(focused_menu::righttop); - } - else - { + break; + + case focused_menu::righttop: + set_focus(focused_menu::rightbottom); + break; + + case focused_menu::rightbottom: set_focus(focused_menu::main); if (m_prev_selected == nullptr) { @@ -1283,24 +1304,7 @@ void menu_select_game::inkey_configure(const event *menu_event) for (int x = 0; x < item.size(); ++x) if (item[x].ref == m_prev_selected) selected = x; - } - } - else if (is_focus(focused_menu::righttop)) - { - set_focus(focused_menu::rightbottom); - } - else if (is_focus(focused_menu::rightbottom)) - { - set_focus(focused_menu::main); - if (m_prev_selected == nullptr) - { - selected = 0; - return; - } - - for (int x = 0; x < item.size(); ++x) - if (item[x].ref == m_prev_selected) - selected = x; + break; } } @@ -1677,6 +1681,9 @@ void menu_select_game::init_sorted_list() c_year::set(driver->year); } + for (auto & e : c_mnfct::uimap) + c_mnfct::ui.emplace_back(e.first); + // sort manufacturers - years and driver std::stable_sort(c_mnfct::ui.begin(), c_mnfct::ui.end()); std::stable_sort(c_year::ui.begin(), c_year::ui.end()); @@ -1860,7 +1867,7 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) menu::highlight(container, x1, y1, x2, y1+ line_height_max, bgcolor); } - if (highlight == filter && is_focus(focused_menu::left)) + if (highlight == filter && get_focus() == focused_menu::left) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1898,8 +1905,8 @@ float menu_select_game::draw_left_panel(float x1, float y1, float x2, float y2) convert_command_glyph(str); } - ui().draw_text_full(container, str.c_str(), x1t, y1, x2 - x1, JUSTIFY_LEFT, WRAP_NEVER, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); + ui().draw_text_full(container, str.c_str(), x1t, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); y1 += line_height_max; } @@ -2007,15 +2014,15 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy for (int x = UI_FIRST_LOAD; x < UI_LAST_LOAD; ++x) { - ui().draw_text_full(container, _(dats_info[x]), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, - WRAP_NEVER, DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); + ui().draw_text_full(container, _(dats_info[x]), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::NEVER, mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); txt_length += 0.01f; title_size = (std::max)(txt_length, title_size); } rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -2032,8 +2039,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, - WRAP_NEVER, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); + ui().draw_text_full(container, snaptext.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::curdats_view, UI_FIRST_LOAD, UI_LAST_LOAD, title_size); @@ -2069,8 +2076,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy if (buffer.empty()) { - ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, JUSTIFY_CENTER, - WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); return; } else if (ui_globals::curdats_view != UI_STORY_LOAD && ui_globals::curdats_view != UI_COMMAND_LOAD) @@ -2108,8 +2115,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy size_t last_underscore = tempbuf.find_last_of("_"); if (last_underscore == std::string::npos) { - ui().draw_text_full(container, tempbuf.c_str(), origx1, oy1, origx2 - origx1, JUSTIFY_CENTER, - WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); + ui().draw_text_full(container, tempbuf.c_str(), origx1, oy1, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); } else { @@ -2120,11 +2127,11 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy float item_width; ui().draw_text_full(container, first_part.c_str(), effective_left, oy1, effective_width, - JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &item_width, nullptr, tmp_size2); + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &item_width, nullptr, tmp_size2); ui().draw_text_full(container, last_part.c_str(), effective_left + item_width, oy1, - origx2 - origx1 - 2.0f * gutter_width - item_width, JUSTIFY_RIGHT, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); + origx2 - origx1 - 2.0f * gutter_width - item_width, ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size2); } } @@ -2143,19 +2150,19 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy std::string first_part(tempbuf.substr(0, first_dspace)); std::string last_part(tempbuf.substr(first_dspace + 1)); strtrimspace(last_part); - ui().draw_text_full(container, first_part.c_str(), effective_left, oy1, effective_width, JUSTIFY_LEFT, - WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); + ui().draw_text_full(container, first_part.c_str(), effective_left, oy1, effective_width, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); ui().draw_text_full(container, last_part.c_str(), effective_left, oy1, origx2 - origx1 - 2.0f * gutter_width, - JUSTIFY_RIGHT, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); + ui::text_layout::RIGHT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); } else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, JUSTIFY_LEFT, - WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); + ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, tmp_size3); } else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, JUSTIFY_LEFT, - WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); oy1 += (line_height * text_size); } @@ -2172,8 +2179,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy // apply title to right panel if (soft->usage.empty()) { - ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); ui_globals::cur_sw_dats_view = 0; } else @@ -2186,15 +2193,15 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy for (auto & elem: t_text) { - ui().draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); + ui().draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_length, nullptr); txt_length += 0.01f; title_size = (std::max)(txt_length, title_size); } rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -2207,7 +2214,7 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); ui().draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::cur_sw_dats_view, 0, 1, title_size); } @@ -2230,8 +2237,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy if (buffer.empty()) { - ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, JUSTIFY_CENTER, - WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); return; } else @@ -2257,8 +2264,8 @@ void menu_select_game::infos_render(void *selectedref, float origx1, float origy else if (r == r_visible_lines - 1 && itemline != totallines - 1) info_arrow(1, origx1, origx2, oy1, line_height, text_size, ud_arrow_width); else - ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, JUSTIFY_LEFT, - WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, ui::text_layout::LEFT, + ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); oy1 += (line_height * text_size); } @@ -2402,7 +2409,7 @@ void menu_select_game::arts_render(void *selectedref, float origx1, float origy1 olddriver = driver; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, false); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } @@ -2491,7 +2498,7 @@ void menu_select_game::arts_render(void *selectedref, float origx1, float origy1 oldsoft = soft; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, true); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } diff --git a/src/frontend/mame/ui/selgame.h b/src/frontend/mame/ui/selgame.h index fc4281d9117..074db944b4c 100644 --- a/src/frontend/mame/ui/selgame.h +++ b/src/frontend/mame/ui/selgame.h @@ -81,7 +81,7 @@ private: void inkey_select_favorite(const event *menu_event); void inkey_special(const event *menu_event); void inkey_export(); - void inkey_configure(const event *menu_event); + void inkey_navigation(); }; } // namespace ui diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp index e650ce3ae1a..95f89bcb8dd 100644 --- a/src/frontend/mame/ui/selsoft.cpp +++ b/src/frontend/mame/ui/selsoft.cpp @@ -184,11 +184,11 @@ void menu_select_software::handle() else if (menu_event->iptkey == IPT_UI_SELECT) { // handle selections - if (is_focus(focused_menu::main)) + if (get_focus() == focused_menu::main) { inkey_select(menu_event); } - else if (is_focus(focused_menu::left)) + else if (get_focus() == focused_menu::left) { l_sw_hover = highlight; check_filter = true; @@ -300,14 +300,14 @@ void menu_select_software::handle() } else if (menu_event->iptkey == IPT_UI_CONFIGURE) - inkey_configure(menu_event); + inkey_navigation(); } if (menu_event && !menu_event->itemref) { if (menu_event->iptkey == IPT_UI_CONFIGURE) { - inkey_configure(menu_event); + inkey_navigation(); } else if (menu_event->iptkey == IPT_UI_LEFT) { @@ -363,7 +363,7 @@ void menu_select_software::handle() // handle UI_DOWN_FILTER highlight++; } - else if (menu_event->iptkey == IPT_OTHER && is_focus(focused_menu::left)) + else if (menu_event->iptkey == IPT_OTHER && get_focus() == focused_menu::left) { l_sw_hover = highlight; check_filter = true; @@ -375,7 +375,7 @@ void menu_select_software::handle() if (ui_error) ui().draw_text_box(container, _("The selected software is missing one or more required files. " "Please select a different software.\n\nPress any key to continue."), - JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR); + ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); // handle filters selection from key shortcuts if (check_filter) @@ -493,7 +493,7 @@ void menu_select_software::populate() (void *)m_searchlist[curitem]); } - item_append(MENU_SEPARATOR_ITEM, nullptr, flags_ui, nullptr); + item_append(menu_item_type::SEPARATOR); // configure the custom rendering customtop = 4.0f * ui().get_line_height() + 5.0f * UI_BOX_TB_BORDER; @@ -688,8 +688,8 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot for (int line = 0; line < 3; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(width, maxwidth); } @@ -717,8 +717,8 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot // draw the text within it for (int line = 0; line < 3; ++line) { - ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } @@ -837,8 +837,8 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, elem.c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } @@ -870,8 +870,8 @@ void menu_select_software::custom_render(void *selectedref, float top, float bot // draw all lines for (auto & elem : tempbuf) { - ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); + ui().draw_text_full(container, elem.c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); y1 += ui().get_line_height(); } } @@ -987,40 +987,59 @@ void menu_select_software::inkey_special(const event *menu_event) } -void menu_select_software::inkey_configure(const event *menu_event) +void menu_select_software::inkey_navigation() { - if (is_focus(focused_menu::main)) + switch (get_focus()) { - if (selected <= visible_items) - { - m_prev_selected = item[selected].ref; - selected = visible_items + 1; - } - else - { - if (ui_globals::panels_status != HIDE_LEFT_PANEL) - set_focus(focused_menu::left); - - else if (ui_globals::panels_status == HIDE_BOTH) + case focused_menu::main: + if (selected <= visible_items) { + m_prev_selected = item[selected].ref; + selected = visible_items + 1; + } + else + { + if (ui_globals::panels_status != HIDE_LEFT_PANEL) + set_focus(focused_menu::left); + + else if (ui_globals::panels_status == HIDE_BOTH) + { + for (int x = 0; x < item.size(); ++x) + if (item[x].ref == m_prev_selected) + selected = x; + } + else + { + set_focus(focused_menu::righttop); + } + } + break; + + case focused_menu::left: + if (ui_globals::panels_status != HIDE_RIGHT_PANEL) + { + set_focus(focused_menu::righttop); + } + else + { + set_focus(focused_menu::main); + if (m_prev_selected == nullptr) + { + selected = 0; + return; + } + for (int x = 0; x < item.size(); ++x) if (item[x].ref == m_prev_selected) selected = x; } - else - { - set_focus(focused_menu::righttop); - } - } - } - else if (is_focus(focused_menu::left)) - { - if (ui_globals::panels_status != HIDE_RIGHT_PANEL) - { - set_focus(focused_menu::righttop); - } - else - { + break; + + case focused_menu::righttop: + set_focus(focused_menu::rightbottom); + break; + + case focused_menu::rightbottom: set_focus(focused_menu::main); if (m_prev_selected == nullptr) { @@ -1031,24 +1050,7 @@ void menu_select_software::inkey_configure(const event *menu_event) for (int x = 0; x < item.size(); ++x) if (item[x].ref == m_prev_selected) selected = x; - } - } - else if (is_focus(focused_menu::righttop)) - { - set_focus(focused_menu::rightbottom); - } - else if (is_focus(focused_menu::rightbottom)) - { - set_focus(focused_menu::main); - if (m_prev_selected == nullptr) - { - selected = 0; - return; - } - - for (int x = 0; x < item.size(); ++x) - if (item[x].ref == m_prev_selected) - selected = x; + break; } } @@ -1243,12 +1245,12 @@ void menu_select_software::build_list(std::vector &s_drivers case UI_SW_AVAILABLE: if (s_driver->available) m_displaylist.push_back(s_driver); - break; + break; case UI_SW_UNAVAILABLE: if (!s_driver->available) m_displaylist.push_back(s_driver); - break; + break; case UI_SW_SUPPORTED: if (s_driver->supported == SOFTWARE_SUPPORTED_YES) @@ -1446,7 +1448,7 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float hover = phover + filter; } - if (highlight == filter && is_focus(focused_menu::left)) + if (highlight == filter && get_focus() == focused_menu::left) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1486,8 +1488,8 @@ float menu_select_software::draw_left_panel(float x1, float y1, float x2, float convert_command_glyph(str); } - ui().draw_text_full(container, str.c_str(), x1t, y1, x2 - x1, JUSTIFY_LEFT, WRAP_NEVER, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); + ui().draw_text_full(container, str.c_str(), x1t, y1, x2 - x1, ui::text_layout::LEFT, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, text_size); y1 += line_height; } @@ -1565,13 +1567,13 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o { float title_size = 0.0f; - ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &title_size, nullptr); + ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &title_size, nullptr); title_size += 0.01f; rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1583,8 +1585,8 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o ui().draw_textured_box(container, origx1 + ((middle - title_size) * 0.5f), origy1, origx1 + ((middle + title_size) * 0.5f), origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); - ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + ui().draw_text_full(container, _("History"), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr); ui_globals::cur_sw_dats_view = 0; } else @@ -1597,15 +1599,15 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o for (auto & elem : t_text) { - ui().draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_NEVER, - DRAW_NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr); + ui().draw_text_full(container, elem.c_str(), origx1, origy1, origx2 - origx1, ui::text_layout::CENTER, ui::text_layout::NEVER, + mame_ui_manager::NONE, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, &txt_lenght, nullptr); txt_lenght += 0.01f; title_size = MAX(txt_lenght, title_size); } rgb_t fgcolor = UI_TEXT_COLOR; rgb_t bgcolor = UI_TEXT_BG_COLOR; - if (is_focus(focused_menu::rightbottom)) + if (get_focus() == focused_menu::rightbottom) { fgcolor = rgb_t(0xff, 0xff, 0xff, 0x00); bgcolor = rgb_t(0xff, 0xff, 0xff, 0xff); @@ -1623,7 +1625,7 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o origy1 + line_height, bgcolor, rgb_t(255, 43, 43, 43), hilight_main_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_TEXWRAP(TRUE)); ui().draw_text_full(container, t_text[ui_globals::cur_sw_dats_view].c_str(), origx1, origy1, origx2 - origx1, - JUSTIFY_CENTER, WRAP_NEVER, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); + ui::text_layout::CENTER, ui::text_layout::NEVER, mame_ui_manager::NORMAL, fgcolor, bgcolor, nullptr, nullptr, tmp_size); draw_common_arrow(origx1, origy1, origx2, origy2, ui_globals::cur_sw_dats_view, 0, 1, title_size); } @@ -1646,8 +1648,8 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o if (buffer.empty()) { - ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, JUSTIFY_CENTER, - WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("No Infos Available"), origx1, (origy2 + origy1) * 0.5f, origx2 - origx1, ui::text_layout::CENTER, + ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); return; } else @@ -1675,7 +1677,7 @@ void menu_select_software::infos_render(void *selectedref, float origx1, float o info_arrow(1, origx1, origx2, oy1, line_height, text_size, ud_arrow_width); else ui().draw_text_full(container, tempbuf.c_str(), origx1 + gutter_width, oy1, origx2 - origx1, - JUSTIFY_LEFT, WRAP_TRUNCATE, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, + ui::text_layout::LEFT, ui::text_layout::TRUNCATE, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr, text_size); oy1 += (line_height * text_size); } @@ -1767,7 +1769,7 @@ void menu_select_software::arts_render(void *selectedref, float origx1, float or olddriver = driver; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, false); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } @@ -1856,7 +1858,7 @@ void menu_select_software::arts_render(void *selectedref, float origx1, float or oldsoft = soft; ui_globals::switch_image = false; - arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2, true); + arts_render_images(tmp_bitmap, origx1, origy1, origx2, origy2); auto_free(machine(), tmp_bitmap); } @@ -1984,8 +1986,8 @@ void software_parts::handle() void software_parts::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Software part selection:"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Software part selection:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -2004,8 +2006,8 @@ void software_parts::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Software part selection:"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Software part selection:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } //------------------------------------------------- @@ -2125,8 +2127,8 @@ void bios_selection::handle() void bios_selection::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Bios selection:"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Bios selection:"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -2145,8 +2147,8 @@ void bios_selection::custom_render(void *selectedref, float top, float bottom, f y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Bios selection:"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Bios selection:"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } } // namespace ui diff --git a/src/frontend/mame/ui/selsoft.h b/src/frontend/mame/ui/selsoft.h index f5cca6a2ac5..478f7add19d 100644 --- a/src/frontend/mame/ui/selsoft.h +++ b/src/frontend/mame/ui/selsoft.h @@ -61,7 +61,7 @@ private: // handlers void inkey_select(const event *menu_event); void inkey_special(const event *menu_event); - void inkey_configure(const event *menu_event); + void inkey_navigation(); }; class software_parts : public menu diff --git a/src/frontend/mame/ui/simpleselgame.cpp b/src/frontend/mame/ui/simpleselgame.cpp index a29cf56e385..e2ca4ff6d55 100644 --- a/src/frontend/mame/ui/simpleselgame.cpp +++ b/src/frontend/mame/ui/simpleselgame.cpp @@ -122,7 +122,7 @@ void simple_menu_select_game::handle() inkey_select(menu_event); break; case IPT_UI_CANCEL: - inkey_cancel(menu_event); + inkey_cancel(); break; case IPT_SPECIAL: inkey_special(menu_event); @@ -136,7 +136,7 @@ void simple_menu_select_game::handle() ui().draw_text_box(container, "The selected game is missing one or more required ROM or CHD images. " "Please select a different game.\n\nPress any key to continue.", - JUSTIFY_CENTER, 0.5f, 0.5f, UI_RED_COLOR); + ui::text_layout::CENTER, 0.5f, 0.5f, UI_RED_COLOR); } @@ -182,7 +182,7 @@ void simple_menu_select_game::inkey_select(const event *menu_event) // inkey_cancel //------------------------------------------------- -void simple_menu_select_game::inkey_cancel(const event *menu_event) +void simple_menu_select_game::inkey_cancel() { // escape pressed with non-empty text clears the text if (m_search[0] != 0) @@ -298,8 +298,8 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float tempbuf[0] = _("Type name or select: (random)"); // get the size of the text - ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf[0].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(width, origx2 - origx1); @@ -318,8 +318,8 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, tempbuf[0].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, tempbuf[0].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); // determine the text to render below driver = ((FPTR)selectedref > skip_main_items) ? (const game_driver *)selectedref : nullptr; @@ -388,8 +388,8 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float maxwidth = origx2 - origx1; for (line = 0; line < 4; line++) { - ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, tempbuf[line].c_str(), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; maxwidth = MAX(maxwidth, width); } @@ -418,8 +418,8 @@ void simple_menu_select_game::custom_render(void *selectedref, float top, float // draw all lines for (line = 0; line < 4; line++) { - ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, tempbuf[line].c_str(), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); y1 += ui().get_line_height(); } } diff --git a/src/frontend/mame/ui/simpleselgame.h b/src/frontend/mame/ui/simpleselgame.h index 707777937b4..ee185d5b4a6 100644 --- a/src/frontend/mame/ui/simpleselgame.h +++ b/src/frontend/mame/ui/simpleselgame.h @@ -44,7 +44,7 @@ private: // internal methods void build_driver_list(); void inkey_select(const event *menu_event); - void inkey_cancel(const event *menu_event); + void inkey_cancel(); void inkey_special(const event *menu_event); }; diff --git a/src/frontend/mame/ui/slider.cpp b/src/frontend/mame/ui/slider.cpp new file mode 100644 index 00000000000..f9eb861c994 --- /dev/null +++ b/src/frontend/mame/ui/slider.cpp @@ -0,0 +1,20 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz + +/*************************************************************************** + + ui/slider.h + + Internal data representation for an adjustment slider. + +***************************************************************************/ + +#include "slider.h" + +slider_state::slider_state() +{ +} + +slider_state::~slider_state() +{ +} diff --git a/src/frontend/mame/ui/sliders.cpp b/src/frontend/mame/ui/sliders.cpp index 867c396fc79..31904c73a02 100644 --- a/src/frontend/mame/ui/sliders.cpp +++ b/src/frontend/mame/ui/sliders.cpp @@ -27,19 +27,19 @@ menu_sliders::~menu_sliders() { } -/*------------------------------------------------- - menu_sliders - handle the sliders menu --------------------------------------------------*/ +//------------------------------------------------- +// menu_sliders - handle the sliders menu +//------------------------------------------------- void menu_sliders::handle() { const event *menu_event; - /* process the menu */ + // process the menu menu_event = process(PROCESS_LR_REPEAT | (m_hidden ? PROCESS_CUSTOM_ONLY : 0)); if (menu_event != nullptr) { - /* handle keys if there is a valid item selected */ + // handle keys if there is a valid item selected if (menu_event->itemref != nullptr && menu_event->type == menu_item_type::SLIDER) { const slider_state *slider = (const slider_state *)menu_event->itemref; @@ -51,7 +51,7 @@ void menu_sliders::handle() switch (menu_event->iptkey) { - /* toggle visibility */ + // toggle visibility case IPT_UI_ON_SCREEN_DISPLAY: if (m_menuless_mode) menu::stack_pop(machine()); @@ -59,7 +59,7 @@ void menu_sliders::handle() m_hidden = !m_hidden; break; - /* decrease value */ + // decrease value case IPT_UI_LEFT: if (alt_pressed && shift_pressed) increment = -1; @@ -73,7 +73,7 @@ void menu_sliders::handle() increment = -slider->incval; break; - /* increase value */ + // increase value case IPT_UI_RIGHT: if (alt_pressed && shift_pressed) increment = 1; @@ -87,40 +87,40 @@ void menu_sliders::handle() increment = slider->incval; break; - /* restore default */ + // restore default case IPT_UI_SELECT: increment = slider->defval - curvalue; break; } - /* handle any changes */ + // handle any changes if (increment != 0) { INT32 newvalue = curvalue + increment; - /* clamp within bounds */ + // clamp within bounds if (newvalue < slider->minval) newvalue = slider->minval; if (newvalue > slider->maxval) newvalue = slider->maxval; - /* update the slider and recompute the menu */ + // update the slider and recompute the menu slider->update(machine(), slider->arg, slider->id, nullptr, newvalue); reset(reset_options::REMEMBER_REF); } } - /* if we are selecting an invalid item and we are hidden, skip to the next one */ + // if we are selecting an invalid item and we are hidden, skip to the next one else if (m_hidden) { - /* if we got here via up or page up, select the previous item */ + // if we got here via up or page up, select the previous item if (menu_event->iptkey == IPT_UI_UP || menu_event->iptkey == IPT_UI_PAGE_UP) { selected = (selected + item.size() - 1) % item.size(); validate_selection(-1); } - /* otherwise select the next item */ + // otherwise select the next item else if (menu_event->iptkey == IPT_UI_DOWN || menu_event->iptkey == IPT_UI_PAGE_DOWN) { selected = (selected + 1) % item.size(); @@ -131,16 +131,16 @@ void menu_sliders::handle() } -/*------------------------------------------------- - menu_sliders_populate - populate the sliders - menu --------------------------------------------------*/ +//------------------------------------------------- +// menu_sliders_populate - populate the sliders +// menu +//------------------------------------------------- void menu_sliders::populate() { std::string tempstring; - /* add UI sliders */ + // add UI sliders std::vector ui_sliders = ui().get_slider_list(); for (menu_item item : ui_sliders) { @@ -163,7 +163,7 @@ void menu_sliders::populate() item_append(menu_item_type::SEPARATOR); - /* add OSD options */ + // add OSD options std::vector osd_sliders = machine().osd().get_slider_list(); for (menu_item item : osd_sliders) { @@ -187,10 +187,10 @@ void menu_sliders::populate() custombottom = 2.0f * ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER; } -/*------------------------------------------------- - menu_sliders_custom_render - perform our special - rendering --------------------------------------------------*/ +//------------------------------------------------- +// menu_sliders_custom_render - perform our special +// rendering +//------------------------------------------------- void menu_sliders::custom_render(void *selectedref, float top, float bottom, float x1, float y1, float x2, float y2) { @@ -204,78 +204,78 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo float text_height; INT32 curval; - /* determine the current value and text */ + // determine the current value and text curval = curslider->update(machine(), curslider->arg, curslider->id, &tempstring, SLIDER_NOCHANGE); - /* compute the current and default percentages */ + // compute the current and default percentages percentage = (float)(curval - curslider->minval) / (float)(curslider->maxval - curslider->minval); default_percentage = (float)(curslider->defval - curslider->minval) / (float)(curslider->maxval - curslider->minval); - /* assemble the text */ + // assemble the text tempstring.insert(0, " ").insert(0, curslider->description); - /* move us to the bottom of the screen, and expand to full width */ + // move us to the bottom of the screen, and expand to full width y2 = 1.0f - UI_BOX_TB_BORDER; y1 = y2 - bottom; x1 = UI_BOX_LR_BORDER; x2 = 1.0f - UI_BOX_LR_BORDER; - /* draw extra menu area */ + // draw extra menu area ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR); y1 += UI_BOX_TB_BORDER; - /* determine the text height */ + // determine the text height ui().draw_text_full(container, tempstring.c_str(), 0, 0, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, nullptr, &text_height); + ui::text_layout::CENTER, ui::text_layout::TRUNCATE, mame_ui_manager::NONE, rgb_t::white, rgb_t::black, nullptr, &text_height); - /* draw the thermometer */ + // draw the thermometer bar_left = x1 + UI_BOX_LR_BORDER; bar_area_top = y1; bar_width = x2 - x1 - 2.0f * UI_BOX_LR_BORDER; bar_area_height = line_height; - /* compute positions */ + // compute positions bar_top = bar_area_top + 0.125f * bar_area_height; bar_bottom = bar_area_top + 0.875f * bar_area_height; default_x = bar_left + bar_width * default_percentage; current_x = bar_left + bar_width * percentage; - /* fill in the percentage */ + // fill in the percentage container->add_rect(bar_left, bar_top, current_x, bar_bottom, UI_SLIDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - /* draw the top and bottom lines */ + // draw the top and bottom lines container->add_line(bar_left, bar_top, bar_left + bar_width, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); container->add_line(bar_left, bar_bottom, bar_left + bar_width, bar_bottom, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - /* draw default marker */ + // draw default marker container->add_line(default_x, bar_area_top, default_x, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); container->add_line(default_x, bar_bottom, default_x, bar_area_top + bar_area_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); - /* draw the actual text */ + // draw the actual text ui().draw_text_full(container, tempstring.c_str(), x1 + UI_BOX_LR_BORDER, y1 + line_height, x2 - x1 - 2.0f * UI_BOX_LR_BORDER, - JUSTIFY_CENTER, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, &text_height); + ui::text_layout::CENTER, ui::text_layout::WORD, mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, &text_height); } } -/*------------------------------------------------- - slider_ui_handler - pushes the slider - menu on the stack and hands off to the - standard menu handler - -------------------------------------------------*/ +//------------------------------------------------- +// slider_ui_handler - pushes the slider +// menu on the stack and hands off to the +// standard menu handler +//------------------------------------------------- -UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui, bool state) +UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui) { UINT32 result; - /* if this is the first call, push the sliders menu */ - if (state) + // if this is the first call, push the sliders menu + if (topmost_menu() == nullptr) menu::stack_push(mui, container, true); - /* handle standard menus */ + // handle standard menus result = menu::ui_handler(container, mui); - /* if we are cancelled, pop the sliders menu */ + // if we are cancelled, pop the sliders menu if (result == UI_HANDLER_CANCEL) menu::stack_pop(mui.machine()); diff --git a/src/frontend/mame/ui/sliders.h b/src/frontend/mame/ui/sliders.h index 726c5c0b81d..bfb5bc26f4e 100644 --- a/src/frontend/mame/ui/sliders.h +++ b/src/frontend/mame/ui/sliders.h @@ -27,7 +27,7 @@ public: virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; - static UINT32 ui_handler(render_container *container, mame_ui_manager &mui, bool state); + static UINT32 ui_handler(render_container *container, mame_ui_manager &mui); private: enum { diff --git a/src/frontend/mame/ui/slotopt.cpp b/src/frontend/mame/ui/slotopt.cpp index 2da3a411599..5c97dc594a0 100644 --- a/src/frontend/mame/ui/slotopt.cpp +++ b/src/frontend/mame/ui/slotopt.cpp @@ -49,12 +49,12 @@ int menu_slot_devices::slot_get_current_index(device_slot_interface &slot) if (current != nullptr) { int val = 0; - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { - if (&option == current) + if (option.second.get() == current) return val; - if (option.selectable()) + if (option.second->selectable()) val++; } } @@ -68,8 +68,8 @@ int menu_slot_devices::slot_get_current_index(device_slot_interface &slot) int menu_slot_devices::slot_get_length(device_slot_interface &slot) { int val = 0; - for (const device_slot_option &option : slot.option_list()) - if (option.selectable()) + for (auto &option : slot.option_list()) + if (option.second->selectable()) val++; return val; @@ -117,12 +117,12 @@ const char *menu_slot_devices::slot_get_option(device_slot_interface &slot, int if (index >= 0) { int val = 0; - for (const device_slot_option &option : slot.option_list()) + for (auto &option : slot.option_list()) { if (val == index) - return option.name(); + return option.second->name(); - if (option.selectable()) + if (option.second->selectable()) val++; } } diff --git a/src/frontend/mame/ui/sndmenu.cpp b/src/frontend/mame/ui/sndmenu.cpp index 486c3ad53a6..72c5068c3ac 100644 --- a/src/frontend/mame/ui/sndmenu.cpp +++ b/src/frontend/mame/ui/sndmenu.cpp @@ -146,8 +146,8 @@ void menu_sound_options::populate() void menu_sound_options::custom_render(void *selectedref, float top, float bottom, float origx1, float origy1, float origx2, float origy2) { float width; - ui().draw_text_full(container, _("Sound Options"), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _("Sound Options"), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -166,8 +166,8 @@ void menu_sound_options::custom_render(void *selectedref, float top, float botto y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _("Sound Options"), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _("Sound Options"), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); } } // namespace ui diff --git a/src/frontend/mame/ui/submenu.cpp b/src/frontend/mame/ui/submenu.cpp index 2d93b7cc4f0..6cabf4e784a 100644 --- a/src/frontend/mame/ui/submenu.cpp +++ b/src/frontend/mame/ui/submenu.cpp @@ -414,8 +414,8 @@ void submenu::custom_render(void *selectedref, float top, float bottom, float or { float width; - ui().draw_text_full(container, _(m_options[0].description), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NONE, rgb_t::white, rgb_t::black, &width, nullptr); + ui().draw_text_full(container, _(m_options[0].description), 0.0f, 0.0f, 1.0f, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NONE, rgb_t::white, rgb_t::black, &width, nullptr); width += 2 * UI_BOX_LR_BORDER; float maxwidth = MAX(origx2 - origx1, width); @@ -434,16 +434,16 @@ void submenu::custom_render(void *selectedref, float top, float bottom, float or y1 += UI_BOX_TB_BORDER; // draw the text within it - ui().draw_text_full(container, _(m_options[0].description), x1, y1, x2 - x1, JUSTIFY_CENTER, WRAP_TRUNCATE, - DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); + ui().draw_text_full(container, _(m_options[0].description), x1, y1, x2 - x1, ui::text_layout::CENTER, ui::text_layout::TRUNCATE, + mame_ui_manager::NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, nullptr); if (selectedref != nullptr) { option &selected_sm_option = *reinterpret_cast