diff --git a/CMakeLists.txt b/CMakeLists.txt index af79328..1af0e50 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -79,17 +79,33 @@ list(APPEND OSTD_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/src/ostd/utils/Time.cpp ) list(APPEND OGFX_SOURCE_FILES - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/FontUtils.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/WindowBase.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/BasicRenderer.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/RawTextInput.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Image.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/WindowBaseOutputHandler.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/PixelRenderer.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Animation.cpp + # sdl3_gfx + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.c + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.c + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.c + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.c + + # gui + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/gui/RawTextInput.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/gui/Window.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/gui/WindowOutputHandler.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/gui/Widgets.cpp + + # render + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/render/BasicRenderer.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/render/FontUtils.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/render/PixelRenderer.cpp + + # resources + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/resources/Image.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/resources/UbuntuMonoRegularTTF.cpp + + # utils + ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/utils/Animation.cpp ) list(APPEND TEST_SOURCE_FILES - ${CMAKE_CURRENT_LIST_DIR}/src/test.cpp + # ${CMAKE_CURRENT_LIST_DIR}/src/test/GraphicsWindowTest.cpp + ${CMAKE_CURRENT_LIST_DIR}/src/test/GuiTest.cpp ) #----------------------------------------------------------------------------------------- @@ -139,7 +155,7 @@ endif() if (WIN32) target_link_libraries(${OMNIA_GFX_LIB} PUBLIC mingw32) target_link_libraries(${OMNIA_STD_LIB} PUBLIC mingw32) - target_link_libraries(${OMNIA_GFX_LIB} PUBLIC SDL2main SDL2 SDL2_gfx SDL2_ttf SDL2_image) + target_link_libraries(${OMNIA_GFX_LIB} PUBLIC SDL3 SDL3_ttf SDL3_image) endif (WIN32) target_link_libraries(${OMNIA_GFX_LIB} PUBLIC ${OMNIA_STD_LIB}) @@ -177,6 +193,6 @@ elseif (UNIX) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN',-rpath,/usr/lib,-rpath,/usr/local/lib") target_link_libraries(${OMNIA_STD_LIB} PUBLIC tinfo boost_regex) target_link_libraries(${OMNIA_GFX_LIB} PUBLIC xcb xcb-randr) - target_link_libraries(${OMNIA_GFX_LIB} PUBLIC SDL2main SDL2 SDL2_gfx SDL2_ttf SDL2_image) + target_link_libraries(${OMNIA_GFX_LIB} PUBLIC SDL3 SDL3_ttf SDL3_image) endif () #----------------------------------------------------------------------------------------- diff --git a/README.md b/README.md index 2c8e642..facc846 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Once you have the **MSYS2 UCRT64 terminal** open, run theese two commands to pre ```bash pacman -Syuu -pacman -S --needed base-devel mingw-w64-ucrt-x86_64-clang mingw-w64-ucrt-x86_64-gdb mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-make mingw-w64-ucrt-x86_64-boost mingw-w64-ucrt-x86_64-SDL2 mingw-w64-ucrt-x86_64-SDL2_mixer mingw-w64-ucrt-x86_64-SDL2_image mingw-w64-ucrt-x86_64-SDL2_ttf mingw-w64-ucrt-x86_64-SDL2_gfx +pacman -S --needed base-devel mingw-w64-ucrt-x86_64-clang mingw-w64-ucrt-x86_64-gdb mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-make mingw-w64-ucrt-x86_64-boost mingw-w64-ucrt-x86_64-SDL3 mingw-w64-ucrt-x86_64-SDL3_mixer mingw-w64-ucrt-x86_64-SDL3_image mingw-w64-ucrt-x86_64-SDL3_ttf ``` #### Step 3: build OmniaFramework @@ -86,21 +86,21 @@ Installs the library MSYS2's UCRT64 profile. - **Arch Linux** ```bash -sudo pacman -S --needed base-devel clang gdb cmake make boost sdl2 sdl2_mixer sdl2_image sdl2_ttf sdl2_gfx +sudo pacman -S --needed base-devel clang gdb cmake make boost sdl3 sdl3_mixer sdl3_image sdl3_ttf ``` - **Ubuntu** ```bash sudo apt update && sudo apt upgrade -sudo apt install build-essential dkms linux-headers-$(uname -r) clang gdb make cmake libssl-dev libboost-all-dev libsdl2-dev libsdl2-mixer-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-gfx-dev libxcb-randr0-dev +sudo apt install build-essential dkms linux-headers-$(uname -r) clang gdb make cmake libssl-dev libboost-all-dev libsdl3-dev libsdl3-mixer-dev libsdl3-image-dev libsdl3-ttf-dev libxcb-randr0-dev ``` - **Fedora** ```bash sudo dnf update -sudo dnf install gcc gcc-c++ make clang gdb cmake clang-tools-extra boost boost-devel SDL2 SDL2_image SDL2_mixer SDL2_ttf SDL2_gfx SDL2-devel SDL2_image-devel SDL2_mixer-devel SDL2_ttf-devel SDL2_gfx-devel +sudo dnf install gcc gcc-c++ make clang gdb cmake clang-tools-extra boost boost-devel SDL3 SDL3_image SDL3_mixer SDL3_ttf SDL3-devel SDL3_image-devel SDL3_mixer-devel SDL3_ttf-devel ``` > **NOTE**: For other Linux distros, you need to install the same dependencies through your package manager. @@ -145,7 +145,7 @@ eval "$(/usr/local/bin/brew shellenv)" ##### Step 3: Install dependencies ```bash -brew install git llvm gdb cmake make boost sdl2 sdl2_mixer sdl2_image sdl2_ttf sdl2_gfx pkg-config +brew install git llvm gdb cmake make boost sdl3 sdl3_mixer sdl3_image sdl3_ttf pkg-config ``` ##### Step 4: Build OmniaFramework diff --git a/build b/build index 9b05374..b64c3fb 100755 --- a/build +++ b/build @@ -21,7 +21,7 @@ if [[ "$1" == "debug" || "$1" == "release" ]]; then rm -rf bin cmake -B bin -S ./ -G "$MAKEFILE_TYPE" -DCMAKE_BUILD_TYPE=$BUILD_TYPE $MAKE_COMMAND -C bin $NJOBS --no-print-directory - cp -r extra/* bin/ + find extra -mindepth 1 -maxdepth 1 -exec cp -r {} bin/ \; build_number=$(cat other/build.nr) build_number=$((build_number + 1)) truncate -s 0 other/build.nr @@ -34,7 +34,7 @@ elif [[ "$1" == "install" ]]; then ./install_release.sh cd .. else - cp -r extra/* bin/ + find extra -mindepth 1 -maxdepth 1 -exec cp -r {} bin/ \; printf "\n\033[0;32mBuilding Changes...\n\n\033[0m" $MAKE_COMMAND -C bin $NJOBS --no-print-directory if [[ "$1" == "run" ]]; then diff --git a/extra/res/test.png b/extra/res/test.png deleted file mode 100644 index ad258d3..0000000 Binary files a/extra/res/test.png and /dev/null differ diff --git a/extra/res/ttf/Courier Prime.ttf b/extra/res/ttf/Courier Prime.ttf deleted file mode 100644 index db4e6c1..0000000 Binary files a/extra/res/ttf/Courier Prime.ttf and /dev/null differ diff --git a/extra/res/ttf/MonospaceTypewriter.ttf b/extra/res/ttf/MonospaceTypewriter.ttf deleted file mode 100644 index 29e9a67..0000000 Binary files a/extra/res/ttf/MonospaceTypewriter.ttf and /dev/null differ diff --git a/extra/res/ttf/NK57 Monospace Cd Rg.otf b/extra/res/ttf/NK57 Monospace Cd Rg.otf deleted file mode 100644 index b9265fd..0000000 Binary files a/extra/res/ttf/NK57 Monospace Cd Rg.otf and /dev/null differ diff --git a/extra/res/ttf/Roboto-Regular.ttf b/extra/res/ttf/Roboto-Regular.ttf deleted file mode 100644 index 7d9a6c4..0000000 Binary files a/extra/res/ttf/Roboto-Regular.ttf and /dev/null differ diff --git a/extra/res/ttf/Roboto-Thin.ttf b/extra/res/ttf/Roboto-Thin.ttf deleted file mode 100644 index 861d63a..0000000 Binary files a/extra/res/ttf/Roboto-Thin.ttf and /dev/null differ diff --git a/extra/res/ttf/UbuntuMono-R.ttf b/extra/res/ttf/UbuntuMono-R.ttf deleted file mode 100644 index fdd309d..0000000 Binary files a/extra/res/ttf/UbuntuMono-R.ttf and /dev/null differ diff --git a/extra/res/ttf/cmunorm.ttf b/extra/res/ttf/cmunorm.ttf deleted file mode 100644 index 72cfd42..0000000 Binary files a/extra/res/ttf/cmunorm.ttf and /dev/null differ diff --git a/extra/res/ttf/digital7mono.ttf b/extra/res/ttf/digital7mono.ttf deleted file mode 100644 index a481b97..0000000 Binary files a/extra/res/ttf/digital7mono.ttf and /dev/null differ diff --git a/extra/res/ttf/joystix monospace.otf b/extra/res/ttf/joystix monospace.otf deleted file mode 100644 index 20a3100..0000000 Binary files a/extra/res/ttf/joystix monospace.otf and /dev/null differ diff --git a/extra/res/ttf/monofonto rg.otf b/extra/res/ttf/monofonto rg.otf deleted file mode 100644 index bca1ad6..0000000 Binary files a/extra/res/ttf/monofonto rg.otf and /dev/null differ diff --git a/extra/testMidiFile.mid b/extra/testMidiFile.mid deleted file mode 100644 index c0e937c..0000000 Binary files a/extra/testMidiFile.mid and /dev/null differ diff --git a/licences/SDL2_image-LICENSE.txt b/licences/SDL3-LICENSE.txt similarity index 93% rename from licences/SDL2_image-LICENSE.txt rename to licences/SDL3-LICENSE.txt index 52d0ed3..acaf5b2 100644 --- a/licences/SDL2_image-LICENSE.txt +++ b/licences/SDL3-LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (C) 1997-2025 Sam Lantinga +Copyright (C) 1997-2026 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/licences/SDL2_ttf-LICENSE.txt b/licences/SDL3_image-LICENSE.txt similarity index 93% rename from licences/SDL2_ttf-LICENSE.txt rename to licences/SDL3_image-LICENSE.txt index 52d0ed3..acaf5b2 100644 --- a/licences/SDL2_ttf-LICENSE.txt +++ b/licences/SDL3_image-LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (C) 1997-2025 Sam Lantinga +Copyright (C) 1997-2026 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/licences/SDL2-LICENSE.txt b/licences/SDL3_ttf-LICENSE.txt similarity index 88% rename from licences/SDL2-LICENSE.txt rename to licences/SDL3_ttf-LICENSE.txt index 23abb73..acaf5b2 100644 --- a/licences/SDL2-LICENSE.txt +++ b/licences/SDL3_ttf-LICENSE.txt @@ -1,5 +1,5 @@ -Copyright (C) 1997-2025 Sam Lantinga - +Copyright (C) 1997-2026 Sam Lantinga + 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. @@ -7,12 +7,11 @@ 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. + appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. - diff --git a/licences/Ubuntu-Font-LICENCE.txt b/licences/Ubuntu-Font-LICENCE.txt new file mode 100644 index 0000000..6e722c8 --- /dev/null +++ b/licences/Ubuntu-Font-LICENCE.txt @@ -0,0 +1,96 @@ +------------------------------- +UBUNTU FONT LICENCE Version 1.0 +------------------------------- + +PREAMBLE +This licence allows the licensed fonts to be used, studied, modified and +redistributed freely. The fonts, including any derivative works, can be +bundled, embedded, and redistributed provided the terms of this licence +are met. The fonts and derivatives, however, cannot be released under +any other licence. The requirement for fonts to remain under this +licence does not require any document created using the fonts or their +derivatives to be published under this licence, as long as the primary +purpose of the document is not to be a vehicle for the distribution of +the fonts. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this licence and clearly marked as such. This may +include source files, build scripts and documentation. + +"Original Version" refers to the collection of Font Software components +as received under this licence. + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to +a new environment. + +"Copyright Holder(s)" refers to all individuals and companies who have a +copyright ownership of the Font Software. + +"Substantially Changed" refers to Modified Versions which can be easily +identified as dissimilar to the Font Software by users of the Font +Software comparing the Original Version with the Modified Version. + +To "Propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification and with or without charging +a redistribution fee), making available to the public, and in some +countries other activities as well. + +PERMISSION & CONDITIONS +This licence does not grant any rights under trademark law and all such +rights are reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of the Font Software, to propagate the Font Software, subject to +the below conditions: + +1) Each copy of the Font Software must contain the above copyright +notice and this licence. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine- +readable metadata fields within text or binary files as long as those +fields can be easily viewed by the user. + +2) The font name complies with the following: +(a) The Original Version must retain its name, unmodified. +(b) Modified Versions which are Substantially Changed must be renamed to +avoid use of the name of the Original Version or similar names entirely. +(c) Modified Versions which are not Substantially Changed must be +renamed to both (i) retain the name of the Original Version and (ii) add +additional naming elements to distinguish the Modified Version from the +Original Version. The name of such Modified Versions must be the name of +the Original Version, with "derivative X" where X represents the name of +the new work, appended to that name. + +3) The name(s) of the Copyright Holder(s) and any contributor to the +Font Software shall not be used to promote, endorse or advertise any +Modified Version, except (i) as required by this licence, (ii) to +acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with +their explicit written permission. + +4) The Font Software, modified or unmodified, in part or in whole, must +be distributed entirely under this licence, and must not be distributed +under any other licence. The requirement for fonts to remain under this +licence does not affect any document created using the Font Software, +except any version of the Font Software extracted from a document +created using the Font Software may only be distributed under this +licence. + +TERMINATION +This licence becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER +DEALINGS IN THE FONT SOFTWARE. diff --git a/licences/midifile-LICENSE.txt b/licences/midifile-LICENSE.txt new file mode 100644 index 0000000..cc3340a --- /dev/null +++ b/licences/midifile-LICENSE.txt @@ -0,0 +1,23 @@ +Copyright (c) 1999-2018, Craig Stuart Sapp +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + and the following disclaimer in the documentation and/or other materials + provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 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. + diff --git a/licences/SDL2_gfx-LICENCE.txt b/licences/sdl3_gfx-LICENCE.txt similarity index 84% rename from licences/SDL2_gfx-LICENCE.txt rename to licences/sdl3_gfx-LICENCE.txt index f8f90c2..341dfd2 100644 --- a/licences/SDL2_gfx-LICENCE.txt +++ b/licences/sdl3_gfx-LICENCE.txt @@ -1,4 +1,7 @@ -Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.3.2, February 17th, 2026 + + Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -18,3 +21,5 @@ Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu + +*/ diff --git a/other/TODO.txt b/other/TODO.txt new file mode 100644 index 0000000..8144f94 --- /dev/null +++ b/other/TODO.txt @@ -0,0 +1,5 @@ +***Add Color constants to ostd::Color +Add MouseEntered/MouseExited callbacks +Fix mouse detection currently using local coordinates +implement JSON theme loading +Implemenmt MouseDragged callback diff --git a/other/changelog.txt b/other/changelog.txt deleted file mode 100644 index ee4f637..0000000 --- a/other/changelog.txt +++ /dev/null @@ -1,19 +0,0 @@ -[0.2.1958] -Added ostd::OutputHandlerBase::tab() virtual function -Added ogfx::WindowBaseOutputHandler class - -[0.2.1936] -Added JsonFile class to handle Json files -Added MidiParser class to parse Midi files - -[0.2.1923] -Added MacOS support - -[0.1.1823] -Added more Builtin signals - -[0.1.1818] -Added ostd::String::fixedLength(...) method, with corresponding 'new_fixedLength' version. -Added "KeyboardController" class to (implemented in ) to handle - keypresses in the console in a cross-platform way -Added helper functions in ostd::Utils for dealing with raw arrays diff --git a/other/create_release.sh b/other/create_release.sh index 5364366..1cb7819 100755 --- a/other/create_release.sh +++ b/other/create_release.sh @@ -34,24 +34,37 @@ elif [[ "$(uname -s)" == MINGW64_NT* ]]; then cp $MSYS_ROOT/ucrt64/bin/SDL2_ttf.dll $RELEASE_DIR/lib cp $MSYS_ROOT/ucrt64/bin/libSDL2_gfx-1-0-0.dll $RELEASE_DIR/lib fi +cp -r ../licences $RELEASE_DIR +cp ../LICENSE $RELEASE_DIR/licences/OmniaFramework-LICENCE.txt -mkdir -p $RELEASE_DIR/include/ostd/vendor +# OSTD mkdir -p $RELEASE_DIR/include/ostd/vendor/midifile mkdir -p $RELEASE_DIR/include/ostd/data mkdir -p $RELEASE_DIR/include/ostd/io mkdir -p $RELEASE_DIR/include/ostd/math mkdir -p $RELEASE_DIR/include/ostd/string mkdir -p $RELEASE_DIR/include/ostd/utils -mkdir -p $RELEASE_DIR/include/ogfx/ find ../src/ostd -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd \; find ../src/ostd/data -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/data \; find ../src/ostd/io -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/io \; find ../src/ostd/math -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/math \; find ../src/ostd/string -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/string \; find ../src/ostd/utils -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/utils \; -find ../src/ogfx -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx \; find ../src/ostd/vendor -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/vendor \; find ../src/ostd/vendor/midifile -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ostd/vendor/midifile \; cp -r ../src/ostd/vendor/nlohmann $RELEASE_DIR/include/ostd/vendor/ -cp -r ../licences $RELEASE_DIR -cp ../LICENSE $RELEASE_DIR/licences/OmniaFramework-LICENCE.txt + + +# OGFX +mkdir -p $RELEASE_DIR/include/ogfx/vendor/sdl3_gfx +mkdir -p $RELEASE_DIR/include/ogfx/gui +mkdir -p $RELEASE_DIR/include/ogfx/render +mkdir -p $RELEASE_DIR/include/ogfx/resources +mkdir -p $RELEASE_DIR/include/ogfx/utils +find ../src/ogfx -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx \; +find ../src/ogfx/gui -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx/gui \; +find ../src/ogfx/render -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx/render \; +find ../src/ogfx/resources -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx/resources \; +find ../src/ogfx/utils -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx/utils \; +find ../src/ogfx/vendor -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx/vendor \; +find ../src/ogfx/vendor/sdl3_gfx -maxdepth 1 -name "*.h*" -exec cp {} $RELEASE_DIR/include/ogfx/vendor/sdl3_gfx \; diff --git a/src/ogfx/Image.cpp b/src/ogfx/Image.cpp deleted file mode 100644 index c456cb9..0000000 --- a/src/ogfx/Image.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "Image.hpp" -#include "io/Logger.hpp" -#include -#include -#include - -namespace ogfx -{ - void Image::destroy(void) - { - SDL_DestroyTexture(m_sdl_texture); - m_loaded = false; - m_sdl_texture = nullptr; - m_width = 0; - m_height = 0; - } - - Image& Image::loadFromFile(const ostd::String& filePath, BasicRenderer2D& gfx) - { - if (!gfx.isInitialized()) - return *this; //TODO: Error - m_sdl_texture = IMG_LoadTexture(gfx.getWindow().getSDLRenderer(), filePath.c_str()); - if (!m_sdl_texture) - { - OX_ERROR("Failed to load Image: %s", IMG_GetError()); - return *this; - } - SDL_QueryTexture(m_sdl_texture, nullptr, nullptr, &m_width, &m_height); - m_loaded = true; - setTypeName("ogfx::Image"); - validate(); - return *this; - } -} diff --git a/src/ogfx/WindowBase.cpp b/src/ogfx/WindowBase.cpp deleted file mode 100644 index 272fce5..0000000 --- a/src/ogfx/WindowBase.cpp +++ /dev/null @@ -1,215 +0,0 @@ -#include "WindowBase.hpp" -#include "../ostd/utils/Time.hpp" -#include -#include - -namespace ogfx -{ - WindowBase::~WindowBase(void) - { - onDestroy(); - SDL_FreeCursor(m_cursor_IBeam); - SDL_FreeCursor(m_cursor_Arrow); - SDL_DestroyRenderer(m_renderer); - SDL_DestroyWindow(m_window); - // IMG_Quit(); - SDL_Quit(); - TTF_Quit(); - } - - void WindowBase::initialize(int32_t width, int32_t height, const ostd::String& windowTitle) - { - if (m_initialized) return; - m_windowWidth = width; - m_windowHeight = height; - m_title = windowTitle; - if (SDL_Init(SDL_INIT_VIDEO) != 0) - { - printf( "SDL could not initialize! Error: %s\n", SDL_GetError() ); - exit(1); - } - int imgFlags = IMG_INIT_PNG; - if (!(IMG_Init(imgFlags) & imgFlags)) - { - printf( "SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() ); - exit(2); - } - m_window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, m_windowWidth, m_windowHeight, SDL_WINDOW_RESIZABLE); - SDL_SetWindowResizable(m_window, SDL_FALSE); - m_renderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED); - SDL_SetWindowMinimumSize(m_window, m_windowWidth, m_windowHeight); - SDL_SetWindowTitle(m_window, m_title.c_str()); - - m_cursor_Arrow = SDL_CreateSystemCursor(SDL_SystemCursor::SDL_SYSTEM_CURSOR_ARROW); - m_cursor_IBeam = SDL_CreateSystemCursor(SDL_SystemCursor::SDL_SYSTEM_CURSOR_IBEAM); - - m_initialized = true; - m_running = true; - - m_fixedUpdateTImer.create(60.0, [this](double frameTime_s){ - this->onFixedUpdate(frameTime_s); - }); - - m_fpsUpdateTimer.create(1.0, [this](double frameTime_s){ - if (this->m_frameCount == 0) return; - if (this->m_frameTimeAcc == 0) return; - this->m_fps = (int32_t)(1.0f / (static_cast(this->m_frameTimeAcc) / static_cast(this->m_frameCount))); - this->m_frameTimeAcc = 0; - this->m_frameCount = 0; - }); - - setTypeName("dragon::WindowBase"); - enableSignals(true); - validate(); - - onInitialize(); - } - - void WindowBase::close(void) - { - m_running = false; - onClose(); - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowClosed, ostd::tSignalPriority::RealTime, *this); - } - - void WindowBase::update(void) - { - if (!m_initialized) return; - __handle_events(); - SDL_SetRenderDrawColor(m_renderer, m_clearColor.r, m_clearColor.g, m_clearColor.b, m_clearColor.a); - if (m_refreshScreen) - SDL_RenderClear(m_renderer); - m_fixedUpdateTImer.update(); - onUpdate(); - onRender(); - SDL_RenderPresent(m_renderer); - m_frameTimeAcc += m_fpsUpdateClock.restart(ostd::eTimeUnits::Seconds); - m_frameCount++; - m_fpsUpdateTimer.update(); - } - - void WindowBase::setSize(int32_t width, int32_t height) - { - if (!isInitialized()) return; - SDL_SetWindowSize(m_window, width, height); - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowResized, ostd::tSignalPriority::RealTime); - } - - void WindowBase::setTitle(const ostd::String& title) - { - if (!isInitialized()) return; - m_title = title; - SDL_SetWindowTitle(m_window, m_title.c_str()); - } - - void WindowBase::setCursor(eCursor cursor) - { - switch (cursor) - { - case eCursor::Arrow: - SDL_SetCursor(m_cursor_Arrow); - break; - case eCursor::IBeam: - SDL_SetCursor(m_cursor_IBeam); - break; - default: - SDL_SetCursor(m_cursor_Arrow); - break; - } - } - - void WindowBase::enableResizable(bool enable) - { - SDL_SetWindowResizable(m_window, (enable ? SDL_TRUE : SDL_FALSE)); - } - - void WindowBase::setIcon(const ostd::String& iconFilePath) - { - SDL_Surface* appIcon = IMG_Load(iconFilePath); - if (appIcon == nullptr) - { - //TODO: Error - return; - } - SDL_SetWindowIcon(m_window, appIcon); - SDL_FreeSurface(appIcon); - } - - void WindowBase::__handle_events(void) - { - if (!m_initialized) return; - auto l_getMouseState = [this](void) -> MouseEventData { - int32_t mx = 0, my = 0; - uint32_t btn = SDL_GetMouseState(&mx, &my); - MouseEventData::eButton button = MouseEventData::eButton::None; - switch (btn) - { - case SDL_BUTTON(1): button = MouseEventData::eButton::Left; break; - case SDL_BUTTON(2): button = MouseEventData::eButton::Middle; break; - case SDL_BUTTON(3): button = MouseEventData::eButton::Right; break; - default: button = MouseEventData::eButton::None; break; - } - MouseEventData mmd(*this, mx, my, button); - return mmd; - }; - SDL_Event event; - while (SDL_PollEvent(&event)) - { - if (event.type == SDL_QUIT) - { - m_running = false; - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowClosed, ostd::tSignalPriority::Normal, *this); - } - else if (event.type == SDL_WINDOWEVENT) - { - if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) { - WindowResizedData wrd(*this, m_windowWidth, m_windowHeight, 0, 0); - SDL_GetWindowSize(m_window, &m_windowWidth, &m_windowHeight); - wrd.new_width = m_windowWidth; - wrd.new_height = m_windowHeight; - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowResized, ostd::tSignalPriority::RealTime, wrd); - } - } - else if (event.type == SDL_MOUSEMOTION) - { - MouseEventData mmd = l_getMouseState(); - if (isMouseDragEventEnabled() && mmd.button != MouseEventData::eButton::None) - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MouseDragged, ostd::tSignalPriority::RealTime, mmd); - else - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MouseMoved, ostd::tSignalPriority::RealTime, mmd); - } - else if (event.type == SDL_MOUSEBUTTONDOWN) - { - MouseEventData mmd = l_getMouseState(); - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MousePressed, ostd::tSignalPriority::RealTime, mmd); - } - else if (event.type == SDL_MOUSEBUTTONUP) - { - MouseEventData mmd = l_getMouseState(); - switch (event.button.button) - { - case SDL_BUTTON(1): mmd.button = MouseEventData::eButton::Left; break; - case SDL_BUTTON(2): mmd.button = MouseEventData::eButton::Middle; break; - case SDL_BUTTON(3): mmd.button = MouseEventData::eButton::Right; break; - default: mmd.button = MouseEventData::eButton::None; break; - } - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MouseReleased, ostd::tSignalPriority::RealTime, mmd); - } - else if (event.type == SDL_KEYDOWN) - { - KeyEventData ked(*this, (int32_t)event.key.keysym.sym, 0, KeyEventData::eKeyEvent::Pressed); - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::KeyPressed, ostd::tSignalPriority::RealTime, ked); - } - else if (event.type == SDL_KEYUP) - { - KeyEventData ked(*this, (int32_t)event.key.keysym.sym, 0, KeyEventData::eKeyEvent::Released); - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::KeyReleased, ostd::tSignalPriority::RealTime, ked); - } - else if (event.type == SDL_TEXTINPUT) - { - KeyEventData ked(*this, 0, event.text.text[0], KeyEventData::eKeyEvent::Text); - ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::TextEntered, ostd::tSignalPriority::RealTime, ked); - } - } - } -} diff --git a/src/ogfx/WindowBase.hpp b/src/ogfx/WindowBase.hpp deleted file mode 100644 index d1b3db2..0000000 --- a/src/ogfx/WindowBase.hpp +++ /dev/null @@ -1,148 +0,0 @@ -/* - OmniaFramework - A collection of useful functionality - Copyright (C) 2025 OmniaX-Dev - - This file is part of OmniaFramework. - - OmniaFramework is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OmniaFramework is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OmniaFramework. If not, see . -*/ - -#pragma once - -#include -#include -#include -#include -#include - -namespace ogfx -{ - class WindowBase : public ostd::BaseObject - { - public: enum class eCursor { Arrow = 0, IBeam }; - public: - inline WindowBase(void) { } - ~WindowBase(void); - inline WindowBase(int32_t width, int32_t height, const ostd::String& windowTitle) { initialize(width, height, windowTitle); } - void initialize(int32_t width, int32_t height, const ostd::String& windowTitle); - void close(void); - void update(void); - void setSize(int32_t width, int32_t height); - void setTitle(const ostd::String& title); - void setCursor(eCursor cursor); - void enableResizable(bool enable = true); - void setIcon(const ostd::String& iconFilePath); - - inline virtual void onRender(void) { } - inline virtual void onUpdate(void) { } - inline virtual void onFixedUpdate(double frameTime_s) { } - inline virtual void onInitialize(void) { } - inline virtual void onDestroy(void) { } - inline virtual void onClose(void) { } - - inline bool isInitialized(void) const { return m_initialized; } - inline bool isRunning(void) const { return m_running; } - inline bool isVisible(void) const { return m_visible; } - inline void hide(void) { SDL_HideWindow(m_window); m_visible = false; } - inline void show(void) { SDL_ShowWindow(m_window); m_visible = true; } - inline ostd::String getTitle(void) const { return m_title; } - inline int32_t getFPS(void) const { return m_fps; } - inline int32_t getWindowWidth(void) const { return m_windowWidth; } - inline int32_t getWindowHeight(void) const { return m_windowHeight; } - inline bool isMouseDragEventEnabled(void) const { return m_deagEventEnabled; } - inline void enableMouseDragEvent(bool enable = true) { m_deagEventEnabled = enable; } - inline ostd::Color getClearColor(void) const { return m_clearColor; } - inline void setClearColor(const ostd::Color& color) { m_clearColor = color; } - inline SDL_Renderer* getSDLRenderer(void) const { return m_renderer; } - private: - void __handle_events(void); - - protected: - ostd::ConsoleOutputHandler out; - - SDL_Window* m_window { nullptr }; - SDL_Renderer* m_renderer { nullptr }; - bool m_refreshScreen { true }; - - private: - ostd::Color m_clearColor { 10, 10, 10, 255 }; - - int32_t m_windowWidth { 0 }; - int32_t m_windowHeight { 0 }; - ostd::String m_title { "" }; - int32_t m_fps { 0 }; - - ostd::StepTimer m_fixedUpdateTImer; - ostd::StepTimer m_fpsUpdateTimer; - ostd::Timer m_fpsUpdateClock; - uint64_t m_frameTimeAcc { 0 }; - int32_t m_frameCount { 0 }; - - bool m_deagEventEnabled { false }; - bool m_running { false }; - bool m_initialized { false }; - bool m_visible { true }; - - SDL_Cursor* m_cursor_IBeam { nullptr }; - SDL_Cursor* m_cursor_Arrow { nullptr }; - }; - class WindowResizedData : public ostd::BaseObject - { - public: - inline WindowResizedData(WindowBase& parent, int32_t _oldx, int32_t _oldy, int32_t _newx, int32_t _newy) : parentWindow(parent), old_width(_oldx), old_height(_oldy), new_width(_newx), new_height(_newy) - { - setTypeName("ogfx::WindowResizedData"); - validate(); - } - - public: - int32_t new_width; - int32_t new_height; - int32_t old_width; - int32_t old_height; - WindowBase& parentWindow; - }; - class MouseEventData : public ostd::BaseObject - { - public: enum class eButton { None = 0, Left, Middle, Right }; - public: - inline MouseEventData(WindowBase& parent, int32_t mousex, int32_t mousey, eButton btn) : parentWindow(parent), position_x(mousex), position_y(mousey), button(btn) - { - setTypeName("ogfx::MouseEventData"); - validate(); - } - - public: - int32_t position_x; - int32_t position_y; - eButton button; - WindowBase& parentWindow; - }; - class KeyEventData : public ostd::BaseObject - { - public: enum class eKeyEvent { Pressed = 0, Released, Text }; - public: - inline KeyEventData(WindowBase& parent, int32_t key, char _text, eKeyEvent evt) : parentWindow(parent), keyCode(key), text(_text), eventType(evt) - { - setTypeName("ogfx::KeyEventData"); - validate(); - } - - public: - int32_t keyCode; - char text; - eKeyEvent eventType; - WindowBase& parentWindow; - }; -} diff --git a/src/ogfx/gui/Events.hpp b/src/ogfx/gui/Events.hpp new file mode 100644 index 0000000..ce6b7d0 --- /dev/null +++ b/src/ogfx/gui/Events.hpp @@ -0,0 +1,100 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#pragma once + +#include + +namespace ogfx +{ + class WindowCore; + namespace gui + { + class Widget; + } + class WindowResizedData : public ostd::BaseObject + { + public: + inline WindowResizedData(WindowCore& parent, int32_t _oldx, int32_t _oldy, int32_t _newx, int32_t _newy) : parentWindow(parent), old_width(_oldx), old_height(_oldy), new_width(_newx), new_height(_newy) + { + setTypeName("ogfx::WindowResizedData"); + validate(); + } + + public: + int32_t new_width; + int32_t new_height; + int32_t old_width; + int32_t old_height; + WindowCore& parentWindow; + }; + class MouseEventData : public ostd::BaseObject + { + public: enum class eButton { None = 0, Left, Middle, Right }; + public: + inline MouseEventData(WindowCore& parent, float mousex, float mousey, eButton btn) : parentWindow(parent), position_x(mousex), position_y(mousey), button(btn) + { + setTypeName("ogfx::MouseEventData"); + validate(); + } + + public: + float position_x; + float position_y; + eButton button; + gui::Widget* mousePressedOnWidget { nullptr }; + WindowCore& parentWindow; + }; + class KeyEventData : public ostd::BaseObject + { + public: enum class eKeyEvent { Pressed = 0, Released, Text }; + public: + inline KeyEventData(WindowCore& parent, int32_t key, char _text, eKeyEvent evt) : parentWindow(parent), keyCode(key), text(_text), eventType(evt) + { + setTypeName("ogfx::KeyEventData"); + validate(); + } + + public: + int32_t keyCode; + char text; + eKeyEvent eventType; + WindowCore& parentWindow; + }; + namespace gui + { + class Event + { + public: + inline Event(WindowCore& _window) : window(_window) { } + inline void handle(void) { m_handled = true; } + inline bool isHandled(void) const { return m_handled; } + + public: + WindowCore& window; + WindowResizedData* windowResized { nullptr }; + MouseEventData* mouse { nullptr }; + KeyEventData* keyboard { nullptr }; + + private: + bool m_handled { false }; + }; + } +} diff --git a/src/ogfx/RawTextInput.cpp b/src/ogfx/gui/RawTextInput.cpp similarity index 90% rename from src/ogfx/RawTextInput.cpp rename to src/ogfx/gui/RawTextInput.cpp index 5c7b5d5..6b715e1 100644 --- a/src/ogfx/RawTextInput.cpp +++ b/src/ogfx/gui/RawTextInput.cpp @@ -1,6 +1,26 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + #include "RawTextInput.hpp" -#include -#include +#include "../gui/Window.hpp" +#include "../../io/Logger.hpp" namespace ogfx { @@ -272,13 +292,13 @@ namespace ogfx if (getParent().isMouseInside()) { if (!m_ibeamCursorSet) - window.setCursor(ogfx::WindowBase::eCursor::IBeam); + window.setCursor(ogfx::WindowCore::eCursor::IBeam); m_ibeamCursorSet = true; } else { if (m_ibeamCursorSet) - window.setCursor(ogfx::WindowBase::eCursor::Arrow); + window.setCursor(ogfx::WindowCore::eCursor::Arrow); m_ibeamCursorSet = false; } } diff --git a/src/ogfx/RawTextInput.hpp b/src/ogfx/gui/RawTextInput.hpp similarity index 97% rename from src/ogfx/RawTextInput.hpp rename to src/ogfx/gui/RawTextInput.hpp index 7908fd6..0310201 100644 --- a/src/ogfx/RawTextInput.hpp +++ b/src/ogfx/gui/RawTextInput.hpp @@ -20,7 +20,7 @@ #pragma once -#include +#include #include namespace ogfx @@ -170,11 +170,11 @@ namespace ogfx class RawTextInputEventListener : public RawTextInput::EventListener { public: - inline RawTextInputEventListener(ogfx::gui::RawTextInput& _parent, ogfx::WindowBase& _window) : ogfx::gui::RawTextInput::EventListener::EventListener(_parent), window(_window) { } + inline RawTextInputEventListener(ogfx::gui::RawTextInput& _parent, ogfx::WindowCore& _window) : ogfx::gui::RawTextInput::EventListener::EventListener(_parent), window(_window) { } void onSignalHandled(ostd::tSignal& signal) override; public: - ogfx::WindowBase& window; + ogfx::WindowCore& window; bool m_ibeamCursorSet { false }; }; class RawTextInputNumberCharacterFilter : public RawTextInput::CharacterFilter diff --git a/src/ogfx/gui/Themes.hpp b/src/ogfx/gui/Themes.hpp new file mode 100644 index 0000000..c4a9b96 --- /dev/null +++ b/src/ogfx/gui/Themes.hpp @@ -0,0 +1,90 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#pragma once + +#include +#include +#include +#include + +namespace ogfx +{ + namespace gui + { + struct Theme + { + public: using ThemeValue = std::variant; + public: + inline Theme(bool blank = false) + { + if (blank) return; + + set("window.backgroundColor", ostd::Colors::Black); + + set("label.textColor", ostd::Colors::White); + set("label.backgroundColor", ostd::Colors::Transparent); + set("label.borderColor", ostd::Colors::White); + set("label.fontSize", 20); + set("label.borderRadius", 20); + set("label.borderWidth", 2); + set("label.showBackground", false); + set("label.showBorder", false); + set("label.padding", ostd::Rectangle { 5, 5, 5, 5 }); + } + + inline Theme& blank(void) + { + m_values.clear(); + return *this; + } + + inline Theme& loadFromJsonFile(const ostd::String& jsonFilePath) + { + return *this; //TODO: Implement + } + + inline void set(const std::string& key, ThemeValue value) + { + m_values[key] = std::move(value); + } + + inline const ThemeValue* __get(const ostd::String& key) const + { + auto it = m_values.find(key); + return it != m_values.end() ? &it->second : nullptr; + } + + template + inline T get(const ostd::String& key, const T& fallback) const + { + if (auto v = __get(key)) + { + if (auto p = std::get_if(v)) + return *p; + } + return fallback; + } + + private: + std::unordered_map m_values; + }; + } +} diff --git a/src/ogfx/gui/Widgets.cpp b/src/ogfx/gui/Widgets.cpp new file mode 100644 index 0000000..812f01b --- /dev/null +++ b/src/ogfx/gui/Widgets.cpp @@ -0,0 +1,526 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#include "Widgets.hpp" +#include +#include + +namespace ogfx +{ + namespace gui + { + WidgetManager::WidgetManager(WindowCore& window, Widget& owner) : m_window(window), m_owner(owner) + { + // + } + + bool WidgetManager::hasWidget(Widget& widget) + { + bool found = std::ranges::find(m_widgetList, &widget) != m_widgetList.end(); + return found && widget.isValid(); + } + + bool WidgetManager::requestFocus(Widget& widget) + { + if (!hasWidget(widget)) return false; + if (&widget == m_focused) return true; + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + if (w->m_focused) + { + w->m_focused = false; + w->onFocusLost(Event(m_window)); + } + else + w->m_focused = false; + } + widget.m_focused = true; + widget.onFocusGained(Event(m_window)); + m_focused = &widget; + return true; + } + + bool WidgetManager::addWidget(Widget& widget) + { + if (hasWidget(widget)) return false; + widget.m_parent = &m_owner; + m_widgetList.push_back(&widget); + std::ranges::sort(m_widgetList, {}, [](Widget* w) { + return w->m_zIndex; + }); + return true; + } + + Widget* WidgetManager::focusNext(void) + { + if (m_widgetList.empty()) + return nullptr; + + Widget* next = nullptr; + Widget* smallest = nullptr; + + int32_t currentTabIndex = (m_focused != nullptr ? m_focused->m_tabIndex : std::numeric_limits::max()); + for (Widget* w : m_widgetList) + { + int tab_i = w->m_tabIndex; + if (tab_i < 0) continue; + if (!smallest || tab_i < smallest->m_tabIndex) + smallest = w; + if (tab_i > currentTabIndex) + { + if (!next || tab_i < next->m_tabIndex) + next = w; + } + } + Widget* w = next ? next : smallest; + requestFocus(*w); + return w; + } + + void WidgetManager::draw(ogfx::BasicRenderer2D& gfx) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__draw(gfx); + } + } + + void WidgetManager::update(void) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__update(); + } + } + + void WidgetManager::onThemeApplied(const Theme& theme) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__applyTheme(theme, true); + } + } + + void WidgetManager::onMousePressed(const Event& event) + { + for (int32_t i = m_widgetList.size() - 1; i >= 0; i--) + { + Widget* w = m_widgetList[i]; + if (w == nullptr) continue; + if (w->isInvalid()) continue; + if (!w->contains(event.mouse->position_x, event.mouse->position_y, true)) + continue; + w->__onMousePressed(event); + m_mousePressedOnWidget = w; + if (event.isHandled()) + break; + } + } + + void WidgetManager::onMouseReleased(const Event& event) + { + for (int32_t i = m_widgetList.size() - 1; i >= 0; i--) + { + Widget* w = m_widgetList[i]; + if (w == nullptr) continue; + if (w->isInvalid()) continue; + event.mouse->mousePressedOnWidget = m_mousePressedOnWidget; + w->__onMouseReleased(event); + requestFocus(*w); + m_mousePressedOnWidget = nullptr; + if (event.isHandled()) + break; + } + } + + void WidgetManager::onMouseMoved(const Event& event) + { + for (int32_t i = m_widgetList.size() - 1; i >= 0; i--) + { + Widget* w = m_widgetList[i]; + if (w == nullptr) continue; + if (w->isInvalid()) continue; + if (!w->contains(event.mouse->position_x, event.mouse->position_y, true)) + continue; + w->__onMouseMoved(event); + if (event.isHandled()) + break; + } + } + + void WidgetManager::onMouseDragged(const Event& event) + { + for (int32_t i = m_widgetList.size() - 1; i >= 0; i--) + { + Widget* w = m_widgetList[i]; + if (w == nullptr) continue; + if (w->isInvalid()) continue; + if (!w->contains(event.mouse->position_x, event.mouse->position_y, true)) + continue; + w->__onMouseDragged(event); + if (event.isHandled()) + break; + } + } + + void WidgetManager::onKeyPressed(const Event& event) + { + if (!m_focused) return; + m_focused->__onKeyPressed(event); + } + + void WidgetManager::onKeyReleased(const Event& event) + { + if (!m_focused) return; + m_focused->__onKeyReleased(event); + if (m_tabNavigationEnabled && event.keyboard->keyCode == SDLK_TAB) + focusNext(); + } + + void WidgetManager::onTextEntered(const Event& event) + { + if (!m_focused) return; + m_focused->__onTextEntered(event); + } + + void WidgetManager::onWindowClosed(const Event& event) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__onWindowClosed(event); + if (event.isHandled()) + break; + } + } + + void WidgetManager::onWindowResized(const Event& event) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__onWindowResized(event); + if (event.isHandled()) + break; + } + } + + void WidgetManager::onWindowFocused(const Event& event) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__onWIndowFocused(event); + if (event.isHandled()) + break; + } + } + + void WidgetManager::onWindowFocusLost(const Event& event) + { + for (auto& w : m_widgetList) + { + if (w == nullptr) continue; + if (w->isInvalid()) continue; + w->__onWindowFocusLost(event); + if (event.isHandled()) + break; + } + } + + + + + Widget::Widget(const ostd::Rectangle& bounds, WindowCore& window) : Rectangle(bounds), m_widgets(window, *this) + { + m_window = &window; + } + + bool Widget::addChild(Widget& child) + { + if (!m_allowChildren) + return false; + return m_widgets.addWidget(child); + } + + ostd::Vec2 Widget::getGlobalPosition(void) const + { + ostd::Vec2 glob = getPosition(); + if (!m_rootChild && m_parent != nullptr) + glob += m_parent->getGlobalPosition(); + return glob; + } + + void Widget::applyThemeValue(Theme& theme, const ostd::String& key, Theme::ThemeValue value, bool propagate) + { + auto currentValue = theme.__get(key); + if (currentValue == nullptr) return; + theme.set(key, value); + __applyTheme(theme, propagate); + theme.set(key, *currentValue); + } + + void Widget::__draw(ogfx::BasicRenderer2D& gfx) + { + if (isDrawBoxEnabled()) + gfx.fillRect({ getGlobalPosition(), getSize() }, getDrawBoxColor()); + onDraw(gfx); + if (hasChildren()) + m_widgets.draw(gfx); + } + + void Widget::__update(void) + { + onUpdate(); + if (hasChildren()) + m_widgets.update(); + } + + void Widget::__onMousePressed(const Event& event) + { + if (hasChildren()) + m_widgets.onMousePressed(event); + if (!event.isHandled()) + { + if (callback_onMousePressed) + callback_onMousePressed(event); + onMousePressed(event); + } + } + + void Widget::__onMouseReleased(const Event& event) + { + if (hasChildren()) + m_widgets.onMouseReleased(event); + if (!event.isHandled()) + { + if (callback_onMouseReleased) + callback_onMouseReleased(event); + onMouseReleased(event); + } + } + + void Widget::__onMouseMoved(const Event& event) + { + if (hasChildren()) + m_widgets.onMouseMoved(event); + if (!event.isHandled()) + { + if (callback_onMouseMoved) + callback_onMouseMoved(event); + onMouseMoved(event); + } + } + + void Widget::__onMouseDragged(const Event& event) + { + if (hasChildren()) + m_widgets.onMouseDragged(event); + if (!event.isHandled()) + { + if (callback_onMouseDragged) + callback_onMouseDragged(event); + onMouseDragged(event); + } + } + + void Widget::__onKeyPressed(const Event& event) + { + if (hasChildren()) + m_widgets.onKeyPressed(event); + if (!event.isHandled()) + { + if (callback_onKeyPressed) + callback_onKeyPressed(event); + onKeyPressed(event); + } + } + + void Widget::__onKeyReleased(const Event& event) + { + if (hasChildren()) + m_widgets.onKeyReleased(event); + if (!event.isHandled()) + { + if (callback_onKeyReleased) + callback_onKeyReleased(event); + onKeyReleased(event); + } + } + + void Widget::__onTextEntered(const Event& event) + { + if (hasChildren()) + m_widgets.onTextEntered(event); + if (!event.isHandled()) + { + if (callback_onTextEntered) + callback_onTextEntered(event); + onTextEntered(event); + } + } + + void Widget::__onWindowClosed(const Event& event) + { + if (hasChildren()) + m_widgets.onWindowClosed(event); + if (!event.isHandled()) + { + if (callback_onWindowClosed) + callback_onWindowClosed(event); + onWindowClosed(event); + } + } + + void Widget::__onWindowResized(const Event& event) + { + if (hasChildren()) + m_widgets.onWindowResized(event); + if (!event.isHandled()) + { + if (callback_onWindowResized) + callback_onWindowResized(event); + onWindowResized(event); + } + } + + void Widget::__onWIndowFocused(const Event& event) + { + if (hasChildren()) + m_widgets.onWindowFocused(event); + if (!event.isHandled()) + { + if (callback_onWindowFocused) + callback_onWindowFocused(event); + onWindowFocused(event); + } + } + + void Widget::__onWindowFocusLost(const Event& event) + { + if (hasChildren()) + m_widgets.onWindowFocusLost(event); + if (!event.isHandled()) + { + if (callback_onWindowFocusLost) + callback_onWindowFocusLost(event); + onWindowFocusLost(event); + } + } + + void Widget::__applyTheme(const Theme& theme, bool propagate) + { + if (propagate && hasChildren()) + m_widgets.onThemeApplied(theme); + applyTheme(theme); + } + + + + namespace widgets + { + RootWidget::RootWidget(WindowCore& window) : Widget({ 0, 0, 0, 0 }, window) + { + m_rootChild = true; + setSize(static_cast(window.getWindowWidth()), static_cast(window.getWindowHeight())); + enableDrawBox(); + setDrawBoxColor(window.getClearColor()); + setTypeName("ogfx::gui::widgets::RootWidget"); + } + + void RootWidget::onWindowResized(const Event& event) + { + setSize(static_cast(event.windowResized->new_width), static_cast(event.windowResized->new_height)); + } + + void RootWidget::applyTheme(const Theme& theme) + { + setDrawBoxColor(theme.get("window.backgroundColor", getWindow().getClearColor())); + } + + + + + Label& Label::create(const ostd::String& text) + { + setText(text); + setPadding({ 5, 5, 5, 5 }); + setTypeName("ogfx::gui::widgets::Label"); + disableDrawBox(); + enableBackground(false); + validate(); + return *this; + } + + void Label::applyTheme(const Theme& theme) + { + setColor(theme.get("label.textColor", ostd::Colors::White)); + setBackGroundColor(theme.get("label.backgroundColor", ostd::Colors::Transparent)); + setFontSize(theme.get("label.fontSize", 20)); + m_borderRadius = theme.get("label.borderRadius", 10); + m_borderWidth = theme.get("label.borderWidth", 2); + m_showBorder = theme.get("label.showBorder", false); + m_borderColor = theme.get("label.borderColor", ostd::Colors::White); + enableBackground(theme.get("label.showBackground", false)); + setPadding(theme.get("label.padding", { 5, 5, 5, 5 })); + } + + void Label::onDraw(ogfx::BasicRenderer2D& gfx) + { + if (m_textChanged) + __update_size(gfx); + if (m_showBackground) + gfx.fillRoundRect({ getGlobalPosition(), getSize() }, m_backgroundColor, m_borderRadius); + if (m_showBorder) + gfx.drawRoundRect({ getGlobalPosition(), getSize() }, m_borderColor, m_borderRadius, m_borderWidth); + gfx.drawString(getText(), getGlobalPosition() + ostd::Vec2 { getPadding().left(), getPadding().top() }, getColor()); + } + + void Label::setText(const ostd::String& text) + { + m_text = text; + m_textChanged = true; + } + + void Label::__update_size(ogfx::BasicRenderer2D& gfx) + { + auto size = gfx.getStringSize(getText(), getFontSize()); + size.x += getPadding().left(); + size.x += getPadding().right(); + size.y += getPadding().top(); + size.y += getPadding().bottom(); + setSize({ static_cast(size.x), static_cast(size.y) }); + m_textChanged = false; + } + + } + } +} diff --git a/src/ogfx/gui/Widgets.hpp b/src/ogfx/gui/Widgets.hpp new file mode 100644 index 0000000..a476a41 --- /dev/null +++ b/src/ogfx/gui/Widgets.hpp @@ -0,0 +1,226 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#pragma once + +#include +#include +#include +#include +#include + +namespace ogfx +{ + class BasicRenderer2D; + class WindowCore; + namespace gui + { + class Event; + class Widget; + class WidgetManager + { + public: + WidgetManager(WindowCore& window, Widget& owner); + bool hasWidget(Widget& widget); + bool requestFocus(Widget& widget); + bool addWidget(Widget& widget); + Widget* focusNext(void); + + void draw(ogfx::BasicRenderer2D& gfx); + void update(void); + void onThemeApplied(const Theme& theme); + void onMousePressed(const Event& event); + void onMouseReleased(const Event& event); + void onMouseMoved(const Event& event); + void onMouseDragged(const Event& event); + void onKeyPressed(const Event& event); + void onKeyReleased(const Event& event); + void onTextEntered(const Event& event); + void onWindowClosed(const Event& event); + void onWindowResized(const Event& event); + void onWindowFocused(const Event& event); + void onWindowFocusLost(const Event& event); + + inline int32_t widgetCount(void) const { return m_widgetList.size(); } + inline WindowCore& getWindow(void) { return m_window; } + + private: + WindowCore& m_window; + Widget& m_owner; + std::vector m_widgetList; + Widget* m_focused { nullptr }; + bool m_tabNavigationEnabled { true }; + Widget* m_mousePressedOnWidget { nullptr }; + }; + class Widget : public ostd::BaseObject, public ostd::Rectangle + { + public: using EventCallback = std::function; + public: + Widget(const ostd::Rectangle& bounds, WindowCore& window); + bool addChild(Widget& child); + ostd::Vec2 getGlobalPosition(void) const; + virtual void applyTheme(const Theme& theme) = 0; + void applyThemeValue(Theme& theme, const ostd::String& key, Theme::ThemeValue value, bool propagate); + + inline virtual void onDraw(ogfx::BasicRenderer2D& gfx) { } + inline virtual void onUpdate(void) { } + + inline virtual void onMousePressed(const Event& event) { } + inline virtual void onMouseReleased(const Event& event) { } + inline virtual void onMouseMoved(const Event& event) { } + inline virtual void onMouseDragged(const Event& event) { } + inline virtual void onKeyPressed(const Event& event) { } + inline virtual void onKeyReleased(const Event& event) { } + inline virtual void onTextEntered(const Event& event) { } + inline virtual void onFocusGained(const Event& event) { } + inline virtual void onFocusLost(const Event& event) { } + inline virtual void onWindowClosed(const Event& event) { } + inline virtual void onWindowResized(const Event& event) { } + inline virtual void onWindowFocused(const Event& event) { } + inline virtual void onWindowFocusLost(const Event& event) { } + + void __draw(ogfx::BasicRenderer2D& gfx); + void __update(void); + void __onMousePressed(const Event& event); + void __onMouseReleased(const Event& event); + void __onMouseMoved(const Event& event); + void __onMouseDragged(const Event& event); + void __onKeyPressed(const Event& event); + void __onKeyReleased(const Event& event); + void __onTextEntered(const Event& event); + void __onWindowClosed(const Event& event); + void __onWindowResized(const Event& event); + void __onWIndowFocused(const Event& event); + void __onWindowFocusLost(const Event& event); + void __applyTheme(const Theme& theme, bool propagate); + + inline virtual void setMousePressedCallback(EventCallback callback) { callback_onMousePressed = callback; } + inline virtual void setMouseReleasedCallback(EventCallback callback) { callback_onMouseReleased = callback; } + inline virtual void setMouseMovedCallback(EventCallback callback) { callback_onMouseMoved = callback; } + inline virtual void setMouseDraggedCallback(EventCallback callback) { callback_onMouseDragged = callback; } + inline virtual void setKeyPressedCallback(EventCallback callback) { callback_onKeyPressed = callback; } + inline virtual void setKeyReleasedCallback(EventCallback callback) { callback_onKeyReleased = callback; } + inline virtual void setTextEnteredCallback(EventCallback callback) { callback_onTextEntered = callback; } + inline virtual void setWindowClosedCallback(EventCallback callback) { callback_onWindowClosed = callback; } + inline virtual void setWindowResizedCallback(EventCallback callback) { callback_onWindowResized = callback; } + inline virtual void setWIndowFocusedCallback(EventCallback callback) { callback_onWindowFocused = callback; } + inline virtual void setWindowFocusLostCallback(EventCallback callback) { callback_onWindowFocusLost = callback; } + + inline bool hasChildren(void) const { return m_allowChildren && m_widgets.widgetCount() > 0; } + inline virtual bool isInvalid(void) const override { return ostd::BaseObject::isInvalid() || (m_parent == nullptr && !m_rootChild); } + inline void setTabIndex(int32_t tabIndex) { m_tabIndex = tabIndex; } + inline int32_t getTabIndex(void) const { return m_tabIndex; } + inline bool isFocused(void) const { return m_focused; } + inline WindowCore& getWindow(void) { return *m_window; } + inline Widget* getParent(void) { return m_parent; } + inline int32_t getZIndex(void) const { return m_zIndex; } + inline bool isChildrenEnabled(void) const { return m_allowChildren; } + inline void setPadding(const ostd::Rectangle& pad) { m_padding = pad; } + inline Rectangle getPadding(void) { return m_padding; } + + protected: + inline void disableChildren(void) { m_allowChildren = false; } + inline void disableDrawBox(void) { m_drawBox = false; } + inline void enableDrawBox(void) { m_drawBox = true; } + inline bool isDrawBoxEnabled(void) const { return m_drawBox; } + inline void setDrawBoxColor(const ostd::Color& color) { m_drawBoxColor = color; } + inline ostd::Color getDrawBoxColor(void) { return m_drawBoxColor; } + + protected: + bool m_rootChild { false }; + + EventCallback callback_onMousePressed { nullptr }; + EventCallback callback_onMouseReleased { nullptr }; + EventCallback callback_onMouseMoved { nullptr }; + EventCallback callback_onMouseDragged { nullptr }; + EventCallback callback_onKeyPressed { nullptr }; + EventCallback callback_onKeyReleased { nullptr }; + EventCallback callback_onTextEntered { nullptr }; + EventCallback callback_onWindowClosed { nullptr }; + EventCallback callback_onWindowResized { nullptr }; + EventCallback callback_onWindowFocused { nullptr }; + EventCallback callback_onWindowFocusLost { nullptr }; + + private: + WindowCore* m_window { nullptr }; + Widget* m_parent { nullptr }; + bool m_focused { false }; + int32_t m_tabIndex { -1 }; + int32_t m_zIndex { -1 }; + WidgetManager m_widgets; + bool m_allowChildren { true }; + + bool m_drawBox { true }; + ostd::Color m_drawBoxColor { 255, 0, 0 }; + + ostd::Rectangle m_padding { 0, 0, 0, 0 }; + + friend class WidgetManager; + }; + namespace widgets + { + class RootWidget : public Widget + { + public: + RootWidget(WindowCore& window); + void onWindowResized(const Event& event) override; + void applyTheme(const Theme& theme) override; + + private: + }; + class Label : public Widget + { + public: + inline Label(WindowCore& window) : Widget({ 0, 0, 0, 0 }, window) { create(""); } + inline Label(WindowCore& window, const ostd::String& text) : Widget({ 0, 0, 0, 0 }, window) { create(text); } + Label& create(const ostd::String& text); + void applyTheme(const Theme& theme) override; + void onDraw(ogfx::BasicRenderer2D& gfx) override; + void setText(const ostd::String& text); + inline ostd::String getText(void) const { return m_text; } + inline ostd::Color getColor(void) const { return m_color; } + inline void setColor(const ostd::Color& color) { m_color = color; } + inline int32_t getFontSize(void) const { return m_fontSize; } + inline void setFontSize(int32_t fontSize) { m_fontSize = fontSize; } + inline void setBackGroundColor(const ostd::Color& color) { m_backgroundColor = color; } + inline ostd::Color getBackgroundColor(const ostd::Color& color) { return m_backgroundColor; } + inline void enableBackground(bool enable = true) { m_showBackground = enable; } + inline bool isBackgoundEnabled(void) const { return m_showBackground; } + + private: + void __update_size(ogfx::BasicRenderer2D& gfx); + + private: + ostd::String m_text { "" }; + bool m_textChanged { false }; + int32_t m_fontSize { 20 }; + ostd::Color m_color { 255, 255, 255 }; + int32_t m_borderRadius { 10 }; + int32_t m_borderWidth { 2 }; + bool m_showBorder { false }; + bool m_showBackground { false }; + ostd::Color m_backgroundColor { ostd::Colors::Transparent }; + ostd::Color m_borderColor { 255, 255, 255 }; + + private: + }; + } + } +} diff --git a/src/ogfx/gui/Window.cpp b/src/ogfx/gui/Window.cpp new file mode 100644 index 0000000..334175f --- /dev/null +++ b/src/ogfx/gui/Window.cpp @@ -0,0 +1,450 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#include "Window.hpp" +#include "../../ostd/utils/Time.hpp" +#include + +namespace ogfx +{ + const Uint32 REDRAW_EVENT = SDL_RegisterEvents(1); + + WindowCore::~WindowCore(void) + { + __on_window_destroy(); + SDL_DestroyCursor(m_cursor_IBeam); + SDL_DestroyCursor(m_cursor_Arrow); + SDL_DestroyRenderer(m_renderer); + SDL_DestroyWindow(m_window); + SDLSysten::release(); + } + + void WindowCore::initialize(int32_t width, int32_t height, const ostd::String& title) + { + if (m_initialized) return; + SDLSysten::acquire(); + m_windowWidth = width; + m_windowHeight = height; + m_title = title; + setBlockingEventsRefreshFPS(DefaultBlockingEventsFPS); + + m_window = SDL_CreateWindow("", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SDL_WINDOW_RESIZABLE); + m_renderer = SDL_CreateRenderer(m_window, nullptr); + SDL_SetWindowMinimumSize(m_window, m_windowWidth, m_windowHeight); + SDL_SetWindowTitle(m_window, m_title.c_str()); + SDL_StartTextInput(m_window); + + m_cursor_Arrow = SDL_CreateSystemCursor(SDL_SystemCursor::SDL_SYSTEM_CURSOR_DEFAULT); + m_cursor_IBeam = SDL_CreateSystemCursor(SDL_SystemCursor::SDL_SYSTEM_CURSOR_TEXT); + + m_wout.attachWindow(*this); + m_wout.setFontSize(22); + m_wout.setConsoleMaxCharacters({ 1000, 1000 }); + m_wout.setConsolePosition({ 5, 5 }); + m_wout.setWrapMode(ogfx::GraphicsWindowOutputHandler::eWrapMode::NewLine); + m_wout.setDefaultForegroundColor({ 255, 255, 255, 255 }); + + m_initialized = true; + m_running = true; + + setTypeName("ogfx::WindowCore"); + enableSignals(true); + validate(); + setSize(m_windowWidth, m_windowHeight); + + connectSignal(ostd::tBuiltinSignals::KeyPressed); + connectSignal(ostd::tBuiltinSignals::KeyReleased); + connectSignal(ostd::tBuiltinSignals::TextEntered); + connectSignal(ostd::tBuiltinSignals::MousePressed); + connectSignal(ostd::tBuiltinSignals::MouseReleased); + connectSignal(ostd::tBuiltinSignals::MouseMoved); + connectSignal(ostd::tBuiltinSignals::MouseMoved); + connectSignal(ostd::tBuiltinSignals::OnGuiEvent); + connectSignal(ostd::tBuiltinSignals::WindowClosed); + connectSignal(ostd::tBuiltinSignals::WindowResized); + connectSignal(ostd::tBuiltinSignals::WindowFocused); + connectSignal(ostd::tBuiltinSignals::WindowLostFocus); + + __on_window_init(width, height, title); + } + + void WindowCore::mainLoop(void) + { + if (isInitialized()) + __main_loop(); + } + + void WindowCore::close(void) + { + __on_window_close(); + m_running = false; + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowClosed, ostd::tSignalPriority::Normal, *this); + } + + void WindowCore::setSize(int32_t width, int32_t height) + { + if (!isInitialized()) return; + SDL_SetWindowSize(m_window, width, height); + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowResized, ostd::tSignalPriority::RealTime); + } + + void WindowCore::setTitle(const ostd::String& title) + { + if (!isInitialized()) return; + m_title = title; + SDL_SetWindowTitle(m_window, m_title.c_str()); + } + + void WindowCore::setCursor(eCursor cursor) + { + switch (cursor) + { + case eCursor::Arrow: + SDL_SetCursor(m_cursor_Arrow); + break; + case eCursor::IBeam: + SDL_SetCursor(m_cursor_IBeam); + break; + default: + SDL_SetCursor(m_cursor_Arrow); + break; + } + } + + void WindowCore::enableResizable(bool enable) + { + SDL_SetWindowResizable(m_window, enable); + m_resizeable = enable; + } + + void WindowCore::setIcon(const ostd::String& iconFilePath) + { + SDL_Surface* appIcon = IMG_Load(iconFilePath); + if (appIcon == nullptr) + { + //TODO: Error + return; + } + SDL_SetWindowIcon(m_window, appIcon); + SDL_DestroySurface(appIcon); + } + + void WindowCore::setBlockingEventsRefreshFPS(uint32_t fps) + { + if (fps == 0 || fps > MaxBlockingEventsFPS) + { + setBlockingEventsRefreshFPS(DefaultBlockingEventsFPS); + return; + } + m_blockingEventsDelay = static_cast(std::floor((1.0 / (double)fps) * 1000)); + } + + void WindowCore::requestRedraw(void) + { + SDL_Event e{}; + SDL_zero(e); + e.type = REDRAW_EVENT; + SDL_PushEvent(&e); + } + + void WindowCore::handleSignal(ostd::tSignal& signal) + { + __on_signal(signal); + } + + MouseEventData WindowCore::get_mouse_state(void) + { + float mx = 0, my = 0; + uint32_t btn = SDL_GetMouseState(&mx, &my); + MouseEventData::eButton button = MouseEventData::eButton::None; + switch (btn) + { + case SDL_BUTTON_MASK(1): button = MouseEventData::eButton::Left; break; + case SDL_BUTTON_MASK(2): button = MouseEventData::eButton::Middle; break; + case SDL_BUTTON_MASK(3): button = MouseEventData::eButton::Right; break; + default: button = MouseEventData::eButton::None; break; + } + MouseEventData mmd(*this, mx, my, button); + return mmd; + } + + void WindowCore::handle_events(void) + { + if (!isInitialized()) return; + SDL_Event event; + + if (isBlockingEventsEnabled()) + { + if (SDL_WaitEventTimeout(&event, m_blockingEventsDelay)) + __handle_event(event); + } + else + { + while (SDL_PollEvent(&event)) + __handle_event(event); + } + } + + void WindowCore::before_render(void) + { + SDL_SetRenderDrawColor(m_renderer, getClearColor().r, getClearColor().g, getClearColor().b, getClearColor().a); + if (m_refreshScreen) + SDL_RenderClear(m_renderer); + wout().beginFrame(); + } + + void WindowCore::after_render(void) + { + SDL_RenderPresent(m_renderer); + } + + void WindowCore::__handle_event(SDL_Event& event) + { + if (event.type == REDRAW_EVENT) + { + //Doesn't need to do anything, the event exists just to make SDL_WaitEventTimeout() return early + } + else if (event.type == SDL_EVENT_QUIT) + { + close(); + } + else if (event.type == SDL_EVENT_WINDOW_FOCUS_GAINED) + { + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowFocused, ostd::tSignalPriority::RealTime, *this); + } + else if (event.type == SDL_EVENT_WINDOW_FOCUS_LOST) + { + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowLostFocus, ostd::tSignalPriority::RealTime, *this); + } + else if (event.type == SDL_EVENT_WINDOW_RESIZED) + { + WindowResizedData wrd(*this, m_windowWidth, m_windowHeight, 0, 0); + SDL_GetWindowSize(m_window, &m_windowWidth, &m_windowHeight); + wrd.new_width = m_windowWidth; + wrd.new_height = m_windowHeight; + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::WindowResized, ostd::tSignalPriority::RealTime, wrd); + } + else if (event.type == SDL_EVENT_MOUSE_MOTION) + { + MouseEventData mmd = get_mouse_state(); + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MouseMoved, ostd::tSignalPriority::RealTime, mmd); + } + else if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) + { + MouseEventData mmd = get_mouse_state(); + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MousePressed, ostd::tSignalPriority::RealTime, mmd); + } + else if (event.type == SDL_EVENT_MOUSE_BUTTON_UP) + { + MouseEventData mmd = get_mouse_state(); + switch (event.button.button) + { + case SDL_BUTTON_MASK(1): mmd.button = MouseEventData::eButton::Left; break; + case SDL_BUTTON_MASK(2): mmd.button = MouseEventData::eButton::Middle; break; + case SDL_BUTTON_MASK(3): mmd.button = MouseEventData::eButton::Right; break; + default: mmd.button = MouseEventData::eButton::None; break; + } + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::MouseReleased, ostd::tSignalPriority::RealTime, mmd); + } + else if (event.type == SDL_EVENT_KEY_DOWN) + { + KeyEventData ked(*this, (int32_t)event.key.key, 0, KeyEventData::eKeyEvent::Pressed); + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::KeyPressed, ostd::tSignalPriority::RealTime, ked); + } + else if (event.type == SDL_EVENT_KEY_UP) + { + KeyEventData ked(*this, (int32_t)event.key.key, 0, KeyEventData::eKeyEvent::Released); + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::KeyReleased, ostd::tSignalPriority::RealTime, ked); + } + else if (event.type == SDL_EVENT_TEXT_INPUT) + { + KeyEventData ked(*this, 0, event.text.text[0], KeyEventData::eKeyEvent::Text); + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::TextEntered, ostd::tSignalPriority::RealTime, ked); + } + __on_event(event); + } + + + + + + void GraphicsWindow::__on_window_init(int32_t width, int32_t height, const ostd::String& title) + { + SDL_SetWindowResizable(m_window, false); + + m_fixedUpdateTImer.create(60.0, [this](double frameTime_s){ + this->onFixedUpdate(frameTime_s); + }); + + m_fpsUpdateTimer.create(1.0, [this](double frameTime_s){ + if (this->m_frameCount == 0) return; + if (this->m_frameTimeAcc == 0) return; + this->m_fps = (int32_t)(1.0f / (static_cast(this->m_frameTimeAcc) / static_cast(this->m_frameCount))); + this->m_frameTimeAcc = 0; + this->m_frameCount = 0; + }); + + setTypeName("ogfx::GraphicsWindow"); + onInitialize(); + } + + void GraphicsWindow::__on_window_close(void) + { + onClose(); + } + + void GraphicsWindow::__main_loop(void) + { + handle_events(); + before_render(); + m_fixedUpdateTImer.update(); + onUpdate(); + onRender(); + after_render(); + m_frameTimeAcc += m_fpsUpdateClock.restart(ostd::eTimeUnits::Seconds); + m_frameCount++; + m_fpsUpdateTimer.update(); + } + + void GraphicsWindow::__on_signal(ostd::tSignal& signal) + { + onSignal(signal); + } + + void GraphicsWindow::__on_event(SDL_Event& event) + { + onSDLEvent(event); + } + + void GraphicsWindow::__on_window_destroy(void) + { + onDestroy(); + } + + + + + namespace gui + { + void Window::addWidget(Widget& widget) + { + m_rootWidget.addChild(widget); + setTheme(*m_guiTheme); + } + + void Window::setTheme(const gui::Theme& theme) + { + m_guiTheme = &theme; + m_rootWidget.__applyTheme(theme, true); + } + + void Window::__on_window_init(int32_t width, int32_t height, const ostd::String& title) + { + enableBlockingEvents(); + setTypeName("ogfx::gui::Window"); + m_gfx.init(*this); + loadDefaultTHeme(); + onInitialize(); + } + + void Window::__on_window_close(void) + { + onClose(); + } + + void Window::__main_loop(void) + { + while (isRunning()) + { + handle_events(); + before_render(); + m_rootWidget.__update(); + m_rootWidget.__draw(m_gfx); + onRedraw(m_gfx); + after_render(); + } + } + + void Window::__on_signal(ostd::tSignal& signal) + { + Event evt(*this); + if (signal.ID == ostd::tBuiltinSignals::WindowClosed) + { + m_rootWidget.__onWindowClosed(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::WindowFocused) + { + m_rootWidget.__onWIndowFocused(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::WindowLostFocus) + { + m_rootWidget.__onWindowFocusLost(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::WindowResized) + { + evt.windowResized = &(ogfx::WindowResizedData&)signal.userData; + m_rootWidget.__onWindowResized(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::MouseMoved) + { + evt.mouse = &(ogfx::MouseEventData&)signal.userData; + m_rootWidget.__onMouseMoved(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::MousePressed) + { + evt.mouse = &(ogfx::MouseEventData&)signal.userData; + m_rootWidget.__onMousePressed(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::MouseReleased) + { + evt.mouse = &(ogfx::MouseEventData&)signal.userData; + m_rootWidget.__onMouseReleased(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::KeyPressed) + { + evt.keyboard = &(ogfx::KeyEventData&)signal.userData; + m_rootWidget.__onKeyPressed(evt); + } + else if (signal.ID == ostd::tBuiltinSignals::KeyReleased) + { + evt.keyboard = &(ogfx::KeyEventData&)signal.userData; + m_rootWidget.__onKeyReleased(evt); + if (evt.keyboard->keyCode == SDLK_ESCAPE) + close(); + } + else if (signal.ID == ostd::tBuiltinSignals::TextEntered) + { + evt.keyboard = &(ogfx::KeyEventData&)signal.userData; + m_rootWidget.__onTextEntered(evt); + } + onSignal(signal); + } + + void Window::__on_event(SDL_Event& event) + { + onSDLEvent(event); + } + + void Window::__on_window_destroy(void) + { + onDestroy(); + } + } +} diff --git a/src/ogfx/gui/Window.hpp b/src/ogfx/gui/Window.hpp new file mode 100644 index 0000000..47c1375 --- /dev/null +++ b/src/ogfx/gui/Window.hpp @@ -0,0 +1,186 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ogfx +{ + class WindowCore : public ostd::BaseObject + { + public: enum class eCursor { Arrow = 0, IBeam }; + public: + inline WindowCore(void) { } + virtual ~WindowCore(void); + inline WindowCore(int32_t width, int32_t height, const ostd::String& title) { initialize(width, height, title); } + void initialize(int32_t width, int32_t height, const ostd::String& title); + void mainLoop(void); + void close(void); + void setSize(int32_t width, int32_t height); + void setTitle(const ostd::String& title); + void setCursor(eCursor cursor); + void enableResizable(bool enable = true); + void setIcon(const ostd::String& iconFilePath); + void setBlockingEventsRefreshFPS(uint32_t fps); + void requestRedraw(void); + void handleSignal(ostd::tSignal& signal) override; + + inline bool isInitialized(void) const { return m_initialized; } + inline bool isRunning(void) const { return m_running; } + inline bool isVisible(void) const { return m_visible; } + inline bool isResizeable(void) const { return m_resizeable; } + inline void hide(void) { SDL_HideWindow(m_window); m_visible = false; } + inline void show(void) { SDL_ShowWindow(m_window); m_visible = true; } + inline ostd::String getTitle(void) const { return m_title; } + inline int32_t getWindowWidth(void) const { return m_windowWidth; } + inline int32_t getWindowHeight(void) const { return m_windowHeight; } + inline ostd::Color getClearColor(void) const { return m_clearColor; } + inline void setClearColor(const ostd::Color& color) { m_clearColor = color; } + inline SDL_Renderer* getSDLRenderer(void) { return m_renderer; } + inline void enableBlockingEvents(bool enable = true) { m_blockingEvents = enable; } + inline bool isBlockingEventsEnabled(void) const { return m_blockingEvents; } + inline ostd::ConsoleOutputHandler& out(void) { return m_out; } + inline GraphicsWindowOutputHandler& wout(void) { return m_wout; } + + protected: + MouseEventData get_mouse_state(void); + virtual void handle_events(void); + virtual void before_render(void); + virtual void after_render(void); + inline virtual void __on_event(SDL_Event& event) { } + inline virtual void __on_window_init(int32_t width, int32_t height, const ostd::String& title) { } + inline virtual void __on_window_destroy(void) { } + inline virtual void __on_window_close(void) { } + inline virtual void __on_signal(ostd::tSignal& signal) { } + inline virtual void __main_loop(void) = 0; + + private: + void __handle_event(SDL_Event& event); + + protected: + SDL_Window* m_window { nullptr }; + SDL_Renderer* m_renderer { nullptr }; + ostd::ConsoleOutputHandler m_out; + GraphicsWindowOutputHandler m_wout; + + private: + ostd::Color m_clearColor { 10, 10, 10, 255 }; + + int32_t m_windowWidth { 0 }; + int32_t m_windowHeight { 0 }; + ostd::String m_title { "" }; + int32_t m_blockingEventsDelay { 33 }; + + bool m_running { false }; + bool m_initialized { false }; + bool m_visible { true }; + bool m_blockingEvents { false }; + bool m_resizeable { true }; + bool m_refreshScreen { true }; + + SDL_Cursor* m_cursor_IBeam { nullptr }; + SDL_Cursor* m_cursor_Arrow { nullptr }; + + public: + inline static constexpr int32_t MaxBlockingEventsFPS { 240 }; + inline static constexpr int32_t DefaultBlockingEventsFPS { 30 }; + inline static const gui::Theme DefaultTheme; + }; + class GraphicsWindow : public WindowCore + { + public: enum class eCursor { Arrow = 0, IBeam }; + public: + inline GraphicsWindow(void) { } + inline GraphicsWindow(int32_t width, int32_t height, const ostd::String& title) { initialize(width, height, title); } + + inline virtual void onRender(void) { } + inline virtual void onUpdate(void) { } + inline virtual void onFixedUpdate(double frameTime_s) { } + inline virtual void onInitialize(void) { } + inline virtual void onDestroy(void) { } + inline virtual void onClose(void) { } + inline virtual void onSDLEvent(SDL_Event& event) { } + inline virtual void onSignal(ostd::tSignal& signal) { } + + inline int32_t getFPS(void) const { return m_fps; } + + protected: + void __on_window_init(int32_t width, int32_t height, const ostd::String& title) override; + void __on_event(SDL_Event& event) override; + void __on_window_destroy(void) override; + void __on_window_close(void) override; + void __main_loop(void) override; + void __on_signal(ostd::tSignal& signal) override; + + private: + int32_t m_fps { 0 }; + ostd::StepTimer m_fixedUpdateTImer; + ostd::StepTimer m_fpsUpdateTimer; + ostd::Timer m_fpsUpdateClock; + uint64_t m_frameTimeAcc { 0 }; + int32_t m_frameCount { 0 }; + }; + namespace gui + { + class Window : public WindowCore + { + public: enum class eCursor { Arrow = 0, IBeam }; + public: + inline Window(void) { } + inline Window(int32_t width, int32_t height, const ostd::String& title) { initialize(width, height, title); } + void addWidget(Widget& widget); + + inline virtual void onInitialize(void) { } + inline virtual void onDestroy(void) { } + inline virtual void onClose(void) { } + inline virtual void onSDLEvent(SDL_Event& event) { } + inline virtual void onRedraw(BasicRenderer2D& gfx) { } + inline virtual void onSignal(ostd::tSignal& signal) { } + + inline const gui::Theme& theme(void) const { return *m_guiTheme; } + void setTheme(const gui::Theme& theme); + inline void loadDefaultTHeme(void) { setTheme(DefaultTheme); } + + protected: + void __on_window_init(int32_t width, int32_t height, const ostd::String& title) override; + void __on_event(SDL_Event& event) override; + void __on_window_destroy(void) override; + void __on_window_close(void) override; + void __main_loop(void) override; + void __on_signal(ostd::tSignal& signal) override; + + private: + BasicRenderer2D m_gfx; + widgets::RootWidget m_rootWidget { *this }; + const gui::Theme* m_guiTheme { nullptr }; + + inline static const gui::Theme DefaultTheme; + }; + } +} diff --git a/src/ogfx/WindowBaseOutputHandler.cpp b/src/ogfx/gui/WindowOutputHandler.cpp similarity index 57% rename from src/ogfx/WindowBaseOutputHandler.cpp rename to src/ogfx/gui/WindowOutputHandler.cpp index 265db29..66b9e40 100644 --- a/src/ogfx/WindowBaseOutputHandler.cpp +++ b/src/ogfx/gui/WindowOutputHandler.cpp @@ -1,30 +1,51 @@ -#include "WindowBaseOutputHandler.hpp" -#include "BasicRenderer.hpp" -#include "../string/TextStyleParser.hpp" +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#include "WindowOutputHandler.hpp" +#include "../render/BasicRenderer.hpp" +#include "../../string/TextStyleParser.hpp" namespace ogfx { using namespace ostd; - WindowBaseOutputHandler::WindowBaseOutputHandler(void) + + GraphicsWindowOutputHandler::GraphicsWindowOutputHandler(void) { } - void WindowBaseOutputHandler::attachWindow(ogfx::WindowBase& window) + void GraphicsWindowOutputHandler::attachWindow(ogfx::WindowCore& window) { if (m_window != nullptr) return; m_window = &window; m_renderer.init(window); } - void WindowBaseOutputHandler::setMonospaceFont(const String& filePath) + void GraphicsWindowOutputHandler::setMonospaceFont(const String& filePath) { m_renderer.setFont(filePath); m_renderer.setFontSize(m_fontSize); __update_char_size(); } - Vec2 WindowBaseOutputHandler::getStringSize(const String& str) + Vec2 GraphicsWindowOutputHandler::getStringSize(const String& str) { Vec2 size = { 0.0f, m_charSize.y }; if (str.len() == 0) return size; @@ -32,23 +53,23 @@ namespace ogfx return size; } - bool WindowBaseOutputHandler::isReady(void) + bool GraphicsWindowOutputHandler::isReady(void) { return m_window != nullptr && m_renderer.getTTFRenderer().hasOpenFont() && m_fontSize > 0; } - void WindowBaseOutputHandler::resetCursorPosition(void) + void GraphicsWindowOutputHandler::resetCursorPosition(void) { m_curosrPosition = { 0, 0 }; } - void WindowBaseOutputHandler::resetColors(void) + void GraphicsWindowOutputHandler::resetColors(void) { m_foregroundColor = m_defaultForegroundColor; m_backgroundColor = m_defaultBackgroundColor; } - void WindowBaseOutputHandler::beginFrame(void) + void GraphicsWindowOutputHandler::beginFrame(void) { resetColors(); resetCursorPosition(); @@ -57,37 +78,37 @@ namespace ogfx - void WindowBaseOutputHandler::setConsoleMaxCharacters(const IPoint& size) + void GraphicsWindowOutputHandler::setConsoleMaxCharacters(const IPoint& size) { m_consoleSize = size; } - void WindowBaseOutputHandler::setConsolePosition(const Vec2& pos) + void GraphicsWindowOutputHandler::setConsolePosition(const Vec2& pos) { m_consolePosition = pos; } - void WindowBaseOutputHandler::setWrapMode(eWrapMode wrapMode) + void GraphicsWindowOutputHandler::setWrapMode(eWrapMode wrapMode) { m_wrapMode = wrapMode; } - void WindowBaseOutputHandler::setPadding(const Rectangle& rect) + void GraphicsWindowOutputHandler::setPadding(const Rectangle& rect) { m_padding = rect; } - void WindowBaseOutputHandler::setDefaultBackgorundColor(const Color& color) + void GraphicsWindowOutputHandler::setDefaultBackgorundColor(const Color& color) { m_defaultBackgroundColor = color; } - void WindowBaseOutputHandler::setDefaultForegroundColor(const Color& color) + void GraphicsWindowOutputHandler::setDefaultForegroundColor(const Color& color) { m_defaultForegroundColor = color; } - void WindowBaseOutputHandler::setTabWidth(uint8_t tw) + void GraphicsWindowOutputHandler::setTabWidth(uint8_t tw) { m_tabWidth = tw; } @@ -95,19 +116,19 @@ namespace ogfx - void WindowBaseOutputHandler::setFontSize(int32_t fontSize) + void GraphicsWindowOutputHandler::setFontSize(int32_t fontSize) { m_fontSize = fontSize; m_renderer.setFontSize(m_fontSize); __update_char_size(); } - int32_t WindowBaseOutputHandler::getFontSize(void) + int32_t GraphicsWindowOutputHandler::getFontSize(void) { return m_fontSize; } - Vec2 WindowBaseOutputHandler::getCharacterSize(int32_t fontSize) + Vec2 GraphicsWindowOutputHandler::getCharacterSize(int32_t fontSize) { if (fontSize > 0) { @@ -117,37 +138,37 @@ namespace ogfx return m_charSize; } - Vec2 WindowBaseOutputHandler::getConsolePosition(void) + Vec2 GraphicsWindowOutputHandler::getConsolePosition(void) { return m_consolePosition; } - WindowBaseOutputHandler::eWrapMode WindowBaseOutputHandler::getWrapMode(void) + GraphicsWindowOutputHandler::eWrapMode GraphicsWindowOutputHandler::getWrapMode(void) { return m_wrapMode; } - Rectangle WindowBaseOutputHandler::getPadding(void) + Rectangle GraphicsWindowOutputHandler::getPadding(void) { return m_padding; } - Color WindowBaseOutputHandler::getDefaultBackgroundColor(void) + Color GraphicsWindowOutputHandler::getDefaultBackgroundColor(void) { return m_defaultBackgroundColor; } - Color WindowBaseOutputHandler::getDefaultForegroundColor(void) + Color GraphicsWindowOutputHandler::getDefaultForegroundColor(void) { return m_defaultForegroundColor; } - uint8_t WindowBaseOutputHandler::getTabWidth(void) + uint8_t GraphicsWindowOutputHandler::getTabWidth(void) { return m_tabWidth; } - Rectangle WindowBaseOutputHandler::getConsoleBounds(void) + Rectangle GraphicsWindowOutputHandler::getConsoleBounds(void) { float console_w = ((float)m_consoleSize.x * getCharacterSize().x) + getPadding().x + getPadding().w; float console_h = ((float)m_consoleSize.y * getCharacterSize().y) + getPadding().y + getPadding().h; @@ -157,54 +178,54 @@ namespace ogfx - WindowBaseOutputHandler& WindowBaseOutputHandler::bg(const Color& color) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::bg(const Color& color) { m_backgroundColor = color; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::bg(const ConsoleColors::tConsoleColor& color) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::bg(const ConsoleColors::tConsoleColor& color) { m_backgroundColor = color.fullColor; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::bg(const String& color) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::bg(const String& color) { m_backgroundColor = ConsoleColors::getFromName(color).fullColor; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::fg(const Color& color) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::fg(const Color& color) { m_foregroundColor = color; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::fg(const ConsoleColors::tConsoleColor& color) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::fg(const ConsoleColors::tConsoleColor& color) { m_foregroundColor = color.fullColor; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::fg(const String& color) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::fg(const String& color) { m_foregroundColor = ConsoleColors::getFromName(color).fullColor; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::pChar(char c) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::pChar(char c) { __print_string(ostd::String("").addChar(c)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::pStyled(const String& styled) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::pStyled(const String& styled) { return pStyled(TextStyleParser::parse(styled, { m_backgroundColor, "", true }, { m_foregroundColor, "", false })); } - WindowBaseOutputHandler& WindowBaseOutputHandler::pStyled(const TextStyleParser::tStyledString& styled) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::pStyled(const TextStyleParser::tStyledString& styled) { if (!styled.validate()) return *this; Color oldBgCol = m_backgroundColor; @@ -216,7 +237,7 @@ namespace ogfx return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::pStyled(TextStyleBuilder::IRichStringBase& styled) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::pStyled(TextStyleBuilder::IRichStringBase& styled) { auto oldBg = styled.getDefaultBackgroundColor(); auto oldFg = styled.getDefaultForegroundColor(); @@ -228,79 +249,79 @@ namespace ogfx return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::pObject(const BaseObject& bo) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::pObject(const BaseObject& bo) { __print_string(bo.toString()); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(const String& se) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(const String& se) { __print_string(se); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(uint8_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(uint8_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(int8_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(int8_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(uint16_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(uint16_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(int16_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(int16_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(uint32_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(uint32_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(int32_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(int32_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(uint64_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(uint64_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(int64_t i) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(int64_t i) { __print_string(ostd::String("").add(i)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(float f, uint8_t precision) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(float f, uint8_t precision) { __print_string(ostd::String("").add(f, precision)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::p(double f, uint8_t precision) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::p(double f, uint8_t precision) { __print_string(ostd::String("").add(f, precision)); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::nl(void) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::nl(void) { if (m_curosrPosition.y >= getConsoleSize().y) return *this; m_curosrPosition.y++; @@ -308,7 +329,7 @@ namespace ogfx return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::tab(void) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::tab(void) { if (m_curosrPosition.x == 0) { @@ -323,68 +344,68 @@ namespace ogfx return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::flush(void) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::flush(void) { return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::clear(void) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::clear(void) { return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::reset(void) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::reset(void) { resetColors(); return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::xy(IPoint position) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::xy(IPoint position) { m_curosrPosition = { (float)position.x, (float)position.y }; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::xy(int32_t x, int32_t y) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::xy(int32_t x, int32_t y) { m_curosrPosition = { (float)x, (float)y }; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::x(int32_t x) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::x(int32_t x) { m_curosrPosition.x = (float)x; return *this; } - WindowBaseOutputHandler& WindowBaseOutputHandler::y(int32_t y) + GraphicsWindowOutputHandler& GraphicsWindowOutputHandler::y(int32_t y) { m_curosrPosition.y = (float)y; return *this; } - IPoint WindowBaseOutputHandler::getCursorPosition(void) + IPoint GraphicsWindowOutputHandler::getCursorPosition(void) { return { (int32_t)std::round(m_curosrPosition.x), (int32_t)std::round(m_curosrPosition.y) }; } - void WindowBaseOutputHandler::getCursorPosition(int32_t& outX, int32_t& outY) + void GraphicsWindowOutputHandler::getCursorPosition(int32_t& outX, int32_t& outY) { outX = (int32_t)std::round(m_curosrPosition.x); outY = (int32_t)std::round(m_curosrPosition.y); } - int32_t WindowBaseOutputHandler::getCursorX(void) + int32_t GraphicsWindowOutputHandler::getCursorX(void) { return (int32_t)std::round(m_curosrPosition.x); } - int32_t WindowBaseOutputHandler::getCursorY(void) + int32_t GraphicsWindowOutputHandler::getCursorY(void) { return (int32_t)std::round(m_curosrPosition.y); } - void WindowBaseOutputHandler::getConsoleSize(int32_t& outColumns, int32_t& outRows) + void GraphicsWindowOutputHandler::getConsoleSize(int32_t& outColumns, int32_t& outRows) { int32_t console_rows = std::numeric_limits::max(); int32_t console_cols = std::numeric_limits::max(); @@ -394,7 +415,7 @@ namespace ogfx outRows = console_rows; } - IPoint WindowBaseOutputHandler::getConsoleSize(void) + IPoint GraphicsWindowOutputHandler::getConsoleSize(void) { int32_t console_rows = std::numeric_limits::max(); int32_t console_cols = std::numeric_limits::max(); @@ -403,13 +424,13 @@ namespace ogfx return { console_cols, console_rows }; } - void WindowBaseOutputHandler::__update_char_size(void) + void GraphicsWindowOutputHandler::__update_char_size(void) { auto size = m_renderer.getStringSize("A", m_fontSize); m_charSize = { (float)size.x, (float)size.y }; } - void WindowBaseOutputHandler::__print_string(const String& str) + void GraphicsWindowOutputHandler::__print_string(const String& str) { if (!isReady()) return; auto l_endOfConsole = [&](void) -> bool { diff --git a/src/ogfx/WindowBaseOutputHandler.hpp b/src/ogfx/gui/WindowOutputHandler.hpp similarity index 56% rename from src/ogfx/WindowBaseOutputHandler.hpp rename to src/ogfx/gui/WindowOutputHandler.hpp index 4cb52d1..8c6423f 100644 --- a/src/ogfx/WindowBaseOutputHandler.hpp +++ b/src/ogfx/gui/WindowOutputHandler.hpp @@ -22,16 +22,17 @@ #include #include -#include +#include namespace ogfx { - class WindowBaseOutputHandler : public ostd::OutputHandlerBase + class WindowCore; + class GraphicsWindowOutputHandler : public ostd::OutputHandlerBase { public: enum class eWrapMode { TripleDots, NewLine }; public: - WindowBaseOutputHandler(void); - void attachWindow(WindowBase& window); + GraphicsWindowOutputHandler(void); + void attachWindow(WindowCore& window); void setMonospaceFont(const ostd::String& filePath); ostd::Vec2 getStringSize(const ostd::String& str); bool isReady(void); @@ -58,41 +59,41 @@ namespace ogfx uint8_t getTabWidth(void); ostd::Rectangle getConsoleBounds(void); - WindowBaseOutputHandler& bg(const ostd::Color& color) override; - WindowBaseOutputHandler& bg(const ostd::ConsoleColors::tConsoleColor& color) override; - WindowBaseOutputHandler& bg(const ostd::String& color) override; - WindowBaseOutputHandler& fg(const ostd::Color& color) override; - WindowBaseOutputHandler& fg(const ostd::ConsoleColors::tConsoleColor& color) override; - WindowBaseOutputHandler& fg(const ostd::String& color) override; + GraphicsWindowOutputHandler& bg(const ostd::Color& color) override; + GraphicsWindowOutputHandler& bg(const ostd::ConsoleColors::tConsoleColor& color) override; + GraphicsWindowOutputHandler& bg(const ostd::String& color) override; + GraphicsWindowOutputHandler& fg(const ostd::Color& color) override; + GraphicsWindowOutputHandler& fg(const ostd::ConsoleColors::tConsoleColor& color) override; + GraphicsWindowOutputHandler& fg(const ostd::String& color) override; - WindowBaseOutputHandler& pChar(char c) override; - WindowBaseOutputHandler& pStyled(const ostd::String& styled) override; - WindowBaseOutputHandler& pStyled(const ostd::TextStyleParser::tStyledString& styled) override; - WindowBaseOutputHandler& pStyled(ostd::TextStyleBuilder::IRichStringBase& styled) override; - WindowBaseOutputHandler& pObject(const ostd::BaseObject& bo) override; + GraphicsWindowOutputHandler& pChar(char c) override; + GraphicsWindowOutputHandler& pStyled(const ostd::String& styled) override; + GraphicsWindowOutputHandler& pStyled(const ostd::TextStyleParser::tStyledString& styled) override; + GraphicsWindowOutputHandler& pStyled(ostd::TextStyleBuilder::IRichStringBase& styled) override; + GraphicsWindowOutputHandler& pObject(const ostd::BaseObject& bo) override; - WindowBaseOutputHandler& p(const ostd::String& se) override; - WindowBaseOutputHandler& p(uint8_t i) override; - WindowBaseOutputHandler& p(int8_t i) override; - WindowBaseOutputHandler& p(uint16_t i) override; - WindowBaseOutputHandler& p(int16_t i) override; - WindowBaseOutputHandler& p(uint32_t i) override; - WindowBaseOutputHandler& p(int32_t i) override; - WindowBaseOutputHandler& p(uint64_t i) override; - WindowBaseOutputHandler& p(int64_t i) override; - WindowBaseOutputHandler& p(float f, uint8_t precision = 0) override; - WindowBaseOutputHandler& p(double f, uint8_t precision = 0) override; + GraphicsWindowOutputHandler& p(const ostd::String& se) override; + GraphicsWindowOutputHandler& p(uint8_t i) override; + GraphicsWindowOutputHandler& p(int8_t i) override; + GraphicsWindowOutputHandler& p(uint16_t i) override; + GraphicsWindowOutputHandler& p(int16_t i) override; + GraphicsWindowOutputHandler& p(uint32_t i) override; + GraphicsWindowOutputHandler& p(int32_t i) override; + GraphicsWindowOutputHandler& p(uint64_t i) override; + GraphicsWindowOutputHandler& p(int64_t i) override; + GraphicsWindowOutputHandler& p(float f, uint8_t precision = 0) override; + GraphicsWindowOutputHandler& p(double f, uint8_t precision = 0) override; - WindowBaseOutputHandler& nl(void) override; - WindowBaseOutputHandler& tab(void) override; - WindowBaseOutputHandler& flush(void) override; - WindowBaseOutputHandler& clear(void) override; - WindowBaseOutputHandler& reset(void) override; + GraphicsWindowOutputHandler& nl(void) override; + GraphicsWindowOutputHandler& tab(void) override; + GraphicsWindowOutputHandler& flush(void) override; + GraphicsWindowOutputHandler& clear(void) override; + GraphicsWindowOutputHandler& reset(void) override; - WindowBaseOutputHandler& xy(ostd::IPoint position) override; - WindowBaseOutputHandler& xy(int32_t x, int32_t y) override; - WindowBaseOutputHandler& x(int32_t x) override; - WindowBaseOutputHandler& y(int32_t y) override; + GraphicsWindowOutputHandler& xy(ostd::IPoint position) override; + GraphicsWindowOutputHandler& xy(int32_t x, int32_t y) override; + GraphicsWindowOutputHandler& x(int32_t x) override; + GraphicsWindowOutputHandler& y(int32_t y) override; ostd::IPoint getCursorPosition(void) override; void getCursorPosition(int32_t& outX, int32_t& outY) override; @@ -113,7 +114,7 @@ namespace ogfx ostd::Color m_defaultForegroundColor { 0, 220, 0, 255 }; ostd::Vec2 m_curosrPosition; BasicRenderer2D m_renderer; - WindowBase* m_window { nullptr }; + WindowCore* m_window { nullptr }; int32_t m_fontSize { 20 }; ostd::Vec2 m_charSize; ostd::IPoint m_consoleSize { 0, 0 }; diff --git a/src/ogfx/ogfx.hpp b/src/ogfx/ogfx.hpp new file mode 100644 index 0000000..d6d6612 --- /dev/null +++ b/src/ogfx/ogfx.hpp @@ -0,0 +1,35 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#pragma once + +#include + +#include +#include +#include + +#include +#include + +#include + +#include +#include diff --git a/src/ogfx/BasicRenderer.cpp b/src/ogfx/render/BasicRenderer.cpp similarity index 81% rename from src/ogfx/BasicRenderer.cpp rename to src/ogfx/render/BasicRenderer.cpp index 40d5268..b78077f 100644 --- a/src/ogfx/BasicRenderer.cpp +++ b/src/ogfx/render/BasicRenderer.cpp @@ -1,14 +1,34 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + #include "BasicRenderer.hpp" -#include "WindowBase.hpp" -#include +#include "../gui/Window.hpp" namespace ogfx { - void BasicRenderer2D::init(WindowBase& window) + void BasicRenderer2D::init(WindowCore& window) { m_window = &window; m_ttfr.init(window.getSDLRenderer()); m_initialized = true; + setDefaultFont(); } void BasicRenderer2D::setFont(const ostd::String& fontFilePath) @@ -17,33 +37,39 @@ namespace ogfx m_ttfr.openFont(fontFilePath, m_ttfr.getFontSize()); } + void BasicRenderer2D::setDefaultFont(void) + { + if (!m_initialized) return; + m_ttfr.loadDefaultFont(m_ttfr.getFontSize()); + } + void BasicRenderer2D::setFontSize(int32_t fontSize) { if (!m_initialized) return; m_ttfr.setFontSize(fontSize); } - void BasicRenderer2D::drawImage(const ogfx::Image& image, const ostd::Vec2& position, const ostd::Rectangle& rect) + void BasicRenderer2D::drawImage(ogfx::Image& image, const ostd::Vec2& position, const ostd::Rectangle& rect) { if (!m_initialized) return; if (!image.isLoaded()) return; - SDL_Rect texr; + SDL_FRect texr; texr.x = position.x; texr.y = position.y; texr.w = image.getSize().x; texr.h = image.getSize().y; - SDL_Rect srcRect; + SDL_FRect srcRect; srcRect.x = rect.x; srcRect.y = rect.y; srcRect.w = rect.w; srcRect.h = rect.w; if (srcRect.x == 0 && srcRect.y == 0 && srcRect.w == 0 && srcRect.h == 0) - SDL_RenderCopy(m_window->getSDLRenderer(), image.getSDLTexture(), nullptr, &texr); + SDL_RenderTexture(m_window->getSDLRenderer(), image.getSDLTexture(), nullptr, &texr); else { texr.w = srcRect.w; texr.h = srcRect.h; - SDL_RenderCopy(m_window->getSDLRenderer(), image.getSDLTexture(), &srcRect, &texr); + SDL_RenderTexture(m_window->getSDLRenderer(), image.getSDLTexture(), &srcRect, &texr); } } @@ -51,7 +77,7 @@ namespace ogfx { if (!m_initialized) return; if (!anim.hasImage()) return; - const auto& img = anim.getSpriteSheet(); + Image img = anim.getSpriteSheet(); if (!img.isLoaded() || !img.isValid()) return; drawImage(img, position, anim.getFrameRect()); } diff --git a/src/ogfx/BasicRenderer.hpp b/src/ogfx/render/BasicRenderer.hpp similarity index 87% rename from src/ogfx/BasicRenderer.hpp rename to src/ogfx/render/BasicRenderer.hpp index 51b99b9..297c64f 100644 --- a/src/ogfx/BasicRenderer.hpp +++ b/src/ogfx/render/BasicRenderer.hpp @@ -20,28 +20,29 @@ #pragma once -#include "Animation.hpp" -#include +#include +#include #include -#include +#include namespace ogfx { - class WindowBase; + class WindowCore; class BasicRenderer2D { public: BasicRenderer2D(void) = default; - void init(WindowBase& window); + void init(WindowCore& window); inline TTFRenderer& getTTFRenderer(void) { return m_ttfr; } inline ostd::IPoint getStringSize(const ostd::String str, int32_t fontSize = 0) { return m_ttfr.getStringDimensions(str, fontSize); } - inline WindowBase& getWindow(void) { return *m_window; } + inline WindowCore& getWindow(void) { return *m_window; } inline bool isInitialized(void) { return m_initialized; } void setFont(const ostd::String& fontFilePath); + void setDefaultFont(void); void setFontSize(int32_t fontSize); - void drawImage(const ogfx::Image& image, const ostd::Vec2& position, const ostd::Rectangle& rect = { 0, 0, 0, 0 }); + void drawImage(ogfx::Image& image, const ostd::Vec2& position, const ostd::Rectangle& rect = { 0, 0, 0, 0 }); void drawAnimation(const Animation& anim, const ostd::Vec2& position); void drawString(const ostd::String& str, const ostd::Vec2& position, const ostd::Color& color, int32_t fontSize = 0); @@ -63,7 +64,7 @@ namespace ogfx private: TTFRenderer m_ttfr; - WindowBase* m_window { nullptr }; + WindowCore* m_window { nullptr }; bool m_initialized { false }; }; } diff --git a/src/ogfx/FontUtils.cpp b/src/ogfx/render/FontUtils.cpp similarity index 62% rename from src/ogfx/FontUtils.cpp rename to src/ogfx/render/FontUtils.cpp index 1cb98b2..3cf3ea2 100644 --- a/src/ogfx/FontUtils.cpp +++ b/src/ogfx/render/FontUtils.cpp @@ -1,7 +1,46 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + #include "FontUtils.hpp" +#include "../resources/UbuntuMonoRegularTTF.hpp" namespace ogfx { + TTFRenderer::SignalHandler::SignalHandler(TTFRenderer& parent) : m_parent(parent) + { + enableSignals(); + connectSignal(ostd::tBuiltinSignals::BeforeSDLShutdown); + setTypeName("ostd::GraphicsWindowOutputHandler::SignalHandler"); + validate(); + } + + void TTFRenderer::SignalHandler::handleSignal(ostd::tSignal& signal) + { + if (signal.ID == ostd::tBuiltinSignals::BeforeSDLShutdown) + { + m_parent.closeFont(); + } + } + + + TTFRenderer::~TTFRenderer(void) { closeFont(); @@ -30,7 +69,7 @@ namespace ogfx return; } setFontSize(fontSize); - SDL_Surface* surf = TTF_RenderText_Blended(m_font, message.c_str(), { color.r, color.g, color.b, color.a }); + SDL_Surface* surf = TTF_RenderText_Blended(m_font, message.c_str(), message.len(), { color.r, color.g, color.b, color.a }); if (surf == nullptr) { set_error_state(tErrors::TTFRenderTextBlendedFail); @@ -44,17 +83,17 @@ namespace ogfx print_ttf_error("SDL_CreateTextureFromSurface"); return; } - SDL_FreeSurface(surf); + SDL_DestroySurface(surf); - int32_t w = 0, h = 0; - SDL_QueryTexture(texture, NULL, NULL, &w, &h); + float w = 0, h = 0; + SDL_GetTextureSize(texture, &w, &h); - SDL_Rect dst; + SDL_FRect dst; dst.x = x; dst.y = y; dst.w = w; dst.h = h; - SDL_RenderCopy(m_renderer, texture, NULL, &dst); + SDL_RenderTexture(m_renderer, texture, NULL, &dst); SDL_DestroyTexture(texture); } @@ -81,7 +120,7 @@ namespace ogfx return; } setFontSize(fontSize); - SDL_Surface* surf = TTF_RenderText_Blended(m_font, message.c_str(), { color.r, color.g, color.b, color.a }); + SDL_Surface* surf = TTF_RenderText_Blended(m_font, message.c_str(), message.len(), { color.r, color.g, color.b, color.a }); if (surf == nullptr) { set_error_state(tErrors::TTFRenderTextBlendedFail); @@ -95,17 +134,17 @@ namespace ogfx print_ttf_error("SDL_CreateTextureFromSurface"); return; } - SDL_FreeSurface(surf); + SDL_DestroySurface(surf); - int32_t w = 0, h = 0; - SDL_QueryTexture(texture, NULL, NULL, &w, &h); + float w = 0, h = 0; + SDL_GetTextureSize(texture, &w, &h); - SDL_Rect dst; + SDL_FRect dst; dst.x = center_x - (w / 2); dst.y = center_y - (h / 2); dst.w = w; dst.h = h; - SDL_RenderCopy(m_renderer, texture, NULL, &dst); + SDL_RenderTexture(m_renderer, texture, NULL, &dst); SDL_DestroyTexture(texture); } @@ -132,7 +171,7 @@ namespace ogfx return { 0, 0 }; } setFontSize(fontSize); - SDL_Surface* surf = TTF_RenderText_Blended(m_font, message.c_str(), { 0, 0, 0, 255 }); + SDL_Surface* surf = TTF_RenderText_Blended(m_font, message.c_str(), message.len(), { 0, 0, 0, 255 }); if (surf == nullptr) { set_error_state(tErrors::TTFRenderTextBlendedFail); @@ -146,29 +185,28 @@ namespace ogfx print_ttf_error("SDL_CreateTextureFromSurface"); return { 0, 0 }; } - SDL_FreeSurface(surf); + SDL_DestroySurface(surf); - int32_t w = 0, h = 0; - SDL_QueryTexture(texture, NULL, NULL, &w, &h); + float w = 0, h = 0; + SDL_GetTextureSize(texture, &w, &h); SDL_DestroyTexture(texture); - return { w, h }; + return { static_cast(w), static_cast(h) }; } int32_t TTFRenderer::init(SDL_Renderer* renderer) { if (TTFRenderer::m_initialized) return set_error_state(tErrors::NoError); if (renderer == nullptr) return set_error_state(tErrors::NullRenderer); - if (TTF_Init() != 0) - { - print_ttf_error("TTF_Init"); - SDL_Quit(); - return set_error_state(tErrors::FailedToLoad); - } m_renderer = renderer; TTFRenderer::m_initialized = true; return set_error_state(tErrors::NoError); } + int32_t TTFRenderer::loadDefaultFont(int32_t fontSize) + { + return openFont(ubuntu_mono_regular_ttf_data, ubuntu_mono_regular_ttf_size, fontSize); + } + void TTFRenderer::closeFont(void) { if (!TTFRenderer::m_initialized || !m_fontOpen) return; @@ -177,6 +215,7 @@ namespace ogfx m_font = nullptr; m_fontOpen = false; m_fontSize = DefaultFontSize; + m_fontFromMemory = false; set_error_state(tErrors::NoError); } @@ -195,6 +234,29 @@ namespace ogfx return set_error_state(tErrors::FailedToOpenFontFile); } m_fontOpen = true; + m_fontFromMemory = false; + return set_error_state(tErrors::NoError); + } + + int32_t TTFRenderer::openFont(const ostd::UByte resource_data[], uint32_t data_size, int32_t fontSize) + { + if (!TTFRenderer::m_initialized) return set_error_state(tErrors::Uninitialized); + if (data_size < 100) // Arbitrary 100 bytes + return set_error_state(tErrors::FailedToOpenFontFile); + if (m_fontOpen) closeFont(); + if (fontSize <= 0) + fontSize = m_fontSize; + else + m_fontSize = fontSize; + SDL_IOStream* rw = SDL_IOFromConstMem(resource_data, data_size); + m_font = TTF_OpenFontIO(rw, true, fontSize); + if (m_font == nullptr) + { + print_ttf_error("TTF_OpenFont"); + return set_error_state(tErrors::FailedToOpenFontFile); + } + m_fontOpen = true; + m_fontFromMemory = true; return set_error_state(tErrors::NoError); } @@ -213,6 +275,6 @@ namespace ogfx void TTFRenderer::print_ttf_error(const ostd::String& funcName) { - m_out.fg(ostd::ConsoleColors::Red).p(funcName).p("(...) failed: ").p(ostd::String(TTF_GetError())).reset().nl(); + m_out.fg(ostd::ConsoleColors::Red).p(funcName).p("(...) failed: ").p(ostd::String(SDL_GetError())).reset().nl(); } -} \ No newline at end of file +} diff --git a/src/ogfx/FontUtils.hpp b/src/ogfx/render/FontUtils.hpp similarity index 82% rename from src/ogfx/FontUtils.hpp rename to src/ogfx/render/FontUtils.hpp index feff883..0207fdb 100644 --- a/src/ogfx/FontUtils.hpp +++ b/src/ogfx/render/FontUtils.hpp @@ -20,7 +20,7 @@ #pragma once -#include +#include #include #include @@ -28,6 +28,15 @@ namespace ogfx { class TTFRenderer { + private: class SignalHandler : public ostd::BaseObject + { + public: + SignalHandler(TTFRenderer& parent); + void handleSignal(ostd::tSignal& signal) override; + + private: + TTFRenderer& m_parent; + }; public: struct tErrors { inline static constexpr int32_t NoError = 0; @@ -40,14 +49,17 @@ namespace ogfx inline static constexpr int32_t TTFCreateTextureFromSurfaceFail = 7; inline static constexpr int32_t NullFont = 8; inline static constexpr int32_t NoFont = 9; + inline static constexpr int32_t FailedToOpenFontByteStrean = 10; }; public: TTFRenderer(void) = default; ~TTFRenderer(void); inline TTFRenderer(SDL_Renderer* renderer) { init(renderer); } int32_t init(SDL_Renderer* renderer); + int32_t loadDefaultFont(int32_t fontSize = 0); void closeFont(void); int32_t openFont(const ostd::String& fontPath, int32_t fontSize = 0); + int32_t openFont(const ostd::UByte resource_data[], uint32_t data_size, int32_t fontSize = 0); int32_t setFontSize(int32_t fontSize); void renderText(const ostd::String& message, int32_t x, int32_t y, const ostd::Color& color, int32_t fontSize = 0); void renderCenteredText(const ostd::String& message, int32_t center_x, int32_t center_y, const ostd::Color& color, int32_t fontSize = 0); @@ -55,7 +67,7 @@ namespace ogfx inline bool isInitialized(void) { return TTFRenderer::m_initialized; } inline bool hasOpenFont(void) { return m_fontOpen; } inline TTF_Font* getSDLFont(void) { return m_font; } - inline bool isValid(void) { return TTFRenderer::m_initialized && m_fontOpen && m_font != nullptr && m_renderer != nullptr; } + inline bool isValid(void) { return TTFRenderer::m_initialized && m_fontOpen && (m_font != nullptr || m_fontFromMemory) && m_renderer != nullptr; } inline int32_t geterrorState(void) { return m_errorState; } inline int32_t getFontSize(void) { return m_fontSize; } @@ -65,12 +77,14 @@ namespace ogfx private: ostd::ConsoleOutputHandler m_out; + SignalHandler m_sigHndl { *this }; bool m_initialized { false }; bool m_fontOpen { false }; TTF_Font* m_font { nullptr }; SDL_Renderer* m_renderer { nullptr }; int32_t m_errorState { tErrors::NoError }; int32_t m_fontSize { DefaultFontSize }; + bool m_fontFromMemory { false }; inline static constexpr int32_t DefaultFontSize { 16 }; }; diff --git a/src/ogfx/PixelRenderer.cpp b/src/ogfx/render/PixelRenderer.cpp similarity index 82% rename from src/ogfx/PixelRenderer.cpp rename to src/ogfx/render/PixelRenderer.cpp index 1f530a9..e28a80a 100644 --- a/src/ogfx/PixelRenderer.cpp +++ b/src/ogfx/render/PixelRenderer.cpp @@ -1,6 +1,27 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + #include "PixelRenderer.hpp" -#include "WindowBase.hpp" -#include "../ostd/io/Memory.hpp" +#include "../gui/Window.hpp" +#include "../../ostd/io/Memory.hpp" +#include namespace ogfx { @@ -111,7 +132,7 @@ namespace ogfx SDL_DestroyTexture(m_texture); } - void PixelRenderer::initialize(WindowBase& parent) + void PixelRenderer::initialize(WindowCore& parent) { if (isValid()) return; //TODO: Error if (!parent.isValid() || !parent.isInitialized()) @@ -151,8 +172,8 @@ namespace ogfx void PixelRenderer::displayBuffer(void) { if (isInvalid()) return; - SDL_Rect rect { 0, 0, m_windowWidth, m_windowHeight }; - SDL_RenderCopy(m_parent->getSDLRenderer(), m_texture, NULL, &rect); + SDL_FRect rect { 0, 0, static_cast(m_windowWidth), static_cast(m_windowHeight) }; + SDL_RenderTexture(m_parent->getSDLRenderer(), m_texture, NULL, &rect); } void PixelRenderer::clear(const ostd::Color& color) diff --git a/src/ogfx/PixelRenderer.hpp b/src/ogfx/render/PixelRenderer.hpp similarity index 94% rename from src/ogfx/PixelRenderer.hpp rename to src/ogfx/render/PixelRenderer.hpp index 23c6473..d0ba46c 100644 --- a/src/ogfx/PixelRenderer.hpp +++ b/src/ogfx/render/PixelRenderer.hpp @@ -23,12 +23,12 @@ #include #include #include -#include +#include #include namespace ogfx { - class WindowBase; + class WindowCore; class PixelRenderer : public ostd::BaseObject { public: class TextRenderer @@ -73,7 +73,7 @@ namespace ogfx } inline ~Font(void) { - SDL_FreeSurface(m_fontSurface); + SDL_DestroySurface(m_fontSurface); } public: @@ -83,7 +83,7 @@ namespace ogfx public: inline PixelRenderer(void) { invalidate(); } ~PixelRenderer(void); - void initialize(WindowBase& parent); + void initialize(WindowCore& parent); void handleSignal(ostd::tSignal& signal) override; void updateBuffer(void); void displayBuffer(void); @@ -94,7 +94,7 @@ namespace ogfx private: uint32_t* m_pixels { nullptr }; SDL_Texture* m_texture { nullptr }; - WindowBase* m_parent { nullptr }; + WindowCore* m_parent { nullptr }; int32_t m_windowWidth { 0 }; int32_t m_windowHeight { 0 }; }; diff --git a/src/ogfx/resources/Image.cpp b/src/ogfx/resources/Image.cpp new file mode 100644 index 0000000..f05f635 --- /dev/null +++ b/src/ogfx/resources/Image.cpp @@ -0,0 +1,53 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#include "Image.hpp" +#include "../../io/Logger.hpp" +#include "../render/BasicRenderer.hpp" +#include "../gui/Window.hpp" + +namespace ogfx +{ + void Image::destroy(void) + { + SDL_DestroyTexture(m_sdl_texture); + m_loaded = false; + m_sdl_texture = nullptr; + m_width = 0; + m_height = 0; + } + + Image& Image::loadFromFile(const ostd::String& filePath, BasicRenderer2D& gfx) + { + if (!gfx.isInitialized()) + return *this; //TODO: Error + m_sdl_texture = IMG_LoadTexture(gfx.getWindow().getSDLRenderer(), filePath.c_str()); + if (!m_sdl_texture) + { + OX_ERROR("Failed to load Image: %s", SDL_GetError()); + return *this; + } + SDL_GetTextureSize(m_sdl_texture, &m_width, &m_height); + m_loaded = true; + setTypeName("ogfx::Image"); + validate(); + return *this; + } +} diff --git a/src/ogfx/Image.hpp b/src/ogfx/resources/Image.hpp similarity index 84% rename from src/ogfx/Image.hpp rename to src/ogfx/resources/Image.hpp index ff95d87..bc55a0b 100644 --- a/src/ogfx/Image.hpp +++ b/src/ogfx/resources/Image.hpp @@ -21,7 +21,7 @@ #pragma once #include -#include +#include #include namespace ogfx @@ -35,14 +35,14 @@ namespace ogfx inline ~Image(void) { destroy(); } void destroy(void); Image& loadFromFile(const ostd::String& filePath, BasicRenderer2D& gfx); - inline ostd::IPoint getSize(void) const { return { m_width, m_height }; } + inline ostd::Vec2 getSize(void) const { return { m_width, m_height }; } inline bool isLoaded(void) const { return m_loaded; } - inline SDL_Texture* getSDLTexture(void) const { return m_sdl_texture; } + inline SDL_Texture* getSDLTexture(void) { return m_sdl_texture; } private: SDL_Texture* m_sdl_texture { nullptr }; - int32_t m_width { 0 }; - int32_t m_height { 0 }; + float m_width { 0 }; + float m_height { 0 }; bool m_loaded { false }; }; } diff --git a/src/ogfx/resources/UbuntuMonoRegularTTF.cpp b/src/ogfx/resources/UbuntuMonoRegularTTF.cpp new file mode 100644 index 0000000..54770c0 --- /dev/null +++ b/src/ogfx/resources/UbuntuMonoRegularTTF.cpp @@ -0,0 +1,9536 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +/* + This file embeds the Ubuntu Mono font as a static byte array. + The font itself is ยฉ Canonical Ltd. and distributed under the + Ubuntu Font License 1.0. The font data included here is the + unmodified original TTF file. + + This header and the surrounding code are ยฉ 2026 Shasa (GPLv3), + but the embedded font remains under its original license. + + The full Ubuntu Font License text is provided in: + licenses/Ubuntu-Font-LICENCE.txt +*/ + +#include "UbuntuMonoRegularTTF.hpp" + +namespace ogfx +{ + const uint32_t ubuntu_mono_regular_ttf_size = 189892; + const ostd::UByte ubuntu_mono_regular_ttf_data[189892] = { + 0, 1, 0, 0, 0, 16, 1, 0, 0, 4, 0, 0, 71, 83, 85, 66, 172, 54, 149, 231, + 0, 0, 34, 204, 0, 0, 16, 50, 79, 83, 47, 50, 136, 193, 253, 210, 0, 0, 1, 144, + 0, 0, 0, 96, 86, 68, 77, 88, 108, 171, 116, 66, 0, 0, 12, 180, 0, 0, 5, 224, + 99, 109, 97, 112, 163, 200, 59, 66, 0, 0, 8, 64, 0, 0, 4, 116, 99, 118, 116, 32, + 11, 79, 18, 78, 0, 0, 3, 124, 0, 0, 2, 4, 102, 112, 103, 109, 118, 189, 68, 196, + 0, 0, 18, 148, 0, 0, 6, 35, 103, 97, 115, 112, 255, 255, 0, 3, 0, 0, 1, 12, + 0, 0, 0, 8, 103, 108, 121, 102, 80, 171, 179, 0, 0, 0, 116, 192, 0, 2, 113, 4, + 104, 101, 97, 100, 245, 6, 30, 221, 0, 0, 1, 88, 0, 0, 0, 54, 104, 104, 101, 97, + 5, 53, 0, 167, 0, 0, 1, 52, 0, 0, 0, 36, 104, 109, 116, 120, 92, 2, 87, 154, + 0, 0, 24, 184, 0, 0, 10, 20, 108, 111, 99, 97, 6, 209, 126, 24, 0, 0, 51, 0, + 0, 0, 20, 40, 109, 97, 120, 112, 11, 121, 9, 163, 0, 0, 1, 20, 0, 0, 0, 32, + 110, 97, 109, 101, 60, 236, 108, 207, 0, 0, 5, 128, 0, 0, 2, 190, 112, 111, 115, 116, + 29, 182, 168, 108, 0, 0, 71, 40, 0, 0, 45, 150, 112, 114, 101, 112, 146, 62, 47, 164, + 0, 0, 1, 240, 0, 0, 1, 138, 0, 0, 0, 1, 255, 255, 0, 2, 0, 1, 0, 0, + 5, 9, 1, 84, 0, 85, 0, 110, 0, 7, 0, 2, 0, 16, 0, 47, 0, 89, 0, 0, + 5, 167, 7, 175, 0, 3, 0, 1, 0, 1, 0, 0, 3, 62, 255, 86, 0, 0, 1, 244, + 255, 91, 255, 91, 2, 153, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 204, 204, 139, 33, 235, 231, 95, 15, 60, 245, + 0, 9, 3, 232, 0, 0, 0, 0, 201, 229, 190, 203, 0, 0, 0, 0, 202, 166, 79, 203, + 254, 196, 255, 86, 2, 153, 3, 62, 0, 0, 0, 9, 0, 2, 0, 1, 0, 0, 0, 0, + 0, 3, 1, 244, 1, 144, 0, 5, 0, 0, 2, 188, 2, 138, 0, 0, 0, 140, 2, 188, + 2, 138, 0, 0, 1, 221, 0, 50, 0, 250, 0, 0, 2, 11, 5, 9, 3, 6, 2, 3, + 2, 4, 224, 0, 2, 255, 80, 0, 32, 91, 0, 0, 0, 0, 0, 0, 0, 0, 68, 65, + 77, 65, 0, 64, 0, 0, 255, 253, 2, 181, 255, 91, 0, 49, 3, 62, 0, 170, 32, 0, + 0, 159, 86, 1, 0, 0, 2, 8, 2, 181, 0, 0, 0, 32, 0, 3, 64, 14, 159, 163, + 175, 163, 2, 64, 157, 26, 33, 70, 155, 121, 42, 31, 184, 255, 192, 64, 12, 154, 12, 18, + 70, 151, 121, 72, 31, 149, 115, 42, 31, 184, 255, 192, 64, 84, 148, 12, 18, 70, 146, 115, + 19, 31, 145, 115, 72, 31, 143, 121, 42, 31, 142, 121, 72, 31, 140, 115, 42, 31, 139, 115, + 72, 31, 129, 115, 42, 31, 138, 131, 42, 31, 137, 134, 72, 31, 136, 121, 42, 31, 133, 121, + 72, 31, 131, 115, 19, 31, 130, 115, 42, 31, 127, 115, 72, 31, 120, 115, 42, 31, 124, 121, + 42, 31, 175, 121, 191, 121, 207, 121, 3, 64, 121, 31, 35, 70, 118, 115, 42, 31, 186, 1, + 1, 0, 67, 1, 0, 64, 34, 85, 104, 67, 103, 85, 102, 67, 101, 85, 100, 67, 97, 85, + 99, 67, 96, 85, 98, 67, 95, 85, 94, 67, 93, 85, 92, 67, 91, 85, 90, 67, 89, 85, + 176, 184, 1, 0, 64, 74, 1, 15, 101, 1, 15, 101, 127, 101, 143, 101, 3, 48, 97, 1, + 16, 97, 48, 97, 96, 97, 144, 97, 176, 97, 224, 97, 6, 175, 95, 1, 0, 93, 1, 48, + 93, 96, 93, 144, 93, 3, 88, 67, 86, 85, 87, 67, 85, 85, 83, 144, 77, 85, 82, 144, + 75, 85, 81, 144, 74, 85, 80, 144, 73, 85, 70, 91, 66, 85, 69, 91, 65, 85, 84, 83, + 184, 1, 0, 179, 22, 1, 5, 1, 184, 1, 144, 75, 184, 3, 231, 82, 75, 176, 8, 80, + 91, 176, 1, 136, 176, 37, 83, 176, 1, 136, 176, 64, 81, 90, 176, 6, 136, 176, 0, 85, + 90, 91, 88, 177, 1, 1, 142, 89, 133, 141, 141, 0, 66, 29, 75, 176, 29, 83, 88, 176, + 160, 29, 89, 75, 176, 72, 83, 88, 176, 64, 29, 89, 75, 176, 128, 83, 88, 176, 0, 29, + 177, 22, 0, 66, 89, 43, 43, 0, 43, 43, 43, 43, 43, 43, 43, 43, 115, 116, 115, 115, + 116, 115, 116, 115, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 0, 43, 115, 43, 43, + 1, 43, 43, 43, 0, 43, 43, 43, 43, 43, 1, 43, 43, 0, 43, 43, 1, 43, 43, 43, + 43, 0, 43, 43, 43, 1, 43, 0, 116, 24, 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, 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, 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, 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, 2, 107, 0, 0, 0, 0, 0, 0, 0, 13, 255, 243, 0, 0, 0, 0, 1, 208, + 0, 0, 255, 91, 0, 0, 2, 181, 0, 0, 0, 0, 0, 10, 255, 246, 255, 246, 0, 10, + 0, 0, 0, 0, 2, 107, 255, 242, 0, 14, 2, 107, 0, 14, 0, 0, 255, 242, 1, 52, + 255, 242, 1, 25, 2, 112, 1, 120, 255, 242, 0, 9, 255, 247, 0, 250, 0, 9, 0, 0, + 255, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 82, 0, 0, 0, 0, 0, 84, 0, 0, 0, 82, 0, 70, 0, 0, 0, 58, + 0, 72, 0, 0, 0, 66, 0, 82, 0, 0, 0, 82, 0, 85, 0, 115, 0, 61, 0, 70, + 0, 67, 0, 0, 0, 72, 0, 67, 0, 120, 0, 82, 0, 84, 0, 67, 0, 70, 0, 72, + 0, 0, 0, 82, 0, 96, 0, 0, 0, 135, 0, 84, 0, 60, 0, 70, 0, 54, 0, 0, + 0, 135, 0, 72, 0, 60, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, + 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 25, 255, 247, 0, 0, 0, 15, 0, 186, 0, 3, 0, 1, 4, 9, + 0, 0, 0, 146, 1, 114, 0, 3, 0, 1, 4, 9, 0, 1, 0, 22, 1, 92, 0, 3, + 0, 1, 4, 9, 0, 2, 0, 14, 1, 78, 0, 3, 0, 1, 4, 9, 0, 3, 0, 64, + 1, 14, 0, 3, 0, 1, 4, 9, 0, 4, 0, 22, 1, 92, 0, 3, 0, 1, 4, 9, + 0, 5, 0, 24, 0, 246, 0, 3, 0, 1, 4, 9, 0, 6, 0, 36, 0, 210, 0, 3, + 0, 1, 4, 9, 0, 7, 0, 128, 0, 82, 0, 3, 0, 1, 4, 9, 0, 8, 0, 30, + 0, 52, 0, 3, 0, 1, 4, 9, 0, 9, 0, 30, 0, 52, 0, 3, 0, 1, 4, 9, + 0, 11, 0, 52, 0, 0, 0, 3, 0, 1, 4, 9, 0, 12, 0, 52, 0, 0, 0, 3, + 0, 1, 4, 9, 0, 16, 0, 22, 1, 92, 0, 3, 0, 1, 4, 9, 0, 17, 0, 14, + 1, 78, 0, 3, 0, 1, 4, 9, 0, 18, 0, 22, 1, 92, 0, 104, 0, 116, 0, 116, + 0, 112, 0, 58, 0, 47, 0, 47, 0, 119, 0, 119, 0, 119, 0, 46, 0, 100, 0, 97, + 0, 108, 0, 116, 0, 111, 0, 110, 0, 109, 0, 97, 0, 97, 0, 103, 0, 46, 0, 99, + 0, 111, 0, 109, 0, 47, 0, 68, 0, 97, 0, 108, 0, 116, 0, 111, 0, 110, 0, 32, + 0, 77, 0, 97, 0, 97, 0, 103, 0, 32, 0, 76, 0, 116, 0, 100, 0, 85, 0, 98, + 0, 117, 0, 110, 0, 116, 0, 117, 0, 32, 0, 97, 0, 110, 0, 100, 0, 32, 0, 67, + 0, 97, 0, 110, 0, 111, 0, 110, 0, 105, 0, 99, 0, 97, 0, 108, 0, 32, 0, 97, + 0, 114, 0, 101, 0, 32, 0, 114, 0, 101, 0, 103, 0, 105, 0, 115, 0, 116, 0, 101, + 0, 114, 0, 101, 0, 100, 0, 32, 0, 116, 0, 114, 0, 97, 0, 100, 0, 101, 0, 109, + 0, 97, 0, 114, 0, 107, 0, 115, 0, 32, 0, 111, 0, 102, 0, 32, 0, 67, 0, 97, + 0, 110, 0, 111, 0, 110, 0, 105, 0, 99, 0, 97, 0, 108, 0, 32, 0, 76, 0, 116, + 0, 100, 0, 46, 0, 85, 0, 98, 0, 117, 0, 110, 0, 116, 0, 117, 0, 77, 0, 111, + 0, 110, 0, 111, 0, 45, 0, 82, 0, 101, 0, 103, 0, 117, 0, 108, 0, 97, 0, 114, + 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 32, 0, 48, 0, 46, + 0, 56, 0, 48, 0, 85, 0, 98, 0, 117, 0, 110, 0, 116, 0, 117, 0, 32, 0, 77, + 0, 111, 0, 110, 0, 111, 0, 32, 0, 82, 0, 101, 0, 103, 0, 117, 0, 108, 0, 97, + 0, 114, 0, 32, 0, 86, 0, 101, 0, 114, 0, 115, 0, 105, 0, 111, 0, 110, 0, 32, + 0, 48, 0, 46, 0, 56, 0, 48, 0, 82, 0, 101, 0, 103, 0, 117, 0, 108, 0, 97, + 0, 114, 0, 85, 0, 98, 0, 117, 0, 110, 0, 116, 0, 117, 0, 32, 0, 77, 0, 111, + 0, 110, 0, 111, 0, 67, 0, 111, 0, 112, 0, 121, 0, 114, 0, 105, 0, 103, 0, 104, + 0, 116, 0, 32, 0, 50, 0, 48, 0, 49, 0, 49, 0, 32, 0, 67, 0, 97, 0, 110, + 0, 111, 0, 110, 0, 105, 0, 99, 0, 97, 0, 108, 0, 32, 0, 76, 0, 116, 0, 100, + 0, 46, 0, 32, 0, 32, 0, 76, 0, 105, 0, 99, 0, 101, 0, 110, 0, 115, 0, 101, + 0, 100, 0, 32, 0, 117, 0, 110, 0, 100, 0, 101, 0, 114, 0, 32, 0, 116, 0, 104, + 0, 101, 0, 32, 0, 85, 0, 98, 0, 117, 0, 110, 0, 116, 0, 117, 0, 32, 0, 70, + 0, 111, 0, 110, 0, 116, 0, 32, 0, 76, 0, 105, 0, 99, 0, 101, 0, 110, 0, 99, + 0, 101, 0, 32, 0, 49, 0, 46, 0, 48, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, + 0, 0, 0, 20, 0, 3, 0, 1, 0, 0, 0, 20, 0, 4, 4, 96, 0, 0, 0, 230, + 0, 128, 0, 6, 0, 102, 0, 0, 0, 9, 0, 13, 0, 29, 0, 126, 1, 49, 1, 55, + 1, 72, 1, 81, 1, 83, 1, 95, 1, 97, 1, 119, 1, 127, 1, 145, 1, 146, 2, 23, + 2, 27, 2, 54, 2, 55, 2, 79, 2, 146, 2, 188, 2, 199, 2, 201, 2, 219, 2, 221, + 3, 17, 3, 134, 3, 138, 3, 140, 3, 144, 3, 161, 3, 169, 3, 176, 3, 201, 3, 206, + 4, 95, 4, 99, 4, 117, 4, 249, 30, 133, 30, 243, 31, 21, 31, 29, 31, 69, 31, 77, + 31, 87, 31, 89, 31, 91, 31, 93, 31, 125, 31, 180, 31, 196, 31, 211, 31, 219, 31, 239, + 31, 244, 31, 254, 32, 21, 32, 26, 32, 30, 32, 34, 32, 38, 32, 48, 32, 58, 32, 68, + 32, 112, 32, 121, 32, 137, 32, 172, 32, 174, 32, 180, 32, 185, 33, 19, 33, 22, 33, 34, + 33, 38, 33, 46, 33, 90, 33, 94, 34, 2, 34, 6, 34, 15, 34, 18, 34, 21, 34, 26, + 34, 30, 34, 43, 34, 72, 34, 96, 34, 101, 37, 0, 37, 2, 37, 12, 37, 16, 37, 20, + 37, 24, 37, 28, 37, 36, 37, 44, 37, 52, 37, 60, 37, 108, 37, 136, 37, 147, 37, 202, + 224, 255, 239, 253, 240, 2, 245, 17, 248, 29, 251, 2, 255, 253, 255, 255, 0, 0, 0, 0, + 0, 8, 0, 13, 0, 29, 0, 32, 0, 160, 1, 50, 1, 56, 1, 73, 1, 82, 1, 84, + 1, 96, 1, 98, 1, 120, 1, 128, 1, 146, 1, 147, 2, 24, 2, 28, 2, 55, 2, 56, + 2, 146, 2, 188, 2, 198, 2, 201, 2, 216, 2, 220, 3, 17, 3, 132, 3, 136, 3, 140, + 3, 142, 3, 145, 3, 163, 3, 170, 3, 177, 3, 202, 4, 0, 4, 98, 4, 114, 4, 138, + 30, 128, 30, 242, 31, 0, 31, 24, 31, 32, 31, 72, 31, 80, 31, 89, 31, 91, 31, 93, + 31, 95, 31, 128, 31, 182, 31, 198, 31, 214, 31, 221, 31, 242, 31, 246, 32, 19, 32, 24, + 32, 28, 32, 32, 32, 38, 32, 48, 32, 57, 32, 68, 32, 112, 32, 116, 32, 128, 32, 172, + 32, 174, 32, 180, 32, 185, 33, 19, 33, 22, 33, 34, 33, 38, 33, 46, 33, 83, 33, 91, + 34, 2, 34, 6, 34, 15, 34, 17, 34, 21, 34, 25, 34, 30, 34, 43, 34, 72, 34, 96, + 34, 100, 37, 0, 37, 2, 37, 12, 37, 16, 37, 20, 37, 24, 37, 28, 37, 36, 37, 44, + 37, 52, 37, 60, 37, 80, 37, 136, 37, 145, 37, 202, 224, 255, 239, 253, 240, 0, 245, 6, + 248, 10, 251, 1, 255, 253, 255, 255, 0, 1, 255, 249, 255, 245, 255, 228, 255, 227, 255, 219, + 255, 220, 255, 221, 255, 222, 0, 0, 255, 220, 0, 0, 255, 218, 0, 0, 0, 89, 254, 210, + 0, 88, 255, 65, 0, 84, 255, 38, 0, 83, 0, 17, 254, 162, 0, 0, 254, 151, 254, 137, + 0, 0, 255, 147, 0, 0, 0, 54, 0, 54, 0, 0, 255, 251, 255, 250, 0, 0, 255, 243, + 0, 0, 254, 176, 254, 175, 254, 161, 254, 141, 226, 230, 226, 122, 228, 212, 228, 210, 228, 208, + 228, 206, 228, 204, 228, 203, 228, 202, 228, 201, 228, 200, 228, 198, 228, 197, 228, 196, 228, 194, + 228, 193, 228, 191, 228, 190, 0, 0, 0, 0, 0, 0, 0, 0, 224, 64, 224, 58, 0, 0, + 225, 42, 224, 255, 224, 252, 224, 246, 223, 182, 226, 220, 226, 213, 228, 31, 224, 109, 226, 113, + 223, 84, 224, 120, 224, 83, 0, 0, 224, 41, 223, 152, 223, 149, 223, 141, 0, 0, 223, 139, + 223, 136, 223, 133, 223, 121, 223, 93, 223, 70, 223, 67, 223, 225, 223, 222, 223, 211, 223, 215, + 223, 202, 223, 197, 223, 201, 223, 190, 223, 183, 223, 176, 223, 170, 0, 0, 223, 123, 223, 115, + 219, 223, 35, 218, 20, 223, 0, 0, 12, 136, 9, 164, 0, 0, 4, 222, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 0, 0, + 0, 212, 0, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 208, 0, 0, 0, 0, 0, 206, 0, 0, 0, 206, 0, 0, 0, 0, + 0, 206, 0, 0, 0, 0, 0, 206, 0, 0, 0, 216, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 0, 184, + 0, 188, 0, 192, 0, 0, 0, 0, 0, 192, 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, 168, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 174, 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, 0, 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, 0, 0, + 0, 0, 0, 186, 0, 0, 0, 0, 0, 109, 0, 121, 0, 107, 0, 119, 0, 122, 1, 82, + 1, 83, 1, 84, 1, 85, 1, 86, 1, 87, 1, 88, 0, 105, 1, 95, 0, 117, 1, 101, + 3, 209, 3, 211, 3, 189, 3, 195, 3, 197, 3, 203, 3, 193, 3, 196, 3, 198, 3, 199, + 3, 200, 3, 201, 3, 207, 3, 202, 3, 205, 3, 204, 3, 206, 3, 208, 0, 115, 0, 116, + 3, 136, 0, 110, 0, 111, 0, 99, 0, 112, 0, 113, 0, 101, 0, 103, 0, 104, 0, 114, + 0, 108, 0, 120, 1, 130, 1, 131, 1, 136, 1, 137, 1, 138, 1, 139, 1, 140, 1, 141, + 1, 157, 1, 159, 4, 250, 4, 240, 4, 239, 5, 2, 4, 249, 4, 238, 5, 1, 4, 248, + 4, 236, 4, 255, 4, 246, 4, 235, 4, 254, 4, 245, 4, 233, 4, 252, 4, 243, 4, 232, + 4, 251, 4, 242, 4, 237, 5, 0, 4, 247, 4, 234, 4, 253, 4, 244, 5, 8, 5, 7, + 4, 241, 4, 218, 1, 170, 1, 172, 1, 171, 1, 173, 0, 1, 0, 1, 0, 1, 1, 1, + 1, 1, 0, 12, 0, 248, 8, 255, 0, 8, 0, 10, 255, 253, 0, 9, 0, 11, 255, 253, + 0, 10, 0, 11, 255, 253, 0, 11, 0, 12, 255, 253, 0, 12, 0, 12, 255, 253, 0, 13, + 0, 13, 255, 253, 0, 14, 0, 14, 255, 253, 0, 15, 0, 14, 255, 253, 0, 16, 0, 15, + 255, 253, 0, 17, 0, 16, 255, 253, 0, 18, 0, 16, 255, 253, 0, 19, 0, 17, 255, 253, + 0, 20, 0, 18, 255, 252, 0, 21, 0, 19, 255, 252, 0, 22, 0, 19, 255, 252, 0, 23, + 0, 20, 255, 252, 0, 24, 0, 21, 255, 252, 0, 25, 0, 21, 255, 252, 0, 26, 0, 22, + 255, 252, 0, 27, 0, 24, 255, 251, 0, 28, 0, 24, 255, 251, 0, 29, 0, 25, 255, 251, + 0, 30, 0, 26, 255, 251, 0, 31, 0, 26, 255, 251, 0, 32, 0, 28, 255, 251, 0, 33, + 0, 29, 255, 250, 0, 34, 0, 29, 255, 250, 0, 35, 0, 31, 255, 250, 0, 36, 0, 32, + 255, 249, 0, 37, 0, 33, 255, 249, 0, 38, 0, 33, 255, 249, 0, 39, 0, 34, 255, 249, + 0, 40, 0, 35, 255, 249, 0, 41, 0, 35, 255, 249, 0, 42, 0, 37, 255, 249, 0, 43, + 0, 37, 255, 249, 0, 44, 0, 38, 255, 249, 0, 45, 0, 39, 255, 248, 0, 46, 0, 40, + 255, 248, 0, 47, 0, 41, 255, 248, 0, 48, 0, 42, 255, 248, 0, 49, 0, 42, 255, 248, + 0, 50, 0, 43, 255, 247, 0, 51, 0, 44, 255, 247, 0, 52, 0, 45, 255, 247, 0, 53, + 0, 46, 255, 247, 0, 54, 0, 46, 255, 247, 0, 55, 0, 47, 255, 247, 0, 56, 0, 48, + 255, 246, 0, 57, 0, 49, 255, 246, 0, 58, 0, 50, 255, 246, 0, 59, 0, 51, 255, 246, + 0, 60, 0, 53, 255, 246, 0, 61, 0, 53, 255, 246, 0, 62, 0, 54, 255, 245, 0, 63, + 0, 55, 255, 245, 0, 64, 0, 55, 255, 245, 0, 65, 0, 56, 255, 244, 0, 66, 0, 57, + 255, 244, 0, 67, 0, 57, 255, 244, 0, 68, 0, 59, 255, 244, 0, 69, 0, 60, 255, 244, + 0, 70, 0, 61, 255, 244, 0, 71, 0, 61, 255, 244, 0, 72, 0, 61, 255, 244, 0, 73, + 0, 62, 255, 244, 0, 74, 0, 62, 255, 243, 0, 75, 0, 63, 255, 243, 0, 76, 0, 65, + 255, 243, 0, 77, 0, 65, 255, 243, 0, 78, 0, 66, 255, 242, 0, 79, 0, 67, 255, 242, + 0, 80, 0, 68, 255, 242, 0, 81, 0, 69, 255, 242, 0, 82, 0, 70, 255, 242, 0, 83, + 0, 70, 255, 242, 0, 84, 0, 71, 255, 241, 0, 85, 0, 72, 255, 241, 0, 86, 0, 73, + 255, 241, 0, 87, 0, 74, 255, 241, 0, 88, 0, 74, 255, 241, 0, 89, 0, 75, 255, 241, + 0, 90, 0, 76, 255, 241, 0, 91, 0, 76, 255, 241, 0, 92, 0, 78, 255, 240, 0, 93, + 0, 78, 255, 240, 0, 94, 0, 79, 255, 240, 0, 95, 0, 80, 255, 240, 0, 96, 0, 81, + 255, 240, 0, 97, 0, 82, 255, 240, 0, 98, 0, 83, 255, 239, 0, 99, 0, 83, 255, 239, + 0, 100, 0, 84, 255, 239, 0, 101, 0, 85, 255, 239, 0, 102, 0, 85, 255, 238, 0, 103, + 0, 87, 255, 238, 0, 104, 0, 87, 255, 238, 0, 105, 0, 89, 255, 238, 0, 106, 0, 90, + 255, 237, 0, 107, 0, 90, 255, 237, 0, 108, 0, 91, 255, 237, 0, 109, 0, 92, 255, 237, + 0, 110, 0, 92, 255, 237, 0, 111, 0, 93, 255, 237, 0, 112, 0, 94, 255, 237, 0, 113, + 0, 94, 255, 237, 0, 114, 0, 96, 255, 237, 0, 115, 0, 97, 255, 236, 0, 116, 0, 99, + 255, 236, 0, 117, 0, 99, 255, 236, 0, 118, 0, 100, 255, 236, 0, 119, 0, 101, 255, 236, + 0, 120, 0, 101, 255, 236, 0, 121, 0, 102, 255, 235, 0, 122, 0, 103, 255, 235, 0, 123, + 0, 103, 255, 234, 0, 124, 0, 104, 255, 234, 0, 125, 0, 104, 255, 234, 0, 126, 0, 105, + 255, 234, 0, 127, 0, 106, 255, 234, 0, 128, 0, 107, 255, 234, 0, 129, 0, 108, 255, 234, + 0, 130, 0, 108, 255, 234, 0, 131, 0, 110, 255, 234, 0, 132, 0, 111, 255, 234, 0, 133, + 0, 112, 255, 233, 0, 134, 0, 112, 255, 233, 0, 135, 0, 113, 255, 233, 0, 136, 0, 113, + 255, 233, 0, 137, 0, 114, 255, 233, 0, 138, 0, 116, 255, 233, 0, 139, 0, 116, 255, 232, + 0, 140, 0, 118, 255, 232, 0, 141, 0, 118, 255, 232, 0, 142, 0, 119, 255, 232, 0, 143, + 0, 120, 255, 232, 0, 144, 0, 120, 255, 232, 0, 145, 0, 121, 255, 231, 0, 146, 0, 122, + 255, 231, 0, 147, 0, 123, 255, 231, 0, 148, 0, 124, 255, 230, 0, 149, 0, 124, 255, 230, + 0, 150, 0, 125, 255, 230, 0, 151, 0, 126, 255, 230, 0, 152, 0, 127, 255, 230, 0, 153, + 0, 128, 255, 230, 0, 154, 0, 129, 255, 230, 0, 155, 0, 130, 255, 230, 0, 156, 0, 130, + 255, 229, 0, 157, 0, 132, 255, 229, 0, 158, 0, 132, 255, 229, 0, 159, 0, 133, 255, 229, + 0, 160, 0, 133, 255, 229, 0, 161, 0, 135, 255, 229, 0, 162, 0, 135, 255, 228, 0, 163, + 0, 136, 255, 228, 0, 164, 0, 137, 255, 228, 0, 165, 0, 138, 255, 228, 0, 166, 0, 138, + 255, 228, 0, 167, 0, 139, 255, 227, 0, 168, 0, 140, 255, 227, 0, 169, 0, 142, 255, 227, + 0, 170, 0, 142, 255, 227, 0, 171, 0, 143, 255, 227, 0, 172, 0, 144, 255, 227, 0, 173, + 0, 145, 255, 226, 0, 174, 0, 146, 255, 226, 0, 175, 0, 146, 255, 226, 0, 176, 0, 147, + 255, 225, 0, 177, 0, 148, 255, 225, 0, 178, 0, 148, 255, 225, 0, 179, 0, 150, 255, 225, + 0, 180, 0, 150, 255, 225, 0, 181, 0, 151, 255, 225, 0, 182, 0, 152, 255, 225, 0, 183, + 0, 153, 255, 225, 0, 184, 0, 153, 255, 225, 0, 185, 0, 155, 255, 224, 0, 186, 0, 155, + 255, 224, 0, 187, 0, 156, 255, 224, 0, 188, 0, 157, 255, 224, 0, 189, 0, 157, 255, 224, + 0, 190, 0, 158, 255, 224, 0, 191, 0, 159, 255, 223, 0, 192, 0, 160, 255, 223, 0, 193, + 0, 160, 255, 223, 0, 194, 0, 161, 255, 223, 0, 195, 0, 163, 255, 222, 0, 196, 0, 163, + 255, 222, 0, 197, 0, 164, 255, 222, 0, 198, 0, 165, 255, 222, 0, 199, 0, 166, 255, 222, + 0, 200, 0, 167, 255, 222, 0, 201, 0, 167, 255, 222, 0, 202, 0, 168, 255, 222, 0, 203, + 0, 170, 255, 221, 0, 204, 0, 170, 255, 221, 0, 205, 0, 171, 255, 221, 0, 206, 0, 172, + 255, 221, 0, 207, 0, 173, 255, 221, 0, 208, 0, 174, 255, 221, 0, 209, 0, 174, 255, 220, + 0, 210, 0, 175, 255, 220, 0, 211, 0, 176, 255, 220, 0, 212, 0, 177, 255, 220, 0, 213, + 0, 177, 255, 219, 0, 214, 0, 178, 255, 219, 0, 215, 0, 179, 255, 219, 0, 216, 0, 180, + 255, 219, 0, 217, 0, 181, 255, 219, 0, 218, 0, 181, 255, 219, 0, 219, 0, 182, 255, 218, + 0, 220, 0, 184, 255, 218, 0, 221, 0, 184, 255, 218, 0, 222, 0, 185, 255, 218, 0, 223, + 0, 186, 255, 218, 0, 224, 0, 186, 255, 218, 0, 225, 0, 188, 255, 218, 0, 226, 0, 189, + 255, 218, 0, 227, 0, 189, 255, 217, 0, 228, 0, 191, 255, 217, 0, 229, 0, 191, 255, 217, + 0, 230, 0, 192, 255, 217, 0, 231, 0, 193, 255, 217, 0, 232, 0, 193, 255, 217, 0, 233, + 0, 194, 255, 216, 0, 234, 0, 196, 255, 215, 0, 235, 0, 196, 255, 215, 0, 236, 0, 197, + 255, 215, 0, 237, 0, 197, 255, 215, 0, 238, 0, 198, 255, 215, 0, 239, 0, 199, 255, 215, + 0, 240, 0, 200, 255, 215, 0, 241, 0, 201, 255, 215, 0, 242, 0, 202, 255, 215, 0, 243, + 0, 203, 255, 215, 0, 244, 0, 204, 255, 215, 0, 245, 0, 204, 255, 214, 0, 246, 0, 205, + 255, 214, 0, 247, 0, 205, 255, 214, 0, 248, 0, 206, 255, 214, 0, 249, 0, 207, 255, 214, + 0, 250, 0, 209, 255, 213, 0, 251, 0, 210, 255, 213, 0, 252, 0, 210, 255, 213, 0, 253, + 0, 211, 255, 213, 0, 254, 0, 212, 255, 213, 0, 255, 0, 212, 255, 213, 64, 63, 88, 85, + 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, + 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 47, 46, 45, 44, 40, 38, 37, 36, + 35, 34, 31, 24, 20, 17, 16, 15, 13, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, + 0, 44, 69, 35, 70, 96, 32, 176, 38, 96, 176, 4, 38, 35, 72, 72, 45, 44, 69, 35, + 70, 35, 97, 32, 176, 38, 97, 176, 4, 38, 35, 72, 72, 45, 44, 69, 35, 70, 96, 176, + 32, 97, 32, 176, 70, 96, 176, 4, 38, 35, 72, 72, 45, 44, 69, 35, 70, 35, 97, 176, + 32, 96, 32, 176, 38, 97, 176, 32, 97, 176, 4, 38, 35, 72, 72, 45, 44, 69, 35, 70, + 96, 176, 64, 97, 32, 176, 102, 96, 176, 4, 38, 35, 72, 72, 45, 44, 69, 35, 70, 35, + 97, 176, 64, 96, 32, 176, 38, 97, 176, 64, 97, 176, 4, 38, 35, 72, 72, 45, 44, 1, + 16, 32, 60, 0, 60, 45, 44, 32, 69, 35, 32, 176, 205, 68, 35, 32, 184, 1, 90, 81, + 88, 35, 32, 176, 141, 68, 35, 89, 32, 176, 237, 81, 88, 35, 32, 176, 77, 68, 35, 89, + 32, 176, 4, 38, 81, 88, 35, 32, 176, 13, 68, 35, 89, 33, 33, 45, 44, 32, 32, 69, + 24, 104, 68, 32, 176, 1, 96, 32, 69, 176, 70, 118, 104, 138, 69, 96, 68, 45, 44, 1, + 177, 11, 10, 67, 35, 67, 101, 10, 45, 44, 0, 177, 10, 11, 67, 35, 67, 11, 45, 44, + 0, 176, 40, 35, 112, 177, 1, 40, 62, 1, 176, 40, 35, 112, 177, 2, 40, 69, 58, 177, + 2, 0, 8, 13, 45, 44, 32, 69, 176, 3, 37, 69, 97, 100, 176, 80, 81, 88, 69, 68, + 27, 33, 33, 89, 45, 44, 32, 69, 176, 0, 67, 96, 68, 45, 44, 1, 176, 6, 67, 176, + 7, 67, 101, 10, 45, 44, 32, 105, 176, 64, 97, 176, 0, 139, 32, 177, 44, 192, 138, 140, + 184, 16, 0, 98, 96, 43, 12, 100, 35, 100, 97, 92, 88, 176, 3, 97, 89, 45, 44, 138, + 3, 69, 138, 138, 135, 176, 17, 43, 176, 41, 35, 68, 176, 41, 122, 228, 24, 45, 44, 69, + 101, 176, 44, 35, 68, 69, 176, 43, 35, 68, 45, 44, 75, 82, 88, 69, 68, 27, 33, 33, + 89, 45, 44, 1, 176, 5, 37, 16, 35, 32, 138, 245, 0, 176, 1, 96, 35, 237, 236, 45, + 44, 1, 176, 5, 37, 16, 35, 32, 138, 245, 0, 176, 1, 97, 35, 237, 236, 45, 44, 1, + 176, 6, 37, 16, 245, 0, 237, 236, 45, 44, 32, 176, 1, 96, 1, 16, 32, 60, 0, 60, + 45, 44, 32, 176, 1, 97, 1, 16, 32, 60, 0, 60, 45, 44, 0, 176, 7, 67, 176, 6, + 67, 11, 45, 44, 33, 33, 12, 100, 35, 100, 139, 184, 64, 0, 98, 45, 44, 33, 176, 128, + 81, 88, 12, 100, 35, 100, 139, 184, 32, 0, 98, 27, 178, 0, 64, 47, 43, 89, 176, 2, + 96, 45, 44, 33, 176, 192, 81, 88, 12, 100, 35, 100, 139, 184, 21, 85, 98, 27, 178, 0, + 128, 47, 43, 89, 176, 2, 96, 45, 44, 12, 100, 35, 100, 139, 184, 64, 0, 98, 96, 35, + 33, 45, 44, 69, 35, 69, 96, 35, 69, 96, 35, 69, 96, 35, 118, 104, 24, 176, 128, 98, + 32, 45, 44, 176, 4, 38, 176, 4, 38, 176, 4, 37, 176, 4, 37, 69, 35, 69, 32, 176, + 3, 38, 96, 98, 99, 104, 32, 176, 3, 38, 97, 101, 138, 35, 68, 68, 45, 44, 32, 69, + 176, 0, 84, 88, 176, 64, 68, 32, 69, 176, 64, 97, 68, 27, 33, 33, 89, 45, 44, 69, + 177, 48, 47, 69, 35, 69, 97, 96, 176, 1, 96, 105, 68, 45, 44, 75, 81, 88, 176, 47, + 35, 112, 176, 20, 35, 66, 27, 33, 33, 89, 45, 44, 75, 81, 88, 32, 176, 3, 37, 69, + 105, 83, 88, 68, 27, 33, 33, 89, 27, 33, 33, 89, 45, 44, 69, 176, 20, 67, 176, 0, + 96, 99, 176, 1, 96, 105, 68, 45, 44, 176, 47, 69, 68, 45, 44, 69, 35, 32, 69, 138, + 96, 68, 45, 44, 69, 35, 69, 96, 68, 45, 44, 75, 35, 81, 88, 185, 0, 51, 255, 224, + 177, 52, 32, 27, 179, 51, 0, 52, 0, 89, 68, 68, 45, 44, 176, 22, 67, 88, 176, 3, + 38, 69, 138, 88, 100, 102, 176, 31, 96, 27, 100, 176, 32, 96, 102, 32, 88, 27, 33, 176, + 64, 89, 176, 1, 97, 89, 35, 88, 101, 89, 176, 41, 35, 68, 35, 16, 176, 41, 224, 27, + 33, 33, 33, 33, 33, 89, 45, 44, 176, 22, 67, 88, 176, 4, 37, 69, 100, 176, 32, 96, + 102, 32, 88, 27, 33, 176, 64, 89, 176, 1, 97, 35, 88, 101, 89, 176, 41, 35, 68, 176, + 4, 37, 176, 7, 37, 8, 32, 88, 2, 27, 3, 89, 176, 5, 37, 16, 176, 4, 37, 32, + 70, 176, 4, 37, 35, 66, 60, 176, 7, 37, 16, 176, 6, 37, 32, 70, 176, 4, 37, 176, + 1, 96, 35, 66, 60, 32, 88, 1, 27, 0, 89, 176, 5, 37, 16, 176, 4, 37, 176, 41, + 224, 176, 7, 37, 16, 176, 6, 37, 176, 41, 224, 176, 4, 37, 176, 7, 37, 8, 32, 88, + 2, 27, 3, 89, 176, 4, 37, 176, 3, 37, 67, 72, 176, 6, 37, 176, 3, 37, 176, 1, + 96, 67, 72, 27, 33, 89, 33, 33, 33, 33, 33, 33, 33, 45, 44, 176, 22, 67, 88, 176, + 4, 37, 69, 100, 176, 32, 96, 102, 32, 88, 27, 33, 176, 64, 89, 176, 1, 97, 35, 88, + 27, 101, 89, 176, 41, 35, 68, 176, 5, 37, 176, 8, 37, 8, 32, 88, 2, 27, 3, 89, + 176, 4, 37, 16, 176, 5, 37, 32, 70, 176, 4, 37, 35, 66, 60, 176, 4, 37, 176, 7, + 37, 8, 176, 7, 37, 16, 176, 6, 37, 32, 70, 176, 4, 37, 176, 1, 96, 35, 66, 60, + 32, 88, 1, 27, 0, 89, 176, 4, 37, 16, 176, 5, 37, 176, 41, 224, 176, 41, 32, 69, + 101, 68, 176, 7, 37, 16, 176, 6, 37, 176, 41, 224, 176, 5, 37, 176, 8, 37, 8, 32, + 88, 2, 27, 3, 89, 176, 5, 37, 176, 3, 37, 67, 72, 176, 4, 37, 176, 7, 37, 8, + 176, 6, 37, 176, 3, 37, 176, 1, 96, 67, 72, 27, 33, 89, 33, 33, 33, 33, 33, 33, + 33, 45, 44, 2, 176, 4, 37, 32, 32, 70, 176, 4, 37, 35, 66, 176, 5, 37, 8, 176, + 3, 37, 69, 72, 33, 33, 33, 33, 45, 44, 2, 176, 3, 37, 32, 176, 4, 37, 8, 176, + 2, 37, 67, 72, 33, 33, 33, 45, 44, 69, 35, 32, 69, 24, 32, 176, 0, 80, 32, 88, + 35, 101, 35, 89, 35, 104, 32, 176, 64, 80, 88, 33, 176, 64, 89, 35, 88, 101, 89, 138, + 96, 68, 45, 44, 75, 83, 35, 75, 81, 90, 88, 32, 69, 138, 96, 68, 27, 33, 33, 89, + 45, 44, 75, 84, 88, 32, 69, 138, 96, 68, 27, 33, 33, 89, 45, 44, 75, 83, 35, 75, + 81, 90, 88, 56, 27, 33, 33, 89, 45, 44, 75, 84, 88, 56, 27, 33, 33, 89, 45, 44, + 176, 2, 67, 84, 88, 176, 70, 43, 27, 33, 33, 33, 33, 89, 45, 44, 176, 2, 67, 84, + 88, 176, 71, 43, 27, 33, 33, 33, 89, 45, 44, 176, 2, 67, 84, 88, 176, 72, 43, 27, + 33, 33, 33, 33, 89, 45, 44, 176, 2, 67, 84, 88, 176, 73, 43, 27, 33, 33, 33, 89, + 45, 44, 32, 138, 8, 35, 75, 83, 138, 75, 81, 90, 88, 35, 56, 27, 33, 33, 89, 45, + 44, 0, 32, 138, 73, 176, 0, 81, 88, 176, 64, 35, 32, 138, 56, 18, 52, 27, 33, 33, + 89, 45, 44, 1, 70, 35, 70, 96, 35, 70, 97, 35, 32, 16, 32, 70, 138, 97, 184, 255, + 128, 98, 138, 177, 64, 64, 138, 112, 69, 96, 104, 58, 45, 44, 32, 138, 35, 73, 100, 138, + 35, 83, 88, 60, 27, 33, 89, 45, 44, 75, 82, 88, 125, 27, 122, 89, 45, 44, 176, 18, + 0, 75, 1, 75, 84, 66, 45, 44, 177, 2, 0, 66, 177, 35, 1, 136, 81, 177, 64, 1, + 136, 83, 90, 88, 185, 16, 0, 0, 32, 136, 84, 88, 177, 2, 1, 66, 89, 89, 45, 44, + 69, 24, 104, 35, 75, 81, 88, 35, 32, 69, 32, 100, 176, 64, 80, 88, 124, 89, 104, 138, + 96, 89, 68, 45, 44, 176, 0, 22, 176, 2, 37, 176, 2, 37, 1, 176, 1, 35, 62, 0, + 176, 2, 35, 62, 177, 1, 2, 6, 12, 176, 10, 35, 101, 66, 176, 11, 35, 66, 1, 176, + 1, 35, 63, 0, 176, 2, 35, 63, 177, 1, 2, 6, 12, 176, 6, 35, 101, 66, 176, 7, + 35, 66, 176, 1, 22, 1, 45, 0, 1, 244, 0, 50, 0, 0, 0, 0, 0, 0, 0, 181, + 0, 129, 0, 27, 0, 54, 0, 18, 0, 31, 0, 206, 0, 113, 0, 113, 0, 57, 0, 46, + 0, 149, 0, 140, 0, 177, 0, 69, 0, 46, 0, 75, 0, 57, 0, 59, 0, 36, 0, 66, + 0, 54, 0, 63, 0, 51, 0, 51, 0, 177, 0, 125, 0, 49, 0, 46, 0, 49, 0, 92, + 0, 40, 0, 9, 0, 54, 0, 46, 0, 54, 0, 91, 0, 91, 0, 46, 0, 45, 0, 89, + 0, 54, 0, 64, 0, 91, 0, 32, 0, 55, 0, 29, 0, 73, 0, 29, 0, 55, 0, 55, + 0, 39, 0, 48, 0, 13, 0, 32, 0, 25, 0, 13, 0, 54, 0, 143, 0, 70, 0, 118, + 0, 40, 0, 8, 0, 163, 0, 58, 0, 71, 0, 49, 0, 40, 0, 40, 0, 63, 0, 40, + 0, 71, 0, 54, 0, 71, 0, 71, 0, 54, 0, 41, 0, 71, 0, 40, 0, 71, 0, 40, + 0, 107, 0, 66, 0, 63, 0, 68, 0, 30, 0, 19, 0, 29, 0, 36, 0, 73, 0, 79, + 0, 212, 0, 73, 0, 37, 0, 36, 0, 148, 0, 7, 0, 42, 0, 31, 0, 72, 0, 72, + 0, 129, 0, 9, 0, 55, 0, 144, 0, 27, 0, 149, 0, 148, 0, 43, 0, 42, 0, 114, + 0, 69, 0, 0, 0, 112, 0, 18, 0, 66, 0, 159, 0, 31, 0, 13, 0, 0, 0, 182, + 0, 49, 0, 45, 0, 38, 0, 13, 0, 212, 0, 68, 0, 113, 0, 34, 0, 118, 0, 63, + 0, 41, 0, 140, 0, 34, 0, 123, 0, 125, 0, 46, 0, 124, 0, 126, 0, 170, 0, 71, + 0, 28, 0, 177, 0, 156, 0, 126, 0, 89, 0, 85, 0, 18, 0, 17, 0, 21, 0, 92, + 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 9, 0, 27, 0, 46, 0, 91, 0, 91, + 0, 91, 0, 91, 0, 89, 0, 89, 0, 89, 0, 89, 0, 18, 0, 55, 0, 29, 0, 29, + 0, 29, 0, 29, 0, 29, 0, 70, 0, 29, 0, 48, 0, 48, 0, 48, 0, 48, 0, 13, + 0, 73, 0, 71, 0, 58, 0, 58, 0, 58, 0, 58, 0, 58, 0, 58, 0, 31, 0, 49, + 0, 40, 0, 40, 0, 40, 0, 40, 0, 54, 0, 54, 0, 54, 0, 54, 0, 55, 0, 71, + 0, 40, 0, 40, 0, 40, 0, 40, 0, 40, 0, 46, 0, 40, 0, 68, 0, 68, 0, 68, + 0, 68, 0, 36, 0, 71, 0, 36, 0, 9, 0, 58, 0, 9, 0, 58, 0, 9, 0, 58, + 0, 46, 0, 49, 0, 46, 0, 49, 0, 46, 0, 49, 0, 46, 0, 49, 0, 54, 0, 20, + 0, 18, 0, 40, 0, 91, 0, 40, 0, 91, 0, 40, 0, 91, 0, 40, 0, 91, 0, 40, + 0, 91, 0, 40, 0, 46, 0, 40, 0, 46, 0, 40, 0, 46, 0, 40, 0, 46, 0, 40, + 0, 45, 0, 44, 0, 18, 0, 20, 0, 89, 0, 54, 0, 89, 0, 54, 0, 89, 0, 54, + 0, 89, 0, 54, 0, 89, 0, 54, 0, 54, 0, 42, 0, 89, 0, 54, 0, 71, 0, 64, + 0, 71, 0, 64, 0, 71, 0, 91, 0, 54, 0, 91, 0, 54, 0, 91, 0, 54, 0, 91, + 0, 54, 0, 18, 0, 54, 0, 55, 0, 71, 0, 55, 0, 71, 0, 55, 0, 71, 0, 29, + 0, 11, 0, 55, 0, 71, 0, 29, 0, 40, 0, 29, 0, 40, 0, 29, 0, 40, 0, 55, + 0, 107, 0, 55, 0, 42, 0, 55, 0, 107, 0, 55, 0, 66, 0, 55, 0, 66, 0, 55, + 0, 66, 0, 39, 0, 63, 0, 39, 0, 63, 0, 39, 0, 63, 0, 48, 0, 68, 0, 48, + 0, 68, 0, 48, 0, 68, 0, 48, 0, 68, 0, 48, 0, 68, 0, 48, 0, 68, 0, 32, + 0, 19, 0, 13, 0, 36, 0, 54, 0, 73, 0, 54, 0, 73, 0, 54, 0, 73, 0, 161, + 0, 55, 0, 66, 0, 39, 0, 63, 0, 71, 0, 196, 0, 129, 0, 123, 0, 130, 0, 190, + 0, 158, 0, 171, 0, 100, 0, 32, 0, 19, 0, 32, 0, 19, 0, 32, 0, 19, 0, 13, + 0, 36, 0, 25, 0, 116, 0, 105, 0, 127, 0, 125, 0, 134, 0, 119, 0, 132, 0, 116, + 0, 126, 0, 124, 0, 126, 0, 105, 0, 127, 0, 125, 0, 134, 0, 119, 0, 132, 0, 53, + 0, 27, 0, 12, 0, 21, 255, 255, 0, 11, 0, 11, 0, 11, 0, 11, 0, 21, 0, 19, + 0, 15, 255, 255, 0, 28, 255, 255, 0, 21, 0, 19, 0, 15, 0, 13, 0, 21, 255, 255, + 0, 21, 0, 15, 0, 13, 0, 11, 0, 19, 0, 38, 0, 9, 0, 58, 0, 49, 0, 18, + 0, 46, 0, 25, 0, 177, 0, 29, 0, 30, 0, 75, 0, 37, 0, 46, 0, 46, 0, 46, + 0, 39, 0, 28, 0, 28, 0, 28, 0, 28, 0, 116, 0, 135, 0, 124, 0, 128, 0, 105, + 0, 119, 0, 117, 0, 126, 0, 119, 0, 124, 0, 116, 0, 135, 0, 124, 0, 128, 0, 105, + 0, 119, 0, 117, 0, 126, 0, 119, 0, 124, 0, 210, 0, 171, 0, 185, 0, 210, 0, 113, + 0, 113, 0, 140, 0, 69, 0, 40, 0, 143, 0, 70, 0, 118, 0, 79, 0, 73, 0, 144, + 0, 114, 0, 69, 0, 0, 0, 159, 0, 182, 0, 63, 0, 85, 0, 92, 0, 20, 0, 18, + 0, 54, 0, 71, 0, 11, 0, 9, 0, 42, 0, 46, 0, 49, 0, 18, 0, 18, 0, 49, + 0, 40, 0, 39, 0, 40, 0, 25, 0, 40, 0, 3, 0, 46, 0, 13, 0, 36, 0, 68, + 0, 89, 0, 64, 0, 71, 0, 54, 0, 29, 0, 45, 255, 207, 0, 71, 0, 29, 0, 29, + 0, 40, 0, 45, 0, 27, 0, 18, 0, 71, 0, 55, 0, 55, 0, 65, 0, 40, 0, 43, + 0, 63, 0, 18, 0, 63, 0, 39, 0, 48, 0, 68, 0, 18, 0, 45, 0, 13, 0, 19, + 0, 54, 0, 73, 0, 24, 0, 67, 0, 63, 0, 49, 0, 57, 0, 40, 0, 58, 0, 62, + 0, 71, 0, 212, 0, 121, 0, 35, 0, 181, 0, 27, 0, 27, 0, 5, 0, 36, 0, 54, + 0, 99, 0, 36, 0, 36, 0, 36, 0, 9, 0, 58, 0, 89, 0, 54, 0, 29, 0, 40, + 0, 48, 0, 68, 0, 48, 0, 68, 0, 48, 0, 68, 0, 48, 0, 68, 0, 48, 0, 68, + 0, 45, 0, 9, 0, 58, 0, 9, 0, 58, 0, 27, 0, 31, 0, 46, 0, 40, 0, 46, + 0, 40, 0, 64, 0, 43, 0, 29, 0, 40, 0, 29, 0, 40, 0, 24, 0, 44, 0, 71, + 0, 27, 0, 27, 0, 5, 0, 46, 0, 40, 0, 36, 0, 73, 0, 55, 0, 71, 0, 9, + 0, 58, 0, 27, 0, 31, 0, 29, 0, 40, 0, 9, 0, 58, 0, 9, 0, 58, 0, 91, + 0, 40, 0, 91, 0, 40, 0, 83, 0, 47, 0, 89, 0, 54, 0, 29, 0, 40, 0, 29, + 0, 40, 0, 55, 0, 83, 0, 55, 0, 107, 0, 48, 0, 68, 0, 48, 0, 68, 0, 30, + 0, 57, 0, 45, 0, 44, 0, 45, 0, 25, 0, 36, 0, 33, 0, 54, 0, 73, 0, 9, + 0, 58, 0, 91, 0, 40, 0, 30, 0, 40, 0, 30, 0, 40, 0, 29, 0, 40, 0, 30, + 0, 40, 0, 13, 0, 36, 0, 54, 0, 37, 0, 63, 0, 27, 0, 27, 0, 9, 0, 46, + 0, 40, 0, 36, 0, 18, 0, 63, 0, 74, 0, 68, 0, 85, 0, 18, 0, 18, 0, 9, + 0, 91, 0, 38, 0, 54, 0, 71, 0, 29, 0, 40, 0, 18, 0, 33, 0, 21, 0, 42, + 0, 44, 0, 130, 0, 100, 0, 167, 0, 112, 0, 137, 0, 107, 0, 107, 0, 107, 0, 113, + 0, 80, 0, 80, 0, 80, 0, 91, 0, 91, 0, 18, 0, 54, 0, 38, 0, 55, 0, 90, + 0, 90, 0, 54, 0, 9, 0, 45, 0, 18, 0, 64, 0, 55, 0, 9, 0, 49, 0, 9, + 0, 54, 0, 54, 0, 54, 0, 18, 0, 91, 0, 4, 0, 38, 0, 55, 0, 55, 0, 64, + 0, 13, 0, 32, 0, 45, 0, 29, 0, 45, 0, 73, 0, 46, 0, 39, 0, 9, 0, 42, + 0, 25, 0, 45, 0, 54, 0, 45, 0, 45, 0, 18, 0, 36, 0, 45, 0, 46, 0, 45, + 0, 57, 0, 58, 0, 45, 0, 71, 0, 107, 0, 27, 0, 40, 0, 7, 0, 72, 0, 63, + 0, 63, 0, 71, 0, 13, 0, 27, 0, 71, 0, 40, 0, 71, 0, 71, 0, 49, 0, 58, + 0, 36, 0, 26, 0, 29, 0, 71, 0, 54, 0, 45, 0, 45, 0, 18, 0, 45, 0, 71, + 0, 59, 0, 54, 0, 40, 0, 40, 0, 40, 0, 20, 0, 107, 0, 49, 0, 66, 0, 54, + 0, 54, 0, 71, 0, 13, 0, 54, 0, 20, 0, 71, 0, 63, 0, 36, 0, 71, 0, 39, + 0, 18, 0, 18, 0, 29, 0, 40, 0, 13, 0, 30, 0, 55, 0, 63, 0, 18, 0, 18, + 0, 73, 0, 71, 0, 54, 0, 107, 0, 54, 0, 33, 0, 45, 0, 71, 0, 4, 0, 7, + 0, 38, 0, 72, 0, 64, 0, 71, 0, 48, 0, 54, 0, 18, 0, 18, 0, 18, 0, 17, + 0, 45, 0, 71, 0, 45, 0, 71, 0, 54, 0, 54, 0, 29, 0, 40, 0, 46, 0, 49, + 0, 39, 0, 58, 0, 13, 0, 30, 0, 13, 0, 30, 0, 25, 0, 29, 0, 18, 0, 18, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 45, 0, 71, 0, 18, 0, 18, 0, 18, 0, 18, + 0, 89, 0, 4, 0, 7, 0, 46, 0, 71, 0, 13, 0, 13, 0, 45, 0, 71, 0, 45, + 0, 71, 0, 54, 0, 54, 0, 32, 0, 27, 0, 89, 0, 9, 0, 58, 0, 9, 0, 58, + 0, 27, 0, 31, 0, 91, 0, 40, 0, 25, 0, 45, 0, 25, 0, 45, 0, 4, 0, 7, + 0, 38, 0, 72, 0, 24, 0, 44, 0, 55, 0, 63, 0, 55, 0, 63, 0, 29, 0, 40, + 0, 29, 0, 40, 0, 29, 0, 40, 0, 46, 0, 59, 0, 9, 0, 36, 0, 9, 0, 36, + 0, 9, 0, 36, 0, 54, 0, 54, 0, 54, 0, 107, 0, 36, 0, 45, 0, 36, 0, 0, + 0, 31, 0, 33, 0, 116, 0, 9, 0, 54, 0, 54, 0, 9, 0, 91, 0, 54, 0, 45, + 0, 29, 0, 89, 0, 64, 0, 9, 0, 34, 0, 55, 0, 37, 0, 29, 0, 45, 0, 73, + 0, 40, 0, 36, 0, 13, 0, 42, 0, 22, 0, 43, 0, 18, 0, 49, 0, 71, 0, 29, + 0, 39, 0, 69, 0, 63, 0, 71, 0, 49, 0, 54, 0, 71, 0, 29, 0, 71, 0, 30, + 0, 64, 0, 40, 0, 71, 0, 71, 0, 63, 0, 40, 0, 63, 0, 71, 0, 26, 0, 29, + 0, 37, 0, 36, 0, 9, 255, 188, 255, 136, 255, 182, 0, 89, 255, 184, 255, 126, 0, 13, + 255, 182, 0, 49, 0, 69, 0, 71, 0, 54, 0, 54, 0, 38, 0, 40, 0, 71, 0, 71, + 0, 71, 0, 36, 0, 164, 0, 206, 0, 64, 0, 49, 0, 49, 0, 49, 0, 49, 0, 49, + 0, 49, 0, 49, 0, 49, 0, 6, 255, 245, 255, 69, 255, 88, 255, 120, 255, 98, 255, 174, + 255, 164, 0, 69, 0, 69, 0, 69, 0, 69, 0, 69, 0, 69, 255, 177, 255, 181, 255, 7, + 255, 25, 255, 26, 255, 7, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, + 0, 71, 255, 131, 255, 136, 254, 217, 254, 234, 254, 236, 254, 217, 255, 26, 255, 26, 0, 54, + 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 0, 54, 255, 176, 255, 180, 255, 6, + 255, 24, 255, 25, 255, 6, 255, 72, 255, 72, 0, 40, 0, 40, 0, 40, 0, 40, 0, 40, + 0, 40, 255, 162, 255, 134, 254, 214, 254, 232, 255, 25, 255, 4, 0, 71, 0, 71, 0, 71, + 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 255, 133, 254, 243, 254, 196, 254, 255, 0, 36, + 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 255, 159, 255, 132, 254, 213, + 254, 231, 255, 23, 255, 2, 255, 86, 255, 60, 0, 49, 0, 49, 0, 69, 0, 69, 0, 71, + 0, 71, 0, 54, 0, 54, 0, 40, 0, 40, 0, 71, 0, 71, 0, 36, 0, 36, 0, 49, + 0, 49, 0, 49, 0, 49, 0, 49, 0, 49, 0, 49, 0, 49, 255, 185, 255, 168, 254, 248, + 255, 11, 255, 43, 255, 22, 255, 96, 255, 87, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, + 0, 71, 0, 71, 0, 71, 255, 131, 255, 131, 254, 217, 254, 234, 254, 236, 254, 217, 255, 26, + 255, 26, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 0, 36, 255, 150, + 255, 123, 254, 204, 254, 222, 255, 14, 254, 249, 255, 68, 255, 42, 0, 49, 0, 49, 0, 49, + 0, 49, 0, 49, 0, 49, 0, 49, 0, 9, 0, 9, 255, 191, 255, 226, 0, 9, 0, 185, + 0, 179, 0, 185, 0, 130, 0, 112, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 255, 132, + 255, 134, 255, 85, 255, 89, 0, 45, 0, 96, 0, 106, 0, 131, 0, 54, 0, 54, 0, 38, + 0, 54, 0, 54, 0, 54, 0, 89, 0, 89, 255, 131, 255, 133, 0, 105, 0, 96, 0, 131, + 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 0, 71, 0, 13, 0, 13, + 255, 102, 255, 66, 255, 164, 0, 73, 0, 73, 0, 152, 0, 36, 0, 36, 0, 36, 0, 36, + 0, 36, 255, 112, 255, 156, 255, 110, 255, 154, 0, 18, 0, 152, 0, 185, 0, 6, 255, 245, + 255, 69, 255, 88, 255, 120, 255, 98, 255, 174, 255, 164, 255, 131, 255, 136, 254, 217, 254, 234, + 254, 236, 254, 217, 255, 26, 255, 26, 255, 159, 255, 132, 254, 213, 254, 231, 255, 23, 255, 2, + 255, 86, 255, 60, 0, 9, 0, 45, 0, 18, 0, 63, 0, 58, 255, 91, 0, 4, 0, 9, + 0, 0, 0, 210, 0, 210, 0, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0, + 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 210, 0, 0, 0, 0, 0, 210, 0, 130, + 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 130, 0, 0, + 0, 0, 0, 130, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 10, 1, 116, 4, 106, 0, 3, + 99, 121, 114, 108, 0, 238, 103, 114, 101, 107, 0, 206, 108, 97, 116, 110, 0, 20, 0, 156, + 0, 5, 65, 90, 69, 32, 0, 130, 67, 82, 84, 32, 0, 104, 77, 79, 76, 32, 0, 82, + 82, 79, 77, 32, 0, 60, 84, 82, 75, 32, 0, 34, 0, 0, 255, 255, 0, 10, 0, 10, + 0, 19, 0, 30, 0, 41, 0, 47, 0, 58, 0, 72, 0, 85, 0, 96, 0, 107, 0, 0, + 255, 255, 0, 8, 0, 9, 0, 29, 0, 40, 0, 57, 0, 71, 0, 84, 0, 95, 0, 106, + 0, 0, 255, 255, 0, 8, 0, 8, 0, 28, 0, 39, 0, 56, 0, 70, 0, 83, 0, 94, + 0, 105, 0, 0, 255, 255, 0, 10, 0, 7, 0, 18, 0, 27, 0, 38, 0, 46, 0, 55, + 0, 69, 0, 82, 0, 93, 0, 104, 0, 0, 255, 255, 0, 10, 0, 6, 0, 17, 0, 26, + 0, 37, 0, 45, 0, 54, 0, 68, 0, 81, 0, 92, 0, 103, 0, 0, 255, 255, 0, 12, + 0, 5, 0, 16, 0, 25, 0, 36, 0, 53, 0, 59, 0, 61, 0, 67, 0, 74, 0, 80, + 0, 91, 0, 102, 0, 4, 0, 0, 0, 0, 255, 255, 0, 11, 0, 4, 0, 15, 0, 24, + 0, 35, 0, 52, 0, 60, 0, 66, 0, 73, 0, 79, 0, 90, 0, 101, 0, 100, 0, 3, + 66, 71, 82, 32, 0, 74, 77, 75, 68, 32, 0, 48, 83, 82, 66, 32, 0, 22, 0, 0, + 255, 255, 0, 10, 0, 3, 0, 14, 0, 23, 0, 34, 0, 44, 0, 51, 0, 65, 0, 78, + 0, 89, 0, 100, 0, 0, 255, 255, 0, 10, 0, 2, 0, 13, 0, 22, 0, 33, 0, 43, + 0, 50, 0, 64, 0, 77, 0, 88, 0, 99, 0, 0, 255, 255, 0, 10, 0, 1, 0, 12, + 0, 21, 0, 32, 0, 42, 0, 49, 0, 63, 0, 76, 0, 87, 0, 98, 0, 0, 255, 255, + 0, 9, 0, 0, 0, 11, 0, 20, 0, 31, 0, 48, 0, 62, 0, 75, 0, 86, 0, 97, + 0, 108, 97, 102, 114, 99, 2, 236, 97, 102, 114, 99, 2, 236, 97, 102, 114, 99, 2, 236, + 97, 102, 114, 99, 2, 236, 97, 102, 114, 99, 2, 236, 97, 102, 114, 99, 2, 236, 97, 102, + 114, 99, 2, 236, 97, 102, 114, 99, 2, 236, 97, 102, 114, 99, 2, 236, 97, 102, 114, 99, + 2, 236, 97, 102, 114, 99, 2, 236, 99, 97, 115, 101, 2, 228, 99, 97, 115, 101, 2, 228, + 99, 97, 115, 101, 2, 228, 99, 97, 115, 101, 2, 228, 99, 97, 115, 101, 2, 228, 99, 97, + 115, 101, 2, 228, 99, 97, 115, 101, 2, 228, 99, 97, 115, 101, 2, 228, 99, 97, 115, 101, + 2, 228, 100, 110, 111, 109, 2, 222, 100, 110, 111, 109, 2, 222, 100, 110, 111, 109, 2, 222, + 100, 110, 111, 109, 2, 222, 100, 110, 111, 109, 2, 222, 100, 110, 111, 109, 2, 222, 100, 110, + 111, 109, 2, 222, 100, 110, 111, 109, 2, 222, 100, 110, 111, 109, 2, 222, 100, 110, 111, 109, + 2, 222, 100, 110, 111, 109, 2, 222, 102, 114, 97, 99, 2, 214, 102, 114, 97, 99, 2, 214, + 102, 114, 97, 99, 2, 214, 102, 114, 97, 99, 2, 214, 102, 114, 97, 99, 2, 214, 102, 114, + 97, 99, 2, 214, 102, 114, 97, 99, 2, 214, 102, 114, 97, 99, 2, 214, 102, 114, 97, 99, + 2, 214, 102, 114, 97, 99, 2, 214, 102, 114, 97, 99, 2, 214, 108, 111, 99, 108, 2, 208, + 108, 111, 99, 108, 2, 202, 108, 111, 99, 108, 2, 196, 108, 111, 99, 108, 2, 190, 108, 111, + 99, 108, 2, 184, 108, 111, 99, 108, 2, 178, 110, 117, 109, 114, 2, 172, 110, 117, 109, 114, + 2, 172, 110, 117, 109, 114, 2, 172, 110, 117, 109, 114, 2, 172, 110, 117, 109, 114, 2, 172, + 110, 117, 109, 114, 2, 172, 110, 117, 109, 114, 2, 172, 110, 117, 109, 114, 2, 172, 110, 117, + 109, 114, 2, 172, 110, 117, 109, 114, 2, 172, 110, 117, 109, 114, 2, 172, 111, 114, 100, 110, + 2, 166, 115, 97, 108, 116, 2, 156, 115, 97, 108, 116, 2, 156, 115, 105, 110, 102, 2, 150, + 115, 105, 110, 102, 2, 150, 115, 105, 110, 102, 2, 150, 115, 105, 110, 102, 2, 150, 115, 105, + 110, 102, 2, 150, 115, 105, 110, 102, 2, 150, 115, 105, 110, 102, 2, 150, 115, 105, 110, 102, + 2, 150, 115, 105, 110, 102, 2, 150, 115, 105, 110, 102, 2, 150, 115, 105, 110, 102, 2, 150, + 115, 115, 48, 49, 2, 156, 115, 115, 48, 49, 2, 156, 115, 115, 48, 50, 2, 236, 115, 115, + 48, 50, 2, 236, 115, 115, 48, 50, 2, 236, 115, 115, 48, 50, 2, 236, 115, 115, 48, 50, + 2, 236, 115, 115, 48, 50, 2, 236, 115, 115, 48, 50, 2, 236, 115, 115, 48, 50, 2, 236, + 115, 115, 48, 50, 2, 236, 115, 115, 48, 50, 2, 236, 115, 115, 48, 50, 2, 236, 115, 117, + 98, 115, 2, 144, 115, 117, 98, 115, 2, 144, 115, 117, 98, 115, 2, 144, 115, 117, 98, 115, + 2, 144, 115, 117, 98, 115, 2, 144, 115, 117, 98, 115, 2, 144, 115, 117, 98, 115, 2, 144, + 115, 117, 98, 115, 2, 144, 115, 117, 98, 115, 2, 144, 115, 117, 98, 115, 2, 144, 115, 117, + 98, 115, 2, 144, 115, 117, 112, 115, 2, 138, 115, 117, 112, 115, 2, 138, 115, 117, 112, 115, + 2, 138, 115, 117, 112, 115, 2, 138, 115, 117, 112, 115, 2, 138, 115, 117, 112, 115, 2, 138, + 115, 117, 112, 115, 2, 138, 115, 117, 112, 115, 2, 138, 115, 117, 112, 115, 2, 138, 115, 117, + 112, 115, 2, 138, 115, 117, 112, 115, 2, 138, 0, 0, 0, 1, 0, 9, 0, 0, 0, 1, + 0, 10, 0, 0, 0, 1, 0, 11, 0, 0, 0, 3, 0, 19, 0, 20, 0, 21, 0, 0, + 0, 1, 0, 7, 0, 0, 0, 1, 0, 6, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, + 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 5, 0, 0, 0, 1, 0, 4, + 0, 0, 0, 1, 0, 3, 0, 0, 0, 2, 0, 12, 0, 13, 0, 0, 0, 1, 0, 8, + 0, 0, 0, 2, 0, 17, 0, 18, 0, 0, 0, 3, 0, 14, 0, 15, 0, 16, 0, 23, + 11, 180, 11, 180, 11, 180, 11, 160, 11, 160, 11, 160, 11, 44, 11, 18, 10, 146, 10, 18, + 9, 146, 9, 146, 9, 120, 3, 150, 9, 120, 11, 44, 3, 86, 2, 240, 0, 226, 0, 178, + 0, 130, 0, 82, 0, 48, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 3, 56, 0, 10, + 1, 120, 1, 121, 1, 119, 1, 118, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, + 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 0, 24, 0, 9, 4, 205, 4, 206, 4, 207, + 4, 208, 4, 209, 4, 210, 4, 211, 4, 212, 4, 215, 0, 2, 0, 2, 4, 110, 4, 117, + 0, 0, 4, 186, 4, 186, 0, 8, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 0, 24, + 0, 9, 4, 197, 4, 198, 4, 199, 4, 200, 4, 201, 4, 202, 4, 203, 4, 204, 4, 214, + 0, 2, 0, 2, 4, 94, 4, 101, 0, 0, 4, 144, 4, 144, 0, 8, 0, 1, 0, 0, + 0, 1, 0, 8, 0, 2, 0, 24, 0, 9, 4, 189, 4, 190, 4, 191, 4, 192, 4, 193, + 4, 194, 4, 195, 4, 196, 4, 213, 0, 2, 0, 2, 4, 78, 4, 85, 0, 0, 4, 129, + 4, 129, 0, 8, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 1, 4, 0, 127, 0, 36, + 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, 0, 45, 0, 46, + 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, 0, 55, 0, 56, + 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 107, 0, 109, 0, 155, 0, 156, 0, 157, + 0, 158, 0, 159, 0, 160, 0, 161, 0, 162, 0, 163, 0, 164, 0, 165, 0, 166, 0, 167, + 0, 168, 0, 169, 0, 170, 0, 171, 0, 172, 0, 173, 0, 174, 0, 175, 0, 176, 0, 177, + 0, 179, 0, 180, 0, 181, 0, 182, 0, 183, 0, 184, 0, 185, 0, 122, 0, 219, 0, 221, + 0, 223, 0, 225, 0, 227, 0, 229, 0, 231, 0, 233, 0, 235, 0, 237, 0, 239, 0, 241, + 0, 243, 0, 245, 0, 247, 0, 249, 0, 251, 0, 253, 0, 255, 1, 1, 1, 3, 1, 5, + 1, 7, 1, 9, 1, 11, 1, 14, 1, 16, 1, 18, 1, 20, 1, 22, 1, 24, 1, 26, + 1, 28, 1, 30, 1, 32, 1, 34, 1, 36, 1, 38, 1, 40, 1, 42, 1, 44, 1, 46, + 1, 48, 1, 50, 1, 52, 1, 54, 1, 56, 1, 58, 1, 60, 1, 62, 1, 64, 1, 66, + 1, 68, 1, 70, 1, 72, 1, 74, 1, 76, 1, 78, 1, 80, 1, 82, 1, 84, 1, 86, + 1, 89, 1, 91, 1, 102, 1, 104, 1, 106, 1, 108, 0, 1, 0, 127, 0, 68, 0, 69, + 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, + 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, + 0, 90, 0, 91, 0, 92, 0, 93, 0, 119, 0, 121, 0, 187, 0, 188, 0, 189, 0, 190, + 0, 191, 0, 192, 0, 193, 0, 194, 0, 195, 0, 196, 0, 197, 0, 198, 0, 199, 0, 200, + 0, 201, 0, 202, 0, 203, 0, 204, 0, 205, 0, 206, 0, 207, 0, 208, 0, 209, 0, 211, + 0, 212, 0, 213, 0, 214, 0, 215, 0, 216, 0, 217, 0, 218, 0, 220, 0, 222, 0, 224, + 0, 226, 0, 228, 0, 230, 0, 232, 0, 234, 0, 236, 0, 238, 0, 240, 0, 242, 0, 244, + 0, 246, 0, 248, 0, 250, 0, 252, 0, 254, 1, 0, 1, 2, 1, 4, 1, 6, 1, 8, + 1, 10, 1, 13, 1, 15, 1, 17, 1, 19, 1, 21, 1, 23, 1, 25, 1, 27, 1, 29, + 1, 31, 1, 33, 1, 35, 1, 37, 1, 39, 1, 41, 1, 43, 1, 45, 1, 47, 1, 49, + 1, 51, 1, 53, 1, 55, 1, 57, 1, 59, 1, 61, 1, 63, 1, 65, 1, 67, 1, 69, + 1, 71, 1, 73, 1, 75, 1, 77, 1, 79, 1, 81, 1, 83, 1, 85, 1, 87, 1, 90, + 1, 92, 1, 103, 1, 105, 1, 107, 1, 109, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, + 0, 48, 0, 21, 1, 198, 1, 199, 1, 200, 1, 201, 1, 202, 1, 203, 1, 204, 1, 205, + 1, 206, 1, 207, 1, 208, 1, 209, 1, 210, 1, 211, 1, 212, 1, 213, 1, 214, 1, 215, + 1, 216, 0, 54, 0, 45, 0, 1, 0, 21, 0, 11, 0, 12, 0, 16, 0, 18, 0, 35, + 0, 62, 0, 63, 0, 64, 0, 94, 0, 96, 0, 108, 0, 114, 0, 115, 0, 116, 0, 120, + 0, 124, 0, 134, 0, 150, 0, 154, 1, 88, 1, 93, 0, 6, 0, 0, 0, 1, 0, 8, + 0, 3, 0, 1, 0, 40, 0, 1, 0, 18, 0, 0, 0, 1, 0, 0, 0, 22, 0, 2, + 0, 3, 0, 141, 0, 142, 0, 0, 0, 148, 0, 148, 0, 2, 1, 111, 1, 117, 0, 3, + 0, 2, 0, 2, 1, 110, 1, 110, 0, 0, 1, 118, 1, 127, 0, 1, 0, 4, 0, 0, + 0, 1, 0, 8, 0, 1, 5, 172, 0, 40, 4, 26, 3, 80, 2, 134, 1, 238, 1, 36, + 0, 240, 0, 138, 0, 86, 3, 80, 2, 134, 4, 26, 1, 238, 1, 36, 0, 240, 0, 138, + 0, 86, 4, 26, 3, 80, 2, 134, 1, 238, 1, 36, 0, 240, 0, 138, 0, 86, 4, 26, + 3, 80, 2, 134, 1, 238, 1, 36, 0, 240, 0, 138, 0, 86, 4, 26, 3, 80, 2, 134, + 1, 238, 1, 36, 0, 240, 0, 138, 0, 86, 0, 5, 0, 44, 0, 36, 0, 28, 0, 20, + 0, 12, 1, 153, 0, 3, 1, 110, 1, 193, 1, 153, 0, 3, 1, 110, 1, 183, 1, 153, + 0, 3, 1, 110, 1, 127, 1, 153, 0, 3, 1, 110, 1, 117, 1, 153, 0, 3, 1, 110, + 0, 28, 0, 10, 0, 94, 0, 86, 0, 78, 0, 70, 0, 62, 0, 54, 0, 46, 0, 38, + 0, 30, 0, 22, 1, 152, 0, 3, 1, 110, 1, 193, 1, 135, 0, 3, 1, 110, 1, 192, + 1, 152, 0, 3, 1, 110, 1, 183, 1, 135, 0, 3, 1, 110, 1, 182, 1, 152, 0, 3, + 1, 110, 1, 127, 1, 135, 0, 3, 1, 110, 1, 126, 1, 152, 0, 3, 1, 110, 1, 117, + 1, 135, 0, 3, 1, 110, 1, 116, 1, 152, 0, 3, 1, 110, 0, 28, 1, 135, 0, 3, + 1, 110, 0, 27, 0, 5, 0, 44, 0, 36, 0, 28, 0, 20, 0, 12, 1, 147, 0, 3, + 1, 110, 1, 191, 1, 147, 0, 3, 1, 110, 1, 181, 1, 147, 0, 3, 1, 110, 1, 125, + 1, 147, 0, 3, 1, 110, 1, 115, 1, 147, 0, 3, 1, 110, 0, 26, 0, 20, 0, 194, + 0, 186, 0, 178, 0, 170, 0, 162, 0, 154, 0, 146, 0, 138, 0, 130, 0, 122, 0, 114, + 0, 106, 0, 98, 0, 90, 0, 82, 0, 74, 0, 66, 0, 58, 0, 50, 0, 42, 1, 151, + 0, 3, 1, 110, 1, 193, 1, 134, 0, 3, 1, 110, 1, 192, 1, 146, 0, 3, 1, 110, + 1, 191, 1, 141, 0, 3, 1, 110, 1, 190, 1, 151, 0, 3, 1, 110, 1, 183, 1, 134, + 0, 3, 1, 110, 1, 182, 1, 146, 0, 3, 1, 110, 1, 181, 1, 141, 0, 3, 1, 110, + 1, 180, 1, 151, 0, 3, 1, 110, 1, 127, 1, 134, 0, 3, 1, 110, 1, 126, 1, 146, + 0, 3, 1, 110, 1, 125, 1, 141, 0, 3, 1, 110, 1, 124, 1, 151, 0, 3, 1, 110, + 1, 117, 1, 134, 0, 3, 1, 110, 1, 116, 1, 146, 0, 3, 1, 110, 1, 115, 1, 141, + 0, 3, 1, 110, 1, 114, 1, 151, 0, 3, 1, 110, 0, 28, 1, 134, 0, 3, 1, 110, + 0, 27, 1, 146, 0, 3, 1, 110, 0, 26, 1, 141, 0, 3, 1, 110, 0, 25, 0, 15, + 0, 144, 0, 136, 0, 128, 0, 120, 0, 112, 0, 104, 0, 96, 0, 88, 0, 80, 0, 72, + 0, 64, 0, 56, 0, 48, 0, 40, 0, 32, 1, 150, 0, 3, 1, 110, 1, 193, 1, 145, + 0, 3, 1, 110, 1, 191, 1, 139, 0, 3, 1, 110, 1, 189, 1, 150, 0, 3, 1, 110, + 1, 183, 1, 145, 0, 3, 1, 110, 1, 181, 1, 139, 0, 3, 1, 110, 1, 179, 1, 150, + 0, 3, 1, 110, 1, 127, 1, 145, 0, 3, 1, 110, 1, 125, 1, 139, 0, 3, 1, 110, + 1, 123, 1, 150, 0, 3, 1, 110, 1, 117, 1, 145, 0, 3, 1, 110, 1, 115, 1, 139, + 0, 3, 1, 110, 1, 113, 1, 150, 0, 3, 1, 110, 0, 28, 1, 145, 0, 3, 1, 110, + 0, 26, 1, 139, 0, 3, 1, 110, 0, 24, 0, 20, 0, 194, 0, 186, 0, 178, 0, 170, + 0, 162, 0, 154, 0, 146, 0, 138, 0, 130, 0, 122, 0, 114, 0, 106, 0, 98, 0, 90, + 0, 82, 0, 74, 0, 66, 0, 58, 0, 50, 0, 42, 1, 133, 0, 3, 1, 110, 1, 192, + 1, 144, 0, 3, 1, 110, 1, 191, 1, 138, 0, 3, 1, 110, 1, 189, 0, 153, 0, 3, + 1, 110, 1, 188, 1, 133, 0, 3, 1, 110, 1, 182, 1, 144, 0, 3, 1, 110, 1, 181, + 1, 138, 0, 3, 1, 110, 1, 179, 0, 153, 0, 3, 1, 110, 1, 178, 1, 133, 0, 3, + 1, 110, 1, 126, 1, 144, 0, 3, 1, 110, 1, 125, 1, 138, 0, 3, 1, 110, 1, 123, + 0, 153, 0, 3, 1, 110, 1, 122, 1, 133, 0, 3, 1, 110, 1, 116, 1, 144, 0, 3, + 1, 110, 1, 115, 1, 138, 0, 3, 1, 110, 1, 113, 0, 153, 0, 3, 1, 110, 1, 112, + 1, 133, 0, 3, 1, 110, 0, 27, 1, 144, 0, 3, 1, 110, 0, 26, 1, 138, 0, 3, + 1, 110, 0, 24, 0, 153, 0, 3, 1, 110, 0, 23, 0, 20, 0, 194, 0, 186, 0, 178, + 0, 170, 0, 162, 0, 154, 0, 146, 0, 138, 0, 130, 0, 122, 0, 114, 0, 106, 0, 98, + 0, 90, 0, 82, 0, 74, 0, 66, 0, 58, 0, 50, 0, 42, 1, 149, 0, 3, 1, 110, + 1, 193, 1, 143, 0, 3, 1, 110, 1, 191, 1, 137, 0, 3, 1, 110, 1, 189, 1, 131, + 0, 3, 1, 110, 1, 187, 1, 149, 0, 3, 1, 110, 1, 183, 1, 143, 0, 3, 1, 110, + 1, 181, 1, 137, 0, 3, 1, 110, 1, 179, 1, 131, 0, 3, 1, 110, 1, 177, 1, 149, + 0, 3, 1, 110, 1, 127, 1, 143, 0, 3, 1, 110, 1, 125, 1, 137, 0, 3, 1, 110, + 1, 123, 1, 131, 0, 3, 1, 110, 1, 121, 1, 149, 0, 3, 1, 110, 1, 117, 1, 143, + 0, 3, 1, 110, 1, 115, 1, 137, 0, 3, 1, 110, 1, 113, 1, 131, 0, 3, 1, 110, + 0, 142, 1, 149, 0, 3, 1, 110, 0, 28, 1, 143, 0, 3, 1, 110, 0, 26, 1, 137, + 0, 3, 1, 110, 0, 24, 1, 131, 0, 3, 1, 110, 0, 22, 0, 40, 1, 138, 1, 130, + 1, 122, 1, 114, 1, 106, 1, 98, 1, 90, 1, 82, 1, 74, 1, 66, 1, 58, 1, 50, + 1, 42, 1, 34, 1, 26, 1, 18, 1, 10, 1, 2, 0, 250, 0, 242, 0, 234, 0, 226, + 0, 218, 0, 210, 0, 202, 0, 194, 0, 186, 0, 178, 0, 170, 0, 162, 0, 154, 0, 146, + 0, 138, 0, 130, 0, 122, 0, 114, 0, 106, 0, 98, 0, 90, 0, 82, 1, 148, 0, 3, + 1, 110, 1, 193, 1, 132, 0, 3, 1, 110, 1, 192, 1, 142, 0, 3, 1, 110, 1, 191, + 1, 140, 0, 3, 1, 110, 1, 190, 1, 136, 0, 3, 1, 110, 1, 189, 0, 151, 0, 3, + 1, 110, 1, 188, 1, 130, 0, 3, 1, 110, 1, 187, 0, 152, 0, 3, 1, 110, 1, 186, + 1, 148, 0, 3, 1, 110, 1, 183, 1, 132, 0, 3, 1, 110, 1, 182, 1, 142, 0, 3, + 1, 110, 1, 181, 1, 140, 0, 3, 1, 110, 1, 180, 1, 136, 0, 3, 1, 110, 1, 179, + 0, 151, 0, 3, 1, 110, 1, 178, 1, 130, 0, 3, 1, 110, 1, 177, 0, 152, 0, 3, + 1, 110, 1, 176, 1, 148, 0, 3, 1, 110, 1, 127, 1, 132, 0, 3, 1, 110, 1, 126, + 1, 142, 0, 3, 1, 110, 1, 125, 1, 140, 0, 3, 1, 110, 1, 124, 1, 136, 0, 3, + 1, 110, 1, 123, 0, 151, 0, 3, 1, 110, 1, 122, 1, 130, 0, 3, 1, 110, 1, 121, + 0, 152, 0, 3, 1, 110, 1, 120, 1, 148, 0, 3, 1, 110, 1, 117, 1, 132, 0, 3, + 1, 110, 1, 116, 1, 142, 0, 3, 1, 110, 1, 115, 1, 140, 0, 3, 1, 110, 1, 114, + 1, 136, 0, 3, 1, 110, 1, 113, 0, 151, 0, 3, 1, 110, 1, 112, 1, 130, 0, 3, + 1, 110, 0, 142, 0, 152, 0, 3, 1, 110, 0, 141, 1, 148, 0, 3, 1, 110, 0, 28, + 1, 132, 0, 3, 1, 110, 0, 27, 1, 142, 0, 3, 1, 110, 0, 26, 1, 140, 0, 3, + 1, 110, 0, 25, 1, 136, 0, 3, 1, 110, 0, 24, 0, 151, 0, 3, 1, 110, 0, 23, + 1, 130, 0, 3, 1, 110, 0, 22, 0, 152, 0, 3, 1, 110, 0, 21, 0, 2, 0, 7, + 0, 20, 0, 27, 0, 0, 0, 141, 0, 142, 0, 8, 0, 148, 0, 148, 0, 10, 1, 112, + 1, 116, 0, 11, 1, 119, 1, 126, 0, 16, 1, 175, 1, 182, 0, 24, 1, 185, 1, 192, + 0, 32, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 0, 10, 0, 2, 1, 110, 1, 110, + 0, 1, 0, 2, 0, 18, 1, 160, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 0, 86, + 0, 40, 1, 184, 1, 185, 1, 186, 1, 187, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192, + 1, 193, 1, 186, 1, 187, 1, 185, 1, 184, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192, + 1, 193, 1, 184, 1, 185, 1, 186, 1, 187, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192, + 1, 193, 1, 184, 1, 185, 1, 186, 1, 187, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192, + 1, 193, 0, 2, 0, 5, 0, 19, 0, 28, 0, 0, 0, 141, 0, 142, 0, 10, 0, 148, + 0, 148, 0, 12, 1, 111, 1, 127, 0, 13, 1, 174, 1, 183, 0, 30, 0, 1, 0, 0, + 0, 1, 0, 8, 0, 2, 0, 86, 0, 40, 1, 174, 1, 175, 1, 176, 1, 177, 1, 178, + 1, 179, 1, 180, 1, 181, 1, 182, 1, 183, 1, 176, 1, 177, 1, 175, 1, 174, 1, 178, + 1, 179, 1, 180, 1, 181, 1, 182, 1, 183, 1, 174, 1, 175, 1, 176, 1, 177, 1, 178, + 1, 179, 1, 180, 1, 181, 1, 182, 1, 183, 1, 174, 1, 175, 1, 176, 1, 177, 1, 178, + 1, 179, 1, 180, 1, 181, 1, 182, 1, 183, 0, 2, 0, 5, 0, 19, 0, 28, 0, 0, + 0, 141, 0, 142, 0, 10, 0, 148, 0, 148, 0, 12, 1, 111, 1, 127, 0, 13, 1, 184, + 1, 193, 0, 30, 0, 1, 0, 0, 0, 1, 0, 8, 0, 2, 0, 86, 0, 40, 1, 118, + 1, 119, 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 1, 120, + 1, 121, 1, 119, 1, 118, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 1, 118, + 1, 119, 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 1, 118, + 1, 119, 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 0, 2, + 0, 5, 0, 19, 0, 28, 0, 0, 0, 141, 0, 142, 0, 10, 0, 148, 0, 148, 0, 12, + 1, 111, 1, 117, 0, 13, 1, 174, 1, 193, 0, 20, 0, 1, 0, 0, 0, 1, 0, 8, + 0, 2, 0, 10, 0, 2, 0, 133, 0, 149, 0, 1, 0, 2, 0, 68, 0, 82, 0, 1, + 0, 0, 0, 1, 0, 8, 0, 2, 0, 86, 0, 40, 1, 111, 0, 148, 0, 141, 0, 142, + 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 111, 0, 148, 0, 141, 0, 142, + 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 111, 0, 148, 0, 141, 0, 142, + 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 111, 0, 148, 0, 141, 0, 142, + 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 0, 2, 0, 3, 0, 19, 0, 28, + 0, 0, 1, 118, 1, 127, 0, 10, 1, 174, 1, 193, 0, 20, 0, 1, 0, 0, 0, 1, + 0, 8, 0, 1, 0, 6, 0, 47, 0, 1, 0, 1, 2, 225, 0, 1, 0, 0, 0, 1, + 0, 8, 0, 1, 0, 6, 0, 193, 0, 1, 0, 1, 0, 76, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 0, 0, 0, 66, 0, 0, 0, 66, 0, 0, 0, 66, 0, 0, 0, 183, + 0, 0, 1, 14, 0, 0, 2, 25, 0, 0, 3, 100, 0, 0, 4, 114, 0, 0, 6, 70, + 0, 0, 6, 140, 0, 0, 7, 73, 0, 0, 7, 226, 0, 0, 8, 167, 0, 0, 8, 243, + 0, 0, 9, 83, 0, 0, 9, 120, 0, 0, 9, 180, 0, 0, 9, 241, 0, 0, 11, 104, + 0, 0, 11, 229, 0, 0, 12, 246, 0, 0, 14, 120, 0, 0, 15, 45, 0, 0, 16, 81, + 0, 0, 17, 158, 0, 0, 17, 247, 0, 0, 19, 196, 0, 0, 20, 237, 0, 0, 21, 25, + 0, 0, 21, 49, 0, 0, 21, 194, 0, 0, 22, 14, 0, 0, 22, 164, 0, 0, 23, 149, + 0, 0, 25, 0, 0, 0, 26, 50, 0, 0, 27, 78, 0, 0, 28, 103, 0, 0, 29, 9, + 0, 0, 29, 105, 0, 0, 29, 190, 0, 0, 30, 208, 0, 0, 31, 47, 0, 0, 31, 135, + 0, 0, 32, 20, 0, 0, 32, 195, 0, 0, 33, 2, 0, 0, 34, 84, 0, 0, 34, 223, + 0, 0, 35, 216, 0, 0, 36, 132, 0, 0, 37, 204, 0, 0, 38, 172, 0, 0, 40, 17, + 0, 0, 40, 84, 0, 0, 40, 237, 0, 0, 41, 120, 0, 0, 43, 159, 0, 0, 44, 88, + 0, 0, 44, 225, 0, 0, 45, 87, 0, 0, 45, 147, 0, 0, 45, 207, 0, 0, 46, 11, + 0, 0, 46, 115, 0, 0, 46, 155, 0, 0, 46, 206, 0, 0, 47, 206, 0, 0, 48, 180, + 0, 0, 49, 92, 0, 0, 50, 38, 0, 0, 51, 94, 0, 0, 52, 5, 0, 0, 53, 77, + 0, 0, 53, 242, 0, 0, 54, 154, 0, 0, 55, 54, 0, 0, 55, 230, 0, 0, 56, 118, + 0, 0, 57, 47, 0, 0, 57, 207, 0, 0, 58, 198, 0, 0, 59, 164, 0, 0, 60, 131, + 0, 0, 60, 218, 0, 0, 62, 54, 0, 0, 62, 209, 0, 0, 63, 109, 0, 0, 64, 34, + 0, 0, 65, 231, 0, 0, 66, 166, 0, 0, 68, 19, 0, 0, 68, 146, 0, 0, 69, 113, + 0, 0, 69, 158, 0, 0, 70, 125, 0, 0, 71, 43, 0, 0, 72, 77, 0, 0, 72, 173, + 0, 0, 73, 107, 0, 0, 74, 13, 0, 0, 74, 169, 0, 0, 75, 6, 0, 0, 75, 134, + 0, 0, 76, 2, 0, 0, 77, 176, 0, 0, 77, 220, 0, 0, 78, 48, 0, 0, 79, 34, + 0, 0, 79, 128, 0, 0, 79, 219, 0, 0, 80, 129, 0, 0, 81, 34, 0, 0, 81, 112, + 0, 0, 81, 151, 0, 0, 81, 189, 0, 0, 82, 76, 0, 0, 83, 12, 0, 0, 83, 52, + 0, 0, 83, 117, 0, 0, 84, 194, 0, 0, 84, 246, 0, 0, 84, 246, 0, 0, 85, 103, + 0, 0, 86, 51, 0, 0, 87, 1, 0, 0, 87, 211, 0, 0, 88, 161, 0, 0, 88, 226, + 0, 0, 90, 255, 0, 0, 91, 110, 0, 0, 93, 50, 0, 0, 94, 48, 0, 0, 94, 158, + 0, 0, 94, 206, 0, 0, 94, 222, 0, 0, 97, 20, 0, 0, 97, 57, 0, 0, 97, 210, + 0, 0, 98, 57, 0, 0, 99, 128, 0, 0, 100, 245, 0, 0, 101, 41, 0, 0, 101, 186, + 0, 0, 102, 34, 0, 0, 102, 54, 0, 0, 102, 196, 0, 0, 103, 40, 0, 0, 103, 195, + 0, 0, 104, 46, 0, 0, 104, 254, 0, 0, 106, 68, 0, 0, 108, 5, 0, 0, 109, 0, + 0, 0, 109, 44, 0, 0, 109, 88, 0, 0, 109, 132, 0, 0, 109, 176, 0, 0, 109, 248, + 0, 0, 111, 32, 0, 0, 111, 211, 0, 0, 113, 172, 0, 0, 113, 220, 0, 0, 114, 8, + 0, 0, 114, 56, 0, 0, 114, 108, 0, 0, 114, 152, 0, 0, 114, 196, 0, 0, 114, 240, + 0, 0, 115, 40, 0, 0, 115, 245, 0, 0, 116, 33, 0, 0, 116, 77, 0, 0, 116, 121, + 0, 0, 116, 165, 0, 0, 116, 209, 0, 0, 117, 5, 0, 0, 117, 101, 0, 0, 119, 94, + 0, 0, 119, 142, 0, 0, 119, 186, 0, 0, 119, 230, 0, 0, 120, 26, 0, 0, 120, 70, + 0, 0, 121, 16, 0, 0, 122, 243, 0, 0, 123, 27, 0, 0, 123, 67, 0, 0, 123, 107, + 0, 0, 123, 147, 0, 0, 123, 195, 0, 0, 123, 239, 0, 0, 125, 126, 0, 0, 126, 171, + 0, 0, 126, 215, 0, 0, 126, 255, 0, 0, 127, 39, 0, 0, 127, 87, 0, 0, 127, 131, + 0, 0, 127, 175, 0, 0, 127, 219, 0, 0, 128, 15, 0, 0, 129, 128, 0, 0, 129, 172, + 0, 0, 129, 212, 0, 0, 129, 252, 0, 0, 130, 36, 0, 0, 130, 76, 0, 0, 130, 124, + 0, 0, 130, 251, 0, 0, 132, 41, 0, 0, 132, 85, 0, 0, 132, 125, 0, 0, 132, 165, + 0, 0, 132, 213, 0, 0, 132, 253, 0, 0, 133, 235, 0, 0, 134, 27, 0, 0, 134, 71, + 0, 0, 134, 111, 0, 0, 134, 155, 0, 0, 134, 195, 0, 0, 135, 184, 0, 0, 137, 15, + 0, 0, 137, 59, 0, 0, 137, 99, 0, 0, 137, 143, 0, 0, 137, 183, 0, 0, 137, 227, + 0, 0, 138, 11, 0, 0, 138, 55, 0, 0, 138, 95, 0, 0, 138, 143, 0, 0, 139, 110, + 0, 0, 139, 126, 0, 0, 140, 116, 0, 0, 140, 164, 0, 0, 140, 204, 0, 0, 140, 252, + 0, 0, 141, 36, 0, 0, 141, 84, 0, 0, 141, 124, 0, 0, 142, 45, 0, 0, 143, 136, + 0, 0, 143, 180, 0, 0, 143, 220, 0, 0, 144, 8, 0, 0, 144, 48, 0, 0, 144, 92, + 0, 0, 144, 132, 0, 0, 144, 176, 0, 0, 144, 216, 0, 0, 144, 252, 0, 0, 145, 36, + 0, 0, 145, 80, 0, 0, 146, 51, 0, 0, 146, 207, 0, 0, 147, 173, 0, 0, 147, 217, + 0, 0, 148, 5, 0, 0, 148, 49, 0, 0, 148, 93, 0, 0, 148, 137, 0, 0, 148, 181, + 0, 0, 149, 91, 0, 0, 150, 57, 0, 0, 150, 101, 0, 0, 150, 210, 0, 0, 150, 226, + 0, 0, 151, 77, 0, 0, 152, 22, 0, 0, 152, 66, 0, 0, 152, 106, 0, 0, 152, 146, + 0, 0, 152, 186, 0, 0, 153, 149, 0, 0, 154, 67, 0, 0, 154, 115, 0, 0, 155, 34, + 0, 0, 155, 74, 0, 0, 155, 110, 0, 0, 155, 146, 0, 0, 155, 182, 0, 0, 155, 218, + 0, 0, 155, 254, 0, 0, 156, 117, 0, 0, 157, 58, 0, 0, 157, 102, 0, 0, 157, 142, + 0, 0, 157, 182, 0, 0, 157, 222, 0, 0, 158, 10, 0, 0, 158, 54, 0, 0, 159, 61, + 0, 0, 159, 109, 0, 0, 160, 36, 0, 0, 160, 227, 0, 0, 161, 15, 0, 0, 161, 55, + 0, 0, 161, 99, 0, 0, 161, 139, 0, 0, 161, 191, 0, 0, 161, 239, 0, 0, 162, 31, + 0, 0, 162, 71, 0, 0, 162, 111, 0, 0, 162, 151, 0, 0, 162, 199, 0, 0, 162, 239, + 0, 0, 163, 27, 0, 0, 163, 67, 0, 0, 163, 111, 0, 0, 163, 151, 0, 0, 165, 129, + 0, 0, 167, 45, 0, 0, 167, 216, 0, 0, 168, 223, 0, 0, 169, 11, 0, 0, 169, 47, + 0, 0, 169, 153, 0, 0, 170, 92, 0, 0, 170, 136, 0, 0, 170, 176, 0, 0, 170, 220, + 0, 0, 171, 4, 0, 0, 171, 48, 0, 0, 171, 88, 0, 0, 171, 128, 0, 0, 171, 164, + 0, 0, 171, 216, 0, 0, 172, 8, 0, 0, 172, 228, 0, 0, 173, 191, 0, 0, 173, 235, + 0, 0, 174, 23, 0, 0, 174, 67, 0, 0, 174, 107, 0, 0, 174, 151, 0, 0, 174, 191, + 0, 0, 174, 239, 0, 0, 175, 23, 0, 0, 175, 71, 0, 0, 175, 111, 0, 0, 175, 222, + 0, 0, 176, 6, 0, 0, 176, 46, 0, 0, 176, 86, 0, 0, 176, 122, 0, 0, 176, 236, + 0, 0, 177, 60, 0, 0, 177, 130, 0, 0, 177, 146, 0, 0, 177, 238, 0, 0, 178, 39, + 0, 0, 178, 172, 0, 0, 179, 24, 0, 0, 179, 97, 0, 0, 179, 145, 0, 0, 179, 189, + 0, 0, 179, 233, 0, 0, 180, 17, 0, 0, 180, 69, 0, 0, 180, 117, 0, 0, 180, 165, + 0, 0, 180, 209, 0, 0, 181, 13, 0, 0, 182, 13, 0, 0, 182, 200, 0, 0, 183, 170, + 0, 0, 185, 112, 0, 0, 185, 243, 0, 0, 189, 55, 0, 0, 190, 49, 0, 0, 190, 69, + 0, 0, 190, 89, 0, 0, 190, 109, 0, 0, 190, 129, 0, 0, 190, 149, 0, 0, 190, 169, + 0, 0, 190, 189, 0, 0, 190, 209, 0, 0, 190, 229, 0, 0, 190, 249, 0, 0, 192, 66, + 0, 0, 193, 15, 0, 0, 194, 211, 0, 0, 196, 229, 0, 0, 198, 173, 0, 0, 201, 106, + 0, 0, 204, 88, 0, 0, 205, 251, 0, 0, 207, 24, 0, 0, 208, 217, 0, 0, 210, 157, + 0, 0, 211, 250, 0, 0, 213, 71, 0, 0, 215, 8, 0, 0, 215, 205, 0, 0, 216, 216, + 0, 0, 218, 44, 0, 0, 219, 13, 0, 0, 220, 130, 0, 0, 221, 225, 0, 0, 223, 46, + 0, 0, 224, 188, 0, 0, 226, 15, 0, 0, 227, 191, 0, 0, 228, 239, 0, 0, 231, 74, + 0, 0, 232, 110, 0, 0, 233, 1, 0, 0, 233, 65, 0, 0, 233, 229, 0, 0, 234, 194, + 0, 0, 234, 233, 0, 0, 234, 249, 0, 0, 235, 13, 0, 0, 235, 117, 0, 0, 236, 79, + 0, 0, 236, 179, 0, 0, 236, 203, 0, 0, 237, 76, 0, 0, 237, 100, 0, 0, 237, 124, + 0, 0, 238, 118, 0, 0, 239, 52, 0, 0, 239, 233, 0, 0, 240, 152, 0, 0, 241, 71, + 0, 0, 241, 87, 0, 0, 241, 103, 0, 0, 241, 119, 0, 0, 241, 135, 0, 0, 241, 151, + 0, 0, 241, 167, 0, 0, 241, 183, 0, 0, 241, 199, 0, 0, 241, 215, 0, 0, 241, 231, + 0, 0, 241, 251, 0, 0, 242, 15, 0, 0, 242, 35, 0, 0, 242, 55, 0, 0, 242, 75, + 0, 0, 242, 95, 0, 0, 242, 115, 0, 0, 242, 135, 0, 0, 242, 155, 0, 0, 242, 175, + 0, 0, 242, 218, 0, 0, 243, 31, 0, 0, 243, 104, 0, 0, 243, 147, 0, 0, 243, 163, + 0, 0, 243, 179, 0, 0, 243, 195, 0, 0, 243, 211, 0, 0, 243, 227, 0, 0, 243, 243, + 0, 0, 244, 3, 0, 0, 244, 19, 0, 0, 244, 35, 0, 0, 244, 51, 0, 0, 244, 67, + 0, 0, 244, 83, 0, 0, 244, 99, 0, 0, 244, 115, 0, 0, 244, 131, 0, 0, 244, 151, + 0, 0, 244, 167, 0, 0, 244, 183, 0, 0, 244, 203, 0, 0, 245, 220, 0, 0, 247, 86, + 0, 0, 248, 48, 0, 0, 249, 39, 0, 0, 250, 24, 0, 0, 251, 22, 0, 0, 251, 245, + 0, 0, 253, 19, 0, 0, 253, 235, 0, 0, 253, 251, 0, 0, 254, 233, 0, 0, 255, 201, + 0, 1, 0, 148, 0, 1, 2, 34, 0, 1, 2, 126, 0, 1, 3, 149, 0, 1, 4, 232, + 0, 1, 5, 94, 0, 1, 6, 142, 0, 1, 8, 93, 0, 1, 9, 114, 0, 1, 9, 253, + 0, 1, 10, 130, 0, 1, 11, 79, 0, 1, 12, 27, 0, 1, 12, 183, 0, 1, 13, 213, + 0, 1, 14, 139, 0, 1, 15, 56, 0, 1, 15, 204, 0, 1, 17, 6, 0, 1, 18, 79, + 0, 1, 19, 101, 0, 1, 20, 167, 0, 1, 21, 222, 0, 1, 22, 197, 0, 1, 23, 233, + 0, 1, 24, 219, 0, 1, 26, 118, 0, 1, 27, 220, 0, 1, 27, 236, 0, 1, 28, 246, + 0, 1, 30, 20, 0, 1, 30, 128, 0, 1, 31, 74, 0, 1, 31, 183, 0, 1, 32, 152, + 0, 1, 33, 76, 0, 1, 34, 89, 0, 1, 35, 52, 0, 1, 35, 228, 0, 1, 36, 216, + 0, 1, 37, 155, 0, 1, 38, 90, 0, 1, 39, 131, 0, 1, 40, 213, 0, 1, 41, 250, + 0, 1, 43, 16, 0, 1, 44, 74, 0, 1, 45, 83, 0, 1, 46, 90, 0, 1, 47, 143, + 0, 1, 48, 76, 0, 1, 48, 92, 0, 1, 48, 116, 0, 1, 49, 2, 0, 1, 49, 18, + 0, 1, 50, 48, 0, 1, 51, 125, 0, 1, 52, 191, 0, 1, 53, 41, 0, 1, 53, 201, + 0, 1, 54, 123, 0, 1, 55, 3, 0, 1, 55, 241, 0, 1, 56, 211, 0, 1, 56, 255, + 0, 1, 57, 39, 0, 1, 57, 83, 0, 1, 57, 127, 0, 1, 57, 171, 0, 1, 57, 211, + 0, 1, 57, 255, 0, 1, 58, 39, 0, 1, 59, 23, 0, 1, 59, 79, 0, 1, 59, 135, + 0, 1, 59, 191, 0, 1, 59, 247, 0, 1, 60, 47, 0, 1, 60, 103, 0, 1, 60, 159, + 0, 1, 61, 107, 0, 1, 62, 141, 0, 1, 62, 197, 0, 1, 63, 188, 0, 1, 63, 236, + 0, 1, 64, 24, 0, 1, 64, 64, 0, 1, 65, 127, 0, 1, 66, 171, 0, 1, 66, 215, + 0, 1, 66, 255, 0, 1, 67, 47, 0, 1, 68, 20, 0, 1, 69, 82, 0, 1, 70, 174, + 0, 1, 70, 218, 0, 1, 71, 2, 0, 1, 71, 46, 0, 1, 71, 86, 0, 1, 71, 126, + 0, 1, 72, 147, 0, 1, 73, 152, 0, 1, 74, 166, 0, 1, 74, 210, 0, 1, 74, 250, + 0, 1, 75, 164, 0, 1, 76, 97, 0, 1, 76, 145, 0, 1, 76, 189, 0, 1, 77, 235, + 0, 1, 78, 19, 0, 1, 78, 63, 0, 1, 78, 103, 0, 1, 78, 147, 0, 1, 78, 187, + 0, 1, 78, 239, 0, 1, 79, 31, 0, 1, 79, 75, 0, 1, 79, 115, 0, 1, 79, 167, + 0, 1, 79, 215, 0, 1, 80, 3, 0, 1, 80, 43, 0, 1, 80, 95, 0, 1, 80, 147, + 0, 1, 80, 191, 0, 1, 80, 235, 0, 1, 81, 31, 0, 1, 81, 83, 0, 1, 81, 127, + 0, 1, 81, 167, 0, 1, 81, 219, 0, 1, 82, 15, 0, 1, 82, 63, 0, 1, 82, 103, + 0, 1, 82, 155, 0, 1, 82, 207, 0, 1, 82, 251, 0, 1, 83, 35, 0, 1, 84, 111, + 0, 1, 85, 181, 0, 1, 85, 225, 0, 1, 86, 187, 0, 1, 87, 56, 0, 1, 88, 156, + 0, 1, 89, 214, 0, 1, 91, 12, 0, 1, 91, 179, 0, 1, 92, 88, 0, 1, 92, 132, + 0, 1, 92, 172, 0, 1, 93, 121, 0, 1, 94, 251, 0, 1, 96, 103, 0, 1, 96, 159, + 0, 1, 98, 84, 0, 1, 98, 132, 0, 1, 98, 176, 0, 1, 98, 216, 0, 1, 100, 28, + 0, 1, 100, 76, 0, 1, 100, 120, 0, 1, 100, 160, 0, 1, 101, 113, 0, 1, 102, 129, + 0, 1, 103, 124, 0, 1, 104, 214, 0, 1, 105, 248, 0, 1, 107, 13, 0, 1, 108, 119, + 0, 1, 109, 202, 0, 1, 110, 39, 0, 1, 110, 187, 0, 1, 112, 39, 0, 1, 113, 73, + 0, 1, 114, 36, 0, 1, 115, 33, 0, 1, 116, 152, 0, 1, 117, 140, 0, 1, 117, 156, + 0, 1, 118, 94, 0, 1, 119, 124, 0, 1, 120, 15, 0, 1, 120, 206, 0, 1, 122, 1, + 0, 1, 123, 3, 0, 1, 124, 27, 0, 1, 124, 139, 0, 1, 125, 94, 0, 1, 126, 144, + 0, 1, 127, 134, 0, 1, 127, 226, 0, 1, 128, 48, 0, 1, 128, 217, 0, 1, 129, 85, + 0, 1, 129, 166, 0, 1, 130, 100, 0, 1, 131, 34, 0, 1, 131, 186, 0, 1, 132, 108, + 0, 1, 132, 240, 0, 1, 133, 126, 0, 1, 134, 24, 0, 1, 134, 72, 0, 1, 134, 124, + 0, 1, 135, 96, 0, 1, 135, 140, 0, 1, 136, 216, 0, 1, 138, 61, 0, 1, 138, 149, + 0, 1, 138, 201, 0, 1, 139, 86, 0, 1, 140, 37, 0, 1, 140, 223, 0, 1, 141, 152, + 0, 1, 141, 200, 0, 1, 141, 244, 0, 1, 142, 36, 0, 1, 142, 124, 0, 1, 142, 140, + 0, 1, 142, 156, 0, 1, 142, 172, 0, 1, 142, 248, 0, 1, 143, 174, 0, 1, 143, 190, + 0, 1, 144, 206, 0, 1, 146, 26, 0, 1, 146, 162, 0, 1, 146, 206, 0, 1, 146, 222, + 0, 1, 147, 131, 0, 1, 147, 147, 0, 1, 147, 163, 0, 1, 147, 179, 0, 1, 147, 247, + 0, 1, 148, 7, 0, 1, 148, 23, 0, 1, 148, 39, 0, 1, 149, 13, 0, 1, 150, 16, + 0, 1, 150, 32, 0, 1, 150, 116, 0, 1, 151, 11, 0, 1, 151, 103, 0, 1, 151, 222, + 0, 1, 152, 204, 0, 1, 153, 123, 0, 1, 154, 52, 0, 1, 155, 74, 0, 1, 156, 81, + 0, 1, 157, 101, 0, 1, 157, 117, 0, 1, 158, 176, 0, 1, 159, 196, 0, 1, 159, 251, + 0, 1, 160, 149, 0, 1, 160, 165, 0, 1, 161, 218, 0, 1, 162, 228, 0, 1, 163, 115, + 0, 1, 163, 155, 0, 1, 163, 171, 0, 1, 164, 72, 0, 1, 165, 53, 0, 1, 165, 150, + 0, 1, 165, 166, 0, 1, 165, 239, 0, 1, 165, 255, 0, 1, 166, 15, 0, 1, 166, 88, + 0, 1, 166, 104, 0, 1, 167, 123, 0, 1, 167, 139, 0, 1, 167, 229, 0, 1, 168, 104, + 0, 1, 168, 196, 0, 1, 169, 60, 0, 1, 170, 5, 0, 1, 170, 192, 0, 1, 171, 131, + 0, 1, 172, 64, 0, 1, 173, 54, 0, 1, 174, 38, 0, 1, 174, 78, 0, 1, 174, 126, + 0, 1, 175, 133, 0, 1, 175, 173, 0, 1, 176, 113, 0, 1, 176, 129, 0, 1, 176, 145, + 0, 1, 176, 197, 0, 1, 176, 213, 0, 1, 177, 196, 0, 1, 178, 142, 0, 1, 178, 158, + 0, 1, 178, 198, 0, 1, 178, 238, 0, 1, 179, 22, 0, 1, 179, 115, 0, 1, 180, 208, + 0, 1, 181, 213, 0, 1, 182, 172, 0, 1, 184, 50, 0, 1, 185, 110, 0, 1, 186, 19, + 0, 1, 186, 186, 0, 1, 187, 189, 0, 1, 188, 182, 0, 1, 189, 154, 0, 1, 190, 171, + 0, 1, 191, 239, 0, 1, 193, 35, 0, 1, 193, 117, 0, 1, 193, 181, 0, 1, 194, 41, + 0, 1, 194, 131, 0, 1, 195, 114, 0, 1, 196, 87, 0, 1, 197, 166, 0, 1, 198, 233, + 0, 1, 201, 2, 0, 1, 202, 154, 0, 1, 203, 81, 0, 1, 203, 222, 0, 1, 204, 186, + 0, 1, 205, 160, 0, 1, 206, 114, 0, 1, 207, 77, 0, 1, 208, 3, 0, 1, 208, 179, + 0, 1, 209, 37, 0, 1, 209, 152, 0, 1, 210, 5, 0, 1, 210, 111, 0, 1, 211, 96, + 0, 1, 212, 48, 0, 1, 213, 197, 0, 1, 215, 79, 0, 1, 215, 95, 0, 1, 215, 111, + 0, 1, 215, 196, 0, 1, 216, 30, 0, 1, 216, 46, 0, 1, 216, 201, 0, 1, 217, 107, + 0, 1, 218, 18, 0, 1, 218, 190, 0, 1, 219, 104, 0, 1, 219, 215, 0, 1, 220, 70, + 0, 1, 220, 238, 0, 1, 221, 130, 0, 1, 222, 46, 0, 1, 222, 194, 0, 1, 223, 93, + 0, 1, 223, 109, 0, 1, 224, 186, 0, 1, 225, 192, 0, 1, 227, 58, 0, 1, 228, 92, + 0, 1, 228, 108, 0, 1, 228, 156, 0, 1, 228, 196, 0, 1, 229, 201, 0, 1, 230, 178, + 0, 1, 231, 128, 0, 1, 232, 60, 0, 1, 232, 195, 0, 1, 233, 76, 0, 1, 233, 225, + 0, 1, 234, 108, 0, 1, 235, 14, 0, 1, 235, 163, 0, 1, 236, 224, 0, 1, 238, 21, + 0, 1, 238, 37, 0, 1, 238, 81, 0, 1, 238, 121, 0, 1, 238, 173, 0, 1, 238, 221, + 0, 1, 238, 237, 0, 1, 238, 253, 0, 1, 239, 45, 0, 1, 239, 85, 0, 1, 239, 101, + 0, 1, 239, 117, 0, 1, 239, 169, 0, 1, 239, 221, 0, 1, 240, 17, 0, 1, 240, 65, + 0, 1, 240, 117, 0, 1, 240, 169, 0, 1, 240, 185, 0, 1, 240, 201, 0, 1, 240, 245, + 0, 1, 241, 29, 0, 1, 241, 81, 0, 1, 241, 129, 0, 1, 241, 181, 0, 1, 241, 229, + 0, 1, 242, 218, 0, 1, 243, 184, 0, 1, 243, 236, 0, 1, 244, 28, 0, 1, 244, 80, + 0, 1, 244, 132, 0, 1, 244, 176, 0, 1, 244, 216, 0, 1, 245, 12, 0, 1, 245, 60, + 0, 1, 245, 112, 0, 1, 245, 160, 0, 1, 245, 212, 0, 1, 246, 4, 0, 1, 246, 86, + 0, 1, 246, 159, 0, 1, 246, 211, 0, 1, 247, 3, 0, 1, 248, 26, 0, 1, 248, 64, + 0, 1, 249, 210, 0, 1, 250, 182, 0, 1, 251, 1, 0, 1, 251, 17, 0, 1, 252, 45, + 0, 1, 252, 61, 0, 1, 252, 213, 0, 1, 252, 229, 0, 1, 253, 91, 0, 1, 253, 107, + 0, 1, 254, 165, 0, 1, 254, 181, 0, 1, 255, 110, 0, 2, 0, 1, 0, 2, 0, 243, + 0, 2, 1, 126, 0, 2, 1, 233, 0, 2, 1, 249, 0, 2, 2, 9, 0, 2, 2, 234, + 0, 2, 3, 143, 0, 2, 3, 210, 0, 2, 3, 226, 0, 2, 3, 242, 0, 2, 4, 148, + 0, 2, 5, 87, 0, 2, 6, 103, 0, 2, 7, 84, 0, 2, 8, 146, 0, 2, 9, 16, + 0, 2, 10, 91, 0, 2, 11, 70, 0, 2, 12, 81, 0, 2, 12, 229, 0, 2, 14, 30, + 0, 2, 14, 134, 0, 2, 14, 150, 0, 2, 15, 143, 0, 2, 15, 159, 0, 2, 15, 175, + 0, 2, 17, 37, 0, 2, 17, 53, 0, 2, 17, 69, 0, 2, 18, 71, 0, 2, 19, 51, + 0, 2, 20, 109, 0, 2, 20, 233, 0, 2, 21, 106, 0, 2, 22, 111, 0, 2, 22, 127, + 0, 2, 23, 73, 0, 2, 24, 94, 0, 2, 24, 134, 0, 2, 24, 158, 0, 2, 24, 198, + 0, 2, 24, 238, 0, 2, 25, 34, 0, 2, 25, 58, 0, 2, 25, 82, 0, 2, 25, 134, + 0, 2, 25, 174, 0, 2, 25, 214, 0, 2, 25, 254, 0, 2, 26, 38, 0, 2, 26, 78, + 0, 2, 26, 130, 0, 2, 26, 190, 0, 2, 26, 230, 0, 2, 27, 22, 0, 2, 27, 62, + 0, 2, 27, 118, 0, 2, 27, 158, 0, 2, 27, 213, 0, 2, 28, 3, 0, 2, 28, 141, + 0, 2, 28, 185, 0, 2, 28, 229, 0, 2, 29, 25, 0, 2, 29, 77, 0, 2, 29, 125, + 0, 2, 29, 173, 0, 2, 29, 221, 0, 2, 30, 17, 0, 2, 30, 57, 0, 2, 30, 97, + 0, 2, 30, 141, 0, 2, 30, 185, 0, 2, 30, 229, 0, 2, 31, 17, 0, 2, 31, 61, + 0, 2, 31, 105, 0, 2, 31, 145, 0, 2, 31, 189, 0, 2, 31, 237, 0, 2, 32, 33, + 0, 2, 32, 85, 0, 2, 32, 133, 0, 2, 32, 173, 0, 2, 32, 213, 0, 2, 33, 1, + 0, 2, 33, 45, 0, 2, 33, 89, 0, 2, 33, 133, 0, 2, 33, 177, 0, 2, 33, 217, + 0, 2, 34, 13, 0, 2, 34, 65, 0, 2, 34, 117, 0, 2, 34, 165, 0, 2, 34, 217, + 0, 2, 35, 13, 0, 2, 35, 53, 0, 2, 35, 93, 0, 2, 35, 137, 0, 2, 35, 181, + 0, 2, 35, 225, 0, 2, 36, 13, 0, 2, 36, 57, 0, 2, 36, 101, 0, 2, 36, 145, + 0, 2, 36, 189, 0, 2, 36, 241, 0, 2, 37, 37, 0, 2, 37, 89, 0, 2, 37, 141, + 0, 2, 37, 193, 0, 2, 37, 245, 0, 2, 38, 29, 0, 2, 38, 69, 0, 2, 38, 113, + 0, 2, 38, 157, 0, 2, 38, 201, 0, 2, 38, 245, 0, 2, 39, 33, 0, 2, 39, 77, + 0, 2, 39, 117, 0, 2, 39, 157, 0, 2, 39, 205, 0, 2, 39, 253, 0, 2, 40, 45, + 0, 2, 40, 93, 0, 2, 40, 133, 0, 2, 40, 173, 0, 2, 40, 217, 0, 2, 41, 5, + 0, 2, 41, 49, 0, 2, 41, 93, 0, 2, 41, 133, 0, 2, 41, 173, 0, 2, 41, 221, + 0, 2, 42, 13, 0, 2, 42, 61, 0, 2, 42, 109, 0, 2, 42, 157, 0, 2, 42, 205, + 0, 2, 42, 245, 0, 2, 43, 33, 0, 2, 43, 77, 0, 2, 43, 121, 0, 2, 43, 165, + 0, 2, 43, 205, 0, 2, 44, 1, 0, 2, 44, 53, 0, 2, 44, 105, 0, 2, 44, 153, + 0, 2, 44, 205, 0, 2, 45, 1, 0, 2, 45, 41, 0, 2, 45, 81, 0, 2, 45, 125, + 0, 2, 45, 169, 0, 2, 45, 213, 0, 2, 46, 1, 0, 2, 46, 45, 0, 2, 46, 89, + 0, 2, 46, 133, 0, 2, 46, 173, 0, 2, 46, 217, 0, 2, 47, 1, 0, 2, 47, 41, + 0, 2, 47, 81, 0, 2, 47, 125, 0, 2, 47, 169, 0, 2, 47, 209, 0, 2, 47, 249, + 0, 2, 48, 33, 0, 2, 48, 73, 0, 2, 48, 113, 0, 2, 48, 153, 0, 2, 48, 197, + 0, 2, 48, 241, 0, 2, 49, 33, 0, 2, 49, 81, 0, 2, 49, 129, 0, 2, 49, 177, + 0, 2, 49, 225, 0, 2, 50, 17, 0, 2, 50, 57, 0, 2, 50, 97, 0, 2, 50, 141, + 0, 2, 50, 185, 0, 2, 50, 229, 0, 2, 51, 17, 0, 2, 51, 61, 0, 2, 51, 105, + 0, 2, 51, 153, 0, 2, 51, 201, 0, 2, 51, 249, 0, 2, 52, 41, 0, 2, 52, 89, + 0, 2, 52, 137, 0, 2, 52, 185, 0, 2, 52, 233, 0, 2, 53, 1, 0, 2, 53, 25, + 0, 2, 53, 69, 0, 2, 53, 113, 0, 2, 53, 157, 0, 2, 53, 201, 0, 2, 53, 245, + 0, 2, 54, 33, 0, 2, 54, 77, 0, 2, 54, 121, 0, 2, 54, 169, 0, 2, 54, 217, + 0, 2, 55, 9, 0, 2, 55, 57, 0, 2, 55, 105, 0, 2, 55, 153, 0, 2, 55, 193, + 0, 2, 55, 233, 0, 2, 56, 21, 0, 2, 56, 65, 0, 2, 56, 109, 0, 2, 56, 153, + 0, 2, 56, 197, 0, 2, 56, 241, 0, 2, 57, 29, 0, 2, 57, 73, 0, 2, 57, 121, + 0, 2, 57, 157, 0, 2, 57, 201, 0, 2, 57, 241, 0, 2, 58, 29, 0, 2, 58, 73, + 0, 2, 58, 117, 0, 2, 58, 157, 0, 2, 58, 197, 0, 2, 59, 201, 0, 2, 60, 31, + 0, 2, 60, 101, 0, 2, 60, 117, 0, 2, 60, 209, 0, 2, 61, 118, 0, 2, 61, 166, + 0, 2, 61, 206, 0, 2, 61, 254, 0, 2, 62, 42, 0, 2, 62, 90, 0, 2, 62, 130, + 0, 2, 62, 170, 0, 2, 62, 210, 0, 2, 62, 250, 0, 2, 63, 154, 0, 2, 64, 26, + 0, 2, 64, 157, 0, 2, 65, 56, 0, 2, 65, 100, 0, 2, 65, 144, 0, 2, 65, 204, + 0, 2, 66, 8, 0, 2, 66, 52, 0, 2, 66, 112, 0, 2, 66, 156, 0, 2, 66, 200, + 0, 2, 66, 240, 0, 2, 67, 24, 0, 2, 67, 145, 0, 2, 68, 10, 0, 2, 68, 166, + 0, 2, 68, 206, 0, 2, 68, 246, 0, 2, 69, 46, 0, 2, 69, 102, 0, 2, 69, 146, + 0, 2, 69, 190, 0, 2, 69, 230, 0, 2, 70, 30, 0, 2, 70, 74, 0, 2, 70, 118, + 0, 2, 70, 158, 0, 2, 70, 182, 0, 2, 70, 222, 0, 2, 71, 106, 0, 2, 71, 248, + 0, 2, 72, 45, 0, 2, 72, 89, 0, 2, 72, 125, 0, 2, 72, 169, 0, 2, 72, 213, + 0, 2, 73, 5, 0, 2, 73, 45, 0, 2, 73, 69, 0, 2, 73, 109, 0, 2, 73, 149, + 0, 2, 74, 240, 0, 2, 75, 38, 0, 2, 75, 121, 0, 2, 75, 169, 0, 2, 75, 217, + 0, 2, 76, 13, 0, 2, 76, 65, 0, 2, 76, 117, 0, 2, 76, 169, 0, 2, 76, 221, + 0, 2, 77, 17, 0, 2, 77, 65, 0, 2, 77, 113, 0, 2, 77, 165, 0, 2, 77, 217, + 0, 2, 78, 13, 0, 2, 78, 65, 0, 2, 78, 117, 0, 2, 78, 169, 0, 2, 78, 217, + 0, 2, 79, 9, 0, 2, 79, 61, 0, 2, 79, 113, 0, 2, 79, 165, 0, 2, 79, 217, + 0, 2, 80, 13, 0, 2, 80, 65, 0, 2, 80, 101, 0, 2, 80, 137, 0, 2, 80, 173, + 0, 2, 81, 150, 0, 2, 83, 22, 0, 2, 91, 148, 0, 2, 92, 66, 0, 2, 92, 102, + 0, 2, 92, 149, 0, 2, 92, 196, 0, 2, 92, 243, 0, 2, 93, 25, 0, 2, 93, 62, + 0, 2, 93, 117, 0, 2, 93, 173, 0, 2, 93, 227, 0, 2, 94, 26, 0, 2, 94, 99, + 0, 2, 94, 146, 0, 2, 94, 223, 0, 2, 95, 46, 0, 2, 95, 119, 0, 2, 95, 187, + 0, 2, 96, 4, 0, 2, 96, 79, 0, 2, 96, 147, 0, 2, 96, 218, 0, 2, 97, 17, + 0, 2, 97, 152, 0, 2, 97, 251, 0, 2, 98, 92, 0, 2, 98, 189, 0, 2, 99, 10, + 0, 2, 99, 89, 0, 2, 99, 184, 0, 2, 100, 5, 0, 2, 100, 83, 0, 2, 100, 140, + 0, 2, 100, 216, 0, 2, 101, 38, 0, 2, 101, 114, 0, 2, 101, 185, 0, 2, 101, 255, + 0, 2, 102, 73, 0, 2, 102, 141, 0, 2, 102, 212, 0, 2, 102, 253, 0, 2, 105, 4, + 0, 2, 108, 195, 0, 2, 112, 43, 0, 2, 112, 153, 0, 2, 113, 4, 0, 2, 0, 0, + 0, 0, 0, 0, 255, 133, 0, 20, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 9, 0, 0, 0, 1, 0, 2, 0, 3, 0, 4, + 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, + 0, 15, 0, 16, 0, 17, 0, 18, 0, 19, 0, 20, 0, 21, 0, 22, 0, 23, 0, 24, + 0, 25, 0, 26, 0, 27, 0, 28, 0, 29, 0, 30, 0, 31, 0, 32, 0, 33, 0, 34, + 0, 35, 0, 36, 0, 37, 0, 38, 0, 39, 0, 40, 0, 41, 0, 42, 0, 43, 0, 44, + 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 0, 53, 0, 54, + 0, 55, 0, 56, 0, 57, 0, 58, 0, 59, 0, 60, 0, 61, 0, 62, 0, 63, 0, 64, + 0, 65, 0, 66, 0, 67, 0, 68, 0, 69, 0, 70, 0, 71, 0, 72, 0, 73, 0, 74, + 0, 75, 0, 76, 0, 77, 0, 78, 0, 79, 0, 80, 0, 81, 0, 82, 0, 83, 0, 84, + 0, 85, 0, 86, 0, 87, 0, 88, 0, 89, 0, 90, 0, 91, 0, 92, 0, 93, 0, 94, + 0, 95, 0, 96, 0, 97, 1, 2, 0, 196, 0, 166, 0, 197, 0, 171, 0, 130, 0, 194, + 0, 216, 0, 198, 0, 228, 0, 190, 0, 176, 0, 182, 0, 183, 0, 180, 0, 181, 0, 135, + 0, 178, 0, 179, 0, 217, 0, 140, 0, 229, 0, 191, 0, 177, 0, 187, 1, 3, 0, 163, + 0, 132, 0, 133, 0, 189, 0, 150, 0, 232, 0, 134, 0, 142, 0, 139, 0, 157, 0, 169, + 0, 164, 1, 4, 0, 138, 0, 218, 0, 131, 0, 147, 0, 242, 0, 243, 0, 141, 0, 151, + 0, 136, 0, 195, 0, 222, 0, 241, 0, 158, 0, 170, 0, 245, 0, 244, 0, 246, 0, 162, + 0, 173, 0, 201, 0, 199, 0, 174, 0, 98, 0, 99, 0, 144, 0, 100, 0, 203, 0, 101, + 0, 200, 0, 202, 0, 207, 0, 204, 0, 205, 0, 206, 0, 233, 0, 102, 0, 211, 0, 208, + 0, 209, 0, 175, 0, 103, 0, 240, 0, 145, 0, 214, 0, 212, 0, 213, 0, 104, 0, 235, + 0, 237, 0, 137, 0, 106, 0, 105, 0, 107, 0, 109, 0, 108, 0, 110, 0, 160, 0, 111, + 0, 113, 0, 112, 0, 114, 0, 115, 0, 117, 0, 116, 0, 118, 0, 119, 0, 234, 0, 120, + 0, 122, 0, 121, 0, 123, 0, 125, 0, 124, 0, 184, 0, 161, 0, 127, 0, 126, 0, 128, + 0, 129, 0, 236, 0, 238, 0, 186, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, + 0, 253, 0, 254, 1, 11, 1, 12, 1, 13, 1, 14, 0, 255, 1, 0, 1, 15, 1, 16, + 1, 17, 1, 1, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, + 1, 26, 1, 27, 1, 28, 1, 29, 0, 248, 0, 249, 1, 30, 1, 31, 1, 32, 1, 33, + 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39, 1, 40, 1, 41, 1, 42, 1, 43, + 1, 44, 1, 45, 0, 250, 0, 215, 1, 46, 1, 47, 1, 48, 1, 49, 1, 50, 1, 51, + 1, 52, 1, 53, 1, 54, 1, 55, 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, + 1, 62, 0, 226, 0, 227, 1, 63, 1, 64, 1, 65, 1, 66, 1, 67, 1, 68, 1, 69, + 1, 70, 1, 71, 1, 72, 1, 73, 1, 74, 1, 75, 1, 76, 1, 77, 1, 78, 1, 79, + 1, 80, 1, 81, 1, 82, 1, 83, 1, 84, 1, 85, 1, 86, 1, 87, 1, 88, 0, 251, + 0, 252, 1, 89, 1, 90, 1, 91, 1, 92, 1, 93, 1, 94, 1, 95, 1, 96, 1, 97, + 1, 98, 1, 99, 1, 100, 1, 101, 1, 102, 1, 103, 1, 104, 1, 105, 1, 106, 1, 107, + 1, 108, 1, 109, 1, 110, 1, 111, 1, 112, 1, 113, 1, 114, 0, 230, 0, 231, 1, 115, + 1, 116, 1, 117, 1, 118, 1, 119, 1, 120, 1, 121, 0, 225, 1, 122, 0, 219, 0, 220, + 0, 221, 0, 224, 0, 223, 1, 123, 1, 124, 1, 125, 1, 126, 1, 127, 1, 128, 1, 129, + 1, 130, 0, 188, 1, 131, 1, 132, 1, 133, 1, 134, 1, 135, 1, 136, 1, 137, 1, 138, + 1, 139, 1, 140, 1, 141, 1, 142, 1, 143, 1, 144, 1, 145, 1, 146, 1, 147, 1, 148, + 1, 149, 1, 150, 1, 151, 1, 152, 1, 153, 1, 154, 1, 155, 1, 156, 1, 157, 1, 158, + 1, 159, 1, 160, 1, 161, 1, 162, 1, 163, 1, 164, 1, 165, 1, 166, 1, 167, 1, 168, + 1, 169, 1, 170, 1, 171, 1, 172, 1, 173, 0, 152, 0, 168, 0, 154, 0, 153, 1, 174, + 0, 239, 1, 175, 1, 176, 0, 165, 0, 146, 0, 156, 0, 167, 0, 143, 0, 148, 0, 149, + 0, 185, 0, 192, 1, 177, 0, 193, 1, 178, 1, 179, 1, 180, 1, 181, 1, 182, 1, 183, + 1, 184, 1, 185, 1, 186, 1, 187, 1, 188, 1, 189, 1, 190, 1, 191, 1, 192, 1, 193, + 1, 194, 1, 195, 1, 196, 1, 197, 1, 198, 1, 199, 1, 200, 1, 201, 1, 202, 1, 203, + 1, 204, 1, 205, 1, 206, 1, 207, 1, 208, 1, 209, 1, 210, 1, 211, 1, 212, 1, 213, + 1, 214, 1, 215, 1, 216, 1, 217, 1, 218, 1, 219, 1, 220, 1, 221, 1, 222, 1, 223, + 1, 224, 1, 225, 1, 226, 1, 227, 1, 228, 1, 229, 1, 230, 1, 231, 1, 232, 1, 233, + 1, 234, 1, 235, 1, 236, 1, 237, 1, 238, 1, 239, 1, 240, 1, 241, 1, 242, 1, 243, + 1, 244, 1, 245, 1, 246, 1, 247, 1, 248, 1, 249, 1, 250, 1, 251, 1, 252, 1, 253, + 1, 254, 1, 255, 2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, + 2, 8, 2, 9, 2, 10, 2, 11, 2, 12, 2, 13, 2, 14, 2, 15, 2, 16, 2, 17, + 2, 18, 2, 19, 2, 20, 2, 21, 2, 22, 2, 23, 2, 24, 2, 25, 2, 26, 2, 27, + 2, 28, 2, 29, 2, 30, 2, 31, 2, 32, 2, 33, 2, 34, 2, 35, 2, 36, 2, 37, + 2, 38, 2, 39, 2, 40, 2, 41, 2, 42, 2, 43, 2, 44, 2, 45, 2, 46, 2, 47, + 2, 48, 2, 49, 2, 50, 2, 51, 2, 52, 2, 53, 2, 54, 2, 55, 2, 56, 2, 57, + 2, 58, 2, 59, 2, 60, 2, 61, 2, 62, 2, 63, 2, 64, 2, 65, 2, 66, 2, 67, + 2, 68, 2, 69, 2, 70, 2, 71, 2, 72, 2, 73, 2, 74, 2, 75, 2, 76, 2, 77, + 2, 78, 2, 79, 2, 80, 2, 81, 2, 82, 2, 83, 2, 84, 2, 85, 2, 86, 2, 87, + 2, 88, 2, 89, 2, 90, 2, 91, 2, 92, 2, 93, 2, 94, 2, 95, 2, 96, 2, 97, + 2, 98, 2, 99, 2, 100, 2, 101, 2, 102, 2, 103, 2, 104, 2, 105, 2, 106, 2, 107, + 2, 108, 2, 109, 2, 110, 2, 111, 2, 112, 2, 113, 2, 114, 2, 115, 2, 116, 2, 117, + 2, 118, 2, 119, 2, 120, 2, 121, 2, 122, 2, 123, 2, 124, 2, 125, 2, 126, 2, 127, + 2, 128, 2, 129, 2, 130, 2, 131, 2, 132, 2, 133, 2, 134, 2, 135, 2, 136, 2, 137, + 2, 138, 2, 139, 2, 140, 2, 141, 2, 142, 2, 143, 2, 144, 2, 145, 2, 146, 2, 147, + 2, 148, 2, 149, 2, 150, 2, 151, 2, 152, 2, 153, 2, 154, 2, 155, 2, 156, 2, 157, + 2, 158, 2, 159, 2, 160, 2, 161, 2, 162, 2, 163, 2, 164, 2, 165, 2, 166, 2, 167, + 2, 168, 2, 169, 2, 170, 2, 171, 2, 172, 2, 173, 2, 174, 2, 175, 2, 176, 2, 177, + 2, 178, 2, 179, 2, 180, 2, 181, 2, 182, 2, 183, 2, 184, 2, 185, 2, 186, 2, 187, + 2, 188, 2, 189, 2, 190, 2, 191, 2, 192, 2, 193, 2, 194, 2, 195, 2, 196, 2, 197, + 2, 198, 2, 199, 2, 200, 2, 201, 2, 202, 2, 203, 2, 204, 2, 205, 2, 206, 2, 207, + 2, 208, 2, 209, 2, 210, 2, 211, 2, 212, 2, 213, 2, 214, 2, 215, 2, 216, 2, 217, + 2, 218, 2, 219, 2, 220, 2, 221, 2, 222, 2, 223, 2, 224, 2, 225, 2, 226, 2, 227, + 2, 228, 2, 229, 2, 230, 2, 231, 2, 232, 2, 233, 2, 234, 2, 235, 2, 236, 2, 237, + 2, 238, 2, 239, 2, 240, 2, 241, 2, 242, 2, 243, 2, 244, 2, 245, 2, 246, 2, 247, + 2, 248, 2, 249, 2, 250, 2, 251, 2, 252, 2, 253, 2, 254, 2, 255, 3, 0, 3, 1, + 3, 2, 3, 3, 3, 4, 3, 5, 3, 6, 3, 7, 3, 8, 3, 9, 3, 10, 3, 11, + 3, 12, 3, 13, 3, 14, 3, 15, 3, 16, 3, 17, 3, 18, 3, 19, 3, 20, 3, 21, + 3, 22, 3, 23, 3, 24, 3, 25, 3, 26, 3, 27, 3, 28, 3, 29, 3, 30, 3, 31, + 3, 32, 3, 33, 3, 34, 3, 35, 3, 36, 3, 37, 3, 38, 3, 39, 3, 40, 3, 41, + 3, 42, 3, 43, 3, 44, 3, 45, 3, 46, 3, 47, 3, 48, 3, 49, 3, 50, 3, 51, + 3, 52, 3, 53, 3, 54, 3, 55, 3, 56, 3, 57, 3, 58, 3, 59, 3, 60, 3, 61, + 3, 62, 3, 63, 3, 64, 3, 65, 3, 66, 3, 67, 3, 68, 3, 69, 3, 70, 3, 71, + 3, 72, 3, 73, 3, 74, 3, 75, 3, 76, 3, 77, 3, 78, 3, 79, 3, 80, 3, 81, + 3, 82, 3, 83, 3, 84, 3, 85, 3, 86, 3, 87, 3, 88, 3, 89, 3, 90, 3, 91, + 3, 92, 3, 93, 3, 94, 3, 95, 3, 96, 3, 97, 3, 98, 3, 99, 3, 100, 3, 101, + 3, 102, 3, 103, 3, 104, 3, 105, 3, 106, 3, 107, 3, 108, 3, 109, 3, 110, 3, 111, + 3, 112, 3, 113, 3, 114, 3, 115, 3, 116, 3, 117, 3, 118, 3, 119, 3, 120, 3, 121, + 3, 122, 3, 123, 3, 124, 3, 125, 3, 126, 3, 127, 3, 128, 3, 129, 3, 130, 3, 131, + 3, 132, 3, 133, 3, 134, 3, 135, 3, 136, 3, 137, 3, 138, 3, 139, 3, 140, 3, 141, + 3, 142, 3, 143, 3, 144, 3, 145, 3, 146, 3, 147, 3, 148, 3, 149, 3, 150, 3, 151, + 3, 152, 3, 153, 3, 154, 3, 155, 3, 156, 3, 157, 3, 158, 3, 159, 3, 160, 3, 161, + 3, 162, 3, 163, 3, 164, 3, 165, 3, 166, 3, 167, 0, 159, 3, 168, 3, 169, 3, 170, + 3, 171, 3, 172, 3, 173, 3, 174, 3, 175, 3, 176, 3, 177, 3, 178, 3, 179, 3, 180, + 3, 181, 3, 182, 0, 155, 3, 183, 3, 184, 3, 185, 3, 186, 3, 187, 3, 188, 3, 189, + 3, 190, 3, 191, 3, 192, 3, 193, 3, 194, 3, 195, 3, 196, 3, 197, 3, 198, 3, 199, + 3, 200, 3, 201, 3, 202, 3, 203, 3, 204, 3, 205, 3, 206, 3, 207, 3, 208, 3, 209, + 3, 210, 3, 211, 3, 212, 3, 213, 3, 214, 3, 215, 3, 216, 3, 217, 3, 218, 3, 219, + 3, 220, 3, 221, 3, 222, 3, 223, 3, 224, 3, 225, 3, 226, 3, 227, 3, 228, 3, 229, + 3, 230, 3, 231, 3, 232, 3, 233, 3, 234, 3, 235, 3, 236, 3, 237, 3, 238, 3, 239, + 3, 240, 3, 241, 3, 242, 3, 243, 3, 244, 3, 245, 3, 246, 3, 247, 3, 248, 3, 249, + 3, 250, 3, 251, 3, 252, 3, 253, 3, 254, 3, 255, 4, 0, 4, 1, 4, 2, 4, 3, + 4, 4, 4, 5, 4, 6, 4, 7, 4, 8, 4, 9, 4, 10, 4, 11, 4, 12, 4, 13, + 4, 14, 4, 15, 4, 16, 4, 17, 4, 18, 4, 19, 4, 20, 4, 21, 4, 22, 4, 23, + 4, 24, 4, 25, 4, 26, 4, 27, 4, 28, 4, 29, 4, 30, 4, 31, 4, 32, 4, 33, + 4, 34, 4, 35, 4, 36, 4, 37, 4, 38, 4, 39, 4, 40, 4, 41, 4, 42, 4, 43, + 4, 44, 4, 45, 4, 46, 4, 47, 4, 48, 4, 49, 4, 50, 4, 51, 4, 52, 4, 53, + 4, 54, 4, 55, 4, 56, 4, 57, 4, 58, 4, 59, 4, 60, 4, 61, 4, 62, 4, 63, + 4, 64, 4, 65, 4, 66, 4, 67, 4, 68, 4, 69, 4, 70, 4, 71, 4, 72, 4, 73, + 4, 74, 4, 75, 4, 76, 4, 77, 4, 78, 4, 79, 4, 80, 4, 81, 4, 82, 4, 83, + 4, 84, 4, 85, 4, 86, 4, 87, 4, 88, 4, 89, 4, 90, 4, 91, 4, 92, 4, 93, + 4, 94, 4, 95, 4, 96, 4, 97, 4, 98, 4, 99, 4, 100, 4, 101, 4, 102, 4, 103, + 4, 104, 4, 105, 4, 106, 4, 107, 4, 108, 4, 109, 4, 110, 4, 111, 4, 112, 4, 113, + 4, 114, 4, 115, 4, 116, 4, 117, 4, 118, 4, 119, 4, 120, 4, 121, 4, 122, 4, 123, + 4, 124, 4, 125, 4, 126, 4, 127, 4, 128, 4, 129, 4, 130, 4, 131, 4, 132, 4, 133, + 4, 134, 4, 135, 4, 136, 4, 137, 4, 138, 4, 139, 4, 140, 4, 141, 4, 142, 4, 143, + 4, 144, 4, 145, 4, 146, 4, 147, 4, 148, 4, 149, 4, 150, 4, 151, 4, 152, 4, 153, + 4, 154, 4, 155, 4, 156, 4, 157, 4, 158, 4, 159, 4, 160, 4, 161, 4, 162, 4, 163, + 4, 164, 4, 165, 4, 166, 4, 167, 4, 168, 4, 169, 4, 170, 4, 171, 4, 172, 4, 173, + 4, 174, 4, 175, 4, 176, 4, 177, 4, 178, 4, 179, 4, 180, 4, 181, 4, 182, 4, 183, + 4, 184, 4, 185, 4, 186, 4, 187, 4, 188, 4, 189, 4, 190, 4, 191, 4, 192, 4, 193, + 4, 194, 4, 195, 4, 196, 4, 197, 4, 198, 4, 199, 4, 200, 4, 201, 4, 202, 4, 203, + 4, 204, 4, 205, 4, 206, 4, 207, 4, 208, 4, 209, 4, 210, 4, 211, 4, 212, 4, 213, + 4, 214, 4, 215, 4, 216, 4, 217, 4, 218, 4, 219, 4, 220, 4, 221, 4, 222, 4, 223, + 4, 224, 4, 225, 4, 226, 4, 227, 4, 228, 4, 229, 4, 230, 4, 231, 4, 232, 4, 233, + 4, 234, 4, 235, 4, 236, 4, 237, 4, 238, 4, 239, 4, 240, 4, 241, 4, 242, 4, 243, + 4, 244, 4, 245, 4, 246, 4, 247, 4, 248, 4, 249, 4, 250, 4, 251, 4, 252, 4, 253, + 4, 254, 4, 255, 5, 0, 5, 1, 5, 2, 5, 3, 5, 4, 5, 5, 5, 6, 5, 7, + 5, 8, 5, 9, 5, 10, 5, 11, 4, 69, 117, 114, 111, 7, 117, 110, 105, 48, 48, 65, + 48, 7, 117, 110, 105, 48, 48, 65, 68, 7, 65, 109, 97, 99, 114, 111, 110, 7, 97, 109, + 97, 99, 114, 111, 110, 6, 65, 98, 114, 101, 118, 101, 6, 97, 98, 114, 101, 118, 101, 7, + 65, 111, 103, 111, 110, 101, 107, 7, 97, 111, 103, 111, 110, 101, 107, 11, 67, 99, 105, 114, + 99, 117, 109, 102, 108, 101, 120, 11, 99, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, 10, + 67, 100, 111, 116, 97, 99, 99, 101, 110, 116, 10, 99, 100, 111, 116, 97, 99, 99, 101, 110, + 116, 6, 68, 99, 97, 114, 111, 110, 6, 100, 99, 97, 114, 111, 110, 6, 68, 99, 114, 111, + 97, 116, 7, 69, 109, 97, 99, 114, 111, 110, 7, 101, 109, 97, 99, 114, 111, 110, 6, 69, + 98, 114, 101, 118, 101, 6, 101, 98, 114, 101, 118, 101, 10, 69, 100, 111, 116, 97, 99, 99, + 101, 110, 116, 10, 101, 100, 111, 116, 97, 99, 99, 101, 110, 116, 7, 69, 111, 103, 111, 110, + 101, 107, 7, 101, 111, 103, 111, 110, 101, 107, 6, 69, 99, 97, 114, 111, 110, 6, 101, 99, + 97, 114, 111, 110, 11, 71, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, 11, 103, 99, 105, + 114, 99, 117, 109, 102, 108, 101, 120, 10, 71, 100, 111, 116, 97, 99, 99, 101, 110, 116, 10, + 103, 100, 111, 116, 97, 99, 99, 101, 110, 116, 12, 71, 99, 111, 109, 109, 97, 97, 99, 99, + 101, 110, 116, 12, 103, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 11, 72, 99, 105, + 114, 99, 117, 109, 102, 108, 101, 120, 11, 104, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, + 4, 72, 98, 97, 114, 4, 104, 98, 97, 114, 6, 73, 116, 105, 108, 100, 101, 6, 105, 116, + 105, 108, 100, 101, 7, 73, 109, 97, 99, 114, 111, 110, 7, 105, 109, 97, 99, 114, 111, 110, + 6, 73, 98, 114, 101, 118, 101, 6, 105, 98, 114, 101, 118, 101, 7, 73, 111, 103, 111, 110, + 101, 107, 7, 105, 111, 103, 111, 110, 101, 107, 6, 105, 46, 108, 111, 99, 108, 2, 73, 74, + 2, 105, 106, 11, 74, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, 11, 106, 99, 105, 114, + 99, 117, 109, 102, 108, 101, 120, 12, 75, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, + 12, 107, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 17, 107, 103, 114, 101, 101, 110, + 108, 97, 110, 100, 105, 99, 46, 99, 97, 115, 101, 12, 107, 103, 114, 101, 101, 110, 108, 97, + 110, 100, 105, 99, 6, 76, 97, 99, 117, 116, 101, 6, 108, 97, 99, 117, 116, 101, 12, 76, + 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 12, 108, 99, 111, 109, 109, 97, 97, 99, + 99, 101, 110, 116, 6, 76, 99, 97, 114, 111, 110, 6, 108, 99, 97, 114, 111, 110, 4, 76, + 100, 111, 116, 4, 108, 100, 111, 116, 6, 78, 97, 99, 117, 116, 101, 6, 110, 97, 99, 117, + 116, 101, 12, 78, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 12, 110, 99, 111, 109, + 109, 97, 97, 99, 99, 101, 110, 116, 6, 78, 99, 97, 114, 111, 110, 6, 110, 99, 97, 114, + 111, 110, 16, 110, 97, 112, 111, 115, 116, 114, 111, 112, 104, 101, 46, 99, 97, 115, 101, 11, + 110, 97, 112, 111, 115, 116, 114, 111, 112, 104, 101, 3, 69, 110, 103, 3, 101, 110, 103, 7, + 79, 109, 97, 99, 114, 111, 110, 7, 111, 109, 97, 99, 114, 111, 110, 6, 79, 98, 114, 101, + 118, 101, 6, 111, 98, 114, 101, 118, 101, 13, 79, 104, 117, 110, 103, 97, 114, 117, 109, 108, + 97, 117, 116, 13, 111, 104, 117, 110, 103, 97, 114, 117, 109, 108, 97, 117, 116, 6, 82, 97, + 99, 117, 116, 101, 6, 114, 97, 99, 117, 116, 101, 12, 82, 99, 111, 109, 109, 97, 97, 99, + 99, 101, 110, 116, 12, 114, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 6, 82, 99, + 97, 114, 111, 110, 6, 114, 99, 97, 114, 111, 110, 6, 83, 97, 99, 117, 116, 101, 6, 115, + 97, 99, 117, 116, 101, 11, 83, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, 11, 115, 99, + 105, 114, 99, 117, 109, 102, 108, 101, 120, 7, 117, 110, 105, 48, 49, 54, 50, 7, 117, 110, + 105, 48, 49, 54, 51, 6, 84, 99, 97, 114, 111, 110, 6, 116, 99, 97, 114, 111, 110, 4, + 84, 98, 97, 114, 4, 116, 98, 97, 114, 6, 85, 116, 105, 108, 100, 101, 6, 117, 116, 105, + 108, 100, 101, 7, 85, 109, 97, 99, 114, 111, 110, 7, 117, 109, 97, 99, 114, 111, 110, 6, + 85, 98, 114, 101, 118, 101, 6, 117, 98, 114, 101, 118, 101, 5, 85, 114, 105, 110, 103, 5, + 117, 114, 105, 110, 103, 13, 85, 104, 117, 110, 103, 97, 114, 117, 109, 108, 97, 117, 116, 13, + 117, 104, 117, 110, 103, 97, 114, 117, 109, 108, 97, 117, 116, 7, 85, 111, 103, 111, 110, 101, + 107, 7, 117, 111, 103, 111, 110, 101, 107, 11, 87, 99, 105, 114, 99, 117, 109, 102, 108, 101, + 120, 11, 119, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, 11, 89, 99, 105, 114, 99, 117, + 109, 102, 108, 101, 120, 11, 121, 99, 105, 114, 99, 117, 109, 102, 108, 101, 120, 6, 90, 97, + 99, 117, 116, 101, 6, 122, 97, 99, 117, 116, 101, 10, 90, 100, 111, 116, 97, 99, 99, 101, + 110, 116, 10, 122, 100, 111, 116, 97, 99, 99, 101, 110, 116, 5, 108, 111, 110, 103, 115, 12, + 83, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 12, 115, 99, 111, 109, 109, 97, 97, + 99, 99, 101, 110, 116, 7, 117, 110, 105, 48, 50, 49, 65, 7, 117, 110, 105, 48, 50, 49, + 66, 8, 100, 111, 116, 108, 101, 115, 115, 106, 10, 97, 112, 111, 115, 116, 114, 111, 112, 104, + 101, 7, 117, 110, 105, 48, 50, 67, 57, 6, 87, 103, 114, 97, 118, 101, 6, 119, 103, 114, + 97, 118, 101, 6, 87, 97, 99, 117, 116, 101, 6, 119, 97, 99, 117, 116, 101, 9, 87, 100, + 105, 101, 114, 101, 115, 105, 115, 9, 119, 100, 105, 101, 114, 101, 115, 105, 115, 6, 89, 103, + 114, 97, 118, 101, 6, 121, 103, 114, 97, 118, 101, 12, 122, 101, 114, 111, 115, 117, 112, 101, + 114, 105, 111, 114, 12, 102, 111, 117, 114, 115, 117, 112, 101, 114, 105, 111, 114, 12, 102, 105, + 118, 101, 115, 117, 112, 101, 114, 105, 111, 114, 11, 115, 105, 120, 115, 117, 112, 101, 114, 105, + 111, 114, 13, 115, 101, 118, 101, 110, 115, 117, 112, 101, 114, 105, 111, 114, 13, 101, 105, 103, + 104, 116, 115, 117, 112, 101, 114, 105, 111, 114, 12, 110, 105, 110, 101, 115, 117, 112, 101, 114, + 105, 111, 114, 12, 122, 101, 114, 111, 105, 110, 102, 101, 114, 105, 111, 114, 11, 111, 110, 101, + 105, 110, 102, 101, 114, 105, 111, 114, 11, 116, 119, 111, 105, 110, 102, 101, 114, 105, 111, 114, + 13, 116, 104, 114, 101, 101, 105, 110, 102, 101, 114, 105, 111, 114, 12, 102, 111, 117, 114, 105, + 110, 102, 101, 114, 105, 111, 114, 12, 102, 105, 118, 101, 105, 110, 102, 101, 114, 105, 111, 114, + 11, 115, 105, 120, 105, 110, 102, 101, 114, 105, 111, 114, 13, 115, 101, 118, 101, 110, 105, 110, + 102, 101, 114, 105, 111, 114, 13, 101, 105, 103, 104, 116, 105, 110, 102, 101, 114, 105, 111, 114, + 12, 110, 105, 110, 101, 105, 110, 102, 101, 114, 105, 111, 114, 9, 97, 102, 105, 105, 54, 49, + 50, 56, 57, 9, 101, 115, 116, 105, 109, 97, 116, 101, 100, 8, 111, 110, 101, 116, 104, 105, + 114, 100, 9, 116, 119, 111, 116, 104, 105, 114, 100, 115, 9, 111, 110, 101, 101, 105, 103, 104, + 116, 104, 12, 116, 104, 114, 101, 101, 101, 105, 103, 104, 116, 104, 115, 11, 102, 105, 118, 101, + 101, 105, 103, 104, 116, 104, 115, 12, 115, 101, 118, 101, 110, 101, 105, 103, 104, 116, 104, 115, + 8, 111, 110, 101, 102, 105, 102, 116, 104, 9, 116, 119, 111, 102, 105, 102, 116, 104, 115, 11, + 116, 104, 114, 101, 101, 102, 105, 102, 116, 104, 115, 10, 102, 111, 117, 114, 102, 105, 102, 116, + 104, 115, 8, 111, 110, 101, 115, 105, 120, 116, 104, 10, 102, 105, 118, 101, 115, 105, 120, 116, + 104, 115, 10, 111, 110, 101, 115, 101, 118, 101, 110, 116, 104, 11, 116, 119, 111, 115, 101, 118, + 101, 110, 116, 104, 115, 13, 116, 104, 114, 101, 101, 115, 101, 118, 101, 110, 116, 104, 115, 12, + 102, 111, 117, 114, 115, 101, 118, 101, 110, 116, 104, 115, 12, 102, 105, 118, 101, 115, 101, 118, + 101, 110, 116, 104, 115, 11, 115, 105, 120, 115, 101, 118, 101, 110, 116, 104, 115, 8, 111, 110, + 101, 110, 105, 110, 116, 104, 9, 116, 119, 111, 110, 105, 110, 116, 104, 115, 10, 102, 111, 117, + 114, 110, 105, 110, 116, 104, 115, 10, 102, 105, 118, 101, 110, 105, 110, 116, 104, 115, 11, 115, + 101, 118, 101, 110, 110, 105, 110, 116, 104, 115, 11, 101, 105, 103, 104, 116, 110, 105, 110, 116, + 104, 115, 7, 117, 110, 105, 50, 49, 50, 54, 7, 117, 110, 105, 50, 50, 49, 53, 7, 117, + 110, 105, 50, 50, 49, 57, 3, 102, 95, 105, 3, 102, 95, 108, 9, 122, 101, 114, 111, 46, + 115, 117, 112, 115, 8, 111, 110, 101, 46, 115, 117, 112, 115, 8, 116, 119, 111, 46, 115, 117, + 112, 115, 10, 116, 104, 114, 101, 101, 46, 115, 117, 112, 115, 9, 102, 111, 117, 114, 46, 115, + 117, 112, 115, 9, 102, 105, 118, 101, 46, 115, 117, 112, 115, 8, 115, 105, 120, 46, 115, 117, + 112, 115, 10, 115, 101, 118, 101, 110, 46, 115, 117, 112, 115, 10, 101, 105, 103, 104, 116, 46, + 115, 117, 112, 115, 9, 110, 105, 110, 101, 46, 115, 117, 112, 115, 9, 122, 101, 114, 111, 46, + 115, 105, 110, 102, 8, 111, 110, 101, 46, 115, 105, 110, 102, 8, 116, 119, 111, 46, 115, 105, + 110, 102, 10, 116, 104, 114, 101, 101, 46, 115, 105, 110, 102, 9, 102, 111, 117, 114, 46, 115, + 105, 110, 102, 9, 102, 105, 118, 101, 46, 115, 105, 110, 102, 8, 115, 105, 120, 46, 115, 105, + 110, 102, 10, 115, 101, 118, 101, 110, 46, 115, 105, 110, 102, 10, 101, 105, 103, 104, 116, 46, + 115, 105, 110, 102, 9, 110, 105, 110, 101, 46, 115, 105, 110, 102, 9, 99, 97, 114, 111, 110, + 46, 97, 108, 116, 11, 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 14, 114, 101, 118, + 99, 111, 109, 109, 97, 97, 99, 99, 101, 110, 116, 15, 99, 97, 114, 111, 110, 46, 97, 108, + 116, 46, 115, 104, 111, 114, 116, 9, 80, 97, 114, 101, 110, 108, 101, 102, 116, 10, 80, 97, + 114, 101, 110, 114, 105, 103, 104, 116, 6, 72, 121, 112, 104, 101, 110, 5, 83, 108, 97, 115, + 104, 2, 65, 116, 11, 66, 114, 97, 99, 107, 101, 116, 108, 101, 102, 116, 9, 66, 97, 99, + 107, 115, 108, 97, 115, 104, 12, 66, 114, 97, 99, 107, 101, 116, 114, 105, 103, 104, 116, 9, + 66, 114, 97, 99, 101, 108, 101, 102, 116, 10, 66, 114, 97, 99, 101, 114, 105, 103, 104, 116, + 13, 71, 117, 105, 108, 115, 105, 110, 103, 108, 108, 101, 102, 116, 6, 66, 117, 108, 108, 101, + 116, 6, 69, 110, 100, 97, 115, 104, 6, 69, 109, 100, 97, 115, 104, 14, 71, 117, 105, 108, + 115, 105, 110, 103, 108, 114, 105, 103, 104, 116, 10, 69, 120, 99, 108, 97, 109, 100, 111, 119, + 110, 13, 71, 117, 105, 108, 108, 101, 109, 111, 116, 108, 101, 102, 116, 14, 71, 117, 105, 108, + 108, 101, 109, 111, 116, 114, 105, 103, 104, 116, 12, 81, 117, 101, 115, 116, 105, 111, 110, 100, + 111, 119, 110, 7, 117, 110, 105, 48, 49, 56, 48, 7, 117, 110, 105, 48, 49, 56, 49, 7, + 117, 110, 105, 48, 49, 56, 50, 7, 117, 110, 105, 48, 49, 56, 51, 7, 117, 110, 105, 48, + 49, 56, 52, 7, 117, 110, 105, 48, 49, 56, 53, 7, 117, 110, 105, 48, 49, 56, 54, 7, + 117, 110, 105, 48, 49, 56, 55, 7, 117, 110, 105, 48, 49, 56, 56, 7, 117, 110, 105, 48, + 49, 56, 57, 7, 117, 110, 105, 48, 49, 56, 65, 7, 117, 110, 105, 48, 49, 56, 66, 7, + 117, 110, 105, 48, 49, 56, 67, 7, 117, 110, 105, 48, 49, 56, 68, 7, 117, 110, 105, 48, + 49, 56, 69, 7, 117, 110, 105, 48, 49, 56, 70, 7, 117, 110, 105, 48, 49, 57, 48, 7, + 117, 110, 105, 48, 49, 57, 49, 7, 117, 110, 105, 48, 49, 57, 51, 7, 117, 110, 105, 48, + 49, 57, 52, 7, 117, 110, 105, 48, 49, 57, 53, 7, 117, 110, 105, 48, 49, 57, 54, 7, + 117, 110, 105, 48, 49, 57, 55, 7, 117, 110, 105, 48, 49, 57, 56, 7, 117, 110, 105, 48, + 49, 57, 57, 7, 117, 110, 105, 48, 49, 57, 65, 7, 117, 110, 105, 48, 49, 57, 66, 7, + 117, 110, 105, 48, 49, 57, 67, 7, 117, 110, 105, 48, 49, 57, 68, 7, 117, 110, 105, 48, + 49, 57, 69, 7, 117, 110, 105, 48, 49, 57, 70, 5, 79, 104, 111, 114, 110, 5, 111, 104, + 111, 114, 110, 7, 117, 110, 105, 48, 49, 65, 50, 7, 117, 110, 105, 48, 49, 65, 51, 7, + 117, 110, 105, 48, 49, 65, 52, 7, 117, 110, 105, 48, 49, 65, 53, 7, 117, 110, 105, 48, + 49, 65, 54, 7, 117, 110, 105, 48, 49, 65, 55, 7, 117, 110, 105, 48, 49, 65, 56, 7, + 117, 110, 105, 48, 49, 65, 57, 7, 117, 110, 105, 48, 49, 65, 65, 7, 117, 110, 105, 48, + 49, 65, 66, 7, 117, 110, 105, 48, 49, 65, 67, 7, 117, 110, 105, 48, 49, 65, 68, 7, + 117, 110, 105, 48, 49, 65, 69, 5, 85, 104, 111, 114, 110, 5, 117, 104, 111, 114, 110, 7, + 117, 110, 105, 48, 49, 66, 49, 7, 117, 110, 105, 48, 49, 66, 50, 7, 117, 110, 105, 48, + 49, 66, 51, 7, 117, 110, 105, 48, 49, 66, 52, 7, 117, 110, 105, 48, 49, 66, 53, 7, + 117, 110, 105, 48, 49, 66, 54, 7, 117, 110, 105, 48, 49, 66, 55, 7, 117, 110, 105, 48, + 49, 66, 56, 7, 117, 110, 105, 48, 49, 66, 57, 7, 117, 110, 105, 48, 49, 66, 65, 7, + 117, 110, 105, 48, 49, 66, 66, 7, 117, 110, 105, 48, 49, 66, 67, 7, 117, 110, 105, 48, + 49, 66, 68, 7, 117, 110, 105, 48, 49, 66, 69, 7, 117, 110, 105, 48, 49, 66, 70, 7, + 117, 110, 105, 48, 49, 67, 48, 7, 117, 110, 105, 48, 49, 67, 49, 7, 117, 110, 105, 48, + 49, 67, 50, 7, 117, 110, 105, 48, 49, 67, 51, 7, 117, 110, 105, 48, 49, 67, 52, 7, + 117, 110, 105, 48, 49, 67, 53, 7, 117, 110, 105, 48, 49, 67, 54, 7, 117, 110, 105, 48, + 49, 67, 55, 7, 117, 110, 105, 48, 49, 67, 56, 7, 117, 110, 105, 48, 49, 67, 57, 7, + 117, 110, 105, 48, 49, 67, 65, 7, 117, 110, 105, 48, 49, 67, 66, 7, 117, 110, 105, 48, + 49, 67, 67, 7, 117, 110, 105, 48, 49, 67, 68, 7, 117, 110, 105, 48, 49, 67, 69, 7, + 117, 110, 105, 48, 49, 67, 70, 7, 117, 110, 105, 48, 49, 68, 48, 7, 117, 110, 105, 48, + 49, 68, 49, 7, 117, 110, 105, 48, 49, 68, 50, 7, 117, 110, 105, 48, 49, 68, 51, 7, + 117, 110, 105, 48, 49, 68, 52, 7, 117, 110, 105, 48, 49, 68, 53, 7, 117, 110, 105, 48, + 49, 68, 54, 7, 117, 110, 105, 48, 49, 68, 55, 7, 117, 110, 105, 48, 49, 68, 56, 7, + 117, 110, 105, 48, 49, 68, 57, 7, 117, 110, 105, 48, 49, 68, 65, 7, 117, 110, 105, 48, + 49, 68, 66, 7, 117, 110, 105, 48, 49, 68, 67, 7, 117, 110, 105, 48, 49, 68, 68, 7, + 117, 110, 105, 48, 49, 68, 69, 7, 117, 110, 105, 48, 49, 68, 70, 7, 117, 110, 105, 48, + 49, 69, 48, 7, 117, 110, 105, 48, 49, 69, 49, 7, 117, 110, 105, 48, 49, 69, 50, 7, + 117, 110, 105, 48, 49, 69, 51, 7, 117, 110, 105, 48, 49, 69, 52, 7, 117, 110, 105, 48, + 49, 69, 53, 6, 71, 99, 97, 114, 111, 110, 6, 103, 99, 97, 114, 111, 110, 7, 117, 110, + 105, 48, 49, 69, 56, 7, 117, 110, 105, 48, 49, 69, 57, 7, 117, 110, 105, 48, 49, 69, + 65, 7, 117, 110, 105, 48, 49, 69, 66, 7, 117, 110, 105, 48, 49, 69, 67, 7, 117, 110, + 105, 48, 49, 69, 68, 7, 117, 110, 105, 48, 49, 69, 69, 7, 117, 110, 105, 48, 49, 69, + 70, 7, 117, 110, 105, 48, 49, 70, 48, 7, 117, 110, 105, 48, 49, 70, 49, 7, 117, 110, + 105, 48, 49, 70, 50, 7, 117, 110, 105, 48, 49, 70, 51, 7, 117, 110, 105, 48, 49, 70, + 52, 7, 117, 110, 105, 48, 49, 70, 53, 7, 117, 110, 105, 48, 49, 70, 54, 7, 117, 110, + 105, 48, 49, 70, 55, 7, 117, 110, 105, 48, 49, 70, 56, 7, 117, 110, 105, 48, 49, 70, + 57, 10, 65, 114, 105, 110, 103, 97, 99, 117, 116, 101, 10, 97, 114, 105, 110, 103, 97, 99, + 117, 116, 101, 7, 65, 69, 97, 99, 117, 116, 101, 7, 97, 101, 97, 99, 117, 116, 101, 11, + 79, 115, 108, 97, 115, 104, 97, 99, 117, 116, 101, 11, 111, 115, 108, 97, 115, 104, 97, 99, + 117, 116, 101, 7, 117, 110, 105, 48, 50, 48, 48, 7, 117, 110, 105, 48, 50, 48, 49, 7, + 117, 110, 105, 48, 50, 48, 50, 7, 117, 110, 105, 48, 50, 48, 51, 7, 117, 110, 105, 48, + 50, 48, 52, 7, 117, 110, 105, 48, 50, 48, 53, 7, 117, 110, 105, 48, 50, 48, 54, 7, + 117, 110, 105, 48, 50, 48, 55, 7, 117, 110, 105, 48, 50, 48, 56, 7, 117, 110, 105, 48, + 50, 48, 57, 7, 117, 110, 105, 48, 50, 48, 65, 7, 117, 110, 105, 48, 50, 48, 66, 7, + 117, 110, 105, 48, 50, 48, 67, 7, 117, 110, 105, 48, 50, 48, 68, 7, 117, 110, 105, 48, + 50, 48, 69, 7, 117, 110, 105, 48, 50, 48, 70, 7, 117, 110, 105, 48, 50, 49, 48, 7, + 117, 110, 105, 48, 50, 49, 49, 7, 117, 110, 105, 48, 50, 49, 50, 7, 117, 110, 105, 48, + 50, 49, 51, 7, 117, 110, 105, 48, 50, 49, 52, 7, 117, 110, 105, 48, 50, 49, 53, 7, + 117, 110, 105, 48, 50, 49, 54, 7, 117, 110, 105, 48, 50, 49, 55, 7, 117, 110, 105, 48, + 50, 49, 67, 7, 117, 110, 105, 48, 50, 49, 68, 7, 117, 110, 105, 48, 50, 49, 69, 7, + 117, 110, 105, 48, 50, 49, 70, 7, 117, 110, 105, 48, 50, 50, 48, 7, 117, 110, 105, 48, + 50, 50, 49, 7, 117, 110, 105, 48, 50, 50, 50, 7, 117, 110, 105, 48, 50, 50, 51, 7, + 117, 110, 105, 48, 50, 50, 52, 7, 117, 110, 105, 48, 50, 50, 53, 7, 117, 110, 105, 48, + 50, 50, 54, 7, 117, 110, 105, 48, 50, 50, 55, 7, 117, 110, 105, 48, 50, 50, 56, 7, + 117, 110, 105, 48, 50, 50, 57, 7, 117, 110, 105, 48, 50, 50, 65, 7, 117, 110, 105, 48, + 50, 50, 66, 7, 117, 110, 105, 48, 50, 50, 67, 7, 117, 110, 105, 48, 50, 50, 68, 7, + 117, 110, 105, 48, 50, 50, 69, 7, 117, 110, 105, 48, 50, 50, 70, 7, 117, 110, 105, 48, + 50, 51, 48, 7, 117, 110, 105, 48, 50, 51, 49, 7, 117, 110, 105, 48, 50, 51, 50, 7, + 117, 110, 105, 48, 50, 51, 51, 7, 117, 110, 105, 48, 50, 51, 52, 7, 117, 110, 105, 48, + 50, 51, 53, 7, 117, 110, 105, 48, 50, 51, 54, 7, 117, 110, 105, 48, 50, 51, 56, 7, + 117, 110, 105, 48, 50, 51, 57, 7, 117, 110, 105, 48, 50, 51, 65, 7, 117, 110, 105, 48, + 50, 51, 66, 7, 117, 110, 105, 48, 50, 51, 67, 7, 117, 110, 105, 48, 50, 51, 68, 7, + 117, 110, 105, 48, 50, 51, 69, 7, 117, 110, 105, 48, 50, 51, 70, 7, 117, 110, 105, 48, + 50, 52, 48, 7, 117, 110, 105, 48, 50, 52, 49, 7, 117, 110, 105, 48, 50, 52, 50, 7, + 117, 110, 105, 48, 50, 52, 51, 7, 117, 110, 105, 48, 50, 52, 52, 7, 117, 110, 105, 48, + 50, 52, 53, 7, 117, 110, 105, 48, 50, 52, 54, 7, 117, 110, 105, 48, 50, 52, 55, 7, + 117, 110, 105, 48, 50, 52, 56, 7, 117, 110, 105, 48, 50, 52, 57, 7, 117, 110, 105, 48, + 50, 52, 65, 7, 117, 110, 105, 48, 50, 52, 66, 7, 117, 110, 105, 48, 50, 52, 67, 7, + 117, 110, 105, 48, 50, 52, 68, 7, 117, 110, 105, 48, 50, 52, 69, 7, 117, 110, 105, 48, + 50, 52, 70, 7, 117, 110, 105, 48, 50, 57, 50, 14, 98, 114, 101, 118, 101, 95, 105, 110, + 118, 101, 114, 116, 101, 100, 12, 100, 111, 117, 98, 108, 101, 95, 103, 114, 97, 118, 101, 10, + 114, 105, 110, 103, 95, 97, 99, 117, 116, 101, 15, 100, 105, 101, 114, 101, 115, 105, 115, 95, + 109, 97, 99, 114, 111, 110, 10, 100, 111, 116, 95, 109, 97, 99, 114, 111, 110, 14, 100, 105, + 101, 114, 101, 115, 105, 115, 95, 103, 114, 97, 118, 101, 14, 100, 105, 101, 114, 101, 115, 105, + 115, 95, 97, 99, 117, 116, 101, 14, 100, 105, 101, 114, 101, 115, 105, 115, 95, 98, 114, 101, + 118, 101, 12, 116, 105, 108, 100, 101, 95, 109, 97, 99, 114, 111, 110, 18, 100, 105, 101, 114, + 101, 115, 105, 115, 95, 103, 114, 97, 118, 101, 46, 99, 97, 112, 18, 100, 105, 101, 114, 101, + 115, 105, 115, 95, 97, 99, 117, 116, 101, 46, 99, 97, 112, 18, 100, 105, 101, 114, 101, 115, + 105, 115, 95, 98, 114, 101, 118, 101, 46, 99, 97, 112, 7, 117, 110, 105, 48, 52, 48, 48, + 9, 97, 102, 105, 105, 49, 48, 48, 50, 51, 9, 97, 102, 105, 105, 49, 48, 48, 53, 49, + 9, 97, 102, 105, 105, 49, 48, 48, 53, 50, 9, 97, 102, 105, 105, 49, 48, 48, 53, 51, + 9, 97, 102, 105, 105, 49, 48, 48, 53, 52, 9, 97, 102, 105, 105, 49, 48, 48, 53, 53, + 9, 97, 102, 105, 105, 49, 48, 48, 53, 54, 9, 97, 102, 105, 105, 49, 48, 48, 53, 55, + 9, 97, 102, 105, 105, 49, 48, 48, 53, 56, 9, 97, 102, 105, 105, 49, 48, 48, 53, 57, + 9, 97, 102, 105, 105, 49, 48, 48, 54, 48, 9, 97, 102, 105, 105, 49, 48, 48, 54, 49, + 7, 117, 110, 105, 48, 52, 48, 68, 9, 97, 102, 105, 105, 49, 48, 48, 54, 50, 9, 97, + 102, 105, 105, 49, 48, 49, 52, 53, 9, 97, 102, 105, 105, 49, 48, 48, 49, 55, 9, 97, + 102, 105, 105, 49, 48, 48, 49, 56, 9, 97, 102, 105, 105, 49, 48, 48, 49, 57, 9, 97, + 102, 105, 105, 49, 48, 48, 50, 48, 9, 97, 102, 105, 105, 49, 48, 48, 50, 49, 9, 97, + 102, 105, 105, 49, 48, 48, 50, 50, 9, 97, 102, 105, 105, 49, 48, 48, 50, 52, 9, 97, + 102, 105, 105, 49, 48, 48, 50, 53, 9, 97, 102, 105, 105, 49, 48, 48, 50, 54, 9, 97, + 102, 105, 105, 49, 48, 48, 50, 55, 9, 97, 102, 105, 105, 49, 48, 48, 50, 56, 9, 97, + 102, 105, 105, 49, 48, 48, 50, 57, 9, 97, 102, 105, 105, 49, 48, 48, 51, 48, 9, 97, + 102, 105, 105, 49, 48, 48, 51, 49, 9, 97, 102, 105, 105, 49, 48, 48, 51, 50, 9, 97, + 102, 105, 105, 49, 48, 48, 51, 51, 9, 97, 102, 105, 105, 49, 48, 48, 51, 52, 9, 97, + 102, 105, 105, 49, 48, 48, 51, 53, 9, 97, 102, 105, 105, 49, 48, 48, 51, 54, 9, 97, + 102, 105, 105, 49, 48, 48, 51, 55, 9, 97, 102, 105, 105, 49, 48, 48, 51, 56, 9, 97, + 102, 105, 105, 49, 48, 48, 51, 57, 9, 97, 102, 105, 105, 49, 48, 48, 52, 48, 9, 97, + 102, 105, 105, 49, 48, 48, 52, 49, 9, 97, 102, 105, 105, 49, 48, 48, 52, 50, 9, 97, + 102, 105, 105, 49, 48, 48, 52, 51, 9, 97, 102, 105, 105, 49, 48, 48, 52, 52, 9, 97, + 102, 105, 105, 49, 48, 48, 52, 53, 9, 97, 102, 105, 105, 49, 48, 48, 52, 54, 9, 97, + 102, 105, 105, 49, 48, 48, 52, 55, 9, 97, 102, 105, 105, 49, 48, 48, 52, 56, 9, 97, + 102, 105, 105, 49, 48, 48, 52, 57, 9, 97, 102, 105, 105, 49, 48, 48, 54, 53, 9, 97, + 102, 105, 105, 49, 48, 48, 54, 54, 9, 97, 102, 105, 105, 49, 48, 48, 54, 55, 9, 97, + 102, 105, 105, 49, 48, 48, 54, 56, 9, 97, 102, 105, 105, 49, 48, 48, 54, 57, 9, 97, + 102, 105, 105, 49, 48, 48, 55, 48, 9, 97, 102, 105, 105, 49, 48, 48, 55, 50, 9, 97, + 102, 105, 105, 49, 48, 48, 55, 51, 9, 97, 102, 105, 105, 49, 48, 48, 55, 52, 9, 97, + 102, 105, 105, 49, 48, 48, 55, 53, 9, 97, 102, 105, 105, 49, 48, 48, 55, 54, 9, 97, + 102, 105, 105, 49, 48, 48, 55, 55, 9, 97, 102, 105, 105, 49, 48, 48, 55, 56, 9, 97, + 102, 105, 105, 49, 48, 48, 55, 57, 9, 97, 102, 105, 105, 49, 48, 48, 56, 48, 9, 97, + 102, 105, 105, 49, 48, 48, 56, 49, 9, 97, 102, 105, 105, 49, 48, 48, 56, 50, 9, 97, + 102, 105, 105, 49, 48, 48, 56, 51, 9, 97, 102, 105, 105, 49, 48, 48, 56, 52, 9, 97, + 102, 105, 105, 49, 48, 48, 56, 53, 9, 97, 102, 105, 105, 49, 48, 48, 56, 54, 9, 97, + 102, 105, 105, 49, 48, 48, 56, 55, 9, 97, 102, 105, 105, 49, 48, 48, 56, 56, 9, 97, + 102, 105, 105, 49, 48, 48, 56, 57, 9, 97, 102, 105, 105, 49, 48, 48, 57, 48, 9, 97, + 102, 105, 105, 49, 48, 48, 57, 49, 9, 97, 102, 105, 105, 49, 48, 48, 57, 50, 9, 97, + 102, 105, 105, 49, 48, 48, 57, 51, 9, 97, 102, 105, 105, 49, 48, 48, 57, 52, 9, 97, + 102, 105, 105, 49, 48, 48, 57, 53, 9, 97, 102, 105, 105, 49, 48, 48, 57, 54, 9, 97, + 102, 105, 105, 49, 48, 48, 57, 55, 7, 117, 110, 105, 48, 52, 53, 48, 9, 97, 102, 105, + 105, 49, 48, 48, 55, 49, 9, 97, 102, 105, 105, 49, 48, 48, 57, 57, 9, 97, 102, 105, + 105, 49, 48, 49, 48, 48, 9, 97, 102, 105, 105, 49, 48, 49, 48, 49, 9, 97, 102, 105, + 105, 49, 48, 49, 48, 50, 9, 97, 102, 105, 105, 49, 48, 49, 48, 51, 9, 97, 102, 105, + 105, 49, 48, 49, 48, 52, 9, 97, 102, 105, 105, 49, 48, 49, 48, 53, 9, 97, 102, 105, + 105, 49, 48, 49, 48, 54, 9, 97, 102, 105, 105, 49, 48, 49, 48, 55, 9, 97, 102, 105, + 105, 49, 48, 49, 48, 56, 9, 97, 102, 105, 105, 49, 48, 49, 48, 57, 7, 117, 110, 105, + 48, 52, 53, 68, 9, 97, 102, 105, 105, 49, 48, 49, 49, 48, 9, 97, 102, 105, 105, 49, + 48, 49, 57, 51, 14, 97, 102, 105, 105, 49, 48, 48, 54, 54, 46, 108, 111, 99, 108, 7, + 117, 110, 105, 48, 52, 54, 50, 7, 117, 110, 105, 48, 52, 54, 51, 7, 117, 110, 105, 48, + 52, 55, 50, 7, 117, 110, 105, 48, 52, 55, 51, 7, 117, 110, 105, 48, 52, 55, 52, 7, + 117, 110, 105, 48, 52, 55, 53, 7, 117, 110, 105, 48, 52, 56, 65, 7, 117, 110, 105, 48, + 52, 56, 66, 7, 117, 110, 105, 48, 52, 56, 67, 7, 117, 110, 105, 48, 52, 56, 68, 7, + 117, 110, 105, 48, 52, 56, 69, 7, 117, 110, 105, 48, 52, 56, 70, 9, 97, 102, 105, 105, + 49, 48, 48, 53, 48, 9, 97, 102, 105, 105, 49, 48, 48, 57, 56, 7, 117, 110, 105, 48, + 52, 57, 50, 7, 117, 110, 105, 48, 52, 57, 51, 7, 117, 110, 105, 48, 52, 57, 52, 7, + 117, 110, 105, 48, 52, 57, 53, 7, 117, 110, 105, 48, 52, 57, 54, 7, 117, 110, 105, 48, + 52, 57, 55, 7, 117, 110, 105, 48, 52, 57, 56, 7, 117, 110, 105, 48, 52, 57, 57, 7, + 117, 110, 105, 48, 52, 57, 65, 7, 117, 110, 105, 48, 52, 57, 66, 7, 117, 110, 105, 48, + 52, 57, 67, 7, 117, 110, 105, 48, 52, 57, 68, 7, 117, 110, 105, 48, 52, 57, 69, 7, + 117, 110, 105, 48, 52, 57, 70, 7, 117, 110, 105, 48, 52, 65, 48, 7, 117, 110, 105, 48, + 52, 65, 49, 7, 117, 110, 105, 48, 52, 65, 50, 7, 117, 110, 105, 48, 52, 65, 51, 7, + 117, 110, 105, 48, 52, 65, 52, 7, 117, 110, 105, 48, 52, 65, 53, 7, 117, 110, 105, 48, + 52, 65, 54, 7, 117, 110, 105, 48, 52, 65, 55, 7, 117, 110, 105, 48, 52, 65, 56, 7, + 117, 110, 105, 48, 52, 65, 57, 7, 117, 110, 105, 48, 52, 65, 65, 7, 117, 110, 105, 48, + 52, 65, 66, 7, 117, 110, 105, 48, 52, 65, 67, 7, 117, 110, 105, 48, 52, 65, 68, 7, + 117, 110, 105, 48, 52, 65, 69, 7, 117, 110, 105, 48, 52, 65, 70, 7, 117, 110, 105, 48, + 52, 66, 48, 7, 117, 110, 105, 48, 52, 66, 49, 7, 117, 110, 105, 48, 52, 66, 50, 7, + 117, 110, 105, 48, 52, 66, 51, 7, 117, 110, 105, 48, 52, 66, 52, 7, 117, 110, 105, 48, + 52, 66, 53, 7, 117, 110, 105, 48, 52, 66, 54, 7, 117, 110, 105, 48, 52, 66, 55, 7, + 117, 110, 105, 48, 52, 66, 56, 7, 117, 110, 105, 48, 52, 66, 57, 7, 117, 110, 105, 48, + 52, 66, 65, 7, 117, 110, 105, 48, 52, 66, 66, 7, 117, 110, 105, 48, 52, 66, 67, 7, + 117, 110, 105, 48, 52, 66, 68, 7, 117, 110, 105, 48, 52, 66, 69, 7, 117, 110, 105, 48, + 52, 66, 70, 7, 117, 110, 105, 48, 52, 67, 48, 7, 117, 110, 105, 48, 52, 67, 49, 7, + 117, 110, 105, 48, 52, 67, 50, 7, 117, 110, 105, 48, 52, 67, 51, 7, 117, 110, 105, 48, + 52, 67, 52, 7, 117, 110, 105, 48, 52, 67, 53, 7, 117, 110, 105, 48, 52, 67, 54, 7, + 117, 110, 105, 48, 52, 67, 55, 7, 117, 110, 105, 48, 52, 67, 56, 7, 117, 110, 105, 48, + 52, 67, 57, 7, 117, 110, 105, 48, 52, 67, 65, 7, 117, 110, 105, 48, 52, 67, 66, 7, + 117, 110, 105, 48, 52, 67, 67, 7, 117, 110, 105, 48, 52, 67, 68, 7, 117, 110, 105, 48, + 52, 67, 69, 7, 117, 110, 105, 48, 52, 67, 70, 7, 117, 110, 105, 48, 52, 68, 48, 7, + 117, 110, 105, 48, 52, 68, 49, 7, 117, 110, 105, 48, 52, 68, 50, 7, 117, 110, 105, 48, + 52, 68, 51, 7, 117, 110, 105, 48, 52, 68, 52, 7, 117, 110, 105, 48, 52, 68, 53, 7, + 117, 110, 105, 48, 52, 68, 54, 7, 117, 110, 105, 48, 52, 68, 55, 7, 117, 110, 105, 48, + 52, 68, 56, 7, 117, 110, 105, 48, 52, 68, 57, 7, 117, 110, 105, 48, 52, 68, 65, 7, + 117, 110, 105, 48, 52, 68, 66, 7, 117, 110, 105, 48, 52, 68, 67, 7, 117, 110, 105, 48, + 52, 68, 68, 7, 117, 110, 105, 48, 52, 68, 69, 7, 117, 110, 105, 48, 52, 68, 70, 7, + 117, 110, 105, 48, 52, 69, 48, 7, 117, 110, 105, 48, 52, 69, 49, 7, 117, 110, 105, 48, + 52, 69, 50, 7, 117, 110, 105, 48, 52, 69, 51, 7, 117, 110, 105, 48, 52, 69, 52, 7, + 117, 110, 105, 48, 52, 69, 53, 7, 117, 110, 105, 48, 52, 69, 54, 7, 117, 110, 105, 48, + 52, 69, 55, 7, 117, 110, 105, 48, 52, 69, 56, 7, 117, 110, 105, 48, 52, 69, 57, 7, + 117, 110, 105, 48, 52, 69, 65, 7, 117, 110, 105, 48, 52, 69, 66, 7, 117, 110, 105, 48, + 52, 69, 67, 7, 117, 110, 105, 48, 52, 69, 68, 7, 117, 110, 105, 48, 52, 69, 69, 7, + 117, 110, 105, 48, 52, 69, 70, 7, 117, 110, 105, 48, 52, 70, 48, 7, 117, 110, 105, 48, + 52, 70, 49, 7, 117, 110, 105, 48, 52, 70, 50, 7, 117, 110, 105, 48, 52, 70, 51, 7, + 117, 110, 105, 48, 52, 70, 52, 7, 117, 110, 105, 48, 52, 70, 53, 7, 117, 110, 105, 48, + 52, 70, 54, 7, 117, 110, 105, 48, 52, 70, 55, 7, 117, 110, 105, 48, 52, 70, 56, 7, + 117, 110, 105, 48, 52, 70, 57, 9, 97, 102, 105, 105, 54, 49, 51, 53, 50, 9, 97, 102, + 105, 105, 48, 48, 50, 48, 56, 7, 117, 110, 105, 50, 48, 66, 52, 7, 117, 110, 105, 50, + 48, 65, 69, 6, 107, 114, 97, 116, 107, 97, 5, 65, 108, 112, 104, 97, 4, 66, 101, 116, + 97, 5, 71, 97, 109, 109, 97, 7, 117, 110, 105, 48, 51, 57, 52, 7, 69, 112, 115, 105, + 108, 111, 110, 4, 90, 101, 116, 97, 3, 69, 116, 97, 5, 84, 104, 101, 116, 97, 4, 73, + 111, 116, 97, 5, 75, 97, 112, 112, 97, 6, 76, 97, 109, 98, 100, 97, 2, 77, 117, 2, + 78, 117, 2, 88, 105, 7, 79, 109, 105, 99, 114, 111, 110, 2, 80, 105, 3, 82, 104, 111, + 5, 83, 105, 103, 109, 97, 3, 84, 97, 117, 7, 85, 112, 115, 105, 108, 111, 110, 3, 80, + 104, 105, 3, 67, 104, 105, 3, 80, 115, 105, 5, 97, 108, 112, 104, 97, 4, 98, 101, 116, + 97, 5, 103, 97, 109, 109, 97, 5, 100, 101, 108, 116, 97, 7, 101, 112, 115, 105, 108, 111, + 110, 4, 122, 101, 116, 97, 3, 101, 116, 97, 5, 116, 104, 101, 116, 97, 4, 105, 111, 116, + 97, 5, 107, 97, 112, 112, 97, 6, 108, 97, 109, 98, 100, 97, 7, 117, 110, 105, 48, 51, + 66, 67, 2, 110, 117, 2, 120, 105, 7, 111, 109, 105, 99, 114, 111, 110, 3, 114, 104, 111, + 6, 115, 105, 103, 109, 97, 49, 5, 115, 105, 103, 109, 97, 3, 116, 97, 117, 7, 117, 112, + 115, 105, 108, 111, 110, 3, 112, 104, 105, 3, 99, 104, 105, 3, 112, 115, 105, 5, 111, 109, + 101, 103, 97, 10, 65, 108, 112, 104, 97, 116, 111, 110, 111, 115, 12, 69, 112, 115, 105, 108, + 111, 110, 116, 111, 110, 111, 115, 8, 69, 116, 97, 116, 111, 110, 111, 115, 9, 73, 111, 116, + 97, 116, 111, 110, 111, 115, 12, 73, 111, 116, 97, 100, 105, 101, 114, 101, 115, 105, 115, 12, + 79, 109, 105, 99, 114, 111, 110, 116, 111, 110, 111, 115, 12, 85, 112, 115, 105, 108, 111, 110, + 116, 111, 110, 111, 115, 15, 85, 112, 115, 105, 108, 111, 110, 100, 105, 101, 114, 101, 115, 105, + 115, 10, 79, 109, 101, 103, 97, 116, 111, 110, 111, 115, 10, 97, 108, 112, 104, 97, 116, 111, + 110, 111, 115, 12, 101, 112, 115, 105, 108, 111, 110, 116, 111, 110, 111, 115, 8, 101, 116, 97, + 116, 111, 110, 111, 115, 9, 105, 111, 116, 97, 116, 111, 110, 111, 115, 12, 105, 111, 116, 97, + 100, 105, 101, 114, 101, 115, 105, 115, 17, 105, 111, 116, 97, 100, 105, 101, 114, 101, 115, 105, + 115, 116, 111, 110, 111, 115, 12, 111, 109, 105, 99, 114, 111, 110, 116, 111, 110, 111, 115, 15, + 117, 112, 115, 105, 108, 111, 110, 100, 105, 101, 114, 101, 115, 105, 115, 12, 117, 112, 115, 105, + 108, 111, 110, 116, 111, 110, 111, 115, 20, 117, 112, 115, 105, 108, 111, 110, 100, 105, 101, 114, + 101, 115, 105, 115, 116, 111, 110, 111, 115, 10, 111, 109, 101, 103, 97, 116, 111, 110, 111, 115, + 5, 116, 111, 110, 111, 115, 9, 116, 111, 110, 111, 115, 46, 99, 97, 112, 13, 100, 105, 101, + 114, 101, 115, 105, 115, 116, 111, 110, 111, 115, 7, 117, 110, 105, 49, 70, 48, 48, 7, 117, + 110, 105, 49, 70, 48, 49, 7, 117, 110, 105, 49, 70, 48, 50, 7, 117, 110, 105, 49, 70, + 48, 51, 7, 117, 110, 105, 49, 70, 48, 52, 7, 117, 110, 105, 49, 70, 48, 53, 7, 117, + 110, 105, 49, 70, 48, 54, 7, 117, 110, 105, 49, 70, 48, 55, 7, 117, 110, 105, 49, 70, + 48, 56, 7, 117, 110, 105, 49, 70, 48, 57, 7, 117, 110, 105, 49, 70, 48, 65, 7, 117, + 110, 105, 49, 70, 48, 66, 7, 117, 110, 105, 49, 70, 48, 67, 7, 117, 110, 105, 49, 70, + 48, 68, 7, 117, 110, 105, 49, 70, 48, 69, 7, 117, 110, 105, 49, 70, 48, 70, 7, 117, + 110, 105, 49, 70, 49, 48, 7, 117, 110, 105, 49, 70, 49, 49, 7, 117, 110, 105, 49, 70, + 49, 50, 7, 117, 110, 105, 49, 70, 49, 51, 7, 117, 110, 105, 49, 70, 49, 52, 7, 117, + 110, 105, 49, 70, 49, 53, 7, 117, 110, 105, 49, 70, 49, 56, 7, 117, 110, 105, 49, 70, + 49, 57, 7, 117, 110, 105, 49, 70, 49, 65, 7, 117, 110, 105, 49, 70, 49, 66, 7, 117, + 110, 105, 49, 70, 49, 67, 7, 117, 110, 105, 49, 70, 49, 68, 7, 117, 110, 105, 49, 70, + 50, 48, 7, 117, 110, 105, 49, 70, 50, 49, 7, 117, 110, 105, 49, 70, 50, 50, 7, 117, + 110, 105, 49, 70, 50, 51, 7, 117, 110, 105, 49, 70, 50, 52, 7, 117, 110, 105, 49, 70, + 50, 53, 7, 117, 110, 105, 49, 70, 50, 54, 7, 117, 110, 105, 49, 70, 50, 55, 7, 117, + 110, 105, 49, 70, 50, 56, 7, 117, 110, 105, 49, 70, 50, 57, 7, 117, 110, 105, 49, 70, + 50, 65, 7, 117, 110, 105, 49, 70, 50, 66, 7, 117, 110, 105, 49, 70, 50, 67, 7, 117, + 110, 105, 49, 70, 50, 68, 7, 117, 110, 105, 49, 70, 50, 69, 7, 117, 110, 105, 49, 70, + 50, 70, 7, 117, 110, 105, 49, 70, 51, 48, 7, 117, 110, 105, 49, 70, 51, 49, 7, 117, + 110, 105, 49, 70, 51, 50, 7, 117, 110, 105, 49, 70, 51, 51, 7, 117, 110, 105, 49, 70, + 51, 52, 7, 117, 110, 105, 49, 70, 51, 53, 7, 117, 110, 105, 49, 70, 51, 54, 7, 117, + 110, 105, 49, 70, 51, 55, 7, 117, 110, 105, 49, 70, 51, 56, 7, 117, 110, 105, 49, 70, + 51, 57, 7, 117, 110, 105, 49, 70, 51, 65, 7, 117, 110, 105, 49, 70, 51, 66, 7, 117, + 110, 105, 49, 70, 51, 67, 7, 117, 110, 105, 49, 70, 51, 68, 7, 117, 110, 105, 49, 70, + 51, 69, 7, 117, 110, 105, 49, 70, 51, 70, 7, 117, 110, 105, 49, 70, 52, 48, 7, 117, + 110, 105, 49, 70, 52, 49, 7, 117, 110, 105, 49, 70, 52, 50, 7, 117, 110, 105, 49, 70, + 52, 51, 7, 117, 110, 105, 49, 70, 52, 52, 7, 117, 110, 105, 49, 70, 52, 53, 7, 117, + 110, 105, 49, 70, 52, 56, 7, 117, 110, 105, 49, 70, 52, 57, 7, 117, 110, 105, 49, 70, + 52, 65, 7, 117, 110, 105, 49, 70, 52, 66, 7, 117, 110, 105, 49, 70, 52, 67, 7, 117, + 110, 105, 49, 70, 52, 68, 7, 117, 110, 105, 49, 70, 53, 48, 7, 117, 110, 105, 49, 70, + 53, 49, 7, 117, 110, 105, 49, 70, 53, 50, 7, 117, 110, 105, 49, 70, 53, 51, 7, 117, + 110, 105, 49, 70, 53, 52, 7, 117, 110, 105, 49, 70, 53, 53, 7, 117, 110, 105, 49, 70, + 53, 54, 7, 117, 110, 105, 49, 70, 53, 55, 7, 117, 110, 105, 49, 70, 53, 57, 7, 117, + 110, 105, 49, 70, 53, 66, 7, 117, 110, 105, 49, 70, 53, 68, 7, 117, 110, 105, 49, 70, + 53, 70, 7, 117, 110, 105, 49, 70, 54, 48, 7, 117, 110, 105, 49, 70, 54, 49, 7, 117, + 110, 105, 49, 70, 54, 50, 7, 117, 110, 105, 49, 70, 54, 51, 7, 117, 110, 105, 49, 70, + 54, 52, 7, 117, 110, 105, 49, 70, 54, 53, 7, 117, 110, 105, 49, 70, 54, 54, 7, 117, + 110, 105, 49, 70, 54, 55, 7, 117, 110, 105, 49, 70, 54, 56, 7, 117, 110, 105, 49, 70, + 54, 57, 7, 117, 110, 105, 49, 70, 54, 65, 7, 117, 110, 105, 49, 70, 54, 66, 7, 117, + 110, 105, 49, 70, 54, 67, 7, 117, 110, 105, 49, 70, 54, 68, 7, 117, 110, 105, 49, 70, + 54, 69, 7, 117, 110, 105, 49, 70, 54, 70, 7, 117, 110, 105, 49, 70, 55, 48, 7, 117, + 110, 105, 49, 70, 55, 49, 7, 117, 110, 105, 49, 70, 55, 50, 7, 117, 110, 105, 49, 70, + 55, 51, 7, 117, 110, 105, 49, 70, 55, 52, 7, 117, 110, 105, 49, 70, 55, 53, 7, 117, + 110, 105, 49, 70, 55, 54, 7, 117, 110, 105, 49, 70, 55, 55, 7, 117, 110, 105, 49, 70, + 55, 56, 7, 117, 110, 105, 49, 70, 55, 57, 7, 117, 110, 105, 49, 70, 55, 65, 7, 117, + 110, 105, 49, 70, 55, 66, 7, 117, 110, 105, 49, 70, 55, 67, 7, 117, 110, 105, 49, 70, + 55, 68, 7, 117, 110, 105, 49, 70, 56, 48, 7, 117, 110, 105, 49, 70, 56, 49, 7, 117, + 110, 105, 49, 70, 56, 50, 7, 117, 110, 105, 49, 70, 56, 51, 7, 117, 110, 105, 49, 70, + 56, 52, 7, 117, 110, 105, 49, 70, 56, 53, 7, 117, 110, 105, 49, 70, 56, 54, 7, 117, + 110, 105, 49, 70, 56, 55, 7, 117, 110, 105, 49, 70, 56, 56, 7, 117, 110, 105, 49, 70, + 56, 57, 7, 117, 110, 105, 49, 70, 56, 65, 7, 117, 110, 105, 49, 70, 56, 66, 7, 117, + 110, 105, 49, 70, 56, 67, 7, 117, 110, 105, 49, 70, 56, 68, 7, 117, 110, 105, 49, 70, + 56, 69, 7, 117, 110, 105, 49, 70, 56, 70, 7, 117, 110, 105, 49, 70, 57, 48, 7, 117, + 110, 105, 49, 70, 57, 49, 7, 117, 110, 105, 49, 70, 57, 50, 7, 117, 110, 105, 49, 70, + 57, 51, 7, 117, 110, 105, 49, 70, 57, 52, 7, 117, 110, 105, 49, 70, 57, 53, 7, 117, + 110, 105, 49, 70, 57, 54, 7, 117, 110, 105, 49, 70, 57, 55, 7, 117, 110, 105, 49, 70, + 57, 56, 7, 117, 110, 105, 49, 70, 57, 57, 7, 117, 110, 105, 49, 70, 57, 65, 7, 117, + 110, 105, 49, 70, 57, 66, 7, 117, 110, 105, 49, 70, 57, 67, 7, 117, 110, 105, 49, 70, + 57, 68, 7, 117, 110, 105, 49, 70, 57, 69, 7, 117, 110, 105, 49, 70, 57, 70, 7, 117, + 110, 105, 49, 70, 65, 48, 7, 117, 110, 105, 49, 70, 65, 49, 7, 117, 110, 105, 49, 70, + 65, 50, 7, 117, 110, 105, 49, 70, 65, 51, 7, 117, 110, 105, 49, 70, 65, 52, 7, 117, + 110, 105, 49, 70, 65, 53, 7, 117, 110, 105, 49, 70, 65, 54, 7, 117, 110, 105, 49, 70, + 65, 55, 7, 117, 110, 105, 49, 70, 65, 56, 7, 117, 110, 105, 49, 70, 65, 57, 7, 117, + 110, 105, 49, 70, 65, 65, 7, 117, 110, 105, 49, 70, 65, 66, 7, 117, 110, 105, 49, 70, + 65, 67, 7, 117, 110, 105, 49, 70, 65, 68, 7, 117, 110, 105, 49, 70, 65, 69, 7, 117, + 110, 105, 49, 70, 65, 70, 7, 117, 110, 105, 49, 70, 66, 48, 7, 117, 110, 105, 49, 70, + 66, 49, 7, 117, 110, 105, 49, 70, 66, 50, 7, 117, 110, 105, 49, 70, 66, 51, 7, 117, + 110, 105, 49, 70, 66, 52, 7, 117, 110, 105, 49, 70, 66, 54, 7, 117, 110, 105, 49, 70, + 66, 55, 7, 117, 110, 105, 49, 70, 66, 56, 7, 117, 110, 105, 49, 70, 66, 57, 7, 117, + 110, 105, 49, 70, 66, 65, 7, 117, 110, 105, 49, 70, 66, 66, 7, 117, 110, 105, 49, 70, + 66, 67, 7, 117, 110, 105, 49, 70, 66, 68, 7, 117, 110, 105, 49, 70, 66, 69, 7, 117, + 110, 105, 49, 70, 66, 70, 7, 117, 110, 105, 49, 70, 67, 48, 7, 117, 110, 105, 49, 70, + 67, 49, 7, 117, 110, 105, 49, 70, 67, 50, 7, 117, 110, 105, 49, 70, 67, 51, 7, 117, + 110, 105, 49, 70, 67, 52, 7, 117, 110, 105, 49, 70, 67, 54, 7, 117, 110, 105, 49, 70, + 67, 55, 7, 117, 110, 105, 49, 70, 67, 56, 7, 117, 110, 105, 49, 70, 67, 57, 7, 117, + 110, 105, 49, 70, 67, 65, 7, 117, 110, 105, 49, 70, 67, 66, 7, 117, 110, 105, 49, 70, + 67, 67, 7, 117, 110, 105, 49, 70, 67, 68, 7, 117, 110, 105, 49, 70, 67, 69, 7, 117, + 110, 105, 49, 70, 67, 70, 7, 117, 110, 105, 49, 70, 68, 48, 7, 117, 110, 105, 49, 70, + 68, 49, 7, 117, 110, 105, 49, 70, 68, 50, 7, 117, 110, 105, 49, 70, 68, 51, 7, 117, + 110, 105, 49, 70, 68, 54, 7, 117, 110, 105, 49, 70, 68, 55, 7, 117, 110, 105, 49, 70, + 68, 56, 7, 117, 110, 105, 49, 70, 68, 57, 7, 117, 110, 105, 49, 70, 68, 65, 7, 117, + 110, 105, 49, 70, 68, 66, 7, 117, 110, 105, 49, 70, 68, 68, 7, 117, 110, 105, 49, 70, + 68, 69, 7, 117, 110, 105, 49, 70, 68, 70, 7, 117, 110, 105, 49, 70, 69, 48, 7, 117, + 110, 105, 49, 70, 69, 49, 7, 117, 110, 105, 49, 70, 69, 50, 7, 117, 110, 105, 49, 70, + 69, 51, 7, 117, 110, 105, 49, 70, 69, 52, 7, 117, 110, 105, 49, 70, 69, 53, 7, 117, + 110, 105, 49, 70, 69, 54, 7, 117, 110, 105, 49, 70, 69, 55, 7, 117, 110, 105, 49, 70, + 69, 56, 7, 117, 110, 105, 49, 70, 69, 57, 7, 117, 110, 105, 49, 70, 69, 65, 7, 117, + 110, 105, 49, 70, 69, 66, 7, 117, 110, 105, 49, 70, 69, 67, 7, 117, 110, 105, 49, 70, + 69, 68, 7, 117, 110, 105, 49, 70, 69, 69, 7, 117, 110, 105, 49, 70, 69, 70, 7, 117, + 110, 105, 49, 70, 70, 50, 7, 117, 110, 105, 49, 70, 70, 51, 7, 117, 110, 105, 49, 70, + 70, 52, 7, 117, 110, 105, 49, 70, 70, 54, 7, 117, 110, 105, 49, 70, 70, 55, 7, 117, + 110, 105, 49, 70, 70, 56, 7, 117, 110, 105, 49, 70, 70, 57, 7, 117, 110, 105, 49, 70, + 70, 65, 7, 117, 110, 105, 49, 70, 70, 66, 7, 117, 110, 105, 49, 70, 70, 67, 7, 117, + 110, 105, 49, 70, 70, 68, 7, 117, 110, 105, 49, 70, 70, 69, 11, 117, 110, 105, 49, 70, + 56, 56, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 56, 57, 46, 97, 108, 116, 11, 117, + 110, 105, 49, 70, 56, 65, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 56, 66, 46, 97, + 108, 116, 11, 117, 110, 105, 49, 70, 56, 67, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, + 56, 68, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 56, 69, 46, 97, 108, 116, 11, 117, + 110, 105, 49, 70, 56, 70, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 57, 56, 46, 97, + 108, 116, 11, 117, 110, 105, 49, 70, 57, 57, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, + 57, 65, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 57, 66, 46, 97, 108, 116, 11, 117, + 110, 105, 49, 70, 57, 67, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 57, 68, 46, 97, + 108, 116, 11, 117, 110, 105, 49, 70, 57, 69, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, + 57, 70, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 65, 56, 46, 97, 108, 116, 11, 117, + 110, 105, 49, 70, 65, 57, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 65, 65, 46, 97, + 108, 116, 11, 117, 110, 105, 49, 70, 65, 66, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, + 65, 67, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 65, 68, 46, 97, 108, 116, 11, 117, + 110, 105, 49, 70, 65, 69, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 65, 70, 46, 97, + 108, 116, 11, 117, 110, 105, 49, 70, 66, 67, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, + 67, 67, 46, 97, 108, 116, 11, 117, 110, 105, 49, 70, 70, 67, 46, 97, 108, 116, 7, 117, + 110, 105, 50, 48, 66, 57, 7, 117, 110, 105, 69, 48, 70, 70, 7, 117, 110, 105, 70, 48, + 48, 48, 7, 117, 110, 105, 70, 70, 70, 68, 7, 117, 110, 105, 69, 70, 70, 68, 8, 83, + 70, 48, 52, 48, 48, 48, 48, 8, 83, 70, 48, 50, 48, 48, 48, 48, 8, 83, 70, 48, + 49, 48, 48, 48, 48, 8, 83, 70, 49, 49, 48, 48, 48, 48, 8, 83, 70, 49, 48, 48, + 48, 48, 48, 8, 83, 70, 48, 57, 48, 48, 48, 48, 8, 83, 70, 48, 54, 48, 48, 48, + 48, 8, 83, 70, 48, 55, 48, 48, 48, 48, 8, 83, 70, 48, 56, 48, 48, 48, 48, 8, + 83, 70, 48, 53, 48, 48, 48, 48, 8, 83, 70, 48, 51, 48, 48, 48, 48, 8, 83, 70, + 49, 57, 48, 48, 48, 48, 8, 83, 70, 51, 54, 48, 48, 48, 48, 8, 83, 70, 52, 53, + 48, 48, 48, 48, 8, 83, 70, 50, 56, 48, 48, 48, 48, 8, 83, 70, 53, 48, 48, 48, + 48, 48, 8, 83, 70, 52, 55, 48, 48, 48, 48, 8, 83, 70, 50, 50, 48, 48, 48, 48, + 8, 83, 70, 53, 49, 48, 48, 48, 48, 8, 83, 70, 50, 52, 48, 48, 48, 48, 8, 83, + 70, 52, 52, 48, 48, 48, 48, 8, 83, 70, 50, 51, 48, 48, 48, 48, 8, 83, 70, 52, + 50, 48, 48, 48, 48, 8, 83, 70, 52, 48, 48, 48, 48, 48, 8, 83, 70, 50, 54, 48, + 48, 48, 48, 8, 83, 70, 51, 56, 48, 48, 48, 48, 8, 83, 70, 52, 49, 48, 48, 48, + 48, 8, 83, 70, 50, 53, 48, 48, 48, 48, 8, 83, 70, 51, 57, 48, 48, 48, 48, 8, + 83, 70, 52, 51, 48, 48, 48, 48, 8, 83, 70, 50, 48, 48, 48, 48, 48, 8, 83, 70, + 51, 55, 48, 48, 48, 48, 8, 83, 70, 52, 54, 48, 48, 48, 48, 8, 83, 70, 50, 55, + 48, 48, 48, 48, 8, 83, 70, 52, 57, 48, 48, 48, 48, 8, 83, 70, 52, 56, 48, 48, + 48, 48, 8, 83, 70, 50, 49, 48, 48, 48, 48, 8, 83, 70, 53, 50, 48, 48, 48, 48, + 5, 98, 108, 111, 99, 107, 7, 108, 116, 115, 104, 97, 100, 101, 5, 115, 104, 97, 100, 101, + 7, 100, 107, 115, 104, 97, 100, 101, 8, 83, 70, 53, 51, 48, 48, 48, 48, 8, 83, 70, + 53, 52, 48, 48, 48, 48, 0, 0, 0, 2, 0, 50, 0, 0, 1, 194, 2, 238, 0, 3, + 0, 7, 0, 27, 64, 11, 4, 3, 9, 7, 0, 8, 5, 1, 4, 0, 68, 0, 63, 205, + 47, 205, 1, 16, 214, 205, 16, 222, 205, 49, 48, 51, 17, 33, 17, 39, 17, 33, 17, 50, + 1, 144, 50, 254, 212, 2, 238, 253, 18, 50, 2, 138, 253, 118, 0, 2, 0, 181, 255, 244, + 1, 59, 2, 107, 0, 13, 0, 25, 0, 35, 64, 17, 0, 145, 11, 11, 23, 148, 17, 17, + 27, 26, 6, 20, 154, 14, 92, 12, 89, 0, 63, 63, 253, 206, 1, 17, 18, 57, 47, 237, + 51, 47, 237, 49, 48, 1, 20, 14, 2, 7, 35, 46, 3, 53, 53, 51, 3, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 1, 37, 2, 5, 6, 3, 57, 3, 6, 5, 2, 89, + 45, 27, 40, 40, 27, 28, 39, 39, 1, 195, 37, 62, 56, 55, 30, 30, 55, 56, 62, 37, + 168, 253, 137, 37, 31, 31, 37, 37, 31, 31, 37, 0, 2, 0, 129, 1, 174, 1, 115, 2, + 167, 0, 9, 0, 19, 0, 21, 183, 10, 19, 0, 9, 15, 4, 19, 0, 0, 47, 50, 205, + 50, 1, 47, 221, 222, 205, 49, 48, 19, 21, 20, 6, 7, 35, 38, 38, 53, 53, 51, 21, + 20, 6, 7, 35, 38, 38, 53, 53, 206, 10, 8, 42, 7, 10, 242, 10, 7, 42, 8, 10, + 2, 167, 45, 44, 113, 47, 47, 113, 45, 44, 45, 44, 113, 47, 47, 113, 45, 44, 0, 2, + 0, 27, 0, 0, 1, 217, 2, 107, 0, 27, 0, 31, 0, 175, 64, 90, 13, 10, 9, 6, + 5, 14, 5, 14, 145, 15, 16, 29, 30, 3, 4, 15, 4, 15, 18, 20, 23, 24, 27, 0, + 19, 0, 2, 31, 28, 17, 18, 1, 18, 145, 19, 19, 22, 26, 33, 0, 145, 1, 4, 145, + 5, 5, 11, 7, 32, 19, 89, 18, 89, 15, 89, 29, 28, 23, 10, 151, 13, 20, 17, 16, + 13, 27, 3, 2, 6, 151, 9, 31, 30, 24, 9, 13, 9, 13, 9, 5, 14, 89, 5, 96, + 4, 96, 1, 96, 0, 96, 0, 63, 63, 63, 63, 63, 18, 57, 57, 47, 47, 17, 51, 51, + 51, 16, 237, 50, 50, 50, 17, 51, 51, 51, 16, 237, 50, 50, 50, 63, 63, 63, 1, 16, + 198, 50, 50, 47, 253, 222, 237, 16, 206, 50, 50, 47, 253, 125, 135, 196, 196, 196, 196, 16, + 135, 196, 196, 196, 196, 1, 24, 16, 206, 16, 125, 135, 196, 196, 196, 196, 1, 24, 16, 237, + 16, 125, 135, 196, 196, 196, 196, 49, 48, 33, 35, 55, 35, 7, 35, 55, 35, 53, 51, 55, + 35, 53, 51, 55, 51, 7, 51, 55, 51, 7, 51, 21, 35, 7, 51, 21, 35, 39, 35, 7, + 51, 1, 65, 75, 31, 111, 31, 75, 31, 64, 77, 30, 107, 121, 31, 75, 31, 111, 30, 75, + 30, 64, 77, 31, 108, 121, 32, 110, 31, 110, 163, 163, 163, 67, 159, 66, 164, 164, 164, 164, + 66, 159, 67, 226, 159, 0, 1, 0, 54, 255, 159, 1, 191, 2, 181, 0, 53, 0, 179, 64, + 17, 49, 24, 18, 0, 77, 49, 32, 15, 17, 0, 76, 49, 40, 14, 0, 77, 43, 184, 255, + 232, 180, 11, 12, 0, 76, 42, 184, 255, 216, 180, 9, 10, 0, 76, 39, 184, 255, 224, 179, + 16, 0, 77, 39, 184, 255, 232, 180, 13, 14, 0, 76, 38, 184, 255, 240, 179, 16, 0, 77, + 34, 184, 255, 232, 64, 60, 15, 0, 77, 17, 40, 9, 10, 0, 76, 13, 32, 16, 0, 77, + 9, 32, 10, 0, 77, 21, 44, 139, 18, 47, 47, 15, 41, 24, 24, 5, 140, 41, 55, 50, + 50, 31, 140, 15, 54, 10, 47, 28, 36, 21, 51, 51, 0, 143, 44, 47, 46, 46, 54, 25, + 25, 28, 143, 18, 21, 19, 0, 47, 221, 50, 237, 50, 47, 17, 51, 47, 221, 50, 237, 50, + 47, 17, 57, 17, 18, 57, 1, 16, 214, 237, 51, 47, 16, 222, 237, 51, 47, 17, 18, 57, + 47, 51, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 50, + 62, 2, 53, 52, 46, 2, 39, 46, 3, 53, 52, 54, 55, 53, 51, 21, 22, 22, 23, 7, + 38, 38, 35, 34, 6, 21, 20, 30, 2, 23, 30, 3, 21, 20, 6, 7, 21, 35, 53, 38, + 38, 39, 55, 22, 22, 233, 36, 49, 28, 12, 24, 41, 52, 28, 27, 53, 41, 26, 76, 72, + 74, 40, 67, 20, 17, 21, 64, 49, 54, 57, 17, 32, 43, 27, 34, 64, 48, 29, 78, 81, + 74, 63, 78, 19, 22, 27, 74, 85, 11, 21, 29, 17, 25, 35, 27, 21, 10, 10, 24, 35, + 49, 36, 64, 80, 11, 103, 100, 2, 15, 8, 70, 8, 17, 40, 38, 21, 28, 22, 18, 10, + 13, 29, 40, 56, 39, 59, 82, 10, 115, 112, 2, 24, 11, 69, 13, 23, 0, 5, 0, 18, + 255, 243, 1, 226, 2, 120, 0, 3, 0, 15, 0, 27, 0, 39, 0, 51, 0, 119, 64, 72, + 224, 28, 240, 28, 2, 28, 239, 46, 255, 46, 2, 46, 224, 40, 240, 40, 2, 40, 34, 0, + 2, 1, 2, 141, 3, 0, 20, 3, 0, 3, 3, 34, 53, 239, 10, 255, 10, 2, 10, 224, + 16, 240, 16, 2, 16, 239, 22, 255, 22, 2, 22, 4, 1, 1, 4, 52, 43, 31, 49, 37, + 87, 25, 13, 19, 7, 88, 2, 3, 86, 0, 1, 85, 0, 63, 51, 63, 51, 63, 205, 220, + 205, 63, 205, 220, 205, 1, 16, 198, 50, 47, 16, 221, 93, 222, 93, 205, 93, 16, 206, 50, + 47, 135, 43, 135, 125, 196, 1, 24, 16, 221, 93, 222, 93, 205, 93, 49, 48, 51, 35, 1, + 51, 5, 52, 54, 51, 50, 22, 21, 20, 6, 35, 34, 38, 55, 52, 38, 35, 34, 6, 21, + 20, 22, 51, 50, 54, 19, 52, 54, 51, 50, 22, 21, 20, 6, 35, 34, 38, 55, 52, 38, + 35, 34, 6, 21, 20, 22, 51, 50, 54, 95, 70, 1, 123, 70, 254, 56, 58, 51, 51, 58, + 58, 51, 51, 58, 156, 24, 23, 23, 25, 25, 23, 23, 24, 91, 57, 51, 51, 58, 58, 51, + 51, 57, 156, 25, 23, 23, 24, 24, 23, 23, 25, 2, 107, 142, 76, 79, 79, 76, 76, 80, + 80, 76, 45, 58, 58, 45, 45, 58, 58, 254, 222, 76, 79, 79, 76, 76, 79, 79, 76, 45, + 58, 58, 45, 45, 58, 58, 0, 3, 0, 31, 255, 248, 1, 217, 2, 121, 0, 43, 0, 54, + 0, 66, 1, 12, 182, 65, 32, 17, 18, 0, 76, 49, 184, 255, 224, 179, 18, 0, 77, 49, + 184, 255, 232, 179, 17, 0, 77, 49, 184, 255, 240, 179, 15, 0, 77, 45, 184, 255, 232, 64, + 9, 15, 0, 77, 44, 8, 8, 0, 77, 38, 184, 255, 232, 64, 31, 9, 13, 0, 76, 32, + 24, 12, 0, 77, 32, 16, 11, 0, 77, 32, 24, 9, 10, 0, 76, 26, 24, 17, 0, 77, + 26, 48, 8, 0, 77, 17, 184, 255, 216, 179, 16, 0, 77, 17, 184, 255, 232, 179, 14, 0, + 77, 2, 184, 255, 208, 179, 18, 0, 77, 2, 184, 255, 232, 179, 17, 0, 77, 2, 184, 255, + 224, 179, 16, 0, 77, 2, 184, 255, 240, 179, 14, 0, 77, 1, 184, 255, 240, 179, 18, 0, + 77, 1, 184, 255, 232, 64, 60, 17, 0, 77, 55, 118, 40, 40, 7, 16, 52, 44, 27, 4, + 30, 14, 118, 10, 3, 43, 64, 4, 61, 13, 13, 6, 115, 7, 68, 61, 118, 30, 30, 47, + 118, 24, 67, 64, 44, 27, 43, 16, 10, 3, 52, 43, 52, 6, 6, 50, 58, 124, 35, 69, + 50, 124, 19, 70, 13, 14, 66, 0, 63, 51, 63, 237, 63, 237, 18, 57, 47, 57, 57, 17, + 51, 51, 51, 17, 51, 51, 51, 1, 16, 214, 237, 51, 47, 237, 16, 222, 237, 51, 47, 18, + 23, 57, 237, 17, 23, 57, 17, 51, 47, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 22, 22, 23, 54, 54, 55, 23, + 6, 6, 7, 22, 22, 23, 35, 38, 39, 6, 6, 35, 34, 46, 2, 53, 52, 54, 55, 38, + 38, 53, 52, 62, 2, 51, 50, 30, 2, 21, 20, 6, 7, 7, 6, 6, 21, 20, 22, 22, + 54, 55, 38, 38, 55, 52, 38, 35, 34, 6, 21, 20, 22, 23, 54, 54, 1, 16, 17, 37, + 19, 8, 12, 3, 69, 6, 23, 17, 23, 42, 17, 87, 17, 21, 32, 79, 43, 38, 60, 42, + 23, 49, 53, 26, 32, 25, 42, 55, 29, 26, 50, 38, 23, 60, 65, 66, 29, 29, 40, 58, + 68, 28, 33, 71, 84, 39, 25, 26, 45, 18, 29, 48, 40, 1, 27, 20, 41, 23, 28, 66, + 40, 9, 58, 91, 37, 32, 68, 38, 35, 32, 40, 35, 25, 44, 58, 32, 47, 96, 41, 35, + 72, 38, 39, 58, 37, 19, 16, 33, 48, 31, 46, 97, 41, 36, 26, 68, 32, 39, 51, 13, + 29, 40, 45, 77, 249, 36, 36, 41, 41, 29, 50, 38, 30, 68, 0, 1, 0, 206, 1, 156, + 1, 37, 2, 167, 0, 13, 0, 20, 183, 1, 145, 12, 12, 15, 14, 7, 13, 0, 47, 205, + 1, 17, 18, 57, 47, 237, 49, 48, 1, 21, 20, 14, 2, 7, 35, 46, 3, 53, 53, 1, + 37, 3, 5, 6, 4, 51, 4, 6, 5, 3, 2, 167, 45, 22, 57, 61, 59, 23, 23, 59, + 61, 58, 22, 44, 0, 1, 0, 113, 255, 89, 1, 130, 2, 189, 0, 16, 0, 127, 185, 0, + 7, 255, 224, 179, 18, 0, 77, 7, 184, 255, 240, 179, 17, 0, 77, 6, 184, 255, 224, 179, + 17, 0, 77, 6, 184, 255, 224, 179, 14, 0, 77, 1, 184, 255, 224, 179, 18, 0, 77, 1, + 184, 255, 232, 179, 17, 0, 77, 1, 184, 255, 240, 179, 14, 0, 77, 14, 184, 255, 240, 64, + 9, 13, 0, 77, 10, 24, 13, 0, 77, 5, 184, 255, 232, 64, 21, 15, 0, 77, 2, 32, + 15, 0, 77, 15, 9, 9, 0, 8, 3, 12, 17, 0, 15, 90, 8, 9, 0, 47, 51, 63, + 51, 1, 16, 214, 221, 206, 50, 50, 17, 51, 49, 48, 0, 43, 43, 43, 43, 1, 43, 43, + 43, 43, 43, 43, 43, 1, 6, 6, 21, 20, 30, 2, 23, 7, 38, 38, 53, 52, 54, 55, + 23, 1, 128, 93, 98, 23, 47, 73, 50, 45, 115, 113, 114, 114, 44, 2, 129, 72, 188, 111, + 56, 100, 92, 86, 43, 60, 85, 225, 125, 124, 226, 83, 60, 0, 1, 0, 113, 255, 89, 1, + 130, 2, 189, 0, 18, 0, 88, 185, 0, 15, 255, 240, 179, 13, 0, 77, 10, 184, 255, 240, + 64, 47, 13, 0, 77, 7, 24, 17, 0, 77, 6, 24, 18, 0, 77, 5, 16, 15, 0, 77, + 2, 16, 15, 0, 77, 1, 16, 17, 18, 0, 76, 7, 24, 18, 0, 77, 17, 9, 9, 18, + 8, 3, 12, 20, 0, 17, 8, 9, 90, 0, 63, 51, 47, 51, 1, 16, 214, 221, 206, 50, + 50, 17, 51, 49, 48, 0, 43, 1, 43, 43, 43, 43, 43, 43, 43, 23, 54, 54, 53, 52, + 46, 2, 39, 55, 22, 22, 21, 20, 14, 2, 7, 39, 115, 93, 99, 23, 48, 73, 50, 45, + 115, 113, 29, 57, 85, 57, 44, 107, 72, 188, 111, 56, 100, 92, 86, 43, 60, 85, 225, 125, + 62, 120, 111, 99, 41, 60, 0, 1, 0, 57, 0, 250, 1, 187, 2, 107, 0, 44, 0, 51, + 64, 23, 41, 32, 4, 4, 32, 22, 31, 14, 14, 31, 31, 46, 45, 41, 9, 22, 40, 23, + 23, 5, 13, 31, 89, 0, 63, 204, 50, 57, 47, 51, 205, 50, 50, 1, 17, 18, 57, 47, + 51, 47, 16, 204, 205, 50, 47, 16, 204, 49, 48, 1, 22, 22, 23, 23, 7, 39, 38, 38, + 39, 6, 6, 7, 7, 39, 55, 54, 54, 55, 38, 38, 39, 39, 55, 23, 22, 22, 23, 38, + 38, 53, 53, 51, 21, 20, 6, 7, 54, 54, 55, 55, 23, 7, 6, 6, 1, 31, 27, 58, + 20, 4, 70, 5, 21, 34, 15, 16, 34, 23, 5, 69, 5, 22, 56, 27, 37, 78, 35, 7, + 27, 7, 35, 71, 32, 8, 13, 86, 13, 8, 32, 70, 35, 7, 26, 6, 36, 77, 1, 161, + 25, 55, 31, 5, 51, 6, 30, 71, 33, 33, 71, 30, 5, 50, 6, 31, 54, 25, 5, 11, + 12, 2, 82, 3, 14, 34, 18, 36, 78, 38, 7, 7, 38, 78, 36, 19, 33, 13, 3, 82, + 2, 11, 12, 0, 1, 0, 46, 0, 43, 1, 199, 1, 226, 0, 11, 0, 36, 64, 15, 6, + 4, 7, 11, 1, 10, 10, 13, 12, 4, 2, 1, 9, 7, 10, 0, 47, 51, 205, 221, 205, + 51, 1, 17, 18, 57, 47, 51, 205, 221, 50, 205, 49, 48, 19, 51, 53, 51, 21, 51, 21, + 35, 21, 35, 53, 35, 46, 168, 72, 169, 169, 72, 168, 1, 42, 184, 184, 70, 185, 185, 0, + 1, 0, 149, 255, 112, 1, 95, 0, 139, 0, 19, 0, 31, 64, 14, 5, 14, 148, 0, 8, + 8, 21, 20, 0, 19, 11, 154, 5, 92, 0, 63, 237, 220, 205, 1, 17, 18, 57, 47, 206, + 237, 57, 49, 48, 23, 62, 3, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, + 7, 149, 18, 35, 30, 24, 7, 32, 29, 45, 29, 37, 38, 23, 47, 70, 48, 79, 4, 8, + 15, 23, 20, 3, 43, 21, 40, 41, 53, 38, 29, 63, 55, 39, 6, 0, 1, 0, 140, 0, + 215, 1, 104, 1, 37, 0, 3, 0, 13, 179, 2, 3, 0, 3, 0, 47, 205, 1, 47, 205, + 49, 48, 19, 51, 21, 35, 140, 220, 220, 1, 37, 78, 0, 1, 0, 177, 255, 244, 1, 68, + 0, 141, 0, 11, 0, 16, 182, 0, 148, 6, 9, 154, 3, 92, 0, 63, 237, 1, 47, 237, + 49, 48, 37, 20, 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, 1, 68, 40, 33, 34, 40, + 40, 34, 33, 40, 64, 30, 46, 46, 30, 31, 46, 46, 0, 1, 0, 69, 255, 91, 1, 175, + 2, 187, 0, 3, 0, 35, 64, 17, 2, 0, 3, 0, 141, 1, 2, 20, 1, 1, 2, 3, + 1, 2, 3, 0, 1, 0, 47, 51, 47, 51, 1, 47, 47, 135, 16, 43, 135, 125, 196, 49, + 48, 23, 35, 1, 51, 154, 85, 1, 23, 83, 165, 3, 96, 0, 3, 0, 46, 255, 243, 1, + 198, 2, 121, 0, 11, 0, 23, 0, 43, 0, 246, 182, 41, 16, 13, 14, 0, 76, 37, 184, + 255, 232, 179, 14, 0, 77, 37, 184, 255, 240, 179, 13, 0, 77, 31, 184, 255, 232, 179, 14, + 0, 77, 31, 184, 255, 240, 64, 20, 13, 0, 77, 27, 16, 13, 14, 0, 76, 22, 24, 16, + 0, 77, 22, 32, 15, 0, 77, 20, 184, 255, 232, 180, 15, 16, 0, 76, 16, 184, 255, 240, + 179, 16, 0, 77, 16, 184, 255, 208, 64, 14, 15, 0, 77, 14, 24, 16, 0, 77, 14, 16, + 15, 0, 77, 8, 184, 255, 240, 179, 34, 0, 77, 8, 184, 255, 240, 179, 30, 0, 77, 8, + 184, 255, 232, 180, 27, 29, 0, 76, 0, 184, 255, 192, 64, 39, 27, 28, 0, 76, 144, 0, + 1, 80, 0, 128, 0, 144, 0, 192, 0, 224, 0, 240, 0, 6, 0, 64, 9, 12, 72, 0, + 143, 6, 159, 6, 207, 6, 3, 6, 64, 27, 30, 72, 6, 184, 255, 192, 64, 32, 9, 12, + 72, 6, 6, 34, 24, 140, 18, 45, 34, 140, 12, 44, 63, 3, 1, 3, 160, 9, 1, 9, + 9, 15, 39, 143, 21, 87, 29, 143, 15, 88, 0, 63, 237, 63, 237, 17, 57, 47, 93, 205, + 93, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 43, 43, 93, 205, 43, 93, 113, 43, 49, + 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 6, + 35, 34, 38, 53, 52, 54, 51, 50, 22, 5, 52, 54, 51, 50, 22, 21, 20, 6, 35, 34, + 38, 37, 52, 46, 2, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 62, 2, 1, 52, 31, + 25, 26, 32, 32, 26, 25, 31, 254, 250, 107, 97, 98, 106, 106, 98, 97, 107, 1, 68, 12, + 28, 46, 34, 34, 46, 28, 12, 12, 28, 46, 34, 34, 46, 28, 12, 1, 65, 26, 38, 38, + 26, 26, 40, 40, 37, 156, 167, 167, 156, 156, 167, 167, 156, 51, 91, 68, 40, 40, 68, 91, + 51, 51, 91, 68, 40, 40, 68, 91, 0, 1, 0, 75, 0, 0, 1, 182, 2, 107, 0, 16, + 0, 66, 64, 38, 2, 24, 12, 0, 77, 1, 40, 18, 0, 77, 1, 32, 13, 0, 77, 0, + 0, 9, 10, 6, 5, 139, 3, 10, 10, 18, 17, 5, 10, 142, 8, 85, 0, 16, 16, 11, + 3, 86, 0, 63, 51, 51, 47, 205, 63, 237, 50, 1, 17, 18, 57, 47, 51, 253, 205, 16, + 205, 50, 47, 49, 48, 43, 43, 43, 19, 54, 54, 55, 51, 17, 51, 21, 33, 53, 51, 17, + 14, 3, 7, 75, 51, 96, 41, 58, 117, 254, 179, 134, 11, 31, 37, 40, 19, 1, 235, 20, + 61, 47, 253, 219, 70, 70, 1, 178, 10, 21, 20, 18, 6, 0, 1, 0, 57, 0, 0, 1, + 189, 2, 121, 0, 44, 0, 144, 185, 0, 44, 255, 240, 180, 11, 12, 0, 76, 44, 184, 255, + 224, 64, 11, 9, 10, 0, 76, 39, 24, 9, 10, 0, 76, 34, 184, 255, 224, 64, 15, 18, + 0, 77, 29, 24, 17, 18, 0, 76, 22, 8, 15, 0, 77, 5, 184, 255, 232, 179, 15, 0, + 77, 3, 184, 255, 224, 179, 18, 0, 77, 3, 184, 255, 232, 179, 17, 0, 77, 2, 184, 255, + 240, 179, 18, 0, 77, 2, 184, 255, 232, 64, 27, 17, 0, 77, 26, 140, 0, 11, 11, 0, + 46, 10, 140, 15, 45, 37, 37, 16, 36, 36, 31, 143, 42, 88, 10, 142, 13, 85, 0, 63, + 237, 63, 237, 50, 47, 1, 47, 51, 47, 16, 214, 237, 16, 206, 50, 47, 16, 237, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 14, 2, 7, 14, 3, 21, 33, + 21, 33, 38, 52, 53, 52, 62, 2, 55, 62, 3, 53, 52, 46, 2, 35, 34, 14, 2, 7, + 39, 62, 3, 51, 50, 22, 1, 164, 25, 41, 52, 27, 15, 40, 36, 24, 1, 29, 254, 137, + 1, 28, 44, 55, 27, 22, 41, 31, 19, 17, 29, 38, 22, 26, 43, 33, 24, 6, 41, 8, + 32, 45, 56, 32, 97, 93, 1, 205, 32, 60, 58, 56, 27, 15, 42, 44, 42, 15, 70, 5, + 11, 5, 42, 72, 64, 57, 27, 22, 42, 42, 45, 24, 27, 38, 25, 12, 14, 20, 19, 6, + 58, 9, 26, 23, 16, 89, 0, 1, 0, 59, 255, 243, 1, 186, 2, 121, 0, 50, 0, 244, + 181, 46, 40, 18, 0, 77, 39, 184, 255, 216, 179, 18, 0, 77, 39, 184, 255, 208, 179, 17, + 0, 77, 39, 184, 255, 232, 180, 9, 10, 0, 76, 39, 184, 255, 216, 179, 8, 0, 77, 36, + 184, 255, 216, 180, 17, 18, 0, 76, 33, 184, 255, 224, 180, 17, 18, 0, 76, 29, 184, 255, + 208, 179, 18, 0, 77, 29, 184, 255, 224, 179, 17, 0, 77, 29, 184, 255, 224, 180, 8, 10, + 0, 76, 28, 184, 255, 232, 179, 18, 0, 77, 28, 184, 255, 224, 179, 17, 0, 77, 21, 184, + 255, 240, 64, 40, 18, 0, 77, 14, 24, 15, 16, 0, 76, 5, 24, 16, 0, 77, 5, 16, + 15, 0, 77, 5, 16, 13, 0, 77, 1, 32, 16, 0, 77, 45, 16, 17, 0, 77, 21, 16, + 17, 0, 77, 34, 184, 255, 208, 64, 41, 17, 0, 77, 34, 16, 140, 31, 31, 3, 140, 37, + 52, 23, 23, 9, 9, 47, 51, 34, 9, 142, 10, 10, 26, 48, 48, 0, 143, 42, 87, 111, + 22, 127, 22, 2, 22, 22, 19, 143, 26, 88, 0, 63, 237, 50, 47, 93, 63, 237, 50, 47, + 17, 57, 47, 237, 57, 1, 16, 198, 50, 47, 50, 47, 16, 222, 237, 51, 47, 237, 50, 43, + 49, 48, 0, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 55, 50, 54, 53, 52, 46, 2, 35, 35, 53, 51, 50, 62, 2, 53, 52, + 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, + 14, 2, 35, 34, 46, 2, 39, 55, 22, 22, 212, 79, 67, 28, 46, 60, 33, 21, 29, 22, + 47, 39, 24, 63, 42, 43, 60, 20, 32, 21, 85, 52, 49, 70, 45, 22, 51, 40, 48, 70, + 27, 55, 87, 60, 23, 49, 42, 33, 7, 16, 16, 70, 60, 63, 53, 34, 46, 28, 12, 67, + 9, 23, 40, 31, 51, 43, 25, 13, 63, 15, 33, 24, 44, 59, 35, 49, 68, 18, 14, 81, + 67, 40, 69, 50, 28, 7, 11, 11, 3, 71, 8, 22, 0, 2, 0, 36, 0, 0, 1, 210, + 2, 107, 0, 14, 0, 21, 0, 109, 64, 66, 194, 15, 1, 211, 5, 1, 3, 178, 5, 1, + 2, 162, 5, 1, 221, 20, 1, 188, 20, 204, 20, 2, 173, 20, 1, 5, 20, 15, 20, 141, + 0, 5, 20, 0, 0, 5, 15, 13, 21, 139, 10, 7, 8, 23, 0, 22, 7, 0, 20, 142, + 10, 13, 13, 12, 85, 176, 15, 208, 15, 2, 163, 15, 1, 15, 5, 86, 0, 63, 51, 93, + 93, 63, 51, 47, 51, 237, 50, 50, 1, 16, 198, 16, 222, 213, 50, 237, 50, 50, 135, 16, + 43, 135, 125, 196, 1, 93, 93, 93, 93, 95, 93, 95, 93, 49, 48, 0, 93, 55, 62, 3, + 55, 51, 17, 51, 21, 35, 21, 35, 53, 33, 1, 14, 3, 7, 51, 36, 17, 59, 74, 84, + 43, 80, 73, 73, 80, 254, 235, 1, 21, 27, 55, 52, 45, 18, 197, 214, 40, 104, 111, 107, + 43, 254, 119, 68, 158, 158, 1, 107, 29, 70, 77, 80, 39, 0, 1, 0, 66, 255, 243, 1, + 186, 2, 107, 0, 39, 0, 176, 64, 12, 24, 32, 13, 0, 77, 12, 40, 17, 18, 0, 76, + 6, 184, 255, 232, 179, 16, 0, 77, 6, 184, 255, 224, 179, 15, 0, 77, 6, 184, 255, 240, + 179, 14, 0, 77, 5, 184, 255, 232, 179, 16, 0, 77, 5, 184, 255, 224, 179, 15, 0, 77, + 5, 184, 255, 208, 179, 14, 0, 77, 5, 184, 255, 232, 179, 10, 0, 77, 5, 184, 255, 240, + 179, 9, 0, 77, 2, 184, 255, 224, 179, 16, 0, 77, 2, 184, 255, 232, 179, 15, 0, 77, + 2, 184, 255, 224, 64, 36, 14, 0, 77, 34, 34, 22, 140, 3, 41, 35, 0, 139, 27, 32, + 13, 13, 16, 27, 1, 27, 40, 27, 143, 0, 0, 17, 35, 142, 32, 86, 14, 14, 17, 143, + 8, 87, 0, 63, 237, 50, 47, 63, 237, 18, 57, 47, 237, 1, 16, 198, 93, 50, 47, 50, + 16, 237, 50, 16, 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 19, 22, 22, 21, 20, 14, 2, 35, 34, 46, 2, 39, 55, 22, 22, 51, 50, + 62, 2, 53, 52, 46, 2, 35, 62, 3, 55, 33, 21, 35, 14, 3, 186, 134, 122, 26, 55, + 85, 58, 24, 47, 42, 32, 7, 16, 16, 67, 51, 40, 54, 33, 15, 23, 57, 99, 75, 6, + 7, 5, 3, 2, 1, 42, 226, 1, 3, 4, 4, 1, 124, 5, 108, 91, 41, 70, 50, 28, + 7, 10, 11, 4, 71, 8, 22, 18, 31, 40, 22, 34, 53, 36, 19, 44, 77, 73, 72, 40, + 70, 14, 45, 50, 46, 0, 2, 0, 54, 255, 243, 1, 193, 2, 110, 0, 26, 0, 45, 0, + 201, 185, 0, 36, 255, 240, 64, 19, 14, 0, 77, 26, 24, 8, 0, 77, 25, 32, 16, 0, + 77, 25, 40, 15, 0, 77, 22, 184, 255, 216, 180, 15, 16, 0, 76, 21, 184, 255, 232, 179, + 16, 0, 77, 21, 184, 255, 240, 179, 15, 0, 77, 21, 184, 255, 232, 179, 8, 0, 77, 17, + 184, 255, 232, 179, 11, 0, 77, 17, 184, 255, 232, 179, 9, 0, 77, 17, 184, 255, 216, 179, + 8, 0, 77, 16, 184, 255, 216, 179, 18, 0, 77, 16, 184, 255, 192, 179, 17, 0, 77, 16, + 184, 255, 232, 179, 12, 0, 77, 8, 184, 255, 232, 180, 13, 14, 0, 76, 4, 184, 255, 224, + 64, 38, 14, 0, 77, 3, 32, 16, 0, 77, 43, 140, 19, 6, 6, 19, 47, 11, 33, 140, + 16, 0, 1, 0, 46, 30, 27, 143, 11, 14, 14, 5, 38, 143, 24, 87, 6, 143, 5, 86, + 0, 63, 237, 63, 237, 17, 57, 47, 51, 237, 50, 1, 16, 214, 93, 237, 50, 16, 206, 50, + 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 55, 52, 62, 2, 55, 23, 14, 3, 7, 54, 54, 51, 50, 30, 2, 21, 20, 14, + 2, 35, 34, 38, 55, 34, 6, 7, 6, 20, 21, 20, 30, 2, 51, 50, 62, 2, 53, 52, + 38, 54, 49, 91, 130, 82, 7, 53, 87, 68, 46, 12, 24, 57, 32, 52, 73, 44, 20, 22, + 46, 72, 50, 103, 102, 197, 32, 53, 27, 1, 11, 27, 46, 36, 30, 40, 26, 11, 55, 248, + 90, 139, 94, 50, 1, 70, 1, 21, 47, 74, 54, 11, 14, 32, 53, 70, 37, 34, 71, 59, + 37, 138, 187, 12, 12, 10, 19, 11, 39, 69, 53, 31, 25, 38, 47, 21, 61, 64, 0, 1, + 0, 63, 0, 0, 1, 199, 2, 107, 0, 14, 0, 37, 64, 18, 14, 140, 0, 0, 6, 5, + 140, 9, 16, 6, 15, 9, 5, 142, 7, 86, 0, 85, 0, 63, 63, 237, 50, 1, 16, 198, + 16, 222, 237, 18, 57, 47, 237, 49, 48, 51, 62, 3, 55, 33, 53, 33, 21, 14, 3, 7, + 155, 5, 41, 58, 70, 34, 254, 212, 1, 136, 30, 70, 63, 46, 6, 71, 159, 149, 127, 41, + 72, 69, 35, 118, 147, 167, 83, 0, 3, 0, 51, 255, 243, 1, 193, 2, 121, 0, 27, 0, + 43, 0, 59, 1, 32, 181, 58, 24, 14, 0, 77, 56, 184, 255, 224, 179, 15, 0, 77, 56, + 184, 255, 232, 179, 14, 0, 77, 51, 184, 255, 224, 64, 40, 17, 18, 0, 76, 47, 24, 18, + 0, 77, 47, 40, 17, 0, 77, 40, 48, 15, 0, 77, 40, 24, 10, 0, 77, 40, 40, 9, + 0, 77, 35, 40, 18, 0, 77, 35, 48, 17, 0, 77, 31, 184, 255, 224, 180, 17, 18, 0, + 76, 27, 184, 255, 232, 179, 13, 0, 77, 25, 184, 255, 232, 179, 10, 0, 77, 21, 184, 255, + 224, 179, 10, 0, 77, 21, 184, 255, 240, 179, 9, 0, 77, 21, 184, 255, 224, 64, 51, 8, + 0, 77, 15, 32, 10, 0, 77, 15, 32, 8, 0, 77, 12, 32, 13, 0, 77, 12, 56, 9, + 10, 0, 76, 9, 8, 17, 18, 0, 76, 6, 24, 11, 0, 77, 6, 32, 10, 0, 77, 6, + 24, 9, 0, 77, 6, 32, 8, 0, 77, 1, 184, 255, 232, 180, 9, 10, 0, 76, 1, 184, + 255, 224, 64, 44, 8, 0, 77, 11, 41, 13, 38, 140, 0, 57, 26, 54, 0, 44, 140, 23, + 23, 0, 61, 54, 140, 13, 13, 28, 140, 8, 60, 26, 57, 57, 18, 33, 11, 41, 41, 3, + 49, 143, 18, 88, 33, 143, 3, 87, 0, 63, 237, 63, 237, 17, 57, 17, 51, 17, 18, 57, + 17, 51, 1, 16, 214, 237, 51, 47, 237, 16, 206, 50, 47, 237, 17, 18, 57, 57, 16, 237, + 17, 57, 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, 6, 35, 34, 46, 2, + 53, 52, 54, 55, 38, 53, 52, 62, 2, 51, 50, 30, 2, 21, 20, 6, 7, 22, 5, 20, + 30, 2, 51, 50, 62, 2, 53, 52, 38, 39, 6, 6, 19, 52, 46, 2, 35, 34, 14, 2, + 21, 20, 22, 23, 54, 54, 1, 193, 99, 101, 58, 76, 45, 19, 58, 40, 85, 26, 48, 69, + 43, 50, 71, 44, 20, 54, 35, 103, 254, 194, 12, 28, 46, 33, 31, 45, 29, 14, 82, 72, + 40, 44, 224, 12, 25, 40, 28, 29, 39, 26, 11, 59, 68, 38, 45, 161, 78, 96, 31, 49, + 60, 29, 53, 82, 25, 48, 99, 34, 62, 46, 28, 30, 47, 57, 27, 53, 77, 23, 49, 115, + 16, 35, 30, 19, 17, 29, 36, 18, 57, 61, 16, 22, 66, 1, 15, 13, 33, 27, 19, 18, + 27, 33, 16, 41, 71, 16, 22, 60, 0, 2, 0, 51, 255, 254, 1, 191, 2, 121, 0, 22, + 0, 41, 0, 173, 185, 0, 36, 255, 232, 179, 16, 0, 77, 36, 184, 255, 240, 64, 14, 15, + 0, 77, 32, 32, 15, 0, 77, 32, 16, 14, 0, 77, 22, 184, 255, 232, 179, 8, 0, 77, + 21, 184, 255, 232, 179, 16, 0, 77, 21, 184, 255, 232, 64, 40, 10, 0, 77, 17, 24, 10, + 0, 77, 17, 24, 8, 0, 77, 12, 48, 18, 0, 77, 12, 56, 17, 0, 77, 12, 16, 12, + 0, 77, 12, 24, 10, 11, 0, 76, 12, 16, 9, 0, 77, 2, 184, 255, 216, 179, 16, 0, + 77, 2, 184, 255, 224, 64, 30, 15, 0, 77, 7, 29, 140, 0, 43, 39, 140, 15, 4, 4, + 15, 42, 26, 23, 143, 7, 10, 10, 3, 34, 143, 20, 88, 4, 143, 3, 85, 0, 63, 237, + 63, 237, 17, 57, 47, 51, 237, 50, 1, 16, 198, 50, 47, 16, 237, 16, 222, 237, 50, 49, + 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 6, + 7, 39, 50, 54, 55, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 7, 50, + 54, 55, 54, 52, 53, 52, 46, 2, 35, 34, 14, 2, 21, 20, 22, 1, 191, 180, 181, 3, + 112, 137, 22, 24, 58, 32, 53, 72, 44, 20, 22, 46, 72, 50, 102, 104, 198, 32, 55, 26, + 1, 11, 27, 47, 36, 30, 40, 26, 11, 55, 1, 115, 185, 187, 1, 70, 89, 109, 11, 13, + 31, 53, 68, 38, 34, 71, 58, 38, 140, 183, 12, 11, 10, 18, 10, 39, 70, 52, 31, 25, + 37, 46, 21, 61, 63, 255, 255, 0, 177, 255, 244, 1, 68, 1, 208, 2, 38, 0, 17, 0, + 0, 1, 7, 0, 17, 0, 0, 1, 67, 0, 16, 64, 11, 1, 0, 17, 12, 5, 0, 80, + 1, 8, 14, 79, 43, 43, 52, 0, 0, 255, 255, 0, 125, 255, 112, 1, 71, 1, 208, 2, + 54, 0, 15, 232, 0, 0, 7, 0, 17, 0, 0, 1, 67, 0, 1, 0, 49, 0, 55, 1, + 202, 1, 198, 0, 6, 0, 108, 64, 11, 5, 24, 18, 0, 77, 2, 40, 18, 0, 77, 0, + 184, 255, 208, 64, 18, 17, 18, 0, 76, 6, 16, 17, 0, 77, 187, 5, 1, 4, 8, 19, + 0, 77, 3, 184, 255, 240, 182, 19, 0, 77, 180, 2, 1, 1, 184, 255, 240, 64, 22, 17, + 0, 77, 6, 1, 8, 0, 3, 7, 6, 5, 0, 1, 31, 2, 111, 2, 2, 2, 4, 3, + 0, 0, 25, 47, 50, 50, 221, 93, 24, 205, 25, 16, 221, 24, 205, 1, 16, 198, 50, 16, + 206, 50, 49, 48, 0, 43, 113, 43, 43, 113, 43, 1, 43, 43, 43, 55, 5, 7, 37, 53, + 37, 23, 141, 1, 61, 23, 254, 126, 1, 130, 23, 255, 131, 69, 164, 71, 164, 69, 0, 2, + 0, 46, 0, 132, 1, 199, 1, 137, 0, 3, 0, 7, 0, 38, 64, 19, 6, 1, 9, 7, + 0, 8, 4, 7, 3, 160, 0, 1, 224, 0, 1, 63, 0, 1, 0, 0, 47, 93, 93, 113, + 205, 222, 205, 1, 16, 198, 50, 16, 206, 50, 49, 48, 55, 33, 21, 33, 17, 33, 21, 33, + 46, 1, 153, 254, 103, 1, 153, 254, 103, 203, 71, 1, 5, 71, 0, 1, 0, 49, 0, 55, + 1, 202, 1, 198, 0, 6, 0, 112, 64, 11, 6, 48, 18, 0, 77, 6, 56, 17, 0, 77, + 5, 184, 255, 232, 179, 18, 0, 77, 5, 184, 255, 216, 179, 17, 0, 77, 4, 184, 255, 240, + 64, 43, 19, 0, 77, 179, 4, 1, 1, 16, 19, 0, 77, 187, 1, 1, 0, 16, 18, 0, + 77, 0, 48, 17, 0, 77, 6, 3, 8, 0, 5, 7, 5, 31, 4, 111, 4, 2, 4, 6, + 0, 1, 3, 2, 6, 0, 25, 47, 51, 51, 221, 24, 205, 25, 16, 221, 93, 24, 205, 1, + 16, 198, 50, 16, 206, 50, 49, 48, 0, 43, 43, 113, 43, 113, 43, 43, 43, 1, 43, 43, + 19, 55, 5, 21, 5, 39, 37, 49, 23, 1, 130, 254, 126, 23, 1, 61, 1, 129, 69, 164, + 71, 164, 69, 131, 0, 2, 0, 92, 255, 244, 1, 154, 2, 121, 0, 28, 0, 40, 0, 124, + 185, 0, 26, 255, 232, 179, 18, 0, 77, 26, 184, 255, 248, 179, 17, 0, 77, 25, 184, 255, + 232, 179, 15, 0, 77, 25, 184, 255, 240, 179, 14, 0, 77, 19, 184, 255, 232, 179, 12, 0, + 77, 19, 184, 255, 240, 179, 11, 0, 77, 19, 184, 255, 232, 64, 38, 10, 0, 77, 14, 16, + 18, 0, 77, 14, 24, 17, 0, 77, 6, 149, 21, 28, 149, 13, 1, 1, 38, 148, 32, 32, + 42, 41, 28, 35, 154, 29, 92, 12, 12, 9, 155, 16, 90, 0, 63, 237, 50, 47, 63, 253, + 206, 1, 17, 18, 57, 47, 237, 51, 47, 206, 253, 220, 237, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 55, 39, 52, 62, 2, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, + 50, 30, 2, 21, 20, 14, 4, 21, 7, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, + 185, 1, 44, 53, 44, 48, 47, 29, 57, 29, 23, 30, 76, 43, 51, 65, 38, 15, 23, 34, + 40, 34, 23, 28, 28, 39, 39, 28, 27, 40, 40, 211, 19, 43, 63, 54, 54, 35, 38, 46, + 14, 16, 64, 17, 19, 28, 43, 52, 24, 30, 47, 42, 38, 41, 48, 29, 223, 37, 31, 31, + 37, 37, 31, 31, 37, 0, 2, 0, 40, 255, 121, 1, 212, 2, 121, 0, 45, 0, 60, 0, + 195, 185, 0, 59, 255, 224, 180, 17, 18, 0, 76, 49, 184, 255, 232, 179, 18, 0, 77, 49, + 184, 255, 240, 179, 17, 0, 77, 44, 184, 255, 240, 64, 31, 10, 0, 77, 40, 32, 14, 0, + 77, 40, 16, 12, 13, 0, 76, 34, 16, 18, 0, 77, 34, 8, 17, 0, 77, 34, 16, 11, + 12, 0, 76, 25, 184, 255, 232, 179, 10, 0, 77, 25, 184, 255, 224, 179, 9, 0, 77, 20, + 184, 255, 248, 179, 16, 0, 77, 19, 184, 255, 240, 64, 60, 11, 0, 77, 16, 24, 18, 0, + 77, 16, 8, 17, 0, 77, 9, 8, 12, 0, 77, 9, 16, 11, 0, 77, 6, 8, 12, 0, + 77, 6, 16, 11, 0, 77, 14, 54, 115, 0, 30, 30, 0, 62, 46, 8, 22, 115, 37, 61, + 58, 124, 11, 17, 124, 42, 69, 51, 124, 3, 27, 124, 32, 0, 47, 253, 222, 237, 63, 253, + 222, 237, 1, 16, 214, 253, 222, 205, 16, 206, 50, 47, 16, 237, 50, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 6, 6, 35, + 34, 46, 2, 53, 52, 54, 51, 50, 22, 23, 52, 38, 35, 34, 14, 2, 21, 20, 30, 2, + 51, 50, 55, 23, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 21, 7, 20, 30, + 2, 51, 50, 54, 55, 53, 38, 38, 35, 34, 6, 1, 212, 30, 62, 26, 35, 60, 45, 25, + 96, 77, 8, 15, 8, 52, 57, 35, 58, 42, 24, 24, 51, 79, 55, 40, 43, 8, 53, 45, + 73, 107, 69, 34, 37, 65, 86, 50, 88, 102, 203, 5, 18, 33, 29, 8, 20, 11, 9, 17, + 8, 43, 47, 63, 12, 9, 23, 48, 75, 52, 93, 97, 1, 1, 63, 74, 34, 75, 118, 84, + 63, 117, 88, 53, 13, 67, 14, 65, 106, 136, 71, 103, 148, 94, 45, 119, 106, 168, 20, 46, + 39, 27, 2, 3, 245, 3, 2, 67, 0, 2, 0, 9, 0, 0, 1, 235, 2, 107, 0, 15, + 0, 22, 0, 228, 64, 23, 22, 24, 17, 18, 0, 76, 22, 16, 16, 0, 77, 22, 24, 13, + 14, 0, 76, 20, 16, 17, 0, 77, 19, 184, 255, 232, 179, 17, 0, 77, 18, 184, 255, 248, + 179, 25, 0, 77, 17, 184, 255, 248, 179, 26, 0, 77, 17, 184, 255, 232, 180, 17, 18, 0, + 76, 17, 184, 255, 240, 179, 16, 0, 77, 17, 184, 255, 240, 64, 15, 13, 14, 0, 76, 13, + 16, 30, 0, 77, 11, 16, 14, 0, 77, 8, 184, 255, 248, 179, 14, 0, 77, 2, 184, 255, + 240, 64, 64, 17, 0, 77, 1, 16, 17, 0, 77, 2, 19, 17, 16, 9, 3, 16, 3, 120, + 4, 9, 20, 4, 4, 9, 1, 20, 16, 10, 0, 16, 0, 120, 15, 10, 20, 15, 15, 10, + 16, 16, 4, 143, 15, 1, 15, 24, 4, 23, 1, 2, 121, 20, 19, 19, 3, 16, 10, 9, + 65, 4, 3, 68, 15, 0, 68, 0, 63, 50, 63, 51, 63, 51, 51, 18, 57, 47, 51, 237, + 50, 1, 16, 198, 16, 206, 93, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, 16, 196, + 196, 135, 24, 16, 43, 135, 125, 196, 16, 14, 196, 5, 196, 196, 49, 48, 1, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 33, 39, 35, 7, 35, 62, 3, 55, + 51, 30, 3, 23, 3, 6, 6, 7, 51, 38, 38, 1, 148, 37, 238, 36, 84, 17, 42, 49, + 54, 30, 102, 29, 53, 47, 42, 17, 242, 23, 54, 24, 200, 23, 53, 162, 162, 66, 154, 162, + 163, 74, 74, 163, 162, 154, 66, 2, 35, 63, 166, 88, 90, 167, 0, 3, 0, 54, 255, 251, + 1, 195, 2, 113, 0, 26, 0, 41, 0, 56, 0, 122, 64, 81, 123, 50, 1, 106, 50, 1, + 121, 46, 1, 106, 46, 1, 106, 38, 122, 38, 2, 107, 34, 123, 34, 2, 133, 25, 149, 25, + 2, 149, 23, 1, 129, 22, 1, 148, 19, 1, 133, 19, 1, 144, 14, 1, 20, 14, 132, 14, + 2, 5, 14, 1, 21, 48, 118, 16, 16, 36, 118, 24, 58, 42, 27, 115, 16, 5, 1, 5, + 57, 21, 27, 121, 42, 42, 31, 53, 124, 11, 65, 31, 124, 0, 67, 0, 63, 237, 63, 237, + 18, 57, 47, 237, 57, 1, 16, 214, 93, 237, 50, 16, 222, 237, 51, 47, 237, 50, 49, 48, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 23, 34, 46, 2, 39, 17, + 62, 3, 51, 50, 30, 2, 21, 20, 14, 2, 7, 22, 22, 21, 20, 6, 3, 21, 22, 22, + 51, 50, 62, 2, 53, 52, 46, 2, 35, 39, 51, 50, 62, 2, 53, 52, 46, 2, 35, 34, + 6, 7, 204, 15, 40, 40, 40, 15, 15, 39, 41, 39, 16, 46, 80, 59, 33, 14, 25, 33, + 19, 51, 69, 118, 197, 2, 41, 31, 31, 57, 44, 27, 25, 41, 54, 29, 84, 65, 25, 50, + 40, 24, 22, 36, 47, 26, 26, 39, 8, 5, 2, 3, 6, 4, 2, 88, 4, 6, 3, 2, + 16, 38, 62, 46, 22, 41, 36, 27, 7, 14, 75, 60, 92, 94, 1, 38, 221, 1, 3, 10, + 27, 44, 35, 31, 42, 25, 11, 68, 10, 22, 38, 29, 27, 38, 24, 10, 1, 2, 0, 1, + 0, 46, 255, 243, 1, 204, 2, 121, 0, 32, 0, 183, 185, 0, 27, 255, 240, 179, 18, 0, + 77, 27, 184, 255, 248, 179, 17, 0, 77, 27, 184, 255, 240, 180, 11, 12, 0, 76, 22, 184, + 255, 248, 179, 16, 0, 77, 22, 184, 255, 240, 179, 15, 0, 77, 21, 184, 255, 224, 179, 18, + 0, 77, 21, 184, 255, 232, 179, 17, 0, 77, 21, 184, 255, 232, 183, 11, 12, 0, 76, 40, + 21, 1, 15, 184, 255, 232, 179, 18, 0, 77, 15, 184, 255, 200, 179, 17, 0, 77, 15, 184, + 255, 224, 64, 11, 14, 16, 0, 76, 5, 24, 13, 14, 0, 76, 1, 184, 255, 240, 179, 18, + 0, 77, 1, 184, 255, 224, 180, 16, 17, 0, 76, 1, 184, 255, 232, 64, 23, 15, 0, 77, + 16, 16, 0, 34, 24, 118, 8, 33, 17, 17, 19, 124, 13, 69, 32, 32, 29, 124, 3, 70, + 0, 63, 237, 50, 47, 63, 237, 50, 47, 1, 16, 214, 237, 16, 206, 50, 47, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 93, 43, 43, 43, 43, 43, 43, 43, 43, 37, 6, 6, 35, 34, + 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 7, 38, 35, 34, 14, 2, 21, 20, 30, 2, + 51, 50, 54, 55, 1, 204, 35, 79, 45, 55, 93, 68, 39, 41, 70, 94, 53, 37, 77, 37, + 24, 66, 58, 41, 65, 46, 25, 27, 48, 67, 39, 29, 64, 34, 26, 20, 19, 39, 79, 122, + 83, 79, 120, 82, 42, 20, 23, 68, 38, 35, 66, 92, 57, 64, 94, 62, 30, 15, 19, 0, + 2, 0, 54, 255, 251, 1, 204, 2, 113, 0, 14, 0, 28, 0, 69, 64, 13, 24, 40, 17, + 18, 0, 76, 19, 24, 17, 18, 0, 76, 12, 184, 255, 240, 179, 13, 0, 77, 3, 184, 255, + 240, 64, 22, 13, 0, 77, 22, 118, 0, 30, 15, 115, 16, 7, 1, 7, 29, 25, 124, 10, + 65, 17, 124, 5, 67, 0, 63, 237, 63, 237, 1, 16, 214, 93, 237, 16, 222, 237, 49, 48, + 43, 43, 43, 43, 1, 20, 14, 2, 35, 34, 39, 17, 54, 51, 50, 30, 2, 1, 22, 51, + 50, 62, 2, 53, 52, 38, 35, 34, 6, 7, 1, 204, 43, 75, 103, 60, 62, 63, 63, 62, + 60, 103, 75, 43, 254, 188, 25, 26, 45, 70, 48, 26, 97, 95, 13, 25, 10, 1, 54, 86, + 120, 75, 34, 15, 2, 88, 15, 34, 76, 120, 254, 186, 3, 27, 59, 93, 65, 126, 118, 1, + 2, 0, 1, 0, 91, 0, 0, 1, 204, 2, 107, 0, 11, 0, 54, 64, 29, 7, 7, 3, + 3, 10, 13, 5, 9, 115, 0, 0, 16, 0, 2, 0, 12, 8, 121, 5, 5, 9, 4, 121, + 1, 65, 9, 121, 0, 68, 0, 63, 237, 63, 237, 18, 57, 47, 237, 1, 16, 214, 93, 237, + 50, 16, 206, 50, 47, 50, 47, 49, 48, 51, 17, 33, 21, 33, 21, 51, 21, 35, 21, 33, + 21, 91, 1, 91, 254, 247, 232, 232, 1, 31, 2, 107, 70, 190, 70, 219, 70, 0, 1, 0, + 91, 0, 0, 1, 186, 2, 107, 0, 9, 0, 47, 64, 25, 6, 6, 3, 11, 5, 9, 115, + 0, 0, 16, 0, 2, 0, 10, 8, 121, 5, 5, 0, 4, 121, 1, 65, 0, 68, 0, 63, + 63, 237, 18, 57, 47, 237, 1, 16, 214, 93, 237, 50, 16, 206, 50, 47, 49, 48, 51, 17, + 33, 21, 33, 21, 51, 21, 35, 17, 91, 1, 95, 254, 243, 237, 237, 2, 107, 70, 193, 69, + 254, 225, 0, 1, 0, 46, 255, 243, 1, 199, 2, 121, 0, 37, 0, 162, 185, 0, 32, 255, + 224, 180, 17, 18, 0, 76, 32, 184, 255, 232, 179, 12, 0, 77, 32, 184, 255, 240, 179, 11, + 0, 77, 31, 184, 255, 232, 179, 16, 0, 77, 27, 184, 255, 248, 179, 16, 0, 77, 26, 184, + 255, 232, 179, 18, 0, 77, 26, 184, 255, 224, 179, 17, 0, 77, 26, 184, 255, 232, 180, 11, + 12, 0, 76, 18, 184, 255, 224, 179, 18, 0, 77, 18, 184, 255, 192, 179, 17, 0, 77, 18, + 184, 255, 232, 64, 38, 13, 16, 0, 76, 7, 24, 14, 0, 77, 7, 16, 13, 0, 77, 20, + 20, 0, 115, 1, 39, 29, 118, 10, 38, 0, 0, 34, 21, 21, 24, 124, 15, 69, 37, 34, + 124, 5, 70, 0, 63, 237, 50, 63, 237, 50, 47, 17, 57, 47, 1, 16, 214, 237, 16, 222, + 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 51, + 17, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 30, 2, 23, 7, 38, 38, 35, + 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, 1, 117, 82, 19, 84, 57, 56, 92, 65, + 36, 40, 69, 92, 53, 34, 52, 37, 24, 6, 27, 23, 63, 35, 38, 65, 46, 26, 23, 44, + 65, 42, 29, 32, 8, 1, 49, 254, 222, 7, 21, 43, 82, 121, 77, 78, 120, 82, 43, 10, + 14, 15, 4, 69, 18, 23, 36, 66, 93, 57, 56, 92, 66, 37, 8, 4, 0, 1, 0, 45, + 0, 0, 1, 199, 2, 107, 0, 11, 0, 49, 64, 26, 11, 3, 115, 2, 13, 10, 6, 115, + 7, 12, 5, 121, 15, 10, 31, 10, 2, 10, 10, 7, 0, 8, 65, 3, 7, 68, 0, 63, + 51, 63, 51, 18, 57, 47, 93, 237, 1, 16, 214, 237, 50, 16, 222, 237, 50, 49, 48, 1, + 51, 17, 35, 17, 35, 17, 35, 17, 51, 17, 51, 1, 117, 82, 82, 246, 82, 82, 246, 2, + 107, 253, 149, 1, 32, 254, 224, 2, 107, 254, 251, 0, 1, 0, 89, 0, 0, 1, 155, 2, + 107, 0, 11, 0, 43, 64, 21, 8, 5, 6, 11, 2, 1, 115, 6, 6, 12, 13, 0, 7, + 121, 9, 65, 1, 6, 121, 4, 68, 0, 63, 237, 50, 63, 237, 50, 1, 17, 18, 57, 47, + 253, 205, 50, 16, 205, 50, 49, 48, 1, 17, 51, 21, 33, 53, 51, 17, 35, 53, 33, 21, + 1, 35, 120, 254, 190, 120, 120, 1, 66, 2, 37, 254, 33, 70, 70, 1, 223, 70, 70, 0, + 1, 0, 54, 255, 243, 1, 164, 2, 107, 0, 19, 0, 74, 64, 23, 16, 24, 15, 16, 0, + 76, 10, 24, 14, 0, 77, 10, 32, 12, 13, 0, 76, 10, 24, 11, 0, 77, 5, 184, 255, + 240, 64, 22, 17, 18, 0, 76, 18, 115, 3, 21, 0, 0, 11, 20, 12, 12, 15, 124, 8, + 70, 0, 121, 1, 65, 0, 63, 237, 63, 237, 50, 47, 1, 16, 198, 50, 47, 16, 222, 237, + 49, 48, 43, 43, 43, 43, 43, 19, 53, 33, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, + 22, 51, 50, 54, 53, 17, 127, 1, 37, 19, 47, 79, 60, 60, 82, 19, 33, 19, 63, 42, + 64, 63, 2, 37, 70, 254, 92, 44, 78, 57, 33, 34, 16, 67, 14, 32, 68, 81, 1, 86, + 0, 1, 0, 64, 0, 0, 1, 235, 2, 107, 0, 22, 0, 97, 64, 55, 3, 30, 82, 3, + 0, 9, 14, 9, 120, 8, 3, 20, 8, 8, 3, 22, 3, 0, 3, 120, 19, 22, 20, 19, + 19, 22, 0, 0, 8, 24, 19, 14, 115, 0, 16, 16, 16, 2, 16, 23, 0, 22, 65, 19, + 14, 3, 3, 16, 17, 65, 16, 68, 8, 9, 68, 0, 63, 51, 63, 63, 18, 57, 25, 47, + 51, 51, 24, 63, 51, 1, 16, 214, 93, 237, 50, 16, 206, 50, 47, 135, 16, 43, 135, 125, + 196, 135, 24, 16, 43, 135, 8, 43, 196, 49, 48, 1, 6, 6, 7, 30, 3, 23, 35, 46, + 3, 39, 17, 35, 17, 51, 17, 54, 54, 55, 1, 214, 49, 117, 68, 32, 72, 69, 61, 21, + 93, 25, 58, 65, 69, 35, 82, 82, 65, 119, 45, 2, 107, 73, 144, 72, 27, 72, 85, 96, + 50, 46, 88, 76, 63, 23, 254, 216, 2, 107, 254, 236, 67, 146, 63, 0, 1, 0, 91, 0, + 0, 1, 204, 2, 107, 0, 5, 0, 32, 64, 17, 0, 7, 5, 115, 0, 2, 16, 2, 2, + 2, 6, 3, 65, 5, 121, 2, 68, 0, 63, 237, 63, 1, 16, 214, 93, 237, 16, 206, 49, + 48, 37, 21, 33, 17, 51, 17, 1, 204, 254, 143, 82, 70, 70, 2, 107, 253, 219, 0, 1, + 0, 32, 0, 0, 1, 212, 2, 107, 0, 26, 0, 249, 185, 0, 26, 255, 248, 179, 25, 0, + 77, 26, 184, 255, 248, 179, 19, 0, 77, 26, 184, 255, 224, 179, 10, 0, 77, 24, 184, 255, + 248, 64, 26, 27, 28, 0, 76, 24, 8, 16, 0, 77, 23, 8, 14, 0, 77, 4, 13, 1, + 12, 12, 1, 3, 8, 27, 0, 77, 3, 184, 255, 248, 180, 15, 17, 0, 76, 3, 184, 255, + 240, 64, 78, 14, 0, 77, 1, 56, 10, 0, 77, 61, 1, 1, 44, 1, 1, 12, 1, 0, + 1, 123, 11, 12, 20, 11, 11, 12, 11, 6, 54, 26, 1, 37, 26, 1, 13, 26, 0, 26, + 123, 14, 13, 20, 14, 14, 13, 0, 0, 19, 6, 115, 2, 24, 29, 0, 77, 2, 32, 27, + 28, 0, 76, 2, 24, 26, 0, 77, 11, 2, 1, 70, 2, 1, 2, 5, 28, 14, 19, 115, + 25, 184, 255, 224, 64, 26, 26, 29, 0, 76, 3, 25, 1, 25, 20, 27, 14, 26, 65, 12, + 15, 0, 1, 0, 13, 13, 6, 20, 68, 11, 1, 65, 0, 63, 51, 63, 51, 51, 47, 51, + 113, 51, 63, 51, 1, 16, 214, 50, 113, 43, 237, 50, 16, 222, 50, 93, 113, 43, 43, 43, + 237, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, 1, 93, 93, 17, 51, 135, 24, 16, + 43, 135, 125, 196, 1, 93, 93, 49, 48, 43, 43, 43, 43, 113, 113, 43, 43, 43, 43, 43, + 43, 19, 19, 51, 22, 18, 23, 35, 46, 3, 39, 3, 35, 3, 14, 3, 7, 35, 62, 3, + 55, 51, 251, 96, 77, 20, 17, 7, 80, 1, 2, 3, 3, 2, 90, 72, 92, 1, 3, 3, + 3, 1, 80, 3, 8, 11, 15, 9, 76, 1, 55, 1, 52, 146, 254, 206, 167, 54, 126, 134, + 138, 65, 254, 230, 1, 26, 65, 137, 135, 126, 54, 76, 160, 158, 154, 71, 0, 1, 0, 55, + 0, 0, 1, 189, 2, 107, 0, 17, 0, 78, 64, 48, 26, 0, 1, 13, 0, 1, 38, 9, + 1, 4, 9, 20, 9, 2, 9, 0, 5, 0, 126, 14, 9, 20, 14, 9, 14, 115, 17, 19, + 5, 115, 16, 7, 1, 1, 7, 1, 7, 18, 15, 65, 5, 9, 65, 7, 68, 14, 0, 68, + 0, 63, 50, 63, 63, 51, 63, 1, 16, 214, 93, 93, 237, 16, 222, 253, 135, 43, 135, 125, + 196, 1, 93, 93, 93, 93, 49, 48, 33, 46, 3, 39, 17, 35, 17, 51, 30, 3, 23, 17, + 51, 17, 1, 105, 34, 60, 55, 54, 28, 75, 84, 41, 61, 51, 48, 30, 75, 83, 135, 118, + 105, 53, 254, 18, 2, 107, 75, 112, 105, 111, 73, 1, 220, 253, 149, 0, 2, 0, 29, 255, + 243, 1, 216, 2, 121, 0, 19, 0, 31, 0, 154, 185, 0, 30, 255, 232, 179, 14, 0, 77, + 30, 184, 255, 240, 64, 16, 13, 0, 77, 28, 24, 13, 14, 0, 76, 24, 24, 13, 14, 0, + 76, 22, 184, 255, 232, 179, 14, 0, 77, 22, 184, 255, 240, 64, 15, 13, 0, 77, 17, 24, + 15, 16, 0, 76, 17, 24, 8, 0, 77, 13, 184, 255, 232, 180, 15, 16, 0, 76, 13, 184, + 255, 232, 179, 8, 0, 77, 7, 184, 255, 232, 180, 15, 16, 0, 76, 7, 184, 255, 248, 64, + 35, 8, 0, 77, 3, 24, 15, 16, 0, 76, 3, 24, 8, 0, 77, 26, 118, 10, 33, 20, + 118, 0, 64, 11, 16, 72, 0, 32, 23, 124, 15, 70, 29, 124, 5, 69, 0, 63, 237, 63, + 237, 1, 16, 214, 43, 237, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 19, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, + 2, 55, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 29, 32, 58, 81, 50, 49, 82, + 58, 33, 33, 58, 82, 49, 50, 81, 58, 32, 84, 66, 69, 70, 70, 70, 70, 69, 66, 1, + 54, 83, 122, 79, 39, 39, 79, 122, 83, 83, 122, 80, 38, 38, 80, 122, 83, 122, 130, 130, + 122, 122, 130, 130, 0, 2, 0, 73, 0, 0, 1, 199, 2, 113, 0, 16, 0, 26, 0, 90, + 64, 17, 26, 16, 16, 0, 77, 26, 24, 15, 0, 77, 23, 24, 15, 16, 0, 76, 7, 184, + 255, 232, 179, 8, 0, 77, 2, 184, 255, 232, 64, 32, 8, 0, 77, 25, 118, 5, 28, 21, + 21, 10, 115, 0, 11, 16, 11, 32, 11, 3, 8, 11, 27, 9, 121, 21, 21, 0, 11, 68, + 17, 124, 0, 65, 0, 63, 237, 63, 18, 57, 47, 237, 1, 16, 214, 94, 93, 237, 50, 47, + 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 19, 50, 30, 2, 21, 20, 6, 35, 35, 21, + 35, 17, 62, 3, 23, 34, 6, 7, 21, 51, 50, 54, 53, 52, 235, 55, 83, 55, 27, 114, + 114, 72, 82, 18, 43, 43, 41, 23, 26, 48, 12, 68, 75, 73, 2, 113, 28, 51, 70, 43, + 97, 105, 231, 2, 98, 4, 6, 4, 1, 71, 1, 2, 250, 60, 69, 124, 0, 2, 0, 29, + 255, 91, 1, 216, 2, 120, 0, 28, 0, 40, 0, 207, 185, 0, 39, 255, 232, 179, 14, 0, + 77, 39, 184, 255, 224, 64, 24, 13, 0, 77, 37, 16, 14, 0, 77, 37, 32, 13, 0, 77, + 33, 16, 14, 0, 77, 33, 24, 13, 0, 77, 31, 184, 255, 240, 179, 14, 0, 77, 31, 184, + 255, 232, 64, 31, 13, 0, 77, 27, 40, 15, 16, 0, 76, 27, 8, 12, 0, 77, 27, 16, + 9, 10, 0, 76, 27, 24, 8, 0, 77, 13, 32, 13, 0, 77, 13, 184, 255, 232, 179, 8, + 0, 77, 7, 184, 255, 232, 64, 10, 15, 16, 0, 76, 7, 16, 13, 0, 77, 7, 184, 255, + 224, 64, 51, 8, 0, 77, 3, 24, 16, 0, 77, 3, 32, 15, 0, 77, 3, 24, 8, 0, + 77, 15, 118, 26, 26, 0, 35, 118, 10, 20, 20, 10, 42, 29, 118, 0, 64, 12, 16, 72, + 0, 41, 20, 124, 21, 32, 124, 26, 15, 70, 38, 124, 5, 69, 0, 63, 237, 63, 51, 237, + 220, 237, 1, 16, 214, 43, 237, 16, 206, 50, 47, 16, 237, 17, 57, 47, 237, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, + 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 7, 30, 3, 23, 7, 46, 3, 39, 38, + 38, 55, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 29, 32, 58, 81, 50, 49, 82, + 58, 33, 26, 48, 68, 41, 3, 28, 43, 55, 30, 19, 41, 75, 60, 42, 7, 81, 94, 84, + 66, 69, 70, 70, 70, 70, 69, 66, 1, 53, 83, 122, 79, 39, 39, 79, 122, 83, 74, 113, + 80, 46, 7, 20, 29, 21, 14, 4, 66, 7, 22, 36, 52, 38, 17, 155, 147, 122, 130, 130, + 122, 122, 130, 130, 0, 2, 0, 55, 0, 0, 1, 207, 2, 113, 0, 26, 0, 41, 0, 101, + 64, 61, 40, 32, 16, 0, 77, 35, 24, 16, 0, 77, 2, 32, 16, 0, 77, 3, 9, 12, + 9, 120, 8, 3, 20, 8, 8, 3, 12, 12, 0, 8, 8, 37, 118, 0, 43, 31, 17, 115, + 0, 18, 16, 18, 2, 18, 42, 12, 3, 16, 121, 31, 31, 18, 27, 124, 24, 65, 18, 68, + 8, 9, 68, 0, 63, 51, 63, 63, 237, 18, 57, 47, 237, 50, 50, 1, 16, 214, 93, 237, + 50, 16, 222, 237, 51, 47, 17, 51, 47, 135, 16, 43, 135, 125, 196, 49, 48, 1, 43, 43, + 43, 1, 20, 6, 7, 30, 3, 23, 35, 38, 38, 39, 6, 34, 35, 35, 21, 35, 17, 62, + 3, 51, 50, 22, 39, 34, 6, 7, 21, 51, 50, 62, 2, 53, 52, 46, 2, 1, 175, 60, + 51, 15, 37, 38, 37, 16, 88, 30, 71, 33, 6, 23, 4, 70, 83, 15, 39, 41, 40, 16, + 112, 113, 218, 23, 43, 9, 53, 36, 57, 41, 22, 22, 36, 49, 1, 174, 57, 87, 24, 24, + 61, 69, 73, 35, 72, 132, 41, 1, 244, 2, 98, 4, 6, 3, 2, 98, 27, 1, 2, 239, + 10, 27, 47, 38, 36, 46, 27, 11, 0, 1, 0, 55, 255, 243, 1, 189, 2, 121, 0, 49, + 0, 216, 64, 11, 44, 24, 14, 0, 77, 44, 16, 13, 0, 77, 39, 184, 255, 232, 179, 10, + 0, 77, 39, 184, 255, 240, 179, 9, 0, 77, 36, 184, 255, 240, 179, 13, 0, 77, 36, 184, + 255, 208, 179, 10, 0, 77, 35, 184, 255, 240, 179, 15, 0, 77, 27, 184, 255, 232, 179, 17, + 0, 77, 26, 184, 255, 224, 179, 18, 0, 77, 20, 184, 255, 232, 179, 18, 0, 77, 20, 184, + 255, 240, 179, 17, 0, 77, 20, 184, 255, 224, 180, 15, 16, 0, 76, 20, 184, 255, 232, 179, + 14, 0, 77, 19, 184, 255, 224, 64, 62, 14, 0, 77, 11, 16, 14, 15, 0, 76, 11, 32, + 9, 10, 0, 76, 2, 16, 17, 0, 77, 1, 40, 18, 0, 77, 21, 21, 3, 118, 38, 51, + 46, 46, 28, 118, 0, 13, 16, 13, 2, 13, 50, 89, 8, 1, 8, 41, 25, 33, 16, 47, + 47, 0, 124, 41, 70, 22, 22, 25, 124, 16, 69, 0, 63, 237, 50, 47, 63, 237, 50, 47, + 17, 57, 17, 18, 57, 93, 1, 16, 214, 93, 237, 51, 47, 16, 222, 237, 51, 47, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 50, + 54, 53, 52, 46, 2, 39, 46, 3, 53, 52, 54, 51, 50, 30, 2, 23, 7, 38, 38, 35, + 34, 6, 21, 20, 30, 2, 23, 30, 3, 21, 20, 6, 35, 34, 46, 2, 39, 55, 22, 22, + 234, 63, 66, 24, 40, 50, 26, 30, 55, 43, 25, 102, 91, 25, 49, 42, 33, 10, 26, 20, + 70, 43, 45, 66, 19, 33, 44, 26, 38, 63, 45, 25, 109, 102, 33, 58, 45, 34, 9, 25, + 20, 78, 58, 48, 48, 29, 41, 31, 23, 10, 12, 30, 40, 54, 37, 81, 91, 7, 10, 14, + 7, 69, 12, 24, 45, 45, 26, 36, 27, 22, 11, 16, 32, 44, 60, 43, 81, 87, 9, 14, + 14, 6, 68, 11, 29, 0, 1, 0, 39, 0, 0, 1, 205, 2, 107, 0, 7, 0, 32, 64, + 15, 1, 3, 115, 6, 4, 4, 9, 8, 2, 5, 121, 7, 65, 4, 68, 0, 63, 63, 237, + 50, 1, 17, 18, 57, 47, 206, 253, 206, 49, 48, 1, 21, 35, 17, 35, 17, 35, 53, 1, + 205, 170, 82, 170, 2, 107, 70, 253, 219, 2, 37, 70, 0, 1, 0, 48, 255, 243, 1, 196, + 2, 107, 0, 25, 0, 74, 64, 13, 15, 32, 17, 18, 0, 76, 15, 16, 15, 16, 0, 76, + 11, 184, 255, 216, 179, 18, 0, 77, 11, 184, 255, 224, 179, 17, 0, 77, 11, 184, 255, 240, + 64, 19, 15, 16, 0, 76, 18, 115, 21, 27, 8, 115, 5, 26, 19, 6, 65, 13, 124, 0, + 70, 0, 63, 237, 63, 51, 1, 16, 214, 237, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, + 23, 34, 46, 2, 53, 17, 51, 17, 20, 30, 2, 51, 50, 62, 2, 53, 17, 51, 17, 20, + 14, 2, 250, 55, 77, 48, 22, 82, 17, 31, 44, 28, 28, 44, 31, 17, 82, 22, 48, 77, + 13, 32, 58, 84, 52, 1, 150, 254, 115, 47, 63, 38, 16, 16, 38, 63, 47, 1, 141, 254, + 106, 52, 84, 58, 32, 0, 1, 0, 13, 0, 0, 1, 232, 2, 107, 0, 22, 0, 65, 64, + 35, 5, 0, 5, 10, 0, 120, 22, 17, 20, 22, 22, 17, 5, 10, 10, 120, 11, 16, 20, + 11, 16, 11, 24, 22, 23, 0, 22, 65, 16, 5, 17, 68, 10, 11, 65, 0, 63, 51, 63, + 51, 51, 63, 51, 1, 16, 198, 16, 222, 135, 43, 125, 16, 196, 135, 24, 16, 43, 8, 125, + 16, 196, 49, 48, 19, 30, 3, 23, 62, 3, 55, 51, 14, 3, 7, 35, 46, 3, 39, 102, + 12, 37, 41, 42, 18, 16, 43, 42, 37, 12, 86, 8, 36, 50, 61, 33, 102, 31, 59, 50, + 36, 9, 2, 107, 63, 149, 149, 136, 51, 51, 138, 149, 148, 62, 40, 135, 167, 187, 90, 90, + 186, 167, 136, 40, 0, 1, 0, 32, 0, 0, 1, 212, 2, 107, 0, 20, 1, 223, 185, 0, + 19, 255, 224, 179, 25, 0, 77, 19, 184, 255, 232, 179, 23, 0, 77, 19, 184, 255, 240, 64, + 24, 20, 0, 77, 19, 40, 18, 0, 77, 19, 24, 17, 0, 77, 19, 16, 16, 0, 77, 19, + 40, 13, 0, 77, 18, 184, 255, 248, 179, 13, 0, 77, 18, 184, 255, 232, 64, 20, 11, 12, + 0, 76, 10, 32, 25, 0, 77, 10, 16, 23, 0, 77, 10, 16, 21, 0, 77, 10, 184, 255, + 232, 179, 14, 0, 77, 10, 184, 255, 240, 179, 13, 0, 77, 9, 184, 255, 240, 179, 25, 0, + 77, 9, 184, 255, 240, 64, 35, 23, 0, 77, 9, 32, 13, 14, 0, 76, 1, 16, 13, 0, + 77, 1, 40, 12, 0, 77, 1, 16, 11, 0, 77, 0, 32, 25, 0, 77, 0, 16, 23, 0, + 77, 0, 184, 255, 224, 180, 17, 18, 0, 76, 0, 184, 255, 232, 179, 16, 0, 77, 0, 184, + 255, 224, 179, 15, 0, 77, 0, 184, 255, 248, 179, 14, 0, 77, 0, 184, 255, 200, 179, 13, + 0, 77, 20, 184, 255, 176, 179, 25, 0, 77, 20, 184, 255, 208, 179, 24, 0, 77, 20, 184, + 255, 160, 179, 23, 0, 77, 20, 184, 255, 160, 179, 21, 0, 77, 20, 184, 255, 176, 179, 20, + 0, 77, 20, 184, 255, 144, 179, 19, 0, 77, 20, 184, 255, 152, 179, 14, 0, 77, 20, 184, + 255, 208, 64, 9, 13, 0, 77, 11, 88, 19, 0, 77, 11, 184, 255, 208, 64, 9, 14, 0, + 77, 8, 56, 19, 0, 77, 8, 184, 255, 232, 64, 94, 14, 0, 77, 1, 6, 7, 8, 1, + 8, 6, 120, 7, 8, 20, 7, 8, 7, 8, 124, 18, 1, 110, 18, 1, 18, 13, 12, 11, + 18, 11, 13, 120, 12, 11, 20, 12, 11, 12, 10, 31, 82, 19, 20, 19, 123, 11, 10, 20, + 11, 11, 10, 9, 31, 82, 0, 20, 0, 123, 8, 9, 20, 8, 8, 9, 187, 8, 1, 8, + 21, 180, 11, 1, 11, 22, 20, 20, 21, 22, 11, 19, 68, 13, 12, 65, 20, 10, 9, 9, + 7, 6, 65, 8, 0, 68, 0, 63, 50, 63, 51, 51, 47, 51, 51, 63, 51, 63, 51, 1, + 17, 18, 57, 61, 47, 18, 57, 93, 18, 57, 93, 135, 24, 16, 43, 135, 43, 196, 135, 24, + 16, 43, 135, 43, 196, 1, 24, 213, 135, 43, 16, 0, 193, 135, 5, 125, 16, 196, 1, 113, + 113, 24, 16, 213, 135, 43, 16, 0, 193, 135, 5, 125, 16, 196, 49, 48, 0, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 51, 35, 46, + 3, 39, 51, 19, 19, 51, 19, 19, 51, 14, 3, 7, 35, 3, 153, 77, 9, 13, 11, 8, + 3, 80, 11, 90, 72, 92, 11, 80, 3, 9, 12, 14, 8, 76, 97, 61, 147, 160, 168, 83, + 253, 251, 1, 26, 254, 230, 2, 5, 84, 168, 159, 146, 62, 1, 52, 0, 1, 0, 25, 0, + 0, 1, 219, 2, 107, 0, 21, 0, 108, 64, 65, 18, 21, 14, 8, 17, 15, 9, 16, 21, + 14, 12, 9, 16, 13, 0, 5, 8, 17, 13, 0, 8, 16, 9, 16, 120, 17, 8, 20, 17, + 8, 17, 17, 21, 1, 13, 0, 0, 14, 21, 14, 120, 13, 0, 20, 13, 13, 0, 21, 23, + 13, 13, 9, 22, 17, 16, 65, 14, 13, 65, 9, 8, 68, 21, 0, 68, 0, 63, 50, 63, + 51, 63, 51, 63, 51, 1, 16, 198, 50, 47, 16, 206, 135, 16, 43, 135, 125, 196, 135, 14, + 196, 1, 17, 51, 24, 47, 135, 43, 135, 125, 196, 15, 15, 15, 15, 49, 48, 33, 46, 3, + 39, 6, 6, 7, 35, 54, 54, 55, 3, 51, 23, 55, 51, 3, 22, 22, 23, 1, 128, 11, + 30, 34, 39, 21, 35, 70, 30, 89, 33, 88, 50, 161, 91, 121, 130, 89, 164, 48, 90, 35, + 27, 68, 72, 72, 31, 56, 145, 69, 74, 173, 80, 1, 36, 237, 237, 254, 223, 78, 168, 84, + 0, 1, 0, 13, 0, 0, 1, 232, 2, 107, 0, 16, 0, 77, 64, 41, 8, 11, 8, 5, + 11, 120, 12, 15, 20, 12, 15, 12, 15, 115, 1, 8, 5, 5, 120, 4, 1, 20, 4, 1, + 4, 1, 1, 17, 18, 12, 11, 65, 15, 8, 1, 1, 5, 4, 65, 0, 68, 0, 63, 63, + 51, 57, 17, 51, 51, 63, 51, 1, 17, 18, 57, 47, 221, 135, 43, 125, 16, 196, 1, 24, + 16, 253, 221, 135, 43, 8, 125, 16, 196, 49, 48, 51, 53, 38, 38, 39, 51, 22, 22, 23, + 54, 54, 55, 51, 6, 6, 7, 21, 210, 61, 99, 37, 92, 29, 75, 43, 46, 71, 29, 90, + 38, 98, 60, 230, 100, 190, 99, 84, 153, 81, 85, 153, 80, 98, 186, 103, 232, 0, 1, 0, + 54, 0, 0, 1, 199, 2, 107, 0, 17, 0, 55, 64, 29, 5, 14, 9, 14, 120, 0, 5, + 20, 0, 0, 5, 6, 6, 0, 19, 15, 15, 9, 18, 0, 14, 121, 16, 65, 9, 5, 121, + 8, 68, 0, 63, 237, 50, 63, 237, 50, 1, 16, 198, 50, 47, 16, 206, 50, 47, 135, 16, + 43, 135, 125, 196, 49, 48, 1, 14, 3, 7, 33, 21, 33, 53, 62, 3, 55, 33, 53, 33, + 1, 191, 32, 79, 82, 77, 29, 1, 51, 254, 111, 31, 75, 78, 78, 36, 254, 229, 1, 122, + 2, 43, 44, 121, 132, 133, 55, 70, 54, 63, 133, 128, 120, 51, 70, 0, 1, 0, 143, 255, + 91, 1, 126, 2, 187, 0, 7, 0, 27, 64, 11, 2, 2, 5, 4, 7, 8, 4, 7, 3, + 0, 90, 0, 63, 205, 47, 205, 1, 16, 214, 221, 205, 50, 47, 49, 48, 19, 51, 21, 35, + 17, 51, 21, 35, 143, 239, 161, 161, 239, 2, 187, 65, 253, 34, 65, 0, 1, 0, 70, 255, + 91, 1, 174, 2, 187, 0, 3, 0, 33, 64, 16, 1, 3, 0, 3, 141, 2, 1, 20, 2, + 1, 2, 0, 3, 2, 1, 0, 0, 47, 50, 47, 51, 1, 47, 47, 135, 43, 135, 125, 196, + 49, 48, 19, 51, 1, 35, 70, 83, 1, 21, 84, 2, 187, 252, 160, 0, 1, 0, 118, 255, + 91, 1, 101, 2, 187, 0, 7, 0, 27, 64, 11, 5, 5, 2, 3, 0, 9, 4, 7, 90, + 3, 0, 0, 47, 205, 63, 205, 1, 16, 214, 221, 205, 50, 47, 49, 48, 5, 35, 53, 51, + 17, 35, 53, 51, 1, 101, 239, 161, 161, 239, 165, 65, 2, 222, 65, 0, 1, 0, 40, 1, + 25, 1, 204, 2, 107, 0, 6, 0, 65, 185, 0, 4, 255, 240, 64, 33, 14, 0, 77, 2, + 16, 14, 0, 77, 3, 56, 16, 0, 77, 3, 48, 15, 0, 77, 3, 32, 14, 0, 77, 4, + 5, 3, 2, 1, 3, 2, 4, 3, 6, 0, 47, 51, 205, 50, 1, 25, 47, 221, 24, 205, + 25, 16, 221, 24, 205, 49, 48, 0, 43, 43, 43, 1, 43, 43, 1, 19, 7, 39, 7, 39, + 19, 1, 31, 173, 66, 144, 144, 66, 173, 2, 107, 254, 208, 34, 252, 252, 34, 1, 48, 0, + 1, 0, 8, 255, 91, 1, 236, 255, 161, 0, 3, 0, 15, 180, 1, 0, 3, 0, 4, 0, + 16, 222, 205, 1, 47, 47, 49, 48, 23, 33, 21, 33, 8, 1, 228, 254, 28, 95, 70, 0, + 1, 0, 163, 2, 6, 1, 74, 2, 181, 0, 3, 0, 24, 64, 9, 0, 3, 2, 1, 3, + 0, 128, 1, 2, 0, 47, 51, 26, 205, 50, 1, 47, 51, 205, 50, 49, 48, 19, 23, 7, + 39, 216, 114, 42, 125, 2, 181, 138, 37, 122, 0, 2, 0, 58, 255, 245, 1, 176, 1, 219, + 0, 14, 0, 48, 0, 115, 64, 22, 40, 24, 18, 0, 77, 31, 24, 10, 11, 0, 76, 27, + 32, 11, 0, 77, 27, 24, 10, 0, 77, 18, 184, 255, 232, 180, 10, 12, 0, 76, 18, 184, + 255, 224, 180, 8, 9, 0, 76, 10, 184, 255, 232, 64, 36, 17, 18, 0, 76, 4, 36, 127, + 20, 50, 46, 46, 12, 130, 29, 49, 7, 137, 0, 34, 16, 34, 2, 8, 34, 34, 15, 0, + 136, 24, 81, 45, 45, 42, 136, 15, 80, 0, 63, 237, 50, 47, 63, 237, 17, 57, 47, 94, + 93, 237, 1, 16, 214, 237, 51, 47, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, + 43, 55, 50, 54, 55, 53, 38, 38, 35, 34, 14, 2, 21, 20, 22, 19, 50, 30, 2, 21, + 17, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 23, 53, 52, 46, 2, 35, 34, + 6, 7, 39, 54, 54, 255, 31, 49, 16, 16, 45, 25, 23, 44, 34, 22, 61, 44, 52, 71, + 44, 18, 29, 95, 50, 38, 72, 56, 34, 35, 55, 71, 36, 49, 47, 9, 25, 43, 34, 43, + 64, 17, 10, 17, 79, 59, 4, 3, 138, 5, 6, 7, 18, 29, 22, 45, 35, 1, 160, 26, + 46, 66, 39, 254, 222, 5, 14, 13, 33, 58, 45, 40, 55, 34, 15, 11, 23, 21, 39, 32, + 19, 12, 6, 68, 8, 12, 0, 2, 0, 71, 255, 245, 1, 204, 2, 181, 0, 18, 0, 33, + 0, 126, 64, 42, 28, 48, 16, 0, 77, 28, 32, 15, 0, 77, 28, 24, 14, 0, 77, 23, + 48, 16, 0, 77, 23, 56, 15, 0, 77, 23, 24, 13, 14, 0, 76, 10, 16, 16, 0, 77, + 10, 24, 15, 0, 77, 6, 184, 255, 232, 179, 8, 0, 77, 5, 184, 255, 240, 179, 10, 0, + 77, 5, 184, 255, 232, 64, 29, 9, 0, 77, 25, 130, 8, 35, 0, 19, 127, 0, 16, 1, + 8, 16, 34, 17, 18, 77, 22, 136, 13, 81, 33, 30, 136, 0, 3, 80, 0, 63, 51, 237, + 50, 63, 237, 63, 51, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, + 34, 38, 39, 17, 55, 17, 22, 22, 51, 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 154, + 15, 57, 35, 47, 74, 51, 27, 32, 58, 82, 50, 55, 86, 26, 83, 19, 38, 17, 69, 78, + 14, 30, 47, 33, 29, 54, 14, 1, 191, 9, 19, 36, 64, 89, 54, 56, 90, 63, 34, 16, + 8, 2, 154, 14, 253, 147, 5, 5, 85, 85, 36, 63, 45, 26, 23, 13, 0, 1, 0, 49, + 255, 245, 1, 195, 1, 219, 0, 33, 0, 67, 185, 0, 20, 255, 224, 180, 13, 14, 0, 76, + 14, 184, 255, 224, 64, 29, 13, 14, 0, 76, 8, 8, 26, 35, 17, 130, 15, 0, 31, 0, + 2, 0, 34, 25, 25, 22, 136, 29, 81, 9, 9, 12, 136, 5, 80, 0, 63, 237, 50, 47, + 63, 237, 50, 47, 1, 16, 214, 93, 237, 16, 206, 50, 47, 49, 48, 43, 43, 55, 52, 62, + 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, + 23, 6, 6, 35, 34, 46, 2, 49, 40, 70, 93, 53, 34, 67, 38, 19, 33, 55, 28, 36, + 64, 47, 28, 26, 47, 66, 40, 32, 59, 35, 12, 35, 72, 42, 56, 93, 67, 37, 231, 63, + 92, 60, 29, 9, 12, 71, 12, 7, 19, 41, 65, 46, 44, 63, 41, 20, 7, 12, 69, 13, + 11, 31, 60, 91, 0, 2, 0, 40, 255, 245, 1, 173, 2, 181, 0, 14, 0, 33, 0, 97, + 64, 18, 28, 32, 15, 16, 0, 76, 27, 16, 10, 0, 77, 27, 24, 8, 9, 0, 76, 10, + 184, 255, 216, 179, 14, 0, 77, 10, 184, 255, 240, 179, 13, 0, 77, 5, 184, 255, 240, 64, + 30, 14, 0, 77, 33, 14, 127, 17, 35, 8, 130, 25, 64, 9, 12, 72, 25, 34, 0, 3, + 136, 33, 30, 80, 11, 136, 20, 81, 15, 16, 77, 0, 63, 51, 63, 237, 63, 51, 237, 50, + 1, 16, 214, 43, 237, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 1, 38, 38, + 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 17, 55, 17, 6, 6, 35, 34, 46, 2, + 53, 52, 62, 2, 51, 50, 22, 23, 1, 90, 14, 54, 29, 33, 47, 30, 14, 76, 61, 31, + 43, 10, 83, 27, 84, 56, 50, 82, 58, 32, 27, 52, 73, 47, 37, 56, 14, 1, 110, 13, + 23, 26, 45, 63, 36, 81, 88, 6, 3, 2, 95, 14, 253, 88, 8, 16, 34, 63, 90, 56, + 54, 89, 64, 36, 18, 10, 0, 2, 0, 40, 255, 245, 1, 199, 1, 219, 0, 24, 0, 33, + 0, 207, 185, 0, 30, 255, 216, 180, 15, 16, 0, 76, 30, 184, 255, 224, 64, 14, 14, 0, + 77, 27, 24, 16, 0, 77, 27, 16, 15, 0, 77, 22, 184, 255, 232, 179, 16, 0, 77, 22, + 184, 255, 240, 64, 9, 15, 0, 77, 22, 16, 8, 0, 77, 18, 184, 255, 240, 179, 15, 0, + 77, 17, 184, 255, 224, 179, 15, 0, 77, 7, 184, 255, 232, 179, 16, 0, 77, 7, 184, 255, + 208, 179, 15, 0, 77, 7, 184, 255, 224, 180, 13, 14, 0, 76, 2, 184, 255, 232, 179, 9, + 0, 77, 2, 184, 255, 224, 179, 8, 0, 77, 1, 184, 255, 216, 179, 18, 0, 77, 1, 184, + 255, 208, 179, 17, 0, 77, 1, 184, 255, 240, 64, 35, 10, 0, 77, 25, 130, 4, 12, 12, + 4, 35, 33, 5, 130, 20, 64, 9, 12, 72, 20, 34, 5, 134, 33, 33, 0, 11, 11, 8, + 136, 15, 81, 28, 136, 0, 80, 0, 63, 237, 63, 237, 50, 47, 17, 57, 47, 237, 1, 16, + 214, 43, 237, 50, 16, 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 50, 22, 21, 21, 33, 22, 22, 51, 50, 54, + 55, 23, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 23, 52, 38, 35, 34, 14, 2, 7, + 1, 3, 94, 102, 254, 180, 5, 85, 77, 44, 62, 16, 11, 15, 78, 49, 60, 91, 60, 30, + 38, 62, 78, 153, 62, 51, 29, 47, 34, 20, 3, 1, 219, 117, 119, 29, 72, 75, 14, 8, + 70, 8, 18, 37, 64, 89, 52, 62, 92, 60, 30, 198, 59, 69, 22, 36, 46, 24, 0, 1, + 0, 63, 0, 0, 1, 226, 2, 181, 0, 27, 0, 86, 185, 0, 20, 255, 240, 179, 17, 0, + 77, 19, 184, 255, 224, 64, 42, 18, 0, 77, 7, 16, 12, 0, 77, 7, 24, 10, 0, 77, + 13, 13, 25, 29, 23, 26, 127, 4, 1, 0, 2, 1, 8, 2, 28, 14, 14, 17, 136, 10, + 77, 26, 1, 133, 23, 4, 73, 0, 74, 0, 63, 63, 51, 237, 50, 63, 237, 50, 47, 1, + 16, 214, 94, 93, 213, 50, 237, 50, 16, 206, 50, 47, 49, 48, 43, 43, 43, 43, 51, 17, + 35, 53, 51, 53, 52, 62, 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 21, 21, + 51, 21, 35, 17, 161, 98, 98, 30, 49, 65, 36, 36, 73, 32, 15, 22, 66, 34, 21, 37, + 28, 16, 187, 187, 1, 139, 69, 42, 54, 71, 44, 18, 16, 11, 71, 11, 16, 11, 27, 45, + 34, 41, 69, 254, 117, 0, 2, 0, 40, 255, 88, 1, 173, 1, 219, 0, 30, 0, 45, 0, + 194, 185, 0, 40, 255, 224, 179, 16, 0, 77, 40, 184, 255, 232, 179, 15, 0, 77, 40, 184, + 255, 240, 179, 14, 0, 77, 35, 184, 255, 208, 179, 16, 0, 77, 35, 184, 255, 216, 179, 15, + 0, 77, 35, 184, 255, 240, 179, 14, 0, 77, 35, 184, 255, 232, 179, 13, 0, 77, 35, 184, + 255, 240, 64, 9, 12, 0, 77, 28, 24, 16, 0, 77, 18, 184, 255, 240, 180, 17, 18, 0, + 76, 18, 184, 255, 224, 180, 8, 9, 0, 76, 10, 184, 255, 240, 64, 57, 15, 16, 0, 76, + 10, 16, 9, 0, 77, 10, 24, 8, 0, 77, 6, 24, 9, 0, 77, 6, 32, 8, 0, 77, + 45, 30, 127, 17, 47, 37, 130, 8, 23, 23, 8, 46, 42, 136, 15, 3, 31, 3, 2, 8, + 3, 3, 46, 24, 24, 27, 136, 20, 75, 34, 136, 13, 80, 0, 63, 237, 63, 237, 50, 47, + 17, 51, 47, 94, 93, 237, 1, 16, 198, 50, 47, 16, 237, 16, 222, 237, 50, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 6, 6, 35, 34, + 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 17, 20, 6, 35, 34, 38, 39, 55, 22, 22, + 51, 50, 54, 53, 17, 38, 38, 35, 34, 6, 21, 20, 30, 2, 51, 50, 54, 55, 1, 90, + 14, 58, 38, 41, 71, 53, 31, 29, 55, 80, 51, 60, 85, 29, 109, 110, 45, 73, 28, 15, + 26, 67, 40, 72, 62, 12, 42, 36, 64, 67, 19, 33, 42, 24, 31, 55, 17, 43, 8, 18, + 27, 55, 85, 58, 51, 85, 62, 35, 17, 8, 254, 98, 108, 96, 14, 10, 73, 11, 14, 58, + 65, 1, 108, 4, 7, 88, 73, 40, 57, 37, 17, 18, 12, 0, 1, 0, 71, 0, 0, 1, + 176, 2, 181, 0, 21, 0, 96, 64, 21, 16, 32, 18, 0, 77, 16, 40, 17, 0, 77, 16, + 24, 16, 0, 77, 16, 16, 15, 0, 77, 9, 184, 255, 216, 179, 8, 0, 77, 8, 184, 255, + 232, 179, 10, 0, 77, 8, 184, 255, 216, 64, 26, 9, 0, 77, 13, 127, 12, 23, 3, 21, + 127, 0, 0, 1, 8, 0, 22, 17, 136, 6, 80, 1, 2, 77, 13, 0, 74, 0, 63, 50, + 63, 51, 63, 237, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 51, 17, 55, 21, 54, 54, 51, 50, 30, 2, 21, 17, 35, 53, 52, 38, 35, + 34, 6, 7, 17, 71, 83, 20, 50, 24, 53, 71, 42, 18, 82, 48, 62, 26, 49, 11, 2, + 167, 14, 236, 8, 9, 31, 56, 78, 47, 254, 250, 244, 86, 71, 11, 5, 254, 127, 0, 2, + 0, 54, 255, 245, 1, 194, 2, 158, 0, 11, 0, 33, 0, 68, 64, 41, 31, 24, 11, 13, + 0, 76, 31, 40, 10, 0, 77, 31, 32, 9, 0, 77, 3, 131, 9, 15, 127, 12, 12, 13, + 23, 35, 13, 34, 22, 22, 19, 136, 28, 81, 6, 138, 0, 12, 133, 15, 73, 0, 63, 237, + 222, 237, 63, 237, 50, 47, 1, 16, 198, 16, 206, 17, 57, 47, 253, 212, 237, 49, 48, 43, + 43, 43, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 7, 35, 53, 51, 17, 20, + 22, 51, 50, 54, 55, 23, 14, 3, 35, 34, 46, 2, 53, 209, 26, 38, 38, 26, 27, 37, + 37, 48, 134, 216, 38, 38, 29, 49, 14, 12, 6, 22, 29, 35, 19, 44, 58, 35, 14, 2, + 24, 36, 31, 31, 36, 36, 31, 31, 36, 141, 69, 254, 227, 69, 47, 14, 8, 70, 3, 9, + 8, 6, 24, 48, 71, 47, 0, 2, 0, 71, 255, 86, 1, 128, 2, 158, 0, 11, 0, 31, + 0, 57, 185, 0, 17, 255, 232, 64, 28, 9, 10, 0, 76, 9, 131, 3, 3, 30, 127, 15, + 33, 23, 23, 12, 32, 24, 27, 136, 20, 82, 6, 138, 0, 31, 133, 14, 73, 0, 63, 237, + 222, 237, 63, 237, 50, 1, 16, 198, 50, 47, 16, 222, 237, 50, 47, 237, 49, 48, 43, 1, + 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 7, 53, 33, 17, 20, 14, 2, 35, 34, + 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, 1, 52, 26, 38, 38, 26, 27, 37, 37, 221, + 1, 14, 27, 45, 59, 33, 38, 77, 34, 25, 25, 61, 28, 40, 52, 2, 24, 36, 31, 31, + 36, 36, 31, 31, 36, 141, 69, 254, 53, 48, 67, 42, 18, 16, 17, 70, 12, 17, 41, 59, + 1, 135, 0, 1, 0, 71, 0, 0, 1, 222, 2, 181, 0, 22, 0, 101, 64, 54, 6, 0, + 5, 0, 129, 11, 6, 20, 11, 0, 20, 11, 6, 19, 16, 0, 20, 19, 20, 0, 129, 16, + 19, 20, 16, 19, 0, 16, 20, 20, 5, 24, 16, 11, 127, 0, 13, 1, 8, 13, 23, 11, + 16, 5, 20, 73, 14, 15, 77, 13, 74, 5, 6, 74, 0, 63, 51, 63, 63, 51, 63, 18, + 57, 57, 1, 16, 214, 94, 93, 237, 50, 16, 206, 50, 47, 16, 193, 135, 4, 43, 16, 0, + 193, 135, 5, 125, 16, 196, 135, 8, 24, 16, 43, 135, 5, 125, 196, 49, 48, 55, 30, 3, + 23, 35, 46, 3, 39, 21, 35, 17, 55, 17, 54, 54, 55, 51, 6, 6, 238, 27, 68, 67, + 60, 18, 98, 19, 56, 63, 63, 25, 83, 83, 55, 110, 44, 97, 43, 121, 255, 20, 61, 70, + 73, 31, 31, 65, 60, 50, 17, 223, 2, 167, 14, 254, 89, 48, 95, 51, 51, 108, 0, 1, + 0, 54, 255, 245, 1, 194, 2, 176, 0, 23, 0, 69, 64, 44, 3, 24, 14, 0, 77, 3, + 32, 13, 0, 77, 3, 24, 12, 0, 77, 3, 32, 11, 0, 77, 3, 32, 9, 0, 77, 9, + 127, 6, 6, 7, 19, 25, 7, 24, 6, 133, 9, 77, 18, 18, 15, 136, 0, 81, 0, 63, + 237, 50, 47, 63, 237, 1, 16, 198, 16, 206, 17, 57, 47, 237, 49, 48, 43, 43, 43, 43, + 43, 5, 34, 46, 2, 53, 17, 35, 53, 51, 17, 20, 30, 2, 51, 50, 54, 55, 23, 14, + 3, 1, 82, 44, 58, 34, 14, 134, 216, 9, 19, 28, 19, 29, 50, 14, 12, 6, 22, 30, + 35, 11, 24, 48, 71, 47, 1, 183, 70, 254, 3, 35, 44, 27, 10, 14, 8, 70, 3, 9, + 8, 6, 0, 1, 0, 41, 0, 0, 1, 208, 1, 218, 0, 33, 0, 86, 185, 0, 10, 255, + 232, 180, 13, 16, 0, 76, 10, 184, 255, 240, 179, 12, 0, 77, 10, 184, 255, 232, 64, 33, + 11, 0, 77, 21, 5, 24, 127, 25, 25, 33, 14, 127, 13, 35, 32, 127, 33, 34, 25, 25, + 14, 33, 74, 18, 136, 7, 80, 21, 29, 136, 5, 2, 80, 0, 63, 51, 237, 50, 63, 237, + 63, 51, 51, 47, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 237, 50, 50, 49, 48, 43, + 43, 43, 19, 54, 51, 50, 22, 23, 54, 51, 50, 30, 2, 21, 17, 35, 17, 52, 38, 35, + 34, 6, 7, 22, 21, 21, 35, 53, 52, 38, 35, 34, 7, 17, 35, 41, 60, 53, 29, 51, + 18, 43, 49, 24, 43, 33, 20, 75, 32, 24, 12, 26, 11, 6, 75, 22, 32, 20, 25, 75, + 1, 195, 23, 17, 18, 35, 18, 36, 54, 36, 254, 182, 1, 76, 36, 38, 12, 13, 23, 28, + 151, 152, 35, 40, 9, 254, 115, 0, 1, 0, 71, 0, 0, 1, 176, 1, 218, 0, 19, 0, + 94, 64, 12, 12, 8, 22, 0, 77, 12, 16, 15, 16, 0, 76, 5, 184, 255, 224, 179, 18, + 0, 77, 5, 184, 255, 232, 179, 17, 0, 77, 5, 184, 255, 232, 180, 8, 10, 0, 76, 4, + 184, 255, 224, 64, 27, 17, 0, 77, 8, 127, 239, 7, 1, 7, 21, 18, 127, 0, 19, 224, + 19, 2, 8, 19, 20, 8, 19, 74, 14, 136, 3, 80, 0, 63, 237, 63, 51, 1, 16, 214, + 94, 93, 237, 16, 222, 93, 237, 49, 48, 43, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, + 22, 21, 17, 35, 17, 52, 46, 2, 35, 34, 6, 7, 17, 35, 71, 45, 89, 39, 93, 95, + 82, 16, 29, 41, 24, 20, 45, 21, 83, 1, 195, 11, 12, 96, 106, 254, 240, 1, 1, 45, + 56, 31, 12, 5, 4, 254, 120, 0, 2, 0, 40, 255, 245, 1, 204, 1, 219, 0, 19, 0, + 31, 0, 152, 64, 16, 30, 24, 16, 0, 77, 30, 32, 15, 0, 77, 30, 8, 14, 0, 77, + 28, 184, 255, 224, 180, 15, 16, 0, 76, 28, 184, 255, 240, 179, 14, 0, 77, 24, 184, 255, + 224, 180, 15, 16, 0, 76, 24, 184, 255, 248, 64, 15, 14, 0, 77, 22, 32, 15, 16, 0, + 76, 22, 8, 14, 0, 77, 18, 184, 255, 232, 64, 17, 8, 9, 0, 76, 12, 16, 8, 9, + 0, 76, 7, 16, 8, 9, 0, 76, 3, 184, 255, 224, 179, 9, 0, 77, 3, 184, 255, 240, + 64, 24, 8, 0, 77, 20, 130, 0, 33, 26, 130, 10, 64, 9, 12, 72, 10, 32, 23, 136, + 15, 80, 29, 136, 5, 81, 0, 63, 237, 63, 237, 1, 16, 214, 43, 237, 16, 222, 237, 49, + 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, 14, 2, 35, + 34, 46, 2, 53, 52, 62, 2, 51, 50, 30, 2, 7, 52, 38, 35, 34, 6, 21, 20, 22, + 51, 50, 54, 1, 204, 31, 56, 78, 46, 45, 77, 56, 31, 31, 56, 77, 45, 46, 78, 56, + 31, 85, 68, 58, 57, 67, 67, 57, 58, 68, 232, 55, 89, 64, 35, 35, 64, 89, 55, 55, + 90, 63, 35, 35, 63, 90, 55, 79, 91, 91, 79, 78, 91, 91, 0, 2, 0, 71, 255, 91, + 1, 204, 1, 218, 0, 14, 0, 33, 0, 118, 185, 0, 32, 255, 240, 180, 8, 9, 0, 76, + 31, 184, 255, 248, 179, 16, 0, 77, 31, 184, 255, 232, 179, 15, 0, 77, 18, 184, 255, 232, + 180, 15, 16, 0, 76, 18, 184, 255, 240, 180, 9, 10, 0, 76, 17, 184, 255, 224, 64, 41, + 8, 0, 77, 12, 8, 14, 0, 77, 2, 24, 14, 0, 77, 2, 16, 13, 0, 77, 0, 130, + 15, 35, 7, 24, 127, 0, 25, 1, 8, 25, 34, 3, 136, 29, 80, 25, 75, 10, 136, 20, + 81, 0, 63, 237, 63, 63, 237, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 37, 52, 38, 35, 34, 6, 7, 17, 22, 22, 51, 50, + 62, 2, 55, 20, 14, 2, 35, 34, 38, 39, 21, 35, 17, 54, 54, 51, 50, 30, 2, 1, + 119, 76, 61, 34, 39, 11, 14, 54, 29, 33, 47, 30, 14, 85, 27, 51, 74, 47, 37, 56, + 14, 83, 27, 85, 55, 50, 82, 58, 32, 231, 81, 89, 6, 4, 254, 219, 13, 22, 26, 45, + 61, 36, 53, 89, 64, 36, 18, 11, 183, 2, 103, 8, 16, 34, 63, 90, 0, 2, 0, 40, + 255, 91, 1, 173, 1, 218, 0, 14, 0, 33, 0, 120, 64, 42, 32, 24, 9, 0, 77, 31, + 40, 16, 0, 77, 31, 32, 15, 0, 77, 31, 24, 10, 0, 77, 31, 24, 8, 0, 77, 18, + 8, 16, 0, 77, 18, 32, 15, 0, 77, 17, 16, 8, 9, 0, 76, 13, 184, 255, 224, 179, + 14, 0, 77, 13, 184, 255, 240, 179, 13, 0, 77, 3, 184, 255, 232, 64, 27, 14, 0, 77, + 8, 25, 127, 24, 35, 0, 130, 15, 64, 9, 12, 72, 15, 34, 5, 136, 29, 81, 25, 75, + 12, 136, 20, 80, 0, 63, 237, 63, 63, 237, 1, 16, 214, 43, 237, 16, 222, 237, 50, 49, + 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 20, 30, 2, 51, 50, 54, 55, + 17, 38, 38, 35, 34, 6, 7, 52, 62, 2, 51, 50, 22, 23, 17, 35, 53, 6, 6, 35, + 34, 46, 2, 125, 15, 30, 47, 33, 29, 54, 14, 11, 39, 34, 61, 77, 85, 32, 58, 83, + 50, 54, 83, 29, 83, 15, 56, 35, 47, 74, 51, 28, 231, 36, 61, 45, 26, 22, 13, 1, + 37, 4, 6, 89, 81, 56, 90, 63, 34, 17, 8, 253, 154, 183, 10, 19, 36, 64, 89, 0, + 1, 0, 107, 0, 0, 1, 182, 1, 218, 0, 13, 0, 36, 64, 18, 6, 15, 13, 127, 0, + 0, 1, 8, 0, 14, 7, 7, 10, 136, 3, 80, 0, 74, 0, 63, 63, 237, 50, 47, 1, + 16, 214, 94, 93, 237, 16, 206, 49, 48, 51, 17, 54, 51, 50, 22, 23, 7, 38, 38, 35, + 34, 7, 17, 107, 102, 104, 32, 58, 35, 15, 32, 49, 29, 61, 63, 1, 183, 35, 5, 8, + 73, 9, 5, 17, 254, 127, 0, 1, 0, 66, 255, 245, 1, 178, 1, 219, 0, 39, 0, 236, + 64, 18, 34, 32, 16, 18, 0, 76, 34, 40, 14, 15, 0, 76, 33, 8, 14, 0, 77, 29, + 184, 255, 224, 179, 12, 0, 77, 29, 184, 255, 232, 179, 11, 0, 77, 29, 184, 255, 224, 179, + 10, 0, 77, 29, 184, 255, 200, 179, 9, 0, 77, 29, 184, 255, 224, 179, 8, 0, 77, 27, + 184, 255, 224, 179, 13, 0, 77, 26, 184, 255, 208, 179, 12, 0, 77, 26, 184, 255, 232, 179, + 10, 0, 77, 25, 184, 255, 224, 179, 15, 0, 77, 23, 184, 255, 232, 179, 16, 0, 77, 23, + 184, 255, 240, 64, 81, 14, 0, 77, 8, 24, 11, 0, 77, 8, 32, 9, 10, 0, 76, 8, + 24, 8, 0, 77, 6, 40, 13, 0, 77, 5, 48, 12, 0, 77, 5, 24, 10, 0, 77, 4, + 16, 15, 0, 77, 3, 32, 8, 9, 0, 76, 2, 16, 16, 0, 77, 13, 13, 0, 130, 28, + 41, 34, 34, 21, 130, 1, 7, 1, 8, 7, 40, 24, 10, 35, 35, 38, 136, 3, 31, 81, + 14, 14, 19, 136, 10, 80, 0, 63, 237, 50, 47, 63, 57, 237, 50, 47, 17, 57, 1, 16, + 214, 94, 93, 237, 51, 47, 16, 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 52, 46, 4, + 53, 52, 54, 51, 50, 22, 23, 7, 46, 3, 35, 34, 21, 20, 30, 4, 21, 20, 6, 35, + 34, 38, 39, 55, 22, 22, 51, 50, 1, 95, 41, 61, 72, 61, 41, 91, 97, 38, 81, 29, + 15, 8, 28, 36, 41, 19, 108, 41, 62, 72, 62, 41, 98, 106, 48, 80, 36, 16, 35, 77, + 44, 113, 116, 25, 32, 24, 23, 34, 50, 40, 56, 75, 11, 9, 74, 4, 9, 7, 4, 59, + 21, 29, 24, 25, 36, 51, 39, 63, 69, 16, 16, 75, 16, 21, 0, 1, 0, 63, 255, 245, + 1, 194, 2, 96, 0, 27, 0, 73, 64, 41, 19, 24, 12, 0, 77, 19, 32, 11, 0, 77, + 0, 3, 127, 25, 22, 22, 23, 13, 13, 2, 29, 0, 23, 1, 8, 23, 28, 26, 27, 3, + 22, 133, 0, 25, 73, 12, 12, 9, 136, 16, 81, 0, 63, 237, 50, 47, 63, 51, 237, 50, + 205, 50, 1, 16, 198, 94, 93, 16, 206, 50, 47, 17, 57, 47, 51, 237, 50, 49, 48, 43, + 43, 19, 51, 21, 35, 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, + 53, 53, 35, 53, 51, 53, 55, 243, 196, 196, 10, 23, 36, 26, 36, 44, 20, 12, 14, 61, + 45, 52, 66, 37, 14, 98, 98, 82, 1, 208, 69, 216, 35, 44, 27, 10, 12, 10, 70, 6, + 20, 24, 48, 71, 47, 216, 69, 130, 14, 0, 1, 0, 68, 255, 246, 1, 173, 1, 208, 0, + 21, 0, 86, 185, 0, 13, 255, 216, 179, 17, 0, 77, 13, 184, 255, 232, 64, 48, 15, 16, + 0, 76, 6, 24, 18, 0, 77, 6, 32, 9, 0, 77, 6, 24, 8, 0, 77, 5, 32, 18, + 0, 77, 5, 16, 10, 0, 77, 19, 127, 0, 23, 11, 127, 0, 8, 1, 8, 8, 22, 20, + 9, 73, 14, 136, 3, 81, 0, 63, 237, 63, 51, 1, 16, 214, 94, 93, 237, 16, 222, 237, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 37, 6, 6, 35, 34, 46, 2, 53, 17, 51, 21, + 20, 22, 51, 50, 62, 2, 55, 17, 51, 1, 173, 27, 89, 60, 53, 70, 44, 18, 82, 51, + 60, 13, 27, 24, 18, 3, 83, 13, 7, 16, 31, 57, 78, 47, 1, 5, 243, 86, 72, 2, + 3, 3, 1, 1, 136, 0, 1, 0, 30, 0, 0, 1, 214, 1, 208, 0, 20, 0, 110, 185, + 0, 11, 255, 240, 179, 18, 0, 77, 15, 184, 255, 224, 180, 16, 18, 0, 76, 15, 184, 255, + 232, 64, 47, 15, 0, 77, 6, 10, 15, 10, 129, 9, 6, 20, 9, 9, 6, 5, 20, 15, + 20, 129, 0, 5, 20, 0, 0, 5, 15, 15, 9, 79, 0, 95, 0, 2, 0, 22, 9, 21, + 0, 20, 73, 10, 9, 73, 15, 5, 6, 74, 0, 63, 51, 51, 63, 51, 63, 51, 1, 16, + 198, 16, 206, 93, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, + 125, 196, 49, 48, 0, 43, 43, 1, 43, 1, 14, 3, 7, 35, 38, 38, 39, 51, 30, 3, + 23, 62, 3, 55, 1, 214, 18, 46, 48, 50, 23, 75, 47, 96, 37, 90, 12, 31, 34, 35, + 17, 17, 37, 36, 33, 12, 1, 208, 65, 125, 119, 108, 47, 94, 240, 130, 44, 98, 98, 91, + 36, 36, 91, 98, 98, 44, 0, 1, 0, 19, 0, 0, 1, 225, 1, 208, 0, 42, 1, 72, + 181, 40, 24, 15, 0, 77, 40, 184, 255, 240, 64, 27, 9, 0, 77, 32, 32, 15, 0, 77, + 28, 16, 23, 0, 77, 27, 32, 23, 0, 77, 26, 24, 23, 0, 77, 236, 26, 1, 25, 184, + 255, 224, 182, 23, 0, 77, 230, 25, 1, 24, 184, 255, 232, 179, 23, 0, 77, 23, 184, 255, + 248, 64, 14, 23, 0, 77, 22, 16, 16, 0, 77, 21, 24, 16, 0, 77, 21, 184, 255, 240, + 179, 9, 0, 77, 19, 184, 255, 232, 179, 15, 0, 77, 12, 184, 255, 240, 64, 19, 15, 0, + 77, 12, 24, 11, 0, 77, 12, 24, 9, 0, 77, 11, 8, 11, 0, 77, 8, 184, 255, 208, + 179, 18, 0, 77, 8, 184, 255, 232, 179, 15, 0, 77, 8, 184, 255, 224, 179, 14, 0, 77, + 7, 184, 255, 232, 64, 77, 15, 0, 77, 3, 24, 15, 0, 77, 2, 24, 18, 0, 77, 2, + 8, 15, 0, 77, 2, 24, 14, 0, 77, 0, 26, 31, 26, 132, 5, 0, 20, 5, 5, 0, + 31, 36, 127, 37, 10, 25, 20, 25, 132, 5, 10, 20, 5, 10, 5, 5, 14, 42, 15, 37, + 31, 37, 79, 37, 95, 37, 223, 37, 5, 37, 44, 20, 15, 127, 11, 14, 43, 37, 36, 73, + 26, 25, 5, 184, 255, 200, 64, 19, 22, 0, 77, 5, 5, 25, 25, 15, 14, 73, 20, 20, + 10, 11, 74, 42, 31, 31, 0, 0, 47, 50, 47, 50, 63, 51, 51, 47, 63, 51, 51, 47, + 51, 47, 43, 17, 51, 63, 51, 1, 16, 214, 50, 237, 50, 16, 206, 93, 50, 17, 57, 61, + 47, 135, 24, 43, 135, 125, 196, 1, 24, 16, 237, 50, 135, 16, 43, 135, 125, 196, 49, 48, + 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 93, + 43, 93, 43, 43, 43, 43, 43, 43, 33, 46, 3, 39, 14, 3, 7, 35, 38, 38, 39, 51, + 30, 3, 23, 62, 3, 55, 51, 30, 3, 23, 62, 3, 55, 51, 14, 3, 7, 1, 87, 15, + 22, 21, 21, 14, 14, 22, 21, 23, 15, 62, 28, 37, 9, 78, 3, 7, 10, 13, 8, 16, + 22, 18, 17, 10, 62, 10, 16, 18, 20, 15, 9, 14, 10, 8, 3, 75, 5, 14, 20, 24, + 13, 34, 56, 56, 61, 39, 39, 61, 56, 56, 34, 123, 241, 100, 39, 75, 82, 96, 60, 40, + 60, 54, 56, 35, 35, 56, 54, 60, 39, 55, 94, 83, 78, 41, 50, 114, 120, 123, 57, 0, + 1, 0, 29, 0, 0, 1, 216, 1, 208, 0, 23, 0, 112, 64, 65, 20, 10, 19, 23, 16, + 17, 11, 18, 23, 16, 14, 0, 15, 11, 18, 5, 6, 9, 10, 19, 10, 18, 11, 18, 129, + 19, 10, 20, 19, 10, 19, 19, 23, 1, 0, 15, 0, 16, 23, 16, 129, 15, 0, 20, 15, + 15, 0, 23, 25, 15, 15, 11, 24, 19, 18, 73, 16, 15, 73, 11, 10, 74, 23, 0, 74, + 0, 63, 50, 63, 51, 63, 51, 63, 51, 1, 16, 198, 50, 47, 16, 206, 135, 16, 43, 135, + 125, 196, 135, 14, 196, 1, 17, 51, 24, 47, 135, 43, 135, 125, 196, 135, 14, 196, 196, 196, + 15, 15, 15, 49, 48, 33, 46, 3, 39, 14, 3, 7, 35, 54, 54, 55, 39, 51, 23, 55, + 51, 7, 22, 22, 23, 1, 124, 10, 29, 34, 37, 18, 18, 40, 37, 32, 11, 85, 33, 95, + 46, 167, 93, 125, 115, 88, 153, 45, 91, 32, 20, 48, 51, 50, 22, 23, 50, 51, 48, 19, + 60, 127, 57, 220, 162, 162, 215, 59, 128, 62, 0, 1, 0, 36, 255, 88, 1, 205, 1, 208, + 0, 32, 1, 8, 64, 66, 25, 16, 17, 0, 77, 24, 16, 16, 0, 77, 23, 24, 18, 0, + 77, 23, 16, 15, 0, 77, 23, 24, 12, 0, 77, 22, 16, 12, 0, 77, 18, 16, 15, 0, + 77, 17, 24, 12, 0, 77, 16, 32, 18, 0, 77, 16, 24, 17, 0, 77, 16, 32, 15, 0, + 77, 16, 32, 12, 0, 77, 15, 24, 12, 0, 77, 12, 184, 255, 232, 64, 42, 17, 0, 77, + 7, 56, 16, 0, 77, 6, 24, 17, 0, 77, 6, 16, 15, 16, 0, 76, 6, 40, 12, 0, + 77, 6, 24, 10, 11, 0, 76, 5, 40, 12, 0, 77, 5, 32, 10, 11, 0, 76, 15, 184, + 255, 208, 179, 18, 0, 77, 15, 184, 255, 216, 179, 17, 0, 77, 15, 184, 255, 200, 64, 60, + 14, 0, 77, 6, 48, 18, 0, 77, 24, 20, 15, 20, 129, 21, 24, 20, 21, 21, 24, 6, + 10, 15, 10, 129, 9, 6, 20, 9, 9, 6, 15, 15, 9, 31, 21, 1, 21, 34, 32, 32, + 32, 9, 1, 9, 33, 24, 15, 6, 6, 9, 3, 136, 29, 75, 21, 20, 73, 10, 9, 73, + 0, 63, 51, 63, 51, 63, 237, 18, 57, 17, 51, 51, 1, 16, 198, 93, 50, 47, 16, 206, + 93, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 125, 196, 49, + 48, 0, 43, 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 23, 22, 22, 51, 50, 54, 55, 38, 38, 39, 51, 30, + 3, 23, 62, 3, 55, 51, 6, 6, 7, 14, 3, 35, 34, 38, 39, 51, 9, 33, 14, 49, + 55, 23, 56, 98, 32, 90, 10, 27, 34, 39, 22, 16, 28, 24, 24, 13, 86, 32, 79, 45, + 17, 39, 46, 58, 37, 19, 45, 8, 87, 5, 6, 43, 49, 106, 243, 121, 40, 93, 98, 99, + 45, 46, 90, 91, 95, 53, 130, 244, 104, 40, 58, 38, 18, 10, 4, 0, 1, 0, 73, 0, + 0, 1, 171, 1, 208, 0, 17, 0, 66, 64, 36, 21, 5, 1, 5, 14, 9, 14, 129, 0, + 5, 20, 0, 0, 5, 6, 6, 0, 19, 15, 15, 0, 9, 1, 8, 9, 18, 0, 14, 133, + 16, 73, 9, 5, 133, 8, 74, 0, 63, 237, 50, 63, 237, 50, 1, 16, 198, 94, 93, 50, + 47, 16, 198, 50, 47, 135, 16, 43, 135, 125, 196, 1, 93, 49, 48, 1, 14, 3, 7, 51, + 21, 33, 53, 62, 3, 55, 35, 53, 33, 1, 164, 18, 62, 71, 70, 27, 255, 254, 158, 21, + 63, 68, 65, 24, 228, 1, 78, 1, 146, 21, 75, 91, 100, 45, 70, 55, 40, 95, 93, 84, + 28, 69, 0, 1, 0, 79, 255, 91, 1, 171, 2, 187, 0, 44, 0, 103, 64, 68, 35, 16, + 15, 0, 77, 35, 24, 14, 0, 77, 35, 16, 13, 0, 77, 35, 24, 10, 12, 0, 76, 9, + 24, 15, 0, 77, 9, 16, 13, 14, 0, 76, 9, 24, 12, 0, 77, 9, 32, 11, 0, 77, + 9, 24, 10, 0, 77, 14, 30, 19, 26, 127, 44, 22, 6, 37, 37, 46, 45, 22, 44, 0, + 0, 13, 30, 31, 14, 13, 0, 47, 205, 47, 205, 17, 57, 47, 205, 57, 1, 17, 18, 57, + 47, 51, 51, 206, 253, 50, 206, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, + 51, 50, 62, 2, 53, 53, 52, 62, 2, 51, 51, 21, 35, 34, 6, 21, 21, 20, 6, 7, + 22, 22, 21, 21, 20, 22, 51, 51, 21, 35, 34, 46, 2, 53, 53, 52, 46, 2, 35, 35, + 79, 40, 17, 26, 17, 9, 15, 36, 61, 46, 81, 85, 42, 35, 40, 26, 26, 40, 36, 42, + 84, 81, 46, 61, 36, 15, 9, 17, 25, 17, 41, 1, 43, 15, 25, 31, 16, 161, 37, 56, + 39, 20, 65, 38, 50, 138, 67, 63, 11, 12, 66, 63, 138, 50, 38, 65, 20, 39, 56, 37, + 161, 15, 31, 25, 16, 0, 1, 0, 212, 255, 91, 1, 33, 2, 187, 0, 3, 0, 20, 183, + 2, 127, 3, 3, 5, 4, 3, 0, 0, 47, 47, 1, 17, 18, 57, 47, 237, 49, 48, 19, + 51, 17, 35, 212, 77, 77, 2, 187, 252, 160, 0, 1, 0, 73, 255, 91, 1, 165, 2, 187, + 0, 44, 0, 103, 185, 0, 35, 255, 240, 179, 15, 0, 77, 35, 184, 255, 232, 179, 14, 0, + 77, 35, 184, 255, 224, 179, 13, 0, 77, 35, 184, 255, 232, 180, 10, 12, 0, 76, 9, 184, + 255, 232, 180, 11, 13, 0, 76, 9, 184, 255, 224, 64, 24, 10, 0, 77, 30, 14, 25, 18, + 145, 38, 22, 0, 7, 7, 46, 45, 22, 0, 44, 44, 14, 30, 31, 14, 13, 0, 47, 205, + 47, 205, 18, 57, 47, 205, 57, 1, 17, 18, 57, 47, 206, 51, 51, 253, 50, 206, 50, 49, + 48, 43, 43, 43, 43, 43, 43, 37, 35, 34, 14, 2, 21, 21, 20, 14, 2, 35, 35, 53, + 51, 50, 54, 53, 53, 52, 54, 55, 38, 38, 53, 53, 52, 38, 35, 35, 53, 51, 50, 30, + 2, 21, 21, 20, 30, 2, 51, 51, 1, 165, 40, 17, 25, 17, 9, 15, 37, 61, 46, 81, + 85, 42, 35, 40, 26, 26, 40, 36, 42, 84, 81, 46, 61, 37, 15, 8, 17, 25, 17, 41, + 235, 15, 25, 31, 16, 161, 37, 56, 39, 20, 65, 38, 50, 138, 67, 63, 11, 12, 66, 63, + 138, 50, 38, 65, 20, 39, 56, 37, 161, 15, 31, 25, 16, 0, 1, 0, 37, 0, 189, 1, + 207, 1, 81, 0, 33, 0, 70, 185, 0, 25, 255, 232, 179, 17, 0, 77, 25, 184, 255, 240, + 64, 10, 16, 0, 77, 20, 24, 9, 12, 0, 76, 3, 184, 255, 224, 64, 19, 9, 12, 0, + 76, 33, 0, 16, 17, 33, 33, 22, 136, 11, 28, 136, 5, 16, 16, 5, 0, 47, 51, 47, + 16, 237, 220, 237, 50, 47, 1, 47, 205, 220, 205, 49, 48, 43, 43, 43, 43, 1, 14, 3, + 35, 34, 38, 39, 38, 38, 35, 34, 14, 2, 7, 39, 62, 3, 51, 50, 22, 23, 22, 22, + 51, 50, 62, 2, 55, 1, 207, 3, 15, 29, 44, 31, 27, 45, 21, 24, 44, 26, 14, 20, + 13, 10, 3, 57, 3, 16, 28, 43, 32, 27, 45, 21, 24, 45, 25, 14, 20, 13, 10, 3, + 1, 58, 17, 44, 38, 26, 21, 13, 14, 28, 13, 20, 25, 11, 16, 17, 44, 38, 26, 21, + 13, 14, 28, 13, 20, 25, 11, 0, 1, 0, 36, 255, 244, 1, 211, 2, 118, 0, 49, 0, + 150, 64, 12, 36, 16, 16, 0, 77, 36, 24, 13, 14, 0, 76, 26, 184, 255, 240, 179, 18, + 0, 77, 26, 184, 255, 248, 179, 17, 0, 77, 12, 184, 255, 240, 64, 63, 19, 0, 77, 23, + 23, 14, 14, 6, 6, 32, 51, 48, 48, 40, 25, 13, 19, 118, 38, 0, 44, 50, 25, 38, + 121, 41, 22, 41, 16, 47, 121, 0, 13, 0, 15, 41, 31, 41, 2, 79, 0, 175, 0, 191, + 0, 3, 41, 0, 41, 0, 3, 31, 31, 28, 124, 35, 70, 7, 7, 10, 124, 3, 69, 0, + 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 57, 47, 47, 93, 93, 17, 51, 16, 237, 50, + 17, 51, 16, 237, 50, 1, 16, 212, 50, 50, 237, 50, 50, 206, 50, 47, 16, 206, 50, 47, + 50, 47, 51, 47, 49, 48, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 22, 23, 7, 38, + 38, 35, 34, 6, 7, 51, 7, 35, 6, 20, 21, 20, 20, 23, 51, 7, 35, 22, 22, 51, + 50, 54, 55, 23, 6, 6, 35, 34, 38, 39, 35, 53, 51, 38, 52, 53, 52, 52, 55, 35, + 53, 106, 18, 115, 95, 40, 51, 24, 16, 21, 51, 27, 68, 64, 10, 199, 12, 196, 1, 1, + 179, 12, 160, 13, 73, 60, 38, 54, 21, 18, 15, 75, 46, 104, 109, 14, 68, 61, 1, 1, + 61, 1, 165, 106, 103, 10, 9, 70, 8, 10, 75, 63, 64, 11, 23, 13, 11, 22, 10, 64, + 80, 62, 13, 11, 71, 8, 18, 114, 101, 64, 10, 22, 11, 13, 23, 11, 64, 0, 1, 0, + 148, 255, 112, 1, 94, 0, 139, 0, 19, 0, 31, 64, 14, 5, 14, 148, 0, 8, 8, 21, + 20, 0, 19, 11, 154, 5, 92, 0, 63, 237, 220, 205, 1, 17, 18, 57, 47, 206, 237, 57, + 49, 48, 23, 62, 3, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, 148, + 18, 35, 30, 24, 7, 32, 29, 46, 28, 37, 38, 23, 47, 70, 47, 79, 4, 8, 15, 23, + 20, 3, 43, 21, 40, 41, 53, 38, 29, 63, 55, 39, 6, 0, 1, 0, 7, 255, 86, 1, + 226, 2, 181, 0, 40, 0, 74, 185, 0, 27, 255, 224, 64, 41, 8, 9, 0, 76, 5, 16, + 12, 0, 77, 5, 24, 8, 10, 0, 76, 23, 21, 11, 25, 127, 33, 2, 0, 39, 39, 42, + 41, 36, 136, 30, 82, 15, 136, 8, 77, 24, 40, 133, 21, 2, 73, 0, 63, 51, 237, 50, + 63, 237, 63, 237, 1, 17, 18, 57, 47, 206, 51, 204, 253, 204, 51, 206, 49, 48, 43, 43, + 43, 19, 53, 51, 53, 52, 62, 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 21, + 21, 51, 21, 35, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, 51, 50, 54, 53, 17, 63, + 98, 30, 49, 65, 36, 36, 73, 32, 15, 22, 66, 34, 21, 37, 28, 16, 187, 187, 27, 45, + 60, 32, 28, 30, 14, 18, 21, 23, 39, 53, 1, 139, 69, 42, 54, 71, 44, 18, 16, 11, + 71, 11, 16, 11, 27, 45, 34, 41, 69, 254, 120, 48, 66, 41, 18, 6, 3, 71, 8, 43, + 59, 1, 135, 0, 2, 0, 42, 255, 124, 1, 202, 0, 121, 0, 17, 0, 37, 0, 48, 64, + 23, 23, 32, 18, 26, 148, 32, 39, 3, 12, 148, 0, 6, 38, 18, 0, 37, 17, 29, 9, + 154, 23, 3, 92, 0, 63, 51, 237, 50, 220, 50, 205, 50, 1, 16, 214, 206, 237, 57, 16, + 214, 253, 206, 18, 57, 49, 48, 23, 54, 54, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, + 20, 14, 2, 7, 55, 62, 3, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, + 7, 42, 34, 57, 13, 29, 29, 33, 33, 29, 43, 17, 39, 65, 49, 218, 17, 32, 28, 22, + 6, 29, 29, 32, 34, 29, 42, 17, 39, 65, 49, 74, 7, 22, 35, 3, 39, 23, 25, 41, + 39, 44, 29, 55, 46, 34, 6, 58, 4, 7, 14, 21, 18, 3, 39, 23, 25, 41, 39, 44, + 29, 55, 46, 34, 6, 0, 3, 0, 31, 255, 244, 1, 213, 0, 96, 0, 11, 0, 23, 0, + 35, 0, 51, 64, 26, 24, 149, 30, 12, 149, 18, 0, 149, 6, 30, 18, 6, 6, 18, 30, + 3, 37, 36, 33, 21, 9, 154, 27, 15, 3, 92, 0, 63, 51, 51, 237, 50, 50, 1, 17, + 18, 23, 57, 47, 47, 47, 16, 237, 16, 237, 16, 237, 49, 48, 55, 20, 6, 35, 34, 38, + 53, 52, 54, 51, 50, 22, 23, 20, 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, 23, 20, + 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, 137, 29, 24, 24, 29, 29, 24, 24, 29, 166, + 28, 24, 24, 28, 28, 24, 24, 28, 166, 28, 24, 24, 28, 28, 24, 24, 28, 42, 22, 32, + 32, 22, 22, 32, 32, 22, 22, 32, 32, 22, 22, 32, 32, 22, 22, 32, 32, 22, 22, 32, + 32, 0, 1, 0, 72, 255, 127, 1, 172, 2, 107, 0, 17, 0, 36, 64, 15, 17, 15, 0, + 12, 10, 9, 9, 19, 18, 0, 9, 15, 12, 13, 5, 0, 47, 47, 221, 50, 205, 50, 1, + 17, 18, 57, 47, 205, 51, 221, 50, 205, 49, 48, 1, 21, 20, 6, 7, 35, 38, 38, 53, + 53, 35, 53, 51, 53, 51, 21, 51, 21, 1, 30, 7, 8, 41, 8, 8, 142, 142, 72, 142, + 1, 100, 227, 75, 122, 61, 61, 122, 75, 227, 69, 194, 194, 69, 0, 1, 0, 72, 255, 127, + 1, 172, 2, 107, 0, 23, 0, 60, 64, 28, 12, 8, 7, 19, 23, 21, 17, 0, 14, 10, + 7, 7, 25, 24, 20, 11, 17, 15, 14, 1, 8, 14, 15, 21, 10, 0, 7, 4, 0, 47, + 221, 50, 205, 50, 47, 221, 94, 93, 50, 205, 50, 1, 17, 18, 57, 47, 51, 51, 221, 50, + 50, 205, 50, 16, 205, 50, 49, 48, 37, 20, 6, 7, 35, 38, 38, 53, 35, 53, 51, 53, + 35, 53, 51, 53, 51, 21, 51, 21, 35, 21, 51, 21, 1, 30, 8, 7, 41, 8, 8, 142, + 142, 142, 142, 72, 142, 142, 142, 120, 73, 117, 59, 59, 117, 73, 68, 168, 69, 194, 194, 69, + 168, 68, 0, 1, 0, 129, 2, 8, 1, 115, 2, 175, 0, 5, 0, 91, 64, 27, 5, 8, + 16, 0, 77, 3, 32, 18, 0, 77, 3, 24, 17, 0, 77, 3, 16, 16, 0, 77, 4, 96, + 5, 112, 5, 2, 5, 184, 255, 192, 64, 27, 21, 24, 72, 5, 2, 111, 1, 127, 1, 2, + 1, 64, 21, 24, 72, 1, 64, 0, 3, 1, 2, 2, 3, 0, 128, 5, 4, 0, 47, 51, + 26, 205, 50, 51, 17, 51, 1, 25, 47, 51, 26, 205, 43, 93, 50, 205, 43, 93, 50, 49, + 48, 0, 43, 43, 43, 1, 43, 19, 23, 7, 39, 7, 39, 250, 121, 34, 87, 87, 34, 2, + 175, 128, 39, 78, 78, 39, 0, 7, 0, 9, 255, 243, 1, 235, 2, 120, 0, 11, 0, 19, + 0, 31, 0, 39, 0, 51, 0, 59, 0, 63, 0, 250, 182, 59, 40, 13, 19, 0, 76, 57, + 184, 255, 216, 180, 13, 19, 0, 76, 55, 184, 255, 208, 64, 17, 13, 19, 0, 76, 53, 40, + 13, 19, 0, 76, 39, 48, 13, 19, 0, 76, 37, 184, 255, 216, 180, 13, 19, 0, 76, 35, + 184, 255, 216, 64, 17, 13, 19, 0, 76, 33, 40, 13, 19, 0, 76, 19, 40, 13, 19, 0, + 76, 17, 184, 255, 224, 180, 13, 19, 0, 76, 15, 184, 255, 224, 64, 100, 13, 19, 0, 76, + 13, 32, 13, 19, 0, 76, 62, 63, 63, 56, 20, 150, 64, 32, 80, 32, 96, 32, 3, 32, + 26, 150, 79, 36, 95, 36, 111, 36, 3, 36, 40, 150, 64, 52, 80, 52, 96, 52, 3, 52, + 46, 150, 56, 65, 60, 61, 61, 12, 6, 150, 79, 16, 95, 16, 111, 16, 3, 16, 0, 150, + 12, 64, 63, 62, 61, 60, 62, 60, 62, 60, 14, 38, 49, 29, 152, 54, 64, 34, 1, 34, + 43, 23, 152, 58, 38, 92, 3, 152, 79, 18, 1, 18, 9, 152, 14, 90, 0, 63, 237, 212, + 93, 237, 63, 51, 237, 50, 212, 93, 50, 237, 50, 17, 18, 57, 57, 47, 47, 16, 205, 16, + 205, 1, 16, 214, 253, 220, 93, 237, 17, 51, 47, 51, 16, 214, 253, 220, 93, 237, 222, 93, + 253, 220, 93, 237, 17, 51, 47, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 19, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 52, 51, 50, 21, 20, + 35, 34, 23, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 52, 51, 50, 21, 20, + 35, 34, 55, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 52, 51, 50, 21, 20, + 35, 34, 37, 39, 1, 23, 70, 13, 13, 13, 14, 14, 13, 13, 13, 53, 78, 81, 80, 79, + 162, 14, 13, 14, 14, 14, 14, 13, 14, 51, 77, 81, 79, 79, 249, 14, 13, 13, 14, 14, + 13, 13, 14, 52, 78, 80, 78, 80, 254, 225, 29, 1, 197, 29, 1, 239, 51, 39, 39, 51, + 51, 38, 38, 51, 137, 137, 138, 233, 51, 38, 38, 51, 51, 38, 38, 51, 138, 138, 137, 137, + 51, 38, 38, 51, 51, 38, 38, 51, 138, 138, 137, 218, 45, 1, 40, 45, 255, 255, 0, 55, + 255, 243, 1, 189, 3, 61, 2, 38, 0, 54, 0, 0, 1, 7, 1, 95, 0, 18, 0, 139, + 0, 16, 64, 11, 1, 0, 50, 54, 46, 37, 80, 1, 15, 55, 79, 43, 43, 52, 0, 0, + 0, 1, 0, 144, 0, 56, 1, 85, 1, 195, 0, 5, 0, 52, 185, 0, 3, 255, 232, 179, + 12, 0, 77, 3, 184, 255, 248, 64, 16, 11, 0, 77, 1, 5, 4, 2, 2, 4, 3, 0, + 6, 5, 1, 0, 3, 0, 25, 47, 51, 205, 205, 1, 24, 16, 214, 50, 205, 50, 47, 16, + 205, 50, 49, 48, 43, 43, 55, 55, 23, 7, 23, 7, 144, 139, 58, 99, 99, 58, 254, 197, + 31, 166, 166, 32, 0, 2, 0, 27, 255, 250, 1, 226, 2, 113, 0, 14, 0, 36, 0, 135, + 181, 20, 8, 15, 0, 77, 20, 184, 255, 232, 64, 14, 14, 0, 77, 16, 16, 16, 0, 77, + 16, 24, 15, 0, 77, 7, 184, 255, 240, 180, 13, 14, 0, 76, 2, 184, 255, 232, 179, 14, + 0, 77, 2, 184, 255, 240, 179, 13, 0, 77, 2, 184, 255, 248, 64, 41, 11, 12, 0, 76, + 28, 32, 115, 11, 11, 18, 30, 30, 26, 26, 33, 38, 5, 118, 18, 37, 31, 121, 28, 28, + 24, 32, 121, 35, 66, 27, 121, 24, 65, 0, 124, 21, 65, 8, 124, 15, 66, 0, 63, 237, + 63, 237, 63, 237, 63, 237, 17, 57, 47, 237, 1, 16, 214, 237, 16, 206, 50, 47, 50, 47, + 17, 57, 47, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 19, 34, 14, 2, 21, + 20, 22, 51, 50, 54, 55, 17, 38, 38, 3, 34, 38, 53, 52, 54, 51, 50, 22, 23, 51, + 21, 35, 21, 51, 21, 35, 21, 51, 21, 35, 6, 220, 27, 43, 28, 15, 57, 56, 20, 20, + 3, 13, 21, 9, 89, 104, 104, 90, 11, 30, 14, 193, 128, 105, 105, 141, 206, 29, 2, 42, + 36, 66, 93, 58, 116, 120, 6, 1, 1, 219, 5, 2, 253, 208, 147, 160, 160, 164, 4, 2, + 70, 190, 70, 219, 70, 6, 0, 1, 0, 149, 1, 171, 1, 95, 2, 198, 0, 19, 0, 27, + 64, 12, 5, 14, 0, 8, 148, 14, 11, 154, 5, 0, 19, 90, 0, 63, 205, 220, 237, 1, + 47, 253, 206, 18, 57, 49, 48, 1, 14, 3, 7, 22, 22, 21, 20, 6, 35, 34, 38, 53, + 52, 62, 2, 55, 1, 95, 18, 35, 30, 24, 7, 32, 29, 46, 28, 37, 38, 23, 46, 71, + 47, 2, 133, 4, 8, 15, 24, 19, 3, 43, 21, 40, 41, 53, 38, 29, 63, 55, 39, 6, + 0, 1, 0, 148, 1, 168, 1, 94, 2, 195, 0, 19, 0, 25, 64, 11, 5, 14, 148, 0, + 8, 0, 19, 5, 154, 11, 90, 0, 63, 253, 220, 205, 1, 47, 206, 237, 57, 49, 48, 19, + 62, 3, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, 148, 18, 35, 30, + 24, 7, 32, 29, 46, 28, 37, 38, 23, 47, 70, 47, 1, 233, 4, 8, 15, 23, 20, 3, + 43, 21, 40, 41, 53, 38, 29, 63, 55, 39, 6, 0, 2, 0, 43, 1, 183, 1, 202, 2, + 181, 0, 19, 0, 39, 0, 46, 64, 22, 25, 34, 148, 28, 5, 14, 0, 8, 148, 14, 20, + 28, 11, 31, 154, 5, 25, 0, 20, 19, 39, 90, 0, 63, 51, 205, 50, 220, 50, 237, 50, + 1, 47, 206, 222, 253, 206, 18, 57, 16, 237, 57, 49, 48, 1, 14, 3, 7, 22, 22, 21, + 20, 6, 35, 34, 38, 53, 52, 62, 2, 55, 7, 14, 3, 7, 22, 22, 21, 20, 6, 35, + 34, 38, 53, 52, 62, 2, 55, 1, 202, 17, 32, 27, 22, 6, 29, 29, 33, 33, 29, 43, + 17, 39, 65, 49, 217, 17, 32, 28, 22, 6, 29, 29, 32, 34, 29, 42, 17, 39, 65, 49, + 2, 123, 4, 7, 14, 21, 18, 3, 39, 24, 25, 41, 40, 44, 28, 56, 46, 34, 6, 58, + 4, 7, 14, 21, 18, 3, 39, 24, 25, 41, 40, 44, 28, 56, 46, 34, 6, 0, 2, 0, + 42, 1, 183, 1, 201, 2, 181, 0, 19, 0, 39, 0, 42, 64, 20, 25, 34, 148, 20, 28, + 5, 14, 148, 0, 8, 20, 0, 39, 19, 25, 5, 154, 31, 11, 90, 0, 63, 51, 253, 50, + 220, 50, 205, 50, 1, 47, 206, 253, 57, 222, 206, 237, 57, 49, 48, 19, 62, 3, 55, 38, + 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, 55, 62, 3, 55, 38, 38, 53, 52, + 54, 51, 50, 22, 21, 20, 14, 2, 7, 42, 17, 32, 27, 22, 6, 29, 29, 33, 33, 29, + 43, 17, 39, 65, 49, 217, 17, 32, 28, 22, 6, 29, 29, 32, 34, 29, 42, 17, 39, 65, + 48, 1, 241, 4, 7, 14, 22, 18, 2, 40, 23, 25, 41, 40, 44, 29, 55, 46, 34, 6, + 58, 4, 7, 14, 22, 18, 2, 40, 23, 25, 41, 40, 44, 29, 55, 46, 34, 6, 0, 1, + 0, 114, 0, 173, 1, 130, 1, 203, 0, 19, 0, 13, 179, 0, 10, 15, 5, 0, 47, 205, + 1, 47, 205, 49, 48, 1, 20, 14, 2, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 30, + 2, 1, 130, 19, 35, 51, 31, 32, 50, 35, 19, 19, 35, 50, 32, 31, 51, 35, 19, 1, + 60, 29, 52, 39, 23, 23, 39, 52, 29, 28, 52, 40, 23, 23, 40, 52, 0, 1, 0, 69, + 0, 236, 1, 175, 1, 50, 0, 3, 0, 13, 179, 1, 3, 0, 3, 0, 47, 205, 1, 47, + 205, 49, 48, 19, 33, 21, 33, 69, 1, 106, 254, 150, 1, 50, 70, 0, 1, 0, 0, 0, + 236, 1, 244, 1, 50, 0, 3, 0, 13, 179, 3, 2, 0, 3, 0, 47, 205, 1, 47, 47, + 49, 48, 17, 33, 21, 33, 1, 244, 254, 12, 1, 50, 70, 0, 1, 0, 112, 2, 36, 1, + 132, 2, 145, 0, 27, 0, 55, 182, 17, 24, 11, 16, 0, 76, 2, 184, 255, 224, 64, 22, + 11, 16, 0, 76, 27, 47, 0, 63, 0, 2, 0, 13, 14, 27, 27, 19, 10, 24, 5, 13, + 13, 5, 0, 47, 51, 47, 16, 205, 220, 205, 50, 47, 1, 47, 205, 220, 93, 205, 49, 48, + 43, 43, 1, 14, 3, 35, 34, 38, 39, 38, 35, 34, 6, 7, 39, 62, 3, 51, 50, 22, + 23, 22, 51, 50, 54, 55, 1, 132, 3, 15, 22, 30, 19, 13, 35, 11, 26, 16, 13, 24, + 6, 43, 3, 15, 22, 30, 18, 13, 35, 11, 26, 16, 13, 25, 6, 2, 123, 11, 28, 24, + 17, 14, 5, 14, 26, 14, 23, 11, 28, 24, 17, 15, 5, 14, 26, 14, 0, 2, 0, 18, + 1, 101, 1, 220, 2, 107, 0, 7, 0, 36, 0, 83, 64, 40, 35, 30, 29, 36, 8, 22, + 22, 29, 9, 13, 20, 128, 15, 1, 15, 24, 29, 38, 1, 2, 5, 6, 37, 35, 23, 23, + 9, 21, 21, 2, 5, 7, 89, 22, 8, 8, 15, 15, 30, 4, 0, 47, 51, 51, 17, 51, + 47, 51, 63, 205, 50, 51, 17, 51, 51, 17, 51, 1, 16, 214, 221, 221, 205, 16, 214, 50, + 220, 93, 50, 205, 50, 18, 57, 17, 51, 51, 16, 205, 50, 49, 48, 19, 21, 35, 21, 35, + 53, 35, 53, 5, 39, 14, 3, 21, 35, 62, 3, 55, 51, 23, 55, 51, 30, 3, 23, 35, + 52, 46, 2, 39, 7, 204, 64, 58, 64, 1, 52, 39, 2, 2, 1, 1, 58, 3, 6, 7, + 7, 5, 54, 44, 47, 54, 5, 7, 6, 5, 3, 58, 1, 1, 2, 1, 42, 2, 107, 50, + 212, 212, 50, 193, 116, 20, 60, 57, 44, 4, 50, 74, 60, 51, 27, 136, 136, 27, 52, 60, + 74, 49, 4, 44, 57, 60, 20, 116, 255, 255, 0, 66, 255, 245, 1, 178, 2, 178, 2, 38, + 0, 86, 0, 0, 1, 6, 1, 95, 10, 0, 0, 16, 64, 11, 1, 10, 40, 44, 34, 27, + 80, 1, 9, 45, 79, 43, 43, 52, 0, 1, 0, 159, 0, 56, 1, 100, 1, 195, 0, 5, + 0, 33, 64, 15, 2, 16, 11, 12, 0, 76, 2, 5, 4, 0, 3, 1, 4, 0, 2, 0, + 25, 47, 205, 205, 1, 24, 47, 51, 205, 50, 205, 50, 49, 48, 43, 55, 39, 55, 39, 55, + 23, 217, 58, 99, 99, 58, 139, 56, 32, 166, 166, 31, 197, 0, 3, 0, 31, 255, 245, 1, + 222, 1, 219, 0, 39, 0, 59, 0, 66, 0, 147, 185, 0, 34, 255, 232, 179, 18, 0, 77, + 34, 184, 255, 240, 179, 17, 0, 77, 26, 184, 255, 240, 179, 13, 0, 77, 26, 184, 255, 232, + 179, 12, 0, 77, 26, 184, 255, 240, 64, 64, 11, 0, 77, 17, 16, 9, 11, 0, 76, 11, + 16, 11, 0, 77, 11, 24, 9, 10, 0, 76, 22, 6, 66, 31, 130, 45, 45, 14, 60, 130, + 27, 0, 0, 27, 68, 55, 130, 14, 67, 31, 134, 66, 66, 36, 22, 63, 136, 25, 80, 50, + 136, 19, 80, 40, 136, 9, 81, 39, 39, 6, 36, 136, 3, 81, 0, 63, 237, 50, 50, 47, + 63, 237, 63, 237, 63, 237, 50, 18, 57, 47, 237, 1, 16, 214, 237, 16, 206, 50, 47, 16, + 237, 17, 57, 47, 237, 50, 57, 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 37, 6, + 6, 35, 34, 38, 39, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 54, + 54, 51, 50, 21, 20, 20, 7, 35, 20, 30, 2, 51, 50, 54, 55, 5, 50, 62, 2, 53, + 52, 46, 2, 35, 34, 14, 2, 21, 20, 30, 2, 55, 52, 38, 35, 34, 6, 21, 1, 209, + 20, 46, 22, 35, 60, 20, 17, 46, 42, 33, 47, 31, 15, 15, 30, 48, 33, 37, 54, 14, + 18, 48, 29, 121, 1, 176, 11, 21, 33, 22, 13, 30, 23, 254, 227, 15, 20, 13, 5, 6, + 14, 23, 16, 15, 22, 13, 6, 7, 15, 23, 251, 26, 20, 25, 29, 15, 14, 12, 39, 51, + 46, 44, 42, 69, 88, 46, 45, 87, 68, 41, 42, 48, 47, 43, 236, 6, 14, 9, 28, 53, + 41, 25, 8, 14, 23, 28, 47, 60, 32, 32, 63, 49, 31, 29, 46, 61, 31, 33, 62, 50, + 30, 215, 59, 69, 71, 57, 255, 255, 0, 13, 0, 0, 1, 232, 3, 26, 2, 38, 0, 60, + 0, 0, 1, 7, 0, 131, 0, 2, 0, 139, 0, 23, 64, 16, 2, 1, 1, 19, 37, 4, + 12, 80, 2, 4, 29, 79, 1, 4, 17, 79, 43, 43, 43, 52, 52, 0, 0, 0, 0, 2, + 0, 182, 255, 91, 1, 60, 1, 209, 0, 13, 0, 25, 0, 33, 64, 15, 11, 145, 0, 0, + 17, 148, 23, 23, 27, 26, 5, 20, 154, 14, 13, 0, 47, 47, 253, 206, 1, 17, 18, 57, + 47, 237, 51, 47, 237, 49, 48, 55, 52, 62, 2, 55, 51, 30, 3, 21, 21, 35, 19, 50, + 22, 21, 20, 6, 35, 34, 38, 53, 52, 54, 204, 3, 4, 7, 3, 57, 3, 6, 5, 2, + 90, 45, 28, 39, 39, 28, 27, 40, 40, 3, 37, 62, 56, 55, 30, 30, 55, 56, 62, 37, + 168, 2, 118, 37, 31, 31, 36, 36, 31, 31, 37, 0, 1, 0, 49, 255, 159, 1, 194, 2, + 107, 0, 35, 0, 96, 185, 0, 22, 255, 200, 179, 15, 0, 77, 22, 184, 255, 224, 179, 14, + 0, 77, 17, 184, 255, 208, 179, 15, 0, 77, 17, 184, 255, 232, 64, 32, 14, 0, 77, 8, + 30, 127, 5, 33, 33, 0, 11, 11, 27, 37, 20, 130, 0, 36, 26, 26, 23, 137, 30, 33, + 32, 12, 12, 15, 136, 5, 8, 6, 0, 47, 221, 50, 237, 50, 47, 47, 221, 50, 237, 50, + 47, 1, 16, 214, 237, 16, 206, 50, 47, 17, 57, 47, 51, 237, 50, 49, 48, 43, 43, 43, + 43, 19, 52, 62, 2, 55, 53, 51, 21, 22, 22, 23, 7, 38, 38, 35, 34, 14, 2, 21, + 20, 22, 51, 50, 54, 55, 23, 6, 6, 7, 21, 35, 53, 38, 38, 49, 30, 54, 75, 44, + 74, 27, 54, 31, 18, 33, 54, 28, 36, 63, 46, 26, 99, 80, 32, 58, 35, 12, 30, 60, + 34, 74, 92, 111, 1, 4, 53, 81, 58, 34, 6, 127, 124, 2, 9, 10, 69, 12, 7, 19, + 39, 63, 43, 83, 79, 8, 12, 68, 11, 10, 2, 124, 126, 13, 116, 0, 1, 0, 45, 0, + 0, 1, 199, 2, 118, 0, 34, 0, 106, 185, 0, 31, 255, 240, 179, 18, 0, 77, 31, 184, + 255, 232, 179, 17, 0, 77, 31, 184, 255, 240, 64, 49, 16, 0, 77, 20, 16, 11, 12, 0, + 76, 20, 24, 10, 0, 77, 20, 16, 9, 0, 77, 26, 26, 1, 1, 8, 36, 3, 0, 145, + 14, 17, 15, 35, 27, 27, 29, 155, 23, 3, 14, 151, 0, 17, 17, 23, 90, 7, 151, 10, + 96, 0, 63, 237, 63, 57, 47, 51, 237, 50, 16, 237, 50, 47, 1, 16, 214, 221, 50, 237, + 50, 16, 206, 50, 47, 50, 47, 49, 48, 43, 43, 43, 43, 43, 43, 19, 51, 21, 35, 21, + 20, 6, 7, 33, 21, 33, 54, 54, 53, 53, 35, 53, 51, 53, 52, 62, 2, 51, 50, 22, + 23, 7, 38, 35, 34, 14, 2, 21, 210, 170, 170, 7, 7, 1, 3, 254, 160, 10, 15, 83, + 83, 28, 50, 71, 44, 39, 53, 25, 20, 45, 56, 24, 39, 29, 15, 1, 77, 67, 7, 45, + 98, 45, 71, 64, 125, 64, 13, 67, 74, 66, 87, 50, 20, 13, 11, 71, 22, 14, 34, 57, + 43, 0, 2, 0, 38, 0, 97, 1, 207, 2, 10, 0, 28, 0, 40, 0, 83, 64, 35, 4, + 25, 25, 3, 26, 26, 0, 10, 19, 19, 11, 18, 18, 29, 14, 35, 0, 41, 18, 26, 26, + 19, 25, 25, 22, 11, 3, 3, 10, 4, 4, 32, 7, 38, 22, 0, 47, 205, 220, 205, 51, + 47, 51, 51, 25, 47, 51, 17, 51, 24, 47, 51, 51, 25, 47, 51, 1, 24, 16, 214, 205, + 220, 205, 51, 47, 51, 51, 25, 47, 51, 17, 51, 24, 47, 51, 51, 25, 47, 51, 49, 48, + 19, 52, 55, 39, 55, 23, 54, 51, 50, 23, 55, 23, 7, 22, 21, 20, 6, 7, 23, 7, + 39, 6, 35, 34, 39, 7, 39, 55, 38, 37, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, + 54, 78, 25, 65, 51, 66, 43, 52, 51, 43, 67, 52, 67, 26, 13, 13, 67, 52, 67, 43, + 51, 54, 41, 66, 51, 65, 25, 1, 21, 62, 43, 43, 62, 62, 43, 43, 62, 1, 54, 55, + 40, 66, 51, 67, 26, 26, 67, 51, 66, 40, 55, 29, 46, 20, 66, 52, 66, 25, 25, 66, + 52, 65, 40, 56, 51, 60, 60, 51, 51, 60, 60, 0, 1, 0, 13, 0, 0, 1, 232, 2, + 107, 0, 30, 0, 118, 64, 62, 24, 28, 29, 22, 18, 15, 18, 120, 19, 22, 20, 19, 22, + 19, 25, 29, 115, 1, 8, 12, 15, 12, 120, 11, 8, 20, 11, 8, 11, 6, 2, 5, 1, + 1, 32, 31, 15, 18, 19, 65, 25, 5, 121, 8, 22, 15, 8, 29, 1, 121, 4, 26, 4, + 8, 4, 8, 4, 12, 11, 65, 0, 66, 0, 63, 63, 51, 57, 57, 47, 47, 17, 51, 16, + 237, 50, 17, 51, 51, 16, 237, 50, 63, 51, 1, 47, 17, 18, 57, 47, 51, 205, 50, 220, + 135, 43, 135, 125, 196, 1, 24, 16, 253, 50, 220, 135, 43, 135, 125, 196, 1, 24, 16, 205, + 50, 49, 48, 51, 53, 35, 53, 51, 53, 35, 53, 51, 38, 38, 39, 51, 22, 22, 23, 54, + 54, 55, 51, 6, 6, 7, 51, 21, 35, 21, 51, 21, 35, 21, 210, 145, 145, 145, 122, 49, + 87, 38, 91, 32, 76, 41, 39, 73, 32, 91, 40, 86, 49, 123, 144, 144, 144, 95, 63, 91, + 64, 78, 155, 73, 70, 139, 64, 64, 139, 70, 75, 153, 78, 64, 91, 63, 95, 0, 2, 0, + 212, 255, 91, 1, 33, 2, 187, 0, 3, 0, 7, 0, 29, 64, 12, 6, 1, 145, 7, 0, + 0, 9, 8, 7, 4, 0, 3, 0, 47, 205, 47, 205, 1, 17, 18, 57, 47, 51, 237, 50, + 49, 48, 55, 51, 17, 35, 17, 51, 17, 35, 212, 77, 77, 77, 77, 177, 254, 170, 3, 96, + 254, 170, 0, 2, 0, 68, 255, 159, 1, 175, 2, 121, 0, 56, 0, 74, 1, 75, 181, 71, + 32, 18, 0, 77, 58, 184, 255, 232, 179, 16, 0, 77, 58, 184, 255, 240, 179, 13, 0, 77, + 51, 184, 255, 232, 180, 11, 12, 0, 76, 51, 184, 255, 224, 180, 9, 10, 0, 76, 48, 184, + 255, 216, 179, 18, 0, 77, 48, 184, 255, 232, 179, 16, 0, 77, 48, 184, 255, 216, 179, 13, + 0, 77, 48, 184, 255, 208, 179, 12, 0, 77, 48, 184, 255, 224, 179, 11, 0, 77, 47, 184, + 255, 224, 179, 17, 0, 77, 46, 184, 255, 208, 179, 17, 0, 77, 40, 184, 255, 216, 179, 17, + 0, 77, 40, 184, 255, 216, 179, 15, 0, 77, 40, 184, 255, 232, 179, 13, 0, 77, 40, 184, + 255, 224, 179, 12, 0, 77, 39, 184, 255, 224, 179, 17, 0, 77, 36, 184, 255, 248, 64, 114, + 14, 0, 77, 22, 24, 11, 0, 77, 22, 32, 10, 0, 77, 22, 24, 9, 0, 77, 19, 24, + 18, 0, 77, 19, 32, 16, 17, 0, 76, 19, 40, 12, 13, 0, 76, 19, 24, 11, 0, 77, + 11, 24, 18, 0, 77, 11, 32, 17, 0, 77, 11, 16, 15, 0, 77, 11, 16, 13, 0, 77, + 11, 24, 12, 0, 77, 47, 5, 118, 50, 50, 69, 118, 42, 27, 27, 42, 76, 18, 34, 118, + 21, 21, 60, 118, 13, 56, 56, 0, 13, 1, 8, 13, 75, 18, 74, 8, 74, 53, 31, 47, + 65, 37, 65, 24, 0, 0, 3, 124, 53, 28, 28, 31, 124, 24, 0, 47, 237, 50, 47, 47, + 237, 50, 47, 17, 57, 57, 17, 51, 17, 18, 57, 57, 17, 51, 1, 16, 198, 94, 93, 50, + 47, 16, 237, 51, 47, 237, 50, 16, 206, 50, 47, 16, 237, 51, 47, 237, 50, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 23, 22, 22, 51, 50, 53, 52, 38, 39, 46, 3, + 53, 52, 62, 2, 55, 38, 38, 53, 52, 54, 51, 50, 22, 23, 7, 38, 38, 35, 34, 6, + 21, 20, 22, 23, 30, 3, 21, 20, 14, 2, 7, 22, 22, 21, 20, 6, 35, 34, 38, 39, + 19, 6, 6, 21, 20, 30, 2, 23, 23, 54, 54, 53, 52, 46, 2, 39, 90, 27, 64, 50, + 101, 48, 57, 33, 57, 44, 25, 15, 23, 28, 13, 22, 26, 87, 78, 46, 78, 24, 19, 22, + 61, 47, 35, 50, 44, 50, 33, 57, 44, 25, 14, 22, 27, 13, 26, 32, 95, 88, 60, 77, + 23, 132, 26, 32, 21, 36, 50, 29, 17, 26, 32, 21, 35, 47, 26, 1, 11, 17, 62, 32, + 35, 19, 11, 25, 35, 50, 36, 23, 40, 33, 25, 8, 18, 46, 30, 62, 72, 17, 8, 69, + 8, 18, 29, 30, 31, 34, 16, 11, 25, 36, 49, 36, 22, 39, 33, 26, 8, 19, 50, 33, + 67, 68, 19, 11, 1, 184, 17, 45, 27, 23, 32, 24, 18, 10, 6, 17, 44, 28, 23, 31, + 22, 18, 10, 0, 2, 0, 113, 2, 38, 1, 131, 2, 143, 0, 11, 0, 23, 0, 37, 185, + 0, 21, 255, 192, 64, 16, 15, 18, 72, 21, 15, 3, 64, 15, 18, 72, 3, 9, 18, 6, + 12, 0, 0, 47, 50, 205, 50, 1, 47, 205, 43, 222, 205, 43, 49, 48, 19, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, + 165, 20, 32, 32, 20, 21, 31, 31, 149, 21, 31, 31, 21, 21, 31, 31, 2, 38, 30, 23, + 23, 29, 29, 23, 23, 30, 30, 23, 23, 29, 29, 23, 23, 30, 0, 3, 0, 34, 255, 245, + 1, 210, 1, 219, 0, 19, 0, 49, 0, 69, 1, 2, 181, 67, 16, 16, 0, 77, 57, 184, + 255, 232, 64, 40, 16, 0, 77, 53, 16, 16, 0, 77, 31, 24, 15, 0, 77, 31, 32, 11, + 0, 77, 26, 32, 11, 0, 77, 25, 8, 15, 0, 77, 17, 48, 15, 0, 77, 17, 32, 11, + 12, 0, 76, 13, 184, 255, 208, 179, 15, 0, 77, 13, 184, 255, 224, 180, 11, 12, 0, 76, + 12, 184, 255, 248, 179, 17, 0, 77, 7, 184, 255, 216, 179, 15, 0, 77, 7, 184, 255, 224, + 179, 12, 0, 77, 7, 184, 255, 216, 64, 24, 11, 0, 77, 3, 40, 15, 0, 77, 3, 24, + 13, 0, 77, 3, 32, 12, 0, 77, 3, 40, 11, 0, 77, 10, 184, 255, 232, 179, 21, 0, + 77, 10, 184, 255, 232, 64, 14, 13, 0, 77, 0, 24, 21, 0, 77, 0, 24, 13, 0, 77, + 15, 184, 255, 232, 179, 22, 0, 77, 15, 184, 255, 240, 64, 43, 21, 0, 77, 5, 24, 22, + 0, 77, 5, 16, 21, 0, 77, 36, 36, 20, 0, 150, 60, 71, 43, 150, 28, 10, 150, 50, + 70, 46, 152, 23, 15, 152, 65, 92, 40, 152, 33, 5, 152, 79, 55, 1, 55, 0, 47, 93, + 253, 222, 237, 63, 253, 222, 237, 1, 16, 214, 253, 222, 237, 16, 214, 253, 206, 50, 47, 0, + 43, 43, 43, 43, 1, 43, 43, 43, 43, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 52, 46, 2, 35, 34, 14, 2, 21, 20, + 30, 2, 51, 50, 62, 2, 7, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, + 23, 7, 38, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, 55, 37, 52, 62, 2, 51, 50, + 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 1, 152, 27, 45, 56, 30, 30, 56, 45, 27, + 27, 45, 56, 30, 30, 57, 44, 27, 81, 17, 37, 17, 29, 43, 28, 14, 14, 28, 43, 30, + 16, 35, 17, 20, 11, 22, 9, 32, 27, 33, 30, 9, 23, 11, 254, 236, 38, 61, 78, 40, + 40, 78, 60, 37, 38, 61, 78, 40, 41, 77, 60, 37, 231, 48, 71, 47, 24, 24, 47, 71, + 46, 48, 71, 47, 24, 24, 47, 70, 64, 8, 8, 21, 35, 45, 24, 24, 46, 36, 22, 5, + 8, 54, 5, 3, 40, 25, 32, 37, 4, 5, 58, 61, 92, 61, 30, 30, 61, 91, 60, 61, + 91, 61, 31, 31, 60, 91, 0, 2, 0, 118, 1, 38, 1, 128, 2, 118, 0, 14, 0, 45, + 0, 119, 64, 27, 37, 24, 21, 0, 77, 27, 24, 16, 0, 77, 27, 16, 15, 0, 77, 27, + 24, 14, 0, 77, 24, 32, 14, 16, 0, 76, 17, 184, 255, 200, 179, 16, 0, 77, 17, 184, + 255, 232, 179, 15, 0, 77, 17, 184, 255, 216, 179, 14, 0, 77, 17, 184, 255, 224, 64, 30, + 11, 13, 0, 76, 33, 4, 18, 47, 43, 43, 12, 25, 46, 7, 32, 30, 48, 30, 64, 30, + 3, 30, 30, 15, 0, 22, 94, 39, 15, 90, 0, 63, 205, 63, 205, 17, 57, 47, 93, 205, + 1, 16, 214, 205, 51, 47, 16, 222, 205, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 1, 50, 54, 55, 53, 38, 38, 35, 34, 14, 2, 21, 20, 22, 19, 50, 22, 21, 21, + 6, 6, 35, 34, 38, 53, 52, 62, 2, 51, 50, 22, 23, 53, 52, 46, 2, 35, 34, 6, + 7, 39, 54, 54, 1, 3, 20, 38, 5, 10, 30, 14, 15, 31, 26, 16, 42, 31, 73, 58, + 22, 72, 37, 59, 76, 23, 40, 51, 29, 13, 29, 19, 5, 16, 29, 23, 21, 48, 18, 9, + 17, 54, 1, 93, 2, 2, 89, 2, 2, 4, 10, 19, 15, 26, 23, 1, 25, 68, 56, 200, + 5, 7, 48, 56, 28, 39, 24, 11, 2, 2, 2, 13, 27, 21, 13, 5, 6, 56, 5, 8, + 0, 2, 0, 63, 0, 79, 1, 157, 1, 174, 0, 5, 0, 11, 0, 58, 64, 25, 7, 11, + 64, 8, 10, 9, 6, 0, 128, 1, 5, 64, 2, 4, 128, 3, 0, 11, 5, 7, 1, 9, + 6, 0, 3, 0, 25, 47, 51, 51, 51, 205, 50, 205, 50, 1, 24, 47, 51, 26, 221, 50, + 26, 205, 50, 26, 16, 220, 50, 221, 50, 26, 205, 50, 49, 48, 55, 55, 23, 7, 23, 7, + 55, 55, 23, 7, 23, 7, 63, 119, 52, 84, 80, 50, 62, 120, 51, 83, 80, 50, 254, 176, + 27, 149, 144, 31, 175, 176, 27, 149, 144, 31, 0, 1, 0, 41, 0, 43, 1, 194, 1, 91, + 0, 5, 0, 17, 181, 3, 0, 4, 2, 0, 3, 0, 47, 205, 205, 1, 47, 221, 205, 49, + 48, 1, 17, 35, 53, 33, 53, 1, 194, 71, 254, 174, 1, 91, 254, 208, 234, 70, 255, 255, + 0, 140, 0, 215, 1, 104, 1, 37, 2, 6, 0, 16, 0, 0, 0, 4, 0, 34, 255, 245, + 1, 210, 1, 219, 0, 19, 0, 39, 0, 58, 0, 69, 1, 114, 64, 11, 56, 16, 19, 0, + 77, 55, 8, 19, 0, 77, 48, 184, 255, 240, 179, 18, 0, 77, 48, 184, 255, 232, 179, 17, + 0, 77, 48, 184, 255, 232, 64, 15, 14, 0, 77, 38, 8, 17, 18, 0, 76, 37, 16, 16, + 0, 77, 28, 184, 255, 248, 179, 18, 0, 77, 27, 184, 255, 240, 64, 21, 16, 0, 77, 23, + 16, 16, 0, 77, 17, 16, 19, 20, 0, 76, 17, 40, 11, 12, 0, 76, 13, 184, 255, 232, + 180, 19, 20, 0, 76, 13, 184, 255, 224, 180, 11, 13, 0, 76, 7, 184, 255, 232, 180, 19, + 20, 0, 76, 7, 184, 255, 232, 179, 13, 0, 77, 7, 184, 255, 224, 64, 21, 11, 12, 0, + 76, 3, 24, 20, 0, 77, 3, 32, 19, 0, 77, 3, 40, 11, 12, 0, 76, 17, 184, 255, + 232, 179, 22, 0, 77, 13, 184, 255, 232, 64, 14, 22, 0, 77, 7, 24, 22, 0, 77, 3, + 16, 22, 0, 77, 10, 184, 255, 224, 179, 15, 0, 77, 10, 184, 255, 232, 64, 9, 13, 0, + 77, 0, 32, 15, 0, 77, 15, 184, 255, 232, 64, 48, 21, 0, 77, 5, 24, 21, 0, 77, + 58, 95, 51, 1, 51, 55, 75, 54, 1, 54, 63, 150, 63, 49, 1, 49, 64, 25, 28, 72, + 64, 49, 1, 49, 0, 32, 13, 0, 77, 0, 150, 30, 71, 59, 41, 150, 48, 42, 1, 42, + 184, 255, 192, 64, 41, 25, 28, 72, 42, 10, 150, 48, 20, 1, 20, 70, 51, 63, 58, 1, + 58, 152, 48, 59, 1, 59, 59, 46, 54, 223, 42, 1, 42, 15, 152, 35, 70, 66, 152, 46, + 5, 152, 79, 25, 1, 25, 0, 47, 93, 253, 222, 237, 63, 253, 206, 93, 50, 17, 57, 47, + 113, 237, 113, 50, 1, 16, 214, 114, 253, 222, 43, 114, 237, 50, 16, 214, 253, 43, 222, 93, + 43, 114, 237, 214, 93, 50, 197, 113, 50, 0, 43, 43, 1, 43, 43, 43, 49, 48, 0, 43, + 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 37, 52, 46, 2, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 62, 2, + 37, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 55, 21, 35, 53, + 54, 54, 51, 50, 22, 21, 20, 7, 22, 22, 23, 35, 38, 38, 39, 39, 51, 50, 54, 53, + 52, 38, 35, 34, 6, 7, 1, 152, 27, 45, 56, 30, 30, 56, 45, 27, 27, 45, 56, 30, + 30, 57, 44, 27, 254, 138, 38, 61, 78, 40, 40, 78, 60, 37, 38, 61, 78, 40, 41, 77, + 60, 37, 186, 54, 14, 34, 19, 57, 55, 40, 12, 26, 13, 57, 13, 20, 10, 36, 18, 27, + 26, 32, 17, 6, 11, 5, 231, 48, 71, 47, 24, 24, 47, 71, 46, 48, 71, 47, 24, 24, + 47, 70, 47, 61, 92, 61, 30, 30, 61, 91, 60, 61, 91, 61, 31, 31, 60, 91, 16, 77, + 238, 4, 5, 44, 42, 48, 23, 17, 47, 26, 24, 37, 16, 50, 14, 23, 20, 13, 1, 1, + 0, 1, 0, 123, 2, 59, 1, 121, 2, 123, 0, 3, 0, 13, 179, 2, 3, 0, 3, 0, + 47, 205, 1, 47, 205, 49, 48, 19, 51, 21, 35, 123, 254, 254, 2, 123, 64, 0, 2, 0, + 125, 1, 189, 1, 119, 2, 181, 0, 19, 0, 31, 0, 57, 185, 0, 18, 255, 224, 64, 17, + 8, 11, 0, 76, 12, 32, 8, 11, 0, 76, 8, 32, 8, 11, 0, 76, 2, 184, 255, 224, + 64, 12, 8, 11, 0, 76, 0, 20, 10, 26, 15, 23, 29, 5, 0, 47, 221, 222, 205, 1, + 47, 205, 222, 205, 49, 48, 43, 43, 43, 43, 1, 20, 14, 2, 35, 34, 46, 2, 53, 52, + 62, 2, 51, 50, 30, 2, 7, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, 1, 119, + 20, 35, 45, 25, 25, 45, 35, 20, 20, 35, 45, 25, 25, 45, 35, 20, 60, 38, 27, 27, + 38, 38, 27, 27, 38, 2, 57, 29, 46, 32, 17, 17, 32, 46, 29, 29, 46, 32, 17, 17, + 32, 46, 29, 32, 36, 36, 32, 32, 36, 36, 0, 2, 0, 46, 0, 0, 1, 199, 2, 42, + 0, 11, 0, 15, 0, 51, 64, 23, 12, 12, 11, 10, 13, 13, 6, 4, 7, 1, 10, 10, + 16, 17, 12, 15, 91, 4, 2, 1, 9, 7, 10, 0, 47, 51, 205, 221, 205, 51, 63, 205, + 1, 17, 18, 57, 47, 51, 221, 50, 205, 50, 47, 16, 205, 50, 47, 49, 48, 19, 51, 53, + 51, 21, 51, 21, 35, 21, 35, 53, 35, 21, 33, 21, 33, 46, 168, 72, 169, 169, 72, 168, + 1, 153, 254, 103, 1, 118, 180, 180, 70, 180, 180, 233, 71, 0, 1, 0, 124, 1, 25, 1, + 120, 2, 121, 0, 32, 0, 225, 185, 0, 32, 255, 232, 179, 20, 0, 77, 32, 184, 255, 240, + 179, 19, 0, 77, 32, 184, 255, 232, 179, 18, 0, 77, 32, 184, 255, 224, 179, 17, 0, 77, + 32, 184, 255, 216, 179, 16, 0, 77, 32, 184, 255, 224, 179, 15, 0, 77, 32, 184, 255, 216, + 180, 12, 14, 0, 76, 32, 184, 255, 208, 64, 39, 11, 0, 77, 28, 16, 15, 0, 77, 16, + 16, 18, 0, 77, 15, 24, 19, 0, 77, 15, 16, 17, 0, 77, 14, 32, 19, 0, 77, 14, + 24, 18, 0, 77, 13, 16, 17, 0, 77, 18, 184, 255, 224, 179, 26, 0, 77, 17, 184, 255, + 224, 179, 27, 0, 77, 16, 184, 255, 240, 179, 26, 0, 77, 15, 184, 255, 224, 179, 27, 0, + 77, 14, 184, 255, 232, 64, 40, 26, 0, 77, 4, 32, 25, 0, 77, 3, 32, 25, 0, 77, + 2, 24, 25, 0, 77, 19, 150, 0, 9, 9, 0, 11, 27, 27, 8, 150, 11, 26, 26, 21, + 152, 30, 90, 8, 152, 11, 95, 0, 63, 237, 63, 237, 50, 47, 1, 47, 237, 51, 47, 16, + 205, 50, 47, 16, 237, 49, 48, 0, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 14, 2, 7, 6, 6, 7, + 51, 21, 35, 38, 62, 2, 55, 54, 54, 53, 52, 35, 34, 14, 2, 7, 39, 54, 54, 51, + 50, 22, 1, 106, 17, 29, 38, 21, 15, 30, 2, 166, 238, 3, 14, 26, 35, 18, 30, 38, + 55, 15, 27, 22, 16, 5, 32, 16, 61, 40, 62, 59, 2, 22, 19, 35, 35, 36, 18, 13, + 29, 11, 57, 30, 45, 38, 31, 16, 26, 44, 21, 45, 8, 11, 12, 4, 44, 16, 31, 51, + 0, 1, 0, 126, 1, 18, 1, 118, 2, 121, 0, 43, 0, 248, 181, 36, 32, 27, 0, 77, + 35, 184, 255, 232, 180, 11, 16, 0, 76, 30, 184, 255, 232, 179, 27, 0, 77, 28, 184, 255, + 232, 180, 17, 20, 0, 76, 28, 184, 255, 224, 64, 40, 14, 16, 0, 76, 27, 8, 36, 0, + 77, 24, 24, 23, 0, 77, 24, 16, 22, 0, 77, 14, 8, 26, 0, 77, 5, 24, 27, 0, + 77, 5, 16, 26, 0, 77, 40, 24, 27, 0, 77, 24, 184, 255, 248, 179, 24, 0, 77, 23, + 184, 255, 216, 64, 60, 27, 0, 77, 21, 24, 27, 0, 77, 21, 24, 23, 24, 0, 76, 5, + 24, 25, 0, 77, 5, 16, 24, 0, 77, 5, 24, 23, 0, 77, 31, 16, 150, 29, 64, 34, + 45, 72, 29, 64, 26, 32, 72, 29, 3, 150, 34, 45, 23, 23, 40, 9, 9, 40, 31, 9, + 152, 10, 10, 26, 41, 184, 255, 192, 64, 35, 28, 0, 77, 41, 64, 27, 0, 77, 41, 56, + 26, 0, 77, 41, 64, 25, 0, 77, 41, 41, 0, 152, 37, 98, 22, 64, 28, 0, 77, 22, + 22, 19, 152, 26, 90, 0, 63, 237, 50, 47, 43, 63, 237, 50, 47, 43, 43, 43, 43, 17, + 57, 47, 237, 57, 1, 47, 51, 47, 17, 51, 47, 16, 222, 237, 212, 43, 43, 237, 50, 49, + 48, 0, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 19, 50, 54, 53, 52, 46, 2, 35, 35, 53, 51, 50, 62, 2, 53, 52, 38, 35, + 34, 6, 7, 39, 54, 54, 51, 50, 22, 21, 20, 7, 22, 22, 21, 20, 6, 35, 34, 38, + 39, 55, 22, 22, 226, 48, 35, 16, 27, 36, 19, 17, 22, 13, 27, 22, 15, 33, 26, 24, + 41, 15, 23, 14, 61, 30, 65, 54, 49, 32, 36, 68, 79, 28, 57, 16, 13, 20, 44, 1, + 74, 29, 23, 15, 21, 14, 6, 51, 5, 11, 18, 14, 22, 19, 17, 7, 49, 10, 20, 52, + 42, 43, 28, 10, 45, 32, 45, 62, 13, 8, 53, 8, 10, 0, 1, 0, 170, 2, 6, 1, + 82, 2, 181, 0, 3, 0, 24, 64, 9, 3, 0, 1, 2, 0, 3, 128, 2, 1, 0, 47, + 51, 26, 205, 50, 1, 47, 51, 205, 50, 49, 48, 1, 7, 39, 55, 1, 82, 126, 42, 114, + 2, 128, 122, 37, 138, 0, 1, 0, 71, 255, 91, 1, 173, 1, 208, 0, 26, 0, 62, 185, + 0, 17, 255, 224, 180, 17, 18, 0, 76, 17, 184, 255, 240, 64, 26, 15, 16, 0, 76, 23, + 127, 0, 28, 9, 13, 127, 0, 12, 1, 8, 12, 27, 25, 12, 73, 11, 75, 19, 136, 3, + 81, 0, 63, 237, 63, 63, 51, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, 49, 48, 43, + 43, 37, 6, 6, 35, 34, 38, 39, 22, 22, 21, 21, 35, 17, 51, 21, 20, 30, 2, 51, + 50, 62, 2, 55, 17, 51, 1, 173, 27, 89, 60, 41, 45, 17, 3, 1, 83, 83, 11, 25, + 41, 30, 13, 27, 24, 18, 3, 83, 13, 7, 17, 18, 15, 23, 46, 26, 92, 2, 117, 243, + 43, 60, 38, 17, 2, 2, 3, 1, 1, 137, 0, 1, 0, 28, 255, 91, 1, 191, 2, 113, + 0, 18, 0, 38, 64, 17, 5, 15, 2, 1, 8, 2, 0, 16, 20, 8, 19, 5, 5, 2, + 13, 18, 4, 0, 47, 51, 47, 205, 51, 47, 1, 16, 198, 16, 222, 221, 222, 94, 93, 205, + 49, 48, 1, 38, 7, 17, 35, 17, 38, 38, 53, 52, 62, 2, 51, 50, 22, 23, 17, 35, + 1, 121, 46, 41, 69, 93, 100, 37, 70, 99, 62, 35, 80, 36, 70, 2, 41, 6, 4, 253, + 48, 1, 143, 10, 92, 92, 49, 73, 50, 25, 6, 10, 252, 250, 255, 255, 0, 177, 0, 184, + 1, 68, 1, 81, 2, 7, 0, 17, 0, 0, 0, 196, 0, 0, 0, 1, 0, 156, 255, 87, + 1, 65, 0, 18, 0, 28, 0, 52, 64, 24, 17, 3, 26, 0, 25, 11, 20, 20, 30, 0, + 0, 20, 20, 29, 8, 25, 25, 29, 15, 0, 8, 1, 8, 8, 0, 47, 94, 93, 205, 17, + 51, 47, 17, 18, 57, 47, 51, 47, 1, 17, 57, 47, 204, 51, 221, 50, 221, 205, 49, 48, + 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 53, 52, 39, 39, + 62, 3, 55, 51, 6, 6, 1, 16, 26, 23, 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, + 15, 32, 37, 7, 3, 11, 11, 10, 2, 57, 5, 16, 33, 12, 30, 29, 10, 23, 19, 13, + 7, 5, 51, 4, 5, 20, 20, 11, 2, 9, 24, 24, 19, 4, 11, 29, 0, 1, 0, 126, + 1, 25, 1, 127, 2, 114, 0, 14, 0, 46, 64, 23, 5, 5, 47, 14, 1, 14, 0, 11, + 10, 150, 8, 0, 10, 0, 152, 13, 95, 5, 4, 4, 1, 8, 89, 0, 63, 51, 51, 47, + 205, 63, 237, 50, 1, 47, 50, 253, 205, 16, 205, 113, 50, 47, 49, 48, 19, 53, 6, 6, + 7, 39, 54, 54, 55, 51, 17, 51, 21, 35, 53, 231, 20, 50, 18, 17, 34, 66, 24, 44, + 89, 250, 1, 82, 206, 13, 20, 5, 49, 11, 37, 23, 254, 224, 57, 57, 0, 2, 0, 89, + 1, 37, 1, 155, 2, 120, 0, 19, 0, 31, 0, 59, 185, 0, 18, 255, 232, 64, 17, 8, + 11, 0, 76, 12, 24, 8, 11, 0, 76, 8, 24, 8, 11, 0, 76, 2, 184, 255, 224, 64, + 14, 8, 11, 0, 76, 20, 0, 26, 10, 23, 15, 90, 29, 5, 94, 0, 63, 205, 63, 205, + 1, 47, 205, 220, 205, 49, 48, 43, 43, 43, 43, 1, 20, 14, 2, 35, 34, 46, 2, 53, + 52, 62, 2, 51, 50, 30, 2, 7, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, 1, + 155, 24, 43, 59, 35, 35, 59, 43, 24, 24, 43, 59, 35, 35, 59, 43, 24, 66, 49, 46, + 45, 50, 49, 46, 46, 49, 1, 207, 39, 62, 45, 24, 24, 45, 62, 39, 39, 62, 44, 24, + 24, 44, 62, 39, 51, 58, 58, 51, 50, 60, 60, 0, 2, 0, 85, 0, 79, 1, 181, 1, + 174, 0, 5, 0, 11, 0, 54, 64, 23, 11, 7, 8, 5, 1, 64, 4, 2, 3, 0, 9, + 6, 128, 10, 8, 5, 11, 1, 7, 6, 3, 0, 9, 0, 25, 47, 51, 51, 51, 205, 50, + 205, 50, 1, 24, 47, 51, 26, 221, 50, 220, 50, 221, 50, 26, 205, 50, 16, 205, 50, 49, + 48, 37, 7, 39, 55, 39, 55, 7, 7, 39, 55, 39, 55, 1, 181, 120, 52, 84, 80, 50, + 63, 119, 52, 84, 81, 50, 255, 176, 27, 149, 144, 31, 175, 176, 27, 149, 144, 31, 0, 4, + 0, 18, 255, 252, 1, 221, 2, 114, 0, 10, 0, 23, 0, 28, 0, 32, 0, 99, 64, 52, + 29, 31, 30, 31, 156, 32, 29, 20, 32, 29, 32, 30, 23, 24, 24, 12, 15, 18, 18, 27, + 20, 14, 5, 3, 6, 0, 31, 32, 89, 29, 30, 103, 15, 19, 20, 12, 27, 27, 17, 24, + 23, 101, 17, 103, 6, 97, 0, 10, 10, 7, 3, 96, 0, 63, 51, 51, 47, 205, 63, 63, + 63, 51, 18, 57, 47, 51, 51, 205, 50, 63, 51, 63, 51, 1, 47, 220, 50, 205, 47, 205, + 50, 57, 47, 205, 50, 51, 17, 51, 47, 47, 135, 43, 135, 125, 196, 49, 48, 19, 54, 54, + 55, 51, 21, 35, 53, 6, 6, 7, 1, 21, 51, 21, 35, 21, 35, 53, 35, 53, 54, 54, + 55, 23, 6, 6, 7, 51, 5, 35, 1, 51, 18, 34, 48, 24, 40, 59, 20, 32, 18, 1, + 150, 36, 36, 59, 129, 26, 48, 31, 24, 21, 34, 15, 70, 254, 225, 70, 1, 123, 70, 2, + 49, 14, 28, 23, 250, 168, 11, 14, 6, 254, 249, 152, 50, 48, 48, 41, 46, 75, 40, 43, + 27, 56, 26, 102, 2, 107, 0, 3, 0, 17, 0, 0, 1, 226, 2, 114, 0, 30, 0, 41, + 0, 45, 0, 184, 185, 0, 30, 255, 240, 179, 22, 0, 77, 28, 184, 255, 224, 179, 21, 0, + 77, 27, 184, 255, 216, 179, 21, 0, 77, 27, 184, 255, 216, 179, 19, 0, 77, 24, 184, 255, + 232, 179, 21, 0, 77, 24, 184, 255, 224, 179, 20, 0, 77, 24, 184, 255, 232, 179, 19, 0, + 77, 24, 184, 255, 224, 64, 68, 14, 18, 0, 76, 20, 48, 20, 0, 77, 8, 16, 22, 23, + 0, 76, 7, 16, 20, 0, 77, 42, 44, 43, 44, 156, 45, 42, 20, 45, 42, 45, 43, 36, + 34, 37, 31, 12, 4, 25, 0, 0, 25, 30, 5, 19, 19, 5, 44, 45, 89, 42, 43, 103, + 37, 97, 31, 41, 41, 38, 34, 96, 18, 15, 22, 102, 30, 3, 91, 0, 63, 205, 63, 205, + 50, 63, 51, 51, 47, 205, 63, 63, 51, 63, 51, 1, 47, 51, 47, 16, 205, 47, 51, 47, + 16, 205, 205, 47, 220, 50, 205, 47, 47, 135, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 37, 21, 35, 38, 52, 53, 52, 54, 55, 55, 54, 54, + 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 22, 21, 20, 14, 2, 7, 1, 54, + 54, 55, 51, 21, 35, 53, 6, 6, 7, 19, 35, 1, 51, 1, 226, 197, 1, 40, 26, 22, + 24, 18, 23, 16, 15, 32, 12, 32, 17, 52, 26, 47, 47, 26, 38, 40, 13, 254, 180, 35, + 47, 24, 41, 59, 20, 33, 18, 46, 70, 1, 123, 70, 50, 50, 3, 17, 3, 32, 35, 16, + 15, 14, 25, 14, 17, 16, 13, 13, 40, 19, 19, 50, 32, 26, 37, 28, 24, 12, 1, 255, + 14, 28, 23, 250, 168, 11, 14, 6, 253, 255, 2, 107, 0, 4, 0, 21, 0, 0, 1, 223, + 2, 121, 0, 12, 0, 55, 0, 60, 0, 64, 1, 7, 185, 0, 50, 255, 224, 180, 20, 21, + 0, 76, 50, 184, 255, 232, 179, 19, 0, 77, 50, 184, 255, 224, 179, 18, 0, 77, 50, 184, + 255, 232, 180, 16, 17, 0, 76, 50, 184, 255, 216, 179, 15, 0, 77, 50, 184, 255, 232, 179, + 14, 0, 77, 46, 184, 255, 232, 180, 14, 16, 0, 76, 45, 184, 255, 216, 179, 14, 0, 77, + 43, 184, 255, 248, 179, 15, 0, 77, 41, 184, 255, 224, 179, 24, 0, 77, 41, 184, 255, 232, + 179, 23, 0, 77, 41, 184, 255, 216, 179, 22, 0, 77, 41, 184, 255, 224, 180, 19, 21, 0, + 76, 41, 184, 255, 232, 64, 72, 17, 18, 0, 76, 61, 63, 62, 63, 156, 64, 61, 20, 64, + 61, 64, 62, 46, 28, 43, 43, 19, 48, 55, 35, 35, 55, 23, 23, 55, 12, 56, 56, 1, + 4, 7, 7, 59, 9, 3, 63, 64, 89, 61, 62, 103, 46, 23, 24, 24, 38, 13, 13, 16, + 53, 100, 34, 34, 31, 38, 99, 4, 8, 9, 1, 59, 59, 6, 56, 12, 101, 6, 103, 0, + 63, 63, 51, 18, 57, 47, 51, 51, 205, 50, 63, 205, 50, 47, 63, 205, 50, 47, 17, 57, + 47, 205, 57, 63, 51, 63, 51, 1, 47, 205, 50, 57, 47, 205, 50, 51, 17, 51, 47, 51, + 47, 17, 51, 47, 16, 221, 205, 51, 47, 205, 50, 47, 47, 135, 43, 135, 125, 196, 49, 48, + 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 21, 51, 21, 35, + 21, 35, 53, 35, 53, 54, 54, 55, 37, 22, 22, 51, 50, 54, 53, 52, 38, 35, 35, 53, + 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 6, + 7, 22, 21, 20, 14, 2, 35, 34, 39, 5, 6, 6, 7, 51, 5, 35, 1, 51, 1, 185, + 36, 36, 59, 129, 26, 48, 31, 254, 190, 11, 33, 20, 22, 33, 38, 38, 12, 22, 26, 28, + 25, 14, 14, 36, 12, 19, 15, 49, 26, 17, 32, 25, 15, 15, 16, 43, 12, 26, 42, 30, + 46, 37, 1, 105, 21, 34, 15, 70, 254, 230, 70, 1, 123, 70, 250, 152, 50, 48, 48, 41, + 46, 75, 40, 180, 5, 8, 13, 17, 21, 12, 50, 11, 18, 15, 9, 10, 5, 43, 9, 13, + 7, 15, 25, 18, 15, 30, 11, 20, 45, 14, 29, 23, 14, 14, 174, 27, 56, 26, 98, 2, + 107, 0, 2, 0, 92, 255, 86, 1, 154, 1, 209, 0, 29, 0, 41, 0, 132, 64, 16, 27, + 24, 18, 0, 77, 20, 32, 10, 0, 77, 20, 40, 9, 0, 77, 5, 184, 255, 232, 179, 16, + 0, 77, 5, 184, 255, 224, 179, 15, 0, 77, 5, 184, 255, 224, 179, 13, 0, 77, 5, 184, + 255, 232, 179, 12, 0, 77, 3, 184, 255, 232, 64, 10, 12, 13, 0, 76, 15, 24, 18, 0, + 77, 8, 184, 255, 232, 64, 27, 17, 0, 77, 8, 149, 22, 22, 29, 145, 0, 14, 14, 0, + 0, 33, 148, 39, 39, 43, 42, 29, 36, 154, 30, 11, 155, 17, 0, 47, 237, 47, 253, 206, + 1, 17, 18, 57, 47, 237, 50, 47, 51, 47, 16, 237, 50, 47, 237, 43, 49, 48, 0, 43, + 1, 43, 43, 43, 43, 43, 43, 43, 43, 37, 23, 20, 14, 4, 21, 20, 22, 51, 50, 55, + 23, 6, 6, 35, 34, 46, 2, 53, 52, 62, 4, 53, 55, 50, 22, 21, 20, 6, 35, 34, + 38, 53, 52, 54, 1, 61, 1, 21, 31, 37, 31, 21, 48, 46, 59, 57, 23, 30, 76, 43, + 51, 65, 38, 15, 23, 34, 40, 34, 23, 28, 28, 39, 39, 28, 27, 40, 40, 243, 20, 29, + 44, 38, 33, 34, 38, 23, 38, 46, 30, 64, 16, 20, 28, 43, 52, 24, 30, 46, 39, 36, + 40, 45, 30, 222, 37, 31, 31, 36, 36, 31, 31, 37, 255, 255, 0, 9, 0, 0, 1, 235, + 3, 62, 2, 38, 0, 36, 0, 0, 1, 7, 0, 67, 0, 4, 0, 137, 0, 16, 64, 11, + 2, 0, 26, 24, 4, 15, 80, 2, 9, 25, 79, 43, 43, 52, 0, 0, 255, 255, 0, 9, + 0, 0, 1, 235, 3, 62, 2, 38, 0, 36, 0, 0, 1, 7, 0, 143, 255, 253, 0, 137, + 0, 16, 64, 11, 2, 1, 25, 23, 4, 15, 80, 2, 9, 24, 79, 43, 43, 52, 0, 0, + 255, 255, 0, 9, 0, 0, 1, 235, 3, 58, 2, 38, 0, 36, 0, 0, 1, 7, 0, 105, + 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 26, 26, 9, 10, 80, 2, 9, 25, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 9, 0, 0, 1, 235, 3, 28, 2, 38, 0, 36, 0, 0, + 1, 7, 0, 117, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 37, 23, 4, 15, 80, 2, + 9, 36, 79, 43, 43, 52, 0, 0, 255, 255, 0, 9, 0, 0, 1, 235, 3, 26, 2, 38, + 0, 36, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 44, 64, 34, 16, 32, 16, 38, + 2, 48, 38, 1, 48, 32, 64, 32, 80, 32, 144, 32, 192, 32, 208, 32, 224, 32, 240, 32, + 8, 32, 3, 9, 35, 79, 2, 9, 23, 79, 43, 43, 1, 16, 93, 93, 113, 49, 0, 0, + 0, 3, 0, 9, 0, 0, 1, 235, 2, 237, 0, 26, 0, 33, 0, 45, 0, 159, 185, 0, + 17, 255, 216, 64, 93, 8, 15, 0, 76, 13, 40, 8, 15, 0, 76, 18, 157, 34, 12, 157, + 40, 40, 2, 30, 28, 27, 9, 3, 27, 3, 120, 4, 9, 20, 4, 4, 9, 1, 31, 27, + 21, 0, 27, 0, 120, 26, 21, 20, 26, 21, 27, 4, 143, 26, 159, 26, 2, 79, 26, 95, + 26, 127, 26, 175, 26, 191, 26, 239, 26, 255, 26, 7, 26, 47, 4, 46, 15, 163, 37, 43, + 1, 2, 121, 31, 30, 30, 4, 27, 21, 9, 43, 65, 0, 26, 66, 3, 4, 66, 0, 63, + 51, 63, 51, 63, 51, 51, 51, 18, 57, 47, 51, 237, 50, 16, 222, 237, 1, 16, 198, 16, + 222, 93, 113, 17, 57, 135, 43, 135, 125, 196, 16, 196, 196, 135, 24, 16, 43, 135, 125, 196, + 16, 14, 196, 5, 196, 196, 1, 51, 24, 47, 237, 222, 237, 49, 48, 43, 43, 33, 39, 35, + 7, 35, 62, 3, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 7, 30, 3, 23, + 3, 6, 6, 7, 51, 38, 38, 55, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, 1, + 148, 37, 238, 36, 84, 16, 43, 48, 51, 26, 14, 20, 55, 37, 37, 55, 19, 14, 25, 51, + 47, 41, 17, 242, 23, 54, 24, 200, 23, 53, 26, 27, 20, 20, 27, 27, 20, 20, 27, 162, + 162, 63, 155, 159, 150, 59, 12, 37, 23, 42, 49, 49, 42, 22, 38, 11, 59, 151, 160, 155, + 62, 2, 35, 63, 166, 88, 90, 167, 171, 23, 26, 26, 23, 23, 26, 26, 0, 2, 0, 27, + 0, 0, 1, 226, 2, 107, 0, 17, 0, 22, 0, 106, 64, 56, 19, 21, 2, 3, 7, 3, + 18, 3, 120, 4, 7, 20, 4, 4, 7, 18, 11, 15, 115, 0, 0, 4, 13, 13, 9, 9, + 16, 24, 4, 23, 14, 121, 11, 1, 2, 121, 21, 22, 21, 11, 21, 11, 21, 15, 18, 10, + 121, 7, 65, 3, 4, 66, 15, 121, 0, 66, 0, 63, 237, 63, 51, 63, 237, 50, 18, 57, + 57, 47, 47, 17, 51, 16, 237, 50, 16, 237, 1, 16, 198, 16, 206, 50, 47, 50, 47, 17, + 57, 47, 237, 50, 51, 135, 16, 43, 135, 125, 196, 16, 196, 196, 14, 196, 49, 48, 33, 53, + 35, 7, 35, 54, 18, 55, 51, 21, 35, 21, 51, 21, 35, 21, 51, 21, 3, 6, 6, 7, + 51, 1, 7, 118, 37, 81, 45, 92, 55, 250, 128, 105, 105, 141, 219, 28, 51, 21, 100, 162, + 162, 174, 1, 49, 140, 70, 190, 70, 219, 70, 2, 54, 88, 174, 74, 0, 1, 0, 46, 255, + 87, 1, 204, 2, 121, 0, 55, 1, 58, 185, 0, 54, 255, 200, 179, 16, 0, 77, 54, 184, + 255, 208, 179, 15, 0, 77, 53, 184, 255, 232, 180, 17, 18, 0, 76, 47, 184, 255, 240, 179, + 18, 0, 77, 47, 184, 255, 232, 179, 17, 0, 77, 47, 184, 255, 232, 180, 11, 12, 0, 76, + 42, 184, 255, 248, 179, 16, 0, 77, 41, 184, 255, 232, 180, 17, 18, 0, 76, 41, 184, 255, + 240, 179, 12, 0, 77, 41, 184, 255, 232, 179, 11, 0, 77, 36, 184, 255, 232, 179, 18, 0, + 77, 36, 184, 255, 224, 179, 17, 0, 77, 35, 184, 255, 224, 180, 15, 16, 0, 76, 35, 184, + 255, 200, 64, 21, 14, 0, 77, 26, 8, 17, 18, 0, 76, 25, 40, 13, 14, 0, 76, 25, + 16, 8, 0, 77, 5, 184, 255, 232, 180, 20, 21, 0, 76, 5, 184, 255, 216, 179, 19, 0, + 77, 5, 184, 255, 224, 179, 18, 0, 77, 5, 184, 255, 232, 180, 16, 17, 0, 76, 5, 184, + 255, 208, 179, 15, 0, 77, 2, 184, 255, 200, 180, 19, 20, 0, 76, 2, 184, 255, 208, 179, + 18, 0, 77, 2, 184, 255, 216, 64, 50, 15, 17, 0, 76, 17, 48, 3, 64, 3, 80, 3, + 3, 3, 55, 0, 23, 11, 20, 20, 28, 36, 36, 53, 57, 44, 118, 28, 56, 0, 20, 20, + 56, 15, 64, 8, 56, 128, 52, 52, 49, 124, 23, 55, 70, 37, 37, 39, 124, 33, 69, 0, + 63, 237, 50, 47, 63, 51, 237, 50, 47, 26, 16, 220, 26, 205, 18, 57, 47, 205, 1, 16, + 214, 237, 16, 206, 50, 47, 17, 57, 47, 204, 51, 221, 50, 213, 93, 205, 49, 48, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 53, + 52, 39, 39, 54, 54, 55, 46, 3, 53, 52, 62, 2, 51, 50, 22, 23, 7, 38, 35, 34, + 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 7, 1, 61, 26, 23, 9, 21, 35, + 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 12, 6, 49, 83, 60, 33, 41, 70, + 94, 53, 37, 77, 37, 24, 66, 58, 41, 65, 46, 25, 27, 48, 67, 39, 29, 64, 34, 22, + 58, 74, 33, 12, 30, 29, 10, 23, 19, 13, 7, 5, 51, 4, 5, 20, 20, 11, 2, 11, + 27, 13, 5, 43, 80, 116, 77, 79, 120, 82, 42, 20, 23, 68, 38, 35, 66, 92, 57, 64, + 94, 62, 30, 15, 19, 68, 33, 5, 255, 255, 0, 91, 0, 0, 1, 204, 3, 62, 2, 38, + 0, 40, 0, 0, 1, 7, 0, 67, 0, 14, 0, 137, 0, 19, 185, 0, 1, 255, 241, 64, + 9, 15, 13, 0, 10, 80, 1, 1, 14, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 91, + 0, 0, 1, 204, 3, 62, 2, 38, 0, 40, 0, 0, 1, 7, 0, 143, 0, 26, 0, 137, + 0, 16, 64, 11, 1, 4, 14, 12, 0, 10, 80, 1, 1, 13, 79, 43, 43, 52, 0, 0, + 255, 255, 0, 91, 0, 0, 1, 204, 3, 58, 2, 38, 0, 40, 0, 0, 1, 7, 0, 105, + 0, 18, 0, 139, 0, 19, 185, 0, 1, 255, 249, 64, 9, 17, 13, 0, 10, 80, 1, 1, + 14, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 91, 0, 0, 1, 204, 3, 26, 2, 38, + 0, 40, 0, 0, 1, 7, 0, 131, 0, 18, 0, 139, 0, 26, 177, 2, 1, 184, 255, 249, + 64, 13, 14, 32, 0, 10, 80, 2, 1, 24, 79, 1, 1, 12, 79, 43, 43, 43, 52, 52, + 255, 255, 0, 89, 0, 0, 1, 155, 3, 62, 2, 38, 0, 44, 0, 0, 1, 7, 0, 67, + 0, 5, 0, 137, 0, 16, 64, 11, 1, 1, 15, 13, 4, 2, 80, 1, 9, 14, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, 62, 2, 38, 0, 44, 0, 0, + 1, 7, 0, 143, 0, 10, 0, 137, 0, 16, 64, 11, 1, 14, 14, 12, 4, 2, 80, 1, + 9, 13, 79, 43, 43, 52, 0, 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, 58, 2, 38, + 0, 44, 0, 0, 1, 7, 0, 105, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 17, 13, + 4, 2, 80, 1, 9, 14, 79, 43, 43, 52, 0, 0, 255, 255, 0, 89, 0, 0, 1, 155, + 3, 26, 2, 38, 0, 44, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 30, 64, 21, + 16, 21, 80, 21, 80, 27, 111, 27, 4, 175, 27, 1, 21, 2, 9, 24, 79, 1, 9, 12, + 79, 43, 43, 1, 16, 93, 113, 49, 0, 2, 0, 18, 255, 251, 1, 204, 2, 113, 0, 18, + 0, 36, 0, 96, 64, 21, 29, 40, 18, 0, 77, 29, 32, 17, 0, 77, 24, 24, 18, 0, + 77, 24, 32, 17, 0, 77, 16, 184, 255, 232, 179, 13, 0, 77, 3, 184, 255, 232, 64, 30, + 13, 0, 77, 27, 118, 0, 38, 35, 33, 19, 115, 11, 9, 7, 37, 36, 8, 121, 33, 11, + 11, 22, 30, 124, 14, 65, 22, 124, 5, 66, 0, 63, 237, 63, 237, 18, 57, 47, 51, 237, + 50, 1, 16, 214, 206, 51, 253, 50, 206, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, + 1, 20, 14, 2, 35, 34, 39, 17, 35, 53, 51, 53, 54, 51, 50, 30, 2, 1, 22, 22, + 51, 50, 62, 2, 53, 52, 38, 35, 34, 7, 21, 51, 21, 35, 1, 204, 41, 71, 98, 57, + 61, 61, 53, 53, 61, 61, 57, 98, 71, 41, 254, 206, 11, 24, 11, 42, 65, 45, 24, 91, + 88, 25, 18, 98, 98, 1, 54, 86, 120, 75, 34, 15, 1, 25, 64, 255, 15, 34, 76, 120, + 254, 186, 2, 1, 27, 59, 93, 65, 126, 118, 3, 196, 64, 255, 255, 0, 55, 0, 0, 1, + 189, 3, 28, 2, 38, 0, 49, 0, 0, 1, 7, 0, 117, 0, 0, 0, 139, 0, 16, 64, + 11, 1, 0, 32, 18, 7, 16, 80, 1, 8, 31, 79, 43, 43, 52, 0, 0, 255, 255, 0, + 29, 255, 243, 1, 216, 3, 62, 2, 38, 0, 50, 0, 0, 1, 7, 0, 67, 0, 5, 0, + 137, 0, 16, 64, 11, 2, 1, 35, 33, 0, 9, 80, 2, 4, 34, 79, 43, 43, 52, 0, + 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 62, 2, 38, 0, 50, 0, 0, 1, 7, 0, + 143, 0, 9, 0, 137, 0, 16, 64, 11, 2, 12, 34, 32, 0, 9, 80, 2, 4, 33, 79, + 43, 43, 52, 0, 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 58, 2, 38, 0, 50, 0, + 0, 1, 7, 0, 105, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 37, 33, 0, 9, 80, + 2, 4, 34, 79, 43, 43, 52, 0, 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 28, 2, + 38, 0, 50, 0, 0, 1, 7, 0, 117, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 46, + 32, 0, 9, 80, 2, 4, 45, 79, 43, 43, 52, 0, 0, 255, 255, 0, 29, 255, 243, 1, + 216, 3, 26, 2, 38, 0, 50, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, + 16, 3, 2, 0, 34, 52, 0, 9, 80, 3, 4, 44, 79, 2, 4, 32, 79, 43, 43, 43, + 52, 52, 0, 0, 0, 0, 1, 0, 70, 0, 82, 1, 174, 1, 187, 0, 11, 0, 45, 64, + 16, 8, 0, 9, 11, 6, 2, 5, 3, 9, 5, 8, 6, 11, 3, 0, 2, 0, 47, 51, + 25, 197, 50, 24, 220, 50, 25, 197, 50, 1, 24, 47, 51, 25, 197, 50, 24, 220, 50, 25, + 197, 50, 49, 48, 37, 39, 7, 39, 55, 39, 55, 23, 55, 23, 7, 23, 1, 124, 130, 130, + 50, 130, 130, 50, 130, 130, 50, 130, 130, 82, 131, 131, 50, 131, 130, 50, 130, 130, 50, 130, + 131, 0, 3, 0, 29, 255, 223, 1, 216, 2, 139, 0, 25, 0, 35, 0, 45, 1, 103, 185, + 0, 44, 255, 240, 179, 12, 0, 77, 44, 184, 255, 248, 64, 44, 11, 0, 77, 41, 56, 17, + 0, 77, 40, 24, 19, 0, 77, 40, 24, 15, 0, 77, 40, 16, 14, 0, 77, 39, 32, 20, + 0, 77, 35, 8, 17, 0, 77, 34, 16, 12, 0, 77, 34, 8, 11, 0, 77, 30, 184, 255, + 224, 179, 19, 0, 77, 29, 184, 255, 216, 64, 29, 20, 0, 77, 28, 16, 17, 0, 77, 24, + 40, 13, 0, 77, 24, 32, 12, 0, 77, 23, 32, 17, 0, 77, 23, 24, 14, 0, 77, 16, + 184, 255, 232, 179, 13, 0, 77, 11, 184, 255, 208, 179, 15, 0, 77, 11, 184, 255, 224, 179, + 14, 0, 77, 11, 184, 255, 216, 64, 9, 13, 0, 77, 3, 16, 13, 0, 77, 40, 184, 255, + 208, 179, 12, 0, 77, 39, 184, 255, 208, 179, 14, 0, 77, 39, 184, 255, 232, 179, 12, 0, + 77, 39, 184, 255, 216, 179, 11, 0, 77, 38, 184, 255, 184, 64, 9, 18, 0, 77, 29, 64, + 17, 0, 77, 29, 184, 255, 208, 64, 29, 12, 0, 77, 28, 32, 18, 0, 77, 28, 64, 17, + 0, 77, 28, 40, 16, 0, 77, 23, 40, 17, 0, 77, 11, 32, 17, 0, 77, 7, 184, 255, + 200, 179, 12, 0, 77, 6, 184, 255, 168, 64, 49, 16, 0, 77, 10, 29, 30, 20, 21, 9, + 21, 7, 40, 39, 23, 22, 21, 8, 22, 8, 120, 9, 21, 20, 9, 21, 9, 9, 26, 118, + 13, 47, 22, 22, 36, 118, 0, 46, 22, 21, 33, 124, 18, 70, 9, 8, 43, 124, 5, 69, + 0, 63, 237, 198, 50, 63, 237, 198, 50, 1, 16, 214, 237, 51, 47, 16, 222, 237, 51, 47, + 135, 43, 135, 125, 196, 16, 14, 196, 196, 196, 196, 16, 135, 14, 196, 196, 196, 196, 49, 48, + 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 52, + 62, 2, 51, 50, 23, 55, 23, 7, 22, 22, 21, 20, 14, 2, 35, 34, 39, 7, 39, 55, + 38, 38, 37, 52, 38, 39, 3, 22, 22, 51, 50, 54, 37, 20, 22, 23, 19, 38, 38, 35, + 34, 6, 29, 32, 58, 81, 50, 56, 47, 21, 62, 30, 31, 35, 33, 58, 82, 49, 62, 46, + 23, 61, 32, 30, 31, 1, 103, 11, 12, 191, 15, 39, 20, 70, 70, 254, 237, 6, 11, 190, + 15, 36, 21, 69, 66, 1, 54, 83, 122, 79, 39, 27, 45, 31, 61, 41, 123, 85, 83, 122, + 80, 38, 28, 48, 31, 66, 40, 121, 85, 50, 84, 31, 254, 118, 13, 10, 130, 122, 48, 83, + 31, 1, 136, 12, 10, 130, 255, 255, 0, 48, 255, 243, 1, 196, 3, 62, 2, 38, 0, 56, + 0, 0, 1, 7, 0, 67, 0, 0, 0, 137, 0, 19, 185, 0, 1, 255, 253, 64, 9, 29, + 27, 4, 20, 80, 1, 6, 28, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 48, 255, 243, + 1, 196, 3, 62, 2, 38, 0, 56, 0, 0, 1, 7, 0, 143, 0, 9, 0, 137, 0, 16, + 64, 11, 1, 13, 28, 26, 4, 20, 80, 1, 6, 27, 79, 43, 43, 52, 0, 0, 255, 255, + 0, 48, 255, 243, 1, 196, 3, 58, 2, 38, 0, 56, 0, 0, 1, 7, 0, 105, 0, 0, + 0, 139, 0, 16, 64, 11, 1, 0, 31, 27, 4, 20, 80, 1, 6, 28, 79, 43, 43, 52, + 0, 0, 255, 255, 0, 48, 255, 243, 1, 196, 3, 26, 2, 38, 0, 56, 0, 0, 1, 7, + 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, 28, 46, 4, 20, 80, 2, 6, + 38, 79, 1, 6, 26, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 13, 0, 0, + 1, 232, 3, 62, 2, 38, 0, 60, 0, 0, 1, 7, 0, 143, 0, 9, 0, 137, 0, 16, + 64, 11, 1, 12, 19, 17, 4, 12, 80, 1, 4, 18, 79, 43, 43, 52, 0, 0, 0, 2, + 0, 73, 0, 0, 1, 199, 2, 107, 0, 15, 0, 30, 0, 111, 64, 21, 28, 16, 16, 0, + 77, 24, 40, 16, 0, 77, 24, 24, 15, 0, 77, 24, 16, 14, 0, 77, 9, 184, 255, 232, + 179, 8, 0, 77, 6, 184, 255, 232, 179, 18, 0, 77, 6, 184, 255, 240, 179, 17, 0, 77, + 6, 184, 255, 224, 64, 31, 8, 0, 77, 26, 118, 7, 32, 20, 2, 13, 115, 0, 15, 16, + 15, 32, 15, 3, 8, 15, 31, 20, 121, 13, 15, 66, 19, 121, 2, 0, 65, 0, 63, 221, + 237, 63, 221, 237, 1, 16, 214, 94, 93, 237, 50, 50, 16, 222, 237, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 19, 51, 21, 54, 51, 50, 22, 21, 20, 14, 2, 35, 35, 21, 35, + 19, 34, 34, 7, 21, 51, 50, 62, 2, 53, 52, 46, 2, 73, 82, 31, 30, 115, 124, 35, + 64, 91, 55, 55, 82, 156, 25, 35, 14, 58, 35, 58, 42, 23, 25, 40, 51, 2, 107, 103, + 3, 91, 88, 59, 80, 51, 22, 128, 1, 191, 1, 249, 13, 32, 53, 41, 33, 43, 25, 10, + 0, 1, 0, 71, 255, 245, 1, 220, 2, 181, 0, 63, 1, 53, 185, 0, 62, 255, 240, 179, + 13, 0, 77, 62, 184, 255, 216, 179, 12, 0, 77, 62, 184, 255, 224, 180, 10, 11, 0, 76, + 62, 184, 255, 216, 179, 9, 0, 77, 62, 184, 255, 224, 64, 14, 8, 0, 77, 57, 8, 12, + 0, 77, 57, 16, 10, 0, 77, 49, 184, 255, 232, 179, 18, 0, 77, 49, 184, 255, 224, 64, + 24, 17, 0, 77, 42, 24, 13, 0, 77, 37, 16, 13, 0, 77, 36, 16, 11, 0, 77, 35, + 16, 13, 0, 77, 16, 184, 255, 232, 180, 12, 14, 0, 76, 16, 184, 255, 224, 179, 11, 0, + 77, 16, 184, 255, 216, 179, 10, 0, 77, 16, 184, 255, 224, 180, 8, 9, 0, 76, 13, 184, + 255, 224, 179, 17, 0, 77, 13, 184, 255, 216, 179, 16, 0, 77, 13, 184, 255, 248, 179, 14, + 0, 77, 13, 184, 255, 232, 179, 13, 0, 77, 12, 184, 255, 224, 180, 17, 18, 0, 76, 12, + 184, 255, 208, 179, 16, 0, 77, 3, 184, 255, 224, 64, 65, 11, 0, 77, 23, 23, 39, 130, + 8, 64, 9, 0, 77, 47, 8, 63, 8, 111, 8, 3, 8, 8, 15, 45, 130, 0, 64, 8, + 11, 72, 0, 0, 32, 130, 15, 65, 52, 127, 0, 53, 1, 8, 53, 64, 0, 45, 39, 8, + 15, 32, 45, 59, 32, 8, 8, 29, 48, 136, 59, 77, 53, 74, 29, 136, 18, 81, 0, 63, + 237, 63, 63, 237, 18, 57, 47, 57, 18, 57, 17, 51, 17, 51, 17, 51, 1, 16, 214, 94, + 93, 237, 16, 222, 237, 51, 47, 43, 237, 17, 51, 47, 93, 43, 237, 50, 47, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 1, 20, 14, 2, 7, 6, 6, 21, 20, 30, 4, 21, 20, 6, 35, 34, 46, + 2, 39, 55, 30, 3, 51, 50, 54, 53, 52, 46, 4, 53, 52, 54, 55, 54, 54, 53, 52, + 38, 35, 34, 6, 21, 17, 35, 17, 52, 62, 2, 51, 50, 30, 2, 1, 144, 15, 22, 28, + 12, 14, 13, 27, 40, 46, 40, 27, 82, 87, 16, 33, 29, 21, 5, 14, 5, 20, 26, 30, + 15, 41, 38, 27, 40, 48, 40, 27, 30, 23, 21, 33, 36, 40, 42, 45, 83, 23, 42, 61, + 38, 46, 64, 38, 17, 2, 38, 24, 40, 33, 28, 13, 16, 21, 15, 20, 26, 23, 24, 35, + 51, 39, 76, 77, 6, 8, 8, 3, 73, 3, 9, 9, 6, 40, 38, 27, 35, 27, 23, 29, + 39, 30, 36, 48, 23, 20, 40, 23, 38, 45, 68, 60, 254, 19, 1, 239, 44, 73, 52, 29, + 23, 40, 52, 255, 255, 0, 58, 255, 245, 1, 176, 2, 181, 2, 38, 0, 68, 0, 0, 1, + 6, 0, 67, 0, 0, 0, 16, 64, 11, 2, 1, 52, 50, 28, 19, 80, 2, 15, 51, 79, + 43, 43, 52, 255, 255, 0, 58, 255, 245, 1, 176, 2, 181, 2, 38, 0, 68, 0, 0, 1, + 6, 0, 143, 18, 0, 0, 16, 64, 11, 2, 27, 51, 49, 28, 19, 80, 2, 15, 50, 79, + 43, 43, 52, 255, 255, 0, 58, 255, 245, 1, 176, 2, 175, 2, 38, 0, 68, 0, 0, 1, + 6, 0, 105, 9, 0, 0, 16, 64, 11, 2, 14, 54, 50, 28, 19, 80, 2, 15, 51, 79, + 43, 43, 52, 255, 255, 0, 58, 255, 245, 1, 176, 2, 145, 2, 38, 0, 68, 0, 0, 1, + 6, 0, 117, 0, 0, 0, 16, 64, 11, 2, 5, 63, 49, 28, 19, 80, 2, 15, 62, 79, + 43, 43, 52, 255, 255, 0, 58, 255, 245, 1, 176, 2, 143, 2, 38, 0, 68, 0, 0, 1, + 6, 0, 131, 0, 0, 0, 23, 64, 16, 3, 2, 5, 51, 69, 28, 19, 80, 3, 15, 61, + 79, 2, 15, 49, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, + 184, 2, 38, 0, 68, 0, 0, 1, 6, 1, 99, 0, 0, 0, 20, 64, 13, 3, 2, 5, + 54, 49, 28, 19, 80, 3, 2, 15, 52, 79, 43, 52, 43, 52, 52, 0, 3, 0, 31, 255, + 245, 1, 222, 1, 219, 0, 52, 0, 66, 0, 75, 0, 187, 64, 43, 37, 24, 16, 0, 77, + 37, 16, 13, 14, 0, 76, 36, 24, 11, 12, 0, 76, 32, 32, 13, 0, 77, 32, 16, 12, + 0, 77, 32, 32, 11, 0, 77, 31, 16, 14, 0, 77, 25, 24, 18, 0, 77, 14, 184, 255, + 232, 179, 17, 0, 77, 7, 184, 255, 232, 64, 25, 11, 12, 0, 76, 75, 3, 12, 130, 62, + 42, 26, 65, 65, 34, 67, 130, 11, 18, 18, 11, 77, 56, 130, 34, 50, 184, 255, 192, 64, + 40, 19, 22, 72, 50, 50, 34, 76, 53, 137, 39, 12, 134, 75, 39, 75, 39, 75, 0, 59, + 136, 26, 29, 81, 17, 17, 15, 136, 23, 81, 3, 72, 136, 6, 80, 49, 49, 46, 136, 0, + 80, 0, 63, 237, 50, 47, 63, 237, 50, 63, 237, 50, 47, 63, 51, 237, 17, 57, 57, 47, + 47, 16, 237, 16, 237, 1, 16, 198, 50, 47, 43, 16, 237, 16, 206, 50, 47, 16, 237, 17, + 57, 47, 51, 51, 51, 237, 50, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 19, 50, 22, 23, 54, 54, 51, 50, 21, 20, 20, 7, 35, 20, 22, 51, 50, 55, 23, 14, + 3, 35, 34, 38, 39, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 53, + 52, 38, 35, 34, 6, 7, 39, 54, 54, 19, 34, 6, 21, 20, 22, 51, 50, 54, 55, 38, + 38, 39, 38, 55, 52, 46, 2, 35, 34, 6, 21, 150, 44, 56, 15, 16, 42, 26, 129, 1, + 185, 52, 41, 32, 37, 11, 4, 19, 24, 28, 13, 33, 51, 19, 27, 56, 29, 33, 49, 33, + 16, 17, 34, 49, 33, 12, 29, 12, 36, 38, 22, 42, 8, 9, 9, 53, 48, 33, 33, 31, + 32, 17, 39, 14, 11, 12, 2, 20, 209, 9, 15, 18, 8, 23, 36, 1, 219, 34, 30, 30, + 34, 236, 5, 17, 7, 72, 75, 22, 70, 4, 9, 8, 5, 23, 20, 23, 20, 25, 40, 51, + 27, 31, 55, 41, 23, 5, 6, 23, 47, 64, 12, 6, 68, 8, 12, 254, 252, 42, 36, 30, + 48, 16, 13, 25, 59, 32, 11, 62, 37, 49, 30, 12, 58, 70, 0, 1, 0, 49, 255, 87, + 1, 195, 1, 219, 0, 55, 0, 140, 185, 0, 46, 255, 224, 180, 13, 14, 0, 76, 40, 184, + 255, 224, 179, 14, 0, 77, 40, 184, 255, 232, 64, 9, 13, 0, 77, 24, 24, 8, 0, 77, + 5, 184, 255, 224, 180, 15, 21, 0, 76, 2, 184, 255, 216, 64, 48, 15, 21, 0, 76, 17, + 64, 3, 80, 3, 2, 3, 55, 0, 23, 11, 20, 20, 26, 34, 34, 52, 57, 43, 130, 26, + 56, 0, 20, 20, 56, 15, 64, 8, 56, 128, 51, 51, 48, 136, 23, 55, 81, 35, 35, 38, + 136, 31, 80, 0, 63, 237, 50, 47, 63, 51, 237, 50, 47, 26, 16, 220, 26, 205, 18, 57, + 47, 205, 1, 16, 214, 237, 16, 206, 50, 47, 17, 57, 47, 204, 51, 205, 50, 212, 93, 205, + 49, 48, 43, 43, 43, 43, 43, 43, 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, + 22, 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 38, 38, 53, 52, 62, 2, 51, 50, 22, + 23, 7, 38, 38, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 6, 7, + 1, 38, 26, 23, 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 13, + 7, 91, 110, 40, 70, 93, 53, 34, 67, 38, 19, 33, 55, 28, 36, 64, 47, 28, 26, 47, + 66, 40, 32, 59, 35, 12, 34, 70, 42, 33, 12, 30, 29, 10, 23, 19, 13, 7, 5, 51, + 4, 5, 20, 20, 11, 2, 11, 30, 14, 13, 119, 106, 63, 92, 60, 29, 9, 12, 71, 12, + 7, 19, 41, 65, 46, 44, 63, 41, 20, 7, 12, 69, 12, 11, 1, 255, 255, 0, 40, 255, + 245, 1, 199, 2, 181, 2, 38, 0, 72, 0, 0, 1, 6, 0, 67, 0, 0, 0, 19, 185, + 0, 2, 255, 255, 64, 9, 37, 35, 19, 2, 80, 2, 0, 36, 79, 43, 43, 52, 0, 255, + 255, 0, 40, 255, 245, 1, 199, 2, 181, 2, 38, 0, 72, 0, 0, 1, 6, 0, 143, 18, + 0, 0, 16, 64, 11, 2, 24, 36, 34, 19, 2, 80, 2, 0, 35, 79, 43, 43, 52, 255, + 255, 0, 40, 255, 245, 1, 199, 2, 175, 2, 38, 0, 72, 0, 0, 1, 6, 0, 105, 13, + 0, 0, 16, 64, 11, 2, 15, 39, 35, 19, 2, 80, 2, 0, 36, 79, 43, 43, 52, 255, + 255, 0, 40, 255, 245, 1, 199, 2, 143, 2, 38, 0, 72, 0, 0, 1, 6, 0, 131, 13, + 0, 0, 23, 64, 16, 3, 2, 15, 36, 54, 19, 2, 80, 3, 0, 46, 79, 2, 0, 34, + 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 181, 2, 38, 1, + 12, 0, 0, 1, 6, 0, 67, 221, 0, 0, 19, 185, 0, 1, 255, 216, 64, 9, 25, 23, + 1, 11, 80, 1, 2, 24, 79, 43, 43, 52, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, + 181, 2, 38, 1, 12, 0, 0, 1, 6, 0, 143, 230, 0, 0, 19, 185, 0, 1, 255, 232, + 64, 9, 24, 22, 1, 11, 80, 1, 2, 23, 79, 43, 43, 52, 0, 255, 255, 0, 54, 255, + 245, 1, 194, 2, 175, 2, 38, 1, 12, 0, 0, 1, 6, 0, 105, 221, 0, 0, 19, 185, + 0, 1, 255, 219, 64, 9, 27, 23, 1, 11, 80, 1, 2, 24, 79, 43, 43, 52, 0, 255, + 255, 0, 54, 255, 245, 1, 194, 2, 143, 2, 38, 1, 12, 0, 0, 1, 6, 0, 131, 221, + 0, 0, 26, 177, 2, 1, 184, 255, 219, 64, 13, 24, 42, 1, 11, 80, 2, 2, 34, 79, + 1, 2, 22, 79, 43, 43, 43, 52, 52, 0, 0, 0, 2, 0, 55, 255, 245, 1, 204, 2, + 181, 0, 34, 0, 53, 0, 208, 64, 16, 51, 24, 15, 0, 77, 51, 16, 14, 0, 77, 51, + 8, 13, 0, 77, 47, 184, 255, 240, 179, 15, 0, 77, 42, 184, 255, 232, 64, 40, 15, 0, + 77, 16, 24, 16, 0, 77, 16, 24, 10, 0, 77, 15, 40, 8, 9, 0, 76, 12, 32, 9, + 0, 77, 12, 24, 8, 0, 77, 11, 32, 16, 0, 77, 11, 16, 10, 0, 77, 7, 184, 255, + 240, 179, 16, 0, 77, 7, 184, 255, 240, 64, 62, 8, 9, 0, 76, 33, 1, 30, 4, 30, + 29, 0, 0, 25, 25, 26, 23, 29, 29, 20, 35, 130, 4, 55, 44, 130, 14, 54, 23, 1, + 24, 0, 34, 33, 26, 34, 25, 24, 41, 136, 17, 0, 17, 16, 17, 32, 17, 3, 8, 34, + 24, 17, 17, 24, 34, 3, 29, 30, 77, 49, 136, 9, 81, 0, 63, 237, 63, 51, 23, 57, + 47, 47, 47, 94, 93, 16, 237, 16, 205, 17, 57, 57, 16, 205, 17, 57, 57, 1, 16, 214, + 237, 16, 222, 237, 50, 50, 47, 57, 57, 51, 47, 51, 47, 17, 51, 17, 18, 57, 57, 49, + 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 7, 22, 22, 21, + 20, 14, 2, 35, 34, 46, 2, 53, 52, 54, 51, 50, 22, 23, 38, 38, 39, 7, 39, 55, + 38, 38, 39, 55, 22, 22, 23, 55, 3, 52, 38, 53, 38, 38, 35, 34, 6, 21, 20, 30, + 2, 51, 50, 62, 2, 1, 204, 96, 29, 39, 17, 44, 76, 59, 45, 68, 45, 23, 96, 83, + 38, 58, 14, 5, 28, 20, 107, 21, 92, 15, 31, 23, 46, 20, 51, 26, 110, 88, 1, 25, + 57, 23, 56, 52, 13, 25, 37, 24, 34, 45, 26, 10, 2, 75, 33, 49, 141, 90, 49, 101, + 83, 52, 38, 62, 76, 39, 114, 120, 29, 13, 36, 66, 31, 37, 56, 32, 17, 31, 17, 48, + 13, 43, 32, 38, 254, 140, 22, 18, 8, 27, 22, 90, 71, 29, 54, 41, 24, 37, 60, 76, + 255, 255, 0, 71, 0, 0, 1, 176, 2, 145, 2, 38, 0, 81, 0, 0, 1, 6, 0, 117, + 0, 0, 0, 19, 185, 0, 1, 255, 255, 64, 9, 34, 20, 0, 5, 80, 1, 2, 33, 79, + 43, 43, 52, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 181, 2, 38, 0, 82, 0, 0, + 1, 6, 0, 67, 9, 0, 0, 16, 64, 11, 2, 5, 35, 33, 9, 0, 80, 2, 14, 34, + 79, 43, 43, 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 181, 2, 38, 0, 82, 0, 0, + 1, 6, 0, 143, 9, 0, 0, 16, 64, 11, 2, 13, 34, 32, 9, 0, 80, 2, 14, 33, + 79, 43, 43, 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 175, 2, 38, 0, 82, 0, 0, + 1, 6, 0, 105, 0, 0, 0, 16, 64, 11, 2, 0, 37, 33, 9, 0, 80, 2, 14, 34, + 79, 43, 43, 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 145, 2, 38, 0, 82, 0, 0, + 1, 6, 0, 117, 0, 0, 0, 16, 64, 11, 2, 0, 46, 32, 9, 0, 80, 2, 14, 45, + 79, 43, 43, 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 143, 2, 38, 0, 82, 0, 0, + 1, 6, 0, 131, 0, 0, 0, 23, 64, 16, 3, 2, 0, 34, 52, 9, 0, 80, 3, 14, + 44, 79, 2, 14, 32, 79, 43, 43, 43, 52, 52, 0, 0, 3, 0, 46, 0, 36, 1, 199, + 1, 233, 0, 3, 0, 15, 0, 27, 0, 38, 64, 16, 16, 2, 4, 22, 3, 10, 10, 29, + 28, 7, 13, 3, 25, 19, 0, 3, 0, 47, 221, 222, 205, 16, 222, 205, 1, 17, 18, 57, + 47, 206, 51, 221, 206, 51, 49, 48, 19, 33, 21, 33, 5, 20, 6, 35, 34, 38, 53, 52, + 54, 51, 50, 22, 17, 20, 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, 46, 1, 153, 254, + 103, 1, 6, 32, 26, 27, 33, 33, 27, 26, 32, 32, 26, 27, 33, 33, 27, 26, 32, 1, + 42, 70, 132, 24, 36, 36, 24, 25, 37, 37, 1, 51, 24, 37, 37, 24, 25, 36, 36, 0, + 3, 0, 40, 255, 224, 1, 204, 1, 240, 0, 26, 0, 36, 0, 46, 0, 157, 185, 0, 45, + 255, 232, 180, 15, 16, 0, 76, 45, 184, 255, 240, 64, 15, 14, 0, 77, 35, 24, 15, 16, + 0, 76, 35, 16, 14, 0, 77, 30, 184, 255, 248, 179, 15, 0, 77, 20, 184, 255, 240, 64, + 64, 8, 0, 77, 7, 16, 8, 0, 77, 25, 31, 30, 14, 4, 13, 26, 1, 40, 41, 11, + 4, 12, 0, 12, 13, 13, 27, 130, 17, 48, 26, 0, 0, 37, 130, 4, 47, 31, 40, 30, + 41, 4, 44, 34, 136, 22, 0, 26, 26, 11, 14, 1, 25, 4, 9, 22, 81, 44, 136, 9, + 13, 12, 12, 9, 80, 0, 63, 51, 47, 51, 16, 237, 63, 18, 23, 57, 51, 47, 51, 16, + 237, 17, 23, 57, 1, 16, 214, 237, 51, 47, 51, 16, 222, 237, 51, 47, 51, 17, 18, 23, + 57, 17, 18, 23, 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 55, 55, 38, 38, 53, 52, + 62, 2, 51, 50, 23, 55, 23, 7, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 7, 1, + 52, 38, 39, 7, 22, 22, 51, 50, 54, 39, 20, 22, 23, 55, 38, 38, 35, 34, 6, 45, + 45, 23, 27, 31, 56, 77, 45, 69, 48, 42, 47, 46, 24, 27, 31, 56, 78, 46, 33, 58, + 25, 42, 1, 28, 7, 9, 181, 14, 36, 21, 58, 68, 250, 7, 9, 180, 14, 37, 21, 57, + 67, 4, 62, 32, 83, 51, 55, 90, 63, 35, 36, 57, 36, 63, 31, 83, 51, 55, 89, 64, + 35, 19, 17, 57, 1, 8, 28, 50, 20, 245, 12, 10, 91, 78, 31, 46, 20, 244, 12, 11, + 91, 255, 255, 0, 68, 255, 246, 1, 173, 2, 181, 2, 38, 0, 88, 0, 0, 1, 6, 0, + 67, 0, 0, 0, 19, 185, 0, 1, 255, 254, 64, 9, 25, 23, 7, 0, 80, 1, 9, 24, + 79, 43, 43, 52, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, 181, 2, 38, 0, 88, 0, + 0, 1, 6, 0, 143, 9, 0, 0, 16, 64, 11, 1, 14, 24, 22, 7, 0, 80, 1, 9, + 23, 79, 43, 43, 52, 255, 255, 0, 68, 255, 246, 1, 173, 2, 175, 2, 38, 0, 88, 0, + 0, 1, 6, 0, 105, 0, 0, 0, 16, 64, 11, 1, 1, 27, 23, 7, 0, 80, 1, 9, + 24, 79, 43, 43, 52, 255, 255, 0, 68, 255, 246, 1, 173, 2, 143, 2, 38, 0, 88, 0, + 0, 1, 6, 0, 131, 0, 0, 0, 23, 64, 16, 2, 1, 1, 24, 42, 7, 0, 80, 2, + 9, 34, 79, 1, 9, 22, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 36, 255, 88, 1, + 205, 2, 181, 2, 38, 0, 92, 0, 0, 1, 6, 0, 143, 15, 0, 0, 16, 64, 11, 1, + 20, 35, 33, 32, 21, 80, 1, 9, 34, 79, 43, 43, 52, 0, 2, 0, 71, 255, 91, 1, + 204, 2, 181, 0, 20, 0, 37, 0, 124, 64, 31, 35, 32, 16, 0, 77, 35, 24, 15, 0, + 77, 35, 16, 14, 0, 77, 24, 32, 16, 0, 77, 24, 40, 15, 0, 77, 24, 16, 14, 0, + 77, 19, 184, 255, 232, 180, 8, 10, 0, 76, 2, 184, 255, 232, 179, 10, 0, 77, 2, 184, + 255, 224, 179, 9, 0, 77, 2, 184, 255, 232, 64, 30, 8, 0, 77, 21, 130, 0, 39, 30, + 13, 8, 127, 0, 10, 1, 8, 10, 38, 26, 136, 16, 80, 11, 12, 77, 10, 75, 33, 136, + 5, 81, 0, 63, 237, 63, 63, 51, 63, 237, 1, 16, 214, 94, 93, 237, 50, 50, 16, 222, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, 14, 2, 35, 34, 38, + 39, 21, 35, 17, 55, 21, 54, 54, 51, 50, 30, 2, 7, 52, 46, 2, 35, 34, 6, 7, + 17, 22, 22, 51, 50, 62, 2, 1, 204, 27, 51, 74, 47, 37, 56, 14, 83, 83, 29, 54, + 26, 42, 72, 53, 30, 85, 18, 33, 45, 26, 26, 47, 26, 14, 54, 29, 33, 47, 30, 14, + 231, 53, 89, 64, 36, 18, 11, 183, 3, 76, 14, 246, 15, 13, 33, 63, 90, 58, 43, 65, + 42, 21, 18, 17, 254, 243, 13, 22, 26, 45, 61, 255, 255, 0, 36, 255, 88, 1, 205, 2, + 143, 2, 38, 0, 92, 0, 0, 1, 6, 0, 131, 15, 0, 0, 23, 64, 16, 2, 1, 16, + 35, 53, 32, 21, 80, 2, 9, 45, 79, 1, 9, 33, 79, 43, 43, 43, 52, 52, 0, 255, + 255, 0, 9, 0, 0, 1, 235, 3, 6, 2, 38, 0, 36, 0, 0, 1, 7, 0, 138, 0, + 0, 0, 139, 0, 16, 64, 11, 2, 0, 23, 24, 4, 15, 80, 2, 9, 25, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, 123, 2, 38, 0, 68, 0, 0, 1, + 6, 0, 138, 9, 0, 0, 16, 64, 11, 2, 14, 49, 50, 28, 19, 80, 2, 15, 51, 79, + 43, 43, 52, 255, 255, 0, 9, 0, 0, 1, 235, 3, 40, 2, 38, 0, 36, 0, 0, 1, + 7, 1, 97, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 27, 41, 4, 15, 80, 2, 9, + 23, 79, 43, 43, 52, 0, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, 157, 2, 38, 0, + 68, 0, 0, 1, 6, 1, 97, 0, 0, 0, 16, 64, 11, 2, 5, 53, 67, 28, 19, 80, + 2, 15, 49, 79, 43, 43, 52, 0, 2, 0, 9, 255, 89, 1, 240, 2, 107, 0, 34, 0, + 41, 0, 117, 64, 61, 22, 38, 36, 35, 29, 23, 35, 23, 120, 24, 29, 20, 24, 24, 29, + 21, 39, 35, 30, 20, 35, 20, 120, 0, 30, 20, 0, 0, 30, 35, 0, 24, 17, 12, 6, + 0, 43, 24, 42, 8, 64, 14, 42, 128, 21, 22, 121, 39, 38, 38, 24, 35, 30, 29, 65, + 23, 24, 66, 20, 0, 68, 0, 63, 50, 63, 51, 63, 51, 51, 18, 57, 47, 51, 237, 50, + 26, 16, 220, 26, 205, 1, 16, 198, 16, 222, 222, 204, 205, 17, 18, 57, 135, 16, 43, 135, + 125, 196, 16, 196, 196, 135, 24, 16, 43, 135, 125, 196, 16, 14, 196, 5, 196, 196, 49, 48, + 37, 6, 6, 7, 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, 52, 54, + 55, 39, 35, 7, 35, 62, 3, 55, 51, 30, 3, 3, 6, 6, 7, 51, 38, 38, 1, 234, + 14, 21, 11, 13, 14, 36, 6, 20, 10, 7, 23, 36, 51, 44, 40, 23, 38, 238, 36, 84, + 17, 42, 49, 54, 30, 102, 29, 53, 47, 41, 224, 23, 54, 24, 200, 23, 53, 2, 8, 18, + 11, 14, 21, 13, 26, 3, 3, 54, 10, 34, 32, 29, 50, 19, 165, 162, 66, 154, 162, 163, + 74, 74, 162, 162, 153, 1, 223, 63, 166, 88, 90, 167, 0, 2, 0, 58, 255, 89, 1, 177, + 1, 219, 0, 52, 0, 67, 0, 154, 185, 0, 63, 255, 240, 179, 18, 0, 77, 63, 184, 255, + 232, 64, 26, 17, 0, 77, 44, 16, 17, 18, 0, 76, 35, 24, 11, 0, 77, 31, 24, 11, + 0, 77, 24, 24, 15, 17, 0, 76, 3, 184, 255, 224, 179, 12, 0, 77, 3, 184, 255, 232, + 180, 9, 11, 0, 76, 3, 184, 255, 224, 64, 46, 8, 0, 77, 57, 25, 41, 127, 5, 22, + 17, 11, 5, 69, 65, 130, 33, 50, 50, 33, 68, 13, 64, 19, 68, 128, 60, 137, 0, 38, + 16, 38, 2, 8, 38, 38, 0, 53, 136, 28, 81, 49, 49, 46, 136, 0, 80, 0, 63, 237, + 50, 47, 63, 237, 17, 57, 47, 94, 93, 237, 26, 16, 220, 26, 205, 1, 16, 198, 50, 47, + 16, 237, 16, 222, 220, 204, 205, 16, 237, 50, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 19, 50, 30, 2, 21, 17, 14, 3, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, + 38, 53, 52, 54, 55, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 23, 53, 52, + 46, 2, 35, 34, 6, 7, 39, 54, 54, 19, 50, 54, 55, 53, 38, 38, 35, 34, 14, 2, + 21, 20, 22, 247, 52, 71, 44, 18, 9, 26, 24, 18, 35, 6, 20, 11, 6, 22, 37, 51, + 47, 27, 27, 17, 37, 18, 38, 72, 56, 34, 35, 55, 71, 36, 49, 47, 9, 25, 43, 34, + 43, 64, 17, 10, 17, 79, 53, 31, 49, 16, 16, 45, 25, 23, 44, 34, 22, 61, 1, 219, + 26, 46, 66, 39, 254, 222, 6, 21, 25, 27, 12, 26, 3, 3, 54, 10, 36, 32, 21, 42, + 29, 2, 2, 13, 33, 58, 45, 40, 55, 34, 15, 11, 23, 21, 39, 32, 19, 12, 6, 68, + 8, 12, 254, 96, 4, 3, 138, 5, 6, 7, 18, 29, 22, 45, 35, 255, 255, 0, 46, 255, + 243, 1, 204, 3, 62, 2, 38, 0, 38, 0, 0, 1, 7, 0, 143, 0, 54, 0, 137, 0, + 16, 64, 11, 1, 55, 35, 33, 7, 0, 80, 1, 12, 34, 79, 43, 43, 52, 0, 0, 255, + 255, 0, 49, 255, 245, 1, 195, 2, 181, 2, 38, 0, 70, 0, 0, 1, 6, 0, 143, 45, + 0, 0, 16, 64, 11, 1, 49, 36, 34, 0, 26, 80, 1, 4, 35, 79, 43, 43, 52, 255, + 255, 0, 46, 255, 243, 1, 204, 3, 58, 2, 38, 0, 38, 0, 0, 1, 7, 0, 105, 0, + 54, 0, 139, 0, 16, 64, 11, 1, 51, 38, 34, 7, 0, 80, 1, 12, 35, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 49, 255, 245, 1, 195, 2, 175, 2, 38, 0, 70, 0, 0, 1, + 6, 0, 105, 50, 0, 0, 16, 64, 11, 1, 50, 39, 35, 0, 26, 80, 1, 4, 36, 79, + 43, 43, 52, 255, 255, 0, 46, 255, 243, 1, 204, 3, 34, 2, 38, 0, 38, 0, 0, 1, + 7, 1, 98, 0, 54, 0, 139, 0, 16, 64, 11, 1, 51, 35, 41, 7, 0, 80, 1, 12, + 33, 79, 43, 43, 52, 0, 0, 255, 255, 0, 49, 255, 245, 1, 195, 2, 151, 2, 38, 0, + 70, 0, 0, 1, 6, 1, 98, 54, 0, 0, 16, 64, 11, 1, 54, 36, 42, 0, 26, 80, + 1, 4, 34, 79, 43, 43, 52, 255, 255, 0, 46, 255, 243, 1, 204, 3, 61, 2, 38, 0, + 38, 0, 0, 1, 7, 1, 95, 0, 54, 0, 139, 0, 16, 64, 11, 1, 51, 33, 37, 7, + 0, 80, 1, 12, 38, 79, 43, 43, 52, 0, 0, 255, 255, 0, 49, 255, 245, 1, 195, 2, + 178, 2, 38, 0, 70, 0, 0, 1, 6, 1, 95, 50, 0, 0, 16, 64, 11, 1, 50, 34, + 38, 0, 26, 80, 1, 4, 39, 79, 43, 43, 52, 255, 255, 0, 54, 255, 251, 1, 204, 3, + 61, 2, 38, 0, 39, 0, 0, 1, 7, 1, 95, 255, 221, 0, 139, 0, 19, 185, 0, 2, + 255, 214, 64, 9, 29, 33, 7, 0, 80, 2, 9, 34, 79, 43, 43, 52, 0, 0, 0, 0, + 3, 0, 20, 255, 245, 1, 244, 2, 181, 0, 14, 0, 33, 0, 37, 0, 106, 64, 18, 28, + 32, 15, 16, 0, 76, 27, 16, 10, 0, 77, 27, 24, 8, 9, 0, 76, 10, 184, 255, 216, + 179, 14, 0, 77, 10, 184, 255, 240, 179, 13, 0, 77, 5, 184, 255, 240, 64, 35, 14, 0, + 77, 34, 37, 33, 14, 127, 17, 39, 8, 130, 25, 64, 9, 12, 72, 25, 38, 36, 37, 77, + 0, 3, 136, 33, 30, 80, 11, 136, 20, 81, 15, 16, 77, 0, 63, 51, 63, 237, 63, 51, + 237, 50, 63, 205, 1, 16, 214, 43, 237, 16, 222, 237, 50, 222, 205, 49, 48, 43, 43, 43, + 43, 43, 43, 1, 38, 38, 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 17, 55, 17, + 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 55, 7, 35, 53, 1, 25, + 11, 44, 25, 26, 36, 23, 11, 60, 48, 25, 35, 8, 82, 24, 75, 51, 44, 71, 50, 28, + 23, 44, 64, 40, 32, 46, 12, 219, 24, 55, 1, 110, 13, 23, 26, 45, 63, 36, 81, 88, + 6, 3, 2, 95, 14, 253, 88, 8, 16, 34, 63, 90, 56, 54, 89, 64, 36, 18, 10, 246, + 199, 199, 255, 255, 0, 18, 255, 251, 1, 204, 2, 113, 2, 6, 0, 171, 0, 0, 0, 2, + 0, 40, 255, 245, 1, 224, 2, 181, 0, 26, 0, 41, 0, 126, 185, 0, 37, 255, 232, 179, + 14, 0, 77, 37, 184, 255, 240, 179, 13, 0, 77, 32, 184, 255, 240, 64, 66, 14, 0, 77, + 21, 24, 15, 16, 0, 76, 20, 16, 9, 0, 77, 20, 32, 8, 0, 77, 16, 32, 8, 0, + 77, 27, 3, 1, 0, 127, 7, 6, 9, 43, 35, 130, 18, 42, 9, 0, 134, 6, 3, 3, + 5, 30, 136, 65, 23, 1, 0, 23, 16, 23, 32, 23, 3, 8, 23, 80, 38, 136, 13, 81, + 4, 5, 77, 0, 63, 51, 63, 237, 63, 94, 93, 93, 237, 18, 57, 47, 51, 237, 50, 1, + 16, 214, 237, 16, 222, 50, 205, 253, 205, 51, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 1, 35, 53, 51, 53, 55, 21, 51, 21, 35, 17, 6, 6, 35, 34, 46, 2, 53, 52, 62, + 2, 51, 50, 22, 23, 21, 38, 38, 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 1, + 76, 177, 177, 82, 66, 66, 26, 80, 54, 48, 79, 56, 31, 26, 50, 71, 44, 35, 52, 14, + 14, 49, 28, 31, 44, 28, 13, 72, 57, 29, 40, 9, 2, 36, 62, 69, 14, 83, 62, 253, + 233, 8, 16, 34, 63, 90, 56, 54, 89, 64, 36, 18, 10, 81, 13, 23, 26, 45, 63, 36, + 81, 88, 6, 3, 255, 255, 0, 91, 0, 0, 1, 204, 3, 6, 2, 38, 0, 40, 0, 0, + 1, 7, 0, 138, 0, 18, 0, 139, 0, 19, 185, 0, 1, 255, 249, 64, 9, 12, 13, 0, + 10, 80, 1, 1, 14, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 40, 255, 245, 1, 199, + 2, 123, 2, 38, 0, 72, 0, 0, 1, 6, 0, 138, 9, 0, 0, 16, 64, 11, 2, 11, + 34, 35, 19, 2, 80, 2, 0, 36, 79, 43, 43, 52, 255, 255, 0, 91, 0, 0, 1, 204, + 3, 40, 2, 38, 0, 40, 0, 0, 1, 7, 1, 97, 0, 18, 0, 139, 0, 19, 185, 0, + 1, 255, 249, 64, 9, 16, 30, 0, 10, 80, 1, 1, 12, 79, 43, 43, 52, 0, 0, 0, + 255, 255, 0, 40, 255, 245, 1, 199, 2, 157, 2, 38, 0, 72, 0, 0, 1, 6, 1, 97, + 9, 0, 0, 16, 64, 11, 2, 11, 38, 52, 19, 2, 80, 2, 0, 34, 79, 43, 43, 52, + 255, 255, 0, 91, 0, 0, 1, 204, 3, 34, 2, 38, 0, 40, 0, 0, 1, 7, 1, 98, + 0, 22, 0, 139, 0, 19, 185, 0, 1, 255, 253, 64, 9, 14, 20, 0, 10, 80, 1, 1, + 12, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 40, 255, 245, 1, 199, 2, 151, 2, 38, + 0, 72, 0, 0, 1, 6, 1, 98, 9, 0, 0, 16, 64, 11, 2, 11, 36, 42, 19, 2, + 80, 2, 0, 34, 79, 43, 43, 52, 0, 1, 0, 91, 255, 89, 1, 207, 2, 107, 0, 33, + 0, 74, 64, 37, 16, 11, 5, 33, 30, 30, 26, 26, 22, 33, 35, 28, 32, 115, 23, 34, + 31, 121, 28, 28, 32, 27, 121, 24, 65, 32, 32, 33, 121, 23, 7, 64, 13, 128, 0, 23, + 66, 0, 63, 51, 26, 220, 26, 205, 16, 237, 50, 47, 63, 237, 18, 57, 47, 237, 1, 16, + 214, 237, 50, 16, 206, 50, 50, 47, 50, 47, 16, 220, 204, 205, 49, 48, 37, 6, 7, 6, + 6, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, 52, 54, 55, 54, 54, 55, 33, + 17, 33, 21, 33, 21, 51, 21, 35, 21, 33, 1, 204, 25, 23, 13, 14, 36, 6, 20, 10, + 6, 22, 36, 51, 44, 21, 16, 8, 14, 5, 254, 229, 1, 91, 254, 247, 232, 232, 1, 31, + 2, 14, 23, 14, 21, 13, 26, 3, 3, 54, 10, 34, 32, 21, 38, 16, 8, 14, 4, 2, + 107, 70, 190, 70, 219, 0, 2, 0, 40, 255, 89, 1, 199, 1, 219, 0, 46, 0, 55, 0, + 183, 185, 0, 52, 255, 232, 64, 29, 14, 0, 77, 45, 16, 16, 0, 77, 45, 24, 15, 0, + 77, 45, 16, 8, 0, 77, 40, 16, 16, 0, 77, 39, 32, 16, 0, 77, 7, 184, 255, 232, + 179, 14, 0, 77, 7, 184, 255, 224, 180, 12, 13, 0, 76, 2, 184, 255, 224, 179, 17, 0, + 77, 2, 184, 255, 224, 179, 9, 0, 77, 2, 184, 255, 232, 179, 8, 0, 77, 1, 184, 255, + 208, 179, 18, 0, 77, 1, 184, 255, 232, 179, 17, 0, 77, 1, 184, 255, 216, 64, 39, 15, + 16, 0, 76, 29, 24, 18, 34, 12, 12, 47, 130, 3, 57, 55, 5, 130, 42, 56, 20, 64, + 26, 56, 128, 5, 134, 55, 55, 0, 11, 11, 8, 136, 37, 81, 50, 136, 0, 80, 0, 63, + 237, 63, 237, 50, 47, 17, 57, 47, 237, 26, 16, 220, 26, 205, 1, 16, 214, 237, 50, 16, + 222, 237, 51, 47, 51, 222, 204, 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 1, 50, 22, 21, 21, 33, 22, 22, 51, 50, 54, 55, 23, 6, 6, 7, + 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, 52, 54, 55, 54, 55, 6, + 6, 35, 34, 46, 2, 53, 52, 62, 2, 23, 54, 38, 35, 34, 14, 2, 7, 1, 3, 94, + 102, 254, 180, 5, 85, 77, 44, 62, 16, 11, 10, 35, 15, 13, 15, 36, 6, 20, 10, 6, + 22, 36, 51, 48, 23, 16, 9, 9, 8, 16, 8, 60, 91, 60, 30, 38, 62, 78, 153, 1, + 63, 51, 29, 47, 34, 20, 3, 1, 219, 117, 119, 29, 72, 75, 14, 8, 70, 8, 25, 17, + 14, 21, 13, 26, 3, 3, 54, 10, 36, 32, 21, 36, 16, 10, 7, 1, 1, 37, 64, 89, + 52, 62, 92, 60, 30, 198, 57, 71, 22, 36, 46, 24, 255, 255, 0, 91, 0, 0, 1, 204, + 3, 61, 2, 38, 0, 40, 0, 0, 1, 7, 1, 95, 0, 27, 0, 139, 0, 16, 64, 11, + 1, 1, 12, 16, 0, 10, 80, 1, 1, 17, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, + 255, 245, 1, 199, 2, 178, 2, 38, 0, 72, 0, 0, 1, 6, 1, 95, 9, 0, 0, 16, + 64, 11, 2, 11, 34, 38, 19, 2, 80, 2, 0, 39, 79, 43, 43, 52, 255, 255, 0, 46, + 255, 243, 1, 199, 3, 58, 2, 38, 0, 42, 0, 0, 1, 7, 0, 105, 0, 45, 0, 139, + 0, 16, 64, 11, 1, 44, 43, 39, 9, 1, 80, 1, 14, 40, 79, 43, 43, 52, 0, 0, + 255, 255, 0, 40, 255, 88, 1, 173, 2, 175, 2, 38, 0, 74, 0, 0, 1, 6, 0, 105, + 0, 0, 0, 16, 64, 11, 2, 15, 51, 47, 7, 16, 80, 2, 12, 48, 79, 43, 43, 52, + 255, 255, 0, 46, 255, 243, 1, 199, 3, 40, 2, 38, 0, 42, 0, 0, 1, 7, 1, 97, + 0, 54, 0, 139, 0, 16, 64, 11, 1, 53, 42, 56, 9, 1, 80, 1, 14, 38, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 40, 255, 88, 1, 173, 2, 157, 2, 38, 0, 74, 0, 0, + 1, 6, 1, 97, 0, 0, 0, 16, 64, 11, 2, 15, 50, 64, 7, 16, 80, 2, 12, 46, + 79, 43, 43, 52, 255, 255, 0, 46, 255, 243, 1, 199, 3, 34, 2, 38, 0, 42, 0, 0, + 1, 7, 1, 98, 0, 45, 0, 139, 0, 16, 64, 11, 1, 44, 40, 46, 9, 1, 80, 1, + 14, 38, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, 255, 88, 1, 173, 2, 151, 2, 38, + 0, 74, 0, 0, 1, 6, 1, 98, 0, 0, 0, 16, 64, 11, 2, 15, 48, 54, 7, 16, + 80, 2, 12, 46, 79, 43, 43, 52, 255, 255, 0, 46, 255, 86, 1, 199, 2, 121, 2, 38, + 0, 42, 0, 0, 1, 6, 1, 195, 18, 0, 0, 10, 182, 1, 13, 47, 41, 9, 1, 80, + 43, 52, 0, 0, 255, 255, 0, 40, 255, 88, 1, 173, 2, 185, 2, 38, 0, 74, 0, 0, + 1, 6, 1, 196, 22, 0, 0, 16, 64, 11, 2, 37, 48, 56, 7, 16, 80, 2, 12, 46, + 79, 43, 43, 52, 255, 255, 0, 45, 0, 0, 1, 199, 3, 58, 2, 38, 0, 43, 0, 0, + 1, 7, 0, 105, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 17, 13, 7, 1, 80, 1, + 0, 14, 79, 43, 43, 52, 0, 0, 0, 2, 0, 44, 0, 0, 1, 176, 3, 62, 0, 21, + 0, 27, 0, 138, 64, 21, 16, 32, 18, 0, 77, 16, 40, 17, 0, 77, 16, 24, 16, 0, + 77, 16, 16, 15, 0, 77, 9, 184, 255, 216, 179, 8, 0, 77, 8, 184, 255, 232, 179, 10, + 0, 77, 8, 184, 255, 216, 64, 46, 9, 0, 77, 13, 127, 12, 29, 64, 26, 27, 24, 23, + 96, 22, 25, 25, 28, 3, 21, 127, 0, 0, 1, 8, 0, 28, 17, 136, 6, 80, 27, 23, + 64, 25, 22, 24, 128, 26, 26, 24, 1, 2, 77, 13, 0, 74, 0, 63, 50, 63, 51, 206, + 50, 47, 26, 16, 205, 50, 26, 205, 50, 63, 237, 1, 16, 214, 94, 93, 237, 50, 17, 51, + 25, 47, 51, 26, 205, 50, 205, 50, 26, 24, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 51, 17, 55, 21, 54, 54, 51, 50, 30, 2, 21, 17, 35, 53, 52, 38, 35, 34, + 6, 7, 17, 17, 23, 7, 39, 7, 39, 71, 83, 20, 50, 24, 53, 71, 42, 18, 82, 48, + 62, 26, 49, 11, 110, 26, 84, 84, 26, 2, 157, 14, 226, 8, 9, 31, 56, 78, 47, 254, + 250, 244, 86, 71, 11, 5, 254, 127, 3, 62, 85, 40, 55, 55, 40, 0, 2, 0, 18, 0, + 0, 1, 226, 2, 107, 0, 19, 0, 23, 0, 85, 64, 44, 23, 14, 2, 115, 19, 17, 1, + 25, 22, 13, 5, 115, 10, 8, 0, 6, 1, 6, 24, 21, 0, 7, 10, 17, 13, 10, 4, + 121, 22, 0, 22, 1, 8, 10, 22, 10, 22, 6, 15, 11, 65, 2, 6, 66, 0, 63, 51, + 63, 51, 18, 57, 57, 47, 47, 94, 93, 16, 237, 17, 51, 51, 16, 205, 50, 50, 1, 16, + 214, 93, 206, 51, 237, 50, 50, 16, 222, 50, 206, 237, 50, 50, 49, 48, 1, 17, 35, 17, + 35, 17, 35, 17, 35, 53, 51, 53, 51, 21, 51, 53, 51, 21, 51, 21, 35, 35, 21, 51, + 1, 173, 83, 192, 83, 53, 53, 83, 192, 83, 53, 136, 192, 192, 1, 212, 254, 44, 1, 32, + 254, 224, 1, 212, 61, 90, 90, 90, 90, 61, 110, 0, 1, 0, 20, 0, 0, 1, 176, 2, + 181, 0, 29, 0, 135, 182, 21, 24, 15, 16, 0, 76, 14, 184, 255, 216, 179, 18, 0, 77, + 14, 184, 255, 240, 179, 17, 0, 77, 14, 184, 255, 216, 179, 9, 0, 77, 14, 184, 255, 224, + 179, 8, 0, 77, 13, 184, 255, 232, 179, 18, 0, 77, 13, 184, 255, 224, 64, 45, 10, 0, + 77, 18, 127, 17, 31, 8, 6, 4, 26, 127, 29, 1, 0, 27, 1, 27, 30, 18, 27, 74, + 7, 28, 4, 1, 1, 3, 22, 136, 0, 11, 16, 11, 32, 11, 64, 11, 4, 8, 11, 80, + 2, 3, 77, 0, 63, 51, 63, 94, 93, 237, 18, 57, 47, 51, 205, 50, 63, 51, 1, 16, + 214, 93, 50, 206, 253, 50, 204, 51, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 19, 51, 53, 55, 21, 51, 21, 35, 21, 54, 54, 51, 50, 30, 2, 21, 17, 35, 53, 52, + 38, 35, 34, 6, 7, 17, 35, 17, 35, 20, 66, 82, 162, 162, 19, 49, 22, 49, 67, 40, + 18, 82, 45, 55, 23, 49, 10, 82, 66, 2, 98, 69, 14, 83, 62, 91, 8, 9, 31, 56, + 78, 47, 254, 250, 244, 86, 71, 11, 5, 254, 127, 2, 36, 255, 255, 0, 89, 0, 0, 1, + 155, 3, 28, 2, 38, 0, 44, 0, 0, 1, 7, 0, 117, 0, 0, 0, 139, 0, 16, 64, + 11, 1, 0, 26, 12, 4, 2, 80, 1, 9, 25, 79, 43, 43, 52, 0, 0, 255, 255, 0, + 54, 255, 245, 1, 194, 2, 145, 2, 38, 1, 12, 0, 0, 1, 6, 0, 117, 221, 0, 0, + 19, 185, 0, 1, 255, 219, 64, 9, 36, 22, 1, 11, 80, 1, 2, 35, 79, 43, 43, 52, + 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, 6, 2, 38, 0, 44, 0, 0, 1, 7, 0, + 138, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 12, 13, 4, 2, 80, 1, 9, 14, 79, + 43, 43, 52, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 123, 2, 38, 1, 12, 0, + 0, 1, 6, 0, 138, 221, 0, 0, 19, 185, 0, 1, 255, 219, 64, 9, 22, 23, 1, 11, + 80, 1, 2, 24, 79, 43, 43, 52, 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, 40, 2, + 38, 0, 44, 0, 0, 1, 7, 1, 97, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 16, + 30, 4, 2, 80, 1, 9, 12, 79, 43, 43, 52, 0, 0, 255, 255, 0, 54, 255, 245, 1, + 194, 2, 157, 2, 38, 1, 12, 0, 0, 1, 6, 1, 97, 221, 0, 0, 19, 185, 0, 1, + 255, 219, 64, 9, 26, 40, 1, 11, 80, 1, 2, 22, 79, 43, 43, 52, 0, 0, 1, 0, + 89, 255, 89, 1, 155, 2, 107, 0, 33, 0, 65, 64, 32, 30, 27, 28, 25, 20, 15, 9, + 33, 2, 4, 1, 115, 28, 28, 35, 34, 11, 64, 17, 34, 128, 0, 29, 121, 31, 65, 1, + 28, 121, 4, 25, 66, 0, 63, 51, 237, 50, 63, 237, 50, 26, 16, 220, 26, 205, 1, 17, + 18, 57, 47, 253, 50, 205, 50, 220, 204, 205, 50, 16, 205, 50, 49, 48, 1, 17, 51, 21, + 35, 6, 7, 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, 52, 54, 55, + 54, 55, 35, 53, 51, 17, 35, 53, 33, 21, 1, 35, 120, 119, 16, 23, 13, 16, 36, 6, + 20, 10, 7, 23, 36, 51, 47, 22, 16, 13, 11, 119, 120, 120, 1, 66, 2, 37, 254, 33, + 70, 12, 23, 14, 21, 13, 26, 3, 3, 54, 10, 36, 32, 21, 37, 17, 16, 8, 70, 1, + 223, 70, 70, 0, 2, 0, 54, 255, 89, 1, 194, 2, 158, 0, 39, 0, 51, 0, 72, 64, + 38, 37, 24, 9, 13, 0, 76, 49, 43, 43, 39, 28, 23, 17, 34, 11, 4, 127, 1, 39, + 39, 53, 52, 19, 64, 25, 52, 128, 11, 7, 136, 34, 81, 46, 40, 0, 133, 3, 73, 0, + 63, 237, 222, 205, 63, 237, 51, 26, 16, 220, 26, 205, 1, 17, 18, 57, 47, 206, 253, 220, + 50, 222, 204, 205, 17, 51, 47, 205, 49, 48, 43, 19, 35, 53, 51, 17, 20, 22, 51, 50, + 54, 55, 23, 6, 6, 7, 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, + 52, 54, 55, 54, 54, 55, 34, 46, 2, 53, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, + 20, 6, 188, 134, 216, 38, 38, 29, 49, 14, 12, 30, 23, 7, 13, 15, 35, 6, 21, 10, + 6, 22, 37, 51, 47, 24, 16, 4, 8, 4, 44, 58, 35, 14, 21, 26, 38, 38, 26, 27, + 37, 37, 1, 139, 69, 254, 227, 69, 47, 14, 8, 70, 21, 21, 8, 14, 21, 13, 26, 3, + 3, 54, 10, 36, 32, 21, 37, 17, 3, 8, 2, 24, 48, 71, 47, 1, 101, 36, 31, 31, + 36, 36, 31, 31, 36, 255, 255, 0, 89, 0, 0, 1, 155, 3, 34, 2, 38, 0, 44, 0, + 0, 1, 7, 1, 98, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 14, 20, 4, 2, 80, + 1, 9, 12, 79, 43, 43, 52, 0, 0, 0, 1, 0, 54, 255, 245, 1, 194, 1, 208, 0, + 21, 0, 40, 64, 22, 19, 32, 9, 13, 0, 76, 11, 4, 127, 1, 21, 21, 23, 22, 7, + 136, 16, 81, 0, 133, 3, 73, 0, 63, 237, 63, 237, 1, 17, 18, 57, 47, 206, 253, 204, + 49, 48, 43, 19, 35, 53, 51, 17, 20, 22, 51, 50, 54, 55, 23, 14, 3, 35, 34, 46, + 2, 53, 188, 134, 216, 38, 38, 29, 49, 14, 12, 6, 22, 29, 35, 19, 44, 58, 35, 14, + 1, 139, 69, 254, 227, 69, 47, 14, 8, 70, 3, 9, 8, 6, 24, 48, 71, 47, 255, 255, + 0, 54, 255, 245, 1, 194, 2, 158, 2, 6, 0, 76, 0, 0, 0, 2, 0, 42, 255, 243, + 1, 215, 2, 107, 0, 3, 0, 19, 0, 40, 64, 20, 11, 11, 0, 18, 115, 5, 21, 0, + 115, 1, 20, 15, 124, 8, 70, 19, 2, 65, 1, 66, 0, 63, 63, 51, 63, 237, 1, 16, + 214, 237, 16, 222, 237, 17, 57, 47, 49, 48, 51, 35, 17, 51, 33, 17, 20, 6, 35, 34, + 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, 124, 82, 82, 1, 91, 87, 75, 35, 70, 27, + 33, 17, 47, 34, 39, 41, 2, 107, 254, 64, 98, 86, 25, 25, 67, 19, 27, 51, 63, 1, + 191, 0, 4, 0, 89, 255, 89, 1, 156, 2, 151, 0, 3, 0, 19, 0, 31, 0, 43, 0, + 71, 64, 39, 29, 131, 23, 23, 14, 127, 17, 45, 41, 131, 35, 35, 0, 7, 7, 3, 127, + 0, 0, 1, 8, 0, 44, 26, 138, 20, 15, 73, 11, 136, 4, 75, 38, 138, 32, 1, 73, + 0, 74, 0, 63, 63, 222, 237, 63, 237, 63, 222, 237, 1, 16, 214, 94, 93, 237, 51, 47, + 17, 51, 47, 237, 16, 222, 237, 50, 47, 237, 49, 48, 51, 17, 51, 17, 23, 34, 38, 39, + 55, 22, 22, 51, 50, 54, 53, 17, 51, 17, 20, 6, 19, 34, 38, 53, 52, 54, 51, 50, + 22, 21, 20, 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 108, 82, 44, 11, + 34, 11, 10, 9, 23, 10, 44, 37, 82, 81, 40, 25, 35, 35, 25, 25, 35, 35, 228, 25, + 35, 35, 25, 25, 35, 35, 1, 208, 254, 48, 167, 5, 5, 68, 3, 4, 53, 51, 1, 200, + 254, 57, 90, 86, 2, 197, 33, 28, 27, 33, 33, 27, 28, 33, 33, 28, 27, 33, 33, 27, + 28, 33, 255, 255, 0, 54, 255, 243, 1, 165, 3, 58, 2, 38, 0, 45, 0, 0, 1, 7, + 0, 105, 0, 50, 0, 139, 0, 16, 64, 11, 1, 63, 25, 21, 11, 2, 80, 1, 1, 22, + 79, 43, 43, 52, 0, 0, 255, 255, 0, 71, 255, 86, 1, 135, 2, 175, 2, 38, 1, 93, + 0, 0, 1, 6, 0, 105, 20, 0, 0, 16, 64, 11, 1, 42, 25, 21, 11, 2, 80, 1, + 1, 22, 79, 43, 43, 52, 255, 255, 0, 64, 255, 86, 1, 235, 2, 107, 2, 38, 0, 46, + 0, 0, 1, 6, 1, 195, 239, 0, 0, 13, 185, 0, 1, 255, 207, 180, 32, 26, 16, 8, + 80, 43, 52, 0, 0, 0, 255, 255, 0, 71, 255, 86, 1, 222, 2, 181, 2, 38, 0, 78, + 0, 0, 1, 6, 1, 195, 239, 0, 0, 13, 185, 0, 1, 255, 210, 180, 32, 26, 13, 5, + 80, 43, 52, 0, 0, 0, 0, 2, 0, 64, 0, 0, 2, 6, 2, 167, 0, 13, 0, 34, + 0, 105, 64, 55, 31, 14, 17, 14, 120, 34, 31, 20, 34, 34, 31, 23, 17, 22, 17, 120, + 26, 23, 20, 26, 26, 23, 6, 7, 13, 0, 0, 14, 14, 22, 36, 31, 26, 115, 28, 35, + 17, 31, 26, 17, 17, 28, 29, 65, 28, 66, 23, 22, 66, 12, 6, 6, 34, 14, 65, 0, + 63, 51, 51, 47, 205, 63, 51, 63, 63, 18, 57, 25, 47, 51, 51, 1, 24, 47, 16, 214, + 237, 50, 16, 206, 50, 47, 51, 47, 221, 222, 205, 135, 16, 43, 135, 125, 196, 135, 24, 16, + 43, 135, 4, 125, 196, 49, 48, 1, 52, 52, 55, 54, 54, 55, 23, 6, 6, 21, 20, 22, + 23, 39, 6, 6, 7, 30, 3, 23, 35, 38, 38, 39, 17, 35, 17, 51, 17, 54, 54, 55, + 1, 135, 1, 3, 34, 25, 64, 19, 19, 1, 1, 93, 38, 80, 51, 31, 52, 45, 42, 21, + 93, 34, 87, 51, 82, 82, 42, 77, 30, 1, 208, 11, 18, 9, 46, 91, 40, 21, 40, 79, + 35, 9, 20, 11, 155, 77, 135, 77, 30, 70, 81, 94, 55, 93, 158, 45, 254, 216, 2, 107, + 254, 236, 67, 146, 63, 0, 1, 0, 71, 0, 0, 1, 222, 1, 208, 0, 22, 0, 101, 64, + 54, 6, 0, 5, 0, 129, 11, 6, 20, 11, 0, 20, 11, 6, 19, 16, 0, 20, 19, 20, + 0, 129, 16, 19, 20, 16, 19, 0, 16, 20, 20, 5, 24, 16, 11, 127, 0, 13, 1, 8, + 13, 23, 11, 16, 5, 20, 73, 14, 15, 73, 13, 74, 5, 6, 74, 0, 63, 51, 63, 63, + 51, 63, 18, 57, 57, 1, 16, 214, 94, 93, 237, 50, 16, 206, 50, 47, 16, 193, 135, 4, + 43, 16, 0, 193, 135, 5, 125, 16, 196, 135, 8, 24, 16, 43, 135, 5, 125, 196, 49, 48, + 55, 30, 3, 23, 35, 46, 3, 39, 21, 35, 17, 51, 21, 54, 54, 55, 51, 6, 6, 238, + 27, 68, 67, 60, 18, 98, 19, 56, 63, 63, 25, 83, 83, 55, 110, 44, 97, 43, 121, 255, + 20, 61, 70, 73, 31, 31, 65, 60, 50, 17, 223, 1, 208, 194, 48, 95, 51, 51, 108, 255, + 255, 0, 91, 0, 0, 1, 204, 3, 62, 2, 38, 0, 47, 0, 0, 1, 7, 0, 143, 255, + 194, 0, 137, 0, 19, 185, 0, 1, 255, 173, 64, 9, 8, 6, 2, 0, 80, 1, 3, 7, + 79, 43, 43, 52, 0, 0, 0, 0, 2, 0, 54, 255, 245, 1, 194, 3, 62, 0, 23, 0, + 27, 0, 85, 64, 52, 3, 24, 14, 0, 77, 3, 32, 13, 0, 77, 3, 24, 12, 0, 77, + 3, 32, 11, 0, 77, 3, 32, 9, 0, 77, 24, 128, 26, 26, 9, 127, 6, 6, 7, 19, + 29, 7, 28, 24, 27, 26, 25, 6, 133, 9, 77, 18, 18, 15, 136, 0, 81, 0, 63, 237, + 50, 47, 63, 237, 222, 205, 221, 205, 1, 16, 198, 16, 206, 17, 57, 47, 237, 51, 47, 26, + 205, 49, 48, 43, 43, 43, 43, 43, 5, 34, 46, 2, 53, 17, 35, 53, 51, 17, 20, 30, + 2, 51, 50, 54, 55, 23, 14, 3, 3, 7, 39, 55, 1, 82, 44, 58, 34, 14, 134, 216, + 9, 19, 28, 19, 29, 50, 14, 12, 6, 22, 30, 35, 32, 150, 19, 144, 11, 24, 48, 71, + 47, 1, 173, 70, 254, 13, 35, 44, 27, 10, 14, 8, 70, 3, 9, 8, 6, 3, 8, 54, + 49, 70, 255, 255, 0, 91, 255, 86, 1, 204, 2, 107, 2, 38, 0, 47, 0, 0, 1, 6, + 1, 195, 0, 0, 0, 13, 185, 0, 1, 255, 226, 180, 15, 9, 2, 0, 80, 43, 52, 0, + 0, 0, 255, 255, 0, 54, 255, 86, 1, 194, 2, 176, 2, 38, 0, 79, 0, 0, 1, 6, + 1, 195, 54, 0, 0, 10, 182, 1, 47, 33, 27, 7, 19, 80, 43, 52, 0, 0, 255, 255, + 0, 91, 0, 0, 1, 204, 2, 108, 2, 38, 0, 47, 0, 0, 1, 6, 1, 194, 44, 183, + 0, 10, 182, 1, 18, 8, 6, 2, 0, 80, 43, 52, 0, 0, 255, 255, 0, 54, 255, 245, + 1, 194, 2, 181, 2, 38, 0, 79, 0, 0, 1, 7, 1, 194, 0, 131, 0, 0, 0, 10, + 182, 1, 128, 26, 24, 7, 19, 80, 43, 52, 255, 255, 0, 91, 0, 0, 1, 204, 2, 107, + 2, 38, 0, 47, 0, 0, 1, 7, 1, 98, 0, 113, 254, 234, 0, 10, 182, 1, 87, 8, + 14, 2, 0, 80, 43, 52, 255, 255, 0, 54, 255, 245, 2, 27, 2, 176, 2, 38, 0, 79, + 0, 0, 1, 7, 1, 98, 0, 229, 254, 234, 0, 10, 182, 1, 227, 26, 32, 7, 19, 80, + 43, 52, 0, 1, 0, 18, 0, 0, 1, 204, 2, 107, 0, 13, 0, 66, 64, 32, 0, 15, + 10, 11, 9, 12, 115, 4, 5, 6, 3, 14, 12, 3, 4, 11, 10, 9, 6, 10, 5, 4, + 10, 4, 10, 4, 7, 65, 13, 121, 2, 66, 0, 63, 237, 63, 57, 57, 47, 47, 16, 205, + 17, 57, 57, 16, 205, 17, 57, 57, 1, 16, 214, 50, 205, 50, 253, 50, 205, 50, 16, 206, + 49, 48, 37, 21, 33, 17, 7, 39, 55, 17, 51, 21, 55, 23, 7, 21, 1, 204, 254, 165, + 66, 29, 95, 83, 107, 28, 135, 70, 70, 1, 0, 34, 59, 49, 1, 33, 246, 55, 59, 70, + 229, 0, 1, 0, 54, 255, 245, 1, 194, 2, 176, 0, 31, 0, 101, 64, 58, 3, 24, 11, + 12, 0, 76, 3, 32, 9, 10, 0, 76, 2, 16, 13, 0, 77, 15, 16, 27, 14, 17, 127, + 7, 8, 11, 9, 0, 6, 1, 8, 6, 6, 33, 32, 17, 6, 7, 16, 15, 14, 9, 15, + 8, 7, 15, 7, 15, 7, 23, 10, 133, 13, 77, 23, 136, 0, 81, 0, 63, 237, 63, 237, + 18, 57, 57, 47, 47, 16, 205, 17, 57, 57, 16, 205, 17, 57, 57, 1, 17, 18, 57, 47, + 94, 93, 51, 204, 205, 50, 253, 50, 204, 205, 50, 49, 48, 43, 43, 43, 5, 34, 46, 2, + 53, 53, 7, 39, 55, 53, 35, 53, 51, 17, 55, 23, 7, 21, 20, 30, 2, 51, 50, 54, + 55, 23, 14, 3, 1, 82, 44, 58, 34, 14, 66, 28, 94, 134, 216, 78, 28, 106, 9, 19, + 28, 19, 29, 50, 14, 12, 6, 22, 30, 35, 11, 24, 48, 71, 47, 126, 34, 55, 48, 244, + 70, 254, 241, 40, 55, 55, 168, 35, 44, 27, 10, 14, 8, 70, 3, 9, 8, 6, 255, 255, + 0, 55, 0, 0, 1, 189, 3, 62, 2, 38, 0, 49, 0, 0, 1, 7, 0, 143, 0, 9, + 0, 137, 0, 16, 64, 11, 1, 13, 20, 18, 7, 16, 80, 1, 8, 19, 79, 43, 43, 52, + 0, 0, 255, 255, 0, 71, 0, 0, 1, 176, 2, 181, 2, 38, 0, 81, 0, 0, 1, 6, + 0, 143, 9, 0, 0, 16, 64, 11, 1, 11, 22, 20, 0, 5, 80, 1, 2, 21, 79, 43, + 43, 52, 255, 255, 0, 55, 255, 86, 1, 189, 2, 107, 2, 38, 0, 49, 0, 0, 1, 6, + 1, 195, 248, 0, 0, 13, 185, 0, 1, 255, 244, 180, 27, 21, 7, 16, 80, 43, 52, 0, + 0, 0, 255, 255, 0, 71, 255, 86, 1, 176, 1, 218, 2, 38, 0, 81, 0, 0, 1, 6, + 1, 195, 239, 0, 0, 13, 185, 0, 1, 255, 233, 180, 29, 23, 0, 5, 80, 43, 52, 0, + 0, 0, 255, 255, 0, 55, 0, 0, 1, 189, 3, 61, 2, 38, 0, 49, 0, 0, 1, 7, + 1, 95, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 18, 22, 7, 16, 80, 1, 8, 23, + 79, 43, 43, 52, 0, 0, 255, 255, 0, 71, 0, 0, 1, 176, 2, 178, 2, 38, 0, 81, + 0, 0, 1, 6, 1, 95, 0, 0, 0, 19, 185, 0, 1, 255, 255, 64, 9, 20, 24, 0, + 5, 80, 1, 2, 25, 79, 43, 43, 52, 0, 0, 2, 0, 29, 0, 0, 1, 189, 2, 181, + 0, 15, 0, 27, 0, 170, 185, 0, 11, 255, 224, 179, 15, 0, 77, 9, 184, 255, 248, 179, + 14, 0, 77, 8, 184, 255, 208, 64, 9, 14, 0, 77, 2, 24, 16, 0, 77, 2, 184, 255, + 232, 64, 48, 15, 0, 77, 1, 32, 15, 0, 77, 1, 16, 14, 0, 77, 0, 12, 115, 79, + 15, 1, 15, 29, 20, 21, 27, 15, 16, 31, 16, 47, 16, 3, 16, 7, 3, 115, 0, 6, + 16, 6, 32, 6, 176, 6, 192, 6, 5, 8, 6, 184, 255, 192, 64, 22, 13, 16, 72, 6, + 28, 20, 16, 7, 3, 64, 15, 0, 77, 127, 3, 1, 3, 7, 7, 13, 65, 12, 184, 255, + 192, 64, 10, 15, 0, 77, 112, 12, 1, 12, 0, 4, 66, 0, 63, 51, 50, 93, 43, 63, + 51, 17, 51, 93, 43, 16, 214, 205, 1, 16, 214, 43, 94, 93, 237, 50, 222, 93, 221, 214, + 197, 16, 222, 113, 237, 50, 49, 48, 0, 43, 43, 43, 43, 43, 43, 43, 33, 38, 38, 39, + 17, 35, 17, 51, 30, 3, 23, 17, 51, 17, 1, 21, 20, 6, 7, 39, 54, 54, 53, 52, + 38, 39, 1, 114, 22, 53, 28, 70, 75, 14, 29, 27, 24, 9, 70, 254, 208, 28, 28, 56, + 17, 15, 1, 1, 96, 211, 114, 254, 91, 2, 107, 50, 103, 102, 97, 44, 1, 140, 253, 149, + 2, 181, 9, 51, 82, 46, 21, 35, 63, 35, 9, 20, 5, 255, 255, 0, 11, 0, 0, 1, + 176, 2, 181, 2, 38, 0, 81, 0, 0, 1, 7, 1, 94, 255, 71, 0, 0, 0, 19, 185, + 0, 1, 255, 72, 64, 9, 27, 20, 0, 5, 80, 1, 2, 26, 79, 43, 43, 52, 0, 0, + 0, 0, 1, 0, 55, 255, 89, 1, 189, 2, 107, 0, 32, 0, 83, 64, 47, 21, 9, 37, + 9, 2, 9, 0, 5, 0, 126, 14, 9, 20, 14, 9, 0, 14, 25, 25, 14, 115, 17, 34, + 5, 115, 16, 7, 32, 7, 2, 7, 33, 15, 5, 9, 65, 29, 124, 22, 15, 14, 1, 8, + 14, 0, 7, 66, 0, 63, 51, 50, 94, 93, 220, 237, 63, 51, 51, 1, 16, 214, 93, 237, + 16, 222, 237, 50, 47, 16, 193, 135, 4, 43, 135, 5, 125, 196, 1, 93, 49, 48, 37, 46, + 3, 39, 17, 35, 17, 51, 30, 3, 23, 17, 51, 17, 20, 14, 2, 35, 34, 38, 39, 55, + 22, 22, 51, 50, 54, 53, 1, 114, 20, 55, 64, 69, 32, 75, 84, 28, 64, 63, 56, 20, + 75, 8, 25, 49, 40, 13, 32, 10, 8, 8, 23, 7, 33, 23, 21, 44, 115, 126, 129, 59, + 254, 18, 2, 107, 49, 118, 121, 115, 47, 1, 194, 253, 149, 37, 62, 44, 24, 5, 2, 65, + 2, 2, 43, 41, 0, 1, 0, 71, 255, 89, 1, 176, 1, 218, 0, 33, 0, 89, 64, 16, + 26, 64, 18, 0, 77, 26, 40, 17, 0, 77, 26, 32, 16, 0, 77, 5, 184, 255, 232, 179, + 10, 0, 77, 5, 184, 255, 224, 179, 9, 0, 77, 5, 184, 255, 216, 64, 26, 8, 0, 77, + 15, 22, 127, 7, 35, 32, 127, 0, 33, 1, 8, 33, 34, 33, 74, 19, 137, 12, 75, 28, + 136, 3, 80, 0, 63, 237, 63, 237, 63, 1, 16, 214, 94, 93, 237, 16, 222, 253, 204, 49, + 48, 43, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 22, 21, 17, 20, 14, 2, 35, 34, + 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, 52, 46, 2, 35, 34, 6, 7, 17, 35, 71, + 45, 89, 39, 93, 95, 11, 30, 51, 40, 13, 32, 10, 8, 8, 22, 8, 33, 26, 16, 29, + 41, 24, 20, 45, 21, 83, 1, 195, 11, 12, 96, 106, 254, 240, 41, 63, 42, 21, 5, 2, + 65, 2, 2, 43, 41, 1, 16, 45, 56, 31, 12, 5, 4, 254, 120, 255, 255, 0, 29, 255, + 243, 1, 216, 3, 6, 2, 38, 0, 50, 0, 0, 1, 7, 0, 138, 0, 0, 0, 139, 0, + 16, 64, 11, 2, 0, 32, 33, 0, 9, 80, 2, 4, 34, 79, 43, 43, 52, 0, 0, 255, + 255, 0, 40, 255, 245, 1, 204, 2, 123, 2, 38, 0, 82, 0, 0, 1, 6, 0, 138, 0, + 0, 0, 16, 64, 11, 2, 0, 32, 33, 9, 0, 80, 2, 14, 34, 79, 43, 43, 52, 255, + 255, 0, 29, 255, 243, 1, 216, 3, 40, 2, 38, 0, 50, 0, 0, 1, 7, 1, 97, 0, + 0, 0, 139, 0, 16, 64, 11, 2, 0, 36, 50, 0, 9, 80, 2, 4, 32, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 157, 2, 38, 0, 82, 0, 0, 1, + 6, 1, 97, 0, 0, 0, 16, 64, 11, 2, 0, 36, 50, 9, 0, 80, 2, 14, 32, 79, + 43, 43, 52, 255, 255, 0, 29, 255, 243, 1, 216, 3, 62, 2, 38, 0, 50, 0, 0, 1, + 7, 1, 101, 0, 36, 0, 137, 0, 23, 64, 16, 3, 2, 35, 34, 36, 0, 9, 80, 3, + 4, 37, 79, 2, 4, 33, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 40, 255, + 245, 1, 204, 2, 181, 2, 38, 0, 82, 0, 0, 1, 6, 1, 101, 36, 0, 0, 23, 64, + 16, 3, 2, 36, 34, 36, 9, 0, 80, 3, 14, 37, 79, 2, 14, 33, 79, 43, 43, 43, + 52, 52, 0, 255, 255, 0, 55, 0, 0, 1, 207, 3, 62, 2, 38, 0, 53, 0, 0, 1, + 7, 0, 143, 0, 0, 0, 137, 0, 19, 185, 0, 2, 255, 251, 64, 9, 44, 42, 18, 8, + 80, 2, 23, 43, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 107, 0, 0, 1, 182, 2, + 181, 2, 38, 0, 85, 0, 0, 1, 6, 0, 143, 45, 0, 0, 16, 64, 11, 1, 26, 16, + 14, 0, 6, 80, 1, 2, 15, 79, 43, 43, 52, 255, 255, 0, 55, 255, 86, 1, 207, 2, + 113, 2, 38, 0, 53, 0, 0, 1, 6, 1, 195, 221, 0, 0, 13, 185, 0, 2, 255, 208, + 180, 51, 45, 18, 8, 80, 43, 52, 0, 0, 0, 255, 255, 0, 42, 255, 86, 1, 182, 1, + 218, 2, 38, 0, 85, 0, 0, 1, 7, 1, 195, 255, 127, 0, 0, 0, 13, 185, 0, 1, + 255, 100, 180, 23, 17, 0, 6, 80, 43, 52, 0, 255, 255, 0, 55, 0, 0, 1, 207, 3, + 61, 2, 38, 0, 53, 0, 0, 1, 7, 1, 95, 255, 230, 0, 139, 0, 19, 185, 0, 2, + 255, 221, 64, 9, 42, 46, 18, 8, 80, 2, 23, 47, 79, 43, 43, 52, 0, 0, 0, 255, + 255, 0, 107, 0, 0, 1, 182, 2, 178, 2, 38, 0, 85, 0, 0, 1, 6, 1, 95, 36, + 0, 0, 16, 64, 11, 1, 13, 14, 18, 0, 6, 80, 1, 2, 19, 79, 43, 43, 52, 255, + 255, 0, 55, 255, 243, 1, 189, 3, 62, 2, 38, 0, 54, 0, 0, 1, 7, 0, 143, 0, + 18, 0, 137, 0, 16, 64, 11, 1, 22, 52, 50, 46, 37, 80, 1, 15, 51, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 66, 255, 245, 1, 178, 2, 181, 2, 38, 0, 86, 0, 0, 1, + 6, 0, 143, 9, 0, 0, 16, 64, 11, 1, 13, 42, 40, 34, 27, 80, 1, 9, 41, 79, + 43, 43, 52, 255, 255, 0, 55, 255, 243, 1, 189, 3, 58, 2, 38, 0, 54, 0, 0, 1, + 7, 0, 105, 0, 9, 0, 139, 0, 16, 64, 11, 1, 9, 55, 51, 46, 37, 80, 1, 15, + 52, 79, 43, 43, 52, 0, 0, 255, 255, 0, 66, 255, 245, 1, 178, 2, 175, 2, 38, 0, + 86, 0, 0, 1, 6, 0, 105, 9, 0, 0, 16, 64, 11, 1, 9, 45, 41, 34, 27, 80, + 1, 9, 42, 79, 43, 43, 52, 0, 1, 0, 55, 255, 87, 1, 189, 2, 121, 0, 71, 1, + 33, 185, 0, 70, 255, 232, 180, 9, 10, 0, 76, 70, 184, 255, 224, 179, 8, 0, 77, 69, + 184, 255, 240, 179, 18, 0, 77, 69, 184, 255, 232, 179, 17, 0, 77, 66, 184, 255, 240, 179, + 13, 0, 77, 65, 184, 255, 224, 179, 15, 0, 77, 65, 184, 255, 216, 179, 8, 0, 77, 63, + 184, 255, 208, 179, 9, 0, 77, 61, 184, 255, 224, 179, 14, 0, 77, 56, 184, 255, 224, 179, + 18, 0, 77, 56, 184, 255, 216, 179, 17, 0, 77, 50, 184, 255, 224, 179, 17, 0, 77, 50, + 184, 255, 224, 179, 15, 0, 77, 50, 184, 255, 216, 64, 47, 14, 0, 77, 44, 24, 9, 10, + 0, 76, 44, 32, 8, 0, 77, 41, 24, 15, 0, 77, 37, 32, 10, 0, 77, 36, 24, 14, + 0, 77, 25, 32, 16, 0, 77, 25, 24, 14, 15, 0, 76, 25, 16, 13, 0, 77, 17, 3, + 184, 255, 192, 64, 54, 11, 14, 72, 3, 71, 0, 23, 11, 20, 20, 68, 26, 51, 51, 33, + 118, 68, 73, 26, 26, 58, 118, 0, 43, 1, 8, 43, 72, 0, 20, 20, 23, 15, 64, 8, + 72, 128, 63, 46, 30, 38, 23, 52, 52, 55, 124, 46, 69, 27, 27, 30, 124, 23, 70, 0, + 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 17, 18, 57, 26, 16, 220, 26, 205, 18, 57, + 47, 205, 1, 16, 214, 94, 93, 237, 51, 47, 16, 222, 237, 51, 47, 17, 18, 57, 47, 204, + 51, 221, 50, 213, 43, 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, + 39, 55, 22, 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 38, 38, 39, 55, 22, 22, 51, + 50, 54, 53, 52, 46, 2, 39, 46, 3, 53, 52, 54, 51, 50, 30, 2, 23, 7, 38, 38, + 35, 34, 6, 21, 20, 30, 2, 23, 30, 3, 21, 20, 6, 7, 1, 7, 26, 23, 9, 21, + 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 11, 6, 60, 84, 17, 25, 20, + 78, 56, 63, 66, 24, 40, 50, 26, 30, 55, 43, 25, 102, 91, 25, 49, 42, 33, 10, 26, + 20, 70, 43, 45, 66, 19, 33, 44, 26, 38, 63, 45, 25, 88, 83, 33, 12, 30, 29, 10, + 23, 19, 13, 7, 5, 51, 4, 5, 20, 20, 11, 2, 10, 27, 12, 3, 29, 11, 68, 11, + 29, 48, 48, 29, 41, 31, 23, 10, 12, 30, 40, 54, 37, 81, 91, 7, 10, 14, 7, 69, + 12, 24, 45, 45, 26, 36, 27, 22, 11, 16, 32, 44, 60, 43, 72, 86, 8, 0, 1, 0, + 66, 255, 87, 1, 178, 1, 219, 0, 62, 0, 255, 185, 0, 60, 255, 224, 179, 13, 0, 77, + 60, 184, 255, 240, 179, 12, 0, 77, 60, 184, 255, 232, 179, 11, 0, 77, 60, 184, 255, 216, + 180, 9, 10, 0, 76, 60, 184, 255, 208, 179, 8, 0, 77, 58, 184, 255, 224, 179, 13, 0, + 77, 57, 184, 255, 216, 179, 12, 0, 77, 57, 184, 255, 224, 179, 10, 0, 77, 55, 184, 255, + 200, 179, 9, 0, 77, 55, 184, 255, 224, 179, 8, 0, 77, 54, 184, 255, 232, 64, 101, 14, + 16, 0, 76, 39, 24, 11, 0, 77, 39, 32, 10, 0, 77, 39, 40, 9, 0, 77, 36, 32, + 13, 0, 77, 36, 40, 12, 0, 77, 36, 24, 10, 0, 77, 33, 16, 16, 0, 77, 33, 24, + 15, 0, 77, 25, 40, 16, 18, 0, 76, 17, 3, 62, 0, 23, 11, 20, 20, 59, 25, 44, + 44, 31, 130, 59, 64, 25, 25, 52, 130, 0, 38, 1, 8, 38, 63, 20, 20, 23, 15, 64, + 8, 63, 128, 55, 41, 29, 34, 23, 50, 136, 41, 80, 29, 136, 62, 23, 81, 0, 21, 81, + 0, 63, 51, 63, 51, 237, 63, 237, 17, 57, 17, 18, 57, 26, 16, 220, 26, 205, 17, 57, + 47, 1, 16, 214, 94, 93, 237, 51, 47, 16, 222, 237, 51, 47, 17, 18, 57, 47, 204, 51, + 221, 50, 213, 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, + 51, 50, 53, 52, 39, 39, 54, 54, 55, 38, 39, 55, 22, 22, 51, 50, 53, 52, 46, 4, + 53, 52, 54, 51, 50, 22, 23, 7, 46, 3, 35, 34, 21, 20, 30, 4, 21, 20, 6, 7, + 1, 7, 26, 23, 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 12, + 6, 86, 65, 16, 35, 77, 44, 113, 41, 61, 72, 61, 41, 91, 97, 38, 81, 29, 15, 8, + 28, 36, 41, 19, 108, 41, 62, 72, 62, 41, 77, 82, 33, 12, 30, 29, 10, 23, 19, 13, + 7, 5, 51, 4, 5, 20, 20, 11, 2, 11, 27, 13, 3, 29, 75, 16, 21, 57, 25, 32, + 24, 23, 34, 50, 40, 56, 75, 11, 9, 74, 4, 9, 7, 4, 59, 21, 29, 24, 25, 36, + 51, 39, 57, 66, 7, 0, 1, 0, 39, 255, 87, 1, 205, 2, 107, 0, 32, 0, 72, 180, + 29, 31, 24, 17, 3, 184, 255, 192, 64, 29, 11, 14, 72, 3, 0, 11, 20, 20, 26, 24, + 24, 34, 33, 30, 25, 121, 27, 65, 0, 20, 20, 24, 15, 64, 8, 128, 31, 24, 66, 0, + 63, 51, 26, 220, 26, 205, 17, 57, 47, 205, 63, 237, 50, 1, 17, 18, 57, 47, 206, 51, + 47, 204, 221, 213, 43, 205, 16, 212, 206, 49, 48, 5, 22, 22, 21, 20, 14, 2, 35, 34, + 38, 39, 55, 22, 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 35, 17, 35, 53, 33, 21, + 35, 17, 35, 1, 7, 26, 23, 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, + 7, 5, 15, 7, 13, 170, 1, 166, 170, 11, 33, 12, 30, 29, 10, 23, 19, 13, 7, 5, + 51, 4, 5, 20, 20, 11, 2, 13, 35, 14, 2, 37, 70, 70, 253, 219, 0, 1, 0, 63, + 255, 87, 1, 194, 2, 96, 0, 51, 0, 118, 64, 68, 25, 24, 14, 16, 0, 76, 25, 32, + 13, 0, 77, 25, 24, 12, 0, 77, 25, 32, 11, 0, 77, 17, 3, 0, 11, 20, 20, 29, + 48, 48, 37, 35, 38, 127, 32, 29, 29, 30, 37, 53, 0, 30, 1, 8, 30, 52, 0, 20, + 20, 51, 15, 64, 8, 52, 128, 44, 136, 23, 51, 81, 33, 34, 38, 29, 133, 35, 32, 73, + 0, 63, 51, 237, 50, 205, 50, 63, 51, 237, 26, 16, 220, 26, 205, 17, 57, 47, 205, 1, + 16, 198, 94, 93, 16, 206, 17, 57, 47, 51, 237, 50, 17, 51, 47, 18, 57, 47, 204, 221, + 213, 205, 49, 48, 43, 43, 43, 43, 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, + 22, 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 46, 3, 53, 53, 35, 53, 51, 53, 55, + 21, 51, 21, 35, 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 6, 7, 1, 70, 26, 23, + 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 13, 7, 37, 47, 27, + 10, 98, 98, 82, 196, 196, 10, 23, 36, 26, 36, 44, 20, 12, 13, 58, 42, 33, 12, 30, + 29, 10, 23, 19, 13, 7, 5, 51, 4, 5, 20, 20, 11, 2, 11, 30, 13, 5, 29, 47, + 65, 41, 216, 69, 130, 14, 144, 69, 216, 35, 44, 27, 10, 12, 10, 70, 6, 18, 2, 255, + 255, 0, 39, 0, 0, 1, 205, 3, 61, 2, 38, 0, 55, 0, 0, 1, 7, 1, 95, 0, + 0, 0, 139, 0, 16, 64, 11, 1, 0, 8, 12, 6, 0, 80, 1, 0, 13, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 63, 255, 245, 1, 194, 2, 181, 2, 38, 0, 87, 0, 0, 1, + 6, 1, 197, 104, 0, 0, 10, 182, 1, 97, 30, 28, 23, 13, 80, 43, 52, 0, 0, 0, + 1, 0, 39, 0, 0, 1, 205, 2, 107, 0, 15, 0, 55, 64, 27, 5, 3, 1, 6, 115, + 14, 12, 10, 9, 9, 16, 17, 2, 13, 121, 15, 6, 9, 121, 3, 12, 12, 8, 15, 65, + 8, 66, 0, 63, 63, 18, 57, 47, 51, 237, 50, 16, 237, 50, 1, 17, 18, 57, 47, 205, + 51, 204, 253, 204, 51, 205, 49, 48, 1, 21, 35, 21, 51, 21, 35, 17, 35, 17, 35, 53, + 51, 53, 35, 53, 1, 205, 170, 118, 118, 82, 119, 119, 170, 2, 107, 70, 200, 64, 254, 227, + 1, 29, 64, 200, 70, 0, 1, 0, 63, 255, 245, 1, 194, 2, 96, 0, 35, 0, 97, 64, + 53, 23, 32, 11, 0, 77, 22, 24, 12, 0, 77, 7, 0, 3, 127, 33, 26, 30, 30, 31, + 17, 17, 5, 5, 2, 37, 28, 28, 0, 31, 1, 8, 31, 36, 34, 35, 3, 30, 133, 33, + 7, 26, 4, 29, 29, 0, 33, 73, 16, 16, 13, 136, 20, 81, 0, 63, 237, 50, 47, 63, + 51, 57, 47, 51, 205, 50, 16, 237, 50, 205, 50, 1, 16, 198, 94, 93, 50, 47, 16, 206, + 50, 47, 50, 47, 17, 57, 47, 51, 51, 237, 50, 50, 49, 48, 43, 43, 19, 51, 21, 35, + 21, 51, 21, 35, 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 53, + 53, 35, 53, 51, 53, 35, 53, 51, 53, 55, 243, 196, 196, 196, 196, 10, 23, 36, 26, 36, + 44, 20, 12, 14, 61, 45, 52, 66, 37, 14, 98, 98, 98, 98, 82, 1, 208, 69, 122, 62, + 32, 35, 44, 27, 10, 12, 10, 70, 6, 20, 24, 48, 71, 47, 32, 62, 122, 69, 130, 14, + 255, 255, 0, 48, 255, 243, 1, 196, 3, 28, 2, 38, 0, 56, 0, 0, 1, 7, 0, 117, + 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 40, 26, 4, 20, 80, 1, 6, 39, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, 145, 2, 38, 0, 88, 0, 0, + 1, 6, 0, 117, 0, 0, 0, 16, 64, 11, 1, 1, 36, 22, 7, 0, 80, 1, 9, 35, + 79, 43, 43, 52, 255, 255, 0, 48, 255, 243, 1, 196, 3, 6, 2, 38, 0, 56, 0, 0, + 1, 7, 0, 138, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 26, 27, 4, 20, 80, 1, + 6, 28, 79, 43, 43, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, 123, 2, 38, + 0, 88, 0, 0, 1, 6, 0, 138, 0, 0, 0, 16, 64, 11, 1, 1, 22, 23, 7, 0, + 80, 1, 9, 24, 79, 43, 43, 52, 255, 255, 0, 48, 255, 243, 1, 196, 3, 40, 2, 38, + 0, 56, 0, 0, 1, 7, 1, 97, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 30, 44, + 4, 20, 80, 1, 6, 26, 79, 43, 43, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, + 2, 157, 2, 38, 0, 88, 0, 0, 1, 6, 1, 97, 0, 0, 0, 16, 64, 11, 1, 1, + 26, 40, 7, 0, 80, 1, 9, 22, 79, 43, 43, 52, 255, 255, 0, 48, 255, 243, 1, 196, + 3, 62, 2, 38, 0, 56, 0, 0, 1, 7, 1, 99, 0, 0, 0, 134, 0, 12, 183, 2, + 1, 0, 31, 26, 4, 20, 80, 43, 52, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, + 2, 184, 2, 38, 0, 88, 0, 0, 1, 6, 1, 99, 0, 0, 0, 12, 183, 2, 1, 1, + 27, 22, 7, 0, 80, 43, 52, 52, 255, 255, 0, 48, 255, 243, 1, 196, 3, 62, 2, 38, + 0, 56, 0, 0, 1, 7, 1, 101, 0, 27, 0, 137, 0, 23, 64, 16, 2, 1, 27, 28, + 30, 4, 20, 80, 2, 6, 31, 79, 1, 6, 27, 79, 43, 43, 43, 52, 52, 0, 0, 0, + 255, 255, 0, 68, 255, 246, 1, 173, 2, 181, 2, 38, 0, 88, 0, 0, 1, 6, 1, 101, + 27, 0, 0, 23, 64, 16, 2, 1, 28, 24, 26, 7, 0, 80, 2, 9, 27, 79, 1, 9, + 23, 79, 43, 43, 43, 52, 52, 0, 0, 1, 0, 48, 255, 89, 1, 196, 2, 107, 0, 43, + 0, 94, 182, 15, 16, 15, 16, 0, 76, 11, 184, 255, 232, 179, 16, 0, 77, 11, 184, 255, + 240, 64, 43, 15, 0, 77, 2, 32, 12, 0, 77, 2, 16, 11, 0, 77, 2, 24, 10, 0, + 77, 0, 41, 36, 30, 30, 5, 18, 115, 21, 45, 8, 115, 5, 44, 32, 38, 44, 19, 6, + 65, 27, 13, 124, 0, 70, 0, 63, 237, 51, 63, 51, 16, 220, 205, 1, 16, 214, 237, 16, + 222, 237, 18, 57, 47, 204, 205, 50, 49, 48, 43, 43, 43, 43, 43, 43, 23, 34, 46, 2, + 53, 17, 51, 17, 20, 30, 2, 51, 50, 62, 2, 53, 17, 51, 17, 20, 6, 7, 6, 6, + 7, 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, 52, 54, 240, 55, 73, + 45, 19, 82, 17, 31, 44, 28, 28, 44, 31, 17, 82, 37, 43, 11, 38, 14, 14, 15, 36, + 6, 20, 11, 6, 22, 37, 51, 47, 14, 24, 35, 63, 87, 52, 1, 150, 254, 115, 47, 63, + 38, 16, 16, 38, 63, 47, 1, 141, 254, 106, 69, 100, 27, 7, 28, 14, 14, 24, 13, 26, + 3, 3, 54, 10, 36, 32, 21, 30, 0, 1, 0, 68, 255, 89, 1, 173, 1, 208, 0, 42, + 0, 96, 185, 0, 34, 255, 232, 179, 16, 0, 77, 34, 184, 255, 240, 64, 51, 15, 0, 77, + 27, 16, 17, 0, 77, 26, 16, 19, 0, 77, 26, 24, 10, 0, 77, 26, 40, 8, 9, 0, + 76, 21, 16, 11, 5, 40, 127, 0, 44, 32, 127, 0, 29, 1, 8, 29, 43, 7, 13, 43, + 41, 30, 73, 35, 136, 0, 24, 81, 0, 63, 51, 237, 63, 51, 16, 220, 205, 1, 16, 214, + 94, 93, 237, 16, 222, 237, 222, 204, 205, 50, 49, 48, 43, 43, 43, 43, 43, 43, 37, 14, + 3, 21, 20, 51, 50, 54, 55, 23, 6, 35, 34, 38, 53, 52, 54, 55, 54, 55, 6, 6, + 35, 34, 46, 2, 53, 17, 51, 21, 20, 22, 51, 50, 62, 2, 55, 17, 51, 1, 173, 6, + 26, 27, 20, 36, 6, 20, 10, 7, 23, 36, 51, 48, 24, 16, 12, 12, 23, 43, 16, 53, + 70, 44, 18, 82, 51, 60, 13, 27, 24, 18, 3, 83, 13, 6, 22, 27, 29, 12, 26, 3, + 3, 54, 10, 36, 32, 21, 37, 16, 13, 8, 2, 4, 31, 57, 78, 47, 1, 5, 243, 86, + 72, 2, 3, 3, 1, 1, 136, 255, 255, 0, 32, 0, 0, 1, 212, 3, 58, 2, 38, 0, + 58, 0, 0, 1, 7, 0, 105, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 26, 22, 6, + 13, 80, 1, 6, 23, 79, 43, 43, 52, 0, 0, 255, 255, 0, 19, 0, 0, 1, 225, 2, + 175, 2, 38, 0, 90, 0, 0, 1, 6, 0, 105, 254, 0, 0, 19, 185, 0, 1, 255, 254, + 64, 9, 48, 44, 14, 37, 80, 1, 14, 45, 79, 43, 43, 52, 0, 255, 255, 0, 13, 0, + 0, 1, 232, 3, 58, 2, 38, 0, 60, 0, 0, 1, 7, 0, 105, 0, 0, 0, 139, 0, + 16, 64, 11, 1, 0, 22, 18, 4, 12, 80, 1, 4, 19, 79, 43, 43, 52, 0, 0, 255, + 255, 0, 36, 255, 88, 1, 205, 2, 175, 2, 38, 0, 92, 0, 0, 1, 6, 0, 105, 0, + 0, 0, 16, 64, 11, 1, 1, 38, 34, 32, 21, 80, 1, 9, 35, 79, 43, 43, 52, 255, + 255, 0, 54, 0, 0, 1, 199, 3, 62, 2, 38, 0, 61, 0, 0, 1, 7, 0, 143, 0, + 9, 0, 137, 0, 16, 64, 11, 1, 8, 20, 18, 8, 6, 80, 1, 16, 19, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 73, 0, 0, 1, 171, 2, 181, 2, 38, 0, 93, 0, 0, 1, + 6, 0, 143, 9, 0, 0, 16, 64, 11, 1, 13, 20, 18, 8, 6, 80, 1, 16, 19, 79, + 43, 43, 52, 255, 255, 0, 54, 0, 0, 1, 199, 3, 34, 2, 38, 0, 61, 0, 0, 1, + 7, 1, 98, 0, 0, 0, 139, 0, 19, 185, 0, 1, 255, 252, 64, 9, 20, 26, 8, 6, + 80, 1, 16, 18, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 73, 0, 0, 1, 171, 2, + 151, 2, 38, 0, 93, 0, 0, 1, 6, 1, 98, 0, 0, 0, 16, 64, 11, 1, 0, 20, + 26, 8, 6, 80, 1, 16, 18, 79, 43, 43, 52, 255, 255, 0, 54, 0, 0, 1, 199, 3, + 61, 2, 38, 0, 61, 0, 0, 1, 7, 1, 95, 0, 0, 0, 139, 0, 19, 185, 0, 1, + 255, 252, 64, 9, 18, 22, 8, 6, 80, 1, 16, 23, 79, 43, 43, 52, 0, 0, 0, 255, + 255, 0, 73, 0, 0, 1, 171, 2, 178, 2, 38, 0, 93, 0, 0, 1, 6, 1, 95, 0, + 0, 0, 16, 64, 11, 1, 0, 18, 22, 8, 6, 80, 1, 16, 23, 79, 43, 43, 52, 0, + 1, 0, 161, 0, 0, 1, 226, 2, 181, 0, 19, 0, 46, 185, 0, 15, 255, 232, 64, 21, + 17, 18, 0, 76, 19, 127, 0, 0, 21, 20, 9, 9, 21, 10, 10, 13, 136, 6, 77, 0, + 74, 0, 63, 63, 237, 50, 47, 1, 17, 51, 47, 17, 18, 57, 47, 237, 49, 48, 43, 51, + 17, 52, 62, 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 21, 17, 161, 30, 49, + 65, 36, 36, 73, 32, 15, 22, 66, 34, 21, 37, 28, 16, 1, 250, 54, 71, 44, 18, 16, + 11, 71, 11, 16, 11, 27, 45, 34, 254, 7, 255, 255, 0, 55, 255, 86, 1, 189, 2, 121, + 2, 38, 0, 54, 0, 0, 1, 6, 1, 195, 221, 0, 0, 13, 185, 0, 1, 255, 217, 180, + 59, 53, 46, 37, 80, 43, 52, 0, 0, 0, 255, 255, 0, 66, 255, 86, 1, 178, 1, 219, + 2, 38, 0, 86, 0, 0, 1, 6, 1, 195, 221, 0, 0, 13, 185, 0, 1, 255, 217, 180, + 49, 43, 34, 27, 80, 43, 52, 0, 0, 0, 255, 255, 0, 39, 255, 86, 1, 205, 2, 107, + 2, 38, 0, 55, 0, 0, 1, 6, 1, 195, 228, 0, 0, 13, 185, 0, 1, 255, 224, 180, + 17, 11, 6, 0, 80, 43, 52, 0, 0, 0, 255, 255, 0, 63, 255, 86, 1, 194, 2, 96, + 2, 38, 0, 87, 0, 0, 1, 6, 1, 195, 36, 0, 0, 10, 182, 1, 25, 37, 31, 23, + 13, 80, 43, 52, 0, 0, 0, 1, 0, 71, 255, 86, 1, 128, 1, 208, 0, 19, 0, 47, + 185, 0, 5, 255, 232, 64, 22, 9, 10, 0, 76, 18, 127, 3, 21, 11, 11, 0, 20, 12, + 12, 15, 136, 8, 82, 19, 133, 2, 73, 0, 63, 237, 63, 237, 50, 47, 1, 16, 198, 50, + 47, 16, 222, 237, 49, 48, 43, 19, 53, 33, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, + 22, 51, 50, 54, 53, 17, 114, 1, 14, 27, 45, 59, 33, 38, 77, 34, 25, 25, 61, 28, + 40, 52, 1, 139, 69, 254, 53, 48, 67, 42, 18, 16, 17, 70, 12, 17, 41, 59, 1, 135, + 0, 1, 0, 196, 1, 249, 1, 52, 2, 181, 0, 13, 0, 26, 64, 10, 12, 15, 14, 6, + 7, 7, 0, 13, 13, 6, 0, 47, 204, 1, 47, 205, 51, 47, 205, 17, 18, 57, 49, 48, + 1, 20, 20, 7, 6, 6, 7, 39, 54, 54, 53, 52, 38, 39, 1, 52, 1, 3, 31, 21, + 56, 17, 15, 1, 1, 2, 181, 10, 14, 8, 46, 75, 35, 21, 35, 63, 35, 9, 20, 5, + 0, 1, 0, 129, 2, 11, 1, 115, 2, 178, 0, 5, 0, 37, 64, 15, 3, 4, 1, 0, + 64, 2, 2, 7, 6, 3, 3, 1, 128, 2, 5, 0, 47, 51, 26, 205, 50, 47, 1, 17, + 18, 57, 25, 47, 26, 205, 50, 205, 50, 49, 48, 19, 55, 23, 55, 23, 7, 129, 34, 87, + 87, 34, 121, 2, 139, 39, 78, 78, 39, 128, 255, 255, 0, 123, 2, 59, 1, 121, 2, 123, + 2, 6, 0, 138, 0, 0, 0, 1, 0, 130, 2, 33, 1, 114, 2, 157, 0, 21, 0, 21, + 183, 17, 16, 5, 6, 16, 6, 11, 0, 0, 47, 221, 206, 50, 1, 47, 205, 222, 205, 49, + 48, 19, 34, 46, 2, 55, 51, 30, 3, 51, 50, 62, 2, 55, 51, 22, 14, 2, 250, 25, + 44, 33, 18, 1, 54, 1, 6, 15, 24, 19, 19, 25, 14, 6, 1, 54, 1, 18, 33, 44, + 2, 33, 17, 31, 46, 30, 10, 23, 19, 12, 12, 19, 23, 10, 30, 46, 31, 17, 0, 1, + 0, 190, 2, 30, 1, 54, 2, 151, 0, 11, 0, 13, 179, 9, 3, 6, 0, 0, 47, 205, + 1, 47, 205, 49, 48, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 250, 25, 35, + 35, 25, 25, 35, 35, 2, 30, 33, 28, 27, 33, 33, 27, 28, 33, 0, 2, 0, 158, 2, + 1, 1, 86, 2, 184, 0, 11, 0, 23, 0, 57, 185, 0, 11, 255, 224, 64, 17, 8, 15, + 0, 76, 7, 32, 8, 15, 0, 76, 5, 32, 8, 15, 0, 76, 1, 184, 255, 224, 64, 12, + 8, 15, 0, 76, 0, 12, 6, 18, 9, 15, 21, 3, 0, 47, 221, 222, 205, 1, 47, 205, + 222, 205, 49, 48, 43, 43, 43, 43, 1, 20, 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, + 7, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, 1, 86, 55, 37, 37, 55, 55, 37, + 37, 55, 45, 27, 20, 20, 27, 27, 20, 20, 27, 2, 93, 43, 49, 49, 43, 42, 49, 49, + 42, 23, 26, 26, 23, 24, 26, 26, 0, 1, 0, 171, 255, 89, 1, 73, 0, 7, 0, 22, + 0, 32, 64, 13, 8, 3, 21, 9, 15, 17, 64, 0, 23, 128, 8, 8, 23, 0, 17, 51, + 47, 26, 16, 220, 26, 205, 1, 47, 51, 204, 205, 50, 49, 48, 5, 34, 38, 53, 52, 54, + 55, 54, 55, 51, 6, 6, 7, 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, 1, 14, 51, + 48, 23, 16, 21, 14, 83, 11, 25, 13, 13, 16, 36, 6, 20, 10, 7, 23, 167, 36, 32, + 21, 37, 17, 23, 8, 8, 20, 14, 14, 21, 13, 26, 3, 3, 54, 10, 0, 2, 0, 100, + 2, 6, 1, 144, 2, 181, 0, 3, 0, 7, 0, 32, 64, 13, 7, 4, 5, 6, 3, 0, + 1, 2, 7, 3, 128, 5, 1, 0, 47, 51, 26, 205, 50, 1, 47, 51, 205, 50, 220, 50, + 205, 50, 49, 48, 19, 7, 39, 55, 23, 7, 39, 55, 253, 110, 43, 103, 197, 110, 43, 103, + 2, 131, 125, 32, 143, 50, 125, 32, 143, 255, 255, 0, 32, 0, 0, 1, 212, 3, 62, 2, + 38, 0, 58, 0, 0, 1, 7, 0, 67, 0, 0, 0, 137, 0, 19, 185, 0, 1, 255, 253, + 64, 9, 24, 22, 6, 13, 80, 1, 6, 23, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, + 19, 0, 0, 1, 225, 2, 181, 2, 38, 0, 90, 0, 0, 1, 6, 0, 67, 0, 0, 0, + 19, 185, 0, 1, 255, 253, 64, 9, 46, 44, 14, 37, 80, 1, 14, 45, 79, 43, 43, 52, + 0, 255, 255, 0, 32, 0, 0, 1, 212, 3, 62, 2, 38, 0, 58, 0, 0, 1, 7, 0, + 143, 0, 0, 0, 137, 0, 16, 64, 11, 1, 4, 23, 21, 6, 13, 80, 1, 6, 22, 79, + 43, 43, 52, 0, 0, 255, 255, 0, 19, 0, 0, 1, 225, 2, 181, 2, 38, 0, 90, 0, + 0, 1, 6, 0, 143, 0, 0, 0, 16, 64, 11, 1, 4, 45, 43, 14, 37, 80, 1, 14, + 44, 79, 43, 43, 52, 255, 255, 0, 32, 0, 0, 1, 212, 3, 26, 2, 38, 0, 58, 0, + 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, 23, 41, 6, 13, + 80, 2, 6, 33, 79, 1, 6, 21, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, + 19, 0, 0, 1, 225, 2, 143, 2, 38, 0, 90, 0, 0, 1, 6, 0, 131, 0, 0, 0, + 23, 64, 16, 2, 1, 0, 45, 63, 14, 37, 80, 2, 14, 55, 79, 1, 14, 43, 79, 43, + 43, 43, 52, 52, 0, 255, 255, 0, 13, 0, 0, 1, 232, 3, 62, 2, 38, 0, 60, 0, + 0, 1, 7, 0, 67, 0, 0, 0, 137, 0, 19, 185, 0, 1, 255, 252, 64, 9, 20, 18, + 4, 12, 80, 1, 4, 19, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 36, 255, 88, 1, + 205, 2, 181, 2, 38, 0, 92, 0, 0, 1, 6, 0, 67, 0, 0, 0, 19, 185, 0, 1, + 255, 254, 64, 9, 36, 34, 32, 21, 80, 1, 9, 35, 79, 43, 43, 52, 0, 0, 1, 0, + 25, 0, 0, 1, 218, 2, 107, 0, 3, 0, 35, 64, 18, 0, 2, 1, 2, 141, 3, 0, + 20, 3, 0, 3, 1, 2, 3, 86, 0, 1, 85, 0, 63, 51, 63, 51, 1, 47, 47, 135, + 43, 135, 125, 196, 49, 48, 51, 35, 1, 51, 95, 70, 1, 123, 70, 2, 107, 0, 3, 0, + 116, 1, 18, 1, 128, 2, 121, 0, 11, 0, 31, 0, 43, 0, 130, 181, 29, 16, 21, 0, + 77, 25, 184, 255, 224, 179, 21, 0, 77, 19, 184, 255, 232, 64, 15, 21, 0, 77, 15, 16, + 21, 0, 77, 11, 24, 11, 13, 0, 76, 7, 184, 255, 232, 180, 11, 13, 0, 76, 5, 184, + 255, 232, 64, 40, 11, 13, 0, 76, 1, 16, 11, 13, 0, 76, 38, 32, 38, 32, 12, 22, + 150, 0, 12, 150, 6, 0, 207, 35, 1, 35, 64, 25, 28, 72, 35, 48, 41, 1, 41, 41, + 3, 27, 152, 9, 184, 1, 1, 179, 17, 152, 3, 99, 0, 63, 237, 63, 237, 17, 57, 47, + 113, 205, 43, 93, 1, 47, 220, 237, 16, 237, 17, 57, 57, 47, 47, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 19, 52, 54, 51, 50, 22, 21, 20, 6, 35, 34, 38, 55, 52, 46, + 2, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 62, 2, 39, 20, 6, 35, 34, 38, 53, + 52, 54, 51, 50, 22, 116, 71, 63, 63, 71, 71, 63, 63, 71, 202, 6, 16, 26, 20, 20, + 26, 16, 7, 7, 16, 26, 20, 20, 26, 16, 6, 30, 21, 17, 17, 20, 20, 17, 17, 21, + 1, 198, 87, 92, 92, 87, 88, 92, 92, 88, 25, 46, 33, 20, 20, 33, 46, 25, 26, 45, + 33, 20, 20, 33, 45, 28, 15, 23, 23, 15, 16, 23, 23, 0, 2, 0, 105, 1, 25, 1, + 128, 2, 114, 0, 14, 0, 19, 0, 121, 185, 0, 16, 255, 224, 179, 16, 0, 77, 16, 184, + 255, 232, 64, 69, 15, 0, 77, 14, 32, 21, 0, 77, 12, 32, 24, 0, 77, 12, 16, 21, + 0, 77, 12, 8, 20, 0, 77, 11, 24, 23, 0, 77, 11, 16, 22, 0, 77, 11, 24, 21, + 0, 77, 11, 16, 20, 0, 77, 9, 18, 14, 16, 20, 0, 77, 14, 15, 15, 7, 150, 1, + 4, 21, 4, 8, 9, 1, 18, 18, 6, 15, 14, 96, 6, 184, 1, 0, 0, 63, 63, 51, + 18, 57, 47, 51, 51, 205, 50, 1, 16, 222, 50, 253, 50, 17, 51, 43, 205, 50, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 21, 51, 21, 35, 21, 35, 53, 35, 53, + 62, 3, 55, 7, 6, 6, 7, 51, 1, 83, 45, 45, 60, 174, 12, 39, 48, 52, 26, 3, + 28, 58, 21, 107, 2, 114, 208, 53, 84, 84, 41, 22, 58, 60, 58, 22, 74, 29, 71, 34, + 0, 1, 0, 127, 1, 18, 1, 119, 2, 114, 0, 29, 0, 132, 185, 0, 29, 255, 216, 179, + 15, 0, 77, 29, 184, 255, 224, 179, 14, 0, 77, 29, 184, 255, 216, 179, 13, 0, 77, 29, + 184, 255, 224, 179, 12, 0, 77, 29, 184, 255, 216, 179, 11, 0, 77, 1, 184, 255, 240, 179, + 16, 0, 77, 1, 184, 255, 224, 64, 38, 11, 15, 0, 76, 15, 24, 24, 0, 77, 24, 150, + 21, 18, 23, 23, 13, 150, 0, 27, 150, 18, 6, 6, 18, 18, 152, 27, 27, 10, 24, 152, + 21, 96, 7, 7, 10, 152, 3, 184, 1, 1, 0, 63, 237, 50, 47, 63, 237, 18, 57, 47, + 237, 1, 47, 50, 47, 16, 237, 220, 237, 51, 47, 16, 214, 237, 49, 48, 0, 43, 1, 43, + 43, 43, 43, 43, 43, 43, 1, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, + 52, 46, 2, 35, 54, 54, 55, 51, 21, 35, 6, 6, 7, 22, 22, 1, 119, 71, 75, 29, + 58, 15, 13, 14, 45, 28, 48, 36, 15, 37, 61, 46, 6, 8, 2, 193, 140, 2, 1, 4, + 85, 76, 1, 127, 48, 61, 13, 8, 53, 5, 13, 31, 20, 15, 25, 17, 10, 45, 91, 42, + 56, 18, 36, 19, 5, 57, 0, 2, 0, 125, 1, 18, 1, 130, 2, 116, 0, 24, 0, 37, + 1, 84, 185, 0, 29, 255, 200, 179, 24, 0, 77, 29, 184, 255, 216, 64, 16, 22, 23, 0, + 76, 24, 24, 13, 0, 77, 24, 32, 11, 12, 0, 76, 19, 184, 255, 232, 179, 16, 0, 77, + 19, 184, 255, 224, 180, 14, 15, 0, 76, 19, 184, 255, 232, 180, 12, 13, 0, 76, 19, 184, + 255, 224, 179, 11, 0, 77, 15, 184, 255, 208, 179, 17, 0, 77, 15, 184, 255, 232, 179, 16, + 0, 77, 15, 184, 255, 216, 179, 15, 0, 77, 15, 184, 255, 232, 179, 14, 0, 77, 15, 184, + 255, 224, 179, 13, 0, 77, 15, 184, 255, 216, 179, 12, 0, 77, 15, 184, 255, 232, 179, 11, + 0, 77, 14, 184, 255, 208, 179, 11, 0, 77, 8, 184, 255, 216, 179, 24, 0, 77, 8, 184, + 255, 232, 179, 22, 0, 77, 8, 184, 255, 232, 179, 20, 0, 77, 8, 184, 255, 240, 179, 19, + 0, 77, 7, 184, 255, 216, 179, 23, 0, 77, 7, 184, 255, 216, 179, 21, 0, 77, 7, 184, + 255, 208, 179, 16, 0, 77, 7, 184, 255, 224, 179, 15, 0, 77, 7, 184, 255, 232, 179, 14, + 0, 77, 6, 184, 255, 208, 179, 24, 0, 77, 6, 184, 255, 216, 179, 23, 0, 77, 6, 184, + 255, 200, 179, 22, 0, 77, 6, 184, 255, 208, 179, 21, 0, 77, 6, 184, 255, 216, 64, 38, + 19, 20, 0, 76, 1, 32, 27, 0, 77, 20, 16, 28, 0, 77, 19, 16, 28, 0, 77, 9, + 27, 150, 0, 35, 150, 17, 4, 4, 17, 0, 25, 152, 12, 12, 3, 30, 152, 22, 184, 1, + 1, 179, 4, 152, 3, 96, 0, 63, 237, 63, 237, 17, 57, 47, 237, 1, 47, 204, 50, 47, + 16, 237, 16, 237, 50, 49, 48, 0, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 19, 52, 54, 55, 23, 14, 3, 7, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, + 35, 34, 38, 55, 34, 7, 6, 22, 51, 50, 62, 2, 53, 52, 38, 125, 124, 107, 6, 30, + 54, 44, 32, 6, 18, 33, 14, 34, 48, 30, 13, 15, 31, 47, 32, 68, 68, 130, 35, 33, + 2, 32, 43, 17, 23, 15, 6, 31, 1, 165, 100, 105, 2, 55, 1, 11, 22, 31, 21, 8, + 4, 18, 30, 40, 22, 20, 40, 34, 21, 78, 95, 11, 49, 60, 12, 18, 22, 9, 29, 30, + 0, 1, 0, 134, 1, 25, 1, 133, 2, 114, 0, 14, 0, 79, 185, 0, 11, 255, 240, 179, + 22, 0, 77, 11, 184, 255, 248, 64, 41, 18, 0, 77, 4, 40, 19, 0, 77, 4, 24, 17, + 0, 77, 3, 16, 21, 0, 77, 3, 24, 20, 0, 77, 3, 16, 19, 0, 77, 6, 0, 150, + 14, 5, 150, 9, 16, 5, 152, 8, 96, 0, 184, 1, 0, 0, 63, 63, 237, 1, 16, 222, + 237, 222, 237, 204, 49, 48, 43, 43, 43, 43, 43, 43, 43, 19, 62, 3, 55, 35, 53, 51, + 21, 14, 3, 7, 186, 4, 24, 34, 42, 21, 177, 255, 18, 45, 40, 30, 4, 1, 25, 38, + 81, 77, 67, 24, 58, 49, 18, 64, 80, 89, 45, 0, 3, 0, 119, 1, 18, 1, 125, 2, + 121, 0, 27, 0, 41, 0, 53, 2, 166, 64, 11, 38, 40, 24, 0, 77, 38, 32, 17, 0, + 77, 26, 184, 255, 232, 179, 16, 0, 77, 26, 184, 255, 240, 179, 15, 0, 77, 26, 184, 255, + 232, 179, 14, 0, 77, 24, 184, 255, 240, 179, 18, 0, 77, 24, 184, 255, 232, 179, 17, 0, + 77, 20, 184, 255, 216, 180, 12, 17, 0, 76, 20, 184, 255, 224, 64, 31, 11, 0, 77, 15, + 32, 11, 17, 0, 76, 12, 32, 18, 0, 77, 12, 40, 17, 0, 77, 6, 32, 12, 17, 0, + 76, 6, 40, 11, 0, 77, 1, 184, 255, 224, 64, 10, 11, 17, 0, 76, 51, 8, 22, 0, + 77, 50, 184, 255, 232, 179, 46, 0, 77, 50, 184, 255, 240, 179, 43, 0, 77, 50, 184, 255, + 232, 179, 41, 0, 77, 49, 184, 255, 208, 179, 46, 0, 77, 49, 184, 255, 224, 179, 43, 0, + 77, 49, 184, 255, 208, 179, 41, 0, 77, 49, 184, 255, 224, 179, 32, 0, 77, 49, 184, 255, + 240, 179, 31, 0, 77, 49, 184, 255, 232, 179, 29, 0, 77, 49, 184, 255, 208, 180, 25, 27, + 0, 76, 49, 184, 255, 224, 179, 24, 0, 77, 49, 184, 255, 232, 64, 147, 21, 22, 0, 76, + 41, 48, 46, 0, 77, 40, 24, 46, 0, 77, 40, 24, 28, 0, 77, 40, 16, 27, 0, 77, + 40, 24, 26, 0, 77, 40, 16, 25, 0, 77, 40, 24, 24, 0, 77, 40, 24, 18, 0, 77, + 39, 16, 27, 0, 77, 38, 48, 46, 0, 77, 38, 24, 41, 0, 77, 38, 16, 31, 0, 77, + 38, 40, 30, 0, 77, 38, 24, 26, 28, 0, 76, 38, 16, 25, 0, 77, 38, 32, 24, 0, + 77, 38, 24, 23, 0, 77, 38, 16, 22, 0, 77, 38, 24, 17, 0, 77, 37, 64, 46, 0, + 77, 37, 40, 41, 0, 77, 37, 40, 31, 0, 77, 37, 24, 29, 0, 77, 37, 40, 28, 0, + 77, 37, 56, 25, 27, 0, 76, 37, 24, 21, 0, 77, 37, 48, 20, 0, 77, 37, 40, 18, + 0, 77, 26, 184, 255, 240, 179, 30, 0, 77, 26, 184, 255, 232, 179, 23, 0, 77, 26, 184, + 255, 200, 64, 9, 22, 0, 77, 24, 32, 30, 0, 77, 20, 184, 255, 216, 179, 32, 0, 77, + 20, 184, 255, 232, 180, 29, 30, 0, 76, 20, 184, 255, 240, 179, 20, 0, 77, 20, 184, 255, + 240, 179, 18, 0, 77, 15, 184, 255, 232, 64, 9, 32, 0, 77, 15, 24, 31, 0, 77, 15, + 184, 255, 232, 64, 14, 29, 0, 77, 12, 24, 41, 0, 77, 12, 40, 30, 0, 77, 10, 184, + 255, 240, 179, 23, 0, 77, 10, 184, 255, 216, 64, 14, 22, 0, 77, 6, 24, 30, 0, 77, + 6, 16, 29, 0, 77, 5, 184, 255, 240, 179, 31, 0, 77, 1, 184, 255, 216, 64, 73, 31, + 0, 77, 1, 16, 30, 0, 77, 1, 24, 29, 0, 77, 25, 51, 39, 11, 4, 22, 48, 150, + 14, 14, 8, 42, 150, 22, 22, 255, 36, 1, 36, 150, 0, 28, 150, 8, 39, 16, 24, 0, + 77, 91, 39, 1, 63, 39, 1, 39, 152, 25, 11, 95, 51, 143, 51, 2, 127, 51, 223, 51, + 2, 143, 51, 1, 51, 45, 152, 17, 99, 33, 152, 3, 184, 1, 1, 0, 63, 237, 63, 237, + 47, 93, 113, 114, 51, 51, 237, 113, 113, 43, 1, 47, 237, 220, 237, 93, 51, 47, 237, 17, + 51, 47, 237, 18, 23, 57, 49, 48, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 1, 20, 6, 35, 34, 46, 2, 53, 52, 54, 55, 38, 38, + 53, 52, 54, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 7, 20, 30, 2, 51, 50, 54, + 53, 52, 38, 39, 6, 6, 55, 52, 38, 35, 34, 6, 21, 20, 22, 23, 54, 54, 1, 125, + 67, 65, 38, 50, 30, 12, 32, 21, 20, 24, 65, 56, 33, 46, 29, 14, 26, 21, 32, 23, + 198, 7, 16, 26, 19, 37, 31, 51, 45, 19, 21, 128, 27, 33, 33, 27, 38, 42, 18, 22, + 1, 119, 45, 56, 19, 29, 34, 16, 25, 44, 14, 15, 42, 23, 40, 58, 18, 27, 33, 16, + 25, 40, 14, 16, 40, 32, 7, 16, 13, 9, 27, 18, 25, 28, 11, 14, 30, 148, 11, 29, + 28, 14, 18, 33, 8, 13, 28, 0, 2, 0, 132, 1, 24, 1, 137, 2, 121, 0, 22, 0, + 35, 0, 140, 64, 12, 28, 24, 24, 0, 77, 28, 32, 22, 23, 0, 76, 22, 184, 255, 216, + 64, 87, 11, 13, 0, 76, 18, 16, 25, 0, 77, 17, 8, 25, 0, 77, 17, 24, 16, 0, + 77, 17, 32, 11, 15, 0, 76, 13, 24, 14, 16, 0, 76, 13, 40, 11, 13, 0, 76, 6, + 24, 23, 24, 0, 76, 6, 32, 22, 0, 77, 6, 24, 21, 0, 77, 6, 32, 14, 16, 0, + 76, 5, 56, 21, 0, 77, 7, 26, 150, 0, 34, 150, 15, 4, 4, 15, 23, 152, 10, 10, + 3, 29, 152, 20, 99, 4, 152, 3, 95, 0, 63, 237, 63, 237, 17, 57, 47, 237, 1, 47, + 51, 47, 16, 237, 220, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 1, 20, 6, 35, 39, 54, 54, 55, 6, 6, 35, 34, 46, 2, 53, 52, 62, + 2, 51, 50, 22, 7, 50, 54, 55, 54, 38, 35, 34, 14, 2, 21, 20, 1, 137, 123, 116, + 2, 65, 92, 13, 18, 33, 14, 34, 48, 30, 13, 15, 31, 47, 32, 67, 69, 130, 18, 34, + 16, 2, 32, 43, 17, 23, 15, 7, 1, 231, 100, 107, 54, 2, 42, 43, 8, 5, 18, 31, + 40, 21, 19, 41, 34, 21, 77, 95, 4, 6, 49, 60, 12, 18, 21, 10, 58, 255, 255, 0, + 116, 255, 250, 1, 128, 1, 97, 2, 7, 1, 111, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 126, 0, 1, 1, 127, 1, 90, 2, 7, 0, 148, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 124, 0, 1, 1, 120, 1, 97, 2, 7, 0, 141, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 126, 255, 250, 1, 118, 1, 97, 2, 7, 0, 142, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 105, 0, 1, 1, 128, 1, 90, 2, 7, 1, 112, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 127, 255, 250, 1, 119, 1, 90, 2, 7, 1, 113, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 125, 255, 250, 1, 130, 1, 92, 2, 7, 1, 114, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 134, 0, 1, 1, 133, 1, 90, 2, 7, 1, 115, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 119, 255, 250, 1, 125, 1, 97, 2, 7, 1, 116, 0, 0, 254, 232, 0, 0, 255, 255, 0, + 132, 0, 0, 1, 137, 1, 97, 2, 7, 1, 117, 0, 0, 254, 232, 0, 0, 0, 2, 0, + 53, 255, 243, 1, 173, 2, 181, 0, 33, 0, 47, 0, 192, 64, 32, 35, 24, 17, 0, 77, + 35, 40, 15, 0, 77, 35, 16, 9, 0, 77, 28, 32, 12, 0, 77, 28, 24, 11, 0, 77, + 28, 32, 9, 10, 0, 76, 23, 184, 255, 240, 179, 16, 0, 77, 13, 184, 255, 240, 179, 18, + 0, 77, 13, 184, 255, 240, 179, 15, 0, 77, 9, 184, 255, 216, 179, 9, 0, 77, 8, 184, + 255, 240, 180, 13, 14, 0, 76, 8, 184, 255, 232, 179, 12, 0, 77, 8, 184, 255, 224, 64, + 54, 10, 11, 0, 76, 3, 16, 12, 0, 77, 3, 24, 11, 0, 77, 3, 16, 10, 0, 77, + 3, 24, 9, 0, 77, 37, 11, 22, 22, 11, 49, 34, 14, 0, 33, 33, 31, 0, 48, 34, + 0, 33, 31, 14, 32, 32, 25, 6, 21, 21, 18, 25, 92, 42, 6, 0, 47, 205, 63, 205, + 50, 47, 17, 18, 57, 47, 51, 51, 205, 50, 50, 1, 16, 196, 50, 50, 47, 16, 205, 50, + 16, 206, 50, 47, 16, 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 55, 17, 52, 62, 2, 51, 50, 30, 2, 21, 20, 6, 7, 21, 20, + 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 53, 53, 7, 39, 55, 54, 54, 53, + 52, 46, 2, 35, 34, 14, 2, 21, 144, 24, 40, 54, 29, 38, 47, 27, 9, 102, 84, 42, + 45, 29, 38, 16, 33, 23, 64, 43, 44, 60, 36, 15, 59, 32, 173, 57, 64, 4, 12, 21, + 17, 14, 24, 18, 11, 228, 1, 2, 61, 81, 46, 19, 28, 45, 54, 26, 95, 157, 70, 39, + 63, 57, 22, 11, 62, 20, 23, 26, 45, 59, 32, 7, 42, 48, 130, 52, 121, 76, 15, 30, + 24, 15, 10, 30, 53, 43, 0, 2, 0, 27, 255, 244, 1, 217, 1, 134, 0, 32, 0, 49, + 0, 66, 64, 25, 70, 14, 86, 14, 2, 5, 14, 1, 12, 13, 13, 33, 32, 51, 43, 3, + 21, 50, 0, 46, 46, 9, 38, 26, 12, 184, 255, 192, 182, 9, 14, 72, 12, 12, 9, 16, + 0, 47, 205, 50, 47, 43, 47, 205, 18, 57, 47, 205, 1, 16, 214, 205, 50, 16, 222, 205, + 51, 47, 51, 49, 48, 0, 93, 93, 55, 34, 21, 21, 20, 22, 23, 22, 22, 51, 50, 54, + 55, 51, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 30, 2, 21, 21, 39, 52, + 39, 38, 38, 35, 34, 6, 7, 6, 21, 21, 20, 51, 33, 50, 53, 112, 4, 3, 2, 28, + 68, 42, 44, 73, 27, 32, 29, 94, 54, 47, 81, 60, 35, 35, 60, 81, 47, 46, 81, 61, + 35, 82, 5, 26, 69, 40, 41, 69, 27, 6, 4, 1, 20, 3, 183, 2, 110, 4, 5, 3, + 29, 31, 37, 30, 35, 43, 32, 54, 73, 41, 42, 74, 54, 32, 32, 54, 74, 42, 5, 125, + 6, 7, 26, 31, 32, 27, 6, 8, 107, 4, 4, 0, 3, 0, 12, 255, 249, 1, 224, 2, + 114, 0, 3, 0, 46, 0, 57, 1, 29, 185, 0, 42, 255, 232, 179, 17, 0, 77, 41, 184, + 255, 232, 179, 21, 0, 77, 41, 184, 255, 240, 179, 20, 0, 77, 41, 184, 255, 232, 179, 19, + 0, 77, 41, 184, 255, 224, 179, 18, 0, 77, 41, 184, 255, 232, 179, 16, 0, 77, 41, 184, + 255, 224, 179, 15, 0, 77, 41, 184, 255, 232, 179, 14, 0, 77, 37, 184, 255, 224, 179, 19, + 0, 77, 37, 184, 255, 232, 180, 16, 18, 0, 76, 37, 184, 255, 240, 180, 14, 15, 0, 76, + 32, 184, 255, 224, 179, 24, 0, 77, 32, 184, 255, 232, 179, 23, 0, 77, 32, 184, 255, 224, + 180, 19, 22, 0, 76, 32, 184, 255, 216, 179, 18, 0, 77, 32, 184, 255, 232, 64, 81, 17, + 0, 77, 2, 0, 3, 0, 156, 58, 2, 20, 58, 58, 2, 52, 150, 50, 53, 47, 1, 1, + 47, 26, 26, 14, 14, 46, 39, 37, 19, 150, 34, 34, 39, 3, 3, 10, 150, 39, 53, 97, + 57, 47, 47, 54, 50, 96, 37, 63, 14, 79, 14, 2, 14, 152, 48, 15, 64, 15, 2, 15, + 15, 29, 4, 4, 7, 152, 44, 104, 25, 25, 22, 152, 29, 102, 2, 3, 89, 0, 1, 91, + 0, 63, 51, 63, 51, 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 47, 113, 237, 113, 57, + 63, 51, 51, 47, 205, 63, 1, 47, 237, 51, 47, 17, 51, 47, 237, 50, 16, 205, 50, 47, + 50, 47, 47, 51, 47, 16, 220, 50, 237, 135, 16, 43, 135, 125, 196, 49, 48, 1, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 51, 35, 1, 51, 3, 22, + 22, 51, 50, 54, 53, 52, 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, + 39, 54, 54, 51, 50, 30, 2, 21, 20, 6, 7, 22, 21, 20, 14, 2, 35, 34, 39, 1, + 54, 54, 55, 51, 21, 35, 53, 6, 6, 7, 82, 70, 1, 123, 70, 159, 11, 33, 20, 23, + 32, 38, 38, 12, 22, 26, 28, 25, 14, 14, 36, 12, 19, 15, 49, 26, 17, 32, 25, 15, + 15, 15, 42, 12, 26, 41, 30, 47, 37, 254, 241, 35, 47, 24, 41, 59, 20, 33, 18, 2, + 107, 253, 204, 4, 8, 13, 16, 22, 12, 50, 11, 18, 14, 10, 10, 5, 43, 9, 13, 7, + 15, 25, 18, 15, 30, 11, 20, 45, 14, 29, 23, 14, 14, 2, 42, 14, 28, 23, 250, 168, + 11, 14, 6, 0, 3, 0, 21, 255, 249, 1, 227, 2, 120, 0, 3, 0, 34, 0, 76, 1, + 61, 185, 0, 71, 255, 224, 180, 20, 21, 0, 76, 71, 184, 255, 232, 180, 17, 19, 0, 76, + 71, 184, 255, 224, 180, 14, 16, 0, 76, 64, 184, 255, 200, 179, 16, 0, 77, 64, 184, 255, + 208, 180, 14, 15, 0, 76, 63, 184, 255, 224, 179, 24, 0, 77, 63, 184, 255, 232, 179, 23, + 0, 77, 63, 184, 255, 224, 179, 22, 0, 77, 63, 184, 255, 232, 180, 19, 21, 0, 76, 63, + 184, 255, 224, 179, 18, 0, 77, 63, 184, 255, 216, 179, 17, 0, 77, 31, 184, 255, 224, 179, + 21, 0, 77, 31, 184, 255, 232, 179, 20, 0, 77, 31, 184, 255, 224, 180, 18, 19, 0, 76, + 28, 184, 255, 240, 179, 21, 0, 77, 28, 184, 255, 232, 180, 17, 20, 0, 76, 28, 184, 255, + 216, 180, 15, 16, 0, 76, 28, 184, 255, 224, 179, 14, 0, 77, 28, 184, 255, 208, 64, 79, + 13, 0, 77, 24, 24, 21, 22, 0, 76, 67, 50, 150, 65, 69, 57, 76, 45, 45, 76, 41, + 150, 69, 0, 2, 1, 2, 156, 3, 0, 20, 3, 0, 3, 3, 69, 78, 16, 150, 4, 29, + 22, 23, 9, 1, 1, 34, 150, 9, 67, 45, 46, 46, 60, 35, 35, 38, 74, 104, 56, 56, + 53, 60, 102, 22, 22, 19, 152, 26, 99, 34, 152, 6, 97, 2, 3, 89, 0, 1, 91, 0, + 63, 51, 63, 51, 63, 237, 63, 237, 50, 47, 63, 205, 50, 47, 63, 205, 50, 47, 17, 57, + 47, 205, 57, 1, 47, 237, 51, 47, 16, 192, 50, 47, 198, 237, 16, 206, 50, 47, 135, 43, + 135, 125, 196, 1, 24, 16, 253, 196, 50, 47, 16, 198, 16, 212, 237, 50, 49, 48, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 51, 35, + 1, 51, 5, 21, 35, 38, 52, 53, 52, 54, 55, 55, 54, 54, 53, 52, 38, 35, 34, 6, + 7, 39, 54, 54, 51, 50, 22, 21, 20, 14, 2, 7, 19, 22, 22, 51, 50, 54, 53, 52, + 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, + 2, 21, 20, 7, 22, 21, 20, 14, 2, 35, 34, 39, 104, 70, 1, 123, 70, 254, 249, 198, + 1, 41, 26, 22, 23, 19, 23, 16, 15, 32, 12, 33, 18, 51, 26, 48, 47, 27, 37, 40, + 13, 208, 11, 33, 20, 23, 32, 38, 38, 12, 22, 26, 28, 25, 14, 14, 36, 12, 19, 15, + 49, 26, 17, 32, 25, 15, 30, 42, 12, 26, 41, 30, 47, 37, 2, 107, 193, 50, 3, 17, + 3, 32, 35, 16, 15, 14, 22, 14, 17, 16, 12, 13, 39, 19, 19, 50, 32, 26, 36, 28, + 22, 12, 254, 141, 4, 8, 13, 16, 22, 12, 50, 11, 18, 14, 10, 10, 5, 43, 9, 13, + 7, 15, 25, 18, 32, 24, 19, 46, 14, 29, 23, 14, 14, 0, 5, 255, 255, 255, 249, 1, + 215, 2, 114, 0, 31, 0, 35, 0, 46, 0, 57, 0, 68, 0, 253, 64, 12, 49, 48, 22, + 0, 77, 30, 40, 14, 21, 0, 76, 24, 184, 255, 224, 180, 14, 21, 0, 76, 18, 184, 255, + 200, 179, 23, 0, 77, 18, 184, 255, 208, 179, 22, 0, 77, 14, 184, 255, 208, 64, 17, 14, + 21, 0, 76, 8, 32, 14, 21, 0, 76, 4, 40, 22, 23, 0, 76, 59, 184, 255, 240, 64, + 112, 23, 0, 77, 51, 32, 24, 0, 77, 51, 24, 23, 0, 77, 51, 32, 22, 0, 77, 49, + 24, 23, 0, 77, 49, 16, 22, 0, 77, 48, 32, 23, 24, 0, 76, 18, 24, 24, 0, 77, + 4, 32, 24, 0, 77, 41, 150, 39, 42, 36, 32, 34, 33, 34, 156, 35, 32, 20, 35, 35, + 32, 33, 36, 35, 35, 22, 3, 50, 61, 19, 4, 6, 63, 150, 16, 16, 22, 58, 150, 6, + 6, 52, 150, 0, 47, 150, 22, 42, 97, 46, 36, 36, 43, 39, 96, 34, 35, 89, 32, 33, + 19, 61, 61, 11, 55, 3, 50, 50, 27, 104, 66, 11, 102, 0, 63, 205, 63, 57, 17, 51, + 205, 17, 57, 17, 51, 47, 51, 63, 51, 63, 51, 51, 47, 205, 63, 1, 47, 237, 220, 237, + 51, 47, 237, 17, 51, 47, 237, 18, 23, 57, 17, 51, 47, 47, 51, 135, 16, 43, 135, 125, + 196, 1, 24, 16, 220, 50, 237, 49, 48, 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, + 43, 43, 43, 43, 43, 43, 43, 43, 55, 52, 54, 55, 38, 38, 53, 52, 62, 2, 51, 50, + 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, 35, 34, 46, 2, 7, 35, 1, 51, + 5, 54, 54, 55, 51, 21, 35, 53, 6, 6, 7, 1, 52, 38, 39, 6, 21, 20, 22, 51, + 50, 54, 39, 20, 22, 23, 54, 53, 52, 38, 35, 34, 6, 255, 18, 25, 15, 19, 17, 28, + 36, 19, 18, 36, 28, 17, 15, 23, 20, 26, 19, 30, 39, 20, 21, 39, 30, 18, 186, 70, + 1, 123, 70, 254, 80, 35, 47, 24, 41, 59, 20, 33, 18, 1, 123, 41, 26, 31, 32, 17, + 19, 30, 89, 30, 22, 29, 22, 21, 14, 24, 69, 12, 36, 11, 9, 28, 23, 18, 27, 18, + 8, 9, 18, 27, 17, 14, 28, 13, 9, 29, 25, 19, 29, 19, 10, 8, 18, 29, 48, 2, + 107, 58, 14, 28, 23, 250, 168, 11, 14, 6, 254, 68, 18, 15, 8, 16, 25, 14, 12, 13, + 130, 14, 15, 6, 17, 18, 10, 13, 13, 0, 5, 0, 11, 255, 249, 1, 215, 2, 121, 0, + 31, 0, 35, 0, 79, 0, 90, 0, 101, 1, 162, 185, 0, 84, 255, 232, 179, 24, 0, 77, + 84, 184, 255, 224, 179, 22, 0, 77, 83, 184, 255, 216, 64, 19, 23, 0, 77, 82, 80, 24, + 0, 77, 82, 40, 23, 0, 77, 82, 64, 22, 0, 77, 74, 184, 255, 224, 180, 14, 21, 0, + 76, 74, 184, 255, 208, 180, 11, 12, 0, 76, 70, 184, 255, 224, 179, 24, 0, 77, 70, 184, + 255, 224, 180, 14, 21, 0, 76, 69, 184, 255, 224, 179, 22, 0, 77, 69, 184, 255, 232, 180, + 14, 21, 0, 76, 64, 184, 255, 224, 64, 11, 17, 24, 0, 76, 30, 40, 14, 21, 0, 76, + 24, 184, 255, 224, 180, 14, 21, 0, 76, 19, 184, 255, 224, 179, 22, 0, 77, 18, 184, 255, + 216, 179, 24, 0, 77, 18, 184, 255, 208, 179, 22, 0, 77, 14, 184, 255, 216, 64, 136, 14, + 21, 0, 76, 8, 40, 14, 21, 0, 76, 4, 24, 24, 0, 77, 4, 48, 22, 0, 77, 3, + 40, 22, 0, 77, 82, 32, 23, 0, 77, 82, 8, 22, 0, 77, 18, 40, 23, 0, 77, 4, + 32, 23, 0, 77, 51, 150, 66, 66, 42, 150, 72, 79, 32, 34, 33, 34, 156, 35, 32, 20, + 35, 35, 32, 33, 33, 79, 58, 58, 79, 46, 46, 79, 35, 35, 22, 3, 83, 94, 19, 4, + 6, 96, 150, 16, 16, 22, 91, 150, 6, 6, 85, 150, 0, 80, 150, 31, 22, 1, 22, 69, + 111, 46, 1, 46, 48, 47, 64, 47, 96, 47, 3, 47, 47, 61, 36, 36, 39, 152, 77, 100, + 57, 57, 54, 152, 61, 99, 34, 35, 89, 32, 33, 91, 19, 94, 94, 184, 255, 224, 64, 22, + 29, 0, 77, 52, 94, 1, 94, 11, 88, 152, 3, 83, 75, 83, 1, 83, 27, 104, 99, 152, + 11, 102, 0, 63, 237, 63, 57, 113, 17, 51, 237, 17, 57, 113, 43, 17, 51, 63, 51, 63, + 51, 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 47, 113, 205, 113, 57, 1, 47, 113, 237, + 220, 237, 51, 47, 237, 17, 51, 47, 237, 18, 23, 57, 17, 51, 47, 47, 51, 47, 17, 51, + 47, 17, 51, 47, 135, 16, 43, 135, 125, 196, 1, 24, 16, 221, 237, 51, 47, 237, 49, 48, + 0, 43, 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 52, 54, 55, 38, 38, 53, 52, 62, 2, 51, + 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, 35, 34, 46, 2, 7, 35, 1, + 51, 5, 22, 22, 51, 50, 54, 53, 52, 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, + 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, + 35, 34, 39, 1, 52, 38, 39, 6, 21, 20, 22, 51, 50, 54, 39, 20, 22, 23, 54, 53, + 52, 38, 35, 34, 6, 255, 17, 26, 14, 20, 17, 28, 36, 19, 18, 36, 28, 17, 14, 23, + 19, 26, 19, 30, 39, 20, 21, 39, 30, 18, 175, 69, 1, 122, 71, 254, 86, 11, 33, 20, + 23, 33, 39, 38, 12, 23, 25, 28, 25, 14, 14, 36, 12, 19, 15, 49, 26, 17, 32, 25, + 15, 15, 15, 20, 23, 12, 27, 41, 30, 47, 37, 1, 137, 41, 26, 31, 32, 17, 19, 30, + 89, 30, 22, 29, 22, 21, 14, 24, 69, 12, 36, 12, 8, 28, 23, 18, 27, 18, 8, 9, + 18, 27, 17, 14, 29, 12, 9, 29, 25, 19, 29, 19, 10, 8, 18, 29, 48, 2, 107, 189, + 5, 8, 13, 17, 21, 12, 50, 11, 18, 15, 9, 10, 5, 43, 9, 13, 7, 15, 25, 18, + 15, 29, 11, 10, 33, 23, 14, 29, 23, 14, 14, 254, 200, 18, 15, 8, 16, 25, 14, 12, + 13, 130, 14, 15, 6, 17, 18, 10, 13, 13, 0, 5, 0, 11, 255, 249, 1, 215, 2, 114, + 0, 31, 0, 35, 0, 46, 0, 57, 0, 85, 1, 251, 185, 0, 62, 255, 232, 180, 17, 20, + 0, 76, 62, 184, 255, 224, 179, 16, 0, 77, 62, 184, 255, 216, 180, 14, 15, 0, 76, 60, + 184, 255, 232, 180, 16, 20, 0, 76, 60, 184, 255, 224, 179, 15, 0, 77, 60, 184, 255, 216, + 64, 25, 14, 0, 77, 30, 16, 21, 0, 77, 30, 24, 19, 20, 0, 76, 30, 32, 18, 0, + 77, 30, 24, 17, 0, 77, 24, 184, 255, 232, 179, 20, 0, 77, 24, 184, 255, 240, 180, 17, + 19, 0, 76, 18, 184, 255, 208, 179, 22, 0, 77, 14, 184, 255, 216, 179, 20, 0, 77, 14, + 184, 255, 224, 179, 19, 0, 77, 14, 184, 255, 240, 179, 18, 0, 77, 14, 184, 255, 224, 64, + 63, 17, 0, 77, 8, 24, 20, 21, 0, 76, 8, 16, 19, 0, 77, 8, 24, 17, 18, 0, + 76, 5, 16, 22, 0, 77, 4, 40, 22, 0, 77, 39, 16, 22, 0, 77, 38, 40, 22, 0, + 77, 37, 24, 31, 33, 0, 76, 37, 32, 30, 0, 77, 37, 32, 23, 24, 0, 76, 30, 24, + 22, 0, 77, 25, 184, 255, 248, 179, 35, 0, 77, 24, 184, 255, 240, 179, 35, 0, 77, 8, + 184, 255, 240, 64, 74, 22, 0, 77, 4, 24, 35, 0, 77, 52, 39, 1, 34, 32, 35, 32, + 156, 86, 34, 20, 86, 86, 34, 33, 33, 67, 67, 77, 83, 83, 74, 150, 61, 85, 16, 58, + 1, 58, 150, 82, 32, 47, 0, 77, 82, 77, 3, 39, 50, 19, 4, 16, 47, 150, 6, 41, + 150, 0, 36, 150, 22, 35, 35, 22, 52, 150, 16, 22, 159, 77, 191, 77, 2, 77, 58, 184, + 255, 192, 179, 47, 0, 77, 58, 184, 255, 192, 64, 24, 31, 0, 77, 48, 58, 64, 58, 80, + 58, 112, 58, 144, 58, 176, 58, 6, 58, 58, 71, 85, 152, 82, 96, 68, 184, 255, 208, 179, + 32, 0, 77, 68, 184, 255, 192, 179, 31, 0, 77, 68, 184, 255, 224, 64, 50, 28, 0, 77, + 64, 68, 1, 68, 68, 71, 152, 64, 100, 34, 35, 89, 32, 33, 91, 19, 48, 50, 1, 50, + 39, 3, 39, 39, 32, 29, 0, 77, 39, 24, 23, 24, 0, 76, 64, 39, 1, 39, 11, 44, + 152, 27, 104, 55, 152, 11, 102, 0, 63, 237, 63, 237, 17, 57, 113, 43, 43, 17, 51, 16, + 201, 113, 50, 63, 51, 63, 51, 63, 237, 50, 47, 113, 43, 43, 43, 63, 237, 18, 57, 47, + 113, 43, 43, 205, 113, 1, 47, 212, 237, 17, 51, 47, 16, 253, 212, 237, 212, 237, 18, 23, + 57, 47, 51, 43, 237, 114, 50, 220, 237, 51, 47, 17, 51, 47, 51, 47, 135, 16, 43, 135, + 125, 196, 0, 113, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, + 52, 54, 55, 38, 38, 53, 52, 62, 2, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, + 20, 14, 2, 35, 34, 46, 2, 7, 35, 1, 51, 3, 52, 38, 39, 6, 21, 20, 22, 51, + 50, 54, 39, 20, 22, 23, 54, 53, 52, 38, 35, 34, 6, 3, 22, 22, 21, 20, 6, 35, + 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, 62, 3, 55, 51, 21, 35, 255, + 17, 26, 14, 20, 17, 28, 36, 19, 18, 36, 28, 17, 14, 23, 19, 26, 19, 30, 39, 20, + 21, 39, 30, 18, 175, 69, 1, 122, 71, 48, 41, 26, 31, 32, 17, 19, 30, 89, 30, 22, + 29, 22, 21, 14, 24, 221, 56, 54, 58, 59, 24, 46, 12, 14, 10, 35, 21, 26, 34, 47, + 64, 3, 3, 3, 2, 1, 147, 96, 69, 12, 36, 12, 8, 28, 23, 18, 27, 18, 8, 9, + 18, 27, 17, 14, 29, 12, 9, 29, 25, 19, 29, 19, 10, 8, 18, 29, 48, 2, 107, 253, + 218, 18, 15, 8, 16, 25, 14, 12, 13, 130, 14, 15, 6, 17, 18, 10, 13, 13, 1, 87, + 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, 28, 29, 21, 50, + 0, 5, 0, 11, 255, 249, 1, 215, 2, 114, 0, 31, 0, 35, 0, 46, 0, 57, 0, 72, + 0, 210, 64, 12, 30, 32, 17, 21, 0, 76, 30, 24, 16, 0, 77, 24, 184, 255, 224, 180, + 17, 21, 0, 76, 24, 184, 255, 232, 179, 16, 0, 77, 20, 184, 255, 216, 179, 16, 0, 77, + 14, 184, 255, 224, 180, 17, 21, 0, 76, 14, 184, 255, 232, 64, 93, 16, 0, 77, 8, 24, + 17, 21, 0, 76, 8, 32, 16, 0, 77, 32, 34, 33, 34, 156, 35, 32, 20, 35, 35, 32, + 33, 33, 112, 64, 1, 64, 58, 150, 72, 63, 150, 67, 3, 39, 50, 19, 4, 16, 47, 150, + 6, 41, 150, 0, 36, 150, 22, 35, 35, 22, 52, 150, 16, 22, 67, 63, 152, 65, 96, 58, + 97, 34, 35, 89, 32, 33, 91, 19, 50, 66, 50, 1, 52, 50, 1, 50, 11, 44, 152, 3, + 39, 39, 27, 104, 55, 152, 11, 102, 0, 63, 237, 63, 57, 17, 51, 237, 17, 57, 113, 113, + 17, 51, 63, 51, 63, 51, 63, 63, 237, 50, 1, 47, 212, 237, 17, 51, 47, 16, 253, 220, + 237, 212, 237, 18, 23, 57, 47, 237, 222, 237, 204, 93, 50, 47, 135, 16, 43, 135, 125, 196, + 49, 48, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 52, 54, 55, 38, 38, 53, 52, + 62, 2, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, 35, 34, 46, 2, + 7, 35, 1, 51, 3, 52, 38, 39, 6, 21, 20, 22, 51, 50, 54, 39, 20, 22, 23, 54, + 53, 52, 38, 35, 34, 6, 39, 62, 3, 55, 35, 53, 51, 21, 14, 3, 7, 255, 17, 26, + 14, 20, 17, 28, 36, 19, 18, 36, 28, 17, 14, 23, 19, 26, 19, 30, 39, 20, 21, 39, + 30, 18, 175, 69, 1, 122, 71, 48, 41, 26, 31, 32, 17, 19, 30, 89, 30, 22, 29, 22, + 21, 14, 24, 253, 6, 14, 18, 25, 18, 104, 175, 24, 30, 20, 13, 6, 69, 12, 36, 12, + 8, 28, 23, 18, 27, 18, 8, 9, 18, 27, 17, 14, 29, 12, 9, 29, 25, 19, 29, 19, + 10, 8, 18, 29, 48, 2, 107, 253, 218, 18, 15, 8, 16, 25, 14, 12, 13, 130, 14, 15, + 6, 17, 18, 10, 13, 13, 180, 34, 52, 45, 43, 26, 50, 41, 27, 44, 47, 54, 37, 0, + 3, 0, 11, 255, 247, 1, 215, 2, 114, 0, 10, 0, 38, 0, 42, 0, 152, 185, 0, 15, + 255, 216, 180, 14, 20, 0, 76, 13, 184, 255, 216, 180, 14, 20, 0, 76, 21, 184, 255, 232, + 64, 45, 28, 0, 77, 39, 41, 40, 41, 156, 42, 39, 20, 42, 39, 42, 42, 14, 38, 11, + 30, 35, 20, 20, 30, 14, 37, 37, 27, 150, 14, 40, 40, 0, 5, 150, 3, 6, 0, 41, + 42, 89, 39, 40, 91, 30, 11, 184, 255, 192, 64, 22, 28, 32, 72, 11, 11, 24, 38, 152, + 35, 101, 24, 152, 17, 104, 6, 97, 10, 0, 0, 7, 3, 96, 0, 63, 51, 51, 47, 205, + 63, 63, 237, 63, 237, 18, 57, 47, 43, 205, 63, 51, 63, 51, 1, 47, 220, 50, 237, 17, + 51, 47, 47, 237, 51, 47, 16, 204, 50, 47, 50, 16, 205, 50, 17, 51, 47, 135, 43, 135, + 125, 196, 49, 48, 0, 43, 1, 43, 43, 19, 54, 54, 55, 51, 21, 35, 53, 6, 6, 7, + 1, 22, 22, 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, + 62, 3, 55, 51, 21, 35, 5, 35, 1, 51, 16, 35, 47, 24, 41, 59, 20, 33, 18, 1, + 72, 56, 54, 58, 59, 24, 46, 12, 14, 10, 35, 21, 26, 34, 47, 64, 3, 3, 3, 2, + 1, 147, 96, 254, 228, 69, 1, 122, 71, 2, 49, 14, 28, 23, 250, 168, 11, 14, 6, 254, + 162, 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, 28, 29, 21, + 50, 200, 2, 107, 0, 3, 0, 21, 255, 247, 1, 228, 2, 121, 0, 27, 0, 31, 0, 60, + 1, 16, 185, 0, 57, 255, 224, 179, 21, 0, 77, 57, 184, 255, 232, 179, 20, 0, 77, 57, + 184, 255, 240, 179, 19, 0, 77, 57, 184, 255, 232, 179, 18, 0, 77, 54, 184, 255, 224, 64, + 20, 14, 21, 0, 76, 50, 32, 22, 0, 77, 50, 24, 21, 0, 77, 50, 32, 20, 0, 77, + 4, 184, 255, 216, 180, 14, 21, 0, 76, 2, 184, 255, 208, 64, 68, 14, 21, 0, 76, 42, + 150, 55, 55, 32, 35, 28, 30, 29, 30, 156, 31, 28, 20, 31, 31, 28, 29, 29, 60, 35, + 49, 49, 35, 31, 31, 3, 27, 0, 19, 24, 9, 9, 19, 3, 26, 26, 16, 150, 3, 48, + 48, 45, 152, 52, 99, 60, 152, 34, 97, 30, 31, 89, 28, 29, 91, 63, 19, 79, 19, 2, + 19, 152, 0, 184, 255, 192, 64, 11, 28, 33, 72, 0, 0, 13, 27, 152, 24, 101, 10, 184, + 255, 208, 179, 33, 0, 77, 10, 184, 255, 216, 180, 31, 32, 0, 76, 10, 184, 255, 208, 179, + 30, 0, 77, 10, 184, 255, 192, 64, 10, 28, 29, 0, 76, 10, 10, 13, 152, 6, 104, 0, + 63, 237, 50, 47, 43, 43, 43, 43, 63, 237, 18, 57, 47, 43, 237, 113, 63, 51, 63, 51, + 63, 237, 63, 237, 50, 47, 1, 47, 237, 51, 47, 16, 204, 50, 47, 50, 16, 205, 50, 17, + 51, 47, 47, 51, 47, 17, 51, 51, 47, 135, 16, 43, 135, 125, 196, 1, 24, 16, 205, 50, + 47, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 22, 22, 21, 20, 6, + 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, 62, 3, 55, 51, 21, 35, + 5, 35, 1, 51, 5, 21, 35, 53, 52, 54, 55, 55, 54, 54, 53, 52, 38, 35, 34, 6, + 7, 39, 54, 54, 51, 50, 22, 21, 20, 14, 2, 7, 1, 105, 56, 54, 58, 59, 24, 46, + 12, 14, 10, 35, 21, 26, 34, 47, 64, 3, 3, 3, 2, 1, 147, 96, 254, 253, 70, 1, + 123, 70, 254, 247, 198, 40, 26, 22, 23, 19, 23, 16, 15, 32, 12, 32, 17, 51, 26, 48, + 47, 27, 37, 41, 13, 163, 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, + 23, 31, 28, 29, 21, 50, 200, 2, 107, 195, 50, 23, 32, 35, 16, 15, 14, 25, 14, 17, + 16, 13, 13, 40, 19, 19, 50, 32, 26, 37, 28, 24, 12, 0, 3, 0, 19, 255, 247, 1, + 220, 2, 121, 0, 42, 0, 70, 0, 74, 0, 243, 185, 0, 47, 255, 208, 180, 14, 21, 0, + 76, 45, 184, 255, 208, 180, 14, 21, 0, 76, 37, 184, 255, 232, 180, 14, 21, 0, 76, 34, + 184, 255, 208, 180, 14, 21, 0, 76, 28, 184, 255, 224, 64, 57, 17, 24, 0, 76, 71, 73, + 72, 73, 156, 74, 71, 20, 74, 71, 74, 74, 46, 70, 43, 150, 62, 67, 52, 52, 62, 46, + 69, 69, 59, 150, 46, 72, 72, 42, 33, 15, 150, 30, 30, 6, 150, 35, 42, 22, 22, 42, + 10, 10, 42, 73, 74, 89, 71, 72, 91, 62, 43, 184, 255, 192, 64, 11, 28, 33, 72, 43, + 43, 56, 70, 152, 67, 101, 53, 184, 255, 192, 179, 29, 0, 77, 53, 184, 255, 216, 64, 36, + 28, 0, 77, 53, 53, 56, 152, 49, 104, 33, 111, 10, 1, 10, 48, 11, 64, 11, 96, 11, + 3, 11, 11, 25, 0, 0, 3, 152, 40, 100, 21, 21, 18, 152, 25, 99, 0, 63, 237, 50, + 47, 63, 237, 50, 47, 17, 57, 47, 113, 205, 113, 57, 63, 237, 50, 47, 43, 43, 63, 237, + 18, 57, 47, 43, 205, 63, 51, 63, 51, 1, 47, 51, 47, 17, 51, 47, 16, 221, 237, 51, + 47, 237, 50, 17, 51, 47, 47, 237, 51, 47, 16, 204, 50, 47, 50, 16, 237, 50, 17, 51, + 47, 135, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, 43, 19, 22, 22, 51, 50, 54, + 53, 52, 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, + 50, 30, 2, 21, 20, 6, 7, 22, 21, 20, 14, 2, 35, 34, 39, 5, 22, 22, 21, 20, + 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, 62, 3, 55, 51, 21, + 35, 5, 35, 1, 51, 34, 11, 33, 20, 23, 33, 39, 38, 12, 23, 25, 28, 25, 14, 14, + 36, 12, 19, 15, 49, 26, 17, 32, 25, 15, 15, 15, 43, 12, 27, 41, 30, 47, 37, 1, + 86, 56, 54, 58, 59, 24, 46, 12, 14, 10, 35, 21, 26, 34, 47, 64, 3, 3, 3, 2, + 1, 147, 96, 254, 245, 70, 1, 123, 70, 1, 174, 5, 8, 13, 17, 21, 12, 50, 11, 18, + 15, 9, 10, 5, 43, 9, 13, 7, 15, 25, 18, 15, 30, 11, 20, 45, 14, 29, 23, 14, + 14, 218, 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, 28, 29, + 21, 50, 200, 2, 107, 0, 4, 0, 15, 255, 247, 1, 229, 2, 114, 0, 27, 0, 40, 0, + 45, 0, 49, 0, 200, 64, 16, 40, 24, 22, 0, 77, 39, 32, 22, 0, 77, 38, 32, 22, + 0, 77, 4, 184, 255, 216, 180, 14, 21, 0, 76, 2, 184, 255, 208, 64, 62, 14, 21, 0, + 76, 30, 29, 32, 150, 35, 41, 35, 48, 46, 49, 46, 156, 47, 48, 20, 47, 48, 40, 35, + 47, 47, 44, 37, 49, 49, 3, 27, 0, 150, 19, 24, 9, 9, 19, 3, 26, 26, 16, 150, + 3, 48, 49, 89, 46, 47, 91, 41, 40, 96, 37, 29, 44, 32, 35, 34, 97, 19, 0, 184, + 255, 192, 64, 11, 28, 33, 72, 0, 0, 13, 27, 152, 24, 101, 10, 184, 255, 216, 179, 29, + 0, 77, 10, 184, 255, 208, 64, 9, 28, 0, 77, 10, 10, 13, 152, 6, 104, 0, 63, 237, + 50, 47, 43, 43, 63, 237, 18, 57, 47, 43, 205, 63, 221, 50, 205, 50, 50, 63, 51, 63, + 51, 63, 51, 1, 47, 237, 51, 47, 16, 204, 50, 47, 50, 16, 237, 50, 17, 51, 47, 47, + 51, 51, 47, 206, 50, 135, 43, 135, 125, 196, 1, 17, 51, 24, 16, 253, 50, 205, 49, 48, + 43, 43, 43, 43, 43, 37, 22, 22, 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, + 54, 53, 52, 38, 35, 62, 3, 55, 51, 21, 35, 3, 21, 51, 21, 35, 21, 35, 53, 35, + 53, 54, 54, 55, 23, 6, 6, 7, 51, 3, 35, 1, 51, 1, 105, 56, 54, 58, 59, 24, + 46, 12, 14, 10, 35, 21, 26, 34, 47, 64, 3, 3, 3, 2, 1, 147, 96, 160, 35, 35, + 59, 130, 27, 47, 32, 24, 22, 33, 16, 71, 39, 70, 1, 123, 70, 163, 2, 43, 39, 40, + 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, 28, 29, 21, 50, 1, 170, 152, 50, + 48, 48, 41, 46, 75, 40, 43, 27, 56, 26, 254, 38, 2, 107, 0, 4, 255, 255, 255, 247, + 1, 192, 2, 114, 0, 21, 0, 32, 0, 43, 0, 47, 0, 184, 182, 15, 32, 14, 21, 0, + 76, 10, 184, 255, 224, 180, 15, 21, 0, 76, 10, 184, 255, 216, 179, 14, 0, 77, 7, 184, + 255, 224, 180, 15, 21, 0, 76, 6, 184, 255, 216, 64, 85, 14, 0, 77, 19, 16, 29, 0, + 77, 44, 46, 45, 46, 156, 47, 44, 20, 47, 47, 44, 45, 45, 22, 15, 26, 1, 26, 150, + 25, 29, 22, 47, 47, 8, 3, 35, 150, 16, 41, 150, 8, 0, 0, 8, 44, 48, 46, 47, + 89, 45, 28, 97, 32, 47, 22, 63, 22, 79, 22, 3, 22, 22, 29, 26, 96, 33, 152, 3, + 5, 5, 38, 77, 0, 1, 0, 127, 21, 143, 21, 2, 21, 102, 38, 152, 13, 104, 0, 63, + 237, 63, 113, 205, 113, 18, 57, 47, 51, 237, 63, 51, 51, 47, 93, 205, 63, 47, 63, 51, + 17, 51, 1, 47, 51, 47, 16, 253, 212, 237, 50, 17, 51, 47, 47, 221, 50, 237, 113, 17, + 51, 47, 135, 16, 43, 135, 125, 196, 49, 48, 0, 43, 1, 43, 43, 43, 43, 43, 37, 6, + 6, 7, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 53, 52, 62, 2, 51, 1, 54, + 54, 55, 51, 21, 35, 53, 6, 6, 7, 1, 34, 7, 20, 22, 51, 50, 54, 53, 52, 38, + 5, 35, 1, 51, 1, 168, 47, 59, 13, 23, 18, 48, 45, 12, 24, 35, 23, 55, 49, 21, + 44, 67, 46, 254, 109, 35, 47, 24, 41, 59, 20, 33, 18, 1, 52, 23, 22, 25, 22, 20, + 21, 21, 254, 218, 70, 1, 123, 70, 209, 2, 24, 27, 13, 52, 35, 17, 33, 26, 15, 61, + 48, 31, 58, 44, 26, 1, 46, 14, 28, 23, 250, 168, 11, 14, 6, 254, 118, 14, 34, 30, + 25, 14, 16, 23, 119, 2, 107, 0, 4, 0, 28, 255, 247, 1, 221, 2, 114, 0, 21, 0, + 49, 0, 60, 0, 64, 1, 4, 185, 0, 26, 255, 216, 180, 14, 21, 0, 76, 24, 184, 255, + 208, 64, 11, 14, 21, 0, 76, 15, 32, 14, 21, 0, 76, 10, 184, 255, 224, 180, 14, 21, + 0, 76, 7, 184, 255, 216, 64, 78, 14, 21, 0, 76, 61, 63, 62, 63, 156, 64, 61, 20, + 64, 61, 84, 64, 1, 64, 64, 8, 3, 52, 150, 16, 64, 25, 28, 72, 16, 58, 150, 8, + 0, 0, 27, 8, 1, 91, 8, 1, 8, 66, 62, 62, 41, 48, 48, 4, 38, 1, 38, 25, + 49, 22, 41, 46, 31, 31, 41, 63, 64, 89, 61, 62, 91, 41, 64, 28, 31, 72, 41, 152, + 148, 22, 180, 22, 2, 22, 184, 255, 192, 64, 11, 28, 32, 72, 22, 22, 35, 49, 152, 46, + 96, 32, 184, 255, 192, 64, 41, 34, 0, 77, 180, 32, 1, 115, 32, 1, 2, 97, 32, 1, + 48, 32, 1, 32, 32, 35, 152, 28, 100, 50, 152, 3, 5, 5, 55, 0, 152, 127, 21, 143, + 21, 2, 21, 102, 55, 152, 13, 104, 0, 63, 237, 63, 113, 237, 18, 57, 47, 51, 237, 63, + 237, 50, 47, 113, 113, 95, 113, 113, 43, 63, 237, 18, 57, 47, 43, 113, 237, 43, 63, 51, + 63, 51, 1, 47, 50, 47, 50, 16, 205, 50, 220, 205, 113, 51, 47, 17, 51, 47, 16, 198, + 93, 113, 50, 47, 16, 253, 220, 43, 237, 50, 17, 51, 47, 93, 135, 43, 135, 125, 196, 49, + 48, 1, 43, 43, 43, 43, 43, 37, 6, 6, 7, 54, 51, 50, 22, 21, 20, 14, 2, 35, + 34, 38, 53, 52, 62, 2, 51, 1, 22, 22, 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, + 51, 50, 54, 53, 52, 38, 35, 62, 3, 55, 51, 21, 35, 19, 34, 7, 20, 22, 51, 50, + 54, 53, 52, 38, 5, 35, 1, 51, 1, 168, 47, 59, 13, 23, 18, 48, 45, 12, 24, 35, + 23, 55, 49, 21, 44, 67, 46, 254, 212, 56, 54, 58, 59, 24, 46, 12, 14, 10, 35, 21, + 26, 34, 47, 64, 3, 3, 3, 2, 1, 147, 96, 219, 23, 22, 25, 22, 20, 21, 21, 254, + 247, 70, 1, 123, 70, 209, 2, 24, 27, 13, 52, 35, 17, 33, 26, 15, 61, 48, 31, 58, + 44, 26, 1, 24, 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, + 28, 29, 21, 50, 254, 55, 14, 34, 30, 25, 14, 16, 23, 119, 2, 107, 0, 3, 255, 255, + 0, 0, 1, 211, 2, 114, 0, 10, 0, 25, 0, 29, 0, 98, 64, 55, 26, 28, 27, 28, + 156, 29, 26, 20, 29, 26, 29, 29, 20, 25, 150, 11, 11, 17, 16, 150, 20, 27, 27, 0, + 5, 150, 3, 7, 0, 27, 26, 30, 28, 29, 89, 20, 16, 152, 19, 101, 11, 91, 6, 97, + 10, 0, 64, 8, 13, 72, 0, 0, 7, 3, 96, 0, 63, 51, 51, 47, 43, 205, 63, 63, + 63, 237, 50, 63, 51, 17, 51, 51, 1, 47, 221, 50, 237, 17, 51, 47, 47, 237, 205, 57, + 47, 237, 17, 51, 47, 135, 43, 135, 125, 196, 49, 48, 19, 54, 54, 55, 51, 21, 35, 53, + 6, 6, 7, 1, 62, 3, 55, 35, 53, 51, 21, 14, 3, 7, 33, 35, 1, 51, 16, 35, + 47, 24, 41, 59, 20, 33, 18, 1, 25, 6, 14, 18, 26, 18, 104, 175, 24, 30, 21, 13, + 6, 254, 208, 70, 1, 123, 70, 2, 49, 14, 28, 23, 250, 168, 11, 14, 6, 253, 255, 34, + 52, 45, 43, 26, 50, 41, 27, 44, 46, 55, 37, 2, 107, 0, 3, 0, 21, 0, 0, 1, + 227, 2, 121, 0, 3, 0, 32, 0, 47, 0, 125, 185, 0, 31, 255, 232, 179, 25, 0, 77, + 26, 184, 255, 216, 64, 62, 14, 21, 0, 76, 39, 33, 150, 47, 42, 0, 2, 1, 2, 156, + 3, 0, 20, 3, 0, 3, 3, 38, 150, 42, 14, 150, 27, 4, 4, 27, 6, 1, 1, 32, + 150, 6, 21, 21, 6, 42, 38, 152, 40, 101, 33, 91, 20, 20, 17, 152, 24, 99, 32, 152, + 6, 97, 2, 3, 89, 0, 1, 91, 0, 63, 51, 63, 51, 63, 237, 63, 237, 50, 47, 63, + 63, 237, 50, 1, 47, 51, 47, 16, 237, 51, 47, 16, 205, 50, 47, 16, 237, 47, 237, 51, + 47, 135, 43, 135, 125, 196, 1, 24, 16, 222, 237, 204, 49, 48, 43, 43, 51, 35, 1, 51, + 5, 21, 35, 53, 52, 54, 55, 55, 54, 54, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, + 51, 50, 22, 21, 20, 14, 2, 7, 19, 62, 3, 55, 35, 53, 51, 21, 14, 3, 7, 104, + 70, 1, 123, 70, 254, 248, 198, 40, 26, 22, 23, 19, 23, 16, 15, 32, 12, 32, 17, 51, + 26, 48, 47, 27, 37, 41, 13, 222, 6, 14, 18, 26, 18, 104, 175, 24, 30, 21, 13, 6, + 2, 107, 195, 50, 23, 32, 35, 16, 15, 14, 25, 14, 17, 16, 13, 13, 40, 19, 19, 50, + 32, 26, 37, 29, 23, 12, 254, 88, 34, 52, 45, 43, 26, 50, 41, 27, 44, 46, 55, 37, + 0, 3, 0, 19, 0, 0, 1, 214, 2, 121, 0, 42, 0, 57, 0, 61, 0, 164, 185, 0, + 37, 255, 224, 180, 14, 21, 0, 76, 28, 184, 255, 224, 64, 88, 17, 21, 0, 76, 58, 60, + 59, 60, 156, 61, 58, 20, 61, 58, 61, 61, 52, 57, 150, 43, 43, 49, 48, 150, 52, 59, + 59, 42, 33, 15, 150, 30, 30, 6, 150, 35, 42, 22, 22, 42, 10, 10, 42, 60, 61, 89, + 58, 59, 91, 52, 48, 152, 50, 101, 43, 91, 33, 63, 10, 79, 10, 111, 10, 3, 10, 152, + 48, 11, 64, 11, 96, 11, 3, 11, 11, 25, 0, 0, 3, 152, 40, 100, 21, 21, 18, 152, + 25, 99, 0, 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 47, 113, 237, 113, 57, 63, 63, + 237, 50, 63, 51, 63, 51, 1, 47, 51, 47, 17, 51, 47, 16, 221, 237, 51, 47, 237, 50, + 17, 51, 47, 47, 237, 205, 57, 47, 237, 17, 51, 47, 135, 43, 135, 125, 196, 49, 48, 1, + 43, 43, 19, 22, 22, 51, 50, 54, 53, 52, 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, + 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 6, 7, 22, 21, 20, 14, 2, + 35, 34, 39, 1, 62, 3, 55, 35, 53, 51, 21, 14, 3, 7, 33, 35, 1, 51, 34, 11, + 33, 20, 23, 33, 39, 38, 12, 23, 25, 28, 25, 14, 14, 36, 12, 19, 15, 49, 26, 17, + 32, 25, 15, 15, 15, 43, 12, 27, 41, 30, 47, 37, 1, 39, 6, 14, 18, 26, 18, 104, + 175, 24, 30, 21, 13, 6, 254, 230, 70, 1, 123, 70, 1, 174, 5, 8, 13, 17, 21, 12, + 50, 11, 18, 15, 9, 10, 5, 43, 9, 13, 7, 15, 25, 18, 15, 30, 11, 20, 45, 14, + 29, 23, 14, 14, 254, 131, 34, 52, 45, 43, 26, 50, 41, 27, 44, 46, 55, 37, 2, 107, + 0, 4, 0, 15, 0, 0, 1, 224, 2, 114, 0, 14, 0, 27, 0, 32, 0, 36, 0, 110, + 64, 60, 33, 35, 34, 35, 156, 36, 33, 20, 36, 36, 33, 34, 34, 24, 27, 28, 28, 16, + 19, 150, 22, 22, 17, 31, 24, 36, 36, 9, 14, 150, 0, 0, 7, 5, 150, 9, 35, 36, + 89, 33, 34, 91, 28, 27, 96, 24, 16, 31, 152, 19, 22, 21, 97, 9, 5, 152, 7, 101, + 0, 91, 0, 63, 63, 237, 50, 63, 221, 50, 237, 50, 50, 63, 51, 63, 51, 63, 51, 1, + 47, 237, 205, 57, 47, 237, 17, 51, 47, 47, 51, 205, 57, 47, 237, 50, 51, 17, 51, 17, + 51, 47, 135, 16, 43, 135, 125, 196, 49, 48, 33, 62, 3, 55, 35, 53, 51, 21, 14, 3, + 7, 3, 21, 51, 21, 35, 21, 35, 53, 35, 53, 54, 54, 55, 23, 6, 6, 7, 51, 3, + 35, 1, 51, 1, 67, 6, 14, 18, 26, 18, 104, 175, 24, 30, 21, 13, 6, 178, 35, 35, + 59, 130, 27, 47, 32, 24, 22, 33, 16, 71, 44, 70, 1, 123, 70, 34, 52, 45, 43, 26, + 50, 41, 27, 44, 46, 55, 37, 2, 114, 152, 50, 48, 48, 41, 46, 75, 40, 43, 27, 56, + 26, 254, 38, 2, 107, 0, 3, 0, 13, 0, 0, 1, 220, 2, 114, 0, 27, 0, 42, 0, + 46, 0, 234, 185, 0, 4, 255, 208, 180, 14, 21, 0, 76, 2, 184, 255, 216, 180, 14, 21, + 0, 76, 17, 184, 255, 240, 179, 34, 0, 77, 11, 184, 255, 224, 179, 31, 0, 77, 10, 184, + 255, 192, 64, 83, 31, 0, 77, 43, 45, 44, 45, 156, 46, 43, 20, 46, 43, 46, 46, 37, + 28, 150, 42, 37, 34, 33, 150, 37, 44, 44, 19, 26, 26, 16, 150, 3, 27, 0, 150, 19, + 24, 24, 42, 43, 0, 76, 24, 19, 9, 9, 19, 45, 46, 89, 43, 44, 91, 37, 33, 152, + 35, 101, 28, 91, 111, 19, 1, 63, 19, 79, 19, 111, 19, 127, 19, 159, 19, 5, 19, 152, + 96, 0, 1, 144, 0, 1, 0, 184, 255, 192, 64, 11, 28, 32, 72, 0, 0, 13, 27, 152, + 24, 96, 10, 184, 255, 192, 179, 47, 0, 77, 10, 184, 255, 192, 64, 14, 29, 0, 77, 48, + 10, 80, 10, 2, 10, 10, 13, 152, 6, 100, 0, 63, 237, 50, 47, 113, 43, 43, 63, 237, + 18, 57, 47, 43, 113, 114, 237, 113, 114, 63, 63, 237, 50, 63, 51, 63, 51, 1, 47, 51, + 47, 17, 51, 43, 16, 237, 50, 220, 237, 51, 47, 17, 51, 47, 47, 253, 205, 16, 222, 237, + 17, 51, 47, 135, 43, 135, 125, 196, 49, 48, 0, 43, 43, 43, 1, 43, 43, 19, 22, 22, + 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, 62, 3, 55, + 51, 21, 35, 19, 62, 3, 55, 35, 53, 51, 21, 14, 3, 7, 33, 35, 1, 51, 102, 56, + 54, 58, 59, 24, 46, 12, 14, 10, 35, 21, 26, 34, 47, 64, 3, 3, 3, 2, 1, 147, + 96, 218, 6, 14, 18, 26, 18, 104, 175, 24, 30, 21, 13, 6, 254, 215, 70, 1, 123, 70, + 2, 27, 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, 28, 29, + 21, 50, 253, 192, 34, 52, 45, 43, 26, 50, 41, 27, 44, 46, 55, 37, 2, 107, 0, 4, + 0, 21, 0, 0, 1, 218, 2, 123, 0, 3, 0, 25, 0, 40, 0, 52, 0, 195, 64, 12, + 22, 24, 18, 0, 77, 19, 32, 14, 21, 0, 76, 14, 184, 255, 216, 180, 14, 21, 0, 76, + 11, 184, 255, 216, 64, 104, 14, 21, 0, 76, 23, 32, 32, 0, 77, 22, 32, 32, 0, 77, + 5, 16, 32, 0, 77, 87, 5, 1, 40, 150, 26, 26, 35, 32, 31, 150, 35, 0, 2, 1, + 2, 156, 3, 0, 20, 3, 0, 3, 3, 35, 50, 150, 12, 4, 4, 128, 12, 160, 12, 176, + 12, 3, 12, 7, 44, 150, 20, 1, 1, 20, 35, 31, 33, 101, 26, 91, 41, 152, 7, 128, + 9, 144, 9, 176, 9, 3, 9, 9, 47, 108, 4, 124, 4, 2, 94, 4, 1, 4, 25, 90, + 47, 152, 17, 100, 2, 3, 89, 0, 1, 91, 0, 63, 51, 63, 51, 63, 237, 63, 205, 113, + 113, 18, 57, 47, 113, 51, 237, 63, 63, 205, 50, 1, 47, 51, 47, 16, 253, 50, 204, 113, + 50, 47, 16, 237, 47, 51, 47, 135, 43, 135, 125, 196, 1, 24, 16, 253, 205, 17, 57, 47, + 237, 49, 48, 0, 113, 43, 43, 43, 1, 43, 43, 43, 43, 51, 35, 1, 51, 5, 6, 6, + 7, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 53, 52, 62, 2, 51, 19, 62, 3, + 55, 35, 53, 51, 21, 14, 3, 7, 3, 34, 6, 7, 20, 22, 51, 50, 54, 53, 52, 38, + 95, 70, 1, 123, 70, 254, 242, 47, 58, 13, 19, 21, 47, 46, 12, 24, 35, 24, 54, 49, + 21, 43, 67, 46, 116, 6, 14, 18, 26, 18, 104, 175, 24, 30, 21, 13, 6, 252, 12, 22, + 11, 25, 21, 20, 21, 21, 2, 107, 34, 2, 24, 26, 12, 52, 35, 17, 33, 26, 15, 61, + 48, 31, 58, 44, 26, 253, 133, 34, 52, 45, 43, 26, 50, 41, 27, 44, 46, 55, 37, 1, + 239, 8, 6, 34, 30, 25, 14, 16, 23, 0, 4, 255, 255, 255, 247, 1, 213, 2, 114, 0, + 21, 0, 32, 0, 42, 0, 46, 0, 186, 185, 0, 18, 255, 240, 179, 18, 0, 77, 15, 184, + 255, 216, 64, 17, 14, 21, 0, 76, 10, 40, 14, 21, 0, 76, 7, 40, 14, 21, 0, 76, + 19, 184, 255, 232, 64, 72, 29, 0, 77, 43, 45, 44, 45, 156, 46, 43, 20, 46, 46, 43, + 44, 44, 22, 26, 150, 25, 29, 22, 46, 46, 3, 35, 150, 16, 40, 150, 8, 0, 0, 143, + 8, 1, 8, 128, 16, 1, 16, 44, 43, 47, 45, 46, 89, 28, 97, 32, 22, 64, 10, 13, + 72, 22, 22, 29, 25, 96, 33, 152, 3, 5, 64, 30, 33, 72, 5, 5, 37, 0, 184, 255, + 192, 64, 12, 28, 29, 0, 76, 0, 152, 21, 104, 37, 152, 13, 102, 0, 63, 237, 63, 237, + 43, 18, 57, 47, 43, 51, 237, 63, 51, 51, 47, 43, 205, 63, 63, 51, 17, 51, 51, 1, + 47, 113, 204, 113, 50, 47, 16, 237, 16, 237, 50, 51, 47, 47, 221, 50, 237, 17, 51, 47, + 135, 16, 43, 135, 125, 196, 49, 48, 0, 43, 1, 43, 43, 43, 43, 37, 54, 54, 55, 6, + 35, 34, 38, 53, 52, 62, 2, 51, 50, 22, 21, 20, 14, 2, 35, 1, 54, 54, 55, 51, + 21, 35, 53, 6, 6, 7, 1, 50, 55, 38, 35, 34, 6, 21, 20, 22, 5, 35, 1, 51, + 1, 30, 46, 58, 13, 22, 18, 47, 45, 12, 24, 35, 23, 55, 49, 21, 44, 67, 46, 254, + 237, 35, 47, 24, 41, 59, 20, 33, 18, 1, 80, 20, 24, 1, 45, 20, 21, 21, 254, 234, + 70, 1, 123, 70, 41, 2, 23, 26, 11, 52, 35, 17, 33, 25, 16, 61, 48, 31, 58, 44, + 26, 2, 58, 14, 28, 23, 250, 168, 11, 14, 6, 254, 130, 13, 65, 25, 14, 16, 23, 131, + 2, 107, 0, 4, 0, 21, 255, 247, 1, 222, 2, 121, 0, 21, 0, 50, 0, 60, 0, 64, + 0, 208, 185, 0, 44, 255, 216, 180, 14, 21, 0, 76, 18, 184, 255, 240, 179, 18, 0, 77, + 15, 184, 255, 216, 64, 17, 14, 21, 0, 76, 10, 32, 14, 21, 0, 76, 7, 40, 14, 21, + 0, 76, 18, 184, 255, 232, 179, 30, 0, 77, 17, 184, 255, 232, 64, 89, 30, 0, 77, 61, + 63, 62, 63, 156, 64, 61, 20, 64, 64, 61, 62, 62, 25, 32, 150, 45, 22, 22, 45, 50, + 25, 39, 39, 25, 64, 64, 16, 58, 150, 8, 0, 0, 15, 8, 31, 8, 127, 8, 143, 8, + 4, 8, 3, 53, 150, 16, 63, 64, 89, 61, 62, 91, 38, 38, 35, 152, 42, 99, 50, 152, + 24, 97, 51, 152, 3, 15, 5, 31, 5, 2, 5, 64, 30, 33, 72, 5, 5, 55, 0, 21, + 104, 55, 152, 13, 102, 0, 63, 237, 63, 205, 18, 57, 47, 43, 113, 51, 237, 63, 237, 63, + 237, 50, 47, 63, 51, 63, 51, 1, 47, 253, 50, 204, 113, 50, 47, 16, 237, 17, 51, 47, + 47, 51, 47, 16, 205, 205, 50, 47, 16, 237, 17, 51, 47, 135, 16, 43, 135, 125, 196, 49, + 48, 0, 43, 43, 1, 43, 43, 43, 43, 43, 37, 54, 54, 55, 6, 35, 34, 38, 53, 52, + 62, 2, 51, 50, 22, 21, 20, 14, 2, 35, 3, 21, 35, 53, 52, 54, 55, 55, 54, 54, + 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 22, 21, 20, 14, 2, 7, 1, 50, + 55, 38, 35, 34, 6, 21, 20, 22, 7, 35, 1, 51, 1, 30, 46, 58, 13, 22, 18, 47, + 45, 12, 24, 35, 23, 55, 49, 21, 44, 67, 46, 72, 198, 40, 26, 22, 23, 19, 23, 16, + 15, 32, 12, 32, 17, 51, 26, 48, 47, 27, 37, 41, 13, 1, 21, 20, 24, 1, 45, 20, + 21, 21, 248, 70, 1, 123, 70, 41, 2, 23, 26, 11, 52, 35, 17, 33, 25, 16, 61, 48, + 31, 58, 44, 26, 1, 177, 50, 23, 32, 35, 16, 15, 14, 25, 14, 17, 16, 13, 13, 40, + 19, 19, 50, 32, 26, 37, 28, 24, 12, 254, 219, 13, 65, 25, 14, 16, 23, 131, 2, 107, + 0, 5, 0, 15, 255, 247, 1, 226, 2, 114, 0, 21, 0, 34, 0, 44, 0, 49, 0, 53, + 0, 176, 185, 0, 48, 255, 232, 179, 23, 0, 77, 46, 184, 255, 224, 179, 23, 0, 77, 18, + 184, 255, 248, 179, 18, 0, 77, 15, 184, 255, 224, 64, 84, 14, 21, 0, 76, 10, 32, 14, + 21, 0, 76, 7, 40, 14, 21, 0, 76, 50, 52, 51, 52, 156, 53, 50, 20, 53, 53, 50, + 51, 51, 48, 31, 34, 45, 45, 29, 24, 26, 150, 23, 150, 29, 53, 53, 3, 37, 150, 16, + 42, 150, 8, 0, 0, 8, 16, 52, 53, 89, 50, 51, 91, 45, 34, 96, 31, 23, 48, 26, + 29, 28, 97, 35, 152, 3, 5, 5, 39, 0, 152, 21, 104, 39, 152, 13, 102, 0, 63, 237, + 63, 237, 18, 57, 47, 51, 237, 63, 221, 50, 205, 50, 50, 63, 51, 63, 51, 63, 51, 1, + 47, 204, 50, 47, 16, 237, 16, 237, 50, 51, 47, 47, 237, 253, 205, 17, 51, 17, 51, 47, + 51, 51, 47, 135, 16, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, 37, 54, + 54, 55, 6, 35, 34, 38, 53, 52, 62, 2, 51, 50, 22, 21, 20, 14, 2, 35, 3, 21, + 51, 21, 35, 21, 35, 53, 35, 53, 54, 54, 55, 19, 50, 55, 38, 35, 34, 6, 21, 20, + 22, 3, 6, 6, 7, 51, 3, 35, 1, 51, 1, 30, 46, 58, 13, 22, 18, 47, 45, 12, + 24, 35, 23, 55, 49, 21, 44, 67, 46, 87, 35, 35, 59, 130, 27, 47, 32, 248, 20, 24, + 1, 45, 20, 21, 21, 202, 22, 33, 16, 71, 42, 70, 1, 123, 70, 41, 2, 23, 26, 11, + 52, 35, 17, 33, 25, 16, 61, 48, 31, 58, 44, 26, 2, 123, 152, 50, 48, 48, 41, 46, + 75, 40, 254, 17, 13, 65, 25, 14, 16, 23, 1, 196, 27, 56, 26, 254, 38, 2, 107, 0, + 4, 0, 13, 255, 247, 1, 213, 2, 114, 0, 21, 0, 49, 0, 59, 0, 63, 0, 245, 185, + 0, 26, 255, 216, 180, 14, 21, 0, 76, 24, 184, 255, 208, 180, 14, 21, 0, 76, 18, 184, + 255, 248, 179, 18, 0, 77, 15, 184, 255, 216, 64, 22, 14, 21, 0, 76, 10, 32, 14, 21, + 0, 76, 7, 40, 14, 21, 0, 76, 27, 32, 13, 0, 77, 23, 184, 255, 216, 179, 13, 0, + 77, 14, 184, 255, 216, 179, 13, 0, 77, 11, 184, 255, 216, 64, 94, 13, 0, 77, 6, 48, + 13, 0, 77, 60, 62, 61, 62, 156, 63, 60, 20, 63, 63, 60, 61, 61, 41, 48, 48, 38, + 150, 79, 25, 1, 25, 49, 22, 41, 46, 41, 31, 31, 65, 41, 1, 41, 63, 63, 3, 52, + 150, 16, 57, 150, 8, 0, 0, 8, 16, 62, 63, 89, 60, 61, 91, 41, 152, 22, 22, 35, + 49, 152, 46, 96, 32, 32, 35, 152, 64, 28, 1, 28, 100, 50, 152, 5, 5, 54, 0, 152, + 21, 104, 54, 152, 79, 13, 1, 13, 102, 0, 63, 93, 237, 63, 237, 18, 57, 47, 237, 63, + 93, 237, 50, 47, 63, 237, 18, 57, 47, 237, 63, 51, 63, 51, 1, 47, 204, 50, 47, 16, + 237, 16, 237, 50, 51, 47, 47, 93, 51, 47, 17, 51, 16, 205, 50, 220, 93, 237, 51, 47, + 17, 51, 47, 135, 16, 43, 135, 125, 196, 49, 48, 0, 43, 43, 43, 43, 43, 1, 43, 43, + 43, 43, 43, 43, 37, 54, 54, 55, 6, 35, 34, 38, 53, 52, 62, 2, 51, 50, 22, 21, + 20, 14, 2, 35, 3, 22, 22, 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, + 53, 52, 38, 35, 62, 3, 55, 51, 21, 35, 1, 50, 55, 38, 35, 34, 6, 21, 20, 22, + 5, 35, 1, 51, 1, 30, 46, 58, 13, 22, 18, 47, 45, 12, 24, 35, 23, 55, 49, 21, + 44, 67, 46, 189, 56, 54, 58, 59, 24, 46, 12, 14, 10, 35, 21, 26, 34, 47, 64, 3, + 3, 3, 2, 1, 147, 96, 1, 8, 20, 24, 1, 45, 20, 21, 21, 254, 250, 70, 1, 123, + 70, 41, 2, 23, 26, 11, 52, 35, 17, 33, 25, 16, 61, 48, 31, 58, 44, 26, 2, 36, + 2, 43, 39, 40, 48, 13, 8, 48, 5, 14, 16, 19, 23, 19, 23, 31, 28, 29, 21, 50, + 254, 67, 13, 65, 25, 14, 16, 23, 131, 2, 107, 0, 4, 0, 11, 255, 247, 1, 213, 2, + 114, 0, 3, 0, 25, 0, 40, 0, 50, 0, 155, 185, 0, 22, 255, 248, 179, 18, 0, 77, + 19, 184, 255, 216, 64, 84, 14, 21, 0, 76, 14, 32, 14, 21, 0, 76, 11, 40, 14, 21, + 0, 76, 40, 150, 26, 26, 31, 95, 35, 1, 35, 32, 0, 2, 1, 2, 156, 3, 0, 20, + 3, 3, 0, 1, 1, 80, 32, 1, 32, 7, 43, 150, 20, 48, 150, 12, 4, 4, 12, 20, + 3, 3, 20, 35, 31, 152, 33, 96, 26, 97, 41, 152, 7, 9, 9, 45, 4, 152, 25, 104, + 45, 152, 17, 102, 2, 3, 89, 0, 1, 91, 0, 63, 51, 63, 51, 63, 237, 63, 237, 18, + 57, 47, 51, 237, 63, 63, 237, 50, 1, 47, 51, 47, 16, 204, 50, 47, 16, 237, 16, 237, + 50, 47, 93, 51, 47, 135, 16, 43, 135, 125, 196, 1, 24, 16, 205, 93, 50, 57, 47, 237, + 49, 48, 43, 43, 43, 43, 51, 35, 1, 51, 3, 54, 54, 55, 6, 35, 34, 38, 53, 52, + 62, 2, 51, 50, 22, 21, 20, 14, 2, 35, 3, 62, 3, 55, 35, 53, 51, 21, 14, 3, + 7, 23, 50, 55, 52, 35, 34, 6, 21, 20, 22, 80, 69, 1, 122, 71, 174, 46, 59, 13, + 21, 20, 47, 45, 12, 24, 35, 23, 55, 49, 21, 44, 67, 46, 221, 6, 14, 18, 25, 18, + 104, 175, 24, 30, 20, 13, 6, 240, 21, 23, 46, 20, 21, 21, 2, 107, 253, 190, 2, 23, + 27, 12, 52, 35, 17, 33, 25, 16, 61, 48, 31, 58, 44, 26, 1, 129, 34, 52, 45, 43, + 26, 50, 41, 27, 44, 47, 54, 37, 245, 13, 65, 25, 14, 16, 23, 0, 6, 0, 19, 255, + 247, 1, 225, 2, 121, 0, 31, 0, 53, 0, 63, 0, 76, 0, 87, 0, 91, 1, 84, 185, + 0, 47, 255, 216, 64, 23, 14, 21, 0, 76, 42, 24, 14, 21, 0, 76, 39, 32, 14, 21, + 0, 76, 30, 48, 14, 21, 0, 76, 24, 184, 255, 224, 180, 14, 21, 0, 76, 19, 184, 255, + 240, 179, 16, 0, 77, 14, 184, 255, 216, 64, 54, 14, 21, 0, 76, 8, 40, 14, 21, 0, + 76, 70, 32, 24, 0, 77, 70, 40, 23, 0, 77, 70, 32, 22, 0, 77, 67, 32, 24, 0, + 77, 67, 24, 22, 23, 0, 76, 66, 24, 24, 0, 77, 66, 32, 22, 23, 0, 76, 50, 24, + 18, 21, 0, 76, 34, 184, 255, 224, 179, 17, 0, 77, 34, 184, 255, 232, 179, 16, 0, 77, + 20, 184, 255, 224, 180, 19, 21, 0, 76, 20, 184, 255, 216, 179, 18, 0, 77, 20, 184, 255, + 208, 179, 17, 0, 77, 20, 184, 255, 224, 64, 100, 16, 0, 77, 4, 24, 22, 24, 0, 76, + 4, 24, 16, 0, 77, 88, 90, 89, 90, 156, 91, 88, 20, 91, 88, 91, 91, 35, 56, 150, + 48, 61, 150, 40, 32, 32, 40, 48, 89, 89, 0, 19, 80, 69, 3, 4, 6, 82, 150, 16, + 16, 64, 150, 22, 0, 77, 150, 6, 6, 71, 150, 0, 90, 91, 89, 88, 89, 91, 54, 152, + 35, 37, 37, 58, 32, 152, 53, 104, 58, 152, 45, 102, 19, 80, 152, 69, 3, 69, 69, 85, + 74, 152, 112, 27, 1, 27, 100, 85, 152, 11, 99, 0, 63, 237, 63, 93, 237, 18, 57, 17, + 51, 16, 233, 50, 63, 237, 63, 237, 18, 57, 47, 51, 237, 63, 51, 63, 51, 1, 47, 237, + 51, 47, 237, 16, 220, 237, 51, 47, 237, 18, 23, 57, 17, 51, 47, 47, 204, 50, 47, 16, + 237, 16, 237, 50, 51, 47, 135, 43, 135, 125, 196, 49, 48, 0, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 19, + 52, 54, 55, 38, 38, 53, 52, 62, 2, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, + 20, 14, 2, 35, 34, 46, 2, 1, 54, 54, 55, 6, 35, 34, 38, 53, 52, 62, 2, 51, + 50, 22, 21, 20, 14, 2, 35, 55, 50, 55, 38, 35, 34, 6, 21, 20, 22, 3, 52, 46, + 2, 39, 6, 21, 20, 22, 51, 50, 54, 39, 20, 22, 23, 54, 53, 52, 38, 35, 34, 6, + 19, 35, 1, 51, 19, 17, 26, 15, 19, 17, 28, 36, 19, 18, 36, 27, 17, 14, 23, 19, + 26, 19, 30, 39, 20, 21, 38, 30, 18, 1, 11, 46, 58, 13, 22, 18, 47, 45, 12, 24, + 35, 23, 55, 49, 21, 44, 67, 46, 78, 20, 24, 1, 45, 20, 21, 21, 172, 11, 19, 24, + 13, 30, 31, 17, 20, 29, 88, 31, 21, 28, 21, 22, 14, 23, 15, 70, 1, 123, 70, 1, + 187, 12, 37, 11, 9, 28, 23, 18, 26, 18, 8, 9, 18, 26, 17, 15, 28, 13, 9, 29, + 25, 19, 29, 19, 10, 8, 18, 29, 254, 131, 2, 23, 26, 11, 52, 35, 17, 33, 25, 16, + 61, 48, 31, 58, 44, 26, 140, 13, 65, 25, 14, 16, 23, 1, 56, 9, 12, 9, 7, 4, + 14, 27, 14, 12, 13, 130, 14, 15, 6, 17, 18, 10, 13, 13, 253, 198, 2, 107, 0, 2, + 0, 38, 255, 245, 1, 191, 2, 181, 0, 32, 0, 50, 0, 146, 64, 17, 49, 24, 17, 0, + 77, 45, 24, 13, 0, 77, 45, 16, 11, 12, 0, 76, 41, 184, 255, 248, 179, 16, 0, 77, + 35, 184, 255, 224, 179, 15, 0, 77, 35, 184, 255, 240, 64, 21, 13, 14, 0, 76, 32, 16, + 13, 0, 77, 32, 32, 11, 12, 0, 76, 19, 24, 17, 0, 77, 16, 184, 255, 240, 64, 14, + 14, 0, 77, 15, 24, 13, 0, 77, 14, 8, 12, 0, 77, 9, 184, 255, 216, 64, 26, 14, + 0, 77, 30, 48, 130, 12, 52, 38, 130, 22, 4, 4, 22, 51, 33, 136, 27, 27, 7, 43, + 136, 17, 104, 0, 7, 0, 47, 205, 63, 237, 17, 57, 47, 237, 1, 16, 198, 50, 47, 16, + 237, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 19, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 53, + 52, 62, 2, 51, 50, 22, 23, 38, 38, 7, 34, 14, 2, 21, 20, 30, 2, 51, 50, 62, + 2, 53, 38, 38, 190, 26, 46, 20, 12, 26, 61, 31, 72, 94, 55, 22, 22, 53, 89, 67, + 44, 67, 45, 22, 26, 53, 79, 54, 38, 58, 17, 6, 78, 24, 35, 52, 33, 16, 13, 25, + 39, 26, 42, 54, 32, 14, 26, 58, 2, 110, 11, 9, 69, 11, 11, 58, 96, 124, 66, 60, + 128, 105, 67, 36, 60, 78, 42, 44, 86, 67, 42, 23, 13, 103, 111, 248, 31, 50, 63, 31, + 27, 51, 39, 23, 52, 80, 95, 42, 25, 21, 0, 2, 0, 9, 0, 0, 1, 235, 2, 107, + 0, 11, 0, 22, 0, 71, 64, 39, 6, 18, 12, 18, 120, 11, 6, 20, 11, 11, 6, 5, + 17, 12, 17, 120, 0, 5, 20, 0, 0, 5, 12, 0, 11, 24, 0, 23, 11, 68, 12, 6, + 5, 65, 18, 17, 121, 0, 68, 0, 63, 237, 50, 63, 51, 51, 63, 1, 16, 198, 16, 206, + 17, 57, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 125, 196, 49, 48, 51, 62, 3, + 55, 51, 30, 3, 23, 3, 14, 3, 7, 33, 46, 3, 9, 23, 44, 45, 50, 30, 102, 27, + 53, 49, 42, 17, 242, 10, 33, 38, 40, 18, 1, 21, 18, 40, 38, 32, 89, 157, 149, 146, + 78, 68, 162, 165, 158, 66, 2, 35, 27, 96, 125, 149, 80, 80, 149, 125, 96, 0, 1, 0, + 58, 255, 159, 1, 186, 2, 107, 0, 7, 0, 27, 64, 11, 2, 1, 9, 5, 6, 8, 4, + 7, 89, 2, 6, 0, 47, 51, 63, 205, 1, 16, 214, 205, 16, 222, 205, 49, 48, 1, 17, + 35, 17, 35, 17, 35, 17, 1, 186, 82, 220, 82, 2, 107, 253, 52, 2, 134, 253, 122, 2, + 204, 0, 1, 0, 49, 255, 159, 1, 191, 2, 107, 0, 23, 0, 84, 64, 42, 0, 19, 0, + 3, 19, 120, 15, 10, 20, 15, 15, 10, 18, 18, 4, 25, 0, 3, 3, 120, 7, 10, 20, + 7, 7, 10, 15, 15, 7, 24, 10, 10, 0, 0, 3, 15, 19, 16, 65, 7, 3, 6, 0, + 47, 205, 50, 63, 205, 50, 17, 57, 25, 47, 51, 1, 24, 47, 16, 198, 50, 47, 135, 16, + 43, 125, 16, 196, 1, 24, 16, 206, 50, 47, 135, 16, 43, 8, 125, 16, 196, 49, 48, 1, + 6, 6, 7, 33, 21, 33, 53, 54, 54, 55, 46, 3, 39, 53, 33, 21, 33, 30, 3, 1, + 76, 56, 98, 33, 1, 46, 254, 114, 30, 99, 65, 48, 65, 44, 26, 7, 1, 138, 254, 216, + 14, 43, 50, 52, 1, 15, 83, 150, 66, 69, 59, 63, 150, 98, 73, 98, 66, 39, 14, 56, + 70, 23, 68, 76, 78, 0, 1, 0, 18, 0, 0, 1, 226, 2, 121, 0, 45, 0, 96, 185, + 0, 7, 255, 216, 179, 14, 0, 77, 7, 184, 255, 224, 64, 46, 13, 0, 77, 3, 24, 14, + 0, 77, 3, 32, 13, 0, 77, 15, 19, 19, 24, 118, 10, 16, 16, 10, 47, 41, 37, 37, + 34, 118, 0, 40, 40, 0, 46, 19, 37, 37, 15, 41, 121, 18, 39, 68, 29, 124, 5, 69, + 0, 63, 237, 63, 51, 237, 50, 50, 17, 51, 1, 16, 198, 50, 47, 16, 237, 50, 47, 51, + 16, 206, 50, 47, 16, 237, 50, 47, 51, 49, 48, 43, 43, 43, 43, 19, 52, 62, 2, 51, + 50, 30, 2, 21, 20, 14, 2, 7, 51, 21, 35, 53, 62, 3, 53, 52, 46, 2, 35, 34, + 14, 2, 21, 20, 22, 23, 21, 35, 53, 51, 46, 3, 32, 35, 60, 79, 45, 45, 79, 60, + 35, 18, 26, 32, 13, 101, 197, 24, 36, 24, 12, 16, 32, 49, 33, 33, 49, 32, 16, 42, + 54, 199, 103, 17, 31, 26, 15, 1, 76, 75, 113, 75, 38, 38, 75, 113, 75, 40, 76, 67, + 57, 22, 70, 51, 24, 65, 75, 80, 39, 45, 80, 62, 36, 37, 61, 81, 45, 78, 144, 60, + 51, 70, 25, 62, 67, 72, 0, 1, 0, 46, 0, 228, 1, 199, 1, 42, 0, 3, 0, 13, + 179, 3, 2, 0, 3, 0, 47, 205, 1, 47, 47, 49, 48, 19, 33, 21, 33, 46, 1, 153, + 254, 103, 1, 42, 70, 255, 255, 0, 25, 0, 0, 1, 218, 2, 107, 2, 6, 1, 110, 0, + 0, 255, 255, 0, 177, 0, 202, 1, 68, 1, 99, 2, 7, 0, 17, 0, 0, 0, 214, 0, + 0, 0, 1, 0, 29, 255, 243, 1, 226, 2, 187, 0, 14, 0, 46, 64, 20, 8, 7, 4, + 4, 1, 5, 6, 16, 13, 1, 0, 4, 8, 92, 5, 6, 14, 14, 13, 1, 0, 47, 205, + 50, 47, 47, 51, 63, 51, 1, 47, 221, 205, 16, 222, 205, 17, 57, 25, 47, 51, 51, 49, + 48, 19, 55, 22, 22, 23, 19, 51, 3, 35, 46, 3, 39, 7, 29, 131, 29, 43, 20, 157, + 73, 193, 74, 11, 22, 23, 27, 16, 65, 1, 57, 43, 80, 123, 62, 2, 96, 253, 56, 36, + 67, 69, 73, 42, 21, 0, 3, 0, 30, 0, 136, 1, 214, 1, 133, 0, 11, 0, 43, 0, + 55, 0, 57, 64, 27, 31, 15, 53, 3, 3, 23, 47, 39, 9, 23, 50, 34, 34, 15, 3, + 53, 31, 4, 18, 6, 28, 18, 44, 12, 12, 0, 18, 0, 47, 205, 51, 47, 205, 16, 220, + 205, 18, 23, 57, 51, 47, 205, 1, 47, 205, 47, 205, 17, 57, 47, 205, 57, 57, 49, 48, + 55, 50, 54, 55, 38, 38, 35, 34, 6, 21, 20, 22, 23, 34, 38, 39, 6, 6, 35, 34, + 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, + 39, 50, 54, 53, 52, 38, 35, 34, 6, 7, 22, 22, 152, 20, 35, 16, 15, 37, 19, 23, + 33, 33, 224, 36, 53, 14, 15, 51, 36, 16, 41, 36, 25, 25, 36, 41, 16, 36, 51, 15, + 15, 52, 36, 16, 41, 36, 24, 24, 36, 41, 19, 22, 33, 33, 22, 20, 36, 16, 15, 37, + 194, 37, 32, 31, 37, 34, 34, 35, 34, 58, 40, 23, 23, 40, 12, 29, 49, 37, 37, 48, + 29, 12, 41, 23, 23, 41, 12, 29, 48, 37, 37, 49, 29, 12, 58, 34, 35, 34, 34, 36, + 32, 32, 37, 0, 1, 0, 75, 255, 91, 1, 168, 2, 181, 0, 23, 0, 29, 64, 12, 7, + 12, 19, 23, 23, 25, 24, 20, 16, 8, 4, 90, 0, 63, 205, 47, 205, 1, 17, 18, 57, + 47, 206, 221, 206, 49, 48, 19, 52, 54, 51, 50, 50, 23, 21, 35, 34, 6, 21, 17, 20, + 6, 35, 34, 34, 39, 53, 51, 50, 54, 53, 208, 83, 88, 3, 19, 23, 39, 51, 44, 81, + 88, 5, 18, 23, 39, 51, 43, 1, 250, 90, 97, 1, 71, 62, 51, 254, 25, 89, 97, 1, + 71, 62, 51, 255, 255, 0, 37, 0, 95, 1, 207, 1, 177, 2, 54, 0, 97, 0, 96, 0, + 6, 0, 97, 0, 162, 0, 0, 0, 1, 0, 46, 0, 14, 1, 199, 1, 253, 0, 19, 0, + 66, 64, 33, 15, 12, 11, 8, 4, 7, 16, 18, 1, 2, 5, 4, 17, 6, 7, 7, 10, + 13, 16, 17, 17, 3, 0, 8, 6, 5, 11, 2, 12, 1, 16, 15, 18, 0, 47, 51, 205, + 221, 50, 222, 50, 221, 205, 51, 1, 47, 51, 51, 47, 205, 47, 51, 51, 47, 205, 17, 23, + 57, 17, 18, 23, 57, 49, 48, 55, 51, 55, 35, 53, 51, 55, 23, 7, 51, 21, 35, 7, + 51, 21, 35, 7, 39, 55, 35, 46, 136, 61, 197, 233, 59, 58, 42, 101, 137, 61, 198, 234, + 58, 59, 42, 100, 202, 119, 71, 117, 32, 85, 71, 119, 71, 117, 32, 85, 255, 255, 0, 46, + 0, 1, 1, 199, 2, 3, 2, 39, 1, 159, 0, 0, 255, 29, 0, 6, 0, 31, 253, 61, + 255, 255, 0, 46, 0, 1, 1, 199, 2, 3, 2, 39, 1, 159, 0, 0, 255, 29, 0, 6, + 0, 33, 253, 61, 0, 2, 0, 39, 255, 241, 1, 205, 2, 123, 0, 17, 0, 33, 0, 140, + 64, 26, 25, 32, 15, 0, 77, 23, 40, 15, 0, 77, 21, 40, 15, 0, 77, 15, 24, 15, + 0, 77, 12, 32, 15, 0, 77, 7, 184, 255, 224, 179, 13, 0, 77, 3, 184, 255, 224, 64, + 29, 13, 0, 77, 5, 23, 23, 31, 18, 10, 31, 28, 0, 13, 31, 31, 35, 34, 28, 18, + 10, 0, 0, 5, 31, 32, 22, 0, 77, 31, 184, 255, 208, 179, 17, 0, 77, 31, 184, 255, + 192, 64, 13, 16, 0, 77, 31, 13, 23, 48, 16, 17, 0, 76, 23, 5, 0, 47, 51, 43, + 47, 51, 43, 43, 43, 18, 57, 25, 47, 51, 51, 51, 1, 17, 18, 57, 47, 51, 221, 24, + 205, 25, 16, 221, 24, 205, 17, 51, 17, 51, 49, 48, 0, 43, 43, 43, 43, 43, 43, 43, + 19, 62, 3, 55, 30, 3, 23, 6, 6, 7, 46, 3, 37, 46, 3, 39, 14, 3, 7, 22, + 22, 23, 54, 54, 39, 30, 54, 51, 50, 26, 26, 50, 51, 54, 30, 59, 100, 52, 26, 50, + 51, 54, 1, 50, 18, 30, 30, 30, 17, 17, 31, 29, 31, 17, 34, 56, 35, 34, 56, 1, + 54, 49, 87, 79, 73, 37, 37, 73, 79, 87, 49, 98, 154, 73, 37, 73, 79, 86, 50, 31, + 54, 49, 45, 24, 24, 46, 49, 53, 31, 61, 96, 46, 46, 94, 0, 3, 0, 28, 0, 0, + 1, 204, 2, 181, 0, 3, 0, 15, 0, 38, 0, 77, 64, 42, 18, 32, 12, 0, 77, 7, + 131, 13, 1, 127, 0, 40, 32, 30, 22, 34, 127, 37, 16, 35, 39, 1, 35, 76, 23, 23, + 26, 136, 20, 77, 33, 36, 133, 16, 10, 138, 4, 2, 2, 30, 16, 73, 0, 63, 51, 51, + 16, 222, 237, 16, 237, 50, 63, 237, 50, 47, 63, 51, 1, 16, 214, 50, 206, 253, 204, 51, + 206, 16, 222, 237, 212, 237, 49, 48, 43, 33, 35, 17, 51, 39, 34, 38, 53, 52, 54, 51, + 50, 22, 21, 20, 6, 5, 53, 52, 54, 51, 50, 23, 7, 38, 38, 35, 34, 6, 21, 21, + 51, 21, 35, 17, 35, 17, 35, 53, 1, 192, 83, 83, 42, 22, 31, 31, 22, 23, 31, 31, + 254, 164, 86, 90, 47, 24, 12, 10, 23, 19, 56, 44, 123, 123, 83, 53, 1, 208, 84, 30, + 25, 25, 29, 29, 25, 25, 30, 84, 42, 90, 97, 6, 72, 4, 3, 63, 54, 41, 69, 254, + 117, 1, 139, 69, 0, 3, 0, 28, 0, 0, 1, 204, 2, 181, 0, 3, 0, 15, 0, 38, + 0, 68, 64, 36, 7, 131, 13, 1, 127, 0, 40, 32, 30, 22, 33, 127, 37, 16, 36, 39, + 1, 35, 76, 23, 23, 26, 136, 20, 77, 33, 36, 133, 30, 16, 73, 10, 138, 4, 2, 73, + 0, 63, 222, 237, 63, 51, 237, 50, 63, 237, 50, 47, 63, 51, 1, 16, 214, 50, 205, 253, + 204, 51, 205, 16, 222, 237, 212, 237, 49, 48, 33, 35, 17, 51, 39, 34, 38, 53, 52, 54, + 51, 50, 22, 21, 20, 6, 5, 53, 52, 54, 51, 50, 23, 7, 38, 38, 35, 34, 6, 21, + 21, 51, 21, 35, 17, 35, 17, 35, 53, 1, 192, 83, 83, 42, 22, 31, 31, 22, 23, 31, + 31, 254, 164, 86, 90, 47, 24, 12, 10, 23, 19, 56, 44, 123, 123, 83, 53, 1, 208, 84, + 30, 25, 25, 29, 29, 25, 25, 30, 84, 42, 90, 97, 6, 72, 4, 3, 63, 54, 41, 69, + 254, 117, 1, 139, 69, 0, 2, 0, 28, 255, 247, 1, 235, 2, 181, 0, 11, 0, 34, 0, + 68, 64, 36, 11, 11, 3, 127, 6, 36, 28, 26, 18, 29, 127, 33, 12, 32, 35, 31, 76, + 19, 19, 22, 136, 16, 77, 29, 32, 133, 26, 12, 73, 4, 5, 77, 11, 136, 0, 81, 0, + 63, 237, 63, 51, 63, 51, 237, 50, 63, 237, 50, 47, 63, 1, 16, 214, 50, 205, 253, 204, + 51, 205, 16, 220, 237, 51, 47, 49, 48, 5, 38, 38, 53, 17, 55, 17, 20, 30, 2, 23, + 1, 53, 52, 54, 51, 50, 23, 7, 38, 38, 35, 34, 6, 21, 21, 51, 21, 35, 17, 35, + 17, 35, 53, 1, 224, 68, 56, 83, 5, 12, 20, 15, 254, 102, 86, 90, 47, 24, 12, 10, + 23, 19, 56, 44, 123, 123, 83, 53, 9, 2, 62, 66, 2, 46, 14, 253, 210, 21, 26, 16, + 8, 3, 1, 147, 42, 90, 97, 6, 72, 4, 3, 63, 54, 41, 69, 254, 117, 1, 139, 69, + 0, 2, 0, 28, 255, 247, 1, 235, 2, 181, 0, 11, 0, 34, 0, 68, 64, 36, 11, 11, + 3, 127, 6, 36, 28, 26, 18, 29, 127, 33, 12, 32, 35, 31, 76, 19, 19, 22, 136, 16, + 77, 29, 32, 133, 26, 12, 73, 4, 5, 77, 11, 136, 0, 81, 0, 63, 237, 63, 51, 63, + 51, 237, 50, 63, 237, 50, 47, 63, 1, 16, 214, 50, 205, 253, 204, 51, 205, 16, 220, 237, + 51, 47, 49, 48, 5, 38, 38, 53, 17, 55, 17, 20, 30, 2, 23, 1, 53, 52, 54, 51, + 50, 23, 7, 38, 38, 35, 34, 6, 21, 21, 51, 21, 35, 17, 35, 17, 35, 53, 1, 224, + 68, 56, 83, 5, 12, 20, 15, 254, 102, 86, 90, 47, 24, 12, 10, 23, 19, 56, 44, 123, + 123, 83, 53, 9, 2, 62, 66, 2, 46, 14, 253, 210, 21, 26, 16, 8, 3, 1, 147, 42, + 90, 97, 6, 72, 4, 3, 63, 54, 41, 69, 254, 117, 1, 139, 69, 255, 255, 0, 116, 1, + 125, 1, 128, 2, 228, 2, 6, 1, 111, 0, 107, 255, 255, 0, 135, 1, 132, 1, 136, 2, + 221, 2, 6, 0, 148, 9, 107, 255, 255, 0, 124, 1, 132, 1, 120, 2, 228, 2, 6, 0, + 141, 0, 107, 255, 255, 0, 128, 1, 125, 1, 120, 2, 228, 2, 6, 0, 142, 2, 107, 255, + 255, 0, 105, 1, 132, 1, 128, 2, 221, 2, 6, 1, 112, 0, 107, 255, 255, 0, 119, 1, + 125, 1, 111, 2, 221, 2, 6, 1, 113, 248, 107, 255, 255, 0, 117, 1, 125, 1, 122, 2, + 223, 2, 6, 1, 114, 248, 107, 255, 255, 0, 126, 1, 132, 1, 125, 2, 221, 2, 6, 1, + 115, 248, 107, 255, 255, 0, 119, 1, 125, 1, 125, 2, 228, 2, 6, 1, 116, 0, 107, 255, + 255, 0, 124, 1, 131, 1, 129, 2, 228, 2, 6, 1, 117, 248, 107, 255, 255, 0, 116, 255, + 96, 1, 128, 0, 199, 2, 7, 1, 111, 0, 0, 254, 78, 0, 0, 255, 255, 0, 135, 255, + 103, 1, 136, 0, 192, 2, 7, 0, 148, 0, 9, 254, 78, 0, 0, 255, 255, 0, 124, 255, + 103, 1, 120, 0, 199, 2, 7, 0, 141, 0, 0, 254, 78, 0, 0, 255, 255, 0, 128, 255, + 96, 1, 120, 0, 199, 2, 7, 0, 142, 0, 2, 254, 78, 0, 0, 255, 255, 0, 105, 255, + 103, 1, 128, 0, 192, 2, 7, 1, 112, 0, 0, 254, 78, 0, 0, 255, 255, 0, 119, 255, + 96, 1, 111, 0, 192, 2, 7, 1, 113, 255, 248, 254, 78, 0, 0, 255, 255, 0, 117, 255, + 96, 1, 122, 0, 194, 2, 7, 1, 114, 255, 248, 254, 78, 0, 0, 255, 255, 0, 126, 255, + 103, 1, 125, 0, 192, 2, 7, 1, 115, 255, 248, 254, 78, 0, 0, 255, 255, 0, 119, 255, + 96, 1, 125, 0, 199, 2, 7, 1, 116, 0, 0, 254, 78, 0, 0, 255, 255, 0, 124, 255, + 102, 1, 129, 0, 199, 2, 7, 1, 117, 255, 248, 254, 78, 0, 0, 0, 1, 0, 210, 1, + 238, 1, 33, 2, 181, 0, 3, 0, 17, 181, 0, 64, 3, 3, 128, 2, 0, 47, 26, 205, + 1, 47, 26, 205, 49, 48, 1, 7, 35, 53, 1, 33, 24, 55, 2, 181, 199, 199, 0, 1, + 0, 171, 255, 86, 1, 64, 255, 211, 0, 14, 0, 19, 182, 10, 1, 0, 7, 10, 0, 15, + 0, 16, 222, 222, 205, 1, 47, 205, 206, 49, 48, 23, 51, 22, 22, 21, 20, 6, 35, 34, + 39, 53, 51, 50, 54, 53, 238, 80, 1, 1, 61, 46, 20, 22, 15, 33, 19, 45, 5, 11, + 4, 57, 48, 6, 48, 29, 29, 0, 1, 0, 185, 2, 32, 1, 59, 2, 185, 0, 15, 0, + 17, 181, 10, 15, 4, 9, 10, 0, 0, 47, 222, 205, 1, 47, 221, 206, 49, 48, 1, 35, + 38, 52, 53, 52, 62, 2, 55, 23, 14, 3, 21, 1, 9, 79, 1, 18, 29, 36, 18, 29, + 11, 18, 14, 7, 2, 32, 5, 11, 3, 32, 47, 32, 19, 4, 40, 8, 16, 22, 32, 24, + 0, 1, 0, 210, 2, 8, 1, 33, 2, 181, 0, 3, 0, 17, 181, 0, 64, 3, 3, 128, + 2, 0, 47, 26, 205, 1, 47, 26, 205, 49, 48, 1, 7, 35, 53, 1, 33, 24, 55, 2, + 181, 173, 173, 255, 255, 0, 113, 255, 131, 1, 130, 2, 231, 2, 6, 0, 11, 0, 42, 255, + 255, 0, 113, 255, 131, 1, 130, 2, 231, 2, 6, 0, 12, 0, 42, 255, 255, 0, 140, 1, + 13, 1, 104, 1, 91, 2, 6, 0, 16, 0, 54, 255, 255, 0, 69, 255, 133, 1, 175, 2, + 229, 2, 6, 0, 18, 0, 42, 255, 255, 0, 40, 255, 181, 1, 212, 2, 181, 2, 6, 0, + 35, 0, 60, 255, 255, 0, 143, 255, 133, 1, 126, 2, 229, 2, 6, 0, 62, 0, 42, 255, + 255, 0, 70, 255, 133, 1, 174, 2, 229, 2, 6, 0, 63, 0, 42, 255, 255, 0, 118, 255, + 133, 1, 101, 2, 229, 2, 6, 0, 64, 0, 42, 255, 255, 0, 79, 255, 133, 1, 171, 2, + 229, 2, 6, 0, 94, 0, 42, 255, 255, 0, 73, 255, 133, 1, 165, 2, 229, 2, 6, 0, + 96, 0, 42, 255, 255, 0, 144, 0, 111, 1, 85, 1, 250, 2, 6, 0, 108, 0, 55, 255, + 255, 0, 114, 0, 196, 1, 130, 1, 226, 2, 6, 0, 114, 0, 23, 255, 255, 0, 69, 1, + 18, 1, 175, 1, 88, 2, 6, 0, 115, 0, 38, 255, 255, 0, 0, 1, 18, 1, 244, 1, + 88, 2, 6, 0, 116, 0, 38, 255, 255, 0, 159, 0, 111, 1, 100, 1, 250, 2, 6, 0, + 120, 0, 55, 255, 255, 0, 182, 255, 250, 1, 60, 2, 112, 2, 7, 0, 124, 0, 0, 0, + 159, 0, 0, 255, 255, 0, 63, 0, 133, 1, 157, 1, 228, 2, 6, 0, 134, 0, 54, 255, + 255, 0, 85, 0, 133, 1, 181, 1, 228, 2, 6, 0, 150, 0, 54, 255, 255, 0, 92, 255, + 248, 1, 154, 2, 115, 2, 7, 0, 154, 0, 0, 0, 162, 0, 0, 0, 2, 0, 20, 255, + 245, 1, 204, 2, 181, 0, 26, 0, 41, 0, 153, 64, 28, 36, 24, 16, 0, 77, 36, 32, + 15, 0, 77, 36, 24, 14, 0, 77, 31, 40, 15, 16, 0, 76, 31, 24, 13, 14, 0, 76, + 14, 184, 255, 224, 180, 8, 10, 0, 76, 10, 184, 255, 224, 179, 10, 0, 77, 10, 184, 255, + 224, 179, 8, 0, 77, 9, 184, 255, 208, 64, 50, 9, 0, 77, 33, 130, 12, 43, 41, 2, + 0, 3, 127, 24, 22, 0, 21, 1, 21, 42, 3, 21, 0, 24, 24, 7, 25, 26, 77, 27, + 30, 136, 20, 17, 81, 41, 38, 136, 4, 0, 7, 16, 7, 32, 7, 64, 7, 4, 8, 7, + 80, 0, 63, 94, 93, 51, 237, 50, 63, 51, 237, 50, 63, 51, 18, 57, 47, 51, 205, 50, + 1, 16, 214, 93, 205, 51, 253, 50, 205, 51, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 19, 51, 21, 35, 21, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, + 34, 38, 39, 17, 35, 53, 51, 53, 55, 17, 22, 22, 51, 50, 54, 53, 52, 46, 2, 35, + 34, 6, 7, 168, 162, 162, 15, 54, 34, 45, 70, 48, 26, 30, 56, 78, 48, 54, 82, 26, + 66, 66, 82, 18, 36, 16, 64, 73, 13, 27, 44, 30, 28, 51, 14, 2, 98, 62, 101, 9, + 19, 36, 64, 89, 54, 56, 90, 63, 34, 16, 8, 2, 23, 62, 69, 14, 253, 147, 5, 5, + 85, 85, 36, 63, 45, 26, 23, 13, 0, 3, 0, 18, 255, 251, 1, 226, 2, 113, 0, 34, + 0, 49, 0, 62, 0, 199, 64, 47, 58, 56, 18, 0, 77, 58, 40, 17, 0, 77, 54, 40, + 18, 0, 77, 54, 48, 17, 0, 77, 47, 64, 18, 0, 77, 46, 48, 17, 0, 77, 46, 24, + 16, 0, 77, 41, 48, 17, 18, 0, 76, 41, 16, 16, 0, 77, 34, 184, 255, 232, 179, 9, + 0, 77, 33, 184, 255, 232, 180, 10, 12, 0, 76, 24, 184, 255, 232, 179, 12, 0, 77, 24, + 184, 255, 240, 179, 11, 0, 77, 24, 184, 255, 224, 179, 10, 0, 77, 24, 184, 255, 232, 64, + 55, 9, 0, 77, 17, 16, 12, 0, 77, 17, 24, 11, 0, 77, 29, 56, 118, 26, 26, 44, + 118, 32, 64, 35, 62, 115, 0, 6, 32, 6, 2, 8, 6, 9, 0, 15, 1, 15, 63, 12, + 12, 6, 59, 121, 20, 29, 35, 121, 50, 50, 20, 65, 39, 124, 0, 67, 0, 63, 237, 63, + 57, 47, 237, 57, 16, 237, 50, 50, 47, 1, 16, 214, 93, 221, 222, 94, 93, 237, 50, 16, + 222, 237, 51, 47, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 5, 34, 46, 2, 39, 17, 6, 6, 21, 20, 23, 7, 38, 38, 53, + 52, 62, 2, 51, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 6, 3, 21, 22, + 22, 51, 50, 62, 2, 53, 52, 46, 2, 35, 39, 51, 50, 62, 2, 53, 52, 38, 35, 34, + 6, 7, 1, 31, 14, 33, 35, 33, 13, 38, 33, 4, 67, 2, 5, 44, 72, 90, 47, 15, + 36, 61, 45, 26, 45, 38, 51, 60, 91, 150, 11, 25, 11, 22, 41, 31, 18, 21, 35, 45, + 24, 34, 24, 18, 38, 30, 20, 46, 44, 9, 20, 11, 5, 2, 3, 6, 4, 2, 24, 5, + 32, 29, 16, 17, 8, 6, 25, 13, 50, 57, 28, 7, 16, 38, 62, 46, 44, 74, 14, 14, + 76, 60, 93, 93, 1, 38, 221, 2, 2, 10, 26, 45, 35, 32, 42, 25, 10, 68, 8, 23, + 38, 30, 54, 45, 1, 2, 0, 2, 0, 54, 255, 251, 1, 195, 2, 107, 0, 16, 0, 31, + 0, 121, 64, 22, 24, 32, 16, 0, 77, 24, 24, 15, 0, 77, 20, 32, 15, 16, 0, 76, + 19, 24, 14, 0, 77, 8, 184, 255, 232, 179, 10, 0, 77, 8, 184, 255, 224, 179, 8, 0, + 77, 5, 184, 255, 232, 180, 17, 18, 0, 76, 5, 184, 255, 224, 179, 10, 0, 77, 5, 184, + 255, 232, 64, 28, 8, 0, 77, 22, 118, 7, 16, 16, 7, 33, 1, 29, 115, 13, 32, 28, + 121, 1, 1, 17, 0, 121, 14, 65, 17, 124, 10, 67, 0, 63, 237, 63, 237, 18, 57, 47, + 237, 1, 16, 214, 237, 50, 16, 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 19, 21, 51, 50, 30, 2, 21, 20, 6, 35, 34, 38, 39, 17, 33, 21, 3, + 50, 62, 2, 53, 52, 46, 2, 35, 35, 21, 22, 22, 136, 66, 59, 93, 64, 33, 127, 119, + 35, 83, 33, 1, 86, 187, 34, 58, 43, 25, 24, 45, 63, 39, 62, 26, 29, 2, 37, 166, + 20, 45, 74, 53, 99, 97, 6, 9, 2, 97, 70, 254, 27, 13, 29, 48, 36, 37, 49, 28, + 12, 248, 3, 1, 0, 2, 0, 71, 255, 245, 1, 204, 2, 177, 0, 20, 0, 35, 0, 137, + 64, 42, 30, 24, 16, 0, 77, 30, 40, 15, 0, 77, 30, 24, 14, 0, 77, 25, 48, 15, + 16, 0, 76, 25, 40, 14, 0, 77, 25, 16, 13, 0, 77, 11, 24, 16, 0, 77, 11, 16, + 15, 0, 77, 6, 184, 255, 240, 179, 10, 0, 77, 6, 184, 255, 224, 179, 9, 0, 77, 6, + 184, 255, 232, 64, 35, 8, 0, 77, 27, 130, 9, 20, 20, 9, 37, 1, 21, 127, 0, 17, + 1, 8, 17, 36, 0, 133, 18, 77, 21, 24, 136, 17, 14, 81, 35, 32, 136, 1, 4, 80, + 0, 63, 51, 237, 50, 63, 51, 237, 50, 63, 237, 1, 16, 214, 94, 93, 237, 50, 16, 206, + 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 21, 54, + 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 17, 33, 21, 1, 22, 22, 51, + 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 154, 15, 57, 35, 47, 74, 51, 27, 32, 58, + 82, 50, 55, 86, 26, 1, 83, 255, 0, 19, 38, 17, 69, 78, 14, 30, 47, 33, 29, 54, + 14, 2, 107, 172, 9, 19, 36, 64, 89, 54, 56, 90, 63, 34, 16, 8, 2, 164, 70, 253, + 221, 5, 5, 85, 85, 36, 63, 45, 26, 23, 13, 0, 2, 0, 11, 255, 245, 1, 204, 2, + 181, 0, 21, 0, 35, 0, 131, 64, 21, 30, 32, 14, 0, 77, 30, 16, 13, 0, 77, 25, + 32, 14, 0, 77, 25, 24, 13, 0, 77, 10, 184, 255, 224, 179, 8, 0, 77, 9, 184, 255, + 224, 179, 16, 0, 77, 9, 184, 255, 232, 179, 15, 0, 77, 9, 184, 255, 240, 179, 10, 0, + 77, 9, 184, 255, 232, 64, 34, 9, 0, 77, 27, 130, 12, 37, 3, 22, 127, 0, 0, 20, + 1, 8, 20, 36, 22, 24, 136, 20, 17, 81, 35, 32, 136, 4, 7, 80, 0, 0, 21, 3, + 77, 0, 63, 205, 57, 25, 47, 24, 63, 51, 237, 50, 63, 51, 237, 50, 1, 16, 214, 94, + 93, 206, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 54, + 54, 55, 21, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 17, 19, 22, + 51, 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 11, 32, 74, 39, 16, 54, 35, 47, 74, + 51, 27, 32, 58, 82, 50, 55, 83, 26, 82, 37, 35, 69, 78, 14, 30, 47, 33, 29, 52, + 14, 2, 120, 19, 32, 10, 246, 9, 19, 36, 64, 89, 54, 56, 90, 63, 34, 16, 8, 2, + 38, 254, 21, 10, 85, 85, 36, 63, 45, 26, 23, 13, 0, 2, 0, 9, 255, 251, 1, 195, + 2, 113, 0, 16, 0, 33, 0, 150, 185, 0, 24, 255, 240, 179, 16, 0, 77, 23, 184, 255, + 216, 179, 16, 0, 77, 23, 184, 255, 208, 179, 15, 0, 77, 23, 184, 255, 224, 180, 8, 10, + 0, 76, 21, 184, 255, 216, 179, 16, 0, 77, 21, 184, 255, 224, 179, 15, 0, 77, 21, 184, + 255, 216, 179, 10, 0, 77, 21, 184, 255, 232, 179, 9, 0, 77, 21, 184, 255, 216, 64, 41, + 8, 0, 77, 14, 24, 14, 0, 77, 3, 24, 14, 0, 77, 0, 118, 22, 35, 17, 9, 115, + 30, 0, 28, 1, 8, 28, 34, 30, 30, 29, 33, 8, 124, 17, 17, 33, 65, 12, 124, 25, + 67, 0, 63, 237, 63, 57, 47, 237, 16, 205, 57, 25, 47, 1, 24, 16, 214, 94, 93, 206, + 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 52, + 46, 2, 35, 34, 34, 7, 17, 22, 22, 51, 50, 62, 2, 39, 54, 50, 51, 50, 21, 20, + 6, 35, 34, 38, 39, 17, 39, 54, 54, 55, 1, 113, 25, 42, 57, 32, 13, 33, 13, 19, + 39, 16, 26, 50, 40, 25, 215, 11, 36, 14, 236, 121, 109, 34, 83, 33, 62, 32, 71, 42, + 194, 40, 52, 31, 13, 2, 254, 252, 3, 1, 13, 30, 50, 237, 2, 202, 100, 99, 6, 9, + 1, 230, 67, 19, 32, 11, 0, 1, 0, 42, 255, 243, 1, 198, 2, 121, 0, 31, 0, 129, + 64, 17, 30, 40, 18, 0, 77, 30, 32, 17, 0, 77, 30, 24, 15, 16, 0, 76, 26, 184, + 255, 232, 179, 13, 0, 77, 20, 184, 255, 232, 64, 65, 13, 14, 0, 76, 15, 40, 16, 0, + 77, 14, 40, 18, 0, 77, 14, 24, 17, 0, 77, 8, 8, 12, 0, 77, 8, 40, 11, 0, + 77, 4, 16, 17, 18, 0, 76, 4, 24, 12, 0, 77, 4, 40, 11, 0, 77, 6, 118, 23, + 33, 13, 13, 31, 32, 0, 0, 3, 124, 28, 70, 12, 12, 9, 124, 18, 69, 0, 63, 237, + 50, 47, 63, 237, 50, 47, 1, 16, 198, 50, 47, 16, 222, 237, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, 34, + 6, 7, 39, 62, 3, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 63, 35, 62, + 29, 83, 98, 89, 88, 29, 64, 35, 21, 15, 41, 44, 44, 18, 53, 91, 66, 38, 40, 69, + 93, 53, 45, 77, 35, 94, 19, 15, 122, 128, 120, 130, 13, 20, 65, 10, 16, 10, 5, 38, + 79, 122, 84, 83, 122, 79, 39, 19, 20, 0, 1, 0, 46, 255, 243, 1, 235, 2, 190, 0, + 46, 0, 150, 64, 11, 22, 24, 14, 0, 77, 22, 32, 13, 0, 77, 18, 184, 255, 224, 180, + 17, 18, 0, 76, 18, 184, 255, 208, 179, 16, 0, 77, 18, 184, 255, 192, 179, 15, 0, 77, + 11, 184, 255, 232, 180, 17, 18, 0, 76, 11, 184, 255, 232, 180, 11, 12, 0, 76, 5, 184, + 255, 232, 179, 18, 0, 77, 5, 184, 255, 240, 179, 17, 0, 77, 5, 184, 255, 232, 180, 11, + 12, 0, 76, 5, 184, 255, 240, 64, 29, 9, 10, 0, 76, 32, 0, 0, 38, 17, 48, 8, + 118, 25, 47, 42, 35, 30, 0, 0, 3, 124, 30, 69, 16, 16, 13, 124, 20, 70, 0, 63, + 237, 50, 47, 63, 237, 50, 47, 16, 220, 205, 1, 16, 214, 237, 16, 222, 206, 51, 47, 51, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 38, 38, 35, 34, 14, 2, + 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, + 50, 23, 54, 54, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 1, 132, 28, 47, 23, + 36, 59, 42, 23, 24, 42, 58, 35, 26, 58, 30, 21, 32, 71, 41, 50, 86, 63, 35, 39, + 65, 85, 45, 36, 29, 13, 46, 42, 10, 27, 8, 13, 5, 18, 5, 15, 19, 14, 10, 2, + 18, 16, 14, 37, 66, 92, 55, 64, 94, 62, 30, 15, 19, 68, 20, 19, 39, 79, 122, 83, + 76, 120, 83, 44, 11, 49, 31, 6, 5, 61, 3, 4, 19, 31, 38, 0, 1, 0, 49, 255, + 245, 1, 230, 2, 50, 0, 49, 0, 74, 181, 24, 48, 14, 0, 77, 11, 184, 255, 232, 179, + 13, 0, 77, 6, 184, 255, 224, 64, 28, 13, 0, 77, 35, 0, 0, 41, 17, 51, 8, 130, + 27, 50, 45, 38, 0, 5, 136, 32, 80, 16, 16, 13, 136, 22, 81, 1, 73, 0, 63, 63, + 237, 50, 47, 63, 237, 50, 220, 205, 1, 16, 214, 237, 16, 222, 206, 51, 47, 51, 49, 48, + 43, 43, 43, 1, 46, 3, 35, 34, 6, 21, 20, 30, 2, 51, 50, 54, 55, 23, 14, 3, + 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 54, 54, 51, 50, 22, 23, 7, 38, + 38, 35, 34, 14, 2, 1, 130, 5, 22, 27, 31, 15, 73, 79, 18, 39, 60, 43, 33, 55, + 16, 12, 7, 27, 35, 40, 18, 58, 87, 59, 30, 32, 60, 84, 53, 14, 28, 14, 10, 50, + 45, 11, 27, 9, 14, 7, 16, 6, 18, 20, 11, 5, 1, 128, 1, 7, 6, 5, 87, 85, + 38, 62, 44, 24, 11, 8, 69, 5, 8, 7, 4, 36, 64, 89, 53, 53, 90, 65, 37, 3, + 2, 52, 39, 6, 5, 60, 3, 3, 20, 31, 41, 255, 255, 0, 18, 255, 251, 1, 204, 2, + 113, 2, 6, 0, 171, 0, 0, 0, 2, 0, 18, 255, 251, 1, 228, 2, 113, 0, 27, 0, + 42, 0, 109, 64, 77, 38, 72, 14, 0, 77, 38, 32, 13, 0, 77, 37, 24, 18, 0, 77, + 37, 16, 17, 0, 77, 34, 16, 17, 18, 0, 76, 33, 24, 14, 0, 77, 33, 16, 13, 0, + 77, 7, 24, 14, 0, 77, 3, 24, 14, 0, 77, 36, 118, 5, 44, 41, 115, 0, 14, 16, + 14, 32, 14, 3, 14, 17, 0, 23, 1, 8, 23, 43, 31, 124, 10, 67, 20, 14, 41, 121, + 0, 65, 0, 63, 253, 50, 204, 63, 237, 1, 16, 214, 94, 93, 213, 214, 93, 237, 16, 222, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 50, 30, 2, 21, 20, 14, 2, + 35, 34, 38, 39, 17, 6, 6, 21, 20, 23, 7, 38, 38, 53, 52, 62, 2, 19, 22, 22, + 51, 50, 62, 2, 53, 52, 38, 35, 34, 6, 7, 1, 8, 47, 80, 59, 34, 34, 59, 80, + 47, 26, 57, 22, 38, 33, 4, 67, 2, 5, 51, 75, 85, 12, 8, 16, 6, 31, 48, 33, + 17, 66, 65, 8, 16, 4, 2, 113, 34, 76, 120, 85, 86, 120, 75, 34, 9, 6, 2, 24, + 5, 32, 29, 16, 17, 8, 6, 25, 13, 53, 57, 27, 5, 253, 212, 2, 1, 27, 59, 93, + 65, 126, 118, 2, 1, 0, 2, 0, 49, 255, 251, 1, 191, 2, 107, 0, 16, 0, 31, 0, + 127, 185, 0, 30, 255, 216, 179, 16, 0, 77, 29, 184, 255, 224, 179, 15, 0, 77, 29, 184, + 255, 232, 179, 14, 0, 77, 25, 184, 255, 232, 179, 16, 0, 77, 25, 184, 255, 216, 179, 15, + 0, 77, 25, 184, 255, 248, 64, 48, 14, 0, 77, 11, 16, 18, 0, 77, 11, 24, 17, 0, + 77, 11, 32, 8, 0, 77, 7, 32, 8, 0, 77, 15, 20, 115, 3, 33, 27, 118, 9, 0, + 0, 9, 32, 21, 121, 15, 15, 1, 17, 124, 6, 67, 0, 121, 1, 65, 0, 63, 237, 63, + 237, 17, 57, 47, 237, 1, 16, 198, 50, 47, 16, 237, 16, 222, 237, 50, 49, 48, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 19, 53, 33, 17, 6, 6, 35, 34, 38, 53, 52, 62, + 2, 51, 51, 53, 3, 50, 54, 55, 53, 35, 34, 14, 2, 21, 20, 30, 2, 104, 1, 87, + 34, 83, 35, 119, 127, 33, 64, 93, 59, 66, 73, 18, 29, 26, 62, 39, 63, 45, 24, 25, + 43, 58, 2, 37, 70, 253, 159, 9, 6, 97, 99, 53, 74, 45, 20, 166, 254, 27, 2, 2, + 248, 12, 28, 49, 37, 36, 48, 29, 13, 0, 2, 0, 40, 255, 245, 1, 173, 2, 177, 0, + 20, 0, 35, 0, 95, 185, 0, 31, 255, 232, 180, 13, 14, 0, 76, 31, 184, 255, 240, 179, + 12, 0, 77, 26, 184, 255, 240, 64, 42, 14, 0, 77, 15, 24, 15, 16, 0, 76, 14, 32, + 8, 0, 77, 20, 35, 127, 4, 37, 29, 130, 12, 1, 1, 12, 36, 21, 24, 136, 20, 17, + 80, 35, 32, 136, 4, 7, 81, 1, 133, 2, 77, 0, 63, 237, 63, 51, 237, 50, 63, 51, + 237, 50, 1, 16, 198, 50, 47, 16, 237, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, + 1, 35, 53, 33, 17, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 21, + 38, 38, 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 1, 90, 254, 1, 81, 27, 84, + 56, 50, 82, 58, 32, 27, 52, 73, 47, 37, 56, 14, 14, 54, 29, 33, 47, 30, 14, 76, + 61, 31, 43, 10, 2, 107, 70, 253, 92, 8, 16, 34, 63, 90, 56, 54, 89, 64, 36, 18, + 10, 81, 13, 23, 26, 45, 63, 36, 81, 88, 6, 3, 0, 2, 0, 39, 255, 91, 1, 204, + 1, 219, 0, 40, 0, 60, 0, 225, 185, 0, 58, 255, 232, 64, 30, 15, 16, 0, 76, 54, + 24, 16, 0, 77, 54, 16, 15, 0, 77, 48, 40, 18, 0, 77, 48, 32, 17, 0, 77, 48, + 16, 15, 0, 77, 44, 184, 255, 224, 180, 17, 18, 0, 76, 44, 184, 255, 232, 179, 15, 0, + 77, 39, 184, 255, 224, 64, 25, 9, 0, 77, 33, 32, 9, 0, 77, 29, 16, 11, 0, 77, + 28, 24, 9, 0, 77, 25, 24, 17, 18, 0, 76, 9, 184, 255, 232, 180, 15, 16, 0, 76, + 9, 184, 255, 224, 180, 13, 14, 0, 76, 9, 184, 255, 232, 179, 12, 0, 77, 9, 184, 255, + 224, 180, 10, 11, 0, 76, 7, 184, 255, 224, 179, 16, 0, 77, 6, 184, 255, 224, 180, 14, + 15, 0, 76, 3, 184, 255, 240, 64, 35, 11, 0, 77, 46, 5, 41, 23, 130, 8, 8, 51, + 130, 0, 62, 41, 130, 31, 14, 14, 31, 61, 46, 5, 5, 18, 56, 136, 36, 80, 15, 15, + 18, 137, 11, 75, 0, 63, 237, 50, 47, 63, 237, 18, 57, 17, 51, 1, 16, 198, 50, 47, + 16, 237, 16, 222, 237, 51, 47, 237, 18, 57, 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 14, 2, 7, 22, 22, + 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 62, 2, 53, 52, 38, 39, 46, 3, + 53, 52, 62, 2, 51, 50, 30, 2, 5, 20, 30, 2, 23, 62, 3, 53, 52, 46, 2, 35, + 34, 14, 2, 1, 204, 16, 35, 56, 40, 31, 41, 90, 78, 44, 79, 17, 15, 9, 68, 44, + 12, 32, 27, 19, 45, 41, 35, 64, 50, 29, 23, 50, 80, 58, 55, 79, 51, 25, 254, 177, + 20, 33, 43, 23, 38, 50, 30, 12, 13, 29, 48, 35, 32, 47, 30, 15, 1, 7, 32, 63, + 57, 49, 16, 19, 50, 38, 53, 51, 16, 6, 68, 5, 19, 2, 7, 13, 11, 24, 39, 26, + 23, 45, 56, 73, 50, 37, 73, 59, 36, 34, 57, 78, 41, 36, 55, 42, 32, 13, 12, 38, + 46, 52, 26, 28, 51, 39, 23, 21, 38, 50, 0, 1, 0, 40, 0, 0, 1, 153, 2, 107, + 0, 11, 0, 50, 64, 25, 6, 6, 2, 115, 11, 13, 8, 8, 4, 4, 1, 12, 3, 121, + 6, 6, 10, 2, 121, 11, 68, 7, 121, 10, 65, 0, 63, 237, 63, 237, 17, 57, 47, 237, + 1, 16, 198, 50, 47, 50, 47, 16, 222, 237, 50, 47, 49, 48, 51, 53, 33, 53, 35, 53, + 51, 53, 33, 53, 33, 17, 40, 1, 31, 232, 232, 254, 248, 1, 90, 70, 219, 70, 190, 70, + 253, 149, 0, 2, 0, 25, 255, 243, 1, 216, 2, 121, 0, 29, 0, 38, 0, 162, 64, 22, + 35, 24, 17, 18, 0, 76, 35, 40, 13, 0, 77, 35, 16, 12, 0, 77, 35, 8, 11, 0, + 77, 32, 184, 255, 232, 64, 92, 13, 0, 77, 24, 24, 14, 0, 77, 24, 16, 8, 0, 77, + 21, 24, 13, 0, 77, 20, 16, 13, 0, 77, 16, 32, 13, 0, 77, 10, 24, 18, 0, 77, + 10, 32, 17, 0, 77, 10, 24, 15, 16, 0, 76, 1, 24, 17, 18, 0, 76, 1, 40, 16, + 0, 77, 1, 64, 13, 0, 77, 1, 32, 11, 0, 77, 38, 0, 118, 18, 40, 30, 118, 26, + 8, 8, 26, 39, 0, 121, 38, 38, 2, 33, 124, 23, 70, 7, 7, 2, 124, 13, 69, 0, + 63, 237, 50, 47, 63, 237, 18, 57, 47, 237, 1, 16, 198, 50, 47, 16, 237, 16, 222, 237, + 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 1, 38, 35, 34, 14, 2, 7, 39, 62, 3, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, + 38, 53, 52, 54, 55, 23, 6, 22, 51, 50, 62, 2, 55, 1, 132, 12, 172, 19, 35, 31, + 24, 7, 21, 5, 28, 40, 48, 25, 66, 97, 65, 31, 36, 63, 85, 49, 102, 112, 2, 1, + 80, 1, 73, 61, 34, 53, 36, 20, 2, 1, 74, 233, 8, 12, 12, 4, 65, 5, 14, 13, + 9, 48, 86, 117, 69, 82, 122, 81, 41, 154, 155, 8, 21, 5, 69, 100, 105, 37, 59, 73, + 36, 0, 1, 0, 40, 255, 244, 1, 212, 2, 118, 0, 54, 0, 186, 185, 0, 50, 255, 240, + 180, 14, 16, 0, 76, 40, 184, 255, 208, 179, 18, 0, 77, 40, 184, 255, 232, 64, 56, 17, + 0, 77, 34, 24, 18, 0, 77, 34, 16, 17, 0, 77, 33, 32, 18, 0, 77, 33, 24, 17, + 0, 77, 33, 32, 8, 10, 0, 76, 29, 24, 17, 18, 0, 76, 25, 32, 17, 0, 77, 21, + 64, 18, 0, 77, 21, 40, 17, 0, 77, 21, 24, 8, 0, 77, 15, 184, 255, 232, 180, 13, + 14, 0, 76, 8, 184, 255, 232, 179, 16, 0, 77, 4, 184, 255, 240, 64, 37, 16, 0, 77, + 41, 41, 0, 0, 13, 56, 28, 48, 118, 31, 31, 6, 118, 23, 55, 28, 0, 121, 54, 54, + 9, 36, 42, 42, 45, 124, 36, 69, 12, 12, 9, 124, 18, 70, 0, 63, 237, 50, 47, 63, + 237, 50, 47, 17, 18, 57, 47, 237, 57, 1, 16, 214, 237, 51, 47, 237, 50, 16, 206, 50, + 47, 50, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 1, 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 23, 14, 3, 35, 34, 46, 2, + 53, 52, 62, 2, 55, 38, 38, 53, 52, 62, 2, 51, 50, 30, 2, 23, 7, 38, 38, 35, + 34, 6, 21, 20, 30, 2, 51, 51, 1, 108, 42, 41, 73, 54, 32, 87, 71, 57, 84, 22, + 25, 11, 36, 48, 59, 34, 54, 89, 63, 34, 22, 38, 50, 27, 54, 55, 30, 54, 75, 44, + 28, 53, 46, 36, 12, 27, 20, 80, 48, 54, 67, 34, 53, 64, 30, 33, 1, 36, 10, 26, + 47, 36, 62, 53, 29, 11, 66, 5, 15, 14, 10, 20, 44, 69, 50, 36, 54, 40, 26, 7, + 17, 76, 43, 41, 61, 39, 19, 6, 10, 14, 7, 65, 11, 21, 51, 41, 32, 41, 24, 9, + 0, 1, 0, 3, 255, 89, 1, 195, 2, 107, 0, 23, 0, 45, 64, 22, 21, 21, 18, 25, + 20, 0, 115, 8, 15, 24, 23, 121, 20, 20, 24, 19, 121, 16, 65, 12, 124, 5, 0, 47, + 237, 63, 237, 18, 57, 47, 237, 1, 16, 214, 204, 237, 50, 16, 206, 50, 47, 49, 48, 51, + 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, 33, 21, 33, 21, 51, + 21, 35, 182, 11, 29, 49, 39, 13, 28, 10, 8, 9, 17, 8, 32, 23, 1, 95, 254, 243, + 237, 237, 39, 62, 43, 23, 3, 2, 66, 2, 1, 43, 41, 2, 122, 70, 193, 69, 0, 1, + 0, 46, 255, 243, 1, 235, 2, 190, 0, 47, 0, 166, 181, 28, 16, 8, 0, 77, 27, 184, + 255, 232, 179, 14, 0, 77, 27, 184, 255, 248, 179, 13, 0, 77, 24, 184, 255, 232, 179, 13, + 0, 77, 23, 184, 255, 208, 179, 14, 0, 77, 11, 184, 255, 232, 180, 17, 18, 0, 76, 11, + 184, 255, 216, 179, 14, 0, 77, 11, 184, 255, 224, 179, 13, 0, 77, 5, 184, 255, 240, 179, + 18, 0, 77, 5, 184, 255, 232, 179, 17, 0, 77, 5, 184, 255, 216, 179, 14, 0, 77, 5, + 184, 255, 224, 64, 33, 13, 0, 77, 39, 33, 0, 0, 17, 115, 18, 49, 8, 118, 25, 48, + 43, 36, 30, 17, 17, 13, 0, 3, 124, 33, 30, 69, 16, 13, 124, 19, 22, 70, 0, 63, + 51, 237, 50, 63, 51, 237, 50, 18, 57, 47, 16, 220, 205, 1, 16, 214, 237, 16, 222, 237, + 51, 47, 51, 204, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 38, + 38, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, 53, 51, 17, 6, 6, 35, 34, + 38, 53, 52, 62, 2, 51, 50, 22, 23, 54, 54, 51, 50, 22, 23, 7, 38, 38, 35, 34, + 14, 2, 1, 132, 26, 48, 22, 41, 60, 41, 20, 20, 42, 66, 46, 29, 32, 8, 82, 19, + 84, 57, 120, 129, 41, 67, 86, 44, 16, 31, 14, 13, 46, 42, 10, 27, 8, 13, 5, 18, + 5, 15, 19, 14, 10, 2, 18, 16, 14, 41, 69, 91, 49, 56, 92, 66, 37, 8, 4, 234, + 254, 222, 7, 21, 168, 155, 81, 121, 81, 40, 5, 6, 49, 31, 6, 5, 61, 3, 4, 19, + 31, 38, 0, 2, 0, 13, 255, 92, 1, 232, 2, 107, 0, 37, 0, 51, 1, 53, 64, 16, + 51, 16, 17, 0, 77, 34, 24, 18, 0, 77, 34, 24, 14, 0, 77, 30, 184, 255, 232, 64, + 45, 14, 0, 77, 22, 32, 18, 0, 77, 22, 48, 17, 0, 77, 17, 32, 11, 0, 77, 17, + 40, 10, 0, 77, 16, 24, 16, 0, 77, 16, 16, 15, 0, 77, 16, 24, 13, 14, 0, 76, + 16, 32, 12, 0, 77, 12, 184, 255, 232, 179, 16, 0, 77, 12, 184, 255, 240, 179, 15, 0, + 77, 12, 184, 255, 232, 180, 13, 14, 0, 76, 12, 184, 255, 224, 179, 12, 0, 77, 11, 184, + 255, 224, 179, 11, 0, 77, 11, 184, 255, 216, 179, 10, 0, 77, 6, 184, 255, 216, 64, 10, + 17, 18, 0, 76, 3, 8, 14, 0, 77, 32, 184, 255, 232, 64, 34, 15, 0, 77, 48, 64, + 31, 0, 77, 48, 118, 9, 23, 27, 32, 27, 120, 26, 23, 20, 26, 26, 23, 5, 37, 32, + 37, 120, 0, 5, 20, 0, 0, 5, 42, 184, 255, 192, 64, 55, 31, 0, 77, 42, 118, 19, + 38, 32, 19, 15, 9, 1, 9, 19, 32, 19, 32, 9, 3, 26, 32, 0, 48, 0, 2, 0, + 53, 63, 26, 111, 26, 127, 26, 3, 111, 26, 127, 26, 2, 26, 52, 0, 37, 65, 38, 32, + 5, 23, 23, 27, 26, 65, 45, 121, 14, 0, 47, 237, 63, 51, 57, 17, 51, 51, 51, 63, + 51, 1, 16, 198, 93, 113, 16, 198, 93, 17, 23, 57, 25, 47, 24, 47, 47, 93, 17, 18, + 57, 16, 237, 43, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 125, 196, 1, 24, 16, + 237, 43, 49, 48, 0, 43, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 1, 14, 3, 7, 23, 22, 22, 21, 20, 14, 2, 35, 34, + 46, 2, 53, 52, 54, 55, 55, 38, 38, 39, 51, 30, 3, 23, 62, 3, 55, 3, 7, 6, + 6, 21, 20, 22, 51, 50, 54, 53, 52, 38, 39, 1, 232, 12, 42, 51, 59, 30, 55, 11, + 16, 12, 29, 48, 37, 37, 48, 29, 12, 13, 14, 56, 55, 97, 42, 86, 16, 32, 36, 42, + 27, 21, 46, 42, 33, 9, 154, 34, 8, 10, 27, 26, 26, 27, 10, 8, 2, 107, 31, 104, + 126, 138, 66, 108, 22, 48, 17, 20, 43, 36, 24, 24, 36, 43, 20, 17, 42, 28, 109, 114, + 237, 113, 45, 85, 93, 107, 66, 54, 120, 109, 89, 24, 253, 234, 64, 16, 28, 14, 24, 35, + 35, 24, 14, 29, 15, 0, 1, 0, 36, 255, 246, 1, 206, 2, 181, 0, 45, 0, 148, 185, + 0, 43, 255, 232, 180, 12, 16, 0, 76, 43, 184, 255, 224, 64, 25, 11, 0, 77, 21, 48, + 11, 0, 77, 21, 32, 9, 10, 0, 76, 20, 32, 14, 0, 77, 20, 24, 12, 0, 77, 16, + 184, 255, 224, 179, 14, 0, 77, 16, 184, 255, 232, 179, 12, 0, 77, 15, 184, 255, 208, 179, + 11, 0, 77, 15, 184, 255, 224, 179, 10, 0, 77, 15, 184, 255, 216, 64, 34, 9, 0, 77, + 0, 127, 23, 23, 34, 10, 127, 13, 47, 36, 33, 127, 34, 46, 32, 29, 136, 37, 40, 80, + 35, 36, 77, 34, 74, 5, 136, 18, 81, 11, 73, 0, 63, 63, 237, 63, 63, 51, 63, 51, + 237, 50, 1, 16, 214, 237, 50, 16, 222, 237, 17, 57, 47, 237, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 37, 20, 30, 2, 51, 50, 62, 2, 53, 17, 51, 17, 20, + 14, 2, 35, 34, 46, 2, 53, 53, 52, 46, 2, 35, 34, 6, 7, 17, 35, 17, 55, 21, + 54, 54, 51, 50, 30, 2, 21, 1, 27, 7, 13, 19, 12, 12, 18, 13, 6, 79, 11, 29, + 50, 40, 40, 50, 28, 10, 9, 13, 17, 8, 11, 24, 8, 78, 78, 11, 33, 15, 20, 39, + 32, 19, 187, 39, 48, 26, 9, 8, 26, 48, 39, 1, 22, 254, 222, 39, 68, 49, 28, 28, + 50, 68, 39, 138, 28, 35, 19, 6, 10, 5, 254, 126, 2, 167, 14, 238, 9, 10, 14, 34, + 57, 43, 0, 1, 0, 68, 255, 243, 1, 200, 2, 107, 0, 21, 0, 69, 64, 41, 19, 24, + 12, 0, 77, 19, 16, 11, 0, 77, 19, 32, 10, 0, 77, 5, 115, 0, 0, 1, 13, 13, + 4, 23, 0, 1, 1, 8, 1, 22, 12, 12, 9, 124, 16, 70, 5, 0, 121, 2, 65, 0, + 63, 237, 50, 63, 237, 50, 47, 1, 16, 198, 94, 93, 16, 206, 50, 47, 17, 57, 47, 237, + 49, 48, 43, 43, 43, 19, 35, 53, 33, 21, 35, 17, 20, 22, 51, 50, 54, 55, 23, 6, + 6, 35, 34, 46, 2, 53, 188, 120, 1, 83, 137, 43, 49, 26, 41, 11, 16, 12, 63, 32, + 46, 62, 37, 16, 2, 37, 70, 70, 254, 128, 61, 44, 14, 6, 69, 9, 15, 21, 44, 69, + 48, 0, 1, 0, 89, 0, 0, 1, 155, 2, 107, 0, 19, 0, 74, 64, 38, 16, 16, 9, + 10, 19, 19, 6, 3, 1, 5, 115, 14, 12, 0, 10, 1, 8, 10, 10, 21, 20, 0, 15, + 121, 17, 4, 11, 121, 1, 14, 14, 17, 65, 5, 10, 121, 8, 68, 0, 63, 237, 50, 63, + 57, 47, 51, 237, 50, 16, 237, 50, 1, 17, 18, 57, 47, 94, 93, 206, 51, 253, 50, 206, + 205, 50, 47, 16, 205, 50, 47, 49, 48, 1, 21, 51, 21, 35, 21, 51, 21, 33, 53, 51, + 53, 35, 53, 51, 53, 35, 53, 33, 21, 1, 35, 91, 91, 120, 254, 190, 120, 92, 92, 120, + 1, 66, 2, 37, 194, 65, 220, 70, 70, 220, 65, 194, 70, 70, 0, 1, 0, 64, 0, 0, + 1, 251, 2, 119, 0, 29, 0, 110, 64, 62, 13, 13, 18, 0, 29, 0, 120, 11, 13, 20, + 11, 11, 13, 19, 13, 18, 13, 120, 24, 19, 20, 24, 24, 19, 47, 11, 1, 11, 5, 5, + 18, 31, 24, 29, 25, 115, 0, 26, 16, 26, 2, 8, 26, 30, 29, 24, 13, 13, 26, 27, + 65, 26, 68, 18, 19, 68, 11, 0, 9, 124, 2, 69, 0, 63, 237, 50, 50, 63, 51, 63, + 63, 18, 57, 25, 47, 51, 51, 1, 24, 16, 214, 94, 93, 237, 50, 50, 16, 206, 50, 47, + 51, 93, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 8, 125, 196, 49, 48, 1, 54, + 51, 50, 22, 23, 7, 38, 38, 35, 34, 6, 7, 7, 30, 3, 23, 35, 46, 3, 39, 17, + 35, 17, 51, 17, 1, 48, 53, 58, 23, 49, 20, 36, 14, 26, 10, 19, 35, 29, 105, 32, + 73, 70, 62, 21, 93, 25, 58, 65, 69, 35, 82, 82, 2, 45, 74, 21, 22, 57, 14, 13, + 43, 40, 142, 26, 73, 87, 97, 50, 46, 88, 76, 63, 23, 254, 216, 2, 107, 254, 236, 0, + 1, 0, 71, 0, 0, 1, 222, 2, 181, 0, 36, 0, 94, 64, 52, 0, 0, 5, 33, 30, + 33, 129, 34, 0, 20, 34, 34, 0, 6, 0, 5, 0, 129, 11, 6, 20, 11, 6, 0, 11, + 34, 34, 5, 38, 30, 22, 22, 11, 127, 0, 13, 1, 8, 13, 37, 33, 34, 73, 26, 137, + 19, 77, 13, 74, 6, 5, 74, 0, 63, 51, 63, 63, 237, 63, 51, 1, 16, 214, 94, 93, + 237, 50, 47, 50, 16, 206, 50, 47, 16, 0, 193, 135, 5, 43, 135, 125, 196, 135, 24, 16, + 43, 135, 8, 125, 196, 49, 48, 55, 30, 3, 23, 35, 46, 3, 39, 21, 35, 17, 52, 62, + 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 6, 21, 17, 54, 54, 55, 51, 6, 6, 238, + 27, 68, 67, 60, 18, 98, 19, 56, 63, 63, 25, 83, 11, 30, 51, 41, 13, 32, 10, 8, + 8, 23, 7, 33, 26, 55, 110, 44, 97, 43, 121, 255, 20, 61, 70, 73, 31, 31, 65, 60, + 50, 17, 223, 2, 14, 41, 63, 42, 21, 5, 2, 65, 2, 2, 43, 41, 254, 241, 48, 95, + 51, 51, 108, 0, 1, 0, 54, 255, 245, 1, 194, 2, 176, 0, 31, 0, 66, 64, 34, 27, + 27, 16, 14, 17, 127, 11, 9, 7, 0, 6, 1, 8, 6, 6, 33, 32, 17, 6, 134, 14, + 9, 9, 23, 10, 133, 13, 77, 26, 26, 23, 136, 0, 81, 0, 63, 237, 50, 47, 63, 237, + 18, 57, 47, 51, 237, 50, 1, 17, 18, 57, 47, 94, 93, 205, 51, 204, 253, 50, 205, 50, + 47, 49, 48, 5, 34, 46, 2, 53, 53, 35, 53, 51, 53, 35, 53, 51, 17, 51, 21, 35, + 21, 20, 30, 2, 51, 50, 54, 55, 23, 14, 3, 1, 82, 44, 58, 34, 14, 134, 134, 134, + 216, 132, 132, 9, 19, 28, 19, 29, 50, 14, 12, 6, 22, 30, 35, 11, 24, 48, 71, 47, + 149, 62, 228, 70, 254, 214, 62, 149, 35, 44, 27, 10, 14, 8, 70, 3, 9, 8, 6, 0, + 1, 0, 29, 0, 0, 1, 212, 2, 181, 0, 39, 0, 163, 64, 97, 30, 40, 19, 0, 77, + 149, 29, 1, 134, 29, 1, 19, 40, 19, 0, 77, 19, 48, 18, 0, 77, 124, 19, 1, 108, + 18, 1, 33, 33, 3, 14, 8, 3, 8, 129, 9, 14, 20, 9, 9, 14, 35, 0, 3, 0, + 129, 39, 35, 20, 39, 39, 35, 17, 17, 3, 3, 9, 39, 41, 25, 25, 9, 40, 34, 15, + 16, 33, 31, 18, 32, 32, 14, 17, 16, 16, 32, 16, 48, 16, 3, 16, 16, 35, 3, 14, + 14, 9, 21, 137, 28, 77, 8, 9, 74, 39, 0, 74, 0, 63, 50, 63, 51, 63, 237, 18, + 57, 17, 51, 51, 51, 47, 93, 205, 17, 51, 47, 57, 57, 205, 17, 57, 57, 1, 16, 198, + 50, 47, 16, 206, 17, 57, 17, 51, 47, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, + 125, 196, 1, 17, 51, 24, 47, 49, 48, 93, 93, 43, 43, 93, 93, 43, 33, 38, 38, 39, + 14, 3, 7, 35, 62, 3, 55, 39, 7, 39, 55, 38, 38, 35, 34, 6, 7, 39, 54, 54, + 51, 50, 22, 23, 55, 23, 7, 30, 3, 23, 1, 119, 22, 60, 35, 26, 45, 38, 29, 9, + 82, 13, 41, 51, 57, 30, 19, 94, 20, 89, 14, 33, 25, 13, 17, 5, 12, 5, 32, 22, + 52, 62, 21, 111, 21, 108, 31, 56, 49, 41, 15, 91, 198, 91, 47, 103, 101, 93, 36, 50, + 118, 124, 124, 55, 46, 32, 56, 31, 26, 27, 3, 2, 66, 2, 5, 52, 43, 38, 56, 37, + 73, 146, 139, 129, 56, 0, 1, 0, 45, 255, 243, 1, 199, 2, 107, 0, 37, 0, 72, 64, + 41, 11, 24, 12, 0, 77, 11, 16, 11, 0, 77, 27, 115, 22, 5, 24, 24, 13, 35, 115, + 0, 39, 16, 115, 13, 38, 36, 14, 25, 25, 14, 65, 22, 19, 124, 5, 8, 70, 32, 124, + 2, 70, 0, 63, 237, 63, 51, 237, 50, 63, 51, 47, 17, 51, 1, 16, 214, 237, 16, 222, + 237, 17, 57, 47, 51, 51, 237, 49, 48, 43, 43, 37, 6, 35, 34, 38, 39, 6, 6, 35, + 34, 46, 2, 53, 17, 51, 17, 20, 22, 51, 50, 54, 55, 38, 53, 53, 51, 21, 20, 30, + 2, 51, 50, 54, 55, 17, 51, 1, 199, 54, 45, 25, 41, 17, 20, 37, 29, 27, 52, 39, + 24, 75, 30, 36, 14, 20, 10, 17, 75, 4, 13, 25, 21, 5, 17, 7, 75, 11, 24, 14, + 12, 14, 12, 17, 42, 72, 56, 1, 189, 254, 73, 59, 65, 7, 8, 43, 60, 210, 204, 21, + 44, 36, 23, 2, 2, 2, 47, 0, 1, 255, 207, 255, 89, 1, 189, 2, 107, 0, 31, 0, + 76, 64, 46, 9, 10, 25, 10, 2, 21, 1, 1, 6, 1, 1, 1, 10, 15, 10, 126, 6, + 1, 20, 6, 1, 6, 115, 9, 33, 15, 115, 24, 0, 31, 16, 31, 2, 31, 32, 28, 124, + 21, 6, 10, 68, 7, 65, 15, 1, 65, 0, 63, 51, 63, 63, 51, 47, 237, 1, 16, 214, + 93, 204, 237, 16, 222, 253, 135, 43, 135, 125, 196, 1, 93, 93, 93, 49, 48, 19, 51, 30, + 3, 23, 17, 51, 17, 35, 46, 3, 39, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, + 51, 50, 54, 53, 55, 84, 31, 65, 60, 54, 21, 75, 75, 15, 53, 66, 72, 34, 11, 29, + 49, 39, 13, 28, 10, 15, 10, 16, 8, 33, 22, 2, 107, 57, 117, 115, 111, 49, 1, 193, + 253, 149, 46, 120, 130, 135, 63, 254, 18, 39, 62, 43, 23, 3, 2, 66, 2, 1, 43, 41, + 0, 1, 0, 71, 255, 91, 1, 176, 1, 218, 0, 19, 0, 82, 182, 12, 16, 15, 16, 0, + 76, 5, 184, 255, 224, 179, 18, 0, 77, 5, 184, 255, 232, 179, 17, 0, 77, 5, 184, 255, + 232, 180, 8, 10, 0, 76, 4, 184, 255, 224, 64, 23, 17, 0, 77, 8, 127, 7, 21, 18, + 127, 0, 19, 1, 8, 19, 20, 19, 74, 8, 75, 14, 136, 3, 80, 0, 63, 237, 63, 63, + 1, 16, 214, 94, 93, 237, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 19, 54, 54, 51, + 50, 22, 21, 17, 35, 17, 52, 46, 2, 35, 34, 6, 7, 17, 35, 71, 45, 89, 39, 93, + 95, 82, 16, 29, 41, 24, 20, 45, 21, 83, 1, 195, 11, 12, 96, 106, 254, 75, 1, 170, + 45, 56, 31, 12, 5, 4, 254, 116, 0, 3, 0, 29, 255, 243, 1, 216, 2, 121, 0, 19, + 0, 26, 0, 33, 0, 205, 182, 33, 24, 13, 14, 0, 76, 28, 184, 255, 240, 179, 14, 0, + 77, 28, 184, 255, 224, 179, 13, 0, 77, 26, 184, 255, 232, 179, 14, 0, 77, 26, 184, 255, + 224, 64, 25, 13, 0, 77, 21, 24, 14, 0, 77, 21, 32, 13, 0, 77, 17, 24, 15, 16, + 0, 76, 17, 16, 8, 0, 77, 13, 184, 255, 224, 179, 16, 0, 77, 13, 184, 255, 232, 179, + 15, 0, 77, 13, 184, 255, 232, 64, 14, 8, 0, 77, 12, 16, 13, 0, 77, 8, 16, 13, + 0, 77, 7, 184, 255, 232, 180, 15, 16, 0, 76, 7, 184, 255, 240, 64, 53, 8, 0, 77, + 3, 32, 16, 0, 77, 3, 24, 15, 0, 77, 3, 16, 8, 0, 77, 31, 23, 118, 10, 35, + 30, 24, 118, 0, 64, 11, 16, 72, 0, 34, 24, 121, 15, 30, 31, 30, 79, 30, 3, 30, + 30, 5, 20, 124, 15, 70, 27, 124, 5, 69, 0, 63, 237, 63, 237, 17, 57, 47, 93, 237, + 1, 16, 214, 43, 237, 50, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 52, 62, 2, 51, 50, 30, 2, 21, + 20, 14, 2, 35, 34, 46, 2, 23, 50, 54, 55, 33, 22, 22, 19, 34, 6, 7, 33, 38, + 38, 29, 32, 58, 81, 50, 49, 82, 58, 33, 33, 58, 82, 49, 50, 81, 58, 32, 219, 66, + 68, 5, 254, 238, 5, 65, 65, 64, 66, 5, 1, 18, 5, 69, 1, 54, 83, 122, 79, 39, + 39, 79, 122, 83, 83, 122, 80, 38, 38, 80, 122, 169, 114, 108, 108, 114, 1, 248, 112, 106, + 106, 112, 0, 2, 0, 29, 255, 243, 1, 238, 2, 203, 0, 32, 0, 44, 0, 200, 185, 0, + 43, 255, 240, 64, 21, 13, 14, 0, 76, 41, 16, 14, 0, 77, 41, 24, 13, 0, 77, 37, + 16, 13, 14, 0, 76, 35, 184, 255, 240, 179, 14, 0, 77, 35, 184, 255, 232, 64, 19, 13, + 0, 77, 30, 40, 16, 0, 77, 30, 24, 15, 0, 77, 30, 16, 8, 0, 77, 26, 184, 255, + 232, 179, 16, 0, 77, 26, 184, 255, 224, 179, 15, 0, 77, 26, 184, 255, 232, 179, 8, 0, + 77, 19, 184, 255, 240, 179, 16, 0, 77, 19, 184, 255, 232, 179, 15, 0, 77, 18, 184, 255, + 240, 64, 53, 16, 0, 77, 8, 24, 18, 0, 77, 8, 16, 17, 0, 77, 3, 16, 15, 16, + 0, 76, 3, 16, 8, 0, 77, 10, 17, 39, 118, 20, 7, 23, 46, 33, 118, 0, 64, 11, + 16, 72, 0, 45, 36, 124, 28, 70, 20, 7, 7, 42, 124, 13, 5, 69, 0, 63, 206, 237, + 51, 17, 51, 63, 237, 1, 16, 214, 43, 237, 16, 222, 50, 50, 237, 220, 205, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 52, + 62, 2, 51, 50, 23, 54, 54, 53, 52, 38, 39, 51, 22, 20, 21, 20, 6, 7, 22, 22, + 21, 20, 14, 2, 35, 34, 46, 2, 55, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, + 29, 32, 58, 81, 50, 80, 53, 20, 10, 1, 1, 82, 1, 36, 34, 23, 25, 33, 58, 82, + 49, 50, 81, 58, 32, 84, 66, 69, 70, 70, 70, 70, 69, 66, 1, 54, 83, 122, 79, 39, + 49, 23, 45, 29, 9, 20, 5, 10, 17, 5, 43, 76, 32, 39, 111, 72, 83, 122, 80, 38, + 38, 80, 122, 83, 122, 130, 130, 122, 122, 130, 130, 0, 2, 0, 40, 255, 245, 1, 220, 2, + 49, 0, 31, 0, 43, 0, 152, 64, 12, 42, 32, 15, 16, 0, 76, 42, 16, 14, 0, 77, + 40, 184, 255, 224, 180, 15, 16, 0, 76, 40, 184, 255, 240, 179, 14, 0, 77, 36, 184, 255, + 224, 179, 16, 0, 77, 36, 184, 255, 232, 179, 15, 0, 77, 36, 184, 255, 240, 64, 29, 14, + 0, 77, 34, 40, 16, 0, 77, 34, 32, 15, 0, 77, 34, 16, 14, 0, 77, 12, 24, 8, + 0, 77, 8, 24, 8, 0, 77, 2, 184, 255, 240, 64, 31, 8, 0, 77, 20, 27, 32, 130, + 30, 17, 0, 45, 38, 130, 10, 64, 9, 12, 72, 10, 44, 35, 136, 30, 23, 17, 15, 80, + 41, 136, 5, 81, 0, 63, 237, 63, 51, 206, 51, 237, 1, 16, 214, 43, 237, 16, 222, 50, + 50, 237, 220, 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, + 20, 14, 2, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 23, 54, 54, 53, 52, 38, 39, + 51, 22, 20, 21, 20, 6, 7, 22, 7, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, + 1, 204, 31, 56, 78, 46, 45, 77, 56, 31, 31, 56, 77, 45, 72, 54, 16, 7, 1, 1, + 79, 1, 28, 30, 42, 85, 68, 58, 57, 67, 67, 57, 58, 68, 232, 55, 89, 64, 35, 35, + 64, 89, 55, 55, 90, 63, 35, 42, 22, 43, 29, 8, 21, 5, 11, 16, 5, 42, 70, 31, + 62, 92, 79, 91, 91, 79, 78, 91, 91, 0, 2, 0, 45, 255, 243, 1, 216, 2, 121, 0, + 32, 0, 52, 0, 174, 185, 0, 50, 255, 232, 64, 14, 17, 0, 77, 46, 24, 17, 0, 77, + 40, 24, 17, 0, 77, 36, 184, 255, 232, 64, 14, 17, 0, 77, 30, 32, 19, 0, 77, 30, + 48, 18, 0, 77, 30, 184, 255, 232, 179, 17, 0, 77, 26, 184, 255, 224, 179, 19, 0, 77, + 26, 184, 255, 216, 64, 9, 18, 0, 77, 26, 24, 17, 0, 77, 25, 184, 255, 240, 180, 9, + 10, 0, 76, 11, 184, 255, 240, 64, 10, 13, 0, 77, 3, 40, 18, 19, 0, 76, 3, 184, + 255, 224, 64, 37, 17, 0, 77, 43, 118, 20, 7, 23, 64, 9, 12, 72, 23, 15, 115, 12, + 54, 33, 118, 0, 53, 38, 124, 28, 70, 14, 68, 20, 18, 124, 9, 69, 48, 124, 7, 5, + 69, 0, 63, 51, 237, 63, 237, 50, 63, 63, 237, 1, 16, 214, 237, 16, 222, 253, 222, 43, + 50, 50, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, + 52, 62, 2, 51, 50, 23, 54, 51, 50, 22, 21, 17, 35, 17, 52, 38, 35, 34, 7, 22, + 22, 21, 20, 14, 2, 35, 34, 46, 2, 55, 20, 30, 2, 51, 50, 62, 2, 53, 52, 46, + 2, 35, 34, 14, 2, 45, 19, 37, 53, 34, 48, 33, 38, 48, 55, 62, 78, 20, 31, 20, + 19, 15, 16, 20, 38, 55, 34, 35, 53, 36, 19, 78, 8, 16, 25, 17, 17, 25, 17, 8, + 8, 17, 25, 17, 17, 25, 16, 8, 1, 54, 86, 123, 78, 36, 34, 33, 82, 95, 254, 57, + 1, 183, 56, 68, 22, 39, 114, 78, 87, 122, 78, 36, 36, 78, 122, 87, 55, 93, 68, 38, + 38, 68, 93, 55, 57, 94, 66, 36, 36, 66, 94, 0, 2, 0, 27, 255, 91, 1, 191, 1, + 219, 0, 38, 0, 50, 0, 168, 64, 12, 37, 24, 9, 0, 77, 36, 24, 17, 18, 0, 76, + 32, 184, 255, 224, 179, 18, 0, 77, 32, 184, 255, 232, 179, 17, 0, 77, 31, 184, 255, 240, + 179, 11, 0, 77, 31, 184, 255, 232, 180, 9, 10, 0, 76, 14, 184, 255, 208, 179, 9, 0, + 77, 13, 184, 255, 224, 180, 11, 16, 0, 76, 13, 184, 255, 216, 179, 10, 0, 77, 13, 184, + 255, 192, 64, 54, 8, 0, 77, 3, 16, 17, 18, 0, 76, 3, 24, 10, 11, 0, 76, 2, + 24, 9, 0, 77, 45, 130, 26, 8, 15, 29, 31, 29, 2, 29, 19, 127, 16, 52, 39, 130, + 0, 51, 42, 136, 34, 81, 18, 75, 26, 24, 136, 8, 11, 80, 48, 136, 5, 80, 0, 63, + 237, 63, 51, 237, 50, 63, 63, 237, 1, 16, 214, 237, 16, 222, 253, 222, 93, 50, 50, 237, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 52, 62, 2, 51, + 50, 22, 23, 54, 54, 51, 50, 30, 2, 21, 17, 35, 17, 52, 46, 2, 35, 34, 7, 22, + 22, 21, 20, 14, 2, 35, 34, 46, 2, 55, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, + 6, 27, 24, 38, 49, 26, 21, 42, 17, 14, 44, 26, 39, 47, 25, 8, 79, 4, 10, 20, + 15, 20, 17, 11, 11, 24, 39, 49, 26, 26, 50, 39, 24, 78, 27, 33, 34, 26, 26, 34, + 33, 27, 232, 71, 94, 55, 23, 15, 17, 11, 20, 27, 52, 74, 47, 254, 73, 1, 165, 41, + 55, 34, 15, 20, 27, 74, 48, 71, 94, 55, 23, 23, 56, 93, 71, 84, 89, 89, 84, 85, + 88, 88, 0, 2, 0, 18, 0, 0, 1, 213, 2, 113, 0, 25, 0, 35, 0, 124, 185, 0, + 6, 255, 216, 179, 10, 0, 77, 6, 184, 255, 224, 179, 9, 0, 77, 3, 184, 255, 224, 179, + 18, 0, 77, 3, 184, 255, 232, 179, 17, 0, 77, 2, 184, 255, 216, 180, 17, 18, 0, 76, + 2, 184, 255, 224, 179, 10, 0, 77, 2, 184, 255, 232, 64, 36, 9, 0, 77, 34, 118, 5, + 37, 9, 29, 115, 0, 12, 16, 12, 32, 12, 3, 8, 12, 15, 21, 36, 9, 121, 30, 30, + 0, 11, 68, 18, 18, 12, 26, 124, 0, 65, 0, 63, 237, 50, 50, 47, 63, 18, 57, 47, + 237, 1, 16, 214, 221, 222, 94, 93, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 1, 50, 30, 2, 21, 20, 6, 35, 35, 21, 35, 17, 6, 6, 21, 20, 23, 7, + 38, 38, 53, 52, 62, 2, 23, 34, 6, 7, 21, 51, 50, 54, 53, 52, 1, 30, 48, 69, + 45, 21, 91, 91, 46, 82, 38, 33, 4, 67, 2, 5, 48, 76, 96, 63, 18, 34, 8, 42, + 52, 50, 2, 113, 28, 51, 70, 43, 97, 105, 231, 2, 34, 5, 32, 29, 16, 17, 8, 6, + 25, 13, 52, 58, 27, 5, 71, 1, 2, 250, 60, 69, 124, 0, 2, 0, 71, 255, 91, 1, + 204, 2, 181, 0, 33, 0, 48, 0, 151, 64, 16, 46, 16, 14, 0, 77, 36, 32, 14, 0, + 77, 36, 24, 13, 0, 77, 31, 184, 255, 232, 179, 9, 0, 77, 31, 184, 255, 240, 64, 9, + 8, 0, 77, 14, 16, 15, 0, 77, 3, 184, 255, 240, 179, 16, 0, 77, 3, 184, 255, 224, + 179, 15, 0, 77, 3, 184, 255, 240, 179, 10, 0, 77, 2, 184, 255, 224, 179, 16, 0, 77, + 2, 184, 255, 232, 179, 9, 0, 77, 2, 184, 255, 224, 64, 32, 8, 0, 77, 34, 130, 0, + 50, 41, 27, 19, 8, 127, 0, 10, 1, 8, 10, 49, 37, 136, 29, 80, 23, 137, 16, 77, + 10, 75, 44, 136, 5, 81, 0, 63, 237, 63, 63, 237, 63, 237, 1, 16, 214, 94, 93, 253, + 204, 51, 51, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 37, 20, 14, 2, 35, 34, 38, 39, 21, 35, 17, 52, 62, 2, 51, 50, 22, 23, 7, 38, + 38, 35, 34, 6, 21, 21, 54, 51, 50, 30, 2, 7, 52, 38, 35, 34, 6, 7, 17, 22, + 22, 51, 50, 62, 2, 1, 204, 27, 51, 74, 47, 37, 56, 14, 83, 11, 30, 51, 41, 13, + 32, 10, 8, 8, 23, 7, 33, 26, 46, 46, 46, 79, 57, 32, 85, 76, 61, 29, 44, 11, + 14, 54, 29, 33, 47, 30, 14, 231, 53, 89, 64, 36, 18, 11, 183, 2, 179, 41, 63, 42, + 21, 5, 2, 65, 2, 2, 43, 41, 85, 18, 34, 63, 90, 56, 81, 89, 12, 3, 254, 224, + 13, 22, 26, 45, 61, 0, 2, 0, 55, 255, 159, 1, 235, 2, 181, 0, 27, 0, 42, 0, + 118, 185, 0, 27, 255, 216, 179, 16, 0, 77, 27, 184, 255, 224, 179, 8, 0, 77, 2, 184, + 255, 240, 179, 16, 0, 77, 2, 184, 255, 192, 64, 48, 8, 0, 77, 3, 9, 14, 9, 120, + 8, 3, 20, 8, 3, 8, 8, 38, 118, 0, 44, 14, 14, 32, 23, 19, 115, 0, 20, 16, + 20, 2, 20, 43, 14, 3, 18, 121, 32, 32, 20, 28, 124, 22, 25, 65, 20, 68, 8, 9, + 0, 47, 51, 63, 63, 206, 237, 18, 57, 47, 237, 50, 50, 1, 16, 214, 93, 237, 50, 50, + 50, 47, 16, 222, 237, 51, 47, 135, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, 1, + 20, 6, 7, 30, 3, 23, 35, 46, 3, 39, 6, 34, 35, 35, 21, 35, 17, 51, 21, 54, + 51, 50, 22, 39, 34, 6, 7, 21, 51, 50, 62, 2, 53, 52, 46, 2, 1, 175, 60, 51, + 21, 46, 45, 42, 17, 93, 15, 38, 42, 43, 21, 6, 21, 4, 70, 83, 83, 37, 31, 112, + 113, 218, 23, 43, 9, 53, 36, 57, 41, 22, 22, 36, 49, 1, 174, 57, 88, 23, 37, 88, + 94, 96, 44, 43, 92, 89, 83, 35, 1, 244, 2, 181, 71, 3, 98, 27, 1, 2, 239, 10, + 27, 47, 38, 36, 46, 27, 11, 0, 1, 0, 55, 255, 243, 1, 190, 2, 121, 0, 49, 1, + 15, 185, 0, 49, 255, 232, 179, 18, 0, 77, 49, 184, 255, 224, 179, 17, 0, 77, 45, 184, + 255, 224, 179, 15, 0, 77, 44, 184, 255, 232, 179, 14, 0, 77, 43, 184, 255, 224, 179, 10, + 0, 77, 43, 184, 255, 216, 179, 9, 0, 77, 40, 184, 255, 240, 179, 8, 0, 77, 39, 184, + 255, 224, 179, 15, 0, 77, 39, 184, 255, 216, 179, 10, 0, 77, 36, 184, 255, 200, 179, 10, + 0, 77, 36, 184, 255, 224, 179, 9, 0, 77, 36, 184, 255, 216, 64, 61, 8, 0, 77, 30, + 24, 17, 18, 0, 76, 30, 40, 16, 0, 77, 30, 32, 15, 0, 77, 30, 24, 14, 0, 77, + 24, 40, 18, 0, 77, 24, 32, 17, 0, 77, 19, 24, 14, 0, 77, 15, 32, 8, 0, 77, + 14, 16, 13, 0, 77, 11, 24, 10, 0, 77, 11, 40, 8, 9, 0, 76, 6, 184, 255, 216, + 179, 14, 0, 77, 6, 184, 255, 232, 179, 13, 0, 77, 5, 184, 255, 232, 179, 16, 0, 77, + 5, 184, 255, 224, 64, 32, 15, 0, 77, 22, 118, 37, 4, 4, 37, 51, 47, 118, 12, 29, + 29, 12, 50, 42, 9, 28, 28, 25, 124, 17, 34, 69, 3, 3, 0, 124, 9, 70, 0, 63, + 237, 50, 47, 63, 57, 237, 50, 47, 17, 57, 1, 16, 198, 50, 47, 16, 237, 16, 206, 50, + 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 50, 54, 55, 23, 14, 3, 35, + 34, 38, 53, 52, 62, 2, 55, 62, 3, 53, 52, 38, 35, 34, 6, 7, 39, 62, 3, 51, + 50, 22, 21, 20, 14, 2, 7, 14, 3, 21, 20, 22, 1, 11, 56, 78, 20, 25, 9, 34, + 45, 58, 33, 102, 110, 25, 46, 63, 38, 26, 44, 33, 19, 66, 45, 43, 70, 20, 26, 10, + 33, 42, 48, 26, 91, 102, 25, 43, 55, 30, 26, 50, 40, 24, 66, 58, 29, 11, 68, 6, + 14, 14, 9, 87, 81, 43, 60, 44, 32, 16, 11, 22, 27, 36, 26, 45, 45, 24, 12, 69, + 7, 14, 10, 7, 91, 81, 37, 54, 40, 30, 12, 10, 23, 31, 41, 29, 48, 48, 0, 1, + 0, 65, 255, 245, 1, 177, 1, 219, 0, 39, 0, 246, 185, 0, 38, 255, 232, 179, 16, 0, + 77, 38, 184, 255, 240, 179, 15, 0, 77, 37, 184, 255, 224, 179, 9, 0, 77, 37, 184, 255, + 216, 179, 8, 0, 77, 35, 184, 255, 216, 179, 12, 0, 77, 35, 184, 255, 232, 179, 10, 0, + 77, 34, 184, 255, 224, 179, 13, 0, 77, 32, 184, 255, 232, 179, 12, 0, 77, 32, 184, 255, + 224, 179, 11, 0, 77, 32, 184, 255, 232, 179, 10, 0, 77, 32, 184, 255, 216, 64, 43, 8, + 9, 0, 76, 17, 24, 15, 16, 0, 76, 17, 16, 14, 0, 77, 14, 32, 13, 0, 77, 14, + 40, 12, 0, 77, 14, 24, 10, 0, 77, 11, 24, 11, 12, 0, 76, 11, 32, 8, 10, 0, + 76, 7, 184, 255, 200, 179, 14, 0, 77, 6, 184, 255, 224, 180, 17, 18, 0, 76, 6, 184, + 255, 216, 180, 15, 16, 0, 76, 6, 184, 255, 224, 64, 35, 14, 0, 77, 19, 130, 33, 6, + 6, 33, 41, 27, 27, 0, 130, 0, 12, 1, 8, 12, 40, 37, 9, 26, 26, 21, 136, 16, + 30, 80, 5, 5, 2, 136, 9, 81, 0, 63, 237, 50, 47, 63, 57, 237, 50, 47, 17, 57, + 1, 16, 214, 94, 93, 237, 51, 47, 16, 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 20, + 51, 50, 54, 55, 23, 6, 6, 35, 34, 38, 53, 52, 62, 4, 53, 52, 35, 34, 14, 2, + 7, 39, 54, 54, 51, 50, 22, 21, 20, 14, 4, 148, 114, 43, 77, 35, 16, 36, 80, 48, + 106, 98, 41, 62, 72, 62, 41, 108, 20, 40, 36, 28, 8, 15, 29, 81, 39, 96, 91, 41, + 61, 72, 61, 41, 116, 57, 21, 16, 75, 16, 16, 69, 63, 39, 51, 36, 25, 24, 29, 21, + 59, 4, 7, 9, 4, 74, 9, 11, 75, 56, 40, 50, 34, 23, 24, 32, 255, 255, 0, 40, + 0, 0, 1, 191, 2, 107, 2, 6, 3, 157, 0, 0, 0, 2, 0, 43, 255, 91, 1, 185, + 2, 181, 0, 31, 0, 44, 0, 140, 185, 0, 30, 255, 224, 179, 10, 0, 77, 30, 184, 255, + 216, 180, 8, 9, 0, 76, 29, 184, 255, 232, 179, 13, 0, 77, 29, 184, 255, 224, 64, 72, + 11, 12, 0, 76, 26, 16, 13, 0, 77, 26, 32, 12, 0, 77, 26, 24, 11, 0, 77, 25, + 32, 8, 10, 0, 76, 21, 32, 10, 12, 0, 76, 21, 40, 9, 0, 77, 21, 32, 8, 0, + 77, 20, 24, 13, 0, 77, 38, 0, 23, 1, 8, 23, 15, 6, 0, 127, 32, 15, 15, 46, + 45, 16, 18, 44, 41, 35, 28, 77, 5, 136, 10, 75, 0, 63, 237, 63, 221, 222, 50, 205, + 50, 1, 17, 18, 57, 47, 51, 253, 206, 16, 220, 94, 93, 205, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, 30, 2, 51, 51, 21, 6, 34, 35, 34, 46, + 2, 53, 17, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 21, 39, 52, 38, 35, + 34, 6, 21, 20, 22, 51, 50, 54, 55, 1, 52, 15, 25, 34, 20, 39, 8, 24, 5, 50, + 68, 42, 18, 30, 38, 30, 44, 28, 13, 12, 29, 49, 38, 75, 62, 82, 31, 30, 29, 29, + 26, 32, 20, 28, 13, 22, 33, 44, 27, 11, 71, 1, 26, 50, 73, 48, 1, 184, 18, 21, + 33, 43, 21, 16, 42, 38, 25, 86, 76, 24, 35, 39, 37, 20, 20, 39, 15, 14, 0, 1, + 0, 63, 255, 89, 1, 199, 2, 96, 0, 50, 0, 148, 185, 0, 33, 255, 232, 179, 18, 0, + 77, 33, 184, 255, 224, 180, 15, 16, 0, 76, 33, 184, 255, 216, 179, 14, 0, 77, 33, 184, + 255, 224, 180, 12, 13, 0, 76, 33, 184, 255, 216, 64, 64, 11, 0, 77, 3, 16, 13, 0, + 77, 3, 24, 12, 0, 77, 3, 32, 11, 0, 77, 46, 130, 31, 14, 14, 31, 52, 12, 15, + 127, 9, 6, 0, 7, 1, 8, 7, 51, 48, 39, 1, 15, 39, 1, 39, 39, 47, 43, 137, + 36, 75, 27, 74, 10, 11, 15, 6, 133, 12, 9, 73, 25, 21, 136, 0, 81, 0, 63, 237, + 50, 63, 51, 237, 50, 205, 50, 63, 63, 237, 1, 47, 51, 47, 93, 93, 16, 214, 94, 93, + 221, 50, 237, 50, 16, 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 5, 34, 46, 2, 53, 53, 35, 53, 51, 53, 55, 21, 51, 21, 35, 21, 20, 30, 2, 51, + 50, 62, 2, 55, 30, 3, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, + 53, 52, 52, 39, 6, 1, 66, 49, 63, 36, 13, 98, 98, 82, 187, 187, 10, 23, 36, 26, + 19, 36, 30, 22, 4, 1, 2, 2, 1, 9, 26, 49, 39, 13, 31, 10, 7, 5, 25, 7, + 35, 23, 1, 24, 6, 23, 46, 69, 47, 216, 69, 130, 14, 144, 69, 216, 35, 44, 27, 10, + 3, 3, 4, 1, 6, 19, 21, 21, 7, 39, 61, 44, 23, 5, 2, 61, 2, 3, 45, 40, + 4, 6, 6, 3, 0, 1, 0, 18, 0, 0, 1, 205, 2, 107, 0, 20, 0, 40, 64, 19, + 2, 115, 5, 5, 15, 1, 22, 9, 15, 21, 12, 12, 2, 5, 121, 20, 65, 4, 68, 0, + 63, 63, 237, 50, 50, 47, 1, 16, 214, 205, 16, 206, 17, 57, 47, 237, 49, 48, 1, 21, + 35, 17, 35, 17, 35, 34, 6, 21, 20, 23, 7, 38, 38, 53, 52, 62, 2, 51, 1, 205, + 152, 82, 66, 34, 39, 4, 67, 2, 5, 29, 48, 62, 33, 2, 107, 70, 253, 219, 2, 37, + 37, 32, 16, 17, 8, 6, 25, 13, 40, 53, 31, 12, 0, 1, 0, 63, 255, 245, 1, 204, + 2, 181, 0, 39, 0, 90, 185, 0, 37, 255, 232, 64, 50, 17, 18, 0, 76, 27, 32, 12, + 0, 77, 19, 24, 11, 12, 0, 76, 32, 32, 13, 13, 2, 41, 0, 3, 127, 25, 22, 0, + 23, 1, 8, 23, 40, 33, 33, 36, 136, 29, 77, 3, 22, 133, 0, 25, 73, 12, 12, 9, + 136, 16, 81, 0, 63, 237, 50, 47, 63, 51, 237, 50, 63, 237, 50, 47, 1, 16, 214, 94, + 93, 221, 50, 237, 50, 16, 206, 50, 47, 50, 47, 49, 48, 43, 43, 43, 19, 51, 21, 35, + 21, 20, 30, 2, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 53, 53, 35, 53, 51, + 53, 52, 54, 51, 50, 22, 23, 7, 38, 38, 35, 34, 6, 21, 243, 187, 187, 10, 23, 36, + 26, 36, 44, 20, 12, 14, 58, 48, 52, 66, 37, 14, 98, 98, 85, 103, 42, 57, 12, 15, + 12, 45, 33, 65, 47, 1, 208, 69, 216, 35, 44, 27, 10, 12, 10, 70, 6, 20, 24, 48, + 71, 47, 216, 69, 42, 89, 98, 10, 5, 72, 5, 11, 61, 51, 0, 1, 0, 39, 255, 89, + 1, 205, 2, 107, 0, 20, 0, 42, 64, 21, 19, 7, 0, 115, 16, 0, 14, 1, 8, 14, + 14, 22, 21, 20, 15, 121, 17, 65, 3, 124, 9, 0, 47, 237, 63, 237, 50, 1, 17, 18, + 57, 47, 94, 93, 206, 253, 204, 206, 49, 48, 5, 20, 22, 51, 50, 54, 55, 23, 6, 35, + 34, 46, 2, 53, 17, 35, 53, 33, 21, 35, 1, 35, 23, 32, 8, 17, 9, 8, 22, 28, + 39, 50, 29, 11, 170, 1, 166, 170, 15, 41, 43, 1, 2, 66, 5, 23, 43, 62, 39, 2, + 37, 70, 70, 0, 1, 0, 48, 255, 243, 1, 238, 2, 203, 0, 40, 0, 109, 185, 0, 39, + 255, 200, 179, 8, 0, 77, 38, 184, 255, 224, 179, 10, 0, 77, 38, 184, 255, 232, 64, 14, + 9, 0, 77, 15, 16, 18, 0, 77, 15, 24, 17, 0, 77, 11, 184, 255, 240, 64, 39, 17, + 18, 0, 76, 3, 32, 10, 0, 77, 3, 24, 9, 0, 77, 2, 40, 8, 0, 77, 23, 30, + 18, 115, 36, 42, 8, 115, 5, 41, 35, 26, 19, 19, 6, 65, 13, 124, 0, 70, 0, 63, + 237, 63, 51, 16, 206, 205, 1, 16, 214, 237, 16, 222, 237, 220, 205, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 23, 34, 46, 2, 53, 17, 51, 17, 20, 30, 2, 51, 50, 62, + 2, 53, 17, 51, 50, 54, 53, 52, 38, 39, 51, 22, 20, 21, 20, 14, 2, 7, 17, 20, + 14, 2, 223, 50, 67, 41, 17, 82, 11, 23, 35, 24, 24, 35, 23, 11, 64, 13, 20, 1, + 1, 82, 1, 9, 23, 37, 27, 17, 41, 67, 13, 31, 57, 80, 49, 1, 159, 254, 106, 44, + 59, 36, 16, 16, 36, 59, 44, 1, 150, 31, 31, 9, 20, 5, 10, 17, 5, 20, 41, 34, + 25, 4, 254, 157, 49, 80, 57, 31, 0, 1, 0, 68, 255, 246, 1, 220, 2, 49, 0, 34, + 0, 78, 185, 0, 13, 255, 232, 179, 18, 0, 77, 13, 184, 255, 224, 64, 38, 17, 0, 77, + 6, 24, 10, 0, 77, 6, 32, 8, 9, 0, 76, 22, 29, 18, 127, 34, 36, 11, 127, 0, + 8, 1, 8, 8, 35, 34, 25, 18, 18, 9, 73, 14, 136, 3, 81, 0, 63, 237, 63, 51, + 16, 206, 205, 1, 16, 214, 94, 93, 237, 16, 222, 237, 221, 205, 49, 48, 43, 43, 43, 43, + 37, 6, 6, 35, 34, 46, 2, 53, 17, 51, 21, 20, 22, 51, 50, 54, 55, 17, 51, 50, + 54, 53, 52, 38, 39, 51, 22, 20, 21, 20, 14, 2, 7, 1, 126, 23, 79, 51, 46, 62, + 37, 16, 82, 39, 48, 20, 38, 5, 57, 23, 15, 1, 1, 82, 1, 9, 21, 37, 27, 13, + 7, 16, 31, 57, 78, 47, 1, 5, 243, 86, 72, 7, 2, 1, 136, 32, 31, 8, 21, 5, + 11, 16, 5, 21, 41, 34, 24, 4, 0, 1, 0, 18, 255, 242, 1, 226, 2, 107, 0, 43, + 0, 147, 181, 33, 24, 13, 0, 77, 29, 184, 255, 232, 64, 14, 13, 0, 77, 11, 24, 14, + 0, 77, 11, 16, 8, 0, 77, 7, 184, 255, 232, 179, 14, 0, 77, 7, 184, 255, 240, 179, + 8, 0, 77, 1, 184, 255, 240, 64, 59, 16, 0, 77, 1, 127, 41, 175, 41, 191, 41, 3, + 41, 41, 36, 118, 4, 0, 0, 4, 45, 17, 24, 16, 0, 77, 17, 0, 21, 16, 21, 112, + 21, 160, 21, 176, 21, 5, 21, 21, 26, 118, 14, 18, 18, 14, 44, 41, 21, 21, 1, 17, + 121, 42, 20, 65, 31, 124, 9, 70, 0, 63, 237, 63, 51, 237, 50, 50, 17, 51, 1, 16, + 198, 50, 47, 16, 237, 50, 47, 93, 51, 43, 16, 206, 50, 47, 16, 237, 50, 47, 93, 51, + 43, 49, 48, 43, 43, 43, 43, 43, 43, 1, 35, 22, 22, 21, 20, 14, 2, 35, 34, 46, + 2, 53, 52, 54, 55, 35, 53, 51, 21, 14, 3, 21, 20, 30, 2, 51, 50, 62, 2, 53, + 52, 46, 2, 39, 53, 51, 1, 226, 109, 48, 46, 27, 55, 82, 54, 54, 82, 55, 27, 47, + 47, 107, 197, 24, 38, 25, 14, 16, 33, 51, 35, 35, 51, 33, 16, 14, 25, 38, 24, 199, + 2, 37, 61, 149, 74, 56, 101, 76, 46, 46, 76, 101, 56, 74, 149, 61, 70, 60, 26, 68, + 77, 82, 40, 42, 76, 57, 34, 34, 57, 76, 42, 40, 82, 77, 68, 26, 60, 0, 1, 0, + 45, 255, 243, 1, 201, 2, 110, 0, 33, 0, 118, 181, 32, 16, 15, 0, 77, 31, 184, 255, + 232, 179, 16, 0, 77, 31, 184, 255, 232, 64, 25, 8, 0, 77, 21, 56, 15, 0, 77, 21, + 16, 14, 0, 77, 17, 8, 17, 18, 0, 76, 16, 16, 13, 0, 77, 13, 184, 255, 224, 179, + 18, 0, 77, 13, 184, 255, 232, 179, 17, 0, 77, 3, 184, 255, 232, 64, 24, 14, 0, 77, + 26, 26, 11, 19, 118, 0, 35, 11, 115, 8, 34, 22, 124, 29, 65, 9, 65, 14, 124, 5, + 70, 0, 63, 237, 63, 63, 237, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 14, 2, 35, 34, 38, 53, 17, 51, 17, + 20, 22, 51, 50, 62, 2, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, + 1, 201, 34, 59, 81, 47, 91, 100, 82, 46, 63, 29, 51, 37, 22, 57, 72, 12, 15, 6, + 2, 5, 33, 13, 55, 75, 45, 20, 1, 62, 90, 126, 79, 36, 105, 123, 1, 148, 254, 128, + 92, 85, 24, 58, 98, 74, 119, 121, 1, 1, 69, 2, 1, 46, 81, 111, 0, 1, 0, 13, + 0, 0, 2, 22, 2, 116, 0, 27, 0, 89, 64, 49, 10, 5, 10, 11, 5, 120, 4, 1, + 20, 4, 4, 1, 11, 10, 10, 120, 26, 25, 20, 26, 25, 26, 115, 0, 1, 1, 8, 1, + 1, 19, 4, 28, 25, 19, 25, 11, 22, 124, 16, 69, 26, 10, 1, 1, 5, 4, 65, 0, + 68, 0, 63, 63, 51, 57, 17, 51, 51, 63, 237, 50, 50, 1, 47, 51, 16, 198, 17, 57, + 47, 94, 93, 253, 135, 43, 125, 16, 196, 135, 24, 16, 43, 8, 125, 16, 196, 49, 48, 51, + 53, 38, 38, 39, 51, 30, 3, 23, 55, 62, 3, 51, 50, 22, 23, 7, 38, 35, 34, 6, + 7, 3, 21, 210, 59, 102, 36, 92, 10, 33, 39, 41, 20, 90, 11, 23, 26, 29, 17, 27, + 45, 18, 37, 26, 24, 13, 24, 14, 104, 230, 99, 191, 99, 35, 78, 82, 81, 36, 223, 29, + 38, 22, 9, 24, 19, 57, 27, 25, 35, 254, 251, 234, 0, 1, 0, 19, 255, 88, 1, 232, + 1, 220, 0, 41, 0, 114, 64, 64, 74, 21, 1, 57, 21, 1, 21, 25, 30, 25, 129, 24, + 21, 20, 24, 24, 21, 103, 6, 1, 6, 33, 30, 33, 129, 3, 6, 20, 3, 3, 6, 30, + 24, 3, 15, 3, 1, 8, 3, 39, 43, 14, 14, 24, 42, 33, 3, 3, 0, 136, 36, 80, + 30, 6, 21, 21, 11, 25, 24, 73, 18, 136, 11, 75, 0, 63, 237, 63, 51, 18, 57, 17, + 51, 51, 63, 237, 50, 47, 50, 1, 16, 198, 50, 47, 16, 206, 50, 94, 93, 17, 18, 57, + 135, 16, 43, 135, 125, 196, 1, 93, 135, 24, 16, 43, 135, 125, 196, 1, 93, 93, 49, 48, + 1, 34, 6, 7, 6, 6, 7, 14, 3, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 55, + 38, 38, 39, 51, 30, 3, 23, 54, 54, 55, 54, 54, 51, 50, 22, 23, 7, 38, 1, 181, + 22, 21, 6, 25, 53, 33, 17, 36, 44, 54, 35, 19, 45, 8, 15, 10, 31, 15, 44, 51, + 20, 53, 91, 30, 90, 9, 24, 31, 37, 20, 22, 32, 18, 11, 47, 51, 17, 31, 17, 14, + 12, 1, 150, 27, 27, 106, 180, 80, 40, 58, 38, 18, 10, 4, 67, 5, 6, 43, 49, 107, + 240, 123, 40, 93, 98, 99, 46, 70, 134, 79, 50, 55, 7, 6, 65, 8, 0, 1, 0, 54, + 0, 0, 1, 199, 2, 107, 0, 25, 0, 110, 64, 54, 10, 10, 0, 21, 19, 16, 14, 13, + 22, 13, 1, 3, 6, 8, 9, 0, 9, 22, 13, 22, 120, 0, 9, 20, 0, 0, 9, 4, + 4, 0, 27, 23, 23, 17, 17, 13, 26, 0, 22, 121, 25, 6, 16, 121, 3, 19, 19, 25, + 65, 13, 9, 121, 12, 68, 0, 63, 237, 50, 63, 57, 47, 51, 237, 50, 16, 237, 50, 1, + 16, 198, 50, 47, 50, 47, 16, 206, 50, 47, 135, 16, 43, 135, 125, 196, 135, 14, 196, 5, + 196, 196, 14, 196, 16, 135, 14, 196, 5, 196, 196, 14, 196, 1, 17, 51, 24, 47, 49, 48, + 1, 6, 6, 7, 51, 21, 35, 6, 6, 7, 33, 21, 33, 53, 54, 54, 55, 35, 53, 51, + 54, 54, 55, 33, 53, 33, 1, 191, 27, 69, 36, 119, 159, 36, 65, 26, 1, 51, 254, 111, + 29, 67, 35, 97, 136, 33, 65, 30, 254, 229, 1, 122, 2, 43, 39, 104, 57, 64, 59, 113, + 49, 70, 54, 57, 121, 59, 64, 54, 97, 43, 70, 0, 1, 0, 73, 0, 0, 1, 171, 1, + 208, 0, 25, 0, 108, 64, 55, 10, 10, 0, 21, 19, 16, 13, 22, 13, 1, 3, 6, 9, + 0, 9, 22, 13, 22, 129, 0, 9, 20, 0, 0, 9, 4, 4, 0, 27, 23, 23, 17, 17, + 0, 13, 1, 8, 13, 26, 0, 22, 133, 25, 6, 16, 3, 19, 19, 25, 73, 13, 9, 133, + 12, 74, 0, 63, 237, 50, 63, 57, 47, 51, 205, 50, 16, 237, 50, 1, 16, 198, 94, 93, + 50, 47, 50, 47, 16, 206, 50, 47, 135, 16, 43, 135, 125, 196, 135, 196, 196, 14, 196, 16, + 135, 5, 196, 196, 14, 196, 1, 17, 51, 24, 47, 49, 48, 1, 6, 6, 7, 51, 21, 35, + 6, 6, 7, 51, 21, 33, 53, 54, 54, 55, 35, 53, 51, 54, 54, 55, 35, 53, 33, 1, + 164, 18, 56, 32, 98, 142, 27, 51, 20, 255, 254, 158, 19, 54, 30, 77, 120, 27, 49, 19, + 228, 1, 78, 1, 146, 20, 66, 42, 59, 37, 74, 34, 70, 55, 35, 83, 42, 59, 35, 63, + 23, 69, 0, 1, 0, 24, 255, 243, 1, 207, 2, 107, 0, 37, 0, 186, 64, 17, 35, 32, + 16, 0, 77, 32, 24, 16, 0, 77, 25, 24, 13, 14, 0, 76, 19, 184, 255, 232, 179, 18, + 0, 77, 19, 184, 255, 216, 179, 17, 0, 77, 19, 184, 255, 216, 179, 8, 0, 77, 16, 184, + 255, 200, 179, 18, 0, 77, 16, 184, 255, 232, 179, 17, 0, 77, 16, 184, 255, 200, 179, 8, + 0, 77, 15, 184, 255, 232, 179, 10, 0, 77, 15, 184, 255, 208, 64, 57, 9, 0, 77, 32, + 14, 1, 15, 5, 31, 5, 47, 5, 3, 8, 5, 14, 9, 14, 120, 0, 5, 20, 0, 0, + 5, 9, 9, 34, 118, 17, 39, 0, 0, 27, 27, 16, 6, 1, 6, 38, 36, 124, 0, 14, + 14, 8, 28, 28, 31, 124, 22, 70, 9, 5, 121, 8, 65, 0, 63, 237, 50, 63, 237, 50, + 47, 17, 57, 47, 51, 237, 1, 16, 198, 93, 50, 47, 50, 47, 16, 222, 237, 51, 47, 135, + 16, 43, 135, 125, 196, 1, 94, 93, 93, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 19, 62, 3, 55, 33, 53, 33, 21, 14, 3, 7, 22, 22, 21, 20, 14, 2, 35, + 34, 46, 2, 39, 55, 22, 22, 51, 50, 54, 53, 52, 35, 35, 166, 22, 49, 47, 41, 14, + 254, 226, 1, 140, 14, 42, 49, 53, 25, 93, 104, 30, 62, 94, 64, 35, 60, 48, 36, 10, + 26, 20, 86, 56, 81, 88, 198, 17, 1, 93, 22, 55, 55, 50, 18, 70, 49, 20, 52, 57, + 59, 27, 7, 94, 80, 41, 69, 50, 27, 10, 14, 15, 5, 68, 11, 30, 64, 57, 118, 0, + 1, 0, 67, 255, 243, 1, 206, 2, 107, 0, 44, 0, 209, 185, 0, 41, 255, 240, 179, 10, + 0, 77, 41, 184, 255, 224, 64, 49, 9, 0, 77, 28, 32, 10, 0, 77, 28, 40, 9, 0, + 77, 27, 8, 18, 0, 77, 27, 16, 17, 0, 77, 27, 40, 8, 0, 77, 23, 16, 17, 0, + 77, 23, 16, 10, 0, 77, 23, 24, 9, 0, 77, 23, 32, 8, 0, 77, 16, 184, 255, 216, + 180, 17, 18, 0, 76, 16, 184, 255, 224, 179, 16, 0, 77, 15, 184, 255, 248, 179, 16, 0, + 77, 8, 184, 255, 224, 179, 16, 0, 77, 4, 184, 255, 224, 179, 16, 0, 77, 4, 184, 255, + 240, 64, 47, 13, 15, 0, 76, 39, 30, 35, 30, 120, 44, 39, 20, 44, 39, 44, 44, 15, + 15, 38, 46, 35, 35, 6, 118, 0, 25, 1, 8, 25, 45, 35, 39, 121, 36, 44, 1, 124, + 30, 30, 36, 65, 14, 14, 9, 124, 20, 70, 0, 63, 237, 50, 47, 63, 57, 47, 237, 51, + 16, 237, 50, 1, 16, 214, 94, 93, 237, 51, 47, 16, 206, 50, 47, 50, 47, 135, 43, 135, + 125, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 1, 35, 34, 14, 2, 21, 20, 22, 51, 50, 62, 2, 55, 23, 14, 3, 35, 34, + 46, 2, 53, 52, 62, 2, 55, 46, 3, 39, 53, 33, 21, 33, 30, 3, 23, 1, 82, 17, + 34, 62, 48, 28, 81, 66, 21, 43, 37, 30, 9, 26, 9, 34, 44, 53, 27, 51, 84, 60, + 33, 29, 48, 63, 34, 22, 46, 44, 36, 12, 1, 105, 255, 0, 12, 36, 42, 43, 19, 1, + 41, 11, 29, 47, 36, 61, 55, 6, 10, 12, 5, 68, 5, 13, 11, 7, 22, 45, 70, 48, + 45, 64, 44, 25, 5, 27, 58, 56, 51, 20, 52, 70, 18, 50, 55, 55, 22, 0, 1, 0, + 63, 255, 91, 1, 194, 1, 208, 0, 40, 0, 175, 185, 0, 37, 255, 224, 64, 60, 9, 0, + 77, 24, 32, 10, 0, 77, 23, 16, 18, 0, 77, 23, 24, 17, 0, 77, 23, 16, 16, 0, + 77, 23, 40, 9, 0, 77, 23, 32, 8, 0, 77, 19, 16, 17, 18, 0, 76, 19, 24, 16, + 0, 77, 19, 24, 9, 0, 77, 19, 32, 8, 0, 77, 18, 24, 16, 0, 77, 8, 184, 255, + 232, 179, 15, 0, 77, 4, 184, 255, 240, 64, 46, 15, 0, 77, 35, 26, 31, 26, 129, 40, + 35, 20, 40, 35, 40, 40, 13, 13, 34, 42, 31, 31, 6, 130, 0, 21, 1, 8, 21, 41, + 31, 35, 133, 32, 40, 1, 137, 26, 26, 32, 73, 12, 12, 9, 137, 16, 75, 0, 63, 237, + 50, 47, 63, 57, 47, 237, 51, 16, 237, 50, 1, 16, 214, 94, 93, 237, 51, 47, 16, 206, + 50, 47, 50, 47, 135, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 37, 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 23, 6, + 6, 35, 34, 46, 2, 53, 52, 62, 2, 55, 46, 3, 39, 53, 33, 21, 35, 30, 3, 23, + 1, 84, 15, 34, 66, 51, 31, 81, 72, 43, 73, 20, 18, 22, 83, 49, 53, 86, 61, 33, + 29, 50, 66, 38, 22, 47, 44, 38, 12, 1, 91, 244, 11, 37, 42, 44, 20, 142, 9, 25, + 44, 35, 58, 67, 16, 10, 68, 11, 16, 24, 48, 73, 48, 44, 61, 41, 23, 5, 25, 58, + 58, 53, 20, 48, 69, 18, 50, 54, 55, 22, 0, 1, 0, 49, 255, 87, 1, 167, 1, 208, + 0, 44, 0, 148, 185, 0, 30, 255, 224, 180, 17, 18, 0, 76, 30, 184, 255, 208, 179, 13, + 0, 77, 25, 184, 255, 216, 64, 76, 10, 11, 0, 76, 12, 40, 18, 0, 77, 12, 56, 17, + 0, 77, 8, 32, 16, 0, 77, 2, 32, 12, 13, 0, 76, 4, 23, 1, 17, 23, 21, 23, + 129, 14, 17, 20, 14, 14, 17, 21, 21, 10, 130, 28, 46, 14, 14, 18, 38, 130, 0, 0, + 0, 18, 1, 8, 18, 45, 33, 17, 42, 14, 13, 134, 6, 42, 23, 23, 20, 42, 75, 21, + 17, 133, 20, 73, 0, 63, 237, 50, 63, 18, 57, 47, 18, 57, 237, 51, 17, 18, 57, 1, + 16, 198, 94, 93, 50, 47, 237, 17, 51, 47, 16, 222, 237, 51, 47, 135, 16, 43, 135, 125, + 196, 1, 93, 49, 48, 43, 43, 43, 43, 43, 43, 43, 23, 52, 62, 2, 55, 62, 3, 53, + 52, 38, 39, 53, 54, 54, 55, 35, 53, 33, 21, 6, 7, 30, 3, 21, 20, 14, 2, 7, + 14, 3, 21, 20, 22, 23, 7, 38, 38, 49, 20, 35, 45, 25, 32, 59, 46, 27, 78, 96, + 46, 74, 22, 244, 1, 89, 57, 97, 43, 64, 42, 21, 33, 58, 77, 45, 12, 31, 27, 18, + 6, 2, 65, 5, 11, 102, 29, 38, 24, 14, 6, 8, 13, 21, 34, 29, 40, 43, 2, 56, + 40, 74, 26, 69, 51, 74, 86, 6, 21, 34, 50, 35, 43, 53, 35, 20, 10, 3, 7, 14, + 21, 17, 14, 20, 5, 14, 11, 31, 0, 1, 0, 57, 0, 0, 1, 189, 2, 121, 0, 40, + 0, 194, 64, 22, 38, 16, 14, 0, 77, 38, 16, 8, 0, 77, 37, 24, 9, 0, 77, 29, + 24, 8, 9, 0, 76, 23, 184, 255, 232, 179, 14, 0, 77, 23, 184, 255, 240, 179, 13, 0, + 77, 20, 184, 255, 232, 179, 12, 0, 77, 20, 184, 255, 224, 180, 10, 11, 0, 76, 20, 184, + 255, 200, 179, 9, 0, 77, 20, 184, 255, 216, 64, 10, 8, 0, 77, 15, 24, 9, 10, 0, + 76, 10, 184, 255, 224, 64, 55, 17, 18, 0, 76, 6, 32, 17, 18, 0, 76, 24, 27, 21, + 31, 1, 39, 34, 4, 118, 21, 32, 32, 25, 25, 21, 42, 31, 118, 34, 40, 40, 13, 13, + 0, 34, 1, 8, 34, 41, 27, 39, 24, 1, 1, 18, 31, 121, 34, 68, 12, 12, 7, 124, + 18, 69, 0, 63, 237, 50, 47, 63, 237, 17, 57, 47, 51, 205, 50, 1, 16, 198, 94, 93, + 50, 47, 50, 47, 16, 237, 16, 206, 50, 47, 50, 47, 16, 237, 17, 57, 57, 17, 18, 57, + 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 51, 54, 54, + 53, 52, 38, 35, 34, 14, 2, 7, 39, 62, 3, 51, 50, 22, 21, 20, 6, 7, 51, 21, + 35, 7, 6, 6, 7, 33, 21, 33, 38, 62, 2, 55, 35, 93, 169, 32, 43, 60, 42, 30, + 45, 33, 23, 6, 41, 13, 33, 43, 55, 34, 92, 94, 29, 29, 77, 137, 50, 38, 53, 2, + 1, 29, 254, 137, 4, 18, 36, 49, 27, 103, 1, 66, 32, 64, 40, 54, 48, 14, 20, 19, + 6, 59, 13, 26, 21, 13, 86, 83, 38, 69, 35, 64, 52, 38, 69, 29, 70, 41, 71, 63, + 56, 27, 0, 1, 0, 40, 255, 243, 1, 186, 2, 107, 0, 37, 0, 154, 64, 24, 23, 24, + 17, 18, 0, 76, 23, 40, 13, 14, 0, 76, 11, 32, 17, 18, 0, 76, 10, 64, 16, 0, + 77, 6, 184, 255, 240, 179, 15, 0, 77, 5, 184, 255, 216, 179, 16, 0, 77, 5, 184, 255, + 224, 179, 15, 0, 77, 5, 184, 255, 224, 179, 8, 0, 77, 2, 184, 255, 232, 179, 16, 0, + 77, 2, 184, 255, 224, 179, 15, 0, 77, 2, 184, 255, 216, 64, 35, 8, 0, 77, 32, 32, + 20, 118, 3, 39, 33, 0, 118, 28, 25, 25, 11, 11, 29, 38, 33, 28, 121, 30, 25, 124, + 0, 0, 30, 65, 12, 12, 15, 124, 8, 70, 0, 63, 237, 50, 47, 63, 57, 47, 237, 16, + 237, 50, 1, 16, 198, 50, 47, 50, 47, 51, 237, 50, 16, 222, 237, 51, 47, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 22, 22, 21, 20, 14, 2, 35, 34, 38, + 39, 55, 22, 22, 51, 50, 62, 2, 53, 52, 46, 2, 35, 54, 54, 55, 35, 53, 33, 21, + 35, 14, 3, 186, 128, 128, 37, 61, 81, 43, 39, 80, 35, 15, 25, 70, 37, 28, 53, 41, + 25, 28, 60, 96, 69, 7, 9, 4, 87, 1, 121, 217, 1, 4, 4, 4, 1, 124, 3, 109, + 92, 50, 71, 46, 22, 16, 16, 70, 14, 17, 12, 27, 43, 31, 34, 53, 36, 19, 68, 111, + 57, 70, 70, 12, 46, 50, 47, 0, 1, 0, 58, 255, 245, 1, 180, 1, 208, 0, 35, 0, + 159, 185, 0, 34, 255, 232, 179, 19, 0, 77, 34, 184, 255, 224, 179, 12, 0, 77, 34, 184, + 255, 232, 179, 11, 0, 77, 34, 184, 255, 224, 180, 9, 10, 0, 76, 34, 184, 255, 232, 64, + 14, 8, 0, 77, 19, 80, 18, 0, 77, 19, 40, 17, 0, 77, 1, 184, 255, 224, 179, 19, + 0, 77, 1, 184, 255, 240, 179, 11, 0, 77, 1, 184, 255, 224, 179, 10, 0, 77, 1, 184, + 255, 232, 64, 36, 8, 9, 0, 76, 28, 28, 17, 130, 0, 37, 29, 30, 130, 24, 21, 21, + 8, 8, 25, 36, 20, 137, 30, 30, 14, 29, 24, 134, 26, 73, 9, 9, 14, 136, 3, 81, + 0, 63, 237, 50, 47, 63, 237, 50, 18, 57, 47, 237, 1, 16, 198, 50, 47, 50, 47, 51, + 237, 50, 16, 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 37, 20, 6, 35, 34, 46, 2, 39, 55, 30, 3, 51, 50, 54, 53, 52, 38, 35, 35, 54, + 54, 55, 35, 53, 33, 21, 35, 7, 51, 50, 30, 2, 1, 180, 104, 100, 25, 51, 44, 32, + 6, 15, 5, 28, 39, 46, 23, 57, 66, 91, 103, 45, 6, 9, 2, 73, 1, 103, 214, 10, + 19, 48, 82, 60, 34, 140, 67, 84, 6, 9, 8, 3, 70, 3, 8, 9, 6, 38, 43, 47, + 38, 51, 79, 43, 66, 66, 109, 16, 36, 57, 0, 1, 0, 62, 255, 245, 1, 206, 2, 96, + 0, 36, 0, 208, 64, 32, 26, 40, 18, 0, 77, 26, 24, 12, 0, 77, 17, 32, 17, 18, + 0, 76, 17, 40, 16, 0, 77, 17, 32, 15, 0, 77, 17, 40, 14, 0, 77, 12, 184, 255, + 240, 179, 12, 0, 77, 12, 184, 255, 232, 179, 11, 0, 77, 12, 184, 255, 224, 179, 10, 0, + 77, 12, 184, 255, 200, 179, 9, 0, 77, 12, 184, 255, 216, 179, 8, 0, 77, 9, 184, 255, + 208, 179, 18, 0, 77, 9, 184, 255, 224, 179, 17, 0, 77, 9, 184, 255, 208, 179, 13, 0, + 77, 8, 184, 255, 176, 179, 17, 0, 77, 8, 184, 255, 232, 179, 10, 0, 77, 7, 184, 255, + 248, 64, 40, 17, 0, 77, 0, 3, 127, 34, 31, 31, 32, 23, 130, 11, 2, 2, 11, 38, + 17, 17, 0, 32, 1, 8, 32, 37, 35, 36, 77, 3, 31, 133, 0, 34, 73, 18, 18, 21, + 136, 14, 81, 0, 63, 237, 50, 47, 63, 51, 237, 50, 63, 51, 1, 16, 198, 94, 93, 50, + 47, 16, 206, 50, 47, 16, 237, 17, 57, 47, 51, 237, 50, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 51, 21, 35, 21, 20, 30, 4, + 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 53, 52, 46, 4, 53, 53, 35, 53, + 51, 53, 55, 242, 188, 188, 33, 48, 58, 48, 33, 98, 106, 48, 80, 36, 16, 35, 77, 43, + 115, 33, 48, 58, 48, 33, 98, 98, 82, 1, 208, 69, 31, 37, 41, 25, 18, 30, 49, 43, + 63, 69, 16, 16, 75, 16, 21, 57, 27, 30, 20, 20, 36, 61, 52, 33, 69, 130, 14, 0, + 2, 0, 71, 255, 91, 1, 206, 1, 218, 0, 11, 0, 25, 0, 104, 185, 0, 25, 255, 232, + 64, 69, 8, 9, 0, 76, 10, 32, 17, 18, 0, 76, 10, 40, 15, 0, 77, 10, 16, 14, + 0, 77, 10, 8, 13, 0, 77, 9, 16, 10, 0, 77, 8, 32, 17, 18, 0, 76, 2, 40, + 16, 0, 77, 2, 24, 15, 0, 77, 0, 130, 12, 27, 7, 17, 127, 0, 19, 1, 8, 19, + 26, 3, 136, 23, 80, 7, 136, 17, 17, 19, 75, 0, 63, 51, 47, 237, 63, 237, 1, 16, + 214, 94, 93, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, + 52, 38, 35, 34, 6, 7, 17, 62, 3, 55, 20, 14, 2, 7, 21, 35, 17, 54, 54, 51, + 50, 22, 1, 121, 69, 63, 38, 40, 13, 39, 80, 64, 40, 85, 49, 84, 112, 63, 83, 29, + 87, 59, 101, 115, 1, 12, 62, 71, 10, 5, 254, 156, 15, 36, 54, 77, 54, 71, 101, 73, + 51, 20, 115, 2, 91, 11, 25, 111, 255, 255, 0, 212, 255, 91, 1, 33, 2, 187, 2, 6, + 0, 95, 0, 0, 255, 255, 0, 121, 255, 91, 1, 124, 2, 187, 2, 54, 0, 95, 165, 0, + 0, 6, 0, 95, 91, 0, 0, 0, 0, 1, 0, 35, 255, 91, 1, 208, 2, 187, 0, 19, + 0, 83, 64, 44, 17, 13, 12, 4, 8, 6, 2, 9, 127, 19, 15, 0, 12, 1, 12, 12, + 21, 20, 5, 16, 134, 19, 2, 19, 9, 12, 134, 15, 6, 15, 15, 19, 31, 19, 2, 8, + 19, 15, 19, 15, 11, 75, 0, 83, 0, 63, 63, 57, 57, 47, 47, 94, 93, 17, 51, 16, + 237, 50, 17, 51, 16, 237, 50, 1, 17, 18, 57, 47, 93, 51, 51, 253, 50, 50, 205, 50, + 16, 205, 50, 49, 48, 19, 51, 17, 51, 21, 35, 21, 51, 21, 35, 17, 35, 17, 35, 53, + 51, 53, 35, 53, 51, 211, 77, 176, 176, 176, 176, 77, 176, 176, 176, 176, 2, 187, 254, 202, + 66, 105, 66, 254, 195, 1, 61, 66, 105, 66, 255, 255, 0, 181, 255, 244, 1, 59, 2, 107, + 2, 6, 0, 4, 0, 0, 0, 4, 0, 27, 255, 251, 1, 243, 3, 49, 0, 5, 0, 23, + 0, 40, 0, 52, 0, 129, 64, 66, 46, 118, 29, 52, 115, 64, 38, 4, 4, 5, 2, 5, + 0, 0, 96, 5, 5, 6, 21, 21, 15, 11, 20, 15, 20, 126, 6, 11, 20, 6, 6, 11, + 15, 15, 12, 6, 6, 12, 44, 124, 34, 66, 49, 124, 24, 65, 6, 20, 121, 22, 64, 4, + 0, 0, 3, 1, 128, 2, 5, 22, 65, 15, 11, 121, 14, 68, 0, 63, 237, 50, 63, 222, + 50, 26, 205, 50, 50, 17, 51, 26, 16, 237, 50, 63, 237, 63, 237, 1, 47, 51, 47, 17, + 51, 47, 135, 16, 43, 135, 125, 196, 1, 17, 51, 24, 47, 18, 57, 25, 47, 26, 205, 24, + 47, 17, 51, 25, 16, 205, 24, 47, 47, 26, 237, 220, 237, 49, 48, 1, 55, 23, 55, 23, + 7, 23, 14, 3, 7, 51, 21, 35, 53, 62, 3, 55, 35, 53, 51, 37, 50, 30, 2, 21, + 20, 14, 2, 35, 34, 38, 39, 17, 54, 54, 19, 22, 50, 51, 50, 53, 52, 38, 35, 34, + 34, 7, 1, 13, 29, 86, 86, 29, 115, 95, 13, 32, 34, 31, 12, 122, 194, 17, 28, 27, + 30, 19, 99, 172, 254, 138, 45, 63, 40, 18, 11, 36, 66, 55, 17, 41, 18, 23, 37, 11, + 5, 8, 5, 83, 42, 43, 4, 7, 5, 3, 16, 33, 78, 78, 33, 121, 108, 44, 121, 132, + 133, 55, 70, 54, 73, 122, 115, 117, 68, 70, 6, 44, 82, 117, 73, 51, 110, 93, 60, 4, + 5, 2, 99, 6, 4, 253, 210, 1, 243, 125, 120, 1, 0, 4, 0, 27, 255, 251, 1, 253, + 2, 137, 0, 5, 0, 23, 0, 40, 0, 52, 0, 176, 64, 21, 48, 32, 16, 0, 77, 48, + 24, 15, 0, 77, 45, 40, 16, 0, 77, 45, 32, 15, 0, 77, 33, 184, 255, 208, 179, 18, + 0, 77, 33, 184, 255, 216, 179, 17, 0, 77, 26, 184, 255, 216, 179, 18, 0, 77, 26, 184, + 255, 232, 64, 63, 17, 0, 77, 46, 118, 29, 52, 115, 64, 38, 5, 3, 1, 96, 0, 0, + 6, 21, 21, 15, 11, 20, 15, 20, 132, 6, 11, 20, 6, 6, 11, 15, 12, 6, 6, 12, + 44, 124, 34, 66, 49, 124, 24, 65, 6, 20, 133, 22, 5, 1, 64, 4, 2, 128, 3, 0, + 22, 73, 15, 11, 133, 14, 76, 0, 63, 237, 50, 63, 222, 205, 26, 221, 50, 26, 205, 50, + 16, 237, 50, 63, 237, 63, 237, 1, 47, 51, 47, 16, 205, 135, 16, 43, 135, 125, 196, 1, + 17, 51, 24, 47, 18, 57, 25, 47, 26, 205, 51, 205, 24, 47, 26, 237, 220, 237, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 43, 1, 39, 55, 23, 55, 23, 7, 14, 3, 7, 51, 21, + 35, 53, 62, 3, 55, 35, 53, 51, 37, 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, + 17, 54, 54, 19, 22, 50, 51, 50, 53, 52, 38, 35, 34, 34, 7, 1, 157, 97, 30, 67, + 66, 30, 27, 9, 27, 30, 28, 10, 104, 172, 10, 28, 29, 29, 11, 98, 163, 254, 135, 45, + 63, 40, 18, 11, 36, 66, 55, 17, 41, 18, 23, 37, 11, 5, 8, 5, 83, 42, 43, 4, + 7, 5, 2, 12, 89, 36, 54, 54, 36, 211, 24, 76, 90, 97, 45, 70, 55, 40, 95, 93, + 84, 28, 69, 161, 44, 82, 117, 73, 51, 110, 93, 60, 4, 5, 2, 99, 6, 4, 253, 210, + 1, 243, 125, 120, 1, 0, 4, 0, 5, 255, 245, 1, 253, 2, 181, 0, 5, 0, 19, 0, + 38, 0, 56, 0, 153, 182, 32, 24, 10, 11, 0, 76, 16, 184, 255, 224, 179, 18, 0, 77, + 16, 184, 255, 240, 179, 17, 0, 77, 11, 184, 255, 232, 64, 67, 18, 0, 77, 5, 3, 1, + 96, 0, 0, 39, 54, 54, 48, 44, 53, 48, 53, 132, 39, 44, 20, 39, 39, 44, 48, 45, + 39, 39, 45, 38, 19, 127, 22, 14, 127, 30, 5, 1, 64, 4, 2, 128, 3, 0, 53, 133, + 55, 73, 48, 78, 44, 133, 47, 76, 39, 73, 9, 137, 35, 80, 17, 137, 25, 81, 20, 21, + 77, 0, 63, 51, 63, 237, 63, 237, 63, 63, 237, 63, 63, 237, 222, 205, 26, 221, 50, 26, + 205, 50, 1, 47, 237, 220, 237, 50, 47, 51, 47, 16, 205, 135, 16, 43, 135, 125, 196, 1, + 17, 51, 24, 47, 18, 57, 25, 47, 26, 205, 51, 205, 49, 48, 43, 43, 43, 43, 1, 39, + 55, 23, 55, 23, 5, 38, 38, 35, 34, 14, 2, 21, 20, 22, 51, 50, 55, 17, 55, 17, + 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 5, 14, 3, 7, 51, 21, + 35, 53, 62, 3, 55, 35, 53, 51, 1, 157, 97, 30, 67, 66, 30, 254, 191, 7, 28, 15, + 13, 22, 17, 9, 41, 28, 28, 14, 72, 17, 58, 39, 36, 53, 35, 17, 21, 34, 44, 23, + 20, 33, 8, 1, 47, 9, 27, 30, 28, 10, 104, 172, 10, 28, 29, 29, 11, 98, 163, 2, + 12, 89, 36, 54, 54, 36, 237, 13, 17, 16, 40, 67, 51, 97, 86, 7, 2, 111, 14, 253, + 88, 8, 16, 35, 65, 89, 54, 70, 93, 56, 24, 18, 10, 45, 24, 76, 90, 97, 45, 70, + 55, 40, 95, 93, 84, 28, 69, 0, 2, 0, 36, 0, 0, 1, 217, 2, 107, 0, 12, 0, + 18, 0, 41, 64, 21, 0, 5, 115, 8, 20, 13, 18, 115, 15, 19, 6, 16, 65, 18, 121, + 15, 68, 0, 124, 12, 68, 0, 63, 237, 63, 237, 63, 51, 1, 16, 214, 253, 205, 16, 222, + 253, 206, 49, 48, 37, 22, 62, 2, 53, 17, 51, 17, 20, 6, 35, 35, 39, 21, 35, 17, + 51, 17, 1, 37, 36, 40, 19, 3, 82, 68, 90, 22, 41, 216, 82, 69, 1, 15, 31, 46, + 31, 1, 172, 254, 47, 75, 79, 70, 70, 2, 107, 253, 219, 0, 3, 0, 54, 255, 89, 1, + 216, 2, 151, 0, 5, 0, 17, 0, 33, 0, 52, 64, 27, 15, 9, 9, 21, 28, 115, 31, + 35, 0, 5, 115, 2, 34, 12, 6, 29, 73, 25, 136, 18, 75, 3, 65, 5, 121, 2, 68, + 0, 63, 237, 63, 63, 237, 63, 222, 205, 1, 16, 214, 253, 205, 16, 222, 253, 204, 51, 47, + 205, 49, 48, 37, 21, 35, 17, 51, 17, 1, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, + 6, 3, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, 51, 17, 20, 6, 1, 40, 242, + 82, 1, 22, 23, 34, 34, 23, 25, 33, 33, 143, 11, 34, 11, 11, 9, 23, 10, 43, 37, + 82, 81, 70, 70, 2, 107, 253, 219, 1, 217, 32, 28, 27, 33, 33, 27, 28, 32, 253, 58, + 5, 5, 68, 3, 4, 53, 51, 1, 200, 254, 57, 90, 86, 0, 3, 0, 99, 255, 89, 1, + 162, 2, 181, 0, 11, 0, 23, 0, 39, 0, 54, 64, 28, 21, 15, 15, 27, 34, 127, 37, + 41, 11, 6, 127, 3, 40, 18, 12, 35, 73, 31, 136, 24, 75, 4, 5, 77, 11, 136, 0, + 81, 0, 63, 237, 63, 51, 63, 237, 63, 222, 205, 1, 16, 214, 253, 206, 16, 222, 253, 204, + 51, 47, 205, 49, 48, 23, 38, 38, 53, 17, 55, 17, 20, 30, 2, 23, 19, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 3, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, + 51, 17, 20, 6, 221, 67, 55, 82, 5, 12, 20, 15, 128, 23, 34, 34, 23, 24, 33, 33, + 142, 11, 34, 11, 10, 9, 23, 10, 43, 38, 82, 81, 9, 2, 62, 66, 2, 46, 14, 253, + 210, 21, 26, 16, 8, 3, 1, 226, 32, 28, 27, 33, 33, 27, 28, 32, 253, 58, 5, 5, + 68, 3, 4, 53, 51, 1, 200, 254, 57, 90, 86, 0, 2, 0, 36, 0, 0, 1, 217, 2, + 107, 0, 11, 0, 23, 0, 57, 64, 29, 0, 5, 8, 25, 22, 17, 18, 20, 23, 16, 12, + 15, 24, 17, 22, 68, 19, 65, 23, 16, 65, 14, 68, 0, 124, 11, 68, 6, 65, 0, 63, + 63, 237, 63, 63, 51, 63, 63, 51, 1, 16, 214, 205, 50, 50, 220, 205, 50, 50, 16, 222, + 221, 206, 49, 48, 37, 50, 62, 2, 53, 17, 51, 17, 20, 6, 35, 39, 21, 35, 17, 51, + 19, 39, 53, 51, 17, 35, 3, 1, 61, 31, 34, 17, 3, 71, 70, 86, 219, 62, 66, 119, + 9, 62, 66, 119, 69, 15, 30, 46, 31, 1, 172, 254, 47, 75, 79, 251, 251, 2, 107, 254, + 76, 183, 253, 253, 149, 1, 180, 0, 3, 0, 36, 255, 89, 1, 220, 2, 151, 0, 11, 0, + 26, 0, 38, 0, 115, 181, 38, 96, 18, 0, 77, 32, 184, 255, 160, 64, 60, 18, 0, 77, + 37, 31, 32, 31, 132, 38, 37, 20, 38, 38, 37, 32, 33, 36, 15, 15, 36, 64, 14, 19, + 72, 36, 21, 9, 131, 3, 3, 21, 115, 24, 40, 38, 28, 80, 29, 1, 29, 39, 32, 37, + 68, 34, 65, 38, 31, 65, 29, 68, 6, 138, 0, 22, 73, 18, 136, 12, 75, 0, 63, 237, + 63, 222, 237, 63, 63, 51, 63, 63, 51, 1, 16, 214, 93, 205, 50, 16, 222, 237, 50, 47, + 237, 16, 206, 43, 50, 47, 16, 205, 50, 135, 16, 43, 135, 125, 196, 49, 48, 0, 43, 43, + 1, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 3, 34, 38, 39, 55, 22, 51, 50, + 54, 53, 17, 51, 17, 20, 6, 1, 21, 35, 17, 51, 19, 39, 53, 51, 17, 35, 3, 1, + 163, 23, 34, 34, 23, 24, 33, 33, 138, 11, 34, 11, 11, 19, 23, 43, 39, 71, 72, 254, + 227, 62, 66, 119, 9, 62, 66, 119, 2, 31, 32, 28, 27, 33, 33, 27, 28, 32, 253, 58, + 5, 5, 68, 7, 53, 51, 1, 200, 254, 57, 90, 86, 1, 162, 251, 2, 107, 254, 76, 183, + 253, 253, 149, 1, 180, 0, 3, 0, 36, 255, 89, 1, 216, 2, 151, 0, 21, 0, 33, 0, + 49, 0, 77, 185, 0, 6, 255, 216, 64, 41, 9, 16, 0, 76, 31, 25, 25, 44, 37, 37, + 11, 127, 175, 8, 191, 8, 2, 8, 44, 127, 47, 51, 19, 127, 0, 50, 28, 22, 45, 73, + 41, 136, 34, 75, 10, 21, 76, 16, 136, 3, 80, 0, 63, 237, 63, 51, 63, 237, 63, 222, + 205, 1, 16, 214, 237, 16, 214, 253, 222, 93, 237, 50, 47, 17, 51, 47, 205, 49, 48, 43, + 19, 54, 54, 51, 50, 30, 2, 21, 17, 35, 17, 52, 46, 2, 35, 34, 6, 7, 17, 35, + 1, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 3, 34, 38, 39, 55, 22, 22, 51, + 50, 54, 53, 17, 51, 17, 20, 6, 36, 32, 63, 28, 32, 48, 33, 17, 75, 10, 16, 21, + 12, 8, 27, 9, 75, 1, 122, 23, 34, 34, 23, 25, 33, 33, 143, 11, 34, 11, 11, 9, + 28, 10, 43, 39, 75, 81, 1, 195, 11, 12, 13, 37, 69, 56, 254, 213, 1, 30, 39, 45, + 24, 7, 5, 4, 254, 120, 2, 31, 32, 28, 27, 33, 33, 27, 28, 32, 253, 58, 5, 5, + 68, 3, 4, 53, 51, 1, 200, 254, 57, 90, 86, 255, 255, 0, 9, 0, 0, 1, 235, 3, + 61, 2, 38, 0, 36, 0, 0, 1, 7, 1, 95, 0, 0, 0, 139, 0, 16, 64, 11, 2, + 0, 23, 27, 4, 15, 80, 2, 9, 28, 79, 43, 43, 52, 0, 0, 255, 255, 0, 58, 255, + 245, 1, 176, 2, 178, 2, 38, 0, 68, 0, 0, 1, 6, 1, 95, 0, 0, 0, 16, 64, + 11, 2, 5, 49, 53, 28, 19, 80, 2, 15, 54, 79, 43, 43, 52, 255, 255, 0, 89, 0, + 0, 1, 155, 3, 61, 2, 38, 0, 44, 0, 0, 1, 7, 1, 95, 0, 0, 0, 139, 0, + 16, 64, 11, 1, 0, 12, 16, 4, 2, 80, 1, 9, 17, 79, 43, 43, 52, 0, 0, 255, + 255, 0, 54, 255, 245, 1, 194, 2, 178, 2, 38, 1, 12, 0, 0, 1, 6, 1, 95, 221, + 0, 0, 19, 185, 0, 1, 255, 219, 64, 9, 22, 26, 1, 11, 80, 1, 2, 27, 79, 43, + 43, 52, 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 61, 2, 38, 0, 50, 0, 0, 1, + 7, 1, 95, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 32, 36, 0, 9, 80, 2, 4, + 37, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 178, 2, 38, 0, + 82, 0, 0, 1, 6, 1, 95, 0, 0, 0, 16, 64, 11, 2, 0, 32, 36, 9, 0, 80, + 2, 14, 37, 79, 43, 43, 52, 255, 255, 0, 48, 255, 243, 1, 196, 3, 61, 2, 38, 0, + 56, 0, 0, 1, 7, 1, 95, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 26, 30, 4, + 20, 80, 1, 6, 31, 79, 43, 43, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, + 178, 2, 38, 0, 88, 0, 0, 1, 6, 1, 95, 0, 0, 0, 16, 64, 11, 1, 1, 22, + 26, 7, 0, 80, 1, 9, 27, 79, 43, 43, 52, 0, 4, 0, 48, 255, 243, 1, 196, 3, + 61, 0, 11, 0, 23, 0, 27, 0, 53, 0, 87, 64, 49, 9, 128, 3, 144, 3, 2, 3, + 3, 27, 15, 21, 64, 16, 19, 72, 21, 64, 9, 12, 72, 21, 21, 26, 27, 26, 27, 26, + 33, 46, 115, 49, 55, 36, 115, 33, 54, 24, 27, 18, 6, 12, 0, 47, 34, 65, 41, 124, + 28, 70, 0, 63, 237, 63, 51, 222, 50, 221, 50, 222, 205, 1, 16, 214, 237, 16, 222, 237, + 18, 57, 57, 47, 47, 17, 51, 47, 43, 43, 205, 17, 51, 47, 93, 205, 49, 48, 19, 34, + 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, + 20, 6, 39, 51, 21, 35, 19, 34, 46, 2, 53, 17, 51, 17, 20, 30, 2, 51, 50, 62, + 2, 53, 17, 51, 17, 20, 14, 2, 160, 21, 27, 27, 21, 21, 27, 27, 159, 20, 28, 28, + 20, 20, 28, 28, 223, 226, 226, 113, 55, 77, 48, 22, 82, 17, 31, 44, 28, 28, 44, 31, + 17, 82, 22, 48, 77, 2, 135, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, + 23, 22, 27, 182, 57, 252, 239, 32, 58, 84, 52, 1, 130, 254, 135, 47, 63, 38, 16, 16, + 38, 63, 47, 1, 121, 254, 126, 52, 84, 58, 32, 255, 255, 0, 68, 255, 246, 1, 173, 2, + 204, 2, 38, 0, 88, 0, 0, 1, 6, 2, 167, 0, 0, 0, 30, 64, 21, 3, 2, 1, + 1, 24, 42, 7, 0, 80, 3, 9, 48, 79, 2, 9, 34, 79, 1, 9, 22, 79, 43, 43, + 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 48, 255, 243, 1, 196, 3, 62, 2, 38, 0, + 56, 0, 0, 1, 6, 2, 174, 0, 0, 0, 30, 64, 21, 3, 2, 1, 0, 44, 38, 4, + 20, 80, 3, 6, 42, 79, 2, 6, 30, 79, 1, 6, 27, 79, 43, 43, 43, 43, 52, 52, + 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, 251, 2, 38, 0, 88, 0, 0, 1, + 6, 2, 170, 0, 0, 0, 30, 64, 21, 3, 2, 1, 1, 24, 42, 7, 0, 80, 3, 9, + 48, 79, 2, 9, 34, 79, 1, 9, 22, 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 255, + 255, 0, 48, 255, 243, 1, 196, 3, 62, 2, 38, 0, 56, 0, 0, 1, 6, 2, 175, 0, + 0, 0, 30, 64, 21, 3, 2, 1, 0, 28, 46, 4, 20, 80, 3, 6, 55, 79, 2, 6, + 38, 79, 1, 6, 26, 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 68, 255, + 246, 1, 173, 2, 230, 2, 38, 0, 88, 0, 0, 1, 6, 2, 171, 0, 0, 0, 30, 64, + 21, 3, 2, 1, 1, 24, 42, 7, 0, 80, 3, 9, 51, 79, 2, 9, 34, 79, 1, 9, + 22, 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 48, 255, 243, 1, 196, 3, + 62, 2, 38, 0, 56, 0, 0, 1, 6, 2, 173, 0, 0, 0, 30, 64, 21, 3, 2, 1, + 0, 32, 50, 4, 20, 80, 3, 6, 42, 79, 2, 6, 30, 79, 1, 6, 28, 79, 43, 43, + 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, 251, 2, 38, 0, + 88, 0, 0, 1, 6, 2, 169, 0, 0, 0, 30, 64, 21, 3, 2, 1, 1, 24, 42, 7, + 0, 80, 3, 9, 48, 79, 2, 9, 34, 79, 1, 9, 22, 79, 43, 43, 43, 43, 52, 52, + 52, 0, 0, 0, 2, 0, 45, 255, 245, 1, 204, 1, 219, 0, 26, 0, 35, 0, 95, 185, + 0, 29, 255, 240, 64, 58, 15, 16, 0, 76, 9, 32, 16, 0, 77, 9, 32, 13, 14, 0, + 76, 2, 16, 19, 20, 0, 76, 1, 32, 18, 0, 77, 1, 24, 17, 0, 77, 35, 7, 130, + 22, 37, 14, 14, 3, 36, 27, 130, 4, 7, 134, 35, 35, 0, 13, 13, 10, 136, 17, 80, + 30, 136, 0, 81, 0, 63, 237, 63, 237, 50, 47, 17, 57, 47, 237, 1, 47, 237, 16, 198, + 50, 47, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 23, 34, 38, 53, 52, 52, + 55, 33, 38, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 39, + 6, 22, 51, 50, 62, 2, 55, 241, 94, 102, 1, 1, 71, 5, 80, 78, 44, 62, 16, 11, + 15, 78, 49, 60, 91, 60, 30, 38, 62, 79, 150, 1, 61, 51, 29, 45, 33, 19, 3, 11, + 117, 119, 5, 18, 7, 72, 75, 15, 7, 69, 8, 18, 37, 64, 89, 52, 62, 91, 61, 30, + 199, 57, 72, 22, 36, 47, 24, 0, 5, 0, 9, 0, 0, 1, 235, 3, 61, 0, 11, 0, + 23, 0, 27, 0, 43, 0, 50, 0, 137, 64, 70, 26, 26, 21, 15, 9, 30, 47, 45, 44, + 37, 31, 44, 31, 120, 32, 37, 20, 32, 32, 37, 29, 48, 44, 38, 28, 44, 28, 120, 43, + 38, 20, 43, 43, 38, 27, 27, 3, 9, 9, 44, 44, 32, 43, 52, 32, 51, 28, 43, 68, + 29, 30, 121, 48, 47, 47, 37, 32, 24, 27, 18, 6, 12, 0, 44, 38, 37, 65, 31, 32, + 68, 0, 63, 51, 63, 51, 51, 222, 50, 221, 50, 222, 205, 17, 18, 57, 47, 51, 237, 50, + 63, 51, 1, 16, 198, 16, 206, 17, 57, 17, 51, 47, 205, 50, 47, 135, 16, 43, 135, 125, + 196, 16, 196, 196, 135, 24, 16, 43, 135, 125, 196, 16, 14, 196, 5, 196, 196, 1, 24, 16, + 222, 205, 50, 47, 49, 48, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, + 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 51, 21, 35, 1, 39, 35, 7, 35, 62, + 3, 55, 51, 30, 3, 23, 3, 6, 6, 7, 51, 38, 38, 160, 21, 27, 27, 21, 21, 27, + 27, 159, 20, 28, 28, 20, 20, 28, 28, 223, 226, 226, 1, 11, 42, 229, 40, 84, 17, 42, + 49, 54, 30, 102, 29, 53, 47, 42, 17, 242, 23, 50, 24, 191, 23, 48, 2, 135, 27, 22, + 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 182, 57, 252, 252, 162, 162, + 66, 148, 154, 157, 74, 74, 157, 154, 148, 66, 2, 15, 63, 146, 88, 90, 147, 255, 255, 0, + 58, 255, 245, 1, 176, 2, 204, 2, 38, 0, 68, 0, 0, 1, 6, 2, 167, 0, 0, 0, + 30, 64, 21, 4, 3, 2, 5, 51, 69, 28, 19, 80, 4, 15, 75, 79, 3, 15, 61, 79, + 2, 15, 49, 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 0, 4, 0, 9, 0, 0, 1, + 235, 3, 61, 0, 15, 0, 22, 0, 34, 0, 38, 0, 127, 64, 64, 37, 38, 38, 32, 26, + 26, 2, 19, 17, 16, 9, 3, 16, 3, 120, 4, 9, 20, 4, 4, 9, 1, 20, 16, 10, + 0, 16, 0, 120, 15, 10, 20, 15, 15, 10, 16, 16, 4, 15, 40, 4, 39, 35, 38, 29, + 23, 9, 1, 2, 121, 20, 19, 19, 3, 16, 10, 9, 65, 4, 3, 68, 15, 0, 68, 0, + 63, 50, 63, 51, 63, 51, 51, 18, 57, 47, 51, 237, 50, 16, 222, 221, 222, 205, 1, 16, + 198, 16, 206, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, 16, 196, 196, 135, 24, 16, + 43, 135, 125, 196, 16, 14, 196, 5, 196, 196, 1, 51, 24, 47, 205, 51, 47, 205, 49, 48, + 33, 39, 35, 7, 35, 62, 3, 55, 51, 30, 3, 23, 3, 6, 6, 7, 51, 38, 38, 39, + 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 51, 21, 35, 1, 148, 42, 229, 40, + 84, 17, 42, 49, 54, 30, 102, 29, 53, 47, 42, 17, 242, 23, 50, 24, 191, 23, 48, 22, + 21, 28, 28, 21, 21, 28, 28, 134, 226, 226, 162, 162, 66, 148, 154, 157, 74, 74, 157, 154, + 148, 66, 2, 15, 63, 146, 88, 90, 147, 180, 27, 23, 23, 27, 27, 23, 23, 27, 182, 57, + 255, 255, 0, 58, 255, 245, 1, 176, 2, 204, 2, 38, 0, 68, 0, 0, 1, 6, 2, 168, + 0, 0, 0, 23, 64, 16, 3, 2, 5, 61, 62, 28, 19, 80, 3, 15, 63, 79, 2, 15, + 49, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 27, 0, 0, 1, 226, 3, 6, 2, 38, + 0, 161, 0, 0, 1, 7, 0, 138, 0, 89, 0, 139, 0, 16, 64, 11, 2, 84, 23, 24, + 4, 16, 80, 2, 7, 25, 79, 43, 43, 52, 0, 0, 255, 255, 0, 31, 255, 245, 1, 222, + 2, 123, 2, 38, 0, 193, 0, 0, 1, 6, 0, 138, 9, 0, 0, 16, 64, 11, 3, 4, + 76, 77, 33, 7, 80, 3, 0, 78, 79, 43, 43, 52, 0, 1, 0, 46, 255, 243, 1, 218, + 2, 121, 0, 45, 0, 193, 185, 0, 40, 255, 224, 179, 18, 0, 77, 40, 184, 255, 216, 179, + 17, 0, 77, 40, 184, 255, 240, 180, 11, 12, 0, 76, 39, 184, 255, 240, 179, 16, 0, 77, + 35, 184, 255, 248, 179, 16, 0, 77, 34, 184, 255, 232, 179, 18, 0, 77, 34, 184, 255, 240, + 179, 17, 0, 77, 34, 184, 255, 232, 179, 12, 0, 77, 34, 184, 255, 240, 179, 11, 0, 77, + 26, 184, 255, 232, 180, 15, 18, 0, 76, 26, 184, 255, 224, 179, 14, 0, 77, 26, 184, 255, + 232, 64, 49, 13, 0, 77, 15, 24, 14, 0, 77, 15, 16, 13, 0, 77, 3, 1, 0, 115, + 9, 28, 28, 7, 6, 9, 47, 37, 118, 18, 46, 29, 29, 32, 124, 23, 9, 1, 121, 2, + 6, 2, 4, 2, 4, 2, 23, 69, 42, 124, 13, 70, 0, 63, 237, 63, 57, 57, 47, 47, + 17, 51, 16, 237, 50, 16, 237, 50, 47, 1, 16, 214, 237, 16, 222, 50, 205, 51, 47, 16, + 253, 205, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, + 35, 53, 51, 53, 51, 21, 51, 21, 35, 21, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, + 51, 50, 30, 2, 23, 7, 38, 38, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, + 1, 91, 71, 71, 83, 44, 44, 19, 80, 52, 53, 85, 62, 33, 38, 64, 87, 49, 32, 48, + 34, 22, 6, 27, 21, 58, 32, 35, 58, 42, 23, 21, 40, 59, 38, 25, 27, 7, 174, 65, + 86, 86, 65, 159, 7, 21, 43, 82, 121, 77, 78, 120, 82, 43, 10, 14, 15, 4, 69, 18, + 23, 36, 66, 93, 57, 56, 92, 66, 37, 8, 4, 0, 2, 0, 40, 255, 88, 1, 226, 1, + 219, 0, 34, 0, 53, 0, 152, 185, 0, 48, 255, 240, 179, 14, 0, 77, 43, 184, 255, 232, + 179, 14, 0, 77, 43, 184, 255, 240, 179, 13, 0, 77, 43, 184, 255, 232, 64, 76, 12, 0, + 77, 32, 24, 17, 18, 0, 76, 32, 16, 16, 0, 77, 11, 24, 15, 16, 0, 76, 6, 24, + 15, 16, 0, 76, 5, 16, 17, 18, 0, 76, 5, 24, 15, 16, 0, 76, 38, 36, 35, 34, + 127, 19, 17, 21, 55, 45, 130, 8, 27, 27, 8, 54, 20, 35, 38, 17, 38, 50, 136, 3, + 38, 3, 38, 3, 13, 54, 31, 136, 24, 75, 42, 136, 13, 80, 0, 63, 237, 63, 237, 17, + 18, 57, 57, 47, 47, 16, 237, 17, 51, 16, 205, 50, 1, 16, 198, 50, 47, 16, 237, 16, + 222, 50, 206, 253, 50, 204, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, + 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 21, 51, 21, 35, 21, 20, + 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 53, 35, 53, 51, 53, 38, 38, 35, + 34, 6, 21, 20, 30, 2, 51, 50, 54, 55, 1, 73, 13, 54, 35, 39, 68, 51, 29, 27, + 53, 76, 50, 57, 80, 28, 71, 71, 104, 106, 42, 69, 26, 15, 25, 62, 37, 67, 59, 90, + 90, 12, 38, 32, 60, 62, 18, 30, 39, 22, 28, 51, 16, 43, 8, 18, 27, 55, 85, 58, + 51, 85, 62, 35, 17, 8, 175, 61, 178, 108, 96, 14, 10, 73, 11, 14, 58, 65, 187, 61, + 116, 4, 7, 88, 73, 40, 57, 37, 17, 18, 12, 255, 255, 0, 46, 255, 243, 1, 199, 3, + 61, 2, 38, 0, 42, 0, 0, 1, 7, 1, 95, 0, 54, 0, 139, 0, 16, 64, 11, 1, + 53, 38, 42, 9, 1, 80, 1, 14, 43, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, 255, + 88, 1, 173, 2, 178, 2, 38, 0, 74, 0, 0, 1, 6, 1, 95, 18, 0, 0, 16, 64, + 11, 2, 33, 46, 50, 7, 16, 80, 2, 12, 51, 79, 43, 43, 52, 255, 255, 0, 64, 0, + 0, 1, 235, 3, 61, 2, 38, 0, 46, 0, 0, 1, 7, 1, 95, 0, 0, 0, 139, 0, + 19, 185, 0, 1, 255, 229, 64, 9, 23, 27, 16, 8, 80, 1, 0, 28, 79, 43, 43, 52, + 0, 0, 0, 0, 2, 0, 43, 0, 0, 1, 222, 3, 62, 0, 22, 0, 28, 0, 133, 64, + 69, 6, 0, 5, 0, 129, 11, 6, 20, 11, 0, 20, 11, 6, 19, 16, 0, 20, 19, 20, + 0, 129, 16, 19, 20, 16, 19, 0, 16, 20, 20, 5, 30, 64, 28, 27, 23, 96, 25, 25, + 16, 11, 127, 0, 13, 1, 8, 13, 29, 11, 16, 5, 20, 73, 27, 23, 64, 26, 24, 128, + 25, 28, 14, 15, 77, 13, 74, 5, 6, 74, 0, 63, 51, 63, 63, 51, 222, 205, 26, 221, + 50, 26, 205, 50, 63, 18, 57, 57, 1, 16, 214, 94, 93, 237, 50, 50, 25, 47, 26, 205, + 205, 51, 26, 24, 16, 206, 50, 47, 16, 193, 135, 4, 43, 16, 0, 193, 135, 5, 125, 16, + 196, 135, 8, 24, 16, 43, 135, 5, 125, 196, 49, 48, 55, 30, 3, 23, 35, 46, 3, 39, + 21, 35, 17, 55, 17, 54, 54, 55, 51, 6, 6, 3, 55, 23, 55, 23, 7, 238, 27, 68, + 67, 60, 18, 98, 19, 56, 63, 63, 25, 83, 83, 55, 110, 44, 97, 43, 121, 253, 26, 84, + 84, 26, 110, 255, 20, 61, 70, 73, 31, 31, 65, 60, 50, 17, 223, 2, 137, 14, 254, 119, + 48, 95, 51, 51, 108, 1, 229, 40, 54, 54, 40, 85, 0, 2, 0, 29, 255, 89, 1, 216, + 2, 121, 0, 36, 0, 48, 0, 179, 185, 0, 47, 255, 240, 179, 14, 0, 77, 47, 184, 255, + 248, 64, 20, 13, 0, 77, 45, 24, 14, 0, 77, 45, 16, 13, 0, 77, 41, 16, 13, 14, + 0, 76, 39, 184, 255, 240, 180, 13, 14, 0, 76, 23, 184, 255, 216, 180, 8, 12, 0, 76, + 19, 184, 255, 232, 180, 8, 12, 0, 76, 18, 184, 255, 232, 179, 16, 0, 77, 18, 184, 255, + 240, 64, 63, 15, 0, 77, 14, 24, 15, 16, 0, 76, 13, 24, 8, 12, 0, 76, 8, 16, + 16, 0, 77, 8, 32, 15, 0, 77, 8, 24, 8, 12, 0, 76, 6, 3, 35, 26, 29, 29, + 37, 43, 118, 21, 50, 37, 118, 11, 64, 11, 16, 72, 11, 49, 31, 0, 49, 46, 124, 16, + 69, 40, 124, 26, 6, 70, 0, 63, 51, 237, 63, 237, 16, 220, 205, 1, 16, 214, 43, 237, + 16, 222, 237, 17, 57, 47, 51, 204, 205, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 5, 34, 38, 53, 52, 54, 55, 46, 3, 53, 52, 62, 2, + 51, 50, 30, 2, 21, 20, 6, 7, 14, 3, 21, 20, 51, 50, 54, 55, 23, 6, 3, 20, + 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 1, 36, 51, 47, 33, 17, 48, 80, 56, 31, + 32, 59, 81, 50, 49, 81, 59, 32, 55, 47, 9, 33, 32, 24, 36, 6, 20, 11, 6, 22, + 216, 67, 69, 70, 69, 69, 70, 69, 67, 167, 36, 32, 23, 46, 17, 1, 40, 80, 120, 82, + 83, 122, 79, 39, 39, 79, 122, 83, 110, 140, 36, 7, 24, 30, 32, 14, 26, 3, 3, 54, + 10, 1, 221, 122, 130, 130, 122, 122, 130, 130, 0, 2, 0, 40, 255, 89, 1, 204, 1, 219, + 0, 39, 0, 51, 0, 198, 64, 12, 50, 32, 15, 16, 0, 76, 50, 24, 14, 0, 77, 48, + 184, 255, 224, 180, 15, 16, 0, 76, 48, 184, 255, 232, 179, 14, 0, 77, 44, 184, 255, 224, + 180, 15, 16, 0, 76, 44, 184, 255, 240, 64, 19, 14, 0, 77, 42, 40, 16, 0, 77, 42, + 32, 15, 0, 77, 42, 16, 14, 0, 77, 26, 184, 255, 240, 180, 17, 18, 0, 76, 26, 184, + 255, 216, 179, 10, 0, 77, 25, 184, 255, 224, 180, 8, 9, 0, 76, 21, 184, 255, 232, 64, + 11, 8, 9, 0, 76, 15, 24, 8, 9, 0, 76, 11, 184, 255, 240, 64, 43, 16, 0, 77, + 10, 24, 8, 9, 0, 76, 8, 3, 32, 38, 38, 28, 32, 32, 46, 40, 130, 23, 53, 46, + 130, 13, 64, 9, 12, 72, 13, 52, 34, 0, 52, 43, 136, 18, 80, 49, 136, 28, 8, 81, + 0, 63, 51, 237, 63, 237, 16, 220, 205, 1, 16, 214, 43, 237, 16, 222, 237, 17, 57, 47, + 51, 51, 47, 16, 205, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 5, 34, 38, 53, 52, 54, 55, 54, 55, 46, 3, 53, 52, 62, 2, 51, + 50, 30, 2, 21, 20, 6, 7, 6, 6, 7, 6, 6, 21, 20, 51, 50, 54, 55, 23, 6, + 19, 52, 38, 35, 34, 6, 21, 20, 22, 51, 50, 54, 1, 22, 51, 48, 23, 16, 8, 8, + 42, 71, 52, 29, 31, 56, 77, 45, 46, 78, 56, 31, 52, 45, 23, 37, 18, 13, 14, 36, + 6, 20, 10, 7, 23, 61, 68, 58, 57, 67, 67, 57, 58, 68, 167, 36, 32, 21, 37, 17, + 8, 6, 3, 38, 63, 86, 52, 55, 90, 63, 35, 35, 63, 90, 55, 72, 107, 31, 14, 24, + 19, 14, 21, 13, 26, 3, 3, 54, 10, 1, 143, 79, 91, 91, 79, 78, 91, 91, 255, 255, + 0, 29, 255, 89, 1, 216, 3, 6, 2, 38, 2, 66, 0, 0, 1, 7, 0, 138, 0, 0, + 0, 139, 0, 16, 64, 11, 2, 0, 49, 50, 10, 20, 80, 2, 15, 51, 79, 43, 43, 52, + 0, 0, 255, 255, 0, 40, 255, 89, 1, 204, 2, 123, 2, 38, 2, 67, 0, 0, 1, 6, + 0, 138, 0, 0, 0, 16, 64, 11, 2, 0, 52, 53, 12, 22, 80, 2, 17, 54, 79, 43, + 43, 52, 255, 255, 0, 24, 255, 243, 1, 207, 3, 61, 2, 38, 2, 15, 0, 0, 1, 7, + 1, 95, 0, 0, 0, 139, 0, 16, 64, 11, 1, 6, 38, 42, 27, 16, 80, 1, 7, 43, + 79, 43, 43, 52, 0, 0, 255, 255, 0, 44, 255, 91, 1, 175, 2, 178, 2, 38, 2, 163, + 0, 0, 1, 6, 1, 95, 0, 0, 0, 16, 64, 11, 1, 12, 41, 45, 27, 18, 80, 1, + 7, 46, 79, 43, 43, 52, 255, 255, 0, 71, 255, 86, 1, 151, 2, 178, 2, 38, 1, 93, + 0, 0, 1, 6, 1, 95, 36, 0, 0, 16, 64, 11, 1, 58, 20, 24, 11, 2, 80, 1, + 1, 25, 79, 43, 43, 52, 0, 3, 0, 27, 255, 251, 1, 223, 2, 113, 0, 17, 0, 34, + 0, 46, 0, 140, 64, 11, 42, 24, 15, 0, 77, 39, 24, 15, 0, 77, 26, 184, 255, 224, + 179, 18, 0, 77, 26, 184, 255, 232, 179, 17, 0, 77, 26, 184, 255, 224, 179, 16, 0, 77, + 20, 184, 255, 232, 179, 18, 0, 77, 20, 184, 255, 224, 64, 49, 16, 17, 0, 76, 40, 118, + 31, 23, 1, 23, 45, 115, 32, 5, 14, 9, 14, 126, 0, 5, 20, 0, 0, 5, 15, 15, + 9, 6, 0, 0, 6, 38, 124, 28, 66, 43, 124, 18, 65, 0, 14, 121, 17, 65, 9, 5, + 121, 8, 68, 0, 63, 237, 50, 63, 237, 50, 63, 237, 63, 237, 1, 47, 51, 47, 16, 205, + 50, 47, 135, 16, 43, 135, 125, 196, 1, 24, 47, 237, 220, 93, 237, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 1, 14, 3, 7, 51, 21, 35, 53, 62, 3, 55, 35, 53, 51, 37, 50, + 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 17, 54, 54, 19, 22, 50, 51, 50, 53, 52, + 38, 35, 34, 34, 7, 1, 223, 13, 32, 34, 31, 12, 122, 194, 17, 28, 27, 30, 19, 99, + 172, 254, 138, 45, 63, 40, 18, 11, 36, 66, 55, 17, 41, 18, 23, 37, 11, 5, 8, 5, + 83, 42, 43, 4, 7, 5, 2, 43, 44, 121, 132, 133, 55, 70, 54, 73, 122, 115, 117, 68, + 70, 6, 44, 82, 117, 73, 51, 110, 93, 60, 4, 5, 2, 99, 6, 4, 253, 210, 1, 243, + 125, 120, 1, 0, 3, 0, 27, 255, 251, 1, 226, 2, 113, 0, 17, 0, 34, 0, 46, 0, + 124, 64, 13, 42, 24, 14, 15, 0, 76, 39, 24, 14, 15, 0, 76, 26, 184, 255, 224, 180, + 16, 18, 0, 76, 20, 184, 255, 224, 64, 55, 16, 18, 0, 76, 40, 118, 47, 23, 111, 23, + 2, 23, 46, 115, 32, 5, 14, 9, 14, 132, 0, 5, 20, 0, 0, 5, 15, 15, 0, 9, + 1, 8, 9, 6, 0, 0, 6, 38, 124, 28, 66, 43, 124, 18, 65, 0, 14, 133, 17, 73, + 9, 5, 133, 8, 76, 0, 63, 237, 50, 63, 237, 50, 63, 237, 63, 237, 1, 47, 51, 47, + 16, 205, 94, 93, 50, 47, 135, 16, 43, 135, 125, 196, 1, 24, 47, 237, 220, 93, 237, 49, + 48, 43, 43, 43, 43, 1, 14, 3, 7, 51, 21, 35, 53, 62, 3, 55, 35, 53, 51, 37, + 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 17, 54, 54, 19, 22, 50, 51, 50, 53, + 52, 38, 35, 34, 34, 7, 1, 226, 9, 27, 30, 28, 10, 104, 172, 10, 28, 29, 29, 11, + 98, 163, 254, 135, 45, 63, 40, 18, 11, 36, 66, 55, 17, 41, 18, 23, 37, 11, 5, 8, + 5, 83, 42, 43, 4, 7, 5, 1, 146, 24, 76, 90, 97, 45, 70, 55, 40, 95, 93, 84, + 28, 69, 161, 44, 82, 117, 73, 51, 110, 93, 60, 4, 5, 2, 99, 6, 4, 253, 210, 1, + 243, 125, 120, 1, 0, 3, 0, 5, 255, 245, 1, 235, 2, 181, 0, 13, 0, 32, 0, 50, + 0, 123, 182, 27, 16, 10, 11, 0, 76, 10, 184, 255, 216, 179, 18, 0, 77, 10, 184, 255, + 240, 179, 17, 0, 77, 5, 184, 255, 240, 64, 53, 18, 0, 77, 38, 47, 42, 47, 132, 33, + 38, 20, 33, 33, 38, 48, 48, 0, 42, 1, 8, 42, 39, 33, 33, 39, 32, 0, 127, 15, + 8, 130, 24, 33, 47, 133, 49, 73, 42, 38, 133, 41, 76, 3, 137, 29, 80, 11, 137, 19, + 81, 14, 15, 77, 0, 63, 51, 63, 237, 63, 237, 63, 237, 50, 63, 237, 50, 1, 47, 237, + 220, 253, 192, 47, 51, 47, 16, 205, 94, 93, 50, 47, 135, 16, 43, 135, 125, 196, 49, 48, + 1, 43, 43, 43, 43, 19, 38, 38, 35, 34, 14, 2, 21, 20, 22, 51, 50, 55, 17, 55, + 17, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 22, 23, 5, 14, 3, 7, 51, + 21, 35, 53, 62, 3, 55, 35, 53, 51, 188, 7, 28, 15, 13, 22, 17, 9, 41, 28, 28, + 14, 72, 17, 58, 39, 36, 53, 35, 17, 21, 34, 44, 23, 20, 33, 8, 1, 47, 9, 27, + 30, 28, 10, 104, 172, 10, 28, 29, 29, 11, 98, 163, 1, 120, 13, 17, 16, 40, 67, 51, + 97, 86, 7, 2, 111, 14, 253, 88, 8, 16, 35, 65, 89, 54, 70, 93, 56, 24, 18, 10, + 45, 24, 76, 90, 97, 45, 70, 55, 40, 95, 93, 84, 28, 69, 255, 255, 0, 46, 255, 243, + 1, 199, 3, 62, 2, 38, 0, 42, 0, 0, 1, 7, 0, 143, 0, 56, 0, 137, 0, 16, + 64, 11, 1, 59, 40, 38, 9, 1, 80, 1, 14, 39, 79, 43, 43, 52, 0, 0, 255, 255, + 0, 40, 255, 88, 1, 173, 2, 181, 2, 38, 0, 74, 0, 0, 1, 6, 0, 143, 41, 0, + 0, 16, 64, 11, 2, 60, 48, 46, 7, 16, 80, 2, 12, 47, 79, 43, 43, 52, 0, 1, + 0, 36, 255, 243, 1, 210, 2, 107, 0, 33, 0, 72, 182, 23, 32, 10, 16, 0, 76, 18, + 184, 255, 232, 64, 33, 10, 16, 0, 76, 32, 28, 115, 29, 33, 2, 115, 26, 26, 29, 12, + 115, 15, 27, 121, 32, 32, 29, 0, 30, 65, 29, 68, 7, 124, 20, 70, 13, 73, 0, 63, + 63, 237, 63, 63, 51, 18, 57, 47, 237, 1, 47, 237, 47, 57, 47, 237, 51, 16, 237, 50, + 49, 48, 43, 43, 19, 51, 17, 20, 30, 2, 51, 50, 62, 2, 53, 17, 51, 17, 20, 14, + 2, 35, 34, 46, 2, 53, 53, 35, 17, 35, 17, 51, 17, 51, 216, 79, 5, 11, 17, 12, + 12, 18, 12, 6, 78, 11, 28, 49, 38, 38, 48, 28, 10, 102, 78, 78, 102, 2, 107, 254, + 89, 43, 55, 31, 11, 11, 31, 55, 43, 1, 12, 254, 244, 50, 77, 54, 28, 28, 54, 77, + 50, 92, 254, 224, 2, 107, 254, 251, 0, 2, 0, 73, 255, 91, 1, 205, 2, 113, 0, 13, + 0, 25, 0, 108, 64, 21, 21, 48, 15, 0, 77, 21, 24, 14, 0, 77, 17, 16, 18, 0, + 77, 17, 8, 17, 0, 77, 7, 184, 255, 224, 179, 16, 0, 77, 7, 184, 255, 240, 179, 10, + 0, 77, 7, 184, 255, 232, 180, 8, 9, 0, 76, 6, 184, 255, 232, 64, 27, 16, 0, 77, + 19, 118, 8, 27, 14, 13, 115, 0, 1, 1, 8, 1, 26, 14, 124, 13, 68, 25, 22, 124, + 2, 5, 65, 1, 0, 47, 63, 51, 237, 50, 63, 237, 1, 16, 214, 94, 93, 237, 50, 16, + 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 23, 35, 17, 54, 54, 51, 50, 22, + 21, 20, 14, 2, 7, 53, 62, 3, 53, 52, 38, 35, 34, 6, 7, 155, 82, 29, 90, 52, + 106, 111, 47, 83, 112, 64, 45, 81, 61, 35, 73, 59, 33, 45, 12, 165, 2, 237, 13, 28, + 116, 113, 78, 121, 95, 72, 29, 78, 25, 55, 74, 98, 68, 73, 82, 13, 5, 255, 255, 0, + 55, 0, 0, 1, 189, 3, 62, 2, 38, 0, 49, 0, 0, 1, 7, 0, 67, 0, 0, 0, + 137, 0, 19, 185, 0, 1, 255, 253, 64, 9, 21, 19, 7, 16, 80, 1, 8, 20, 79, 43, + 43, 52, 0, 0, 0, 255, 255, 0, 71, 0, 0, 1, 176, 2, 181, 2, 38, 0, 81, 0, + 0, 1, 6, 0, 67, 243, 0, 0, 19, 185, 0, 1, 255, 238, 64, 9, 23, 21, 0, 5, + 80, 1, 2, 22, 79, 43, 43, 52, 0, 0, 4, 0, 9, 0, 0, 1, 235, 3, 62, 0, + 25, 0, 32, 0, 44, 0, 48, 0, 153, 185, 0, 25, 255, 216, 64, 79, 8, 17, 0, 76, + 21, 40, 8, 17, 0, 76, 0, 33, 39, 45, 47, 47, 20, 39, 39, 10, 29, 27, 26, 17, + 11, 26, 11, 120, 12, 17, 20, 12, 12, 17, 30, 9, 8, 2, 8, 26, 8, 120, 7, 2, + 20, 7, 2, 26, 12, 7, 50, 12, 49, 45, 48, 47, 46, 46, 23, 36, 42, 9, 10, 121, + 30, 29, 29, 12, 42, 42, 26, 2, 17, 11, 12, 68, 8, 7, 68, 0, 63, 51, 63, 51, + 47, 51, 51, 51, 47, 18, 57, 47, 51, 237, 50, 16, 222, 205, 50, 47, 205, 221, 205, 1, + 16, 198, 16, 222, 17, 57, 135, 43, 135, 125, 196, 16, 196, 196, 135, 24, 16, 43, 135, 125, + 196, 16, 14, 196, 5, 196, 196, 1, 51, 24, 47, 205, 50, 47, 205, 16, 222, 205, 49, 48, + 43, 43, 1, 20, 7, 30, 3, 23, 35, 39, 35, 7, 35, 62, 3, 55, 38, 38, 53, 52, + 54, 51, 50, 22, 7, 6, 6, 7, 51, 38, 38, 55, 52, 38, 35, 34, 6, 21, 20, 22, + 51, 50, 54, 55, 7, 39, 55, 1, 78, 23, 24, 49, 48, 42, 17, 87, 37, 238, 36, 84, + 16, 43, 49, 50, 24, 11, 12, 48, 35, 33, 50, 85, 23, 50, 28, 200, 26, 50, 22, 25, + 18, 18, 25, 25, 18, 18, 25, 41, 140, 19, 134, 2, 110, 35, 23, 57, 144, 152, 149, 62, + 162, 162, 62, 150, 152, 142, 56, 11, 30, 19, 38, 44, 44, 123, 63, 149, 95, 94, 153, 145, + 21, 23, 23, 21, 21, 24, 24, 164, 44, 49, 60, 255, 255, 0, 58, 255, 245, 1, 176, 3, + 45, 2, 38, 0, 68, 0, 0, 1, 6, 2, 166, 0, 0, 0, 15, 64, 9, 4, 3, 2, + 5, 58, 49, 28, 19, 80, 43, 52, 52, 52, 0, 255, 255, 0, 27, 0, 0, 1, 226, 3, + 62, 2, 38, 0, 161, 0, 0, 1, 7, 0, 143, 0, 101, 0, 137, 0, 16, 64, 11, 2, + 100, 25, 23, 4, 16, 80, 2, 7, 24, 79, 43, 43, 52, 0, 0, 255, 255, 0, 31, 255, + 245, 1, 222, 2, 181, 2, 38, 0, 193, 0, 0, 1, 6, 0, 143, 34, 0, 0, 16, 64, + 11, 3, 33, 78, 76, 33, 7, 80, 3, 0, 77, 79, 43, 43, 52, 255, 255, 0, 29, 255, + 223, 1, 216, 3, 62, 2, 38, 0, 179, 0, 0, 1, 7, 0, 143, 0, 21, 0, 137, 0, + 16, 64, 11, 3, 24, 48, 46, 0, 12, 80, 3, 8, 47, 79, 43, 43, 52, 0, 0, 255, + 255, 0, 40, 255, 224, 1, 204, 2, 181, 2, 38, 0, 211, 0, 0, 1, 6, 0, 143, 23, + 0, 0, 16, 64, 11, 3, 27, 49, 47, 3, 16, 80, 3, 12, 48, 79, 43, 43, 52, 255, + 255, 0, 9, 0, 0, 1, 235, 3, 62, 2, 38, 0, 36, 0, 0, 1, 7, 2, 165, 0, + 0, 0, 137, 0, 23, 64, 16, 3, 2, 0, 30, 24, 4, 15, 80, 3, 9, 29, 79, 2, + 9, 25, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, + 181, 2, 38, 0, 68, 0, 0, 1, 6, 2, 165, 0, 0, 0, 23, 64, 16, 3, 2, 5, + 56, 50, 28, 19, 80, 3, 15, 55, 79, 2, 15, 51, 79, 43, 43, 43, 52, 52, 0, 255, + 255, 0, 9, 0, 0, 1, 235, 3, 40, 2, 38, 0, 36, 0, 0, 1, 7, 2, 164, 0, + 0, 0, 139, 0, 16, 64, 11, 2, 0, 41, 27, 4, 15, 80, 2, 9, 28, 79, 43, 43, + 52, 0, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, 157, 2, 38, 0, 68, 0, 0, 1, + 6, 2, 164, 0, 0, 0, 16, 64, 11, 2, 5, 67, 53, 28, 19, 80, 2, 15, 54, 79, + 43, 43, 52, 255, 255, 0, 91, 0, 0, 1, 204, 3, 62, 2, 38, 0, 40, 0, 0, 1, + 7, 2, 165, 0, 0, 0, 137, 0, 26, 177, 2, 1, 184, 255, 231, 64, 13, 19, 13, 0, + 10, 80, 2, 1, 18, 79, 1, 1, 14, 79, 43, 43, 43, 52, 52, 255, 255, 0, 40, 255, + 245, 1, 199, 2, 181, 2, 38, 0, 72, 0, 0, 1, 6, 2, 165, 0, 0, 0, 23, 64, + 16, 3, 2, 2, 41, 35, 19, 2, 80, 3, 0, 40, 79, 2, 0, 36, 79, 43, 43, 43, + 52, 52, 0, 255, 255, 0, 91, 0, 0, 1, 204, 3, 40, 2, 38, 0, 40, 0, 0, 1, + 7, 2, 164, 0, 27, 0, 139, 0, 16, 64, 11, 1, 1, 30, 16, 0, 10, 80, 1, 1, + 17, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, 255, 245, 1, 199, 2, 157, 2, 38, 0, + 72, 0, 0, 1, 6, 2, 164, 18, 0, 0, 16, 64, 11, 2, 20, 52, 38, 19, 2, 80, + 2, 0, 39, 79, 43, 43, 52, 255, 255, 0, 83, 0, 0, 1, 155, 3, 62, 2, 38, 0, + 44, 0, 0, 1, 7, 2, 165, 255, 239, 0, 137, 0, 26, 177, 2, 1, 184, 255, 239, 64, + 13, 19, 13, 4, 2, 80, 2, 9, 18, 79, 1, 9, 14, 79, 43, 43, 43, 52, 52, 255, + 255, 0, 47, 255, 245, 1, 194, 2, 181, 2, 38, 1, 12, 0, 0, 1, 6, 2, 165, 203, + 0, 0, 26, 177, 2, 1, 184, 255, 201, 64, 13, 29, 23, 1, 11, 80, 2, 2, 28, 79, + 1, 2, 24, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, + 40, 2, 38, 0, 44, 0, 0, 1, 7, 2, 164, 0, 0, 0, 139, 0, 16, 64, 11, 1, + 0, 30, 16, 4, 2, 80, 1, 9, 17, 79, 43, 43, 52, 0, 0, 255, 255, 0, 54, 255, + 245, 1, 194, 2, 157, 2, 38, 1, 12, 0, 0, 1, 6, 2, 164, 221, 0, 0, 19, 185, + 0, 1, 255, 219, 64, 9, 40, 26, 1, 11, 80, 1, 2, 27, 79, 43, 43, 52, 0, 255, + 255, 0, 29, 255, 243, 1, 216, 3, 62, 2, 38, 0, 50, 0, 0, 1, 7, 2, 165, 255, + 239, 0, 137, 0, 26, 177, 3, 2, 184, 255, 239, 64, 13, 39, 33, 0, 9, 80, 3, 4, + 38, 79, 2, 4, 34, 79, 43, 43, 43, 52, 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, + 181, 2, 38, 0, 82, 0, 0, 1, 6, 2, 165, 239, 0, 0, 26, 177, 3, 2, 184, 255, + 239, 64, 13, 39, 33, 9, 0, 80, 3, 14, 38, 79, 2, 14, 34, 79, 43, 43, 43, 52, + 52, 0, 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 40, 2, 38, 0, 50, 0, 0, 1, + 7, 2, 164, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 50, 36, 0, 9, 80, 2, 4, + 37, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 157, 2, 38, 0, + 82, 0, 0, 1, 6, 2, 164, 0, 0, 0, 16, 64, 11, 2, 0, 50, 36, 9, 0, 80, + 2, 14, 37, 79, 43, 43, 52, 255, 255, 0, 55, 0, 0, 1, 207, 3, 62, 2, 38, 0, + 53, 0, 0, 1, 7, 2, 165, 255, 230, 0, 137, 0, 26, 177, 3, 2, 184, 255, 221, 64, + 13, 49, 43, 18, 8, 80, 3, 23, 48, 79, 2, 23, 44, 79, 43, 43, 43, 52, 52, 255, + 255, 0, 83, 0, 0, 1, 182, 2, 181, 2, 38, 0, 85, 0, 0, 1, 6, 2, 165, 239, + 0, 0, 26, 177, 2, 1, 184, 255, 217, 64, 13, 21, 15, 0, 6, 80, 2, 2, 20, 79, + 1, 2, 16, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 55, 0, 0, 1, 207, 3, + 40, 2, 38, 0, 53, 0, 0, 1, 7, 2, 164, 255, 230, 0, 139, 0, 19, 185, 0, 2, + 255, 221, 64, 9, 60, 46, 18, 8, 80, 2, 23, 47, 79, 43, 43, 52, 0, 0, 0, 255, + 255, 0, 107, 0, 0, 1, 182, 2, 157, 2, 38, 0, 85, 0, 0, 1, 6, 2, 164, 27, + 0, 0, 16, 64, 11, 1, 4, 32, 18, 0, 6, 80, 1, 2, 19, 79, 43, 43, 52, 255, + 255, 0, 48, 255, 243, 1, 196, 3, 62, 2, 38, 0, 56, 0, 0, 1, 7, 2, 165, 255, + 248, 0, 137, 0, 26, 177, 2, 1, 184, 255, 248, 64, 13, 33, 27, 4, 20, 80, 2, 6, + 32, 79, 1, 6, 28, 79, 43, 43, 43, 52, 52, 255, 255, 0, 68, 255, 246, 1, 173, 2, + 181, 2, 38, 0, 88, 0, 0, 1, 6, 2, 165, 239, 0, 0, 26, 177, 2, 1, 184, 255, + 241, 64, 13, 29, 23, 7, 0, 80, 2, 9, 28, 79, 1, 9, 24, 79, 43, 43, 43, 52, + 52, 0, 0, 255, 255, 0, 48, 255, 243, 1, 196, 3, 40, 2, 38, 0, 56, 0, 0, 1, + 7, 2, 164, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 44, 30, 4, 20, 80, 1, 6, + 31, 79, 43, 43, 52, 0, 0, 255, 255, 0, 68, 255, 246, 1, 173, 2, 157, 2, 38, 0, + 88, 0, 0, 1, 6, 2, 164, 0, 0, 0, 16, 64, 11, 1, 1, 40, 26, 7, 0, 80, + 1, 9, 27, 79, 43, 43, 52, 0, 1, 0, 30, 255, 91, 1, 213, 2, 120, 0, 50, 0, + 191, 185, 0, 41, 255, 208, 179, 11, 0, 77, 40, 184, 255, 216, 179, 12, 0, 77, 38, 184, + 255, 224, 180, 14, 15, 0, 76, 37, 184, 255, 232, 179, 17, 0, 77, 37, 184, 255, 224, 179, + 16, 0, 77, 35, 184, 255, 240, 180, 14, 15, 0, 76, 31, 184, 255, 224, 64, 88, 8, 0, + 77, 26, 32, 18, 0, 77, 26, 40, 17, 0, 77, 26, 24, 16, 0, 77, 26, 32, 15, 0, + 77, 20, 40, 15, 0, 77, 20, 24, 14, 0, 77, 16, 32, 13, 0, 77, 16, 24, 12, 0, + 77, 16, 16, 11, 0, 77, 15, 24, 16, 0, 77, 7, 48, 13, 0, 77, 36, 18, 118, 33, + 33, 5, 118, 39, 52, 47, 47, 12, 12, 25, 51, 36, 11, 121, 12, 12, 28, 0, 124, 44, + 24, 24, 21, 124, 28, 69, 0, 63, 237, 50, 47, 47, 237, 17, 57, 47, 237, 57, 1, 16, + 198, 50, 47, 50, 47, 16, 222, 237, 51, 47, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 23, 50, 62, 2, 53, 52, 46, 2, + 35, 35, 53, 51, 50, 62, 2, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, + 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, 35, 34, 34, 39, 55, 22, 22, 87, 61, + 109, 81, 47, 42, 66, 81, 39, 34, 27, 46, 78, 56, 31, 73, 77, 53, 81, 20, 27, 23, + 99, 60, 50, 85, 61, 35, 61, 57, 68, 76, 63, 106, 137, 74, 10, 33, 10, 5, 8, 25, + 90, 15, 39, 66, 51, 45, 58, 34, 14, 68, 17, 33, 51, 34, 59, 67, 23, 11, 68, 14, + 23, 22, 48, 74, 52, 49, 90, 24, 20, 102, 64, 72, 96, 59, 25, 2, 75, 1, 1, 0, + 1, 0, 57, 255, 91, 1, 177, 1, 220, 0, 49, 0, 188, 64, 36, 34, 32, 16, 0, 77, + 34, 40, 15, 0, 77, 34, 16, 14, 0, 77, 26, 48, 16, 0, 77, 26, 32, 15, 0, 77, + 21, 24, 16, 0, 77, 21, 32, 12, 0, 77, 13, 184, 255, 224, 180, 14, 15, 0, 76, 13, + 184, 255, 232, 179, 13, 0, 77, 10, 184, 255, 216, 180, 17, 18, 0, 76, 6, 184, 255, 224, + 179, 18, 0, 77, 6, 184, 255, 232, 179, 17, 0, 77, 3, 184, 255, 216, 179, 18, 0, 77, + 3, 184, 255, 224, 179, 17, 0, 77, 3, 184, 255, 232, 180, 8, 10, 0, 76, 2, 184, 255, + 216, 64, 34, 17, 0, 77, 8, 36, 130, 5, 5, 24, 130, 11, 51, 31, 31, 17, 17, 45, + 50, 8, 30, 133, 31, 31, 0, 17, 137, 16, 75, 44, 44, 39, 136, 0, 80, 0, 63, 237, + 50, 47, 63, 237, 17, 57, 47, 237, 57, 1, 16, 198, 50, 47, 50, 47, 16, 222, 237, 51, + 47, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 19, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, 35, 39, 62, 5, 53, + 52, 46, 2, 35, 35, 53, 50, 62, 2, 53, 52, 38, 35, 34, 14, 2, 7, 39, 62, 3, + 209, 43, 75, 55, 31, 55, 44, 58, 61, 67, 107, 132, 64, 6, 25, 63, 65, 62, 48, 29, + 42, 61, 67, 25, 11, 36, 67, 52, 31, 63, 57, 23, 44, 37, 27, 6, 15, 8, 32, 42, + 47, 1, 220, 18, 38, 60, 43, 41, 71, 18, 13, 78, 48, 62, 82, 49, 20, 69, 1, 5, + 11, 19, 31, 44, 30, 33, 40, 21, 6, 69, 10, 24, 39, 29, 43, 47, 6, 8, 9, 3, + 72, 3, 8, 7, 6, 255, 255, 0, 45, 0, 0, 1, 199, 3, 61, 2, 38, 0, 43, 0, + 0, 1, 7, 1, 95, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 12, 16, 7, 1, 80, + 1, 0, 17, 79, 43, 43, 52, 0, 0, 0, 2, 0, 44, 0, 0, 1, 176, 3, 62, 0, + 21, 0, 27, 0, 128, 64, 21, 16, 32, 18, 0, 77, 16, 40, 17, 0, 77, 16, 24, 16, + 0, 77, 16, 16, 15, 0, 77, 9, 184, 255, 216, 179, 8, 0, 77, 8, 184, 255, 232, 179, + 10, 0, 77, 8, 184, 255, 216, 64, 41, 9, 0, 77, 13, 127, 12, 29, 64, 26, 24, 22, + 96, 27, 27, 3, 21, 127, 0, 0, 1, 8, 0, 28, 17, 136, 6, 80, 26, 22, 64, 25, + 23, 128, 24, 27, 1, 2, 77, 13, 0, 74, 0, 63, 50, 63, 51, 222, 205, 26, 221, 50, + 26, 205, 50, 63, 237, 1, 16, 214, 94, 93, 237, 50, 50, 25, 47, 26, 205, 51, 205, 26, + 24, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 51, 17, 55, 21, 54, 54, 51, + 50, 30, 2, 21, 17, 35, 53, 52, 38, 35, 34, 6, 7, 17, 3, 55, 23, 55, 23, 7, + 71, 83, 20, 50, 24, 53, 71, 42, 18, 82, 48, 62, 26, 49, 11, 110, 26, 84, 84, 26, + 110, 2, 137, 14, 206, 8, 9, 31, 56, 78, 47, 254, 250, 244, 86, 71, 11, 5, 254, 127, + 3, 22, 40, 54, 54, 40, 85, 0, 1, 0, 45, 255, 91, 1, 199, 2, 120, 0, 19, 0, + 59, 185, 0, 17, 255, 224, 64, 34, 8, 12, 0, 76, 4, 40, 16, 0, 77, 4, 24, 15, + 0, 77, 4, 16, 14, 0, 77, 2, 115, 19, 21, 8, 115, 11, 20, 5, 124, 14, 69, 10, + 68, 1, 0, 47, 63, 63, 237, 1, 16, 214, 237, 16, 222, 237, 49, 48, 43, 43, 43, 43, + 5, 35, 17, 52, 38, 35, 34, 6, 7, 17, 35, 17, 54, 54, 51, 50, 30, 2, 21, 1, + 199, 82, 63, 72, 29, 64, 18, 82, 33, 107, 63, 59, 80, 48, 20, 165, 2, 16, 102, 96, + 9, 5, 253, 221, 2, 91, 11, 18, 37, 65, 91, 54, 0, 3, 0, 25, 255, 88, 1, 244, + 2, 181, 0, 14, 0, 53, 0, 66, 0, 167, 182, 47, 32, 10, 15, 0, 76, 42, 184, 255, + 224, 180, 10, 15, 0, 76, 38, 184, 255, 224, 64, 33, 10, 15, 0, 76, 24, 40, 17, 18, + 0, 76, 24, 32, 8, 10, 0, 76, 19, 40, 18, 0, 77, 19, 24, 17, 0, 77, 19, 32, + 8, 10, 0, 76, 10, 184, 255, 232, 179, 16, 0, 77, 10, 184, 255, 224, 64, 48, 15, 0, + 77, 49, 50, 50, 57, 32, 127, 48, 29, 15, 14, 14, 64, 8, 130, 21, 67, 64, 40, 32, + 51, 35, 50, 50, 57, 48, 54, 49, 49, 61, 45, 75, 30, 31, 77, 3, 133, 26, 80, 54, + 35, 35, 11, 133, 18, 81, 0, 63, 237, 50, 47, 205, 63, 237, 63, 51, 63, 205, 51, 47, + 18, 57, 57, 51, 17, 18, 57, 57, 1, 47, 205, 16, 214, 237, 18, 57, 47, 51, 51, 51, + 237, 50, 51, 47, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 38, 38, + 35, 34, 14, 2, 21, 20, 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, 38, 53, 52, 62, + 2, 51, 50, 22, 23, 53, 55, 17, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, + 38, 39, 7, 39, 55, 38, 52, 55, 34, 6, 7, 21, 20, 22, 51, 50, 54, 53, 52, 38, + 240, 10, 36, 22, 18, 24, 16, 7, 43, 37, 20, 25, 8, 1, 12, 29, 14, 76, 85, 17, + 35, 51, 34, 26, 41, 11, 82, 17, 34, 21, 24, 39, 28, 15, 14, 29, 46, 31, 47, 59, + 16, 67, 43, 94, 1, 140, 19, 26, 14, 32, 26, 26, 26, 25, 1, 112, 13, 23, 26, 47, + 63, 36, 81, 88, 10, 4, 68, 8, 9, 127, 113, 54, 89, 64, 36, 21, 10, 235, 14, 253, + 139, 13, 13, 21, 34, 47, 25, 22, 46, 37, 23, 41, 37, 81, 38, 112, 9, 10, 27, 20, + 16, 22, 32, 40, 39, 26, 27, 38, 0, 2, 0, 36, 255, 252, 1, 208, 2, 107, 0, 47, + 0, 65, 0, 131, 181, 58, 24, 16, 0, 77, 55, 184, 255, 232, 64, 20, 16, 0, 77, 22, + 16, 16, 0, 77, 18, 32, 8, 0, 77, 17, 32, 17, 18, 0, 76, 13, 184, 255, 216, 179, + 18, 0, 77, 13, 184, 255, 208, 179, 17, 0, 77, 12, 184, 255, 224, 179, 8, 0, 77, 8, + 184, 255, 240, 64, 34, 16, 0, 77, 5, 41, 118, 0, 0, 61, 118, 10, 67, 25, 35, 118, + 28, 28, 53, 118, 20, 66, 25, 5, 48, 124, 38, 38, 44, 31, 65, 56, 124, 15, 66, 0, + 63, 237, 63, 51, 57, 47, 237, 57, 57, 1, 16, 214, 237, 51, 47, 237, 50, 16, 222, 237, + 51, 47, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 14, 2, 7, + 30, 3, 21, 20, 14, 2, 35, 34, 46, 2, 53, 52, 62, 2, 55, 38, 38, 53, 52, 54, + 55, 51, 6, 6, 21, 20, 22, 51, 50, 54, 53, 52, 38, 39, 51, 22, 22, 7, 34, 14, + 2, 21, 20, 22, 51, 50, 62, 2, 53, 52, 46, 2, 1, 167, 9, 18, 28, 19, 23, 42, + 31, 19, 24, 52, 80, 57, 57, 82, 52, 24, 18, 31, 42, 23, 38, 35, 7, 8, 82, 5, + 9, 43, 47, 47, 43, 9, 5, 82, 8, 7, 173, 27, 48, 36, 21, 75, 57, 27, 48, 36, + 21, 21, 36, 48, 1, 225, 22, 42, 38, 29, 9, 9, 27, 38, 51, 32, 41, 68, 51, 28, + 28, 50, 69, 41, 32, 51, 38, 27, 9, 18, 79, 43, 43, 60, 35, 32, 61, 32, 60, 63, + 63, 60, 32, 61, 32, 35, 60, 225, 13, 28, 43, 31, 63, 54, 13, 28, 44, 32, 31, 43, + 28, 13, 0, 2, 0, 33, 255, 245, 1, 212, 2, 181, 0, 11, 0, 53, 0, 156, 64, 21, + 45, 24, 17, 0, 77, 45, 16, 16, 0, 77, 45, 24, 15, 0, 77, 45, 32, 14, 0, 77, + 43, 184, 255, 232, 180, 16, 17, 0, 76, 43, 184, 255, 240, 64, 10, 14, 15, 0, 76, 26, + 24, 8, 0, 77, 20, 184, 255, 232, 64, 10, 8, 0, 77, 10, 24, 13, 16, 0, 76, 8, + 184, 255, 224, 180, 13, 16, 0, 76, 4, 184, 255, 232, 64, 41, 13, 16, 0, 76, 2, 24, + 13, 16, 0, 76, 15, 47, 130, 12, 12, 0, 130, 18, 55, 31, 41, 130, 34, 34, 6, 130, + 28, 54, 31, 15, 3, 136, 44, 44, 50, 37, 77, 9, 136, 23, 81, 0, 63, 237, 63, 51, + 57, 47, 237, 57, 57, 1, 16, 214, 237, 51, 47, 237, 50, 16, 222, 237, 51, 47, 237, 50, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 52, 38, 35, 34, 6, + 21, 20, 22, 51, 50, 54, 19, 20, 6, 7, 22, 22, 21, 20, 14, 2, 35, 34, 46, 2, + 53, 52, 54, 55, 38, 38, 53, 52, 54, 55, 51, 6, 6, 21, 20, 22, 51, 50, 54, 53, + 52, 38, 39, 51, 22, 22, 1, 130, 74, 61, 61, 75, 75, 61, 61, 74, 52, 43, 35, 45, + 63, 32, 58, 80, 47, 48, 80, 58, 32, 63, 45, 35, 43, 9, 5, 80, 5, 6, 53, 52, + 51, 53, 6, 5, 80, 5, 9, 210, 69, 80, 80, 69, 69, 80, 80, 1, 149, 51, 79, 15, + 22, 100, 69, 52, 82, 57, 30, 31, 57, 82, 51, 69, 100, 22, 15, 79, 51, 38, 71, 38, + 32, 62, 32, 72, 65, 65, 72, 32, 62, 32, 38, 71, 0, 1, 0, 54, 255, 89, 1, 199, + 2, 107, 0, 33, 0, 64, 64, 33, 15, 23, 115, 6, 6, 5, 30, 25, 30, 120, 0, 5, + 20, 0, 5, 0, 35, 31, 31, 25, 34, 0, 30, 121, 33, 65, 19, 12, 25, 5, 121, 24, + 68, 0, 63, 237, 50, 220, 205, 63, 237, 50, 1, 16, 198, 50, 47, 16, 222, 135, 43, 135, + 125, 196, 1, 51, 24, 47, 253, 204, 49, 48, 1, 14, 3, 7, 33, 21, 20, 14, 2, 35, + 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 53, 33, 53, 62, 3, 55, 33, 53, 33, 1, + 191, 32, 79, 82, 77, 29, 1, 51, 11, 28, 52, 40, 13, 32, 10, 8, 8, 22, 8, 33, + 27, 254, 191, 31, 75, 78, 78, 36, 254, 229, 1, 122, 2, 43, 44, 121, 132, 133, 55, 70, + 41, 63, 42, 21, 5, 2, 65, 2, 2, 43, 41, 15, 54, 63, 133, 128, 120, 51, 70, 0, + 1, 0, 73, 255, 89, 1, 171, 1, 208, 0, 33, 0, 64, 64, 33, 15, 23, 127, 6, 6, + 5, 30, 25, 30, 129, 0, 5, 20, 0, 5, 0, 35, 31, 31, 25, 34, 0, 30, 133, 33, + 73, 19, 12, 25, 5, 133, 24, 76, 0, 63, 237, 50, 220, 205, 63, 237, 50, 1, 16, 198, + 50, 47, 16, 222, 135, 43, 135, 125, 196, 1, 51, 24, 47, 253, 204, 49, 48, 1, 14, 3, + 7, 51, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 53, 33, 53, + 62, 3, 55, 35, 53, 33, 1, 164, 18, 62, 71, 70, 27, 255, 9, 26, 48, 39, 13, 32, + 10, 7, 5, 25, 8, 34, 23, 254, 233, 21, 63, 68, 65, 24, 228, 1, 78, 1, 146, 21, + 75, 91, 100, 45, 70, 39, 61, 44, 23, 5, 2, 61, 2, 3, 45, 40, 19, 55, 40, 95, + 93, 84, 28, 69, 255, 255, 0, 9, 0, 0, 1, 235, 3, 49, 2, 38, 0, 36, 0, 0, + 1, 7, 1, 98, 0, 2, 0, 154, 0, 16, 64, 11, 2, 2, 25, 31, 4, 15, 80, 2, + 9, 23, 79, 43, 43, 52, 0, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, 151, 2, 38, + 0, 68, 0, 0, 1, 6, 1, 98, 0, 0, 0, 16, 64, 11, 2, 5, 51, 57, 28, 19, + 80, 2, 15, 49, 79, 43, 43, 52, 0, 1, 0, 91, 255, 87, 1, 204, 2, 107, 0, 38, + 0, 91, 177, 17, 3, 184, 255, 192, 64, 43, 11, 14, 72, 3, 36, 0, 23, 11, 20, 20, + 24, 31, 31, 27, 27, 34, 40, 29, 33, 115, 24, 39, 32, 121, 29, 29, 33, 28, 121, 25, + 65, 33, 121, 24, 0, 20, 20, 24, 15, 8, 35, 24, 68, 0, 63, 51, 220, 205, 18, 57, + 47, 205, 16, 237, 63, 237, 18, 57, 47, 237, 1, 16, 214, 237, 50, 16, 206, 50, 47, 50, + 47, 17, 57, 47, 204, 51, 221, 50, 213, 43, 205, 49, 48, 5, 22, 22, 21, 20, 14, 2, + 35, 34, 38, 39, 55, 22, 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 35, 17, 33, 21, + 33, 21, 51, 21, 35, 21, 33, 21, 35, 6, 6, 1, 39, 26, 23, 9, 21, 35, 26, 23, + 40, 11, 10, 11, 24, 15, 32, 37, 7, 5, 15, 7, 163, 1, 91, 254, 247, 232, 232, 1, + 31, 148, 5, 9, 33, 12, 30, 29, 10, 23, 19, 13, 7, 5, 51, 4, 5, 20, 20, 11, + 2, 13, 35, 14, 2, 107, 70, 190, 70, 219, 70, 8, 18, 0, 2, 0, 40, 255, 87, 1, + 199, 1, 219, 0, 48, 0, 57, 0, 218, 185, 0, 54, 255, 240, 179, 14, 0, 77, 40, 184, + 255, 224, 180, 13, 14, 0, 76, 40, 184, 255, 232, 179, 12, 0, 77, 35, 184, 255, 240, 179, + 20, 0, 77, 35, 184, 255, 248, 179, 19, 0, 77, 35, 184, 255, 216, 179, 16, 0, 77, 35, + 184, 255, 240, 179, 15, 0, 77, 35, 184, 255, 240, 179, 9, 0, 77, 34, 184, 255, 224, 179, + 18, 0, 77, 34, 184, 255, 216, 179, 17, 0, 77, 34, 184, 255, 232, 179, 16, 0, 77, 34, + 184, 255, 216, 64, 15, 15, 0, 77, 31, 16, 16, 0, 77, 31, 24, 15, 0, 77, 17, 3, + 184, 255, 192, 64, 46, 11, 14, 72, 3, 48, 0, 23, 11, 20, 20, 28, 49, 130, 37, 45, + 45, 37, 59, 57, 38, 130, 28, 58, 0, 20, 20, 48, 15, 8, 58, 38, 134, 57, 57, 33, + 44, 44, 41, 136, 23, 48, 81, 52, 136, 33, 80, 0, 63, 237, 63, 51, 237, 50, 47, 17, + 57, 47, 237, 16, 220, 205, 18, 57, 47, 205, 1, 16, 214, 237, 50, 16, 206, 50, 47, 16, + 237, 18, 57, 47, 204, 51, 221, 50, 213, 43, 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 5, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, + 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 46, 3, 53, 52, 62, 2, 51, 50, 22, 21, + 21, 33, 22, 22, 51, 50, 54, 55, 23, 6, 6, 7, 19, 52, 38, 35, 34, 14, 2, 7, + 1, 27, 26, 23, 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 13, + 6, 50, 74, 49, 25, 38, 62, 78, 41, 94, 102, 254, 180, 5, 85, 77, 44, 62, 16, 11, + 14, 70, 45, 77, 62, 51, 29, 47, 34, 20, 3, 33, 12, 30, 29, 10, 23, 19, 13, 7, + 5, 51, 4, 5, 20, 20, 11, 2, 11, 29, 14, 6, 41, 63, 82, 47, 62, 92, 60, 30, + 117, 119, 29, 72, 75, 14, 8, 70, 8, 16, 2, 1, 32, 59, 69, 22, 36, 46, 24, 0, + 5, 0, 30, 255, 243, 1, 217, 3, 61, 0, 11, 0, 23, 0, 27, 0, 47, 0, 57, 0, + 202, 185, 0, 56, 255, 240, 64, 20, 14, 0, 77, 54, 16, 13, 14, 0, 76, 52, 24, 14, + 0, 77, 52, 16, 13, 0, 77, 50, 184, 255, 232, 179, 14, 0, 77, 50, 184, 255, 240, 64, + 19, 13, 0, 77, 46, 24, 8, 0, 77, 45, 24, 16, 0, 77, 45, 16, 15, 0, 77, 41, + 184, 255, 232, 180, 15, 16, 0, 76, 40, 184, 255, 232, 179, 8, 0, 77, 36, 184, 255, 232, + 179, 8, 0, 77, 35, 184, 255, 232, 179, 16, 0, 77, 35, 184, 255, 240, 64, 56, 15, 0, + 77, 31, 24, 16, 0, 77, 31, 32, 15, 0, 77, 30, 16, 8, 0, 77, 26, 26, 21, 15, + 9, 27, 27, 3, 9, 9, 28, 53, 118, 38, 59, 48, 118, 28, 64, 11, 16, 72, 28, 58, + 51, 124, 43, 70, 24, 27, 18, 6, 12, 0, 55, 124, 33, 65, 0, 63, 237, 222, 50, 221, + 50, 222, 205, 63, 237, 1, 16, 214, 43, 237, 16, 222, 237, 18, 57, 47, 205, 50, 47, 16, + 222, 205, 50, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, 52, + 54, 51, 50, 22, 21, 20, 6, 39, 51, 21, 35, 3, 52, 62, 2, 51, 50, 30, 2, 21, + 20, 14, 2, 35, 34, 46, 2, 55, 20, 22, 51, 50, 53, 52, 35, 34, 6, 160, 21, 27, + 27, 21, 21, 27, 27, 159, 20, 28, 28, 20, 20, 28, 28, 223, 226, 226, 107, 32, 58, 81, + 50, 49, 82, 58, 33, 33, 58, 82, 49, 50, 81, 58, 32, 84, 66, 69, 140, 140, 69, 66, + 2, 135, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 182, 57, + 254, 40, 83, 118, 76, 36, 36, 76, 118, 83, 83, 119, 76, 35, 35, 76, 119, 83, 122, 120, + 242, 242, 120, 255, 255, 0, 40, 255, 245, 1, 204, 2, 204, 2, 38, 0, 82, 0, 0, 1, + 6, 2, 167, 0, 0, 0, 30, 64, 21, 4, 3, 2, 0, 34, 52, 9, 0, 80, 4, 14, + 58, 79, 3, 14, 44, 79, 2, 14, 32, 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 0, + 4, 0, 30, 255, 243, 1, 217, 3, 61, 0, 29, 0, 33, 0, 53, 0, 63, 0, 255, 185, + 0, 62, 255, 240, 64, 20, 14, 0, 77, 60, 24, 13, 14, 0, 76, 58, 24, 14, 0, 77, + 58, 16, 13, 0, 77, 56, 184, 255, 232, 179, 14, 0, 77, 56, 184, 255, 240, 64, 15, 13, + 0, 77, 52, 24, 8, 0, 77, 51, 32, 15, 16, 0, 76, 47, 184, 255, 240, 179, 16, 0, + 77, 47, 184, 255, 232, 179, 15, 0, 77, 46, 184, 255, 232, 179, 8, 0, 77, 42, 184, 255, + 232, 179, 8, 0, 77, 41, 184, 255, 232, 64, 28, 15, 16, 0, 76, 37, 24, 15, 16, 0, + 76, 36, 24, 8, 0, 77, 18, 16, 15, 16, 0, 76, 18, 24, 13, 14, 0, 76, 3, 184, + 255, 224, 179, 16, 0, 77, 3, 184, 255, 240, 179, 15, 0, 77, 3, 184, 255, 232, 179, 14, + 0, 77, 3, 184, 255, 224, 64, 47, 13, 0, 77, 32, 32, 29, 0, 15, 33, 33, 14, 15, + 15, 34, 59, 118, 44, 65, 54, 118, 34, 64, 11, 16, 72, 34, 64, 57, 124, 49, 70, 30, + 33, 20, 29, 29, 20, 11, 26, 5, 14, 14, 5, 61, 124, 39, 65, 0, 63, 237, 206, 50, + 47, 16, 205, 220, 205, 50, 47, 16, 222, 205, 63, 237, 1, 16, 214, 43, 237, 16, 222, 237, + 18, 57, 47, 205, 51, 47, 16, 220, 205, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 14, 3, 35, 34, 38, + 39, 38, 38, 35, 34, 6, 7, 39, 62, 3, 51, 50, 22, 23, 22, 22, 51, 50, 54, 55, + 39, 51, 21, 35, 3, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, + 55, 20, 22, 51, 50, 53, 52, 35, 34, 6, 1, 132, 3, 16, 22, 30, 17, 16, 30, 13, + 15, 18, 11, 15, 23, 6, 40, 3, 15, 22, 28, 18, 17, 29, 13, 16, 17, 11, 15, 24, + 6, 211, 227, 227, 106, 32, 58, 81, 50, 49, 82, 58, 33, 33, 58, 82, 49, 50, 81, 58, + 32, 84, 66, 69, 140, 140, 69, 66, 2, 215, 11, 26, 22, 16, 10, 8, 7, 7, 25, 13, + 18, 11, 26, 23, 16, 10, 8, 8, 6, 24, 13, 84, 57, 254, 40, 83, 118, 76, 36, 36, + 76, 118, 83, 83, 119, 76, 35, 35, 76, 119, 83, 122, 120, 242, 242, 120, 255, 255, 0, 40, + 255, 245, 1, 204, 2, 204, 2, 38, 0, 82, 0, 0, 1, 6, 2, 172, 0, 0, 0, 23, + 64, 16, 3, 2, 0, 47, 32, 9, 0, 80, 3, 14, 64, 79, 2, 14, 46, 79, 43, 43, + 43, 52, 52, 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 34, 2, 38, 0, 50, 0, 0, + 1, 7, 1, 98, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 34, 40, 0, 9, 80, 2, + 4, 32, 79, 43, 43, 52, 0, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 151, 2, 38, + 0, 82, 0, 0, 1, 6, 1, 98, 0, 0, 0, 16, 64, 11, 2, 0, 34, 40, 9, 0, + 80, 2, 14, 32, 79, 43, 43, 52, 0, 4, 0, 30, 255, 243, 1, 217, 3, 61, 0, 11, + 0, 15, 0, 35, 0, 45, 0, 192, 185, 0, 44, 255, 232, 179, 14, 0, 77, 44, 184, 255, + 248, 64, 24, 13, 0, 77, 42, 24, 14, 0, 77, 42, 16, 13, 0, 77, 40, 32, 14, 0, + 77, 40, 16, 13, 0, 77, 38, 184, 255, 232, 179, 14, 0, 77, 38, 184, 255, 248, 64, 15, + 13, 0, 77, 33, 24, 15, 16, 0, 76, 33, 24, 8, 0, 77, 29, 184, 255, 240, 179, 16, + 0, 77, 29, 184, 255, 232, 179, 15, 0, 77, 29, 184, 255, 232, 179, 8, 0, 77, 23, 184, + 255, 232, 180, 15, 16, 0, 76, 23, 184, 255, 224, 64, 45, 8, 0, 77, 19, 24, 15, 16, + 0, 76, 19, 24, 8, 0, 77, 14, 15, 9, 3, 3, 16, 41, 118, 26, 47, 36, 118, 16, + 64, 11, 16, 72, 16, 46, 39, 124, 31, 70, 12, 15, 6, 0, 43, 124, 21, 65, 0, 63, + 237, 222, 221, 222, 205, 63, 237, 1, 16, 214, 43, 237, 16, 222, 237, 18, 57, 47, 205, 214, + 205, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 51, 21, 35, 3, 52, 62, 2, + 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 55, 20, 22, 51, 50, 53, 52, 35, + 34, 6, 250, 21, 28, 28, 21, 21, 28, 28, 134, 226, 226, 107, 32, 58, 81, 50, 49, 82, + 58, 33, 33, 58, 82, 49, 50, 81, 58, 32, 84, 66, 69, 140, 140, 69, 66, 2, 135, 27, + 23, 23, 27, 27, 23, 23, 27, 182, 57, 254, 40, 83, 118, 76, 36, 36, 76, 118, 83, 83, + 119, 76, 35, 35, 76, 119, 83, 122, 120, 242, 242, 120, 255, 255, 0, 40, 255, 245, 1, 204, + 2, 204, 2, 38, 0, 82, 0, 0, 1, 6, 2, 168, 0, 0, 0, 23, 64, 16, 3, 2, + 0, 44, 45, 9, 0, 80, 3, 14, 46, 79, 2, 14, 32, 79, 43, 43, 43, 52, 52, 0, + 255, 255, 0, 13, 0, 0, 1, 232, 3, 6, 2, 38, 0, 60, 0, 0, 1, 7, 0, 138, + 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 17, 18, 4, 12, 80, 1, 4, 19, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 36, 255, 88, 1, 205, 2, 123, 2, 38, 0, 92, 0, 0, + 1, 6, 0, 138, 0, 0, 0, 16, 64, 11, 1, 1, 33, 34, 32, 21, 80, 1, 9, 35, + 79, 43, 43, 52, 0, 2, 0, 54, 255, 88, 1, 179, 2, 176, 0, 25, 0, 38, 0, 95, + 182, 14, 24, 9, 12, 0, 76, 9, 184, 255, 224, 180, 9, 12, 0, 76, 5, 184, 255, 224, + 64, 37, 9, 12, 0, 76, 36, 7, 40, 29, 25, 127, 15, 22, 23, 16, 17, 17, 23, 39, + 22, 133, 25, 77, 18, 15, 29, 29, 33, 0, 2, 26, 33, 12, 17, 16, 16, 12, 75, 0, + 63, 51, 47, 51, 16, 221, 222, 205, 50, 18, 57, 17, 51, 51, 63, 237, 1, 16, 198, 50, + 47, 51, 16, 221, 50, 237, 50, 16, 222, 205, 49, 48, 43, 43, 43, 55, 54, 51, 50, 30, + 2, 21, 20, 14, 2, 35, 34, 38, 39, 7, 39, 55, 38, 52, 53, 17, 35, 53, 51, 19, + 34, 6, 7, 21, 20, 22, 51, 50, 54, 53, 52, 38, 235, 37, 44, 27, 44, 31, 17, 15, + 32, 50, 35, 51, 64, 17, 67, 43, 93, 1, 99, 181, 69, 23, 31, 15, 36, 32, 32, 32, + 31, 64, 26, 21, 34, 47, 25, 22, 46, 37, 23, 41, 37, 81, 38, 112, 8, 13, 8, 2, + 95, 70, 253, 108, 20, 16, 22, 32, 40, 39, 26, 27, 38, 0, 2, 0, 37, 255, 88, 1, + 244, 1, 218, 0, 44, 0, 57, 0, 109, 182, 35, 32, 8, 13, 0, 76, 30, 184, 255, 216, + 180, 8, 13, 0, 76, 26, 184, 255, 216, 180, 8, 13, 0, 76, 17, 184, 255, 216, 64, 40, + 9, 14, 0, 76, 9, 127, 10, 58, 37, 38, 38, 36, 44, 127, 20, 48, 55, 28, 48, 36, + 45, 37, 20, 39, 38, 23, 45, 52, 33, 38, 37, 37, 33, 75, 5, 136, 14, 80, 10, 76, + 0, 63, 63, 237, 63, 51, 47, 51, 16, 221, 222, 205, 17, 57, 57, 17, 18, 57, 57, 1, + 47, 221, 222, 50, 237, 50, 50, 47, 51, 16, 214, 237, 49, 48, 43, 43, 43, 43, 19, 52, + 46, 2, 35, 34, 6, 7, 17, 35, 17, 54, 54, 51, 50, 30, 2, 21, 21, 54, 54, 51, + 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 7, 39, 55, 52, 38, 38, 52, 53, 23, + 34, 6, 7, 21, 20, 22, 51, 50, 54, 53, 52, 38, 240, 7, 17, 27, 19, 15, 30, 5, + 83, 22, 72, 48, 42, 55, 33, 13, 17, 34, 21, 24, 39, 28, 15, 14, 29, 46, 31, 47, + 59, 16, 67, 43, 94, 1, 1, 141, 19, 26, 14, 32, 26, 26, 26, 25, 1, 3, 43, 55, + 32, 12, 8, 2, 254, 121, 1, 195, 8, 15, 24, 48, 71, 47, 220, 13, 13, 21, 34, 47, + 25, 22, 46, 37, 23, 41, 37, 81, 38, 112, 4, 16, 19, 16, 4, 13, 20, 16, 22, 32, + 40, 39, 26, 27, 38, 0, 2, 0, 63, 255, 88, 1, 179, 2, 96, 0, 32, 0, 45, 0, + 121, 182, 15, 32, 8, 13, 0, 76, 10, 184, 255, 224, 180, 8, 13, 0, 76, 6, 184, 255, + 216, 64, 51, 8, 13, 0, 76, 8, 43, 36, 36, 29, 32, 127, 26, 16, 23, 23, 24, 31, + 47, 17, 18, 18, 0, 24, 1, 8, 24, 46, 27, 28, 32, 23, 133, 29, 26, 73, 36, 16, + 33, 17, 0, 19, 18, 3, 33, 40, 13, 18, 17, 17, 13, 75, 0, 63, 51, 47, 51, 16, + 221, 222, 205, 17, 57, 57, 17, 18, 57, 57, 63, 51, 237, 50, 205, 50, 1, 16, 198, 94, + 93, 50, 47, 51, 16, 206, 17, 57, 47, 51, 51, 237, 50, 50, 16, 222, 205, 49, 48, 43, + 43, 43, 55, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 7, 39, 55, + 38, 52, 53, 17, 35, 53, 51, 53, 55, 21, 51, 21, 35, 19, 34, 6, 7, 21, 20, 22, + 51, 50, 54, 53, 52, 38, 243, 18, 32, 23, 27, 44, 31, 17, 15, 32, 50, 35, 51, 56, + 17, 67, 43, 93, 1, 98, 98, 82, 187, 187, 61, 23, 23, 15, 28, 32, 32, 32, 31, 64, + 13, 13, 21, 34, 47, 25, 22, 46, 37, 23, 41, 37, 81, 38, 112, 8, 13, 8, 1, 128, + 69, 130, 14, 144, 69, 254, 145, 20, 16, 22, 32, 40, 39, 26, 27, 38, 0, 3, 0, 27, + 255, 245, 1, 217, 2, 181, 0, 30, 0, 47, 0, 64, 0, 163, 185, 0, 59, 255, 232, 180, + 17, 18, 0, 76, 53, 184, 255, 232, 179, 18, 0, 77, 53, 184, 255, 240, 64, 29, 17, 0, + 77, 24, 16, 12, 0, 77, 24, 24, 11, 0, 77, 24, 32, 10, 0, 77, 24, 40, 9, 0, + 77, 20, 16, 9, 0, 77, 12, 184, 255, 240, 179, 11, 0, 77, 8, 184, 255, 240, 179, 13, + 0, 77, 8, 184, 255, 232, 179, 12, 0, 77, 8, 184, 255, 224, 64, 40, 11, 0, 77, 16, + 31, 2, 47, 127, 63, 30, 48, 48, 22, 39, 130, 10, 66, 56, 130, 22, 65, 51, 137, 27, + 80, 61, 137, 19, 81, 34, 137, 13, 81, 44, 137, 5, 80, 0, 1, 77, 0, 63, 51, 63, + 237, 63, 237, 63, 237, 63, 237, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 51, 51, 237, + 50, 50, 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 55, 21, + 54, 54, 51, 50, 30, 2, 21, 20, 6, 35, 34, 38, 39, 6, 6, 35, 34, 38, 53, 52, + 62, 2, 51, 50, 22, 23, 19, 22, 22, 51, 50, 62, 2, 53, 52, 46, 2, 35, 34, 6, + 7, 35, 38, 38, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, 213, 74, 14, 32, + 18, 22, 44, 35, 21, 75, 64, 24, 42, 17, 16, 40, 23, 72, 73, 22, 36, 46, 23, 20, + 31, 8, 74, 8, 20, 8, 15, 27, 20, 11, 8, 15, 21, 13, 14, 27, 11, 74, 7, 26, + 15, 13, 22, 17, 9, 11, 19, 24, 14, 14, 23, 4, 2, 167, 14, 246, 13, 15, 24, 56, + 93, 70, 122, 121, 13, 9, 9, 13, 130, 113, 70, 93, 56, 24, 18, 10, 254, 133, 5, 6, + 18, 42, 67, 48, 54, 68, 39, 14, 21, 15, 13, 23, 14, 39, 68, 54, 48, 67, 42, 18, + 7, 3, 0, 3, 0, 27, 255, 91, 1, 217, 1, 219, 0, 30, 0, 47, 0, 64, 0, 110, + 185, 0, 42, 255, 240, 180, 17, 18, 0, 76, 36, 184, 255, 224, 180, 17, 18, 0, 76, 22, + 184, 255, 232, 64, 53, 11, 0, 77, 9, 24, 9, 0, 77, 6, 16, 10, 11, 0, 76, 6, + 32, 9, 0, 77, 14, 28, 64, 127, 0, 31, 31, 8, 56, 130, 20, 66, 39, 130, 8, 65, + 30, 75, 51, 137, 25, 81, 61, 137, 17, 80, 34, 137, 11, 80, 44, 137, 3, 81, 0, 63, + 237, 63, 237, 63, 237, 63, 237, 63, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 51, 237, + 50, 57, 49, 48, 43, 43, 43, 43, 43, 43, 55, 6, 6, 35, 34, 46, 2, 53, 52, 54, + 51, 50, 22, 23, 54, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 39, 21, 35, 17, + 38, 38, 35, 34, 14, 2, 21, 20, 30, 2, 51, 50, 54, 55, 51, 22, 22, 51, 50, 62, + 2, 53, 52, 46, 2, 35, 34, 6, 7, 213, 14, 32, 18, 23, 43, 35, 21, 75, 64, 24, + 42, 17, 16, 39, 24, 72, 73, 22, 36, 46, 23, 20, 31, 8, 74, 8, 20, 8, 15, 27, + 20, 11, 8, 15, 21, 13, 14, 27, 11, 74, 7, 26, 15, 13, 22, 16, 10, 11, 19, 25, + 13, 14, 23, 4, 18, 14, 15, 24, 56, 93, 70, 123, 120, 13, 9, 9, 13, 130, 113, 70, + 93, 56, 24, 18, 11, 183, 2, 49, 6, 5, 18, 41, 67, 49, 54, 68, 39, 14, 21, 16, + 13, 24, 14, 39, 68, 54, 49, 67, 41, 18, 7, 4, 0, 3, 0, 9, 255, 166, 1, 235, + 2, 182, 0, 25, 0, 33, 0, 36, 0, 157, 64, 83, 18, 3, 19, 3, 126, 4, 18, 20, + 4, 4, 18, 19, 19, 6, 29, 27, 26, 13, 7, 26, 7, 120, 8, 13, 20, 8, 8, 13, + 33, 36, 1, 0, 14, 0, 26, 0, 120, 25, 14, 20, 25, 14, 26, 8, 25, 38, 4, 4, + 8, 37, 0, 25, 68, 19, 18, 18, 13, 5, 2, 1, 6, 121, 36, 35, 30, 34, 31, 20, + 17, 4, 13, 29, 29, 8, 26, 14, 13, 65, 7, 8, 68, 4, 3, 0, 47, 51, 63, 51, + 63, 51, 51, 18, 57, 47, 18, 23, 57, 51, 51, 51, 237, 50, 50, 50, 17, 51, 47, 51, + 63, 51, 1, 16, 198, 50, 47, 16, 222, 17, 57, 135, 43, 135, 125, 196, 16, 196, 196, 14, + 196, 135, 5, 24, 16, 43, 135, 125, 196, 16, 14, 196, 5, 196, 196, 1, 51, 24, 47, 135, + 16, 43, 135, 125, 196, 49, 48, 33, 39, 35, 7, 39, 55, 35, 7, 35, 62, 3, 55, 51, + 22, 22, 23, 55, 23, 7, 30, 3, 23, 3, 6, 6, 7, 51, 55, 38, 38, 23, 7, 51, + 1, 148, 37, 88, 71, 63, 66, 82, 36, 84, 17, 42, 49, 54, 30, 102, 5, 9, 6, 39, + 61, 63, 19, 36, 33, 30, 13, 242, 23, 54, 24, 82, 58, 11, 18, 64, 29, 57, 162, 252, + 18, 234, 162, 66, 154, 162, 163, 74, 16, 28, 16, 135, 16, 222, 59, 121, 117, 111, 48, 2, + 35, 63, 166, 88, 206, 33, 52, 193, 100, 0, 2, 0, 46, 255, 166, 1, 217, 2, 182, 0, + 35, 0, 43, 0, 222, 185, 0, 42, 255, 232, 179, 18, 0, 77, 42, 184, 255, 240, 179, 17, + 0, 77, 42, 184, 255, 240, 64, 20, 13, 0, 77, 41, 16, 11, 0, 77, 40, 8, 13, 0, + 77, 40, 24, 11, 12, 0, 76, 38, 184, 255, 232, 180, 15, 16, 0, 76, 25, 184, 255, 232, + 64, 10, 15, 16, 0, 76, 15, 32, 14, 0, 77, 1, 184, 255, 216, 179, 18, 0, 77, 1, + 184, 255, 232, 179, 17, 0, 77, 1, 184, 255, 208, 179, 16, 0, 77, 1, 184, 255, 216, 64, + 57, 15, 0, 77, 9, 39, 40, 20, 21, 8, 21, 23, 29, 30, 6, 7, 22, 22, 22, 0, + 0, 26, 45, 7, 8, 8, 36, 118, 12, 44, 40, 29, 27, 27, 41, 124, 17, 22, 21, 21, + 23, 20, 17, 69, 39, 35, 35, 30, 32, 124, 3, 8, 7, 7, 9, 6, 3, 70, 0, 63, + 51, 51, 51, 47, 51, 16, 237, 50, 50, 47, 50, 63, 51, 51, 51, 47, 51, 16, 237, 50, + 47, 50, 50, 1, 16, 214, 237, 51, 47, 205, 16, 206, 50, 47, 50, 47, 125, 135, 196, 196, + 196, 196, 1, 24, 221, 125, 135, 196, 196, 196, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 37, 6, 6, 35, 34, 38, 39, 7, 39, 55, 38, 38, 53, + 52, 62, 2, 51, 50, 22, 23, 55, 23, 7, 22, 22, 23, 7, 38, 39, 3, 22, 51, 50, + 54, 55, 37, 20, 22, 23, 19, 35, 34, 6, 1, 204, 35, 79, 45, 17, 33, 15, 23, 64, + 25, 59, 69, 40, 71, 98, 59, 8, 16, 8, 18, 62, 17, 16, 32, 16, 24, 28, 32, 133, + 27, 28, 29, 64, 34, 254, 204, 36, 32, 129, 9, 94, 94, 26, 20, 19, 3, 5, 85, 18, + 91, 34, 144, 113, 79, 120, 82, 42, 1, 1, 63, 16, 60, 5, 14, 9, 68, 15, 10, 254, + 33, 8, 15, 19, 216, 75, 102, 30, 1, 201, 136, 0, 2, 0, 40, 255, 181, 1, 195, 2, + 37, 0, 36, 0, 45, 0, 195, 185, 0, 43, 255, 224, 64, 19, 12, 0, 77, 41, 16, 14, + 0, 77, 41, 8, 11, 0, 77, 40, 8, 16, 0, 77, 39, 184, 255, 240, 64, 98, 12, 0, + 77, 35, 40, 13, 0, 77, 3, 32, 16, 0, 77, 3, 40, 14, 15, 0, 76, 3, 48, 13, + 0, 77, 2, 16, 15, 0, 77, 2, 32, 14, 0, 77, 2, 24, 13, 0, 77, 2, 32, 8, + 0, 77, 11, 18, 19, 31, 32, 10, 32, 34, 40, 41, 8, 9, 33, 9, 10, 10, 26, 26, + 14, 47, 32, 33, 33, 37, 130, 0, 46, 33, 32, 32, 29, 40, 25, 25, 19, 22, 136, 34, + 31, 29, 81, 18, 15, 15, 41, 136, 5, 10, 9, 9, 11, 8, 5, 80, 0, 63, 51, 51, + 51, 47, 51, 16, 237, 50, 47, 50, 63, 51, 51, 237, 50, 50, 47, 50, 17, 51, 47, 51, + 1, 16, 214, 237, 51, 47, 205, 16, 206, 50, 47, 50, 47, 221, 125, 135, 196, 196, 196, 196, + 16, 135, 196, 196, 196, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 55, 52, 62, 2, 51, 50, 50, 23, 55, 23, 7, 22, 22, 23, 7, 38, 38, 39, + 3, 22, 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, 39, 7, 39, 55, 38, 38, 55, 20, + 22, 23, 19, 34, 14, 2, 40, 41, 72, 95, 54, 6, 12, 7, 24, 55, 20, 14, 28, 16, + 19, 17, 30, 15, 105, 12, 25, 14, 33, 62, 35, 12, 35, 74, 44, 33, 30, 22, 56, 21, + 64, 74, 84, 42, 36, 102, 37, 66, 49, 28, 231, 63, 92, 60, 29, 1, 75, 19, 62, 3, + 6, 5, 71, 5, 8, 2, 254, 181, 2, 2, 7, 12, 69, 13, 11, 6, 70, 19, 66, 25, + 111, 85, 55, 71, 20, 1, 61, 20, 41, 64, 0, 1, 0, 36, 0, 0, 1, 204, 2, 107, + 0, 13, 0, 45, 64, 22, 0, 15, 11, 9, 12, 115, 6, 4, 3, 14, 12, 3, 121, 9, + 6, 6, 7, 65, 13, 121, 2, 68, 0, 63, 237, 63, 57, 47, 51, 237, 50, 1, 16, 214, + 205, 51, 253, 50, 205, 16, 206, 49, 48, 37, 21, 33, 17, 35, 53, 51, 17, 51, 17, 51, + 21, 35, 21, 1, 204, 254, 161, 73, 73, 82, 141, 141, 70, 70, 1, 33, 67, 1, 7, 254, + 249, 67, 219, 0, 2, 0, 18, 255, 221, 1, 246, 2, 165, 0, 12, 0, 15, 0, 86, 64, + 43, 4, 5, 3, 14, 10, 13, 11, 13, 11, 12, 0, 115, 8, 6, 0, 3, 1, 8, 3, + 3, 17, 16, 13, 6, 5, 7, 14, 121, 10, 0, 3, 12, 4, 12, 11, 11, 10, 65, 5, + 4, 4, 2, 68, 0, 63, 51, 47, 51, 63, 51, 47, 51, 17, 18, 57, 57, 16, 237, 50, + 17, 57, 57, 1, 17, 18, 57, 47, 94, 93, 51, 204, 253, 205, 50, 51, 17, 18, 57, 57, + 16, 205, 50, 49, 48, 1, 17, 35, 53, 7, 39, 19, 17, 35, 53, 33, 55, 23, 7, 55, + 35, 1, 17, 82, 120, 53, 173, 170, 1, 134, 37, 54, 229, 93, 93, 1, 27, 254, 229, 154, + 189, 34, 1, 17, 1, 21, 70, 58, 34, 242, 148, 0, 1, 0, 63, 255, 91, 1, 177, 1, + 219, 0, 63, 0, 188, 185, 0, 29, 255, 232, 179, 12, 0, 77, 29, 184, 255, 224, 179, 11, + 0, 77, 29, 184, 255, 216, 179, 10, 0, 77, 29, 184, 255, 208, 179, 9, 0, 77, 27, 184, + 255, 216, 179, 15, 0, 77, 26, 184, 255, 224, 179, 13, 0, 77, 26, 184, 255, 232, 179, 12, + 0, 77, 26, 184, 255, 240, 64, 76, 10, 0, 77, 8, 24, 10, 11, 0, 76, 8, 40, 9, + 0, 77, 6, 40, 13, 0, 77, 5, 48, 12, 0, 77, 5, 24, 10, 0, 77, 2, 16, 14, + 0, 77, 42, 42, 28, 13, 13, 0, 130, 28, 65, 34, 55, 55, 21, 130, 0, 7, 1, 8, + 7, 64, 38, 137, 45, 75, 55, 136, 56, 56, 24, 10, 59, 137, 3, 34, 31, 78, 14, 14, + 19, 136, 10, 80, 0, 63, 237, 50, 47, 63, 51, 57, 237, 17, 57, 50, 47, 237, 63, 237, + 1, 16, 214, 94, 93, 237, 51, 47, 51, 16, 222, 237, 51, 47, 17, 51, 47, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 52, 46, 4, 53, 52, 54, + 51, 50, 22, 23, 7, 46, 3, 35, 34, 21, 20, 30, 4, 21, 20, 6, 35, 34, 38, 39, + 23, 22, 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 39, 46, 3, 39, 55, 22, + 22, 51, 50, 62, 2, 1, 94, 41, 61, 72, 61, 41, 91, 97, 38, 81, 29, 14, 8, 29, + 36, 41, 19, 109, 41, 61, 72, 61, 41, 93, 107, 16, 19, 11, 55, 24, 67, 54, 8, 22, + 11, 8, 11, 34, 11, 36, 51, 39, 35, 21, 18, 32, 31, 32, 19, 28, 42, 69, 32, 23, + 42, 32, 19, 116, 25, 32, 24, 23, 34, 50, 40, 56, 75, 11, 9, 74, 4, 9, 7, 4, + 59, 21, 29, 24, 25, 36, 51, 39, 54, 65, 1, 1, 49, 21, 30, 2, 2, 67, 3, 3, + 10, 20, 28, 18, 15, 33, 30, 26, 8, 73, 17, 8, 4, 10, 17, 0, 1, 0, 74, 255, + 91, 1, 205, 1, 208, 0, 42, 0, 165, 64, 21, 29, 32, 18, 0, 77, 29, 16, 15, 0, + 77, 29, 16, 12, 0, 77, 29, 24, 11, 0, 77, 13, 184, 255, 216, 179, 16, 0, 77, 12, + 184, 255, 216, 179, 14, 0, 77, 12, 184, 255, 224, 179, 13, 0, 77, 11, 184, 255, 232, 179, + 16, 0, 77, 7, 184, 255, 232, 179, 17, 0, 77, 5, 184, 255, 240, 179, 18, 0, 77, 5, + 184, 255, 240, 179, 15, 0, 77, 5, 184, 255, 232, 64, 40, 9, 0, 77, 5, 39, 34, 39, + 129, 0, 5, 20, 0, 0, 5, 19, 19, 0, 44, 40, 40, 0, 34, 1, 8, 34, 43, 0, + 39, 133, 41, 73, 34, 5, 134, 33, 76, 15, 136, 22, 75, 0, 63, 237, 63, 237, 50, 63, + 237, 50, 1, 16, 198, 94, 93, 50, 47, 16, 206, 50, 47, 135, 16, 43, 135, 125, 196, 1, + 43, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 14, 3, 7, 30, 3, + 23, 30, 3, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 39, 46, 3, 35, 35, 53, + 62, 3, 55, 35, 53, 33, 1, 164, 19, 61, 71, 72, 30, 21, 34, 29, 22, 8, 15, 30, + 32, 36, 21, 4, 22, 11, 9, 11, 34, 11, 30, 43, 36, 32, 18, 10, 29, 38, 48, 29, + 18, 21, 63, 67, 65, 24, 229, 1, 79, 1, 146, 21, 73, 92, 103, 49, 4, 17, 20, 20, + 8, 15, 32, 26, 16, 1, 2, 68, 3, 3, 15, 24, 32, 18, 10, 26, 24, 16, 55, 40, + 95, 93, 83, 29, 69, 0, 1, 0, 68, 0, 0, 1, 193, 2, 121, 0, 35, 0, 116, 185, + 0, 32, 255, 224, 179, 16, 0, 77, 30, 184, 255, 232, 179, 16, 0, 77, 27, 184, 255, 232, + 180, 14, 15, 0, 76, 24, 184, 255, 232, 179, 10, 0, 77, 24, 184, 255, 240, 179, 9, 0, + 77, 24, 184, 255, 232, 64, 39, 8, 0, 77, 18, 32, 16, 0, 77, 18, 40, 15, 0, 77, + 10, 118, 25, 35, 115, 17, 0, 2, 16, 2, 2, 2, 2, 37, 36, 30, 1, 16, 13, 124, + 7, 1, 22, 69, 1, 68, 0, 63, 63, 18, 57, 237, 50, 17, 57, 1, 17, 18, 57, 47, + 93, 206, 253, 220, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 51, 35, 53, 52, 62, + 2, 55, 54, 54, 53, 52, 38, 35, 34, 6, 7, 39, 62, 3, 51, 50, 22, 21, 20, 14, + 2, 7, 14, 3, 21, 250, 82, 14, 28, 43, 30, 34, 48, 71, 52, 49, 78, 19, 28, 10, + 38, 47, 54, 27, 102, 103, 16, 29, 41, 24, 23, 33, 22, 11, 187, 36, 52, 40, 32, 17, + 20, 48, 38, 45, 47, 28, 12, 67, 7, 16, 13, 8, 90, 69, 34, 48, 36, 30, 15, 15, + 26, 29, 38, 27, 0, 1, 0, 85, 0, 0, 1, 169, 1, 220, 0, 37, 0, 145, 185, 0, + 29, 255, 232, 179, 18, 0, 77, 29, 184, 255, 240, 179, 17, 0, 77, 26, 184, 255, 232, 179, + 13, 0, 77, 26, 184, 255, 224, 179, 12, 0, 77, 26, 184, 255, 232, 179, 11, 0, 77, 26, + 184, 255, 224, 179, 10, 0, 77, 26, 184, 255, 216, 64, 56, 8, 9, 0, 76, 21, 16, 17, + 0, 77, 21, 32, 16, 0, 77, 21, 24, 15, 0, 77, 21, 32, 14, 0, 77, 20, 32, 18, + 0, 77, 10, 130, 27, 37, 127, 19, 0, 2, 16, 2, 2, 2, 2, 39, 38, 32, 1, 18, + 18, 13, 136, 7, 1, 24, 80, 1, 76, 0, 63, 63, 18, 57, 237, 50, 47, 17, 57, 1, + 17, 18, 57, 47, 93, 206, 253, 220, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 51, 35, 53, 52, 62, 2, 55, 54, 54, 53, 52, 38, 35, 34, 14, 2, 7, + 39, 62, 3, 51, 50, 22, 21, 20, 14, 2, 7, 14, 3, 21, 254, 80, 15, 27, 38, 22, + 26, 41, 57, 42, 18, 39, 37, 30, 9, 26, 9, 35, 44, 49, 24, 88, 91, 16, 26, 35, + 18, 17, 27, 21, 11, 114, 30, 43, 34, 27, 14, 15, 38, 27, 35, 28, 8, 11, 13, 5, + 69, 5, 14, 12, 8, 68, 62, 27, 41, 32, 24, 12, 11, 20, 23, 29, 19, 0, 3, 0, + 18, 255, 251, 1, 195, 2, 113, 0, 30, 0, 49, 0, 64, 0, 197, 64, 18, 54, 16, 15, + 16, 0, 76, 46, 24, 16, 0, 77, 42, 24, 15, 16, 0, 76, 29, 184, 255, 224, 180, 17, + 18, 0, 76, 29, 184, 255, 232, 180, 9, 10, 0, 76, 27, 184, 255, 232, 179, 18, 0, 77, + 27, 184, 255, 216, 179, 17, 0, 77, 23, 184, 255, 232, 179, 18, 0, 77, 23, 184, 255, 224, + 179, 17, 0, 77, 18, 184, 255, 208, 179, 18, 0, 77, 18, 184, 255, 216, 179, 17, 0, 77, + 18, 184, 255, 224, 180, 9, 10, 0, 76, 17, 184, 255, 240, 64, 47, 18, 0, 77, 25, 56, + 118, 20, 20, 44, 118, 28, 66, 50, 34, 32, 35, 115, 9, 7, 6, 65, 25, 31, 121, 50, + 35, 6, 121, 9, 32, 9, 191, 50, 1, 50, 9, 50, 9, 39, 61, 124, 15, 65, 39, 124, + 0, 66, 0, 63, 237, 63, 237, 18, 57, 57, 47, 47, 93, 17, 51, 16, 237, 50, 16, 237, + 57, 1, 16, 214, 205, 51, 253, 50, 205, 51, 16, 222, 237, 51, 47, 237, 50, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 23, 34, 46, 2, 39, 53, 35, 53, + 51, 17, 62, 3, 51, 50, 30, 2, 21, 20, 14, 2, 7, 22, 22, 21, 20, 6, 3, 21, + 51, 21, 35, 21, 22, 22, 51, 50, 62, 2, 53, 52, 46, 2, 35, 39, 51, 50, 62, 2, + 53, 52, 46, 2, 35, 34, 6, 7, 217, 15, 38, 40, 38, 15, 53, 53, 15, 38, 39, 38, + 15, 44, 75, 56, 31, 14, 25, 33, 19, 51, 69, 111, 186, 109, 109, 10, 29, 29, 28, 54, + 40, 25, 22, 38, 50, 27, 78, 59, 23, 46, 36, 22, 19, 33, 43, 24, 23, 36, 8, 5, + 2, 3, 6, 4, 134, 62, 1, 148, 4, 6, 3, 2, 16, 38, 62, 46, 22, 41, 36, 27, + 7, 14, 75, 60, 93, 93, 1, 38, 83, 62, 76, 2, 2, 10, 27, 44, 35, 31, 42, 25, + 11, 68, 10, 22, 38, 29, 27, 38, 24, 10, 1, 2, 0, 2, 0, 18, 255, 243, 1, 226, + 2, 107, 0, 20, 0, 33, 0, 152, 185, 0, 32, 255, 216, 179, 18, 0, 77, 32, 184, 255, + 224, 179, 17, 0, 77, 32, 184, 255, 240, 64, 17, 15, 16, 0, 76, 23, 32, 17, 18, 0, + 76, 23, 16, 15, 16, 0, 76, 20, 184, 255, 240, 180, 11, 12, 0, 76, 20, 184, 255, 232, + 179, 10, 0, 77, 20, 184, 255, 240, 64, 51, 9, 0, 77, 1, 24, 10, 12, 0, 76, 1, + 16, 9, 0, 77, 11, 26, 115, 16, 14, 18, 35, 10, 29, 115, 7, 5, 0, 3, 16, 3, + 32, 3, 3, 8, 3, 34, 28, 17, 4, 121, 14, 10, 7, 7, 12, 8, 65, 21, 124, 0, + 70, 0, 63, 237, 63, 51, 57, 47, 51, 51, 237, 50, 50, 1, 16, 214, 94, 93, 206, 51, + 237, 50, 16, 222, 50, 206, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 23, 34, 38, 53, 53, 35, 53, 51, 53, 51, 21, 51, 53, 51, 21, 51, 21, 35, 21, 20, + 6, 39, 50, 62, 2, 53, 53, 35, 21, 20, 30, 2, 250, 97, 82, 53, 53, 83, 192, 83, + 53, 53, 82, 97, 22, 36, 25, 13, 192, 13, 25, 35, 13, 112, 105, 102, 61, 252, 252, 252, + 252, 61, 102, 104, 113, 71, 13, 35, 60, 47, 93, 93, 47, 60, 35, 13, 255, 255, 0, 9, + 0, 0, 1, 235, 2, 107, 2, 6, 3, 150, 0, 0, 0, 3, 0, 91, 255, 151, 1, 211, + 2, 168, 0, 15, 0, 19, 0, 23, 0, 112, 64, 63, 3, 21, 22, 17, 18, 6, 6, 2, + 7, 0, 13, 12, 9, 4, 1, 8, 8, 10, 10, 14, 25, 16, 20, 115, 4, 1, 2, 2, + 0, 4, 16, 4, 32, 4, 3, 8, 4, 24, 12, 23, 121, 9, 16, 16, 5, 20, 8, 7, + 7, 19, 121, 5, 65, 13, 20, 121, 4, 2, 1, 1, 0, 4, 68, 0, 63, 51, 51, 47, + 51, 16, 237, 50, 63, 237, 51, 47, 51, 17, 18, 57, 47, 51, 237, 50, 1, 16, 198, 94, + 93, 50, 47, 205, 16, 237, 50, 16, 206, 50, 47, 50, 47, 18, 23, 57, 205, 17, 23, 57, + 49, 48, 51, 7, 39, 55, 35, 17, 33, 55, 23, 3, 51, 21, 35, 7, 51, 21, 1, 51, + 55, 35, 17, 51, 55, 35, 246, 34, 64, 29, 86, 1, 36, 21, 63, 101, 57, 80, 73, 190, + 254, 225, 123, 64, 187, 27, 73, 100, 105, 17, 88, 2, 107, 61, 17, 254, 208, 70, 219, 70, + 1, 103, 190, 254, 33, 219, 0, 4, 0, 38, 255, 181, 1, 201, 2, 37, 0, 37, 0, 47, + 0, 52, 0, 56, 0, 111, 64, 61, 6, 51, 52, 13, 14, 27, 6, 28, 5, 30, 55, 56, + 38, 39, 3, 6, 29, 4, 5, 5, 48, 130, 9, 21, 21, 9, 58, 47, 53, 130, 33, 28, + 29, 29, 33, 57, 13, 56, 134, 52, 38, 38, 0, 55, 20, 20, 14, 17, 136, 30, 27, 24, + 81, 51, 39, 42, 137, 6, 3, 0, 80, 0, 63, 50, 50, 237, 50, 50, 63, 51, 51, 237, + 50, 50, 47, 50, 17, 57, 47, 51, 237, 50, 1, 16, 198, 50, 47, 205, 16, 237, 50, 16, + 206, 50, 47, 16, 237, 51, 47, 205, 17, 23, 57, 17, 18, 23, 57, 49, 48, 1, 50, 22, + 23, 55, 23, 7, 22, 22, 21, 20, 20, 7, 35, 7, 22, 22, 51, 50, 54, 55, 23, 6, + 6, 35, 34, 38, 39, 7, 39, 55, 38, 38, 53, 52, 62, 2, 23, 55, 34, 38, 35, 34, + 14, 2, 7, 51, 52, 38, 39, 7, 7, 22, 23, 55, 1, 3, 8, 15, 8, 24, 56, 23, + 53, 57, 1, 188, 46, 15, 34, 19, 44, 62, 16, 11, 15, 78, 49, 23, 40, 18, 24, 55, + 24, 54, 53, 39, 62, 79, 8, 42, 2, 6, 2, 32, 48, 33, 19, 2, 249, 24, 25, 36, + 166, 3, 44, 37, 1, 219, 1, 1, 76, 19, 72, 23, 108, 88, 5, 15, 7, 143, 5, 3, + 14, 8, 68, 8, 18, 5, 5, 74, 19, 77, 31, 109, 70, 62, 92, 60, 30, 200, 131, 1, + 22, 37, 48, 25, 38, 59, 17, 114, 63, 79, 36, 115, 0, 1, 0, 54, 255, 243, 1, 226, + 2, 107, 0, 27, 0, 65, 64, 35, 14, 24, 11, 14, 0, 76, 26, 24, 23, 115, 5, 3, + 6, 29, 0, 0, 15, 28, 6, 23, 121, 3, 26, 26, 1, 16, 16, 19, 124, 12, 70, 27, + 121, 1, 65, 0, 63, 237, 63, 237, 50, 47, 17, 57, 47, 51, 237, 50, 1, 16, 198, 50, + 47, 16, 222, 50, 205, 253, 205, 51, 49, 48, 43, 19, 53, 33, 17, 51, 21, 35, 21, 20, + 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 53, 35, 53, 51, 53, 127, 1, + 28, 71, 71, 19, 45, 77, 58, 59, 81, 18, 33, 18, 62, 40, 62, 60, 125, 125, 2, 37, + 70, 254, 249, 67, 90, 44, 78, 57, 33, 34, 16, 67, 14, 32, 68, 81, 82, 67, 193, 0, + 2, 0, 71, 255, 86, 1, 205, 2, 158, 0, 11, 0, 39, 0, 78, 64, 41, 9, 3, 3, + 38, 35, 127, 17, 15, 18, 41, 36, 36, 12, 12, 27, 40, 18, 35, 134, 15, 0, 38, 16, + 38, 2, 8, 38, 38, 14, 28, 28, 31, 136, 24, 82, 6, 0, 39, 133, 14, 73, 0, 63, + 237, 222, 205, 63, 237, 50, 47, 17, 57, 47, 94, 93, 51, 237, 50, 1, 16, 198, 50, 47, + 50, 47, 16, 222, 50, 205, 237, 50, 50, 47, 205, 49, 48, 1, 34, 38, 53, 52, 54, 51, + 50, 22, 21, 20, 6, 7, 53, 33, 21, 51, 21, 35, 21, 20, 14, 2, 35, 34, 38, 39, + 55, 22, 22, 51, 50, 54, 53, 53, 35, 53, 51, 53, 1, 52, 26, 38, 38, 26, 27, 37, + 37, 221, 1, 14, 77, 77, 27, 45, 59, 33, 38, 77, 34, 25, 25, 61, 28, 40, 52, 188, + 188, 2, 24, 36, 31, 31, 36, 36, 31, 31, 36, 141, 69, 187, 63, 209, 48, 67, 42, 18, + 16, 17, 70, 12, 17, 41, 59, 210, 63, 118, 0, 2, 0, 29, 255, 89, 2, 0, 2, 121, + 0, 34, 0, 48, 0, 168, 185, 0, 47, 255, 232, 179, 14, 0, 77, 47, 184, 255, 248, 64, + 19, 13, 0, 77, 45, 24, 14, 0, 77, 45, 16, 13, 0, 77, 40, 16, 14, 0, 77, 37, + 184, 255, 240, 179, 14, 0, 77, 37, 184, 255, 232, 64, 14, 13, 0, 77, 32, 24, 15, 0, + 77, 32, 24, 8, 0, 77, 28, 184, 255, 224, 179, 18, 0, 77, 28, 184, 255, 232, 180, 15, + 17, 0, 76, 7, 184, 255, 232, 179, 15, 0, 77, 7, 184, 255, 240, 64, 41, 8, 0, 77, + 3, 24, 15, 0, 77, 3, 24, 8, 0, 77, 26, 43, 118, 18, 10, 50, 35, 118, 0, 64, + 11, 16, 72, 0, 49, 14, 124, 21, 49, 27, 38, 124, 30, 70, 46, 124, 5, 69, 0, 63, + 237, 63, 237, 50, 16, 220, 237, 1, 16, 214, 43, 237, 16, 222, 204, 237, 50, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 52, 62, 2, 51, 50, + 30, 2, 21, 17, 20, 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 53, 53, 6, + 6, 35, 34, 46, 2, 55, 20, 22, 51, 50, 62, 2, 53, 52, 38, 35, 34, 6, 29, 30, + 53, 75, 45, 46, 75, 54, 30, 15, 22, 5, 20, 5, 8, 8, 28, 11, 35, 43, 24, 8, + 11, 67, 45, 45, 75, 53, 30, 84, 57, 60, 31, 46, 31, 15, 61, 62, 60, 57, 1, 54, + 83, 122, 79, 39, 39, 79, 122, 83, 254, 187, 41, 43, 2, 2, 65, 2, 5, 21, 42, 63, + 41, 61, 32, 42, 38, 80, 122, 83, 122, 130, 28, 60, 96, 68, 122, 130, 130, 0, 2, 0, + 40, 255, 89, 1, 242, 1, 218, 0, 32, 0, 47, 0, 118, 185, 0, 46, 255, 224, 179, 14, + 0, 77, 46, 184, 255, 232, 179, 13, 0, 77, 36, 184, 255, 240, 64, 65, 14, 0, 77, 11, + 16, 15, 16, 0, 76, 11, 16, 8, 9, 0, 76, 5, 32, 15, 16, 0, 76, 5, 16, 10, + 0, 77, 5, 24, 9, 0, 77, 5, 32, 8, 0, 77, 41, 32, 127, 24, 17, 49, 33, 130, + 8, 64, 9, 12, 72, 8, 48, 20, 137, 27, 75, 45, 136, 13, 80, 41, 38, 136, 0, 3, + 81, 0, 63, 51, 237, 50, 63, 237, 63, 237, 1, 16, 214, 43, 237, 16, 222, 204, 237, 50, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 6, 6, 35, 34, 46, 2, 53, 52, + 62, 2, 51, 50, 22, 23, 17, 20, 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, + 53, 39, 20, 30, 2, 51, 50, 54, 55, 17, 38, 38, 35, 34, 6, 1, 73, 14, 53, 32, + 44, 71, 49, 26, 31, 55, 78, 48, 52, 81, 27, 20, 26, 6, 20, 6, 8, 8, 30, 11, + 37, 46, 27, 10, 204, 13, 28, 43, 30, 28, 50, 13, 11, 35, 32, 56, 71, 18, 10, 19, + 36, 64, 89, 53, 56, 90, 63, 34, 17, 8, 254, 48, 41, 43, 2, 2, 65, 2, 5, 21, + 42, 63, 41, 231, 36, 61, 45, 26, 22, 13, 1, 37, 4, 6, 89, 0, 2, 0, 18, 0, + 0, 1, 215, 2, 113, 0, 30, 0, 45, 0, 149, 181, 39, 24, 15, 0, 77, 30, 184, 255, + 208, 179, 16, 0, 77, 30, 184, 255, 248, 179, 10, 0, 77, 30, 184, 255, 232, 179, 9, 0, + 77, 30, 184, 255, 224, 64, 9, 8, 0, 77, 2, 24, 15, 0, 77, 1, 184, 255, 232, 64, + 52, 16, 0, 77, 3, 9, 14, 9, 120, 8, 3, 20, 8, 8, 3, 14, 14, 0, 19, 8, + 8, 41, 118, 0, 47, 35, 19, 115, 24, 22, 0, 20, 1, 8, 20, 46, 14, 3, 21, 121, + 35, 24, 24, 20, 31, 124, 28, 65, 20, 68, 9, 8, 68, 0, 63, 51, 63, 63, 237, 18, + 57, 47, 51, 237, 50, 50, 1, 16, 214, 94, 93, 206, 51, 237, 50, 16, 222, 237, 51, 47, + 17, 18, 57, 47, 135, 16, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, 43, + 1, 20, 6, 7, 30, 3, 23, 35, 46, 3, 39, 6, 34, 35, 35, 21, 35, 53, 35, 53, + 51, 17, 54, 54, 51, 50, 22, 39, 34, 6, 7, 21, 51, 50, 62, 2, 53, 52, 46, 2, + 1, 184, 60, 50, 15, 37, 38, 36, 15, 93, 14, 33, 33, 33, 15, 6, 24, 3, 53, 82, + 64, 64, 31, 70, 32, 112, 113, 219, 23, 24, 10, 36, 36, 57, 41, 22, 22, 37, 49, 1, + 174, 57, 87, 24, 24, 62, 69, 73, 34, 34, 70, 65, 56, 20, 1, 244, 244, 68, 1, 42, + 8, 7, 98, 27, 1, 2, 239, 10, 27, 47, 38, 36, 46, 27, 11, 0, 1, 0, 33, 0, + 0, 1, 174, 1, 218, 0, 21, 0, 47, 64, 23, 10, 23, 19, 17, 20, 127, 4, 2, 1, + 22, 20, 1, 134, 17, 4, 4, 0, 14, 136, 7, 80, 0, 76, 0, 63, 63, 237, 18, 57, + 47, 51, 237, 50, 1, 16, 214, 205, 51, 253, 50, 205, 16, 206, 49, 48, 51, 53, 35, 53, + 51, 53, 54, 51, 50, 22, 23, 7, 38, 38, 35, 34, 7, 21, 51, 21, 35, 21, 99, 66, + 66, 102, 104, 31, 59, 35, 15, 32, 49, 29, 62, 62, 166, 166, 183, 63, 193, 35, 5, 8, + 73, 9, 5, 17, 139, 63, 183, 0, 2, 0, 21, 0, 0, 1, 223, 2, 107, 0, 27, 0, + 33, 0, 105, 64, 56, 28, 17, 28, 10, 17, 120, 18, 26, 20, 18, 18, 26, 21, 21, 18, + 26, 115, 1, 28, 10, 10, 120, 9, 1, 20, 9, 9, 1, 6, 6, 9, 1, 1, 35, 34, + 17, 18, 65, 32, 31, 23, 4, 20, 14, 13, 1, 26, 28, 3, 7, 7, 10, 9, 65, 0, + 68, 0, 63, 63, 51, 57, 47, 23, 57, 51, 51, 51, 205, 50, 50, 50, 63, 51, 1, 17, + 18, 57, 47, 205, 50, 47, 135, 16, 43, 125, 16, 196, 1, 24, 16, 253, 205, 50, 47, 135, + 16, 43, 8, 125, 16, 196, 49, 48, 51, 53, 38, 38, 39, 35, 53, 51, 38, 39, 51, 22, + 22, 23, 51, 54, 54, 55, 51, 6, 7, 51, 21, 35, 6, 6, 7, 21, 3, 54, 54, 55, + 35, 22, 210, 30, 54, 24, 75, 52, 33, 25, 93, 11, 27, 16, 167, 15, 26, 13, 90, 27, + 31, 52, 76, 23, 53, 29, 40, 17, 30, 14, 124, 30, 230, 49, 94, 48, 64, 65, 69, 35, + 66, 33, 34, 65, 35, 69, 65, 64, 47, 93, 49, 232, 1, 45, 31, 59, 30, 60, 0, 2, + 0, 42, 255, 88, 1, 221, 1, 208, 0, 39, 0, 46, 0, 163, 64, 85, 25, 27, 30, 33, + 24, 33, 22, 20, 43, 41, 40, 33, 23, 40, 23, 129, 24, 33, 20, 24, 24, 33, 19, 44, + 40, 16, 40, 12, 9, 6, 15, 6, 16, 40, 16, 129, 15, 6, 20, 15, 15, 6, 40, 40, + 15, 28, 28, 24, 48, 39, 39, 11, 11, 15, 47, 44, 43, 30, 9, 27, 20, 19, 12, 33, + 6, 40, 40, 31, 12, 47, 12, 2, 12, 12, 15, 3, 136, 36, 75, 23, 24, 73, 16, 15, + 73, 0, 63, 51, 63, 51, 63, 237, 17, 57, 47, 93, 57, 17, 51, 51, 17, 51, 51, 51, + 205, 50, 50, 50, 1, 16, 198, 50, 47, 50, 47, 16, 206, 50, 47, 17, 57, 25, 47, 135, + 24, 16, 43, 135, 125, 196, 135, 196, 196, 16, 135, 196, 196, 135, 24, 16, 43, 135, 125, 196, + 16, 14, 196, 5, 196, 196, 14, 196, 16, 135, 5, 196, 196, 14, 196, 49, 48, 23, 22, 22, + 51, 50, 54, 55, 38, 38, 39, 35, 53, 51, 38, 38, 39, 51, 22, 22, 23, 51, 54, 54, + 55, 51, 6, 6, 7, 51, 21, 35, 6, 6, 7, 6, 6, 35, 34, 38, 39, 55, 54, 54, + 55, 35, 22, 22, 57, 10, 32, 14, 50, 55, 22, 28, 53, 23, 90, 67, 17, 29, 13, 88, + 10, 27, 17, 141, 11, 23, 12, 84, 12, 24, 14, 60, 79, 20, 43, 23, 35, 89, 74, 19, + 45, 8, 234, 12, 21, 11, 101, 13, 28, 87, 5, 6, 43, 49, 52, 115, 60, 60, 46, 92, + 45, 39, 94, 50, 43, 90, 50, 47, 91, 45, 60, 63, 118, 54, 80, 74, 10, 4, 240, 34, + 67, 34, 35, 68, 0, 1, 0, 44, 255, 91, 1, 175, 1, 208, 0, 40, 0, 130, 64, 16, + 36, 16, 15, 0, 77, 32, 32, 16, 0, 77, 32, 24, 15, 0, 77, 21, 184, 255, 232, 180, + 17, 18, 0, 76, 17, 184, 255, 232, 180, 17, 18, 0, 76, 17, 184, 255, 224, 64, 47, 16, + 0, 77, 5, 14, 9, 14, 129, 0, 5, 20, 0, 0, 5, 9, 9, 34, 130, 19, 42, 0, + 0, 1, 8, 0, 0, 27, 27, 6, 41, 40, 137, 0, 14, 14, 7, 28, 28, 31, 136, 24, + 75, 9, 5, 133, 7, 73, 0, 63, 237, 50, 63, 237, 50, 47, 17, 57, 47, 51, 237, 1, + 16, 198, 50, 47, 50, 47, 94, 93, 16, 222, 237, 51, 47, 135, 16, 43, 135, 125, 196, 49, + 48, 1, 43, 43, 43, 43, 43, 43, 55, 62, 3, 55, 35, 53, 33, 21, 14, 3, 7, 30, + 3, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 46, 2, 35, + 35, 154, 19, 44, 42, 37, 12, 244, 1, 91, 12, 37, 44, 47, 22, 38, 66, 50, 28, 33, + 62, 86, 52, 49, 83, 22, 18, 20, 73, 42, 73, 76, 30, 50, 63, 34, 15, 196, 22, 55, + 54, 50, 18, 69, 48, 20, 53, 58, 58, 25, 5, 23, 41, 61, 44, 48, 73, 48, 24, 16, + 11, 70, 10, 16, 65, 58, 35, 44, 25, 9, 0, 1, 0, 130, 2, 33, 1, 114, 2, 157, + 0, 21, 0, 21, 183, 5, 6, 17, 16, 0, 11, 5, 17, 0, 47, 51, 220, 205, 1, 47, + 205, 222, 205, 49, 48, 19, 50, 30, 2, 7, 35, 46, 3, 35, 34, 14, 2, 7, 35, 38, + 62, 2, 250, 25, 44, 33, 18, 1, 54, 1, 6, 14, 25, 19, 19, 24, 15, 6, 1, 54, + 1, 18, 33, 44, 2, 157, 17, 32, 46, 29, 10, 23, 19, 12, 12, 19, 23, 10, 29, 46, + 32, 17, 0, 2, 0, 100, 2, 6, 1, 144, 2, 181, 0, 3, 0, 7, 0, 36, 64, 15, + 4, 7, 5, 0, 3, 64, 2, 1, 6, 5, 0, 4, 128, 2, 6, 0, 47, 51, 26, 205, + 50, 1, 47, 51, 220, 50, 26, 205, 50, 16, 205, 50, 49, 48, 1, 23, 7, 39, 39, 23, + 7, 39, 1, 41, 103, 43, 110, 97, 103, 43, 110, 2, 181, 143, 32, 125, 50, 143, 32, 125, + 0, 3, 0, 167, 2, 1, 1, 77, 3, 45, 0, 3, 0, 15, 0, 27, 0, 79, 185, 0, + 15, 255, 224, 64, 17, 8, 17, 0, 76, 11, 32, 8, 17, 0, 76, 9, 40, 8, 17, 0, + 76, 5, 184, 255, 216, 64, 23, 8, 17, 0, 76, 4, 16, 22, 64, 0, 128, 2, 2, 10, + 22, 0, 3, 2, 1, 1, 13, 19, 25, 7, 0, 47, 221, 222, 205, 50, 47, 205, 221, 205, + 1, 47, 205, 50, 47, 26, 205, 26, 16, 222, 205, 49, 48, 43, 43, 43, 43, 1, 7, 39, + 55, 23, 20, 6, 35, 34, 38, 53, 52, 54, 51, 50, 22, 7, 52, 38, 35, 34, 6, 21, + 20, 22, 51, 50, 54, 1, 77, 141, 19, 135, 25, 50, 33, 35, 48, 48, 35, 33, 50, 40, + 25, 18, 18, 25, 25, 18, 18, 25, 2, 235, 53, 49, 70, 217, 38, 45, 45, 38, 38, 44, + 44, 38, 20, 23, 23, 20, 21, 24, 24, 0, 3, 0, 112, 2, 12, 1, 132, 2, 204, 0, + 11, 0, 23, 0, 27, 0, 39, 64, 18, 26, 26, 21, 146, 15, 9, 27, 27, 3, 146, 9, + 24, 27, 18, 6, 146, 12, 0, 0, 47, 50, 253, 50, 222, 205, 1, 47, 237, 50, 47, 16, + 222, 237, 50, 47, 49, 48, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, + 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 51, 21, 35, 160, 21, 27, 27, 21, 21, + 27, 27, 159, 20, 28, 28, 20, 20, 28, 28, 223, 226, 226, 2, 12, 27, 22, 23, 26, 26, + 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 192, 57, 0, 2, 0, 137, 2, 12, 1, + 107, 2, 204, 0, 11, 0, 15, 0, 26, 64, 11, 14, 15, 15, 9, 146, 3, 12, 15, 6, + 146, 0, 0, 47, 253, 222, 205, 1, 47, 237, 51, 47, 205, 49, 48, 19, 34, 38, 53, 52, + 54, 51, 50, 22, 21, 20, 6, 39, 51, 21, 35, 250, 21, 28, 28, 21, 21, 28, 28, 134, + 226, 226, 2, 12, 27, 23, 23, 27, 27, 23, 23, 27, 192, 57, 0, 3, 0, 107, 2, 12, + 1, 137, 2, 251, 0, 11, 0, 23, 0, 27, 0, 102, 64, 11, 27, 24, 17, 0, 77, 27, + 16, 16, 0, 77, 24, 184, 255, 232, 179, 20, 0, 77, 24, 184, 255, 232, 64, 45, 17, 0, + 77, 24, 27, 26, 112, 25, 160, 25, 176, 25, 3, 25, 25, 21, 146, 127, 15, 1, 15, 3, + 146, 64, 112, 9, 1, 9, 27, 24, 128, 25, 31, 26, 47, 26, 63, 26, 3, 26, 18, 6, + 146, 12, 0, 0, 47, 50, 237, 50, 220, 113, 50, 26, 205, 50, 1, 47, 93, 26, 237, 222, + 93, 237, 51, 47, 93, 51, 205, 50, 49, 48, 43, 43, 43, 43, 19, 34, 38, 53, 52, 54, + 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 23, + 7, 39, 155, 20, 28, 28, 20, 21, 28, 28, 169, 21, 28, 28, 21, 20, 28, 28, 162, 85, + 40, 99, 2, 12, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, + 239, 126, 34, 113, 0, 3, 0, 107, 2, 12, 1, 137, 2, 251, 0, 11, 0, 23, 0, 27, + 0, 102, 185, 0, 25, 255, 240, 64, 62, 16, 0, 77, 24, 24, 21, 0, 77, 24, 16, 20, + 0, 77, 24, 24, 17, 0, 77, 24, 25, 26, 111, 27, 1, 127, 27, 159, 27, 175, 27, 191, + 27, 4, 27, 27, 9, 21, 146, 127, 15, 1, 15, 3, 146, 64, 9, 25, 24, 128, 27, 26, + 64, 26, 31, 72, 26, 26, 18, 6, 146, 12, 0, 0, 47, 50, 237, 50, 51, 47, 43, 51, + 26, 205, 50, 1, 47, 26, 237, 222, 93, 237, 17, 51, 47, 93, 113, 51, 205, 50, 49, 48, + 43, 43, 43, 43, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 39, 23, 7, 39, 155, 20, 28, 28, 20, 21, 28, 28, + 169, 21, 28, 28, 21, 20, 28, 28, 68, 54, 99, 40, 2, 12, 27, 22, 23, 26, 26, 23, + 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 239, 47, 113, 34, 0, 3, 0, 107, 2, 12, + 1, 137, 2, 230, 0, 11, 0, 23, 0, 29, 0, 58, 64, 28, 28, 26, 24, 96, 29, 29, + 9, 21, 146, 15, 3, 146, 9, 27, 25, 28, 24, 26, 31, 29, 1, 29, 29, 18, 6, 146, + 12, 0, 0, 47, 50, 237, 50, 51, 47, 113, 205, 221, 50, 205, 50, 1, 47, 237, 222, 237, + 18, 57, 25, 47, 26, 205, 51, 205, 49, 48, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, + 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 55, 23, 55, 23, 7, + 155, 20, 28, 28, 20, 21, 28, 28, 169, 21, 28, 28, 21, 20, 28, 28, 226, 26, 84, 84, + 26, 110, 2, 12, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, + 178, 40, 54, 54, 40, 85, 0, 2, 0, 113, 2, 11, 1, 132, 2, 204, 0, 29, 0, 33, + 0, 73, 64, 12, 18, 24, 14, 0, 77, 18, 32, 12, 13, 0, 76, 3, 184, 255, 232, 64, + 25, 12, 0, 77, 29, 0, 16, 33, 33, 14, 16, 31, 31, 1, 30, 33, 20, 29, 29, 20, + 11, 26, 5, 14, 14, 5, 0, 47, 51, 47, 16, 205, 220, 205, 50, 47, 16, 222, 205, 1, + 47, 51, 47, 47, 205, 51, 47, 16, 220, 205, 49, 48, 43, 43, 43, 1, 14, 3, 35, 34, + 38, 39, 38, 38, 35, 34, 6, 7, 39, 62, 3, 51, 50, 22, 23, 22, 22, 51, 50, 54, + 55, 39, 51, 21, 35, 1, 132, 3, 16, 22, 30, 17, 16, 30, 13, 15, 18, 11, 15, 23, + 6, 40, 3, 15, 22, 28, 18, 17, 29, 13, 16, 17, 11, 15, 24, 6, 211, 227, 227, 2, + 92, 11, 26, 22, 16, 10, 8, 7, 7, 25, 13, 18, 11, 26, 23, 16, 10, 8, 8, 6, + 24, 13, 94, 57, 0, 3, 0, 80, 2, 145, 1, 164, 3, 62, 0, 3, 0, 15, 0, 27, + 0, 44, 64, 19, 0, 3, 2, 1, 1, 25, 19, 7, 13, 22, 10, 4, 64, 0, 128, 2, + 2, 16, 4, 0, 47, 51, 51, 47, 26, 205, 26, 16, 205, 50, 1, 47, 205, 220, 205, 51, + 47, 51, 205, 50, 49, 48, 19, 23, 7, 39, 7, 34, 38, 53, 52, 54, 51, 50, 22, 21, + 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 226, 70, 40, 84, 43, 21, + 28, 28, 21, 20, 28, 28, 222, 20, 28, 28, 20, 20, 29, 29, 3, 62, 107, 34, 95, 127, + 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 0, 3, 0, 80, + 2, 145, 1, 164, 3, 62, 0, 3, 0, 15, 0, 27, 0, 52, 64, 23, 3, 0, 0, 13, + 7, 25, 1, 2, 2, 19, 25, 10, 22, 16, 64, 0, 3, 128, 2, 1, 1, 4, 16, 0, + 47, 51, 51, 47, 51, 26, 205, 50, 26, 16, 205, 50, 1, 47, 205, 51, 47, 51, 16, 220, + 205, 51, 47, 51, 49, 48, 1, 7, 39, 55, 23, 34, 38, 53, 52, 54, 51, 50, 22, 21, + 20, 6, 33, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 1, 74, 86, 40, 72, 95, + 20, 28, 28, 20, 21, 28, 28, 254, 249, 20, 29, 29, 20, 20, 28, 28, 3, 16, 95, 34, + 107, 173, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 0, 3, + 0, 80, 2, 145, 1, 164, 3, 62, 0, 11, 0, 23, 0, 29, 0, 60, 64, 26, 21, 15, + 15, 29, 3, 64, 9, 9, 28, 26, 24, 96, 29, 28, 24, 64, 27, 25, 128, 26, 29, 29, + 18, 6, 12, 0, 0, 47, 50, 205, 50, 51, 47, 205, 26, 221, 50, 26, 205, 50, 1, 25, + 47, 26, 205, 51, 205, 51, 24, 47, 26, 205, 17, 51, 47, 205, 49, 48, 19, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, + 39, 55, 23, 55, 23, 7, 129, 20, 29, 29, 20, 20, 28, 28, 222, 20, 28, 28, 20, 21, + 28, 28, 226, 26, 57, 57, 26, 83, 2, 145, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, + 23, 26, 26, 23, 22, 27, 133, 40, 35, 35, 40, 66, 255, 255, 0, 91, 0, 0, 1, 204, + 3, 62, 2, 38, 0, 40, 0, 0, 1, 7, 0, 67, 0, 14, 0, 137, 0, 19, 185, 0, + 1, 255, 241, 64, 9, 15, 13, 0, 10, 80, 1, 1, 14, 79, 43, 43, 52, 0, 0, 0, + 255, 255, 0, 91, 0, 0, 1, 204, 3, 26, 2, 38, 0, 40, 0, 0, 1, 7, 0, 131, + 0, 18, 0, 139, 0, 26, 177, 2, 1, 184, 255, 249, 64, 13, 14, 32, 0, 10, 80, 2, + 1, 24, 79, 1, 1, 12, 79, 43, 43, 43, 52, 52, 0, 1, 0, 18, 255, 254, 1, 204, + 2, 107, 0, 36, 0, 121, 64, 31, 23, 32, 18, 0, 77, 23, 32, 16, 0, 77, 23, 24, + 15, 0, 77, 18, 40, 18, 0, 77, 18, 24, 16, 0, 77, 18, 32, 15, 0, 77, 4, 184, + 255, 232, 64, 45, 9, 10, 0, 76, 35, 35, 20, 118, 5, 38, 28, 15, 13, 31, 13, 2, + 13, 13, 36, 115, 0, 31, 1, 8, 31, 32, 37, 36, 31, 121, 33, 28, 25, 124, 0, 2, + 2, 33, 65, 30, 68, 17, 124, 10, 67, 0, 63, 237, 63, 63, 57, 47, 51, 237, 50, 16, + 237, 50, 1, 16, 214, 221, 94, 93, 237, 50, 47, 93, 50, 16, 222, 237, 51, 47, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 19, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 39, + 55, 22, 22, 51, 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 17, 35, 17, 35, 53, 33, + 21, 35, 185, 45, 43, 88, 99, 21, 42, 63, 43, 13, 27, 11, 3, 5, 15, 13, 49, 51, + 17, 30, 41, 24, 19, 39, 21, 82, 85, 1, 101, 190, 1, 120, 13, 108, 93, 39, 69, 52, + 30, 1, 2, 65, 1, 1, 70, 52, 38, 51, 32, 13, 7, 6, 254, 205, 2, 37, 70, 70, + 255, 255, 0, 54, 0, 0, 1, 204, 3, 62, 2, 38, 2, 195, 0, 0, 1, 7, 0, 143, + 0, 71, 0, 137, 0, 16, 64, 11, 1, 68, 12, 10, 8, 2, 80, 1, 1, 11, 79, 43, + 43, 52, 0, 0, 0, 1, 0, 38, 255, 243, 1, 204, 2, 121, 0, 38, 0, 217, 64, 12, + 37, 16, 13, 14, 0, 76, 31, 24, 13, 0, 77, 26, 184, 255, 240, 180, 17, 18, 0, 76, + 26, 184, 255, 232, 180, 15, 16, 0, 76, 26, 184, 255, 224, 179, 14, 0, 77, 17, 184, 255, + 240, 179, 18, 0, 77, 17, 184, 255, 224, 179, 17, 0, 77, 17, 184, 255, 216, 179, 12, 0, + 77, 17, 184, 255, 224, 179, 11, 0, 77, 17, 184, 255, 232, 179, 10, 0, 77, 17, 184, 255, + 240, 179, 9, 0, 77, 16, 184, 255, 240, 179, 16, 0, 77, 9, 184, 255, 240, 179, 18, 0, + 77, 9, 184, 255, 232, 179, 17, 0, 77, 9, 184, 255, 224, 180, 11, 12, 0, 76, 2, 184, + 255, 240, 179, 18, 0, 77, 2, 184, 255, 232, 179, 17, 0, 77, 2, 184, 255, 224, 64, 31, + 16, 0, 77, 14, 14, 3, 3, 24, 40, 12, 15, 118, 34, 39, 14, 121, 13, 13, 0, 23, + 23, 18, 124, 29, 70, 4, 4, 7, 124, 0, 69, 0, 63, 237, 50, 47, 63, 237, 50, 47, + 17, 57, 47, 237, 1, 16, 214, 237, 50, 16, 206, 50, 47, 50, 47, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 50, 22, 23, 7, + 38, 38, 35, 34, 14, 2, 7, 51, 21, 35, 22, 22, 51, 50, 62, 2, 55, 23, 14, 3, + 35, 34, 46, 2, 53, 52, 62, 2, 1, 39, 61, 85, 18, 21, 17, 70, 49, 43, 65, 45, + 25, 4, 228, 229, 7, 96, 85, 19, 40, 36, 29, 8, 21, 7, 27, 41, 54, 33, 57, 96, + 69, 38, 36, 68, 94, 2, 121, 29, 11, 64, 9, 24, 31, 55, 78, 47, 70, 103, 120, 7, + 11, 12, 6, 66, 5, 13, 14, 9, 43, 82, 120, 78, 78, 120, 82, 43, 0, 1, 0, 55, + 255, 243, 1, 190, 2, 121, 0, 49, 0, 216, 64, 11, 44, 24, 14, 0, 77, 44, 16, 13, + 0, 77, 39, 184, 255, 232, 179, 10, 0, 77, 39, 184, 255, 240, 179, 9, 0, 77, 36, 184, + 255, 240, 179, 13, 0, 77, 36, 184, 255, 208, 179, 10, 0, 77, 35, 184, 255, 240, 179, 15, + 0, 77, 27, 184, 255, 232, 179, 17, 0, 77, 26, 184, 255, 224, 179, 18, 0, 77, 20, 184, + 255, 232, 179, 18, 0, 77, 20, 184, 255, 240, 179, 17, 0, 77, 20, 184, 255, 224, 180, 15, + 16, 0, 76, 20, 184, 255, 232, 179, 14, 0, 77, 19, 184, 255, 224, 64, 62, 14, 0, 77, + 11, 16, 14, 15, 0, 76, 11, 32, 9, 10, 0, 76, 2, 16, 17, 0, 77, 1, 40, 18, + 0, 77, 21, 21, 3, 118, 38, 51, 46, 46, 28, 118, 0, 13, 16, 13, 2, 13, 50, 89, + 8, 1, 8, 41, 25, 33, 16, 47, 47, 0, 124, 41, 70, 22, 22, 25, 124, 16, 69, 0, + 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 17, 18, 57, 93, 1, 16, 214, 93, 237, 51, + 47, 16, 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 55, 50, 54, 53, 52, 46, 2, 39, 46, 3, 53, 52, 54, 51, + 50, 30, 2, 23, 7, 38, 38, 35, 34, 6, 21, 20, 30, 2, 23, 30, 3, 21, 20, 6, + 35, 34, 46, 2, 39, 55, 22, 22, 234, 63, 66, 24, 40, 50, 26, 30, 55, 43, 25, 102, + 91, 25, 49, 42, 33, 10, 25, 20, 71, 43, 45, 66, 19, 33, 44, 26, 38, 63, 46, 25, + 110, 102, 33, 58, 45, 34, 9, 24, 20, 79, 58, 48, 48, 29, 41, 31, 23, 10, 12, 30, + 40, 54, 37, 81, 91, 7, 10, 14, 7, 70, 12, 25, 45, 45, 26, 36, 27, 22, 11, 16, + 32, 44, 60, 43, 81, 87, 9, 14, 14, 6, 70, 11, 31, 0, 1, 0, 90, 0, 0, 1, + 155, 2, 107, 0, 11, 0, 43, 64, 21, 8, 5, 6, 11, 2, 1, 115, 6, 6, 12, 13, + 0, 7, 121, 9, 65, 1, 6, 121, 4, 68, 0, 63, 237, 50, 63, 237, 50, 1, 17, 18, + 57, 47, 253, 205, 50, 16, 205, 50, 49, 48, 1, 17, 51, 21, 33, 53, 51, 17, 35, 53, + 33, 21, 1, 35, 120, 254, 191, 119, 119, 1, 65, 2, 37, 254, 33, 70, 70, 1, 223, 70, + 70, 255, 255, 0, 90, 0, 0, 1, 155, 3, 26, 2, 38, 2, 182, 0, 0, 1, 7, 0, + 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, 14, 32, 4, 2, 80, 2, 9, 24, + 79, 1, 9, 12, 79, 43, 43, 43, 52, 52, 0, 0, 0, 0, 1, 0, 54, 255, 243, 1, + 164, 2, 107, 0, 19, 0, 74, 64, 23, 16, 24, 15, 16, 0, 76, 10, 24, 14, 0, 77, + 10, 32, 12, 13, 0, 76, 10, 24, 11, 0, 77, 5, 184, 255, 240, 64, 22, 17, 18, 0, + 76, 18, 115, 3, 21, 0, 0, 11, 20, 12, 12, 15, 124, 8, 70, 0, 121, 1, 65, 0, + 63, 237, 63, 237, 50, 47, 1, 16, 198, 50, 47, 16, 222, 237, 49, 48, 43, 43, 43, 43, + 43, 19, 53, 33, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, + 127, 1, 37, 19, 47, 79, 60, 60, 82, 19, 33, 19, 63, 42, 64, 63, 2, 37, 70, 254, + 92, 44, 78, 57, 33, 34, 16, 67, 14, 32, 68, 81, 1, 86, 0, 2, 0, 9, 255, 247, + 1, 222, 2, 107, 0, 28, 0, 40, 0, 86, 185, 0, 1, 255, 240, 64, 12, 11, 13, 0, + 76, 37, 25, 115, 10, 11, 115, 24, 24, 184, 255, 192, 64, 31, 9, 12, 72, 10, 24, 10, + 24, 17, 32, 118, 3, 42, 17, 41, 35, 124, 0, 0, 29, 11, 121, 24, 65, 17, 124, 16, + 70, 29, 124, 6, 70, 0, 63, 237, 63, 237, 63, 237, 18, 57, 47, 237, 1, 16, 198, 16, + 222, 237, 17, 57, 57, 47, 47, 43, 16, 237, 16, 237, 50, 49, 48, 43, 1, 50, 22, 21, + 20, 6, 35, 34, 38, 39, 17, 35, 20, 14, 2, 7, 39, 62, 5, 53, 51, 21, 54, 54, + 19, 50, 54, 53, 52, 38, 35, 34, 7, 21, 22, 22, 1, 81, 69, 72, 73, 77, 23, 48, + 26, 68, 5, 27, 59, 54, 9, 20, 27, 18, 10, 4, 1, 216, 8, 16, 6, 35, 31, 37, + 34, 13, 12, 8, 16, 1, 140, 100, 97, 95, 111, 8, 8, 2, 28, 160, 204, 122, 58, 14, + 73, 6, 24, 47, 76, 119, 168, 115, 225, 1, 1, 254, 179, 60, 76, 63, 64, 3, 255, 3, + 2, 0, 2, 0, 45, 255, 249, 1, 222, 2, 107, 0, 22, 0, 35, 0, 79, 185, 0, 2, + 255, 232, 64, 40, 13, 0, 77, 20, 33, 115, 17, 9, 9, 13, 26, 118, 3, 37, 16, 12, + 115, 13, 36, 18, 65, 29, 124, 0, 11, 121, 16, 0, 16, 0, 16, 13, 14, 65, 13, 68, + 23, 124, 6, 70, 0, 63, 237, 63, 63, 18, 57, 57, 47, 47, 16, 237, 16, 237, 63, 1, + 16, 214, 237, 50, 16, 222, 237, 17, 57, 47, 51, 237, 50, 49, 48, 43, 1, 50, 22, 21, + 20, 6, 35, 34, 38, 39, 17, 35, 17, 35, 17, 51, 21, 51, 53, 51, 21, 54, 54, 19, + 50, 54, 53, 52, 38, 35, 34, 34, 7, 21, 22, 22, 1, 81, 69, 72, 73, 77, 23, 48, + 26, 113, 73, 73, 113, 74, 8, 16, 6, 35, 31, 37, 34, 6, 13, 6, 8, 16, 1, 135, + 95, 97, 95, 111, 8, 8, 1, 44, 254, 203, 2, 107, 240, 240, 230, 1, 1, 254, 184, 60, + 76, 63, 59, 2, 251, 3, 2, 0, 1, 0, 18, 0, 0, 1, 191, 2, 107, 0, 25, 0, + 107, 185, 0, 20, 255, 232, 179, 12, 0, 77, 20, 184, 255, 240, 179, 11, 0, 77, 20, 184, + 255, 232, 179, 10, 0, 77, 20, 184, 255, 224, 64, 44, 9, 0, 77, 2, 24, 18, 0, 77, + 2, 40, 17, 0, 77, 25, 115, 24, 15, 13, 1, 8, 13, 13, 24, 27, 6, 14, 115, 9, + 10, 26, 25, 68, 3, 124, 18, 18, 8, 14, 9, 121, 11, 65, 8, 68, 0, 63, 63, 237, + 50, 18, 57, 47, 237, 63, 1, 16, 214, 221, 237, 50, 16, 206, 50, 47, 94, 93, 16, 237, + 49, 48, 43, 43, 43, 43, 43, 43, 37, 52, 38, 35, 34, 6, 7, 17, 35, 17, 35, 53, + 33, 21, 35, 21, 54, 54, 51, 50, 30, 2, 21, 21, 35, 1, 108, 40, 51, 26, 51, 11, + 82, 85, 1, 101, 190, 14, 56, 29, 48, 63, 37, 15, 83, 167, 83, 70, 10, 4, 254, 206, + 2, 37, 70, 70, 174, 5, 9, 28, 56, 83, 55, 167, 255, 255, 0, 64, 0, 0, 1, 235, + 3, 62, 2, 38, 0, 46, 0, 0, 1, 7, 0, 143, 255, 255, 0, 137, 0, 19, 185, 0, + 1, 255, 232, 64, 9, 25, 23, 16, 8, 80, 1, 0, 24, 79, 43, 43, 52, 0, 0, 0, + 255, 255, 0, 55, 0, 0, 1, 189, 3, 62, 2, 38, 2, 200, 0, 0, 1, 7, 0, 67, + 0, 4, 0, 137, 0, 16, 64, 11, 1, 0, 21, 19, 0, 9, 80, 1, 1, 20, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 9, 255, 248, 1, 238, 3, 35, 2, 38, 2, 211, 0, 0, + 1, 7, 3, 139, 0, 0, 0, 139, 0, 19, 185, 0, 1, 255, 254, 64, 9, 41, 49, 11, + 21, 80, 1, 11, 38, 79, 43, 43, 52, 0, 0, 0, 0, 1, 0, 49, 255, 91, 1, 198, + 2, 107, 0, 11, 0, 44, 64, 22, 6, 115, 9, 9, 10, 2, 115, 5, 13, 1, 115, 10, + 12, 3, 11, 65, 8, 6, 1, 121, 10, 68, 0, 63, 237, 51, 206, 63, 51, 1, 16, 214, + 237, 16, 222, 237, 17, 57, 47, 237, 49, 48, 19, 17, 51, 17, 51, 17, 35, 21, 35, 53, + 35, 17, 131, 240, 83, 164, 78, 163, 2, 107, 253, 219, 2, 37, 253, 149, 165, 165, 2, 107, + 255, 255, 0, 9, 0, 0, 1, 235, 2, 107, 2, 6, 0, 36, 0, 0, 255, 255, 0, 54, + 255, 251, 1, 195, 2, 107, 2, 6, 1, 219, 0, 0, 255, 255, 0, 54, 255, 251, 1, 195, + 2, 113, 2, 6, 0, 37, 0, 0, 0, 1, 0, 54, 0, 0, 1, 204, 2, 107, 0, 9, + 0, 37, 64, 18, 3, 11, 6, 6, 5, 115, 0, 9, 10, 5, 0, 121, 8, 68, 4, 121, + 1, 65, 0, 63, 237, 63, 237, 50, 1, 16, 214, 213, 237, 50, 47, 16, 206, 49, 48, 55, + 17, 33, 21, 35, 17, 51, 21, 33, 53, 143, 1, 61, 235, 134, 254, 207, 70, 2, 37, 70, + 254, 33, 70, 70, 0, 2, 0, 18, 255, 91, 1, 217, 2, 107, 0, 16, 0, 25, 0, 101, + 64, 20, 17, 115, 10, 11, 115, 25, 0, 10, 1, 8, 10, 25, 10, 25, 4, 16, 115, 13, + 27, 23, 184, 255, 216, 180, 17, 18, 0, 76, 23, 184, 255, 232, 179, 16, 0, 77, 23, 184, + 255, 240, 64, 22, 15, 0, 77, 23, 4, 4, 0, 115, 3, 26, 17, 121, 10, 65, 23, 12, + 4, 121, 15, 1, 0, 68, 0, 63, 205, 50, 237, 50, 50, 63, 237, 1, 16, 214, 237, 51, + 47, 51, 43, 43, 43, 16, 222, 237, 17, 57, 57, 47, 47, 94, 93, 16, 237, 16, 237, 49, + 48, 51, 21, 35, 53, 51, 62, 3, 55, 55, 33, 17, 51, 21, 35, 53, 3, 7, 14, 3, + 7, 51, 17, 96, 78, 36, 35, 36, 17, 5, 3, 3, 1, 25, 39, 78, 164, 2, 2, 6, + 15, 30, 27, 203, 165, 235, 48, 109, 121, 132, 72, 67, 253, 219, 235, 165, 2, 37, 67, 50, + 108, 107, 102, 45, 1, 223, 255, 255, 0, 91, 0, 0, 1, 204, 2, 107, 2, 6, 0, 40, + 0, 0, 0, 1, 0, 4, 0, 0, 1, 241, 2, 107, 0, 45, 0, 138, 64, 76, 27, 39, + 0, 33, 16, 33, 2, 33, 39, 44, 39, 120, 38, 33, 20, 38, 38, 33, 24, 44, 115, 1, + 6, 18, 12, 18, 21, 18, 120, 17, 12, 20, 17, 17, 12, 21, 1, 1, 7, 28, 28, 159, + 38, 1, 38, 47, 17, 17, 7, 46, 38, 39, 68, 28, 27, 65, 24, 21, 21, 12, 44, 1, + 1, 33, 12, 12, 22, 65, 18, 17, 65, 7, 6, 68, 0, 68, 0, 63, 63, 51, 63, 51, + 63, 57, 17, 51, 51, 17, 51, 17, 51, 17, 51, 63, 51, 63, 51, 1, 16, 198, 51, 47, + 16, 206, 93, 50, 47, 17, 57, 47, 51, 135, 16, 43, 135, 125, 196, 1, 17, 51, 24, 16, + 237, 50, 135, 16, 43, 135, 125, 196, 1, 93, 17, 51, 49, 48, 51, 17, 14, 3, 7, 35, + 62, 3, 55, 46, 3, 39, 51, 22, 22, 23, 17, 51, 17, 54, 54, 55, 51, 14, 3, 7, + 30, 3, 23, 35, 46, 3, 39, 17, 213, 20, 35, 32, 28, 12, 82, 12, 34, 40, 43, 21, + 18, 34, 35, 35, 18, 82, 29, 57, 31, 74, 30, 58, 29, 82, 18, 36, 34, 34, 18, 21, + 43, 41, 34, 12, 83, 12, 28, 32, 36, 19, 1, 45, 24, 70, 81, 86, 40, 43, 94, 88, + 78, 27, 34, 66, 69, 76, 44, 77, 133, 57, 1, 11, 254, 247, 57, 132, 76, 44, 76, 69, + 66, 34, 27, 78, 88, 94, 43, 40, 85, 81, 70, 24, 254, 212, 0, 1, 0, 38, 255, 244, + 1, 209, 2, 118, 0, 52, 0, 185, 64, 21, 48, 24, 16, 0, 77, 44, 24, 16, 0, 77, + 37, 32, 14, 0, 77, 37, 16, 13, 0, 77, 31, 184, 255, 208, 179, 18, 0, 77, 31, 184, + 255, 216, 179, 17, 0, 77, 31, 184, 255, 224, 179, 8, 0, 77, 27, 184, 255, 232, 180, 17, + 18, 0, 76, 23, 184, 255, 224, 179, 18, 0, 77, 23, 184, 255, 232, 179, 17, 0, 77, 19, + 184, 255, 216, 180, 17, 18, 0, 76, 19, 184, 255, 224, 64, 54, 8, 10, 0, 76, 14, 32, + 17, 18, 0, 76, 4, 16, 15, 16, 0, 76, 4, 24, 14, 0, 77, 24, 6, 118, 21, 21, + 46, 118, 29, 54, 52, 52, 13, 13, 39, 53, 24, 52, 121, 0, 0, 16, 40, 40, 43, 124, + 34, 70, 12, 12, 9, 124, 16, 69, 0, 63, 237, 50, 47, 63, 237, 50, 47, 17, 57, 47, + 237, 57, 1, 16, 198, 50, 47, 50, 47, 16, 222, 237, 51, 47, 237, 50, 49, 48, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 51, 50, 62, 2, 53, 52, + 38, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 21, 20, 6, 7, 30, 3, 21, 20, + 14, 2, 35, 34, 46, 2, 39, 55, 22, 22, 51, 50, 54, 53, 52, 46, 2, 35, 35, 141, + 33, 30, 64, 53, 34, 67, 54, 48, 79, 20, 27, 23, 96, 56, 44, 75, 54, 30, 55, 54, + 27, 49, 38, 22, 34, 63, 88, 54, 34, 59, 49, 36, 10, 25, 21, 84, 57, 72, 86, 32, + 54, 73, 41, 42, 1, 106, 9, 24, 41, 32, 41, 51, 21, 11, 65, 15, 22, 19, 39, 61, + 41, 43, 76, 17, 7, 26, 40, 54, 36, 50, 69, 44, 20, 10, 14, 15, 5, 66, 11, 29, + 53, 62, 36, 47, 26, 10, 0, 1, 0, 55, 0, 0, 1, 189, 2, 107, 0, 17, 0, 76, + 64, 47, 41, 8, 73, 8, 2, 10, 8, 1, 5, 17, 37, 17, 2, 8, 17, 12, 17, 120, + 3, 8, 20, 3, 3, 8, 12, 115, 9, 19, 3, 115, 0, 0, 16, 0, 2, 0, 18, 3, + 17, 68, 11, 68, 12, 8, 65, 2, 65, 0, 63, 63, 51, 63, 63, 51, 1, 16, 214, 93, + 237, 16, 222, 237, 135, 16, 43, 135, 125, 196, 1, 93, 93, 93, 49, 48, 51, 17, 51, 17, + 62, 3, 55, 51, 17, 35, 17, 14, 3, 7, 55, 75, 30, 48, 51, 61, 41, 84, 75, 28, + 53, 56, 60, 34, 2, 107, 254, 36, 73, 111, 105, 112, 75, 253, 149, 1, 238, 53, 105, 118, + 135, 83, 255, 255, 0, 55, 0, 0, 1, 189, 3, 35, 2, 38, 2, 200, 0, 0, 1, 7, + 3, 139, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 21, 29, 0, 9, 80, 1, 1, 18, + 79, 43, 43, 52, 0, 0, 255, 255, 0, 64, 0, 0, 1, 235, 2, 107, 2, 6, 0, 46, + 0, 0, 0, 1, 0, 13, 255, 247, 1, 199, 2, 107, 0, 21, 0, 90, 181, 12, 16, 13, + 0, 77, 6, 184, 255, 240, 179, 18, 0, 77, 6, 184, 255, 232, 179, 17, 0, 77, 6, 184, + 255, 240, 180, 11, 12, 0, 76, 5, 184, 255, 240, 64, 28, 18, 0, 77, 0, 115, 0, 17, + 1, 8, 17, 17, 9, 20, 115, 19, 23, 9, 22, 20, 68, 0, 121, 17, 65, 9, 124, 8, + 70, 0, 63, 237, 63, 237, 63, 1, 16, 198, 16, 222, 237, 17, 57, 47, 94, 93, 237, 49, + 48, 43, 43, 43, 43, 43, 19, 6, 6, 7, 14, 3, 7, 39, 54, 54, 55, 62, 3, 53, + 33, 17, 35, 17, 238, 3, 12, 22, 11, 30, 43, 57, 38, 9, 44, 48, 20, 10, 13, 7, + 3, 1, 41, 82, 2, 37, 102, 180, 81, 40, 70, 52, 31, 2, 72, 7, 65, 69, 36, 94, + 108, 118, 59, 253, 149, 2, 37, 255, 255, 0, 32, 0, 0, 1, 212, 2, 107, 2, 6, 0, + 48, 0, 0, 255, 255, 0, 45, 0, 0, 1, 199, 2, 107, 2, 6, 0, 43, 0, 0, 255, + 255, 0, 29, 255, 243, 1, 216, 2, 121, 2, 6, 0, 50, 0, 0, 0, 1, 0, 45, 0, + 0, 1, 199, 2, 107, 0, 7, 0, 32, 64, 16, 0, 115, 7, 9, 3, 115, 4, 8, 2, + 121, 5, 65, 4, 68, 0, 68, 0, 63, 63, 63, 237, 1, 16, 214, 237, 16, 222, 237, 49, + 48, 33, 17, 35, 17, 35, 17, 33, 17, 1, 117, 246, 82, 1, 154, 2, 37, 253, 219, 2, + 107, 253, 149, 255, 255, 0, 73, 0, 0, 1, 199, 2, 113, 2, 6, 0, 51, 0, 0, 255, + 255, 0, 46, 255, 243, 1, 204, 2, 121, 2, 6, 0, 38, 0, 0, 255, 255, 0, 39, 0, + 0, 1, 205, 2, 107, 2, 6, 0, 55, 0, 0, 0, 1, 0, 9, 255, 248, 1, 238, 2, + 107, 0, 37, 0, 116, 185, 0, 29, 255, 240, 179, 14, 0, 77, 27, 184, 255, 240, 64, 59, + 8, 0, 77, 3, 24, 13, 0, 77, 26, 20, 17, 20, 120, 21, 26, 20, 21, 21, 26, 6, + 16, 9, 10, 0, 76, 6, 12, 17, 12, 120, 11, 6, 20, 11, 11, 6, 17, 11, 21, 39, + 34, 34, 11, 38, 26, 17, 6, 6, 11, 0, 124, 31, 70, 21, 20, 65, 12, 11, 65, 0, + 63, 51, 63, 51, 63, 237, 18, 57, 17, 51, 51, 1, 16, 198, 50, 47, 16, 206, 17, 57, + 135, 16, 43, 135, 125, 196, 1, 43, 135, 24, 16, 43, 135, 125, 196, 49, 48, 1, 43, 43, + 43, 55, 50, 62, 2, 55, 55, 46, 3, 39, 51, 30, 3, 23, 54, 54, 55, 51, 14, 3, + 7, 14, 3, 35, 34, 38, 39, 55, 22, 22, 113, 24, 36, 29, 23, 11, 8, 37, 70, 61, + 50, 17, 90, 15, 41, 47, 51, 24, 37, 64, 27, 89, 20, 39, 39, 39, 20, 18, 38, 51, + 71, 49, 20, 45, 8, 15, 11, 32, 63, 13, 22, 32, 19, 14, 58, 127, 122, 109, 40, 38, + 92, 99, 99, 46, 89, 185, 100, 63, 108, 99, 93, 48, 42, 78, 60, 36, 9, 5, 70, 5, + 8, 0, 3, 0, 42, 0, 0, 1, 212, 2, 147, 0, 21, 0, 28, 0, 33, 0, 151, 64, + 17, 33, 16, 13, 14, 0, 76, 30, 24, 14, 0, 77, 30, 16, 13, 0, 77, 27, 184, 255, + 232, 180, 13, 14, 0, 76, 24, 184, 255, 232, 179, 14, 0, 77, 24, 184, 255, 240, 64, 27, + 13, 0, 77, 29, 24, 13, 0, 77, 32, 6, 14, 115, 25, 3, 17, 17, 0, 29, 24, 14, + 0, 77, 29, 118, 9, 35, 22, 184, 255, 232, 64, 38, 13, 14, 0, 76, 22, 118, 31, 0, + 1, 64, 0, 80, 0, 112, 0, 192, 0, 208, 0, 5, 47, 0, 1, 0, 34, 32, 25, 124, + 14, 17, 16, 68, 31, 26, 124, 6, 3, 4, 0, 47, 221, 50, 237, 50, 63, 221, 50, 237, + 50, 1, 16, 214, 93, 93, 113, 237, 43, 16, 214, 237, 43, 17, 57, 47, 51, 51, 237, 50, + 50, 43, 49, 48, 43, 43, 43, 43, 43, 43, 19, 52, 54, 55, 53, 51, 21, 22, 22, 21, + 20, 14, 2, 7, 21, 35, 53, 46, 3, 55, 20, 22, 23, 17, 6, 6, 5, 52, 39, 17, + 54, 42, 97, 80, 73, 79, 97, 25, 47, 65, 39, 73, 40, 65, 47, 25, 82, 45, 50, 50, + 45, 1, 6, 94, 94, 1, 76, 118, 124, 11, 74, 74, 11, 124, 118, 59, 90, 63, 36, 6, + 78, 78, 6, 36, 63, 90, 59, 82, 92, 11, 1, 114, 11, 93, 81, 160, 24, 254, 144, 23, + 255, 255, 0, 25, 0, 0, 1, 219, 2, 107, 2, 6, 0, 59, 0, 0, 0, 1, 0, 45, + 255, 91, 1, 217, 2, 107, 0, 11, 0, 40, 64, 20, 3, 115, 6, 10, 115, 7, 13, 2, + 115, 11, 12, 6, 2, 121, 9, 11, 68, 4, 0, 65, 0, 63, 50, 63, 206, 237, 50, 1, + 16, 214, 237, 16, 222, 237, 213, 237, 49, 48, 19, 51, 17, 51, 17, 51, 17, 51, 21, 35, + 53, 33, 45, 82, 225, 82, 39, 78, 254, 162, 2, 107, 253, 219, 2, 37, 253, 219, 235, 165, + 0, 1, 0, 54, 0, 0, 1, 191, 2, 107, 0, 23, 0, 77, 64, 16, 19, 48, 10, 0, + 77, 19, 24, 9, 0, 77, 19, 40, 8, 0, 77, 3, 184, 255, 224, 179, 18, 0, 77, 3, + 184, 255, 232, 64, 23, 17, 0, 77, 8, 12, 115, 11, 25, 0, 115, 21, 24, 5, 124, 16, + 16, 12, 22, 65, 12, 68, 9, 65, 0, 63, 63, 63, 18, 57, 47, 237, 1, 16, 214, 237, + 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 19, 20, 30, 2, 51, 50, 54, 55, 17, + 51, 17, 35, 53, 6, 6, 35, 34, 46, 2, 53, 53, 51, 137, 11, 28, 48, 36, 32, 59, + 14, 82, 82, 15, 66, 35, 60, 76, 43, 16, 83, 1, 184, 38, 57, 38, 18, 10, 4, 1, + 60, 253, 149, 232, 5, 9, 31, 58, 82, 51, 179, 0, 1, 0, 45, 0, 0, 1, 199, 2, + 107, 0, 11, 0, 46, 64, 23, 6, 115, 3, 3, 11, 7, 115, 10, 13, 2, 115, 11, 12, + 6, 2, 121, 11, 68, 8, 4, 4, 0, 65, 0, 63, 50, 47, 50, 63, 237, 50, 1, 16, + 214, 237, 16, 222, 237, 17, 57, 47, 237, 49, 48, 19, 51, 17, 51, 17, 51, 17, 51, 17, + 51, 17, 33, 45, 75, 93, 75, 92, 75, 254, 102, 2, 107, 253, 219, 1, 58, 254, 198, 2, + 37, 253, 149, 0, 1, 0, 45, 255, 91, 1, 217, 2, 107, 0, 15, 0, 65, 64, 37, 6, + 115, 3, 3, 15, 7, 115, 79, 10, 95, 10, 175, 10, 191, 10, 4, 10, 14, 115, 11, 17, + 2, 115, 15, 16, 10, 6, 2, 121, 13, 15, 68, 8, 4, 4, 0, 65, 0, 63, 50, 47, + 50, 63, 206, 237, 50, 50, 1, 16, 214, 237, 16, 222, 237, 213, 93, 237, 17, 57, 47, 237, + 49, 48, 19, 51, 17, 51, 17, 51, 17, 51, 17, 51, 17, 51, 21, 35, 53, 33, 45, 75, + 82, 75, 82, 75, 39, 78, 254, 162, 2, 107, 253, 219, 1, 58, 254, 198, 2, 37, 253, 219, + 235, 165, 0, 2, 0, 18, 255, 249, 1, 204, 2, 107, 0, 19, 0, 36, 0, 128, 64, 31, + 35, 32, 15, 0, 77, 34, 24, 16, 0, 77, 34, 16, 14, 0, 77, 23, 48, 16, 0, 77, + 23, 32, 14, 0, 77, 22, 40, 15, 0, 77, 18, 184, 255, 232, 179, 10, 0, 77, 18, 184, + 255, 240, 179, 9, 0, 77, 2, 184, 255, 216, 179, 18, 0, 77, 2, 184, 255, 224, 179, 17, + 0, 77, 2, 184, 255, 240, 64, 27, 9, 10, 0, 76, 20, 118, 0, 38, 28, 12, 115, 9, + 10, 37, 25, 124, 15, 15, 32, 9, 121, 12, 65, 32, 124, 5, 70, 0, 63, 237, 63, 237, + 18, 57, 47, 237, 1, 16, 214, 221, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 37, 20, 14, 2, 35, 34, 38, 39, 17, 35, 53, 51, 21, 54, + 51, 50, 30, 2, 7, 52, 46, 2, 35, 34, 6, 7, 17, 22, 22, 51, 50, 62, 2, 1, + 204, 34, 58, 79, 46, 31, 66, 34, 94, 176, 25, 25, 48, 79, 57, 32, 84, 20, 38, 52, + 33, 9, 20, 10, 13, 24, 12, 28, 49, 36, 20, 194, 56, 77, 47, 21, 8, 8, 2, 28, + 70, 226, 3, 23, 48, 77, 54, 38, 51, 30, 13, 1, 1, 254, 254, 2, 1, 13, 30, 50, + 0, 3, 0, 36, 255, 250, 1, 208, 2, 107, 0, 14, 0, 29, 0, 33, 0, 69, 64, 42, + 28, 16, 17, 18, 0, 76, 18, 24, 17, 18, 0, 76, 15, 118, 15, 0, 1, 8, 0, 33, + 115, 32, 35, 9, 24, 115, 6, 34, 33, 68, 30, 65, 20, 124, 12, 12, 7, 65, 27, 124, + 3, 67, 0, 63, 237, 63, 57, 47, 237, 63, 63, 1, 16, 214, 237, 50, 16, 222, 253, 222, + 94, 93, 237, 49, 48, 43, 43, 37, 20, 6, 35, 34, 38, 39, 17, 51, 21, 54, 54, 51, + 50, 22, 7, 52, 46, 2, 35, 34, 6, 7, 21, 22, 22, 51, 50, 54, 19, 51, 17, 35, + 1, 71, 91, 83, 26, 65, 26, 78, 11, 20, 10, 82, 90, 81, 10, 22, 38, 28, 8, 16, + 10, 12, 21, 10, 48, 41, 140, 78, 78, 194, 100, 100, 7, 8, 2, 98, 227, 2, 2, 103, + 99, 30, 48, 35, 19, 2, 2, 254, 3, 2, 65, 1, 235, 253, 149, 0, 2, 0, 45, 255, + 250, 1, 204, 2, 107, 0, 14, 0, 31, 0, 88, 64, 27, 29, 48, 15, 16, 0, 76, 29, + 24, 14, 0, 77, 18, 64, 16, 0, 77, 18, 48, 15, 0, 77, 18, 24, 14, 0, 77, 14, + 184, 255, 224, 179, 8, 0, 77, 1, 184, 255, 232, 64, 22, 8, 0, 77, 15, 118, 0, 33, + 9, 24, 115, 6, 32, 20, 124, 12, 12, 7, 65, 27, 124, 3, 67, 0, 63, 237, 63, 57, + 47, 237, 1, 16, 214, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 37, + 20, 6, 35, 34, 38, 39, 17, 51, 21, 54, 50, 51, 50, 22, 7, 52, 46, 2, 35, 34, + 34, 7, 17, 22, 22, 51, 50, 62, 2, 1, 204, 131, 128, 37, 82, 37, 82, 17, 34, 18, + 136, 128, 84, 27, 48, 68, 40, 17, 32, 17, 15, 38, 28, 33, 61, 46, 28, 194, 100, 100, + 6, 9, 2, 98, 225, 2, 100, 102, 38, 51, 31, 13, 2, 254, 253, 2, 1, 13, 31, 50, + 0, 1, 0, 46, 255, 243, 1, 213, 2, 121, 0, 38, 0, 165, 64, 84, 37, 40, 18, 0, + 77, 37, 32, 16, 17, 0, 76, 30, 24, 18, 0, 77, 30, 16, 17, 0, 77, 30, 32, 13, + 0, 77, 30, 24, 11, 12, 0, 76, 23, 8, 16, 0, 77, 22, 16, 18, 0, 77, 22, 24, + 17, 0, 77, 22, 56, 13, 0, 77, 13, 24, 18, 0, 77, 13, 16, 17, 0, 77, 13, 32, + 16, 0, 77, 13, 24, 14, 15, 0, 76, 7, 24, 13, 0, 77, 3, 16, 13, 0, 77, 2, + 184, 255, 232, 64, 31, 14, 0, 77, 27, 24, 118, 5, 40, 36, 36, 25, 25, 15, 39, 25, + 121, 26, 26, 0, 16, 16, 21, 124, 10, 70, 35, 35, 32, 124, 0, 69, 0, 63, 237, 50, + 47, 63, 237, 50, 47, 17, 57, 47, 237, 1, 16, 198, 50, 47, 50, 47, 16, 222, 237, 50, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, + 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 39, 55, 30, 3, 51, 50, 54, 55, 35, + 53, 51, 46, 3, 35, 34, 6, 7, 39, 54, 54, 212, 58, 95, 67, 37, 39, 69, 96, 57, + 33, 53, 41, 28, 7, 21, 8, 29, 36, 40, 19, 85, 97, 7, 230, 229, 4, 26, 45, 65, + 43, 49, 70, 17, 21, 18, 85, 2, 121, 41, 82, 121, 79, 80, 121, 81, 41, 9, 14, 13, + 5, 66, 6, 12, 11, 7, 115, 108, 70, 47, 78, 55, 31, 24, 9, 64, 11, 29, 0, 2, + 0, 45, 255, 243, 1, 217, 2, 121, 0, 24, 0, 44, 0, 134, 182, 16, 40, 17, 18, 0, + 76, 12, 184, 255, 216, 179, 18, 0, 77, 12, 184, 255, 224, 179, 17, 0, 77, 6, 184, 255, + 216, 179, 18, 0, 77, 6, 184, 255, 224, 64, 27, 17, 0, 77, 3, 32, 17, 18, 0, 76, + 2, 24, 10, 0, 77, 2, 16, 9, 0, 77, 35, 118, 9, 46, 25, 118, 1, 19, 184, 255, + 192, 64, 31, 9, 12, 72, 19, 0, 21, 115, 22, 45, 20, 121, 15, 0, 31, 0, 2, 0, + 0, 22, 23, 65, 22, 68, 30, 124, 14, 70, 40, 124, 4, 69, 0, 63, 237, 63, 237, 63, + 63, 18, 57, 47, 93, 237, 1, 16, 214, 253, 50, 222, 43, 50, 237, 16, 222, 237, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 43, 19, 51, 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, + 35, 34, 46, 2, 39, 35, 17, 35, 17, 51, 19, 20, 30, 2, 51, 50, 62, 2, 53, 52, + 46, 2, 35, 34, 14, 2, 123, 61, 5, 74, 63, 36, 54, 38, 19, 20, 38, 55, 34, 34, + 52, 36, 20, 1, 60, 78, 78, 139, 8, 16, 25, 17, 17, 25, 17, 8, 8, 17, 25, 17, + 17, 25, 16, 8, 1, 102, 146, 129, 36, 78, 123, 86, 87, 122, 78, 36, 34, 72, 114, 81, + 254, 224, 2, 107, 254, 203, 55, 93, 68, 38, 38, 68, 93, 55, 57, 94, 66, 36, 36, 66, + 94, 0, 2, 0, 57, 0, 0, 1, 202, 2, 113, 0, 28, 0, 43, 0, 150, 185, 0, 31, + 255, 248, 64, 98, 14, 0, 77, 9, 48, 15, 16, 0, 76, 9, 16, 10, 0, 77, 9, 24, + 8, 9, 0, 76, 7, 16, 16, 0, 77, 7, 24, 15, 0, 77, 6, 56, 10, 0, 77, 6, + 48, 9, 0, 77, 6, 56, 8, 0, 77, 4, 16, 18, 0, 77, 4, 8, 17, 0, 77, 28, + 5, 0, 5, 120, 23, 28, 20, 23, 28, 23, 23, 40, 18, 115, 17, 45, 0, 0, 34, 118, + 0, 8, 1, 8, 8, 44, 23, 5, 19, 121, 40, 40, 11, 18, 68, 29, 124, 11, 65, 28, + 0, 68, 0, 63, 50, 63, 237, 63, 18, 57, 47, 237, 50, 50, 1, 16, 214, 94, 93, 237, + 51, 47, 16, 222, 237, 50, 50, 47, 135, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 51, 62, 3, 55, 38, 38, 53, 52, 54, 51, 50, 30, 2, + 23, 17, 35, 53, 35, 34, 34, 39, 14, 3, 7, 19, 34, 14, 2, 21, 20, 30, 2, 51, + 51, 53, 38, 38, 57, 15, 36, 36, 35, 15, 52, 60, 114, 111, 16, 40, 41, 39, 15, 82, + 71, 3, 20, 7, 14, 33, 34, 34, 15, 156, 27, 49, 37, 22, 22, 41, 58, 35, 54, 10, + 42, 36, 74, 68, 60, 23, 25, 86, 58, 97, 98, 2, 3, 6, 4, 253, 158, 243, 1, 21, + 57, 65, 68, 33, 2, 43, 12, 29, 48, 36, 38, 46, 26, 9, 239, 2, 3, 255, 255, 0, + 58, 255, 245, 1, 176, 1, 219, 2, 6, 0, 68, 0, 0, 0, 2, 0, 45, 255, 244, 1, + 204, 2, 181, 0, 34, 0, 53, 0, 161, 64, 21, 48, 24, 15, 0, 77, 48, 16, 14, 0, + 77, 42, 32, 15, 0, 77, 42, 16, 14, 0, 77, 38, 184, 255, 232, 180, 14, 15, 0, 76, + 33, 184, 255, 232, 64, 19, 9, 0, 77, 19, 8, 10, 0, 77, 13, 24, 16, 0, 77, 13, + 24, 8, 0, 77, 9, 184, 255, 192, 179, 16, 0, 77, 8, 184, 255, 224, 179, 8, 0, 77, + 5, 184, 255, 216, 179, 8, 0, 77, 4, 184, 255, 216, 179, 16, 0, 77, 4, 184, 255, 216, + 64, 30, 9, 0, 77, 45, 130, 6, 27, 27, 6, 55, 0, 53, 130, 16, 54, 53, 50, 137, + 0, 3, 3, 40, 27, 136, 26, 77, 40, 136, 11, 81, 0, 63, 237, 63, 237, 18, 57, 47, + 51, 237, 50, 1, 16, 214, 237, 50, 16, 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 22, 21, 20, 14, 2, + 35, 34, 46, 2, 53, 52, 62, 2, 55, 62, 3, 55, 23, 14, 3, 7, 6, 6, 7, 20, + 30, 2, 51, 50, 62, 2, 53, 52, 46, 2, 35, 34, 6, 7, 134, 26, 68, 33, 99, 100, + 25, 51, 80, 54, 62, 79, 46, 18, 21, 58, 101, 80, 25, 35, 28, 22, 12, 9, 6, 14, + 24, 39, 31, 86, 92, 15, 10, 27, 47, 37, 33, 48, 30, 15, 12, 30, 50, 38, 36, 63, + 18, 1, 155, 22, 24, 122, 109, 47, 86, 66, 39, 47, 80, 107, 60, 78, 133, 102, 67, 12, + 4, 5, 4, 3, 3, 72, 2, 3, 3, 5, 3, 11, 89, 236, 42, 76, 59, 34, 27, 46, + 61, 34, 30, 59, 45, 28, 35, 23, 0, 3, 0, 71, 255, 248, 1, 195, 1, 220, 0, 14, + 0, 27, 0, 50, 0, 128, 185, 0, 48, 255, 232, 180, 10, 11, 0, 76, 48, 184, 255, 224, + 179, 9, 0, 77, 48, 184, 255, 232, 179, 8, 0, 77, 38, 184, 255, 232, 180, 12, 13, 0, + 76, 38, 184, 255, 240, 179, 11, 0, 77, 38, 184, 255, 224, 64, 45, 10, 0, 77, 6, 16, + 18, 0, 77, 6, 8, 17, 0, 77, 43, 18, 130, 40, 40, 8, 130, 46, 52, 27, 0, 127, + 0, 31, 1, 8, 31, 51, 43, 14, 134, 27, 27, 3, 23, 136, 35, 80, 3, 136, 28, 81, + 0, 63, 237, 63, 237, 18, 57, 47, 237, 57, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, + 51, 47, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 55, 22, 22, 51, 50, 62, + 2, 53, 52, 46, 2, 35, 35, 55, 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 21, 19, + 34, 38, 39, 17, 54, 54, 51, 50, 30, 2, 21, 20, 6, 7, 22, 22, 21, 20, 14, 2, + 152, 10, 52, 26, 26, 47, 35, 21, 19, 32, 44, 25, 97, 86, 48, 63, 21, 35, 44, 22, + 21, 40, 14, 85, 54, 86, 26, 26, 86, 54, 36, 70, 54, 33, 34, 29, 38, 46, 33, 58, + 78, 63, 2, 3, 7, 18, 30, 23, 22, 30, 18, 7, 61, 29, 41, 21, 25, 14, 4, 2, + 1, 131, 254, 230, 10, 6, 1, 196, 6, 10, 12, 30, 50, 38, 35, 47, 14, 14, 51, 48, + 42, 56, 33, 14, 0, 1, 0, 107, 0, 0, 1, 184, 1, 208, 0, 5, 0, 26, 64, 12, + 3, 7, 5, 127, 0, 6, 4, 133, 1, 73, 0, 74, 0, 63, 63, 237, 1, 16, 214, 237, + 16, 206, 49, 48, 51, 17, 33, 21, 35, 17, 107, 1, 77, 251, 1, 208, 69, 254, 117, 0, + 2, 0, 27, 255, 127, 1, 208, 1, 208, 0, 15, 0, 23, 0, 77, 185, 0, 21, 255, 248, + 179, 9, 0, 77, 21, 184, 255, 232, 64, 34, 8, 0, 77, 18, 130, 6, 6, 1, 16, 127, + 8, 12, 127, 9, 25, 23, 130, 1, 13, 127, 0, 24, 11, 14, 23, 8, 1, 133, 13, 74, + 18, 133, 6, 73, 0, 63, 237, 63, 237, 50, 50, 205, 50, 1, 16, 214, 237, 213, 237, 16, + 222, 237, 213, 237, 17, 57, 47, 237, 49, 48, 43, 43, 55, 51, 62, 3, 55, 33, 17, 51, + 21, 35, 53, 33, 21, 35, 37, 17, 35, 20, 14, 2, 7, 27, 36, 30, 34, 17, 6, 1, + 1, 18, 39, 78, 254, 231, 78, 1, 60, 113, 8, 19, 32, 23, 70, 43, 90, 97, 105, 59, + 254, 118, 199, 129, 129, 199, 1, 69, 40, 89, 86, 79, 31, 255, 255, 0, 40, 255, 245, 1, + 199, 1, 219, 2, 6, 0, 72, 0, 0, 0, 1, 0, 7, 0, 0, 1, 235, 1, 208, 0, + 49, 0, 168, 64, 95, 0, 11, 16, 11, 2, 11, 11, 6, 17, 22, 17, 129, 16, 11, 20, + 16, 16, 11, 11, 5, 0, 5, 129, 6, 11, 20, 6, 6, 11, 36, 36, 41, 30, 25, 30, + 129, 31, 36, 20, 31, 31, 36, 36, 42, 47, 42, 129, 41, 36, 20, 41, 41, 36, 47, 0, + 22, 127, 25, 25, 31, 6, 6, 16, 51, 41, 41, 31, 50, 0, 47, 47, 36, 22, 25, 25, + 11, 36, 36, 24, 48, 73, 41, 42, 73, 31, 30, 74, 24, 74, 16, 17, 74, 6, 5, 73, + 0, 63, 51, 63, 51, 63, 63, 51, 63, 51, 63, 18, 57, 17, 51, 51, 17, 51, 17, 51, + 17, 51, 1, 16, 198, 50, 47, 16, 206, 50, 47, 17, 57, 47, 237, 50, 51, 135, 16, 43, + 135, 125, 196, 135, 24, 16, 43, 135, 8, 125, 196, 135, 5, 24, 16, 43, 135, 125, 196, 135, + 24, 16, 43, 135, 8, 125, 196, 1, 93, 49, 48, 1, 62, 3, 55, 51, 14, 3, 7, 30, + 3, 23, 35, 46, 3, 39, 21, 35, 53, 14, 3, 7, 35, 62, 3, 55, 46, 3, 39, 51, + 30, 3, 23, 53, 51, 1, 30, 12, 28, 27, 26, 10, 83, 16, 35, 36, 36, 16, 21, 44, + 42, 37, 14, 82, 10, 30, 33, 35, 15, 73, 16, 35, 33, 30, 10, 82, 14, 38, 42, 43, + 21, 16, 36, 36, 35, 15, 82, 10, 26, 28, 28, 12, 73, 1, 13, 21, 51, 52, 50, 21, + 26, 57, 58, 55, 22, 20, 59, 66, 70, 31, 26, 58, 57, 52, 20, 213, 214, 20, 52, 57, + 59, 26, 31, 70, 66, 59, 20, 22, 55, 58, 58, 25, 21, 51, 53, 51, 21, 197, 0, 1, + 0, 72, 255, 245, 1, 191, 1, 220, 0, 44, 0, 139, 64, 11, 31, 40, 18, 0, 77, 31, + 32, 17, 0, 77, 17, 184, 255, 224, 179, 11, 0, 77, 17, 184, 255, 232, 180, 9, 10, 0, + 76, 17, 184, 255, 224, 179, 8, 0, 77, 6, 184, 255, 232, 179, 12, 0, 77, 6, 184, 255, + 200, 179, 11, 0, 77, 6, 184, 255, 224, 64, 40, 10, 0, 77, 13, 38, 130, 8, 8, 29, + 130, 16, 46, 33, 33, 0, 0, 0, 22, 1, 8, 22, 45, 13, 33, 134, 34, 34, 3, 23, + 23, 26, 136, 19, 81, 44, 44, 41, 136, 3, 80, 0, 63, 237, 50, 47, 63, 237, 50, 47, + 17, 57, 47, 237, 57, 1, 16, 198, 94, 93, 50, 47, 50, 47, 16, 222, 237, 51, 47, 237, + 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 30, 2, 21, 20, + 14, 2, 7, 22, 22, 21, 20, 6, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, + 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 86, 33, 79, 39, 38, 70, + 54, 32, 14, 22, 25, 12, 38, 51, 113, 97, 60, 87, 18, 17, 15, 78, 55, 66, 60, 60, + 51, 98, 92, 51, 50, 56, 60, 28, 73, 26, 1, 196, 11, 13, 13, 32, 51, 38, 18, 32, + 26, 18, 4, 14, 53, 48, 67, 73, 18, 8, 70, 5, 19, 38, 32, 36, 42, 66, 34, 29, + 31, 36, 14, 12, 0, 1, 0, 63, 0, 0, 1, 182, 1, 208, 0, 17, 0, 80, 64, 49, + 36, 8, 1, 73, 17, 89, 17, 121, 17, 3, 56, 17, 1, 43, 17, 1, 17, 8, 3, 8, + 132, 12, 17, 20, 12, 12, 17, 3, 127, 0, 19, 12, 127, 0, 9, 1, 8, 9, 18, 3, + 17, 73, 11, 73, 12, 8, 74, 2, 74, 0, 63, 63, 51, 63, 63, 51, 1, 16, 214, 94, + 93, 237, 16, 222, 237, 135, 16, 43, 135, 125, 196, 1, 93, 93, 93, 93, 49, 48, 1, 17, + 35, 17, 14, 3, 7, 35, 17, 51, 17, 62, 3, 55, 1, 182, 81, 27, 59, 59, 54, 21, + 74, 80, 23, 54, 58, 58, 28, 1, 208, 254, 48, 1, 98, 34, 92, 97, 94, 37, 1, 208, + 254, 178, 39, 91, 91, 83, 30, 255, 255, 0, 63, 0, 0, 1, 182, 2, 152, 2, 38, 2, + 232, 0, 0, 1, 6, 3, 139, 12, 0, 0, 16, 64, 11, 1, 11, 21, 29, 9, 0, 80, + 1, 0, 18, 79, 43, 43, 52, 255, 255, 0, 71, 0, 0, 1, 222, 1, 208, 2, 6, 1, + 21, 0, 0, 0, 1, 0, 13, 255, 247, 1, 173, 1, 208, 0, 21, 0, 82, 64, 18, 12, + 24, 15, 16, 0, 76, 11, 24, 15, 16, 0, 76, 11, 32, 11, 0, 77, 7, 184, 255, 216, + 180, 17, 18, 0, 76, 7, 184, 255, 224, 64, 25, 12, 13, 0, 76, 0, 127, 17, 17, 9, + 20, 127, 19, 23, 9, 22, 20, 74, 0, 133, 17, 73, 9, 133, 8, 81, 0, 63, 237, 63, + 237, 63, 1, 16, 198, 16, 222, 237, 17, 57, 47, 237, 49, 48, 43, 43, 43, 43, 43, 19, + 20, 14, 2, 7, 6, 6, 7, 39, 54, 54, 55, 62, 2, 52, 53, 33, 17, 35, 17, 235, + 3, 7, 12, 10, 20, 82, 76, 12, 44, 51, 15, 13, 13, 6, 1, 18, 83, 1, 139, 30, + 67, 67, 65, 28, 57, 82, 8, 70, 8, 49, 35, 30, 76, 84, 84, 37, 254, 48, 1, 139, + 0, 1, 0, 27, 0, 0, 1, 217, 1, 208, 0, 36, 0, 124, 64, 75, 90, 16, 106, 16, + 2, 43, 16, 59, 16, 75, 16, 3, 16, 31, 26, 31, 132, 13, 16, 20, 13, 16, 26, 23, + 100, 10, 1, 82, 10, 1, 52, 10, 68, 10, 2, 35, 10, 1, 10, 32, 0, 32, 132, 13, + 10, 20, 13, 13, 10, 13, 3, 23, 130, 17, 22, 38, 0, 3, 130, 9, 4, 37, 26, 16, + 73, 0, 10, 73, 31, 13, 32, 32, 23, 4, 74, 0, 63, 51, 51, 47, 51, 51, 63, 51, + 63, 51, 1, 16, 214, 50, 237, 50, 16, 222, 50, 237, 17, 57, 135, 16, 43, 135, 125, 196, + 1, 93, 93, 93, 93, 17, 51, 135, 24, 43, 135, 125, 196, 1, 93, 93, 49, 48, 19, 6, + 6, 7, 35, 62, 3, 55, 51, 22, 22, 23, 54, 54, 55, 51, 30, 3, 23, 35, 38, 38, + 39, 14, 3, 7, 35, 46, 3, 119, 8, 1, 3, 80, 1, 7, 9, 11, 6, 77, 19, 52, + 40, 41, 53, 20, 76, 6, 11, 9, 6, 2, 80, 3, 3, 7, 13, 21, 19, 22, 15, 82, + 14, 22, 19, 21, 1, 86, 91, 173, 78, 55, 118, 120, 118, 53, 48, 144, 100, 100, 144, 48, + 53, 118, 120, 118, 55, 78, 180, 84, 31, 53, 56, 63, 42, 42, 63, 56, 53, 0, 1, 0, + 71, 0, 0, 1, 173, 1, 208, 0, 11, 0, 57, 64, 32, 9, 1, 127, 0, 13, 8, 4, + 127, 0, 5, 1, 5, 12, 10, 73, 3, 133, 15, 8, 31, 8, 2, 8, 8, 8, 5, 6, + 73, 5, 74, 1, 74, 0, 63, 63, 63, 18, 57, 47, 94, 93, 237, 63, 1, 16, 214, 93, + 237, 50, 16, 222, 237, 50, 49, 48, 33, 35, 53, 35, 21, 35, 17, 51, 21, 51, 53, 51, + 1, 173, 83, 192, 83, 83, 192, 83, 205, 205, 1, 208, 189, 189, 255, 255, 0, 40, 255, 245, + 1, 204, 1, 219, 2, 6, 0, 82, 0, 0, 0, 1, 0, 71, 0, 0, 1, 173, 1, 208, + 0, 7, 0, 38, 64, 20, 1, 127, 0, 9, 4, 127, 0, 5, 1, 8, 5, 8, 3, 133, + 6, 73, 5, 74, 1, 74, 0, 63, 63, 63, 237, 1, 16, 214, 94, 93, 237, 16, 222, 237, + 49, 48, 33, 35, 17, 35, 17, 35, 17, 33, 1, 173, 83, 192, 83, 1, 102, 1, 139, 254, + 117, 1, 208, 255, 255, 0, 71, 255, 91, 1, 204, 1, 218, 2, 6, 0, 83, 0, 0, 255, + 255, 0, 49, 255, 245, 1, 195, 1, 219, 2, 6, 0, 70, 0, 0, 0, 1, 0, 58, 0, + 0, 1, 186, 1, 208, 0, 7, 0, 38, 64, 19, 1, 3, 127, 6, 0, 4, 1, 8, 4, + 4, 9, 8, 2, 5, 133, 7, 73, 4, 74, 0, 63, 63, 237, 50, 1, 17, 18, 57, 47, + 94, 93, 206, 253, 206, 49, 48, 1, 21, 35, 17, 35, 17, 35, 53, 1, 186, 151, 82, 151, + 1, 208, 69, 254, 117, 1, 139, 69, 255, 255, 0, 36, 255, 88, 1, 205, 1, 208, 2, 6, + 0, 92, 0, 0, 0, 3, 0, 26, 255, 91, 1, 218, 2, 181, 0, 6, 0, 13, 0, 39, + 0, 154, 185, 0, 31, 255, 240, 179, 18, 0, 77, 31, 184, 255, 248, 64, 26, 17, 0, 77, + 12, 32, 16, 0, 77, 12, 40, 14, 15, 0, 76, 8, 40, 15, 16, 0, 76, 8, 32, 14, + 0, 77, 5, 184, 255, 208, 179, 16, 0, 77, 5, 184, 255, 224, 180, 14, 15, 0, 76, 2, + 184, 255, 216, 180, 15, 16, 0, 76, 2, 184, 255, 208, 64, 41, 14, 0, 77, 10, 130, 0, + 34, 1, 8, 34, 29, 7, 39, 127, 16, 0, 130, 21, 26, 3, 16, 16, 41, 40, 27, 28, + 77, 13, 4, 136, 29, 26, 73, 7, 3, 136, 39, 16, 76, 15, 75, 0, 63, 63, 51, 237, + 50, 63, 51, 237, 50, 63, 51, 1, 17, 18, 57, 47, 51, 51, 221, 237, 16, 253, 50, 50, + 221, 94, 93, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 20, 22, 23, + 17, 6, 6, 23, 54, 54, 53, 52, 38, 39, 17, 35, 53, 46, 3, 53, 52, 62, 2, 55, + 53, 55, 21, 30, 3, 21, 20, 14, 2, 7, 108, 61, 44, 44, 61, 178, 44, 62, 62, 44, + 73, 38, 67, 52, 30, 30, 52, 67, 38, 73, 38, 68, 52, 30, 30, 52, 68, 38, 232, 78, + 85, 2, 1, 74, 2, 85, 243, 2, 85, 78, 78, 85, 2, 253, 206, 162, 1, 32, 60, 87, + 55, 55, 87, 60, 32, 1, 212, 14, 226, 1, 32, 60, 87, 55, 55, 87, 60, 32, 1, 255, + 255, 0, 29, 0, 0, 1, 216, 1, 208, 2, 6, 0, 91, 0, 0, 0, 1, 0, 71, 255, + 127, 1, 208, 1, 208, 0, 11, 0, 46, 64, 24, 9, 127, 0, 4, 127, 1, 13, 8, 127, + 0, 5, 1, 8, 5, 12, 10, 6, 73, 0, 8, 133, 3, 5, 74, 0, 63, 206, 237, 50, + 63, 51, 1, 16, 222, 94, 93, 237, 16, 222, 237, 213, 237, 49, 48, 37, 51, 21, 35, 53, + 33, 17, 51, 17, 51, 17, 51, 1, 169, 39, 78, 254, 197, 83, 189, 82, 70, 199, 129, 1, + 208, 254, 118, 1, 138, 0, 1, 0, 54, 0, 0, 1, 173, 1, 208, 0, 23, 0, 59, 64, + 36, 20, 32, 10, 11, 0, 76, 20, 24, 9, 0, 77, 20, 32, 8, 0, 77, 7, 11, 127, + 10, 25, 1, 127, 22, 24, 4, 136, 17, 17, 11, 23, 73, 11, 74, 8, 73, 0, 63, 63, + 63, 18, 57, 47, 237, 1, 16, 214, 237, 16, 222, 237, 50, 49, 48, 43, 43, 43, 19, 21, + 20, 22, 51, 50, 54, 55, 53, 51, 17, 35, 53, 14, 3, 35, 34, 46, 2, 53, 53, 136, + 57, 50, 36, 48, 19, 83, 83, 7, 25, 31, 34, 16, 40, 66, 47, 26, 1, 208, 136, 53, + 42, 7, 5, 219, 254, 48, 179, 2, 5, 5, 4, 17, 38, 63, 46, 137, 0, 1, 0, 45, + 0, 0, 1, 199, 1, 208, 0, 11, 0, 48, 64, 24, 7, 127, 4, 4, 0, 8, 127, 11, + 13, 3, 127, 0, 12, 9, 1, 5, 5, 1, 73, 7, 3, 133, 0, 74, 0, 63, 237, 50, + 63, 51, 47, 17, 51, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 237, 49, 48, 51, 17, + 51, 17, 51, 17, 51, 17, 51, 17, 51, 17, 45, 75, 93, 75, 92, 75, 1, 208, 254, 118, + 1, 31, 254, 225, 1, 138, 254, 48, 0, 1, 0, 45, 255, 127, 1, 208, 1, 208, 0, 15, + 0, 65, 64, 37, 14, 127, 11, 11, 7, 15, 127, 79, 2, 95, 2, 175, 2, 191, 2, 4, + 2, 6, 127, 3, 17, 10, 127, 7, 16, 12, 12, 0, 8, 73, 14, 2, 10, 133, 5, 7, + 74, 0, 63, 206, 237, 50, 50, 63, 51, 51, 47, 1, 16, 214, 237, 16, 222, 237, 213, 93, + 237, 17, 57, 47, 237, 49, 48, 1, 51, 17, 51, 21, 35, 53, 33, 17, 51, 17, 51, 17, + 51, 17, 51, 1, 94, 75, 39, 78, 254, 171, 75, 77, 75, 78, 1, 208, 254, 118, 199, 129, + 1, 208, 254, 118, 1, 31, 254, 225, 0, 2, 0, 18, 255, 246, 1, 208, 1, 208, 0, 20, + 0, 37, 0, 91, 185, 0, 14, 255, 232, 179, 11, 0, 77, 14, 184, 255, 208, 179, 10, 0, + 77, 14, 184, 255, 232, 179, 9, 0, 77, 10, 184, 255, 232, 180, 10, 11, 0, 76, 10, 184, + 255, 224, 64, 26, 9, 0, 77, 24, 130, 12, 39, 32, 3, 127, 0, 1, 38, 29, 137, 7, + 7, 3, 21, 137, 17, 81, 0, 133, 3, 73, 0, 63, 237, 63, 237, 17, 57, 47, 237, 1, + 16, 214, 221, 237, 50, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 19, 35, 53, 51, 21, + 54, 54, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 38, 39, 55, 50, 54, 53, 52, 46, + 2, 35, 34, 6, 7, 21, 30, 3, 109, 91, 173, 14, 58, 25, 36, 64, 48, 28, 27, 50, + 71, 43, 43, 82, 39, 169, 48, 54, 16, 28, 37, 21, 23, 47, 17, 5, 20, 24, 26, 1, + 139, 69, 177, 3, 7, 17, 36, 58, 40, 42, 59, 38, 17, 9, 11, 48, 41, 46, 22, 32, + 21, 10, 3, 5, 159, 1, 2, 1, 1, 0, 3, 0, 45, 255, 246, 1, 199, 1, 208, 0, + 12, 0, 29, 0, 33, 0, 83, 185, 0, 24, 255, 232, 179, 13, 0, 77, 21, 184, 255, 232, + 179, 14, 0, 77, 21, 184, 255, 240, 64, 33, 13, 0, 77, 10, 130, 15, 23, 1, 8, 23, + 31, 127, 30, 35, 15, 4, 127, 29, 34, 31, 74, 0, 137, 18, 18, 13, 7, 137, 26, 81, + 32, 13, 73, 0, 63, 51, 63, 237, 17, 57, 47, 237, 63, 1, 16, 214, 237, 50, 16, 222, + 253, 222, 94, 93, 237, 49, 48, 43, 43, 43, 55, 34, 6, 7, 21, 22, 22, 51, 50, 54, + 53, 52, 38, 39, 51, 21, 54, 54, 51, 50, 30, 2, 21, 20, 6, 35, 34, 38, 39, 5, + 35, 17, 51, 180, 16, 29, 12, 8, 34, 13, 33, 41, 46, 161, 78, 11, 37, 20, 28, 51, + 39, 23, 87, 69, 35, 63, 33, 1, 154, 78, 78, 230, 3, 5, 159, 2, 3, 41, 46, 45, + 40, 234, 177, 3, 7, 17, 36, 58, 40, 84, 72, 9, 11, 10, 1, 208, 0, 2, 0, 71, + 255, 246, 1, 204, 1, 208, 0, 14, 0, 31, 0, 98, 185, 0, 26, 255, 224, 179, 11, 0, + 77, 26, 184, 255, 216, 180, 9, 10, 0, 76, 23, 184, 255, 224, 179, 11, 0, 77, 23, 184, + 255, 216, 179, 10, 0, 77, 23, 184, 255, 232, 64, 33, 9, 0, 77, 6, 32, 17, 0, 77, + 5, 24, 18, 0, 77, 3, 130, 25, 33, 17, 12, 127, 31, 32, 8, 137, 20, 20, 15, 0, + 137, 28, 81, 15, 73, 0, 63, 63, 237, 17, 57, 47, 237, 1, 16, 214, 237, 50, 16, 222, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 55, 50, 54, 53, 52, 46, 2, 35, 34, 6, + 7, 21, 22, 22, 3, 51, 21, 54, 54, 51, 50, 30, 2, 21, 20, 6, 35, 34, 38, 39, + 254, 58, 64, 19, 33, 45, 25, 26, 55, 19, 12, 61, 156, 83, 16, 64, 29, 40, 72, 54, + 31, 115, 96, 47, 87, 44, 58, 41, 46, 22, 32, 21, 10, 3, 5, 159, 2, 3, 1, 150, + 177, 3, 7, 17, 36, 58, 40, 84, 72, 9, 11, 0, 1, 0, 59, 255, 245, 1, 204, 1, + 219, 0, 36, 0, 80, 64, 48, 23, 40, 14, 0, 77, 14, 40, 14, 0, 77, 14, 32, 13, + 0, 77, 14, 16, 12, 0, 77, 20, 17, 130, 0, 38, 29, 29, 18, 18, 8, 37, 28, 28, + 25, 136, 32, 18, 134, 19, 19, 32, 80, 9, 9, 12, 136, 5, 81, 0, 63, 237, 50, 47, + 63, 57, 47, 237, 16, 237, 50, 47, 1, 16, 198, 50, 47, 50, 47, 16, 222, 237, 50, 49, + 48, 43, 43, 43, 43, 37, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 62, 2, + 55, 35, 53, 51, 46, 3, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 1, 204, 35, + 65, 93, 57, 51, 81, 19, 12, 20, 73, 38, 36, 61, 46, 28, 3, 213, 211, 4, 28, 44, + 58, 34, 39, 53, 29, 19, 24, 70, 50, 56, 92, 66, 36, 234, 58, 91, 63, 33, 15, 9, + 69, 9, 12, 20, 37, 54, 33, 67, 30, 49, 34, 19, 10, 11, 71, 8, 13, 34, 62, 90, + 0, 2, 0, 54, 255, 245, 1, 217, 1, 219, 0, 26, 0, 38, 0, 135, 185, 0, 24, 255, + 232, 179, 11, 0, 77, 24, 184, 255, 240, 179, 10, 0, 77, 20, 184, 255, 232, 64, 76, 10, + 11, 0, 76, 14, 24, 11, 0, 77, 14, 40, 10, 0, 77, 3, 16, 12, 13, 0, 76, 3, + 24, 11, 0, 77, 3, 16, 10, 0, 77, 33, 130, 22, 40, 27, 130, 12, 32, 5, 48, 5, + 64, 5, 3, 5, 11, 7, 127, 32, 8, 1, 8, 39, 36, 136, 17, 80, 6, 133, 15, 11, + 31, 11, 2, 8, 11, 11, 8, 9, 73, 8, 74, 30, 136, 0, 81, 0, 63, 237, 63, 63, + 18, 57, 47, 94, 93, 237, 63, 237, 1, 16, 214, 93, 253, 50, 222, 93, 50, 237, 16, 222, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 5, 34, 46, 2, 39, 35, 21, 35, 17, + 51, 21, 51, 62, 3, 51, 50, 30, 2, 21, 20, 14, 2, 39, 20, 22, 51, 50, 54, 53, + 52, 38, 35, 34, 6, 1, 80, 25, 47, 38, 26, 3, 65, 78, 78, 64, 3, 26, 38, 47, + 24, 26, 50, 39, 24, 23, 39, 49, 87, 26, 34, 34, 26, 26, 34, 34, 26, 11, 20, 48, + 79, 60, 196, 1, 208, 199, 61, 81, 48, 20, 23, 55, 94, 71, 71, 94, 55, 23, 243, 84, + 89, 89, 84, 85, 88, 88, 0, 2, 0, 40, 0, 0, 1, 173, 1, 220, 0, 26, 0, 37, + 0, 127, 185, 0, 32, 255, 232, 64, 77, 17, 18, 0, 76, 17, 16, 11, 0, 77, 17, 40, + 9, 10, 0, 76, 17, 32, 8, 0, 77, 13, 16, 11, 0, 77, 13, 56, 8, 10, 0, 76, + 12, 6, 3, 6, 129, 7, 12, 20, 7, 7, 12, 3, 3, 15, 37, 25, 127, 24, 39, 7, + 7, 33, 130, 0, 15, 1, 8, 15, 38, 12, 3, 3, 26, 134, 37, 37, 20, 25, 74, 30, + 133, 20, 80, 7, 6, 74, 0, 63, 51, 63, 237, 63, 18, 57, 47, 237, 50, 47, 50, 1, + 16, 214, 94, 93, 237, 51, 47, 16, 222, 237, 50, 17, 57, 47, 135, 16, 43, 135, 125, 196, + 49, 48, 1, 43, 43, 43, 43, 43, 43, 37, 34, 38, 39, 6, 6, 7, 35, 62, 3, 55, + 38, 38, 53, 52, 62, 2, 51, 50, 22, 23, 17, 35, 53, 53, 38, 38, 35, 34, 6, 21, + 20, 22, 51, 51, 1, 20, 14, 25, 11, 29, 52, 21, 84, 11, 28, 30, 30, 14, 50, 35, + 29, 52, 71, 42, 59, 80, 28, 83, 10, 43, 30, 51, 62, 64, 51, 81, 180, 1, 1, 43, + 97, 42, 26, 55, 51, 47, 18, 18, 67, 38, 39, 58, 39, 20, 10, 8, 254, 54, 180, 223, + 2, 3, 42, 45, 45, 34, 255, 255, 0, 40, 255, 245, 1, 199, 2, 181, 2, 38, 0, 72, + 0, 0, 1, 6, 0, 67, 1, 0, 0, 16, 64, 11, 2, 0, 37, 35, 19, 2, 80, 2, + 0, 36, 79, 43, 43, 52, 255, 255, 0, 40, 255, 245, 1, 199, 2, 143, 2, 38, 0, 72, + 0, 0, 1, 6, 0, 131, 13, 0, 0, 23, 64, 16, 3, 2, 15, 36, 54, 19, 2, 80, + 3, 0, 46, 79, 2, 0, 34, 79, 43, 43, 43, 52, 52, 0, 0, 1, 0, 20, 255, 89, + 1, 176, 2, 181, 0, 43, 0, 139, 64, 11, 35, 24, 18, 0, 77, 35, 16, 16, 0, 77, + 19, 184, 255, 224, 180, 14, 15, 0, 76, 19, 184, 255, 232, 179, 13, 0, 77, 14, 184, 255, + 232, 179, 17, 0, 77, 14, 184, 255, 224, 64, 55, 8, 10, 0, 76, 15, 25, 31, 25, 2, + 25, 25, 40, 32, 127, 17, 45, 7, 6, 4, 40, 127, 43, 1, 0, 41, 1, 41, 44, 41, + 74, 29, 137, 22, 75, 7, 42, 4, 1, 1, 3, 36, 136, 0, 11, 16, 11, 32, 11, 3, + 8, 11, 80, 2, 3, 77, 0, 63, 51, 63, 94, 93, 237, 18, 57, 47, 51, 205, 50, 63, + 237, 63, 1, 16, 214, 93, 50, 206, 253, 50, 204, 51, 16, 222, 237, 17, 57, 47, 93, 49, + 48, 43, 43, 43, 43, 43, 43, 19, 51, 53, 55, 21, 51, 21, 35, 21, 54, 54, 51, 50, + 30, 2, 21, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 17, 52, + 38, 35, 34, 6, 7, 17, 35, 17, 35, 20, 66, 82, 162, 162, 19, 49, 22, 49, 67, 40, + 18, 11, 30, 52, 40, 13, 32, 10, 8, 8, 22, 8, 33, 27, 45, 55, 23, 49, 10, 82, + 66, 2, 98, 69, 14, 83, 62, 91, 8, 9, 31, 56, 78, 47, 254, 250, 41, 63, 42, 21, + 5, 2, 65, 2, 2, 43, 41, 1, 3, 86, 71, 11, 5, 254, 127, 2, 36, 255, 255, 0, + 107, 0, 0, 1, 184, 2, 181, 2, 38, 2, 227, 0, 0, 1, 6, 0, 143, 54, 0, 0, + 16, 64, 11, 1, 34, 8, 6, 0, 2, 80, 1, 1, 7, 79, 43, 43, 52, 0, 1, 0, + 49, 255, 245, 1, 194, 1, 219, 0, 36, 0, 88, 185, 0, 23, 255, 192, 179, 14, 0, 77, + 23, 184, 255, 216, 179, 13, 0, 77, 23, 184, 255, 232, 179, 12, 0, 77, 14, 184, 255, 216, + 64, 29, 14, 0, 77, 8, 8, 29, 38, 17, 20, 130, 0, 37, 19, 134, 18, 18, 5, 28, + 28, 25, 136, 32, 81, 9, 9, 12, 136, 5, 80, 0, 63, 237, 50, 47, 63, 237, 50, 47, + 17, 57, 47, 237, 1, 16, 214, 237, 50, 16, 206, 50, 47, 49, 48, 43, 43, 43, 43, 55, + 52, 62, 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 7, 51, 21, 35, 30, 3, + 51, 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 49, 36, 66, 92, 56, 50, 70, 24, 19, + 29, 53, 39, 34, 58, 44, 28, 4, 211, 213, 3, 28, 46, 61, 36, 38, 73, 20, 12, 19, + 81, 51, 57, 93, 65, 35, 234, 55, 90, 62, 34, 13, 8, 71, 11, 10, 19, 34, 49, 30, + 67, 33, 54, 37, 20, 12, 9, 69, 9, 15, 33, 63, 91, 255, 255, 0, 66, 255, 245, 1, + 178, 1, 219, 2, 6, 0, 86, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 158, 2, + 6, 0, 76, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 143, 2, 38, 1, 12, 0, + 0, 1, 6, 0, 131, 220, 0, 0, 26, 177, 2, 1, 184, 255, 218, 64, 13, 24, 42, 1, + 11, 80, 2, 2, 34, 79, 1, 2, 22, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, + 71, 255, 86, 1, 128, 2, 158, 2, 6, 0, 77, 0, 0, 0, 2, 0, 13, 255, 246, 1, + 222, 1, 208, 0, 29, 0, 41, 0, 119, 185, 0, 23, 255, 224, 179, 13, 0, 77, 23, 184, + 255, 232, 179, 12, 0, 77, 23, 184, 255, 224, 179, 11, 0, 77, 20, 184, 255, 232, 64, 17, + 11, 16, 0, 76, 35, 15, 127, 0, 1, 127, 14, 160, 14, 176, 14, 2, 14, 184, 255, 192, + 64, 31, 9, 12, 72, 0, 14, 0, 14, 8, 30, 130, 21, 43, 8, 42, 33, 137, 18, 18, + 14, 39, 136, 26, 81, 1, 133, 14, 73, 8, 136, 7, 81, 0, 63, 237, 63, 237, 63, 237, + 17, 57, 47, 237, 1, 16, 198, 16, 222, 237, 17, 57, 57, 47, 47, 43, 93, 16, 237, 16, + 237, 50, 49, 48, 43, 43, 43, 43, 19, 35, 21, 20, 14, 2, 7, 39, 62, 3, 53, 53, + 51, 21, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 52, 38, 35, 34, 7, + 21, 22, 22, 51, 50, 54, 240, 68, 7, 29, 59, 52, 12, 31, 35, 16, 4, 214, 22, 26, + 55, 62, 20, 37, 51, 31, 23, 50, 26, 161, 25, 32, 11, 20, 8, 14, 7, 33, 26, 1, + 139, 34, 83, 130, 94, 56, 7, 70, 7, 43, 80, 118, 82, 73, 174, 7, 82, 69, 43, 59, + 37, 17, 8, 8, 139, 38, 45, 5, 161, 1, 1, 39, 0, 2, 0, 54, 255, 246, 1, 222, + 1, 208, 0, 23, 0, 34, 0, 103, 185, 0, 17, 255, 232, 179, 13, 0, 77, 14, 184, 255, + 240, 180, 15, 16, 0, 76, 14, 184, 255, 232, 64, 44, 13, 14, 0, 76, 10, 30, 127, 7, + 23, 23, 3, 24, 130, 15, 36, 6, 2, 127, 16, 3, 1, 3, 35, 27, 137, 12, 1, 134, + 6, 12, 6, 12, 6, 4, 32, 136, 20, 81, 8, 73, 4, 73, 3, 74, 0, 63, 63, 63, + 63, 237, 17, 57, 57, 47, 47, 16, 237, 16, 237, 1, 16, 214, 93, 237, 50, 16, 222, 237, + 17, 57, 47, 51, 237, 50, 49, 48, 43, 43, 43, 55, 35, 21, 35, 17, 51, 21, 51, 53, + 51, 21, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 52, 38, 35, 34, 7, + 21, 22, 51, 50, 54, 240, 113, 73, 73, 113, 73, 23, 25, 55, 62, 20, 37, 51, 31, 23, + 50, 26, 161, 25, 32, 11, 20, 16, 13, 33, 26, 211, 211, 1, 208, 187, 187, 175, 8, 82, + 69, 43, 59, 37, 17, 8, 8, 139, 38, 45, 5, 160, 3, 39, 255, 255, 0, 20, 0, 0, + 1, 176, 2, 181, 2, 6, 1, 2, 0, 0, 255, 255, 0, 71, 0, 0, 1, 222, 2, 181, + 2, 38, 1, 21, 0, 0, 1, 6, 0, 143, 34, 0, 0, 16, 64, 11, 1, 13, 25, 23, + 13, 5, 80, 1, 14, 24, 79, 43, 43, 52, 255, 255, 0, 63, 0, 0, 1, 182, 2, 181, + 2, 38, 2, 232, 0, 0, 1, 6, 0, 67, 4, 0, 0, 16, 64, 11, 1, 0, 21, 19, + 9, 0, 80, 1, 0, 20, 79, 43, 43, 52, 255, 255, 0, 36, 255, 88, 1, 205, 2, 152, + 2, 38, 0, 92, 0, 0, 1, 6, 3, 139, 18, 0, 0, 16, 64, 11, 1, 19, 36, 44, + 32, 21, 80, 1, 9, 33, 79, 43, 43, 52, 0, 1, 0, 71, 255, 127, 1, 173, 1, 208, + 0, 11, 0, 50, 64, 26, 7, 127, 10, 10, 11, 3, 127, 6, 13, 2, 127, 0, 11, 1, + 8, 11, 12, 9, 7, 2, 133, 11, 74, 4, 0, 73, 0, 63, 50, 63, 237, 51, 206, 1, + 16, 214, 94, 93, 237, 16, 222, 237, 17, 57, 47, 237, 49, 48, 19, 51, 17, 51, 17, 51, + 17, 35, 21, 35, 53, 35, 71, 83, 192, 83, 140, 78, 140, 1, 208, 254, 118, 1, 138, 254, + 48, 129, 129, 0, 2, 0, 39, 255, 244, 1, 204, 2, 181, 0, 17, 0, 60, 0, 179, 181, + 55, 24, 8, 0, 77, 51, 184, 255, 232, 179, 8, 0, 77, 45, 184, 255, 200, 179, 9, 0, + 77, 43, 184, 255, 216, 179, 16, 0, 77, 41, 184, 255, 224, 64, 51, 15, 0, 77, 22, 24, + 15, 0, 77, 22, 32, 14, 0, 77, 22, 24, 13, 0, 77, 22, 40, 12, 0, 77, 22, 32, + 11, 0, 77, 22, 40, 9, 10, 0, 76, 19, 24, 13, 0, 77, 16, 32, 16, 0, 77, 10, + 24, 15, 16, 0, 76, 6, 184, 255, 232, 180, 15, 16, 0, 76, 1, 184, 255, 224, 64, 34, + 16, 0, 77, 18, 0, 21, 13, 130, 48, 30, 30, 48, 62, 38, 130, 21, 21, 3, 130, 58, + 61, 43, 0, 18, 18, 24, 8, 136, 53, 81, 33, 136, 24, 77, 0, 63, 237, 63, 237, 17, + 57, 17, 51, 51, 1, 16, 214, 237, 51, 47, 237, 16, 206, 50, 47, 16, 237, 17, 57, 57, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 6, + 6, 21, 20, 30, 2, 51, 50, 62, 2, 53, 52, 46, 2, 39, 38, 38, 53, 52, 54, 51, + 50, 50, 54, 54, 55, 23, 6, 6, 35, 34, 14, 2, 21, 20, 30, 2, 23, 30, 3, 21, + 20, 14, 2, 35, 34, 46, 2, 53, 52, 54, 255, 64, 68, 14, 30, 48, 35, 32, 48, 31, + 15, 22, 35, 43, 86, 34, 42, 90, 78, 24, 35, 27, 24, 14, 5, 14, 67, 44, 12, 31, + 29, 19, 12, 23, 32, 20, 36, 64, 49, 29, 23, 50, 80, 58, 54, 80, 51, 25, 83, 1, + 152, 18, 97, 67, 33, 60, 46, 27, 25, 44, 59, 33, 41, 59, 44, 31, 54, 24, 60, 34, + 63, 58, 1, 1, 2, 71, 2, 1, 1, 9, 18, 18, 14, 20, 20, 21, 14, 24, 49, 61, + 79, 54, 42, 82, 65, 40, 38, 64, 86, 48, 84, 115, 0, 2, 0, 18, 255, 251, 1, 213, + 2, 147, 0, 21, 0, 38, 0, 152, 64, 42, 30, 48, 15, 16, 0, 76, 29, 56, 18, 0, + 77, 29, 32, 17, 0, 77, 25, 40, 18, 0, 77, 25, 32, 17, 0, 77, 25, 24, 16, 0, + 77, 25, 32, 15, 0, 77, 24, 32, 18, 0, 77, 8, 184, 255, 232, 179, 10, 0, 77, 8, + 184, 255, 216, 179, 9, 0, 77, 5, 184, 255, 232, 179, 10, 0, 77, 5, 184, 255, 224, 64, + 37, 9, 0, 77, 27, 118, 7, 40, 33, 21, 19, 0, 115, 16, 13, 14, 39, 0, 13, 121, + 16, 19, 16, 33, 121, 1, 0, 1, 1, 16, 1, 16, 1, 17, 22, 124, 9, 67, 0, 63, + 237, 47, 57, 57, 47, 47, 93, 16, 237, 17, 51, 16, 237, 50, 1, 16, 214, 221, 50, 253, + 50, 205, 51, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 19, 21, 51, 50, 30, 2, 21, 20, 35, 34, 38, 39, 17, 35, 53, 51, 53, 51, 21, 51, + 21, 3, 50, 62, 2, 53, 52, 46, 2, 35, 35, 21, 30, 2, 50, 189, 52, 56, 86, 57, + 29, 224, 34, 72, 32, 89, 89, 82, 167, 108, 31, 51, 37, 20, 20, 38, 55, 36, 49, 12, + 15, 12, 12, 2, 4, 133, 20, 45, 74, 53, 196, 6, 9, 1, 250, 70, 73, 73, 70, 254, + 60, 13, 29, 48, 36, 37, 49, 28, 12, 248, 2, 1, 1, 0, 2, 0, 18, 255, 246, 1, + 204, 2, 181, 0, 24, 0, 39, 0, 99, 185, 0, 17, 255, 224, 180, 9, 10, 0, 76, 14, + 184, 255, 232, 64, 48, 9, 10, 0, 76, 28, 130, 16, 41, 34, 6, 4, 7, 127, 1, 23, + 24, 40, 7, 23, 134, 1, 4, 1, 31, 137, 11, 15, 1, 31, 1, 63, 1, 79, 1, 4, + 8, 1, 11, 1, 11, 3, 25, 137, 19, 81, 2, 3, 77, 0, 63, 51, 63, 237, 17, 57, + 57, 47, 47, 94, 93, 16, 237, 17, 51, 16, 237, 50, 1, 16, 214, 221, 50, 253, 50, 205, + 51, 16, 222, 237, 49, 48, 43, 43, 19, 51, 53, 55, 21, 51, 21, 35, 21, 54, 54, 51, + 50, 30, 2, 21, 20, 6, 35, 34, 38, 39, 17, 35, 1, 50, 54, 53, 52, 38, 35, 34, + 6, 7, 21, 30, 3, 18, 89, 82, 159, 159, 14, 58, 25, 36, 63, 47, 28, 102, 87, 43, + 82, 39, 89, 1, 2, 48, 54, 60, 42, 23, 47, 17, 6, 20, 24, 26, 1, 208, 215, 14, + 229, 68, 109, 3, 7, 17, 36, 58, 40, 84, 72, 9, 11, 1, 130, 254, 174, 41, 46, 45, + 40, 3, 5, 159, 1, 2, 1, 1, 0, 3, 0, 29, 255, 243, 1, 216, 2, 121, 0, 19, + 0, 36, 0, 53, 0, 231, 64, 11, 44, 16, 14, 0, 77, 44, 8, 13, 0, 77, 42, 184, + 255, 240, 180, 13, 14, 0, 76, 28, 184, 255, 240, 179, 18, 0, 77, 28, 184, 255, 248, 179, + 17, 0, 77, 27, 184, 255, 232, 64, 45, 14, 0, 77, 25, 24, 14, 0, 77, 25, 16, 13, + 0, 77, 25, 24, 12, 0, 77, 25, 16, 11, 0, 77, 24, 16, 17, 18, 0, 76, 18, 16, + 8, 0, 77, 17, 16, 16, 0, 77, 17, 24, 15, 0, 77, 13, 184, 255, 232, 179, 16, 0, + 77, 13, 184, 255, 240, 179, 15, 0, 77, 12, 184, 255, 232, 179, 8, 0, 77, 8, 184, 255, + 232, 179, 8, 0, 77, 7, 184, 255, 232, 179, 16, 0, 77, 7, 184, 255, 224, 64, 48, 15, + 0, 77, 3, 16, 15, 16, 0, 76, 3, 16, 8, 0, 77, 46, 23, 118, 10, 55, 40, 29, + 118, 0, 64, 11, 16, 72, 0, 54, 40, 37, 32, 46, 49, 23, 20, 29, 32, 32, 5, 43, + 124, 15, 70, 26, 124, 5, 69, 0, 63, 237, 63, 237, 17, 57, 47, 51, 220, 50, 205, 50, + 16, 205, 50, 1, 16, 214, 43, 237, 50, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 52, 62, + 2, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 37, 50, 54, 55, 38, 38, 35, + 34, 6, 7, 54, 54, 51, 50, 30, 2, 7, 34, 6, 7, 22, 22, 51, 50, 54, 55, 6, + 6, 35, 34, 46, 2, 29, 32, 59, 81, 50, 49, 81, 59, 32, 32, 59, 81, 49, 50, 81, + 59, 32, 1, 53, 14, 26, 10, 3, 69, 67, 66, 66, 4, 14, 38, 28, 21, 36, 34, 34, + 132, 24, 36, 11, 8, 65, 61, 62, 68, 8, 12, 26, 18, 21, 36, 34, 35, 1, 54, 83, + 122, 79, 39, 39, 79, 122, 83, 83, 122, 80, 38, 38, 80, 122, 78, 14, 11, 112, 120, 118, + 111, 16, 21, 20, 25, 20, 3, 30, 18, 95, 101, 103, 97, 10, 10, 20, 24, 20, 0, 3, + 0, 40, 255, 245, 1, 204, 1, 219, 0, 19, 0, 35, 0, 52, 0, 160, 185, 0, 43, 255, + 224, 179, 16, 0, 77, 43, 184, 255, 216, 179, 15, 0, 77, 43, 184, 255, 240, 64, 27, 14, + 0, 77, 41, 48, 15, 16, 0, 76, 41, 24, 14, 0, 77, 34, 24, 17, 18, 0, 76, 34, + 16, 13, 14, 0, 76, 24, 184, 255, 240, 180, 15, 16, 0, 76, 18, 184, 255, 232, 64, 14, + 8, 0, 77, 12, 16, 8, 0, 77, 8, 16, 8, 0, 77, 2, 184, 255, 240, 64, 38, 8, + 0, 77, 39, 29, 130, 0, 54, 45, 23, 130, 31, 10, 47, 10, 63, 10, 3, 10, 53, 29, + 31, 39, 36, 23, 20, 45, 48, 48, 26, 42, 136, 15, 80, 26, 136, 5, 81, 0, 63, 237, + 63, 237, 18, 57, 47, 51, 205, 50, 220, 50, 205, 50, 1, 16, 214, 93, 237, 50, 16, 222, + 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, 14, 2, + 35, 34, 46, 2, 53, 52, 62, 2, 51, 50, 30, 2, 5, 34, 6, 7, 22, 22, 51, 50, + 54, 55, 6, 35, 34, 46, 2, 55, 50, 54, 55, 38, 38, 35, 34, 6, 7, 54, 54, 51, + 50, 30, 2, 1, 204, 31, 56, 78, 46, 45, 77, 56, 31, 31, 56, 77, 45, 46, 78, 56, + 31, 254, 236, 19, 30, 8, 8, 64, 50, 52, 66, 6, 20, 32, 21, 34, 32, 32, 122, 16, + 24, 9, 8, 65, 51, 51, 65, 7, 11, 29, 22, 20, 34, 32, 32, 232, 55, 89, 64, 35, + 35, 64, 89, 55, 55, 90, 63, 35, 35, 63, 90, 58, 20, 13, 63, 70, 74, 66, 18, 14, + 16, 14, 15, 13, 10, 63, 72, 74, 65, 11, 14, 14, 16, 14, 0, 1, 0, 13, 0, 0, + 1, 253, 2, 116, 0, 27, 0, 72, 64, 39, 22, 23, 22, 19, 23, 120, 11, 12, 20, 11, + 11, 12, 22, 19, 19, 120, 18, 13, 20, 18, 13, 18, 28, 13, 11, 3, 19, 18, 65, 22, + 12, 13, 68, 23, 11, 6, 124, 0, 69, 0, 63, 237, 50, 50, 63, 51, 51, 63, 51, 1, + 47, 51, 47, 16, 214, 135, 43, 125, 16, 196, 135, 24, 16, 43, 8, 125, 16, 196, 49, 48, + 1, 50, 22, 23, 7, 38, 35, 34, 14, 2, 7, 3, 35, 46, 3, 39, 51, 22, 18, 23, + 19, 62, 3, 1, 179, 24, 36, 14, 37, 15, 17, 7, 9, 8, 8, 6, 120, 98, 23, 41, + 40, 42, 25, 89, 29, 63, 36, 96, 7, 14, 24, 36, 2, 116, 19, 12, 57, 16, 6, 17, + 29, 24, 254, 32, 75, 138, 146, 162, 98, 138, 254, 238, 126, 1, 164, 30, 47, 33, 17, 0, + 1, 0, 30, 0, 0, 1, 233, 1, 220, 0, 25, 0, 84, 64, 47, 0, 11, 10, 11, 129, + 25, 0, 20, 25, 25, 0, 15, 25, 1, 8, 25, 19, 27, 1, 5, 10, 5, 129, 4, 1, + 20, 4, 1, 4, 26, 52, 10, 1, 10, 25, 11, 22, 136, 16, 80, 5, 4, 73, 10, 0, + 1, 74, 0, 63, 51, 51, 63, 51, 63, 237, 50, 50, 1, 47, 93, 16, 214, 135, 43, 135, + 125, 196, 1, 24, 16, 206, 50, 94, 93, 135, 16, 43, 135, 125, 196, 49, 48, 33, 35, 38, + 38, 39, 51, 30, 3, 23, 19, 62, 3, 51, 50, 22, 23, 7, 38, 35, 34, 6, 7, 1, + 3, 75, 42, 79, 33, 90, 10, 24, 27, 28, 14, 83, 8, 18, 26, 36, 26, 17, 34, 18, + 14, 13, 29, 23, 20, 10, 95, 238, 131, 44, 99, 97, 91, 36, 1, 18, 24, 39, 27, 15, + 7, 6, 65, 8, 28, 26, 0, 2, 0, 55, 255, 87, 1, 226, 3, 35, 0, 27, 0, 41, + 0, 128, 64, 74, 16, 17, 22, 115, 11, 39, 38, 31, 32, 32, 0, 10, 56, 8, 1, 42, + 8, 1, 9, 8, 1, 6, 27, 38, 27, 2, 8, 27, 24, 27, 126, 3, 8, 20, 3, 3, + 8, 24, 115, 10, 64, 8, 12, 72, 10, 11, 43, 3, 115, 0, 0, 16, 0, 2, 0, 42, + 3, 27, 68, 17, 16, 10, 121, 23, 68, 24, 8, 65, 38, 32, 35, 28, 2, 65, 0, 63, + 222, 221, 206, 50, 63, 51, 63, 237, 220, 25, 197, 24, 63, 51, 1, 16, 214, 93, 237, 16, + 222, 221, 43, 237, 135, 16, 43, 135, 125, 196, 1, 93, 93, 93, 93, 17, 18, 57, 24, 47, + 197, 214, 197, 16, 253, 222, 25, 197, 49, 48, 51, 17, 51, 17, 62, 3, 55, 51, 17, 51, + 22, 14, 2, 7, 39, 62, 3, 55, 35, 17, 6, 2, 7, 19, 34, 38, 39, 55, 22, 22, + 51, 50, 54, 55, 23, 6, 6, 55, 79, 15, 51, 60, 66, 30, 86, 39, 1, 16, 29, 41, + 23, 60, 9, 23, 21, 18, 5, 26, 75, 112, 35, 108, 56, 70, 8, 63, 8, 34, 29, 29, + 34, 8, 62, 8, 69, 2, 107, 254, 34, 43, 120, 131, 130, 54, 253, 223, 31, 66, 64, 59, + 23, 38, 9, 28, 35, 39, 20, 1, 234, 149, 255, 0, 85, 2, 166, 57, 51, 17, 29, 35, + 35, 29, 17, 51, 57, 0, 2, 0, 63, 255, 108, 1, 227, 2, 152, 0, 27, 0, 41, 0, + 118, 64, 65, 5, 6, 11, 127, 2, 39, 38, 31, 32, 32, 1, 19, 57, 27, 1, 43, 27, + 1, 27, 18, 13, 18, 129, 22, 27, 20, 22, 22, 27, 13, 127, 1, 64, 8, 12, 72, 1, + 2, 43, 22, 127, 0, 19, 1, 8, 19, 42, 13, 27, 73, 38, 32, 35, 28, 21, 73, 22, + 18, 74, 6, 5, 1, 133, 12, 74, 0, 63, 237, 220, 25, 197, 24, 63, 51, 63, 222, 221, + 206, 50, 63, 51, 1, 16, 214, 94, 93, 237, 16, 222, 221, 43, 237, 135, 16, 43, 135, 125, + 196, 1, 93, 93, 17, 18, 57, 24, 47, 205, 222, 205, 16, 253, 222, 25, 197, 49, 48, 1, + 17, 51, 22, 6, 7, 39, 62, 3, 55, 35, 17, 14, 3, 7, 35, 17, 51, 17, 62, 3, + 55, 39, 34, 38, 39, 55, 22, 22, 51, 50, 54, 55, 23, 6, 6, 1, 186, 39, 2, 54, + 41, 58, 6, 19, 19, 17, 5, 34, 27, 61, 60, 56, 21, 74, 80, 23, 56, 59, 60, 28, + 106, 56, 70, 8, 63, 8, 34, 29, 29, 34, 8, 62, 8, 69, 1, 208, 254, 117, 63, 116, + 38, 35, 6, 24, 31, 35, 17, 1, 98, 34, 92, 97, 94, 37, 1, 208, 254, 178, 39, 91, + 91, 83, 30, 75, 57, 51, 17, 29, 35, 35, 29, 17, 51, 57, 0, 2, 0, 18, 255, 251, + 1, 213, 2, 107, 0, 22, 0, 37, 0, 120, 64, 26, 31, 40, 15, 0, 77, 30, 32, 16, + 0, 77, 26, 32, 16, 0, 77, 26, 16, 14, 0, 77, 25, 40, 15, 0, 77, 8, 184, 255, + 224, 180, 9, 10, 0, 76, 5, 184, 255, 232, 64, 41, 9, 10, 0, 76, 28, 118, 7, 39, + 34, 22, 20, 0, 115, 17, 14, 15, 38, 0, 14, 121, 17, 20, 17, 34, 121, 1, 0, 1, + 16, 1, 2, 17, 1, 17, 1, 18, 65, 23, 124, 10, 67, 0, 63, 237, 63, 57, 57, 47, + 47, 93, 16, 237, 17, 51, 16, 237, 50, 1, 16, 214, 221, 50, 253, 50, 205, 51, 16, 222, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 19, 21, 51, 50, 30, 2, 21, 20, 6, 35, + 34, 38, 39, 17, 35, 53, 51, 53, 51, 21, 51, 21, 3, 50, 62, 2, 53, 52, 46, 2, + 35, 35, 21, 22, 22, 171, 61, 56, 88, 61, 32, 120, 113, 34, 81, 32, 71, 71, 82, 122, + 54, 31, 54, 40, 23, 23, 41, 58, 36, 58, 24, 27, 1, 229, 102, 20, 45, 74, 53, 99, + 97, 6, 9, 1, 219, 64, 70, 70, 64, 254, 91, 13, 29, 48, 36, 37, 49, 28, 12, 248, + 3, 1, 0, 2, 0, 18, 255, 246, 1, 204, 1, 232, 0, 28, 0, 45, 0, 145, 64, 21, + 34, 32, 18, 0, 77, 34, 24, 17, 0, 77, 31, 24, 18, 0, 77, 31, 16, 17, 0, 77, + 20, 184, 255, 224, 179, 12, 0, 77, 20, 184, 255, 232, 180, 10, 11, 0, 76, 16, 184, 255, + 232, 180, 11, 12, 0, 76, 16, 184, 255, 224, 64, 50, 10, 0, 77, 32, 130, 18, 47, 40, + 6, 4, 7, 127, 1, 27, 28, 46, 7, 27, 134, 1, 4, 1, 37, 137, 13, 47, 1, 63, + 1, 2, 0, 13, 16, 13, 64, 13, 80, 13, 4, 8, 1, 13, 1, 13, 2, 29, 137, 23, + 81, 2, 0, 47, 63, 237, 17, 57, 57, 47, 47, 94, 93, 93, 16, 237, 17, 51, 16, 237, + 50, 1, 16, 214, 221, 50, 253, 50, 205, 51, 16, 222, 237, 49, 48, 43, 43, 43, 43, 43, + 43, 43, 43, 19, 51, 53, 51, 21, 51, 21, 35, 21, 62, 3, 51, 50, 30, 2, 21, 20, + 14, 2, 35, 34, 38, 39, 17, 35, 19, 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 21, + 30, 3, 18, 72, 82, 158, 158, 7, 25, 30, 31, 12, 36, 66, 51, 30, 29, 53, 72, 43, + 44, 90, 39, 72, 249, 48, 63, 19, 31, 40, 21, 22, 56, 17, 6, 22, 27, 29, 1, 170, + 62, 62, 58, 81, 1, 4, 3, 2, 17, 36, 58, 40, 42, 59, 38, 17, 9, 11, 1, 102, + 254, 202, 41, 46, 22, 32, 21, 10, 3, 5, 159, 1, 2, 1, 1, 0, 2, 0, 73, 0, + 0, 1, 199, 2, 113, 0, 21, 0, 36, 0, 213, 182, 33, 16, 17, 18, 0, 76, 33, 184, + 255, 240, 64, 9, 16, 0, 77, 10, 16, 14, 0, 77, 7, 184, 255, 240, 179, 15, 0, 77, + 7, 184, 255, 240, 179, 12, 0, 77, 7, 184, 255, 232, 179, 11, 0, 77, 6, 184, 255, 240, + 179, 16, 0, 77, 6, 184, 255, 224, 180, 9, 10, 0, 76, 3, 184, 255, 224, 179, 16, 0, + 77, 3, 184, 255, 232, 179, 15, 0, 77, 3, 184, 255, 224, 179, 10, 0, 77, 3, 184, 255, + 232, 179, 9, 0, 77, 2, 184, 255, 232, 179, 16, 0, 77, 2, 184, 255, 224, 64, 49, 15, + 0, 77, 30, 10, 31, 9, 9, 33, 7, 32, 8, 32, 31, 8, 31, 8, 31, 26, 35, 118, + 5, 38, 26, 15, 115, 0, 16, 1, 8, 16, 37, 10, 9, 7, 14, 121, 33, 32, 30, 26, + 26, 0, 16, 68, 22, 124, 0, 65, 0, 63, 237, 63, 18, 57, 47, 51, 204, 51, 253, 50, + 206, 51, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, 18, 57, 57, 47, 47, 17, 51, 17, + 18, 57, 57, 51, 17, 18, 57, 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 19, 50, 30, 2, 21, 20, 7, 23, 7, 39, 6, 6, 35, 35, 21, 35, + 17, 62, 3, 23, 34, 6, 7, 21, 51, 50, 50, 55, 39, 55, 23, 54, 53, 52, 235, 55, + 83, 55, 27, 97, 63, 58, 68, 17, 32, 19, 72, 82, 18, 43, 43, 41, 23, 26, 48, 12, + 68, 10, 17, 8, 43, 56, 51, 49, 2, 113, 28, 51, 70, 43, 124, 49, 107, 33, 119, 3, + 5, 231, 2, 98, 4, 6, 4, 1, 71, 1, 2, 250, 2, 74, 34, 90, 30, 79, 124, 0, + 2, 0, 71, 255, 91, 1, 204, 1, 218, 0, 22, 0, 41, 0, 180, 64, 32, 29, 56, 15, + 0, 77, 29, 24, 14, 0, 77, 29, 16, 13, 0, 77, 25, 16, 17, 18, 0, 76, 25, 16, + 13, 0, 77, 21, 32, 15, 0, 77, 21, 184, 255, 232, 180, 8, 9, 0, 76, 20, 184, 255, + 232, 179, 16, 0, 77, 3, 184, 255, 232, 179, 12, 0, 77, 2, 184, 255, 232, 179, 14, 0, + 77, 2, 184, 255, 232, 179, 12, 0, 77, 2, 184, 255, 224, 64, 48, 11, 0, 77, 6, 40, + 5, 41, 5, 24, 3, 23, 4, 23, 41, 4, 41, 4, 41, 34, 27, 130, 0, 43, 34, 13, + 127, 0, 14, 1, 8, 14, 42, 30, 136, 18, 80, 14, 75, 40, 24, 23, 37, 136, 6, 5, + 3, 9, 81, 0, 63, 51, 206, 51, 253, 204, 51, 51, 63, 63, 237, 1, 16, 214, 94, 93, + 237, 50, 16, 222, 237, 18, 57, 57, 47, 47, 17, 51, 17, 18, 57, 57, 51, 17, 18, 57, + 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, 6, 7, 23, + 7, 39, 6, 6, 35, 34, 38, 39, 21, 35, 17, 54, 54, 51, 50, 30, 2, 7, 23, 54, + 54, 53, 52, 38, 35, 34, 6, 7, 17, 22, 22, 51, 50, 50, 55, 39, 1, 204, 44, 39, + 52, 56, 52, 14, 30, 16, 37, 56, 14, 83, 27, 85, 55, 50, 82, 58, 32, 175, 53, 20, + 17, 76, 61, 34, 39, 11, 14, 54, 29, 9, 15, 9, 54, 231, 66, 102, 32, 89, 32, 90, + 5, 6, 18, 11, 183, 2, 103, 8, 16, 34, 63, 90, 97, 93, 23, 70, 41, 81, 89, 6, + 4, 254, 219, 13, 22, 1, 93, 0, 1, 0, 54, 0, 0, 1, 204, 2, 225, 0, 11, 0, + 40, 64, 20, 2, 115, 5, 13, 8, 7, 115, 0, 11, 12, 7, 0, 121, 10, 68, 6, 121, + 3, 1, 65, 0, 63, 206, 237, 63, 237, 50, 1, 16, 214, 221, 253, 205, 16, 222, 237, 49, + 48, 55, 17, 51, 53, 51, 21, 35, 17, 51, 21, 33, 53, 143, 238, 79, 235, 134, 254, 207, + 70, 2, 37, 118, 188, 254, 33, 70, 70, 0, 1, 0, 107, 0, 0, 1, 184, 2, 68, 0, + 7, 0, 31, 64, 15, 2, 127, 5, 9, 7, 127, 0, 8, 6, 133, 3, 1, 73, 0, 74, + 0, 63, 63, 206, 237, 1, 16, 214, 237, 16, 222, 237, 49, 48, 51, 17, 33, 53, 51, 21, + 35, 17, 107, 1, 2, 75, 251, 1, 208, 116, 185, 254, 117, 0, 1, 0, 54, 0, 0, 1, + 204, 2, 107, 0, 17, 0, 62, 64, 31, 7, 19, 11, 11, 14, 9, 13, 115, 4, 0, 17, + 2, 2, 17, 18, 12, 1, 121, 9, 4, 4, 5, 13, 0, 121, 16, 68, 8, 121, 5, 65, + 0, 63, 237, 63, 237, 50, 17, 57, 47, 51, 237, 50, 1, 16, 198, 50, 47, 16, 221, 50, + 253, 50, 205, 50, 47, 16, 206, 49, 48, 55, 53, 35, 53, 51, 17, 33, 21, 35, 21, 51, + 21, 35, 21, 51, 21, 33, 53, 143, 89, 89, 1, 61, 235, 134, 134, 134, 254, 207, 70, 214, + 67, 1, 12, 70, 198, 67, 214, 70, 70, 0, 1, 0, 33, 0, 0, 1, 184, 1, 208, 0, + 13, 0, 47, 64, 23, 7, 15, 11, 9, 12, 127, 4, 1, 2, 14, 12, 1, 134, 9, 4, + 4, 0, 8, 133, 5, 73, 0, 74, 0, 63, 63, 237, 18, 57, 47, 51, 237, 50, 1, 16, + 214, 221, 50, 253, 50, 205, 16, 206, 49, 48, 51, 53, 35, 53, 51, 53, 33, 21, 35, 21, + 51, 21, 35, 21, 107, 74, 74, 1, 77, 251, 158, 158, 183, 63, 218, 69, 149, 63, 183, 0, + 1, 0, 45, 255, 91, 1, 208, 2, 107, 0, 43, 0, 114, 185, 0, 42, 255, 232, 64, 34, + 8, 0, 77, 20, 24, 14, 0, 77, 20, 16, 13, 0, 77, 15, 24, 17, 0, 77, 14, 24, + 17, 0, 77, 14, 24, 14, 0, 77, 14, 16, 13, 0, 77, 2, 184, 255, 232, 64, 34, 8, + 0, 77, 32, 32, 17, 118, 0, 45, 34, 28, 115, 29, 15, 8, 1, 8, 8, 29, 44, 22, + 124, 39, 39, 29, 33, 121, 30, 65, 29, 68, 12, 124, 5, 0, 47, 237, 63, 63, 237, 18, + 57, 47, 237, 1, 16, 198, 50, 47, 93, 16, 237, 50, 16, 222, 237, 51, 47, 49, 48, 43, + 43, 43, 43, 43, 43, 43, 43, 37, 20, 14, 2, 35, 34, 34, 39, 55, 22, 22, 51, 50, + 62, 2, 53, 52, 46, 2, 35, 34, 14, 2, 7, 17, 35, 17, 33, 21, 33, 21, 62, 3, + 51, 50, 30, 2, 1, 208, 29, 57, 85, 55, 13, 26, 11, 2, 5, 15, 13, 34, 57, 42, + 24, 23, 42, 57, 34, 14, 30, 26, 21, 6, 82, 1, 99, 254, 239, 7, 24, 30, 31, 14, + 58, 87, 58, 28, 113, 57, 102, 75, 44, 2, 67, 1, 1, 27, 53, 79, 52, 55, 78, 50, + 24, 3, 5, 5, 2, 254, 207, 2, 107, 70, 177, 3, 6, 5, 3, 39, 72, 102, 0, 1, + 0, 71, 255, 90, 1, 207, 1, 208, 0, 35, 0, 124, 64, 21, 20, 24, 16, 0, 77, 20, + 16, 15, 0, 77, 16, 16, 16, 0, 77, 16, 24, 15, 0, 77, 2, 184, 255, 224, 179, 9, + 0, 77, 2, 184, 255, 216, 179, 8, 0, 77, 1, 184, 255, 232, 64, 44, 10, 0, 77, 29, + 29, 18, 130, 3, 37, 31, 25, 127, 26, 32, 11, 1, 15, 11, 31, 11, 2, 11, 11, 0, + 26, 1, 8, 26, 36, 21, 137, 0, 0, 26, 30, 134, 27, 73, 26, 74, 15, 137, 8, 75, + 0, 63, 237, 63, 63, 237, 18, 57, 47, 237, 1, 16, 198, 94, 93, 50, 47, 93, 93, 16, + 237, 50, 16, 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 1, 50, 22, 21, + 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, + 21, 35, 17, 33, 21, 35, 21, 62, 3, 1, 5, 106, 96, 24, 48, 71, 47, 10, 22, 8, + 5, 5, 11, 8, 57, 62, 66, 70, 20, 52, 19, 83, 1, 70, 243, 7, 25, 30, 31, 1, + 30, 117, 107, 48, 84, 61, 35, 1, 2, 66, 1, 1, 77, 84, 85, 71, 6, 5, 207, 1, + 208, 68, 125, 3, 5, 5, 2, 0, 1, 0, 4, 255, 91, 1, 235, 2, 107, 0, 49, 0, + 193, 64, 110, 15, 12, 1, 0, 33, 16, 33, 32, 33, 3, 8, 33, 33, 28, 43, 48, 43, + 120, 38, 33, 20, 38, 38, 33, 33, 27, 24, 27, 120, 28, 33, 20, 28, 28, 33, 12, 12, + 7, 18, 21, 18, 120, 17, 12, 20, 17, 17, 12, 48, 24, 49, 115, 0, 12, 6, 1, 6, + 120, 7, 12, 20, 7, 7, 12, 1, 21, 0, 0, 38, 7, 28, 28, 38, 38, 42, 115, 39, + 51, 17, 17, 7, 50, 41, 38, 121, 43, 68, 28, 27, 65, 24, 21, 21, 12, 48, 1, 1, + 33, 12, 12, 22, 65, 17, 18, 65, 7, 6, 68, 0, 68, 0, 63, 63, 51, 63, 51, 63, + 57, 17, 51, 51, 17, 51, 17, 51, 17, 51, 63, 51, 63, 237, 206, 1, 16, 198, 50, 47, + 16, 222, 237, 51, 47, 51, 47, 17, 18, 57, 47, 51, 51, 135, 16, 43, 135, 125, 196, 1, + 24, 16, 237, 50, 50, 135, 16, 43, 135, 8, 125, 196, 135, 5, 24, 16, 43, 135, 125, 196, + 135, 24, 16, 43, 135, 8, 125, 196, 1, 94, 93, 93, 49, 48, 51, 17, 14, 3, 7, 35, + 62, 3, 55, 46, 3, 39, 51, 22, 22, 23, 17, 51, 17, 54, 54, 55, 51, 14, 3, 7, + 30, 3, 23, 51, 21, 35, 53, 35, 46, 3, 39, 17, 195, 17, 30, 28, 24, 10, 82, 10, + 30, 35, 38, 19, 14, 32, 32, 31, 13, 82, 24, 49, 26, 73, 29, 54, 28, 82, 14, 33, + 35, 35, 15, 17, 33, 32, 28, 12, 40, 78, 24, 11, 27, 31, 34, 18, 1, 46, 24, 71, + 81, 86, 40, 45, 93, 86, 77, 30, 30, 70, 75, 77, 36, 77, 134, 57, 1, 12, 254, 244, + 57, 133, 78, 35, 75, 75, 72, 31, 25, 62, 68, 72, 34, 235, 165, 40, 87, 81, 71, 24, + 254, 209, 0, 1, 0, 7, 255, 127, 1, 224, 1, 208, 0, 49, 0, 182, 64, 104, 15, 36, + 1, 0, 9, 16, 9, 32, 9, 3, 8, 17, 12, 9, 3, 0, 3, 129, 4, 9, 20, 4, + 4, 9, 36, 36, 31, 42, 47, 42, 129, 41, 36, 20, 41, 41, 36, 0, 22, 127, 25, 36, + 30, 25, 30, 129, 31, 36, 20, 31, 31, 36, 47, 160, 25, 176, 25, 2, 25, 25, 12, 31, + 4, 4, 12, 12, 16, 127, 13, 51, 41, 41, 31, 50, 0, 47, 47, 36, 22, 25, 25, 9, + 36, 36, 24, 48, 73, 41, 42, 73, 31, 30, 74, 24, 74, 15, 15, 12, 133, 17, 74, 4, + 3, 73, 0, 63, 51, 63, 237, 51, 47, 63, 63, 51, 63, 51, 63, 18, 57, 17, 51, 51, + 17, 51, 17, 51, 17, 51, 1, 16, 198, 50, 47, 16, 222, 237, 51, 47, 51, 47, 17, 18, + 57, 47, 93, 51, 135, 16, 43, 135, 125, 196, 1, 24, 16, 237, 50, 135, 16, 43, 135, 8, + 125, 196, 135, 5, 24, 16, 43, 135, 125, 196, 1, 17, 51, 94, 93, 93, 49, 48, 1, 54, + 54, 55, 51, 14, 3, 7, 22, 22, 23, 51, 21, 35, 53, 35, 46, 3, 39, 21, 35, 53, + 14, 3, 7, 35, 62, 3, 55, 46, 3, 39, 51, 30, 3, 23, 53, 51, 1, 21, 23, 52, + 19, 83, 13, 32, 35, 37, 18, 34, 62, 24, 41, 79, 10, 9, 27, 31, 32, 15, 73, 15, + 32, 31, 27, 10, 82, 12, 34, 39, 40, 20, 15, 35, 34, 30, 11, 82, 9, 24, 25, 26, + 11, 73, 1, 21, 43, 103, 41, 21, 55, 58, 60, 25, 36, 92, 47, 199, 129, 25, 56, 55, + 51, 20, 207, 218, 20, 52, 59, 60, 27, 32, 68, 66, 58, 21, 24, 58, 60, 56, 21, 22, + 52, 54, 52, 21, 201, 0, 1, 0, 38, 255, 87, 1, 209, 2, 118, 0, 76, 1, 72, 185, + 0, 73, 255, 240, 179, 19, 0, 77, 73, 184, 255, 232, 179, 18, 0, 77, 73, 184, 255, 216, + 179, 17, 0, 77, 73, 184, 255, 224, 179, 8, 0, 77, 69, 184, 255, 224, 180, 17, 18, 0, + 76, 65, 184, 255, 224, 180, 17, 18, 0, 76, 61, 184, 255, 240, 179, 19, 0, 77, 61, 184, + 255, 224, 179, 18, 0, 77, 61, 184, 255, 232, 64, 47, 8, 10, 0, 76, 56, 16, 18, 0, + 77, 56, 24, 17, 0, 77, 50, 40, 17, 0, 77, 46, 16, 15, 16, 0, 76, 46, 24, 14, + 0, 77, 37, 24, 16, 0, 77, 33, 32, 16, 0, 77, 26, 24, 13, 17, 0, 76, 5, 184, + 255, 232, 179, 21, 0, 77, 5, 184, 255, 224, 179, 20, 0, 77, 5, 184, 255, 232, 180, 18, + 19, 0, 76, 5, 184, 255, 224, 179, 17, 0, 77, 5, 184, 255, 232, 180, 15, 16, 0, 76, + 2, 184, 255, 216, 180, 19, 20, 0, 76, 2, 184, 255, 208, 180, 16, 18, 0, 76, 2, 184, + 255, 216, 64, 11, 15, 0, 77, 66, 48, 118, 63, 63, 71, 17, 3, 184, 255, 192, 64, 51, + 11, 14, 72, 3, 76, 0, 23, 15, 11, 1, 8, 11, 20, 20, 28, 35, 118, 71, 78, 55, + 55, 41, 41, 28, 77, 0, 20, 20, 23, 15, 8, 77, 54, 54, 51, 124, 58, 66, 41, 121, + 42, 42, 58, 69, 29, 29, 32, 124, 76, 23, 70, 0, 63, 51, 237, 50, 47, 63, 57, 47, + 237, 57, 16, 237, 50, 47, 16, 220, 205, 18, 57, 47, 205, 1, 16, 198, 50, 47, 50, 47, + 16, 222, 237, 18, 57, 47, 204, 94, 93, 51, 221, 50, 213, 43, 205, 17, 51, 47, 237, 50, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 23, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, + 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 46, 3, 39, 55, 22, 22, 51, 50, 54, 53, + 52, 46, 2, 35, 35, 53, 51, 50, 62, 2, 53, 52, 38, 35, 34, 6, 7, 39, 54, 54, + 51, 50, 30, 2, 21, 20, 6, 7, 30, 3, 21, 20, 14, 2, 7, 254, 26, 23, 9, 21, + 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 12, 6, 31, 54, 43, 33, 9, + 25, 21, 84, 57, 72, 86, 32, 54, 73, 41, 42, 33, 30, 64, 53, 34, 67, 54, 48, 79, + 20, 27, 23, 96, 56, 44, 75, 54, 30, 55, 54, 27, 49, 38, 22, 28, 52, 74, 46, 33, + 12, 30, 29, 10, 23, 19, 13, 7, 5, 51, 4, 5, 20, 20, 11, 2, 11, 27, 13, 1, + 10, 13, 14, 5, 66, 11, 29, 53, 62, 36, 47, 26, 10, 70, 9, 24, 41, 32, 41, 51, + 21, 11, 65, 15, 22, 19, 39, 61, 41, 43, 76, 17, 7, 26, 40, 54, 36, 45, 65, 44, + 24, 3, 0, 1, 0, 72, 255, 87, 1, 191, 1, 220, 0, 69, 0, 214, 185, 0, 66, 255, + 224, 179, 11, 0, 77, 66, 184, 255, 216, 180, 9, 10, 0, 76, 55, 184, 255, 232, 180, 11, + 12, 0, 76, 55, 184, 255, 224, 179, 10, 0, 77, 5, 184, 255, 224, 180, 19, 20, 0, 76, + 5, 184, 255, 216, 180, 17, 18, 0, 76, 5, 184, 255, 232, 179, 16, 0, 77, 5, 184, 255, + 224, 179, 15, 0, 77, 2, 184, 255, 208, 180, 16, 20, 0, 76, 2, 184, 255, 216, 64, 11, + 15, 0, 77, 62, 42, 130, 57, 57, 65, 17, 3, 184, 255, 192, 64, 53, 11, 14, 72, 3, + 68, 0, 23, 15, 11, 1, 11, 20, 20, 26, 33, 130, 65, 71, 49, 49, 37, 37, 0, 26, + 1, 8, 26, 70, 0, 20, 20, 23, 15, 8, 70, 48, 48, 45, 136, 52, 62, 37, 134, 38, + 38, 52, 80, 27, 30, 136, 68, 23, 81, 0, 63, 51, 237, 50, 63, 57, 47, 237, 57, 16, + 237, 50, 47, 16, 220, 205, 18, 57, 47, 205, 1, 16, 198, 94, 93, 50, 47, 50, 47, 16, + 222, 237, 18, 57, 47, 204, 93, 51, 221, 50, 213, 43, 205, 17, 51, 47, 237, 50, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 23, 22, 22, 21, 20, 14, 2, 35, 34, 38, + 39, 55, 22, 22, 51, 50, 53, 52, 39, 39, 54, 54, 55, 38, 38, 39, 55, 22, 22, 51, + 50, 54, 53, 52, 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 39, 54, + 54, 51, 50, 30, 2, 21, 20, 14, 2, 7, 22, 22, 21, 20, 6, 7, 6, 254, 26, 23, + 9, 21, 35, 26, 23, 40, 11, 10, 11, 24, 15, 32, 37, 7, 4, 12, 6, 49, 71, 16, + 17, 15, 78, 55, 66, 60, 60, 51, 98, 92, 51, 50, 56, 60, 28, 73, 26, 18, 33, 79, + 39, 38, 70, 54, 32, 14, 22, 25, 12, 38, 51, 97, 84, 7, 33, 12, 30, 29, 10, 23, + 19, 13, 7, 5, 51, 4, 5, 20, 20, 11, 2, 11, 28, 13, 2, 15, 8, 70, 5, 19, + 38, 32, 36, 42, 66, 34, 29, 31, 36, 14, 12, 73, 11, 13, 13, 32, 51, 38, 18, 32, + 26, 18, 4, 14, 53, 48, 62, 72, 5, 11, 0, 1, 0, 64, 255, 91, 1, 217, 2, 107, + 0, 24, 0, 101, 64, 57, 3, 3, 6, 24, 21, 24, 120, 0, 3, 20, 0, 0, 3, 11, + 3, 6, 3, 120, 16, 11, 20, 16, 16, 11, 0, 0, 6, 10, 115, 7, 26, 21, 16, 115, + 0, 18, 1, 8, 18, 25, 0, 24, 65, 21, 16, 3, 3, 18, 19, 65, 18, 68, 9, 6, + 121, 11, 68, 0, 63, 237, 206, 63, 63, 18, 57, 17, 51, 51, 63, 51, 1, 16, 214, 94, + 93, 237, 50, 16, 222, 237, 197, 50, 47, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, + 8, 125, 196, 49, 48, 1, 6, 6, 7, 22, 22, 23, 51, 21, 35, 53, 35, 46, 3, 39, + 17, 35, 17, 51, 17, 54, 54, 55, 1, 214, 49, 117, 68, 53, 102, 42, 40, 78, 22, 25, + 50, 56, 61, 35, 82, 82, 65, 119, 45, 2, 107, 73, 144, 72, 45, 135, 80, 235, 165, 46, + 88, 76, 63, 23, 254, 216, 2, 107, 254, 236, 67, 146, 63, 0, 1, 0, 71, 255, 127, 1, + 208, 1, 208, 0, 26, 0, 60, 64, 30, 24, 24, 5, 9, 127, 6, 28, 20, 15, 127, 17, + 27, 24, 23, 23, 18, 15, 0, 20, 20, 17, 18, 73, 17, 74, 8, 5, 133, 10, 74, 0, + 63, 237, 206, 63, 63, 18, 57, 17, 51, 51, 17, 51, 47, 51, 1, 16, 214, 237, 50, 16, + 222, 237, 197, 50, 47, 49, 48, 55, 30, 3, 23, 51, 21, 35, 53, 35, 46, 3, 39, 21, + 35, 17, 51, 21, 54, 54, 55, 51, 6, 6, 238, 19, 48, 49, 49, 21, 40, 78, 9, 19, + 56, 61, 62, 25, 83, 83, 55, 110, 44, 97, 43, 121, 255, 15, 41, 49, 54, 26, 199, 129, + 31, 65, 60, 50, 17, 223, 1, 208, 194, 48, 95, 51, 51, 108, 0, 1, 0, 48, 0, 0, + 1, 235, 2, 107, 0, 30, 0, 126, 64, 70, 0, 3, 1, 8, 5, 5, 8, 30, 25, 30, + 120, 0, 5, 20, 0, 0, 5, 9, 5, 8, 5, 120, 12, 9, 20, 12, 9, 25, 12, 22, + 175, 15, 191, 15, 2, 15, 15, 18, 0, 0, 8, 32, 21, 17, 115, 18, 31, 0, 30, 65, + 14, 14, 12, 16, 21, 25, 21, 23, 23, 5, 21, 21, 18, 19, 65, 18, 68, 8, 9, 68, + 0, 63, 51, 63, 63, 18, 57, 47, 51, 51, 47, 17, 51, 16, 205, 50, 50, 47, 63, 51, + 1, 16, 214, 237, 50, 16, 206, 50, 47, 17, 57, 47, 93, 51, 221, 50, 135, 43, 135, 125, + 196, 135, 24, 16, 43, 135, 8, 125, 196, 49, 48, 1, 94, 93, 1, 14, 3, 7, 22, 22, + 23, 35, 38, 38, 39, 21, 35, 53, 35, 17, 35, 17, 51, 17, 51, 53, 51, 21, 62, 3, + 55, 1, 214, 11, 27, 37, 49, 33, 48, 85, 45, 93, 44, 78, 38, 65, 43, 82, 82, 43, + 65, 28, 42, 31, 25, 11, 2, 107, 33, 63, 68, 77, 48, 60, 158, 112, 106, 145, 37, 137, + 135, 254, 226, 2, 107, 254, 246, 135, 134, 41, 69, 62, 60, 33, 0, 1, 0, 54, 0, 0, + 1, 222, 1, 208, 0, 34, 0, 132, 64, 75, 0, 0, 16, 0, 32, 0, 3, 8, 0, 0, + 30, 6, 11, 6, 129, 5, 0, 20, 5, 5, 0, 0, 29, 24, 29, 129, 30, 0, 20, 30, + 0, 30, 30, 5, 24, 11, 21, 175, 14, 191, 14, 2, 14, 14, 17, 5, 36, 20, 15, 127, + 17, 35, 30, 29, 73, 13, 13, 11, 15, 20, 24, 20, 22, 22, 0, 20, 20, 17, 18, 73, + 17, 74, 5, 6, 74, 0, 63, 51, 63, 63, 18, 57, 47, 51, 51, 47, 17, 51, 16, 205, + 50, 50, 47, 63, 51, 1, 16, 214, 237, 50, 16, 206, 17, 57, 47, 93, 51, 205, 50, 17, + 51, 47, 135, 43, 135, 125, 196, 135, 24, 16, 43, 135, 8, 125, 196, 1, 94, 93, 49, 48, + 37, 30, 3, 23, 35, 46, 3, 39, 21, 35, 53, 35, 21, 35, 17, 51, 21, 51, 53, 51, + 21, 62, 3, 55, 51, 14, 3, 1, 45, 24, 49, 45, 41, 18, 98, 16, 33, 34, 36, 19, + 61, 45, 82, 82, 45, 61, 21, 33, 28, 25, 14, 97, 20, 34, 37, 42, 255, 23, 60, 68, + 71, 33, 28, 59, 55, 50, 19, 98, 101, 214, 1, 208, 193, 103, 80, 27, 43, 39, 39, 22, + 28, 49, 48, 52, 0, 1, 0, 18, 0, 0, 1, 235, 2, 107, 0, 28, 0, 121, 64, 69, + 3, 3, 6, 28, 25, 28, 120, 0, 3, 20, 0, 0, 3, 7, 3, 6, 3, 120, 12, 7, + 20, 12, 12, 7, 0, 0, 6, 30, 12, 25, 23, 21, 24, 115, 18, 16, 0, 15, 1, 15, + 29, 0, 28, 65, 25, 12, 3, 24, 15, 21, 3, 15, 18, 31, 18, 47, 18, 3, 8, 18, + 18, 14, 19, 65, 14, 68, 6, 7, 68, 0, 63, 51, 63, 63, 18, 57, 47, 94, 93, 57, + 51, 205, 50, 17, 51, 51, 63, 51, 1, 16, 214, 93, 205, 51, 253, 50, 205, 51, 51, 16, + 206, 50, 47, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 8, 125, 196, 49, 48, 1, + 6, 6, 7, 22, 22, 23, 35, 46, 3, 39, 17, 35, 17, 35, 53, 51, 53, 51, 21, 51, + 21, 35, 21, 54, 54, 55, 1, 214, 49, 96, 64, 64, 118, 48, 93, 25, 50, 56, 61, 35, + 82, 71, 71, 82, 54, 54, 65, 99, 40, 2, 107, 73, 143, 73, 54, 173, 103, 46, 88, 76, + 63, 23, 254, 216, 1, 229, 64, 70, 70, 64, 142, 67, 145, 64, 0, 1, 0, 18, 0, 0, + 1, 222, 1, 232, 0, 31, 0, 128, 64, 72, 0, 0, 5, 26, 24, 26, 129, 27, 0, 20, + 27, 27, 0, 6, 0, 5, 0, 129, 11, 6, 20, 11, 6, 0, 11, 27, 27, 5, 33, 11, + 24, 22, 20, 23, 127, 17, 15, 0, 14, 1, 8, 14, 32, 27, 26, 73, 23, 14, 20, 17, + 11, 24, 20, 24, 36, 24, 2, 24, 17, 64, 8, 13, 72, 17, 17, 13, 18, 13, 74, 5, + 6, 74, 0, 63, 51, 63, 47, 18, 57, 47, 43, 57, 93, 17, 51, 17, 51, 205, 50, 63, + 51, 1, 16, 214, 94, 93, 205, 51, 253, 50, 205, 51, 51, 16, 206, 50, 47, 16, 0, 193, + 135, 5, 43, 135, 125, 196, 135, 24, 16, 43, 135, 8, 125, 196, 49, 48, 37, 30, 3, 23, + 35, 46, 3, 39, 21, 35, 17, 35, 53, 51, 53, 51, 21, 51, 21, 35, 21, 54, 55, 51, + 14, 3, 1, 0, 27, 62, 61, 54, 18, 98, 19, 50, 56, 58, 25, 82, 72, 72, 82, 55, + 55, 103, 88, 97, 21, 51, 54, 54, 253, 20, 61, 69, 72, 31, 31, 65, 60, 50, 17, 223, + 1, 112, 58, 62, 62, 58, 98, 91, 103, 26, 55, 55, 52, 0, 1, 0, 18, 0, 0, 1, + 235, 2, 107, 0, 24, 0, 100, 64, 55, 3, 3, 0, 9, 14, 9, 120, 8, 3, 20, 8, + 8, 3, 3, 0, 24, 21, 3, 21, 24, 120, 0, 3, 20, 0, 3, 0, 0, 8, 26, 14, + 21, 115, 17, 0, 18, 1, 8, 18, 25, 0, 24, 65, 21, 14, 16, 17, 121, 20, 65, 16, + 68, 8, 9, 68, 0, 63, 51, 63, 63, 237, 18, 57, 57, 63, 51, 1, 16, 214, 94, 93, + 221, 237, 50, 16, 206, 50, 47, 135, 43, 16, 0, 193, 135, 5, 125, 16, 196, 135, 24, 16, + 43, 135, 8, 125, 196, 49, 48, 1, 6, 6, 7, 30, 3, 23, 35, 46, 3, 39, 17, 35, + 17, 35, 53, 51, 17, 54, 54, 55, 1, 214, 36, 92, 64, 25, 58, 56, 53, 21, 93, 20, + 47, 52, 56, 29, 82, 94, 176, 59, 87, 35, 2, 107, 67, 140, 82, 21, 71, 88, 100, 50, + 50, 92, 78, 59, 17, 254, 216, 2, 37, 70, 254, 236, 72, 138, 66, 0, 1, 0, 17, 0, + 0, 1, 222, 1, 208, 0, 24, 0, 98, 64, 54, 0, 0, 5, 21, 18, 21, 129, 22, 0, + 20, 22, 22, 0, 6, 0, 5, 0, 129, 11, 6, 20, 11, 6, 0, 11, 22, 22, 5, 26, + 11, 18, 127, 15, 0, 14, 1, 8, 14, 25, 22, 21, 73, 18, 11, 13, 14, 133, 17, 73, + 13, 74, 5, 6, 74, 0, 63, 51, 63, 63, 237, 18, 57, 57, 63, 51, 1, 16, 214, 94, + 93, 205, 237, 50, 16, 206, 50, 47, 16, 0, 193, 135, 5, 43, 135, 125, 196, 135, 24, 16, + 43, 135, 8, 125, 196, 49, 48, 37, 30, 3, 23, 35, 46, 3, 39, 21, 35, 17, 35, 53, + 51, 21, 54, 54, 55, 51, 6, 6, 1, 19, 24, 55, 56, 50, 18, 98, 19, 46, 50, 51, + 24, 82, 91, 173, 52, 86, 35, 97, 42, 87, 255, 19, 61, 70, 74, 31, 31, 66, 60, 51, + 15, 223, 1, 139, 69, 194, 51, 97, 46, 53, 102, 0, 1, 0, 45, 255, 91, 1, 217, 2, + 107, 0, 15, 0, 60, 64, 33, 15, 7, 115, 2, 6, 115, 3, 17, 14, 10, 115, 11, 16, + 9, 121, 15, 14, 31, 14, 2, 14, 14, 11, 0, 12, 65, 11, 68, 5, 2, 121, 7, 68, + 0, 63, 237, 206, 63, 63, 51, 18, 57, 47, 93, 237, 1, 16, 214, 237, 50, 16, 222, 237, + 213, 237, 50, 49, 48, 1, 51, 17, 51, 21, 35, 53, 35, 17, 35, 17, 35, 17, 51, 17, + 51, 1, 96, 82, 39, 78, 43, 225, 82, 82, 225, 2, 107, 253, 219, 235, 165, 1, 32, 254, + 224, 2, 107, 254, 251, 0, 1, 0, 71, 255, 127, 1, 208, 1, 208, 0, 15, 0, 66, 64, + 37, 13, 5, 127, 0, 4, 127, 1, 17, 12, 8, 127, 0, 9, 1, 9, 16, 7, 133, 15, + 12, 31, 12, 2, 8, 12, 12, 9, 14, 10, 73, 9, 74, 3, 0, 133, 5, 74, 0, 63, + 237, 206, 63, 63, 51, 18, 57, 47, 94, 93, 237, 1, 16, 214, 93, 237, 50, 16, 222, 237, + 213, 237, 50, 49, 48, 37, 51, 21, 35, 53, 35, 53, 35, 21, 35, 17, 51, 21, 51, 53, + 51, 1, 169, 39, 78, 43, 189, 83, 83, 189, 82, 70, 199, 129, 205, 205, 1, 208, 189, 189, + 0, 1, 0, 45, 0, 0, 1, 226, 2, 107, 0, 13, 0, 58, 64, 31, 5, 13, 115, 2, + 1, 15, 11, 7, 115, 8, 14, 2, 121, 13, 13, 9, 6, 121, 15, 11, 31, 11, 2, 11, + 11, 8, 9, 65, 4, 8, 68, 0, 63, 51, 63, 18, 57, 47, 93, 237, 17, 51, 16, 237, + 1, 16, 214, 237, 50, 16, 222, 221, 237, 50, 49, 48, 1, 21, 35, 17, 35, 17, 35, 17, + 35, 17, 51, 17, 51, 17, 1, 226, 94, 82, 179, 82, 82, 179, 2, 107, 70, 253, 219, 1, + 32, 254, 224, 2, 107, 254, 251, 1, 5, 0, 1, 0, 71, 0, 0, 1, 226, 1, 208, 0, + 13, 0, 59, 64, 33, 5, 13, 127, 2, 1, 15, 11, 7, 127, 0, 8, 16, 8, 2, 8, + 14, 2, 133, 13, 73, 6, 133, 15, 11, 1, 11, 11, 8, 9, 73, 4, 8, 74, 0, 63, + 51, 63, 18, 57, 47, 93, 237, 63, 237, 1, 16, 214, 93, 237, 50, 16, 222, 213, 237, 50, + 49, 48, 1, 21, 35, 17, 35, 53, 35, 21, 35, 17, 51, 21, 51, 53, 1, 226, 91, 82, + 155, 83, 83, 155, 1, 208, 69, 254, 117, 205, 205, 1, 208, 189, 189, 0, 1, 0, 54, 255, + 91, 1, 208, 2, 107, 0, 35, 0, 136, 64, 13, 24, 16, 17, 18, 0, 76, 20, 16, 19, + 20, 0, 76, 10, 184, 255, 216, 180, 17, 18, 0, 76, 6, 184, 255, 240, 179, 12, 0, 77, + 6, 184, 255, 232, 180, 9, 11, 0, 76, 5, 184, 255, 240, 64, 52, 9, 0, 77, 0, 29, + 115, 30, 15, 14, 1, 14, 30, 14, 30, 34, 23, 118, 31, 7, 1, 7, 72, 9, 73, 7, + 37, 33, 115, 16, 34, 32, 34, 48, 34, 3, 34, 36, 25, 124, 4, 4, 34, 32, 121, 35, + 65, 30, 34, 68, 18, 124, 12, 0, 47, 237, 63, 51, 63, 237, 18, 57, 47, 237, 1, 16, + 214, 93, 237, 16, 222, 43, 93, 237, 17, 57, 57, 47, 47, 93, 16, 237, 50, 49, 48, 43, + 43, 43, 43, 43, 43, 1, 21, 54, 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 39, 53, + 22, 22, 51, 50, 62, 2, 53, 52, 35, 34, 6, 7, 17, 35, 17, 35, 17, 35, 17, 1, + 26, 10, 17, 14, 74, 67, 21, 39, 58, 37, 10, 8, 3, 8, 7, 24, 31, 18, 7, 73, + 9, 16, 9, 73, 82, 73, 2, 107, 225, 1, 1, 130, 134, 81, 113, 71, 32, 2, 69, 1, + 1, 31, 60, 86, 56, 187, 1, 1, 254, 190, 2, 37, 253, 219, 2, 107, 0, 1, 0, 54, + 255, 91, 1, 208, 1, 208, 0, 34, 0, 108, 185, 0, 25, 255, 232, 179, 14, 0, 77, 25, + 184, 255, 240, 179, 13, 0, 77, 25, 184, 255, 232, 180, 11, 12, 0, 76, 25, 184, 255, 240, + 64, 42, 10, 0, 77, 20, 12, 127, 13, 15, 34, 1, 34, 13, 34, 13, 17, 6, 130, 26, + 36, 16, 127, 16, 17, 1, 17, 35, 3, 137, 31, 75, 8, 136, 23, 23, 17, 15, 133, 18, + 73, 13, 17, 74, 0, 63, 51, 63, 237, 18, 57, 47, 237, 63, 237, 1, 16, 214, 93, 237, + 16, 222, 237, 17, 57, 57, 47, 47, 93, 16, 237, 50, 49, 48, 43, 43, 43, 43, 5, 22, + 22, 51, 50, 54, 53, 52, 35, 34, 6, 35, 21, 35, 17, 35, 17, 35, 17, 51, 21, 54, + 54, 51, 50, 22, 21, 20, 14, 2, 35, 34, 38, 39, 1, 35, 3, 8, 7, 49, 31, 73, + 5, 21, 8, 73, 82, 73, 228, 10, 25, 6, 74, 67, 21, 39, 58, 37, 5, 13, 5, 94, + 1, 1, 92, 83, 135, 1, 213, 1, 139, 254, 117, 1, 208, 181, 2, 1, 103, 109, 65, 91, + 57, 26, 1, 1, 0, 2, 0, 29, 255, 92, 1, 217, 2, 121, 0, 44, 0, 58, 0, 236, + 181, 50, 32, 13, 0, 77, 42, 184, 255, 240, 179, 18, 0, 77, 42, 184, 255, 232, 179, 17, + 0, 77, 42, 184, 255, 224, 179, 12, 0, 77, 42, 184, 255, 232, 179, 11, 0, 77, 42, 184, + 255, 240, 64, 14, 9, 0, 77, 25, 24, 14, 0, 77, 25, 16, 8, 0, 77, 18, 184, 255, + 216, 180, 16, 18, 0, 76, 10, 184, 255, 232, 179, 12, 0, 77, 10, 184, 255, 240, 179, 11, + 0, 77, 10, 184, 255, 224, 179, 10, 0, 77, 10, 184, 255, 232, 64, 16, 9, 0, 77, 6, + 16, 11, 12, 0, 76, 6, 24, 9, 10, 0, 76, 2, 184, 255, 240, 179, 18, 0, 77, 2, + 184, 255, 240, 180, 11, 13, 0, 76, 1, 184, 255, 240, 64, 46, 17, 0, 77, 16, 48, 19, + 45, 118, 23, 3, 19, 5, 5, 28, 53, 118, 11, 19, 19, 36, 36, 11, 60, 0, 118, 28, + 59, 56, 124, 8, 40, 37, 37, 40, 124, 33, 69, 48, 3, 124, 16, 23, 70, 19, 124, 20, + 0, 47, 237, 63, 51, 237, 50, 63, 237, 50, 47, 16, 222, 237, 1, 16, 214, 237, 16, 206, + 50, 47, 50, 47, 16, 237, 17, 57, 47, 18, 57, 57, 237, 17, 57, 57, 49, 48, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 20, 22, 23, + 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, 22, 22, 23, 7, 38, 38, 39, 46, + 3, 53, 52, 62, 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 23, 20, 22, 23, + 62, 3, 53, 52, 38, 35, 34, 6, 111, 58, 51, 18, 77, 66, 56, 72, 18, 36, 57, 39, + 20, 63, 45, 11, 69, 97, 29, 47, 79, 57, 33, 41, 72, 98, 56, 37, 68, 20, 21, 26, + 50, 23, 43, 70, 50, 27, 172, 8, 8, 25, 35, 22, 10, 21, 26, 29, 32, 1, 54, 107, + 121, 18, 73, 86, 127, 114, 103, 104, 41, 81, 71, 53, 13, 41, 50, 2, 69, 5, 81, 67, + 3, 40, 79, 119, 80, 78, 120, 82, 43, 14, 11, 67, 11, 11, 36, 66, 94, 149, 42, 77, + 35, 9, 41, 54, 63, 30, 67, 65, 82, 0, 2, 0, 40, 255, 127, 1, 214, 1, 219, 0, + 11, 0, 63, 0, 213, 64, 12, 58, 16, 8, 0, 77, 53, 16, 8, 9, 0, 76, 44, 184, + 255, 192, 180, 16, 18, 0, 76, 34, 184, 255, 232, 179, 13, 0, 77, 34, 184, 255, 224, 179, + 12, 0, 77, 34, 184, 255, 232, 179, 11, 0, 77, 34, 184, 255, 224, 179, 10, 0, 77, 33, + 184, 255, 232, 64, 15, 14, 0, 77, 29, 16, 14, 0, 77, 28, 32, 10, 13, 0, 76, 22, + 184, 255, 232, 179, 16, 0, 77, 22, 184, 255, 240, 180, 14, 15, 0, 76, 17, 184, 255, 232, + 64, 62, 15, 16, 0, 76, 4, 32, 16, 18, 0, 76, 4, 16, 15, 0, 77, 23, 52, 26, + 3, 41, 46, 46, 36, 0, 130, 26, 15, 26, 1, 63, 26, 63, 26, 55, 6, 130, 36, 65, + 20, 130, 55, 64, 9, 137, 31, 15, 12, 12, 15, 137, 60, 80, 23, 3, 137, 41, 52, 81, + 46, 137, 47, 75, 0, 63, 237, 63, 51, 237, 50, 63, 237, 50, 47, 16, 222, 237, 1, 16, + 214, 237, 16, 222, 237, 17, 57, 57, 47, 47, 93, 16, 237, 17, 51, 47, 57, 57, 18, 57, + 57, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 20, + 22, 23, 54, 54, 53, 52, 38, 35, 34, 6, 55, 38, 38, 35, 34, 14, 2, 21, 20, 22, + 23, 38, 38, 53, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 7, 30, 3, 23, 7, + 46, 3, 39, 38, 38, 53, 52, 62, 2, 51, 50, 22, 23, 1, 26, 9, 6, 44, 53, 23, + 30, 30, 29, 47, 8, 33, 18, 31, 54, 41, 23, 46, 54, 7, 8, 15, 32, 51, 36, 34, + 49, 32, 15, 19, 36, 52, 33, 10, 34, 35, 33, 10, 11, 24, 55, 52, 46, 16, 95, 113, + 37, 62, 81, 44, 26, 46, 8, 165, 34, 55, 22, 8, 76, 54, 41, 55, 55, 167, 3, 7, + 21, 44, 65, 44, 72, 90, 14, 24, 55, 32, 39, 66, 48, 28, 25, 44, 58, 33, 35, 63, + 52, 37, 9, 19, 24, 14, 6, 1, 61, 1, 14, 28, 44, 32, 5, 126, 115, 58, 90, 60, + 31, 8, 3, 255, 255, 0, 46, 255, 87, 1, 204, 2, 121, 2, 6, 0, 162, 0, 0, 255, + 255, 0, 49, 255, 87, 1, 195, 1, 219, 2, 6, 0, 194, 0, 0, 0, 1, 0, 39, 255, + 91, 1, 205, 2, 107, 0, 11, 0, 42, 64, 21, 7, 115, 4, 1, 3, 115, 10, 8, 8, + 13, 12, 2, 9, 121, 11, 65, 6, 3, 121, 8, 68, 0, 63, 237, 206, 63, 237, 50, 1, + 17, 18, 57, 47, 206, 253, 206, 221, 237, 49, 48, 1, 21, 35, 17, 51, 21, 35, 53, 35, + 17, 35, 53, 1, 205, 170, 39, 78, 43, 170, 2, 107, 70, 254, 33, 235, 165, 2, 37, 70, + 0, 1, 0, 58, 255, 127, 1, 186, 1, 208, 0, 11, 0, 48, 64, 25, 10, 127, 7, 4, + 6, 127, 1, 0, 11, 1, 8, 11, 11, 13, 12, 9, 6, 133, 11, 74, 5, 0, 133, 2, + 73, 0, 63, 237, 50, 63, 237, 206, 1, 17, 18, 57, 47, 94, 93, 206, 253, 206, 221, 237, + 49, 48, 19, 35, 53, 33, 21, 35, 17, 51, 21, 35, 53, 35, 209, 151, 1, 128, 151, 39, + 78, 43, 1, 139, 69, 69, 254, 187, 199, 129, 255, 255, 0, 13, 0, 0, 1, 232, 2, 107, + 2, 6, 0, 60, 0, 0, 0, 1, 0, 30, 255, 91, 1, 214, 1, 208, 0, 20, 0, 84, + 64, 46, 15, 10, 15, 20, 10, 129, 9, 6, 20, 9, 9, 6, 15, 20, 20, 129, 0, 3, + 20, 0, 3, 0, 3, 127, 9, 0, 6, 1, 8, 6, 6, 21, 22, 0, 20, 73, 15, 3, + 6, 6, 5, 10, 9, 73, 5, 75, 0, 63, 63, 51, 18, 57, 17, 51, 51, 63, 51, 1, + 17, 18, 57, 47, 94, 93, 205, 253, 221, 135, 43, 125, 16, 196, 135, 24, 16, 43, 8, 125, + 16, 196, 49, 48, 1, 6, 6, 7, 21, 35, 53, 38, 38, 39, 51, 30, 3, 23, 62, 3, + 55, 1, 214, 37, 97, 46, 82, 46, 95, 37, 90, 12, 31, 35, 37, 17, 16, 37, 36, 31, + 12, 1, 208, 128, 231, 94, 176, 178, 94, 230, 127, 44, 99, 97, 91, 36, 36, 91, 97, 99, + 44, 0, 1, 0, 13, 0, 0, 1, 232, 2, 107, 0, 24, 0, 86, 64, 46, 20, 16, 11, + 16, 120, 17, 20, 20, 17, 20, 17, 22, 23, 115, 1, 11, 8, 8, 120, 7, 4, 20, 7, + 4, 7, 4, 2, 1, 1, 25, 26, 16, 17, 65, 23, 1, 121, 20, 11, 4, 4, 8, 7, + 65, 0, 68, 0, 63, 63, 51, 57, 47, 51, 51, 237, 50, 63, 51, 1, 17, 18, 57, 47, + 205, 51, 220, 135, 43, 125, 16, 196, 1, 24, 16, 253, 205, 220, 135, 43, 135, 125, 196, 49, + 48, 51, 53, 35, 53, 51, 38, 38, 39, 51, 22, 22, 23, 62, 3, 55, 51, 6, 6, 7, + 51, 21, 35, 21, 210, 128, 122, 60, 90, 41, 92, 33, 71, 43, 23, 38, 35, 33, 17, 90, + 41, 92, 59, 125, 129, 189, 66, 97, 176, 91, 80, 148, 81, 42, 76, 75, 75, 41, 91, 173, + 100, 66, 189, 0, 1, 0, 30, 255, 91, 1, 214, 1, 208, 0, 26, 0, 84, 64, 46, 12, + 16, 21, 16, 129, 15, 12, 20, 15, 12, 15, 9, 3, 26, 21, 26, 129, 0, 3, 20, 0, + 3, 0, 4, 6, 127, 11, 9, 9, 28, 27, 21, 16, 15, 73, 21, 3, 12, 134, 9, 74, + 8, 75, 26, 0, 73, 0, 63, 50, 63, 63, 237, 50, 50, 63, 51, 1, 47, 17, 18, 57, + 47, 205, 253, 205, 221, 135, 43, 135, 125, 196, 1, 24, 16, 220, 135, 43, 135, 125, 196, 49, + 48, 1, 6, 6, 7, 51, 21, 35, 21, 35, 53, 35, 53, 51, 38, 38, 39, 51, 30, 3, + 23, 62, 3, 55, 1, 214, 32, 83, 41, 99, 123, 82, 122, 99, 42, 81, 32, 90, 12, 31, + 35, 37, 17, 16, 37, 36, 31, 12, 1, 208, 112, 203, 88, 61, 165, 165, 61, 88, 204, 111, + 44, 99, 97, 91, 36, 36, 91, 97, 99, 44, 0, 1, 0, 25, 255, 91, 1, 217, 2, 107, + 0, 25, 0, 86, 64, 47, 16, 2, 15, 2, 120, 23, 16, 20, 23, 16, 23, 23, 24, 10, + 18, 11, 18, 120, 19, 10, 20, 19, 19, 10, 19, 1, 115, 24, 27, 15, 15, 11, 26, 18, + 19, 65, 16, 15, 65, 10, 11, 68, 23, 121, 0, 2, 68, 0, 63, 206, 237, 63, 51, 63, + 51, 63, 51, 1, 16, 198, 50, 47, 16, 222, 237, 51, 135, 16, 43, 135, 125, 196, 1, 17, + 51, 24, 47, 135, 43, 135, 125, 196, 49, 48, 5, 53, 35, 46, 3, 39, 6, 6, 7, 35, + 54, 54, 55, 3, 51, 23, 55, 51, 3, 22, 22, 23, 51, 21, 1, 139, 23, 11, 27, 32, + 36, 20, 36, 66, 30, 89, 33, 85, 50, 158, 91, 118, 131, 89, 166, 38, 67, 30, 40, 165, + 165, 27, 68, 72, 72, 31, 56, 145, 69, 74, 173, 80, 1, 36, 237, 237, 254, 223, 62, 131, + 67, 235, 0, 1, 0, 29, 255, 127, 1, 208, 1, 208, 0, 27, 0, 82, 64, 45, 12, 20, + 13, 20, 129, 21, 12, 20, 21, 12, 21, 21, 1, 127, 26, 29, 18, 2, 17, 2, 129, 25, + 18, 20, 25, 25, 18, 17, 17, 13, 28, 25, 20, 21, 73, 18, 17, 73, 12, 13, 74, 25, + 133, 2, 74, 0, 63, 237, 63, 51, 63, 51, 63, 51, 1, 47, 16, 198, 50, 47, 135, 16, + 43, 135, 125, 196, 1, 24, 16, 222, 237, 51, 47, 135, 43, 135, 125, 196, 49, 48, 5, 53, + 35, 46, 3, 39, 14, 3, 7, 35, 54, 54, 55, 39, 51, 23, 55, 51, 7, 22, 22, 23, + 51, 21, 1, 130, 14, 10, 27, 32, 35, 18, 18, 39, 37, 31, 11, 85, 33, 93, 46, 165, + 93, 123, 115, 88, 153, 32, 62, 28, 40, 129, 129, 20, 48, 51, 50, 22, 23, 50, 51, 48, + 19, 60, 127, 57, 220, 162, 162, 215, 42, 91, 46, 199, 0, 1, 0, 18, 255, 91, 1, 217, + 2, 107, 0, 15, 0, 57, 64, 31, 4, 115, 7, 7, 11, 115, 8, 17, 160, 1, 176, 1, + 2, 1, 2, 115, 13, 14, 16, 2, 13, 121, 5, 15, 65, 7, 4, 121, 10, 11, 68, 0, + 63, 205, 237, 50, 63, 51, 237, 50, 1, 16, 214, 221, 253, 205, 93, 16, 222, 237, 51, 47, + 237, 49, 48, 1, 21, 35, 17, 51, 17, 51, 17, 51, 21, 35, 53, 33, 17, 35, 53, 1, + 14, 85, 167, 82, 39, 78, 254, 220, 85, 2, 107, 70, 254, 33, 2, 37, 253, 219, 235, 165, + 2, 37, 70, 0, 1, 0, 18, 255, 127, 1, 208, 1, 208, 0, 15, 0, 57, 64, 31, 4, + 127, 7, 7, 11, 127, 8, 17, 160, 1, 176, 1, 2, 1, 2, 127, 13, 14, 16, 2, 13, + 133, 5, 15, 73, 7, 4, 133, 10, 11, 74, 0, 63, 205, 237, 50, 63, 51, 237, 50, 1, + 16, 214, 221, 253, 205, 93, 16, 222, 237, 51, 47, 237, 49, 48, 1, 21, 35, 17, 51, 17, + 51, 17, 51, 21, 35, 53, 33, 17, 35, 53, 1, 14, 85, 158, 82, 39, 78, 254, 229, 85, + 1, 207, 69, 254, 188, 1, 138, 254, 118, 199, 129, 1, 138, 69, 0, 1, 0, 54, 255, 91, + 1, 217, 2, 107, 0, 27, 0, 86, 64, 16, 23, 40, 8, 0, 77, 22, 32, 10, 0, 77, + 22, 24, 9, 0, 77, 3, 184, 255, 232, 179, 18, 0, 77, 3, 184, 255, 240, 64, 28, 17, + 0, 77, 9, 16, 115, 11, 15, 115, 12, 29, 0, 115, 25, 28, 5, 124, 20, 20, 16, 9, + 26, 65, 14, 11, 121, 16, 68, 0, 63, 237, 206, 63, 51, 18, 57, 47, 237, 1, 16, 214, + 237, 16, 222, 237, 213, 237, 50, 49, 48, 43, 43, 43, 43, 43, 19, 20, 30, 2, 51, 50, + 54, 55, 17, 51, 17, 51, 21, 35, 53, 35, 53, 6, 6, 35, 34, 46, 2, 53, 53, 51, + 137, 8, 25, 45, 36, 32, 55, 14, 82, 39, 78, 43, 16, 61, 35, 60, 73, 40, 13, 83, + 1, 184, 38, 57, 38, 18, 10, 4, 1, 60, 253, 219, 235, 165, 232, 5, 9, 31, 58, 82, + 51, 179, 0, 1, 0, 54, 255, 127, 1, 208, 1, 208, 0, 27, 0, 69, 64, 42, 14, 16, + 13, 0, 77, 14, 24, 11, 12, 0, 76, 14, 32, 8, 10, 0, 76, 26, 5, 127, 0, 4, + 127, 1, 29, 19, 127, 16, 28, 22, 137, 11, 11, 5, 26, 17, 73, 3, 0, 133, 5, 74, + 0, 63, 237, 206, 63, 51, 18, 57, 47, 237, 1, 16, 214, 237, 16, 222, 237, 213, 237, 50, + 49, 48, 43, 43, 43, 37, 51, 21, 35, 53, 35, 53, 14, 3, 35, 34, 46, 2, 53, 53, + 51, 21, 20, 22, 51, 50, 54, 55, 53, 51, 1, 169, 39, 78, 43, 8, 25, 31, 33, 16, + 40, 65, 46, 25, 82, 53, 50, 37, 48, 19, 82, 70, 199, 129, 180, 2, 5, 4, 4, 16, + 38, 62, 46, 137, 136, 54, 41, 7, 5, 219, 0, 1, 0, 54, 0, 0, 1, 191, 2, 107, + 0, 26, 0, 91, 185, 0, 2, 255, 224, 180, 17, 18, 0, 76, 2, 184, 255, 232, 179, 16, + 0, 77, 2, 184, 255, 224, 64, 35, 15, 0, 77, 16, 5, 19, 4, 4, 24, 9, 13, 115, + 12, 28, 0, 115, 16, 24, 1, 24, 27, 6, 4, 3, 124, 18, 16, 19, 19, 13, 10, 25, + 65, 13, 68, 0, 63, 63, 51, 18, 57, 47, 51, 205, 253, 205, 51, 1, 16, 214, 93, 237, + 16, 222, 237, 50, 17, 57, 47, 51, 205, 50, 49, 48, 43, 43, 43, 19, 20, 22, 23, 53, + 51, 21, 54, 54, 55, 17, 51, 17, 35, 53, 6, 7, 21, 35, 53, 46, 3, 53, 53, 51, + 137, 35, 49, 67, 24, 42, 11, 82, 82, 25, 52, 67, 51, 65, 37, 14, 83, 1, 184, 66, + 72, 10, 113, 115, 2, 8, 3, 1, 60, 253, 149, 232, 8, 5, 115, 115, 4, 34, 57, 78, + 48, 179, 0, 1, 0, 54, 0, 0, 1, 173, 1, 208, 0, 27, 0, 65, 64, 34, 24, 16, + 11, 0, 77, 7, 19, 4, 20, 20, 26, 11, 14, 127, 13, 29, 1, 127, 26, 28, 7, 5, + 4, 136, 20, 18, 21, 21, 14, 11, 27, 73, 14, 74, 0, 63, 63, 51, 18, 57, 47, 51, + 205, 253, 205, 51, 1, 16, 214, 237, 16, 222, 237, 50, 17, 57, 47, 51, 205, 50, 49, 48, + 43, 19, 21, 20, 22, 23, 53, 51, 21, 54, 54, 55, 53, 51, 17, 35, 53, 6, 6, 7, + 21, 35, 53, 46, 3, 53, 53, 136, 42, 38, 62, 22, 32, 14, 83, 83, 10, 36, 22, 62, + 36, 60, 43, 23, 1, 208, 136, 46, 43, 5, 82, 82, 2, 5, 4, 219, 254, 48, 179, 3, + 8, 2, 83, 80, 2, 19, 38, 61, 44, 137, 0, 1, 0, 45, 0, 0, 1, 196, 2, 107, + 0, 21, 0, 86, 64, 17, 13, 40, 17, 18, 0, 76, 13, 24, 16, 0, 77, 13, 16, 15, + 0, 77, 5, 184, 255, 232, 179, 10, 0, 77, 5, 184, 255, 224, 179, 9, 0, 77, 5, 184, + 255, 208, 64, 22, 8, 0, 77, 10, 115, 9, 23, 0, 18, 115, 19, 22, 14, 124, 3, 3, + 19, 20, 65, 10, 19, 68, 0, 63, 51, 63, 18, 57, 47, 237, 1, 16, 214, 237, 50, 16, + 222, 237, 49, 48, 43, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 30, 2, 21, 21, 35, + 53, 52, 38, 35, 34, 6, 7, 17, 35, 17, 51, 127, 17, 65, 38, 63, 80, 45, 17, 82, + 57, 78, 32, 62, 14, 82, 82, 1, 140, 5, 9, 32, 60, 84, 52, 182, 182, 78, 78, 8, + 5, 254, 187, 2, 107, 255, 255, 0, 71, 0, 0, 1, 176, 2, 181, 2, 6, 0, 75, 0, + 0, 0, 2, 0, 18, 255, 243, 1, 219, 2, 121, 0, 38, 0, 47, 0, 191, 185, 0, 33, + 255, 240, 179, 18, 0, 77, 33, 184, 255, 232, 179, 17, 0, 77, 33, 184, 255, 216, 180, 15, + 16, 0, 76, 33, 184, 255, 232, 179, 10, 0, 77, 33, 184, 255, 248, 64, 30, 9, 0, 77, + 31, 32, 15, 16, 0, 76, 31, 16, 10, 0, 77, 31, 8, 9, 0, 77, 12, 32, 16, 0, + 77, 12, 24, 15, 0, 77, 8, 184, 255, 224, 179, 18, 0, 77, 8, 184, 255, 216, 179, 17, + 0, 77, 8, 184, 255, 208, 179, 16, 0, 77, 2, 184, 255, 248, 64, 46, 13, 14, 0, 76, + 39, 118, 35, 7, 7, 35, 49, 47, 0, 118, 29, 0, 15, 16, 15, 32, 15, 3, 8, 15, + 26, 118, 20, 48, 15, 0, 121, 29, 23, 47, 47, 3, 42, 124, 32, 69, 6, 6, 3, 124, + 10, 70, 0, 63, 237, 50, 47, 63, 237, 18, 57, 47, 204, 51, 237, 50, 1, 16, 214, 253, + 220, 94, 93, 50, 237, 50, 16, 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 19, 22, 22, 51, 50, 54, 55, 23, 6, 6, 35, 34, + 46, 2, 39, 46, 3, 53, 52, 54, 55, 23, 6, 21, 20, 22, 23, 54, 54, 51, 50, 22, + 21, 20, 6, 7, 39, 52, 38, 35, 34, 14, 2, 7, 237, 4, 51, 67, 34, 47, 7, 22, + 7, 67, 46, 53, 73, 46, 21, 1, 28, 50, 37, 22, 5, 2, 67, 4, 36, 32, 8, 86, + 69, 76, 80, 2, 1, 75, 41, 36, 21, 30, 19, 10, 1, 1, 33, 115, 118, 24, 8, 65, + 10, 26, 45, 81, 111, 66, 3, 17, 31, 49, 35, 13, 25, 6, 8, 17, 16, 32, 36, 1, + 137, 137, 159, 151, 8, 21, 5, 70, 100, 104, 37, 58, 73, 36, 0, 2, 0, 18, 255, 245, + 1, 199, 1, 219, 0, 38, 0, 47, 0, 121, 185, 0, 44, 255, 240, 64, 21, 15, 16, 0, + 76, 37, 8, 20, 0, 77, 37, 24, 18, 19, 0, 76, 37, 16, 17, 0, 77, 7, 184, 255, + 224, 179, 15, 0, 77, 1, 184, 255, 216, 64, 43, 17, 18, 0, 76, 39, 130, 3, 12, 12, + 3, 49, 47, 5, 130, 34, 0, 20, 16, 20, 2, 20, 31, 130, 25, 48, 20, 5, 134, 34, + 28, 47, 47, 0, 11, 11, 8, 136, 15, 81, 42, 136, 0, 80, 0, 63, 237, 63, 237, 50, + 47, 17, 57, 47, 204, 51, 237, 50, 1, 16, 214, 253, 220, 93, 50, 237, 50, 16, 206, 50, + 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 1, 50, 22, 21, 21, 35, 22, 22, 51, + 50, 54, 55, 23, 6, 6, 35, 34, 46, 2, 39, 46, 3, 53, 52, 54, 55, 23, 6, 21, + 20, 22, 23, 62, 3, 23, 52, 38, 35, 34, 14, 2, 7, 1, 50, 72, 77, 224, 4, 53, + 50, 26, 38, 10, 11, 10, 52, 32, 44, 66, 46, 24, 2, 26, 47, 35, 21, 5, 2, 67, + 4, 32, 29, 5, 31, 43, 51, 94, 38, 30, 15, 26, 18, 12, 1, 1, 219, 124, 112, 29, + 72, 75, 14, 8, 70, 8, 18, 33, 60, 82, 48, 3, 17, 30, 47, 34, 13, 25, 6, 8, + 17, 16, 29, 37, 3, 50, 75, 49, 24, 198, 61, 67, 22, 36, 46, 24, 0, 2, 0, 18, + 255, 91, 1, 219, 2, 121, 0, 41, 0, 50, 0, 229, 185, 0, 36, 255, 240, 179, 18, 0, + 77, 36, 184, 255, 232, 179, 17, 0, 77, 36, 184, 255, 216, 180, 15, 16, 0, 76, 36, 184, + 255, 240, 179, 10, 0, 77, 36, 184, 255, 200, 64, 51, 9, 0, 77, 34, 32, 15, 16, 0, + 76, 34, 8, 10, 0, 77, 34, 16, 9, 0, 77, 15, 40, 15, 0, 77, 15, 8, 12, 0, + 77, 15, 24, 11, 0, 77, 15, 16, 9, 10, 0, 76, 14, 40, 16, 0, 77, 14, 24, 15, + 0, 77, 8, 184, 255, 216, 180, 17, 18, 0, 76, 8, 184, 255, 224, 179, 16, 0, 77, 2, + 184, 255, 240, 179, 14, 0, 77, 2, 184, 255, 248, 64, 52, 13, 0, 77, 10, 115, 13, 13, + 18, 42, 118, 38, 7, 7, 38, 52, 50, 0, 118, 32, 0, 18, 16, 18, 32, 18, 3, 8, + 18, 29, 118, 23, 51, 18, 0, 121, 32, 26, 50, 50, 3, 45, 124, 35, 69, 6, 6, 3, + 124, 13, 11, 10, 70, 0, 63, 205, 51, 237, 50, 47, 63, 237, 18, 57, 47, 204, 51, 237, + 50, 1, 16, 214, 253, 220, 94, 93, 50, 237, 50, 16, 206, 50, 47, 16, 237, 17, 57, 47, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 19, 22, 22, 51, 50, 54, 55, 23, 6, 6, 7, 21, 35, 53, 46, 3, 39, 46, 3, + 53, 52, 54, 55, 23, 6, 21, 20, 22, 23, 54, 54, 51, 50, 22, 21, 20, 6, 7, 39, + 52, 38, 35, 34, 14, 2, 7, 237, 4, 51, 67, 34, 47, 7, 22, 6, 48, 35, 78, 39, + 56, 35, 16, 1, 28, 50, 37, 22, 5, 2, 67, 4, 36, 32, 8, 86, 69, 76, 80, 2, + 1, 75, 41, 36, 21, 30, 19, 10, 1, 1, 33, 115, 118, 24, 8, 65, 8, 21, 5, 154, + 158, 9, 52, 78, 100, 58, 3, 17, 31, 49, 35, 13, 25, 6, 8, 17, 16, 32, 36, 1, + 137, 137, 159, 151, 8, 21, 5, 70, 100, 104, 37, 58, 73, 36, 0, 2, 0, 18, 255, 127, + 1, 199, 1, 219, 0, 39, 0, 48, 0, 146, 185, 0, 45, 255, 232, 64, 22, 15, 16, 0, + 76, 38, 16, 17, 18, 0, 76, 19, 24, 12, 0, 77, 19, 16, 10, 11, 0, 76, 7, 184, + 255, 232, 180, 15, 16, 0, 76, 1, 184, 255, 216, 179, 18, 0, 77, 1, 184, 255, 224, 64, + 51, 17, 0, 77, 15, 127, 18, 18, 21, 40, 130, 12, 3, 50, 48, 5, 130, 35, 0, 21, + 16, 21, 32, 21, 3, 8, 21, 32, 130, 26, 49, 13, 21, 5, 134, 35, 29, 48, 48, 0, + 11, 11, 8, 136, 18, 16, 15, 81, 43, 136, 0, 80, 0, 63, 237, 63, 205, 51, 237, 50, + 47, 17, 57, 47, 204, 51, 237, 50, 1, 47, 16, 214, 253, 220, 94, 93, 50, 237, 50, 16, + 222, 50, 237, 17, 57, 47, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 1, 50, 22, 21, + 21, 35, 22, 22, 51, 50, 54, 55, 23, 6, 6, 7, 21, 35, 53, 38, 38, 39, 46, 3, + 53, 52, 54, 55, 23, 6, 21, 20, 22, 23, 62, 3, 23, 52, 38, 35, 34, 14, 2, 7, + 1, 50, 72, 77, 224, 4, 53, 50, 26, 38, 10, 11, 8, 31, 21, 79, 66, 68, 3, 26, + 47, 35, 21, 5, 2, 67, 4, 32, 29, 5, 31, 43, 51, 94, 38, 30, 15, 26, 18, 12, + 1, 1, 219, 124, 112, 29, 72, 75, 14, 8, 70, 6, 13, 4, 121, 123, 16, 117, 85, 3, + 17, 30, 47, 34, 13, 25, 6, 8, 17, 16, 29, 37, 3, 50, 75, 49, 24, 198, 61, 67, + 22, 36, 46, 24, 255, 255, 0, 89, 0, 0, 1, 155, 2, 107, 2, 6, 0, 44, 0, 0, + 255, 255, 0, 4, 0, 0, 1, 241, 3, 35, 2, 38, 2, 198, 0, 0, 1, 7, 3, 139, + 0, 0, 0, 139, 0, 19, 185, 0, 1, 255, 255, 64, 9, 49, 57, 7, 38, 80, 1, 17, + 46, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 7, 0, 0, 1, 235, 2, 152, 2, 38, + 2, 230, 0, 0, 1, 6, 3, 139, 0, 0, 0, 16, 64, 11, 1, 0, 53, 61, 31, 16, + 80, 1, 5, 50, 79, 43, 43, 52, 0, 1, 0, 46, 255, 91, 1, 216, 2, 107, 0, 43, + 0, 135, 64, 22, 35, 24, 17, 18, 0, 76, 34, 32, 14, 0, 77, 34, 16, 13, 0, 77, + 30, 24, 14, 0, 77, 20, 184, 255, 240, 179, 15, 0, 77, 19, 184, 255, 232, 179, 15, 0, + 77, 19, 184, 255, 232, 179, 9, 0, 77, 14, 184, 255, 224, 64, 42, 8, 0, 77, 12, 6, + 1, 6, 120, 7, 12, 20, 7, 12, 7, 7, 32, 118, 17, 45, 1, 25, 25, 40, 115, 42, + 44, 37, 124, 1, 12, 12, 42, 43, 65, 42, 68, 29, 124, 22, 6, 7, 65, 0, 63, 51, + 47, 237, 63, 63, 18, 57, 47, 51, 237, 1, 16, 214, 237, 50, 47, 50, 16, 222, 237, 51, + 47, 135, 43, 135, 125, 196, 49, 48, 1, 43, 43, 43, 43, 43, 43, 43, 43, 19, 17, 62, + 3, 55, 51, 14, 3, 7, 30, 3, 21, 20, 14, 2, 35, 34, 34, 39, 55, 22, 22, 51, + 50, 54, 53, 52, 46, 2, 35, 34, 6, 7, 17, 35, 17, 128, 30, 67, 65, 59, 21, 102, + 25, 56, 60, 63, 31, 48, 82, 62, 35, 26, 52, 77, 52, 13, 27, 11, 3, 5, 15, 13, + 60, 78, 41, 62, 70, 28, 12, 26, 13, 82, 2, 107, 254, 229, 30, 75, 77, 72, 29, 33, + 69, 71, 69, 31, 4, 30, 59, 91, 66, 56, 95, 70, 40, 2, 67, 1, 1, 96, 98, 64, + 75, 38, 11, 1, 1, 254, 230, 2, 107, 0, 1, 0, 71, 255, 90, 1, 204, 1, 208, 0, + 39, 0, 117, 64, 17, 31, 48, 15, 0, 77, 31, 16, 13, 14, 0, 76, 27, 32, 15, 0, + 77, 13, 184, 255, 232, 179, 9, 0, 77, 12, 184, 255, 240, 64, 43, 10, 0, 77, 29, 130, + 14, 0, 5, 5, 129, 6, 11, 20, 6, 11, 5, 6, 6, 14, 41, 22, 22, 0, 35, 127, + 37, 40, 11, 34, 137, 11, 11, 37, 38, 73, 37, 74, 26, 137, 19, 75, 6, 73, 0, 63, + 63, 237, 63, 63, 18, 57, 47, 237, 1, 47, 16, 214, 237, 50, 50, 47, 16, 206, 50, 47, + 0, 193, 135, 5, 43, 4, 125, 16, 196, 1, 24, 16, 237, 49, 48, 43, 43, 43, 43, 43, + 19, 62, 3, 55, 51, 14, 3, 7, 22, 22, 21, 20, 14, 2, 35, 34, 38, 39, 55, 22, + 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 7, 21, 35, 17, 51, 154, 22, 58, 59, 53, + 17, 97, 20, 49, 54, 54, 24, 92, 104, 25, 48, 72, 47, 11, 22, 8, 5, 5, 11, 8, + 57, 65, 87, 81, 13, 32, 6, 83, 83, 1, 6, 21, 53, 55, 53, 20, 23, 49, 49, 48, + 22, 5, 116, 103, 43, 78, 59, 35, 1, 2, 66, 1, 1, 76, 72, 86, 78, 3, 2, 208, + 1, 208, 0, 1, 0, 13, 255, 87, 1, 226, 2, 107, 0, 33, 0, 99, 185, 0, 6, 255, + 224, 180, 17, 18, 0, 76, 6, 184, 255, 240, 179, 12, 0, 77, 6, 184, 255, 248, 179, 11, + 0, 77, 3, 184, 255, 248, 64, 34, 13, 0, 77, 25, 26, 31, 115, 20, 0, 115, 17, 17, + 9, 32, 115, 19, 20, 35, 9, 34, 26, 25, 19, 121, 32, 68, 0, 121, 17, 65, 9, 121, + 8, 70, 0, 63, 237, 63, 237, 63, 237, 220, 25, 197, 1, 24, 16, 198, 16, 222, 213, 237, + 17, 57, 47, 237, 16, 253, 222, 25, 197, 49, 48, 43, 43, 43, 43, 19, 6, 6, 7, 14, + 3, 7, 39, 54, 54, 55, 62, 3, 53, 33, 17, 51, 22, 14, 2, 7, 39, 62, 3, 55, + 35, 17, 238, 3, 12, 22, 11, 30, 43, 57, 38, 9, 44, 48, 20, 10, 13, 7, 3, 1, + 28, 39, 1, 16, 29, 41, 23, 60, 9, 23, 21, 18, 5, 29, 2, 37, 102, 180, 81, 40, + 70, 52, 31, 2, 72, 7, 65, 69, 36, 94, 108, 118, 59, 253, 223, 31, 66, 64, 59, 23, + 38, 9, 28, 35, 39, 20, 2, 37, 0, 1, 0, 13, 255, 108, 1, 227, 1, 208, 0, 31, + 0, 86, 181, 11, 32, 11, 0, 77, 7, 184, 255, 240, 179, 13, 0, 77, 7, 184, 255, 232, + 64, 34, 12, 0, 77, 23, 24, 29, 127, 20, 0, 127, 17, 17, 9, 30, 127, 19, 20, 33, + 9, 32, 24, 23, 19, 133, 30, 74, 0, 133, 17, 73, 9, 133, 8, 81, 0, 63, 237, 63, + 237, 63, 237, 220, 25, 197, 1, 24, 16, 198, 16, 222, 213, 237, 17, 57, 47, 237, 16, 253, + 222, 25, 197, 49, 48, 43, 43, 43, 19, 20, 14, 2, 7, 6, 6, 7, 39, 54, 54, 55, + 62, 2, 52, 53, 33, 17, 51, 22, 6, 7, 39, 62, 3, 55, 35, 17, 235, 3, 7, 12, + 10, 20, 82, 76, 12, 44, 51, 15, 13, 13, 6, 1, 31, 39, 2, 54, 41, 58, 6, 19, + 19, 17, 5, 36, 1, 139, 30, 67, 67, 65, 28, 57, 82, 8, 70, 8, 49, 35, 30, 76, + 84, 84, 37, 254, 117, 63, 116, 38, 35, 6, 24, 31, 35, 17, 1, 139, 0, 1, 0, 45, + 255, 89, 1, 199, 2, 107, 0, 25, 0, 53, 64, 28, 25, 10, 17, 115, 2, 27, 24, 20, + 115, 21, 26, 19, 121, 15, 24, 31, 24, 2, 24, 24, 21, 0, 22, 65, 21, 68, 14, 7, + 0, 47, 205, 63, 63, 51, 18, 57, 47, 93, 237, 1, 16, 214, 237, 50, 16, 222, 253, 204, + 51, 49, 48, 1, 51, 17, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, 53, + 17, 35, 17, 35, 17, 51, 17, 51, 1, 117, 82, 11, 30, 52, 40, 13, 32, 10, 8, 8, + 23, 7, 33, 27, 246, 82, 82, 246, 2, 107, 253, 149, 41, 63, 42, 21, 5, 2, 65, 2, + 2, 43, 41, 1, 47, 254, 224, 2, 107, 254, 251, 0, 1, 0, 71, 255, 89, 1, 173, 1, + 208, 0, 25, 0, 61, 64, 34, 23, 8, 15, 127, 0, 27, 22, 18, 127, 0, 19, 1, 19, + 26, 17, 133, 15, 22, 31, 22, 2, 8, 22, 22, 19, 24, 20, 73, 19, 74, 12, 137, 5, + 75, 0, 63, 237, 63, 63, 51, 18, 57, 47, 94, 93, 237, 1, 16, 214, 93, 237, 50, 16, + 222, 253, 204, 51, 49, 48, 33, 20, 14, 2, 35, 34, 38, 39, 55, 22, 22, 51, 50, 54, + 53, 53, 35, 21, 35, 17, 51, 21, 51, 53, 51, 1, 173, 11, 30, 52, 40, 13, 32, 11, + 8, 8, 23, 8, 32, 27, 192, 83, 83, 192, 83, 41, 63, 42, 21, 5, 2, 65, 2, 2, + 43, 41, 220, 205, 1, 208, 189, 189, 0, 1, 0, 45, 255, 87, 1, 226, 2, 107, 0, 23, + 0, 71, 64, 37, 8, 9, 14, 115, 3, 23, 15, 115, 2, 3, 25, 22, 18, 115, 19, 24, + 17, 121, 15, 22, 31, 22, 2, 22, 22, 19, 0, 20, 65, 19, 68, 9, 8, 2, 121, 15, + 68, 0, 63, 237, 220, 25, 197, 24, 63, 63, 51, 18, 57, 47, 93, 237, 1, 16, 214, 237, + 50, 16, 222, 213, 237, 50, 16, 253, 222, 25, 197, 49, 48, 1, 51, 17, 51, 22, 14, 2, + 7, 39, 62, 3, 55, 35, 17, 35, 17, 35, 17, 51, 17, 51, 1, 104, 82, 39, 1, 16, + 29, 41, 23, 60, 9, 23, 21, 18, 5, 29, 233, 82, 82, 233, 2, 107, 253, 223, 31, 66, + 64, 59, 23, 38, 9, 28, 35, 39, 20, 1, 32, 254, 224, 2, 107, 254, 251, 0, 1, 0, + 71, 255, 108, 1, 227, 1, 208, 0, 21, 0, 71, 64, 36, 4, 5, 10, 127, 1, 19, 11, + 127, 0, 1, 23, 18, 13, 127, 0, 15, 1, 8, 15, 22, 13, 133, 18, 18, 15, 20, 16, + 73, 15, 74, 5, 4, 0, 133, 11, 74, 0, 63, 237, 220, 25, 197, 24, 63, 63, 51, 18, + 57, 47, 237, 1, 16, 214, 94, 93, 237, 50, 16, 222, 213, 237, 50, 16, 253, 222, 25, 197, + 49, 48, 37, 51, 22, 6, 7, 39, 62, 3, 55, 35, 53, 35, 21, 35, 17, 51, 21, 51, + 53, 51, 1, 186, 39, 2, 54, 41, 58, 6, 19, 19, 17, 5, 36, 206, 83, 83, 206, 82, + 69, 63, 116, 38, 35, 6, 24, 31, 35, 17, 205, 205, 1, 208, 189, 189, 0, 1, 0, 54, + 255, 91, 1, 191, 2, 107, 0, 27, 0, 80, 64, 16, 23, 24, 10, 0, 77, 23, 16, 9, + 0, 77, 22, 16, 10, 0, 77, 3, 184, 255, 224, 64, 30, 17, 18, 0, 76, 9, 16, 115, + 11, 15, 115, 12, 11, 29, 0, 115, 25, 28, 5, 124, 20, 20, 12, 9, 26, 65, 15, 121, + 13, 12, 68, 0, 63, 205, 237, 63, 51, 18, 57, 47, 237, 1, 16, 214, 237, 16, 222, 213, + 237, 16, 237, 50, 49, 48, 43, 43, 43, 43, 19, 20, 30, 2, 51, 50, 54, 55, 17, 51, + 17, 35, 21, 35, 53, 51, 53, 6, 6, 35, 34, 46, 2, 53, 53, 51, 137, 11, 28, 48, + 36, 32, 59, 14, 82, 42, 79, 39, 15, 66, 35, 60, 76, 43, 16, 83, 1, 184, 38, 57, + 38, 18, 10, 4, 1, 60, 253, 149, 165, 235, 162, 5, 9, 31, 58, 82, 51, 179, 0, 1, + 0, 54, 255, 127, 1, 173, 1, 208, 0, 27, 0, 69, 64, 41, 24, 24, 11, 0, 77, 24, + 32, 10, 0, 77, 24, 24, 9, 0, 77, 8, 15, 127, 10, 14, 127, 11, 10, 29, 1, 127, + 26, 28, 4, 136, 21, 21, 11, 8, 27, 73, 14, 133, 12, 11, 74, 0, 63, 205, 237, 63, + 51, 18, 57, 47, 237, 1, 16, 214, 237, 16, 222, 213, 237, 16, 237, 50, 49, 48, 43, 43, + 43, 19, 21, 20, 22, 51, 50, 54, 55, 53, 51, 17, 35, 21, 35, 53, 51, 53, 14, 3, + 35, 34, 46, 2, 53, 53, 136, 57, 50, 36, 48, 19, 83, 43, 79, 39, 7, 25, 31, 34, + 16, 40, 66, 47, 26, 1, 208, 136, 53, 42, 7, 5, 219, 254, 48, 129, 199, 109, 2, 5, + 5, 4, 17, 38, 63, 46, 137, 0, 1, 0, 32, 255, 87, 1, 226, 2, 107, 0, 38, 0, + 196, 185, 0, 38, 255, 240, 179, 12, 0, 77, 38, 184, 255, 224, 179, 11, 0, 77, 3, 184, + 255, 248, 180, 16, 19, 0, 76, 3, 184, 255, 240, 179, 15, 0, 77, 3, 184, 255, 240, 179, + 13, 0, 77, 2, 184, 255, 248, 64, 10, 13, 0, 77, 1, 40, 11, 12, 0, 76, 11, 184, + 255, 232, 64, 70, 18, 0, 77, 11, 12, 17, 115, 6, 25, 38, 0, 38, 123, 26, 25, 20, + 26, 26, 25, 24, 1, 0, 1, 123, 23, 24, 20, 23, 23, 24, 0, 26, 23, 23, 18, 115, + 2, 32, 5, 48, 5, 2, 5, 6, 40, 26, 31, 115, 37, 32, 39, 26, 38, 65, 24, 0, + 25, 25, 31, 32, 68, 12, 11, 5, 121, 18, 68, 23, 1, 65, 0, 63, 51, 63, 237, 220, + 25, 197, 24, 63, 51, 51, 47, 51, 51, 63, 51, 1, 16, 214, 50, 237, 50, 16, 214, 213, + 93, 50, 237, 50, 17, 18, 57, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 125, 196, + 1, 24, 16, 253, 222, 25, 197, 43, 49, 48, 43, 43, 43, 43, 43, 43, 43, 19, 19, 51, + 22, 18, 23, 51, 22, 14, 2, 7, 39, 62, 3, 55, 35, 46, 3, 39, 3, 35, 3, 14, + 3, 7, 35, 62, 3, 55, 51, 239, 85, 77, 18, 17, 6, 39, 1, 16, 29, 41, 23, 60, + 9, 23, 21, 18, 5, 24, 1, 2, 3, 3, 2, 79, 71, 81, 1, 3, 3, 3, 1, 80, + 3, 8, 11, 15, 9, 76, 1, 55, 1, 52, 130, 254, 243, 146, 31, 66, 64, 59, 23, 38, + 9, 28, 35, 39, 20, 54, 126, 134, 138, 65, 254, 230, 1, 26, 65, 137, 135, 126, 54, 76, + 160, 158, 154, 71, 0, 1, 0, 27, 255, 108, 1, 227, 1, 208, 0, 44, 0, 173, 64, 35, + 24, 25, 30, 127, 21, 16, 24, 14, 15, 0, 76, 16, 40, 13, 0, 77, 16, 32, 11, 12, + 0, 76, 16, 39, 34, 39, 132, 13, 16, 20, 13, 16, 34, 31, 10, 184, 255, 224, 179, 15, + 0, 77, 10, 184, 255, 216, 180, 13, 14, 0, 76, 10, 184, 255, 224, 179, 12, 0, 77, 10, + 184, 255, 216, 64, 46, 11, 0, 77, 10, 40, 0, 40, 132, 13, 10, 20, 13, 13, 10, 13, + 3, 31, 127, 17, 20, 21, 46, 0, 3, 127, 9, 4, 45, 25, 24, 20, 133, 31, 74, 34, + 16, 73, 0, 10, 73, 39, 13, 40, 40, 4, 74, 0, 63, 51, 47, 51, 51, 63, 51, 63, + 51, 63, 237, 220, 25, 197, 1, 24, 16, 214, 50, 237, 50, 16, 222, 213, 50, 237, 17, 57, + 135, 16, 43, 135, 125, 196, 1, 43, 43, 43, 43, 17, 51, 135, 24, 43, 135, 125, 196, 1, + 43, 43, 43, 24, 16, 253, 222, 25, 197, 49, 48, 19, 6, 6, 7, 35, 62, 3, 55, 51, + 22, 22, 23, 54, 54, 55, 51, 22, 22, 23, 51, 22, 6, 7, 39, 62, 3, 55, 35, 38, + 38, 39, 14, 3, 7, 35, 46, 3, 119, 8, 1, 3, 80, 1, 7, 9, 11, 6, 77, 20, + 48, 29, 32, 46, 21, 77, 11, 15, 5, 39, 2, 54, 41, 58, 6, 19, 19, 17, 5, 32, + 2, 3, 7, 9, 16, 16, 21, 14, 82, 14, 19, 16, 16, 1, 86, 91, 173, 78, 55, 118, + 120, 118, 53, 54, 149, 89, 89, 149, 54, 91, 206, 98, 63, 116, 38, 35, 6, 24, 31, 35, + 17, 78, 179, 85, 37, 54, 53, 59, 42, 42, 59, 53, 54, 255, 255, 0, 89, 0, 0, 1, + 155, 2, 107, 2, 6, 0, 44, 0, 0, 255, 255, 0, 9, 0, 0, 1, 235, 3, 35, 2, + 38, 0, 36, 0, 0, 1, 7, 3, 139, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 26, + 34, 4, 15, 80, 2, 9, 23, 79, 43, 43, 52, 0, 0, 255, 255, 0, 58, 255, 245, 1, + 176, 2, 152, 2, 38, 0, 68, 0, 0, 1, 6, 3, 139, 0, 0, 0, 16, 64, 11, 2, + 4, 52, 60, 28, 19, 80, 2, 15, 49, 79, 43, 43, 52, 255, 255, 0, 9, 0, 0, 1, + 235, 3, 26, 2, 38, 0, 36, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, + 16, 3, 2, 0, 25, 43, 4, 15, 80, 3, 9, 35, 79, 2, 9, 23, 79, 43, 43, 43, + 52, 52, 0, 0, 0, 255, 255, 0, 58, 255, 245, 1, 176, 2, 143, 2, 38, 0, 68, 0, + 0, 1, 6, 0, 131, 0, 0, 0, 23, 64, 16, 3, 2, 5, 51, 69, 28, 19, 80, 3, + 15, 61, 79, 2, 15, 49, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 27, 0, 0, 1, + 226, 2, 107, 2, 6, 0, 161, 0, 0, 255, 255, 0, 31, 255, 245, 1, 222, 1, 219, 2, + 6, 0, 193, 0, 0, 255, 255, 0, 91, 0, 0, 1, 204, 3, 35, 2, 38, 0, 40, 0, + 0, 1, 7, 3, 139, 0, 18, 0, 139, 0, 19, 185, 0, 1, 255, 248, 64, 9, 15, 23, + 0, 10, 80, 1, 1, 12, 79, 43, 43, 52, 0, 0, 0, 255, 255, 0, 40, 255, 245, 1, + 199, 2, 152, 2, 38, 0, 72, 0, 0, 1, 6, 3, 139, 0, 0, 0, 16, 64, 11, 2, + 2, 37, 45, 19, 2, 80, 2, 0, 34, 79, 43, 43, 52, 255, 255, 0, 25, 255, 243, 1, + 216, 2, 121, 2, 6, 1, 232, 0, 0, 255, 255, 0, 45, 255, 245, 1, 204, 1, 219, 2, + 6, 2, 53, 0, 0, 255, 255, 0, 25, 255, 243, 1, 216, 3, 26, 2, 38, 1, 232, 0, + 0, 1, 7, 0, 131, 255, 239, 0, 139, 0, 26, 177, 3, 2, 184, 255, 241, 64, 13, 41, + 59, 25, 17, 80, 3, 12, 51, 79, 2, 12, 39, 79, 43, 43, 43, 52, 52, 255, 255, 0, + 45, 255, 245, 1, 204, 2, 143, 2, 38, 2, 53, 0, 0, 1, 6, 0, 131, 248, 0, 0, + 26, 177, 3, 2, 184, 255, 246, 64, 13, 38, 56, 2, 21, 80, 3, 16, 48, 79, 2, 16, + 36, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 4, 0, 0, 1, 241, 3, 26, 2, + 38, 2, 198, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, + 48, 66, 7, 38, 80, 2, 17, 58, 79, 1, 17, 46, 79, 43, 43, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 7, 0, 0, 1, 235, 2, 143, 2, 38, 2, 230, 0, 0, 1, 6, 0, + 131, 0, 0, 0, 23, 64, 16, 2, 1, 1, 52, 70, 31, 16, 80, 2, 5, 62, 79, 1, + 5, 50, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 38, 255, 244, 1, 209, 3, 26, 2, + 38, 2, 199, 0, 0, 1, 7, 0, 131, 255, 248, 0, 139, 0, 26, 177, 2, 1, 184, 255, + 247, 64, 13, 55, 73, 39, 28, 80, 2, 15, 65, 79, 1, 15, 53, 79, 43, 43, 43, 52, + 52, 255, 255, 0, 72, 255, 245, 1, 191, 2, 143, 2, 38, 2, 231, 0, 0, 1, 6, 0, + 131, 248, 0, 0, 26, 177, 2, 1, 184, 255, 239, 64, 13, 47, 65, 22, 15, 80, 2, 2, + 57, 79, 1, 2, 45, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 24, 255, 243, 1, + 207, 2, 107, 2, 6, 2, 15, 0, 0, 255, 255, 0, 44, 255, 91, 1, 175, 1, 208, 2, + 6, 2, 163, 0, 0, 255, 255, 0, 55, 0, 0, 1, 189, 3, 6, 2, 38, 2, 200, 0, + 0, 1, 7, 0, 138, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 18, 19, 0, 9, 80, + 1, 1, 20, 79, 43, 43, 52, 0, 0, 255, 255, 0, 63, 0, 0, 1, 182, 2, 123, 2, + 38, 2, 232, 0, 0, 1, 6, 0, 138, 0, 0, 0, 16, 64, 11, 1, 0, 18, 19, 9, + 0, 80, 1, 0, 20, 79, 43, 43, 52, 255, 255, 0, 55, 0, 0, 1, 189, 3, 26, 2, + 38, 2, 200, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, + 20, 38, 0, 9, 80, 2, 1, 30, 79, 1, 1, 18, 79, 43, 43, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 63, 0, 0, 1, 182, 2, 143, 2, 38, 2, 232, 0, 0, 1, 6, 0, + 131, 0, 0, 0, 23, 64, 16, 2, 1, 0, 20, 38, 9, 0, 80, 2, 0, 30, 79, 1, + 0, 18, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 29, 255, 243, 1, 216, 3, 26, 2, + 38, 0, 50, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 3, 2, 0, + 34, 52, 0, 9, 80, 3, 4, 44, 79, 2, 4, 32, 79, 43, 43, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 143, 2, 38, 0, 82, 0, 0, 1, 6, 0, + 131, 0, 0, 0, 23, 64, 16, 3, 2, 0, 34, 52, 9, 0, 80, 3, 14, 44, 79, 2, + 14, 32, 79, 43, 43, 43, 52, 52, 0, 0, 3, 0, 29, 255, 243, 1, 216, 2, 121, 0, + 19, 0, 26, 0, 33, 0, 136, 181, 33, 16, 14, 0, 77, 28, 184, 255, 240, 179, 14, 0, + 77, 26, 184, 255, 240, 179, 14, 0, 77, 26, 184, 255, 232, 64, 20, 13, 0, 77, 21, 16, + 14, 0, 77, 21, 24, 13, 0, 77, 17, 16, 15, 16, 0, 76, 13, 184, 255, 240, 180, 15, + 16, 0, 76, 7, 184, 255, 232, 64, 42, 15, 16, 0, 76, 3, 16, 16, 0, 77, 3, 24, + 15, 0, 77, 31, 23, 118, 10, 35, 30, 24, 118, 0, 64, 11, 16, 72, 0, 34, 24, 121, + 30, 30, 5, 20, 124, 15, 70, 27, 124, 5, 69, 0, 63, 237, 63, 237, 17, 57, 47, 237, + 1, 16, 214, 43, 237, 50, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 19, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 23, + 50, 54, 55, 33, 22, 22, 19, 34, 6, 7, 33, 38, 38, 29, 32, 59, 81, 50, 49, 81, + 59, 32, 32, 59, 81, 49, 50, 81, 59, 32, 220, 66, 68, 5, 254, 237, 5, 66, 65, 64, + 67, 5, 1, 19, 6, 68, 1, 54, 83, 122, 79, 39, 39, 79, 122, 83, 83, 122, 80, 38, + 38, 80, 122, 169, 114, 107, 107, 114, 1, 248, 111, 105, 105, 111, 0, 3, 0, 40, 255, 245, + 1, 204, 1, 219, 0, 19, 0, 26, 0, 33, 0, 115, 64, 12, 33, 32, 15, 16, 0, 76, + 33, 16, 14, 0, 77, 28, 184, 255, 216, 179, 16, 0, 77, 28, 184, 255, 224, 179, 15, 0, + 77, 28, 184, 255, 240, 179, 14, 0, 77, 26, 184, 255, 232, 64, 43, 15, 16, 0, 76, 21, + 24, 15, 16, 0, 76, 31, 23, 130, 0, 35, 30, 24, 130, 10, 64, 9, 12, 72, 10, 34, + 24, 134, 63, 30, 79, 30, 2, 30, 30, 20, 27, 136, 15, 80, 20, 136, 5, 81, 0, 63, + 237, 63, 237, 18, 57, 47, 93, 237, 1, 16, 214, 43, 237, 50, 16, 222, 237, 50, 49, 48, + 43, 43, 43, 43, 43, 43, 43, 37, 20, 14, 2, 35, 34, 46, 2, 53, 52, 62, 2, 51, + 50, 30, 2, 7, 50, 54, 55, 35, 22, 22, 19, 34, 6, 7, 51, 38, 38, 1, 204, 31, + 56, 78, 46, 45, 77, 56, 31, 31, 56, 77, 45, 46, 78, 56, 31, 211, 54, 68, 6, 254, + 8, 65, 53, 50, 67, 8, 252, 8, 68, 232, 55, 89, 64, 35, 35, 64, 89, 55, 55, 90, + 63, 35, 35, 63, 90, 224, 74, 71, 72, 73, 1, 83, 68, 66, 66, 68, 255, 255, 0, 29, + 255, 243, 1, 216, 3, 26, 2, 38, 3, 117, 0, 0, 1, 7, 0, 131, 0, 0, 0, 139, + 0, 23, 64, 16, 4, 3, 0, 36, 54, 0, 9, 80, 4, 4, 46, 79, 3, 4, 34, 79, + 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 143, 2, 38, + 3, 118, 0, 0, 1, 6, 0, 131, 0, 0, 0, 23, 64, 16, 4, 3, 0, 36, 54, 9, + 0, 80, 4, 14, 46, 79, 3, 14, 34, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 46, + 255, 243, 1, 213, 3, 26, 2, 38, 2, 221, 0, 0, 1, 7, 0, 131, 255, 239, 0, 139, + 0, 26, 177, 2, 1, 184, 255, 232, 64, 13, 41, 59, 15, 4, 80, 2, 0, 51, 79, 1, + 0, 39, 79, 43, 43, 43, 52, 52, 255, 255, 0, 59, 255, 245, 1, 204, 2, 143, 2, 38, + 2, 253, 0, 0, 1, 6, 0, 131, 239, 0, 0, 26, 177, 2, 1, 184, 255, 230, 64, 13, + 39, 57, 8, 0, 80, 2, 31, 49, 79, 1, 31, 37, 79, 43, 43, 43, 52, 52, 0, 0, + 255, 255, 0, 9, 255, 248, 1, 238, 3, 6, 2, 38, 2, 211, 0, 0, 1, 7, 0, 138, + 0, 9, 0, 139, 0, 16, 64, 11, 1, 7, 38, 39, 11, 21, 80, 1, 11, 40, 79, 43, + 43, 52, 0, 0, 255, 255, 0, 36, 255, 88, 1, 205, 2, 123, 2, 38, 0, 92, 0, 0, + 1, 6, 0, 138, 18, 0, 0, 16, 64, 11, 1, 19, 33, 34, 32, 21, 80, 1, 9, 35, + 79, 43, 43, 52, 255, 255, 0, 9, 255, 248, 1, 238, 3, 26, 2, 38, 2, 211, 0, 0, + 1, 7, 0, 131, 0, 9, 0, 139, 0, 23, 64, 16, 2, 1, 7, 40, 58, 11, 21, 80, + 2, 11, 50, 79, 1, 11, 38, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 36, + 255, 88, 1, 205, 2, 143, 2, 38, 0, 92, 0, 0, 1, 6, 0, 131, 18, 0, 0, 23, + 64, 16, 2, 1, 19, 35, 53, 32, 21, 80, 2, 9, 45, 79, 1, 9, 33, 79, 43, 43, + 43, 52, 52, 0, 255, 255, 0, 9, 255, 248, 1, 238, 3, 62, 2, 38, 2, 211, 0, 0, + 1, 7, 1, 101, 0, 36, 0, 137, 0, 23, 64, 16, 2, 1, 34, 40, 42, 11, 21, 80, + 2, 11, 43, 79, 1, 11, 39, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 36, + 255, 88, 1, 205, 2, 181, 2, 38, 0, 92, 0, 0, 1, 6, 1, 101, 45, 0, 0, 23, + 64, 16, 2, 1, 46, 35, 37, 32, 21, 80, 2, 9, 38, 79, 1, 9, 34, 79, 43, 43, + 43, 52, 52, 0, 255, 255, 0, 54, 0, 0, 1, 191, 3, 26, 2, 38, 2, 215, 0, 0, + 1, 7, 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, 26, 44, 20, 10, 80, + 2, 9, 36, 79, 1, 9, 24, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 54, + 0, 0, 1, 173, 2, 143, 2, 38, 2, 247, 0, 0, 1, 6, 0, 131, 0, 0, 0, 23, + 64, 16, 2, 1, 8, 26, 44, 21, 9, 80, 2, 0, 36, 79, 1, 0, 24, 79, 43, 43, + 43, 52, 52, 0, 0, 1, 0, 54, 255, 91, 1, 204, 2, 107, 0, 11, 0, 40, 64, 20, + 3, 13, 9, 115, 6, 5, 115, 0, 11, 12, 5, 0, 121, 8, 10, 68, 4, 121, 1, 65, + 0, 63, 237, 63, 206, 237, 50, 1, 16, 214, 221, 253, 221, 237, 16, 206, 49, 48, 55, 17, + 33, 21, 35, 17, 51, 21, 35, 53, 35, 53, 143, 1, 61, 235, 134, 79, 226, 70, 2, 37, + 70, 254, 33, 235, 165, 70, 0, 1, 0, 107, 255, 127, 1, 184, 1, 208, 0, 9, 0, 36, + 64, 18, 4, 11, 7, 127, 0, 6, 127, 1, 10, 5, 133, 2, 73, 9, 6, 133, 1, 74, + 0, 63, 237, 206, 63, 237, 1, 16, 214, 237, 221, 237, 16, 206, 49, 48, 51, 35, 17, 33, + 21, 35, 17, 51, 21, 35, 163, 56, 1, 77, 251, 53, 79, 1, 208, 69, 254, 187, 199, 255, + 255, 0, 36, 255, 250, 1, 208, 3, 26, 2, 38, 2, 219, 0, 0, 1, 7, 0, 131, 0, + 0, 0, 139, 0, 23, 64, 16, 4, 3, 0, 36, 54, 6, 31, 80, 4, 7, 46, 79, 3, + 7, 34, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 0, 45, 255, 246, 1, 199, 2, + 143, 2, 38, 2, 251, 0, 0, 1, 6, 0, 131, 0, 0, 0, 23, 64, 16, 4, 3, 0, + 36, 54, 13, 30, 80, 4, 13, 46, 79, 3, 13, 34, 79, 43, 43, 43, 52, 52, 0, 0, + 4, 0, 36, 0, 0, 1, 226, 2, 120, 0, 11, 0, 23, 0, 27, 0, 39, 0, 157, 185, + 0, 10, 255, 240, 180, 14, 15, 0, 76, 10, 184, 255, 232, 64, 24, 13, 0, 77, 8, 16, + 15, 0, 77, 8, 16, 13, 0, 77, 4, 16, 15, 0, 77, 4, 24, 13, 0, 77, 2, 184, + 255, 240, 179, 15, 0, 77, 2, 184, 255, 232, 64, 53, 13, 14, 0, 76, 24, 24, 6, 12, + 18, 0, 25, 25, 0, 41, 38, 32, 33, 32, 126, 39, 38, 20, 39, 39, 38, 39, 29, 33, + 36, 79, 35, 1, 35, 29, 30, 40, 33, 38, 68, 35, 65, 39, 32, 65, 15, 3, 24, 27, + 30, 68, 21, 9, 69, 0, 63, 205, 63, 220, 221, 222, 205, 63, 51, 63, 63, 51, 1, 16, + 214, 221, 220, 93, 205, 51, 17, 51, 135, 16, 43, 135, 125, 196, 1, 24, 16, 198, 50, 47, + 16, 221, 222, 205, 50, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 1, 20, 6, 35, + 34, 38, 53, 52, 54, 51, 50, 22, 7, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, + 3, 51, 21, 35, 39, 21, 35, 17, 51, 19, 39, 53, 51, 17, 35, 3, 1, 226, 37, 43, + 43, 38, 38, 43, 43, 37, 107, 15, 12, 11, 16, 16, 11, 12, 15, 54, 161, 161, 223, 62, + 66, 119, 9, 62, 66, 119, 1, 207, 78, 92, 92, 78, 78, 91, 91, 79, 56, 56, 56, 56, + 56, 55, 55, 254, 197, 69, 117, 251, 2, 107, 254, 76, 183, 253, 253, 149, 1, 180, 0, 1, + 0, 0, 0, 236, 1, 244, 1, 50, 0, 3, 0, 13, 179, 3, 2, 0, 3, 0, 47, 205, + 1, 47, 47, 49, 48, 17, 33, 21, 33, 1, 244, 254, 12, 1, 50, 70, 0, 1, 0, 31, + 255, 243, 1, 212, 2, 120, 0, 60, 0, 232, 64, 17, 48, 24, 13, 0, 77, 48, 16, 12, + 0, 77, 48, 24, 10, 11, 0, 76, 43, 184, 255, 232, 180, 17, 18, 0, 76, 43, 184, 255, + 224, 179, 16, 0, 77, 37, 184, 255, 240, 179, 18, 0, 77, 37, 184, 255, 232, 179, 17, 0, + 77, 19, 184, 255, 240, 179, 18, 0, 77, 19, 184, 255, 232, 179, 17, 0, 77, 19, 184, 255, + 248, 179, 12, 0, 77, 19, 184, 255, 240, 64, 84, 9, 11, 0, 76, 31, 24, 24, 33, 30, + 26, 23, 4, 21, 35, 53, 56, 60, 2, 4, 50, 4, 118, 21, 42, 42, 21, 62, 0, 54, + 54, 35, 118, 50, 13, 13, 0, 50, 16, 50, 32, 50, 3, 8, 50, 61, 26, 60, 121, 2, + 23, 2, 33, 53, 121, 56, 30, 56, 175, 2, 191, 2, 2, 15, 56, 31, 56, 2, 2, 56, + 2, 56, 16, 41, 41, 38, 124, 45, 70, 12, 12, 9, 124, 16, 69, 0, 63, 237, 50, 47, + 63, 237, 50, 47, 17, 57, 57, 47, 47, 93, 93, 17, 51, 16, 237, 50, 17, 51, 16, 237, + 50, 1, 16, 198, 94, 93, 50, 47, 16, 237, 51, 47, 51, 16, 204, 50, 47, 16, 237, 17, + 23, 57, 17, 18, 23, 57, 50, 47, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 19, 53, 33, 54, 53, 52, 46, 2, 35, 34, 6, 7, 39, 54, 54, 51, 50, 30, + 2, 21, 20, 7, 51, 21, 35, 6, 6, 7, 7, 51, 21, 33, 6, 21, 20, 22, 51, 50, + 54, 55, 23, 6, 6, 35, 34, 46, 2, 53, 52, 54, 55, 35, 53, 51, 54, 54, 55, 55, + 31, 1, 49, 12, 19, 30, 38, 20, 46, 61, 21, 17, 38, 70, 37, 52, 73, 44, 20, 9, + 47, 81, 21, 57, 35, 39, 233, 254, 210, 14, 56, 64, 52, 67, 30, 24, 42, 89, 43, 59, + 77, 46, 19, 4, 5, 48, 83, 21, 64, 40, 33, 1, 102, 60, 22, 28, 23, 35, 23, 12, + 17, 8, 72, 11, 13, 29, 47, 59, 30, 28, 21, 60, 19, 36, 21, 22, 60, 21, 31, 42, + 48, 19, 14, 66, 22, 16, 26, 43, 56, 30, 17, 29, 12, 60, 20, 36, 23, 19, 0, 1, + 0, 33, 0, 0, 1, 210, 2, 107, 0, 23, 0, 151, 64, 78, 7, 16, 15, 8, 15, 20, + 3, 4, 19, 19, 19, 15, 22, 13, 10, 13, 14, 9, 14, 6, 17, 18, 5, 5, 5, 9, + 1, 7, 6, 3, 10, 115, 20, 17, 16, 13, 13, 25, 24, 18, 14, 8, 4, 2, 21, 121, + 23, 5, 4, 9, 8, 19, 18, 15, 14, 16, 8, 32, 8, 2, 0, 14, 1, 8, 4, 8, + 18, 14, 14, 18, 8, 4, 4, 12, 23, 65, 12, 68, 0, 63, 63, 18, 23, 57, 47, 47, + 47, 47, 94, 93, 93, 17, 51, 17, 51, 17, 51, 17, 51, 16, 237, 50, 1, 47, 47, 47, + 47, 17, 18, 57, 47, 51, 51, 51, 253, 50, 50, 50, 204, 205, 50, 47, 125, 135, 4, 196, + 196, 16, 135, 196, 196, 1, 24, 16, 204, 205, 50, 47, 125, 135, 4, 196, 196, 16, 135, 196, + 196, 49, 48, 1, 21, 35, 21, 55, 23, 7, 21, 55, 23, 7, 21, 35, 53, 7, 39, 55, + 53, 7, 39, 55, 53, 35, 53, 1, 210, 176, 104, 27, 131, 104, 27, 131, 81, 104, 26, 130, + 104, 26, 130, 176, 2, 107, 72, 136, 49, 56, 62, 103, 49, 56, 61, 171, 137, 49, 57, 60, + 103, 48, 56, 61, 170, 72, 0, 1, 0, 116, 2, 27, 1, 127, 2, 152, 0, 13, 0, 21, + 183, 11, 10, 3, 4, 10, 4, 7, 0, 0, 47, 221, 206, 50, 1, 47, 205, 222, 205, 49, + 48, 19, 34, 38, 39, 55, 22, 22, 51, 50, 54, 55, 23, 6, 6, 250, 56, 70, 8, 63, + 8, 34, 29, 29, 34, 8, 62, 8, 69, 2, 27, 57, 51, 17, 29, 35, 35, 29, 17, 51, + 57, 255, 255, 0, 9, 0, 0, 1, 235, 2, 107, 2, 6, 0, 36, 0, 0, 0, 3, 0, + 54, 255, 251, 1, 194, 2, 113, 0, 26, 0, 41, 0, 56, 0, 122, 64, 81, 123, 50, 1, + 106, 50, 1, 121, 46, 1, 106, 46, 1, 106, 38, 122, 38, 2, 107, 34, 123, 34, 2, 133, + 25, 149, 25, 2, 149, 23, 1, 129, 22, 1, 148, 19, 1, 133, 19, 1, 144, 14, 1, 20, + 14, 132, 14, 2, 5, 14, 1, 21, 48, 118, 16, 16, 36, 118, 24, 58, 42, 27, 115, 16, + 5, 1, 5, 57, 21, 27, 121, 42, 42, 31, 53, 124, 11, 65, 31, 124, 0, 67, 0, 63, + 237, 63, 237, 18, 57, 47, 237, 57, 1, 16, 214, 93, 237, 50, 16, 222, 237, 51, 47, 237, + 50, 49, 48, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 23, 34, 46, + 2, 39, 17, 62, 3, 51, 50, 30, 2, 21, 20, 14, 2, 7, 22, 22, 21, 20, 6, 3, + 21, 22, 22, 51, 50, 62, 2, 53, 52, 46, 2, 35, 39, 51, 50, 62, 2, 53, 52, 46, + 2, 35, 34, 6, 7, 204, 15, 40, 40, 40, 15, 15, 39, 41, 39, 16, 46, 80, 59, 33, + 14, 24, 30, 16, 48, 64, 117, 197, 2, 41, 31, 31, 57, 44, 26, 20, 36, 49, 30, 97, + 78, 25, 46, 35, 20, 22, 36, 47, 26, 26, 39, 8, 5, 2, 3, 6, 4, 2, 88, 4, + 6, 3, 2, 16, 38, 62, 46, 22, 40, 34, 28, 9, 17, 72, 60, 92, 94, 1, 38, 221, + 1, 3, 10, 27, 44, 35, 31, 42, 25, 11, 68, 10, 22, 38, 29, 27, 38, 24, 10, 1, + 2, 255, 255, 0, 54, 0, 0, 1, 204, 2, 107, 2, 6, 2, 195, 0, 0, 0, 2, 0, + 9, 0, 0, 1, 235, 2, 107, 0, 11, 0, 22, 0, 76, 64, 41, 6, 18, 12, 18, 120, + 11, 6, 20, 11, 11, 6, 5, 17, 12, 17, 120, 0, 5, 20, 0, 0, 5, 12, 12, 0, + 11, 24, 0, 23, 11, 68, 6, 65, 12, 5, 65, 18, 17, 121, 0, 68, 0, 63, 237, 50, + 63, 51, 63, 63, 1, 16, 198, 16, 206, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, + 135, 24, 16, 43, 135, 125, 196, 49, 48, 51, 62, 3, 55, 51, 30, 3, 23, 3, 14, 3, + 7, 33, 46, 3, 9, 23, 45, 46, 51, 30, 95, 27, 54, 51, 44, 16, 238, 9, 33, 39, + 43, 20, 1, 23, 20, 41, 36, 30, 89, 157, 149, 146, 78, 70, 163, 165, 157, 64, 2, 35, + 25, 91, 124, 152, 85, 85, 152, 124, 92, 255, 255, 0, 91, 0, 0, 1, 204, 2, 107, 2, + 6, 0, 40, 0, 0, 0, 1, 0, 54, 0, 0, 1, 199, 2, 107, 0, 17, 0, 55, 64, + 29, 5, 14, 9, 14, 120, 0, 5, 20, 0, 0, 5, 6, 6, 0, 19, 15, 15, 9, 18, + 0, 14, 121, 16, 65, 9, 5, 121, 8, 68, 0, 63, 237, 50, 63, 237, 50, 1, 16, 198, + 50, 47, 16, 206, 50, 47, 135, 16, 43, 135, 125, 196, 49, 48, 1, 14, 3, 7, 33, 21, + 33, 53, 62, 3, 55, 33, 53, 33, 1, 191, 32, 79, 82, 77, 29, 1, 51, 254, 111, 33, + 75, 78, 77, 35, 254, 229, 1, 122, 2, 40, 44, 120, 131, 132, 55, 70, 67, 61, 127, 125, + 118, 51, 70, 255, 255, 0, 45, 0, 0, 1, 199, 2, 107, 2, 6, 0, 43, 0, 0, 0, + 3, 0, 29, 255, 243, 1, 216, 2, 121, 0, 3, 0, 23, 0, 35, 0, 208, 185, 0, 34, + 255, 240, 64, 21, 13, 14, 0, 76, 32, 16, 13, 14, 0, 76, 28, 24, 14, 0, 77, 28, + 16, 13, 0, 77, 26, 184, 255, 240, 179, 14, 0, 77, 26, 184, 255, 224, 64, 19, 13, 0, + 77, 21, 32, 16, 0, 77, 21, 16, 15, 0, 77, 21, 24, 8, 0, 77, 17, 184, 255, 232, + 179, 16, 0, 77, 17, 184, 255, 240, 179, 15, 0, 77, 17, 184, 255, 240, 179, 8, 0, 77, + 11, 184, 255, 240, 179, 16, 0, 77, 11, 184, 255, 232, 179, 15, 0, 77, 11, 184, 255, 240, + 64, 59, 8, 0, 77, 7, 8, 16, 0, 77, 7, 24, 15, 0, 77, 7, 16, 8, 0, 77, + 79, 1, 95, 1, 2, 64, 0, 80, 0, 2, 1, 0, 1, 0, 24, 30, 118, 14, 37, 24, + 118, 4, 64, 11, 16, 72, 4, 36, 3, 121, 0, 0, 9, 27, 124, 19, 70, 33, 124, 9, + 69, 0, 63, 237, 63, 237, 17, 57, 47, 237, 1, 16, 214, 43, 237, 16, 222, 237, 17, 57, + 57, 47, 47, 93, 93, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 19, 51, 21, 35, 39, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, + 2, 35, 34, 46, 2, 55, 20, 22, 51, 50, 54, 53, 52, 38, 35, 34, 6, 175, 152, 152, + 146, 32, 58, 81, 50, 49, 82, 58, 33, 33, 58, 82, 49, 50, 81, 58, 32, 84, 66, 69, + 70, 70, 70, 70, 69, 66, 1, 91, 71, 34, 83, 122, 79, 39, 39, 79, 122, 83, 83, 122, + 80, 38, 38, 80, 122, 83, 122, 130, 130, 122, 122, 130, 130, 255, 255, 0, 89, 0, 0, 1, + 155, 2, 107, 2, 6, 0, 44, 0, 0, 0, 1, 0, 64, 0, 0, 1, 208, 2, 107, 0, + 26, 0, 99, 64, 56, 5, 5, 10, 26, 21, 26, 120, 0, 5, 20, 0, 0, 5, 11, 5, + 10, 5, 120, 16, 11, 20, 16, 16, 11, 0, 0, 10, 28, 21, 16, 115, 0, 18, 16, 18, + 32, 18, 3, 8, 18, 27, 21, 16, 5, 5, 18, 19, 65, 18, 68, 11, 10, 68, 26, 0, + 65, 0, 63, 50, 63, 51, 63, 63, 18, 57, 25, 47, 51, 51, 1, 24, 16, 214, 94, 93, + 237, 50, 16, 206, 50, 47, 135, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 8, 125, 196, + 49, 48, 1, 14, 3, 7, 30, 3, 23, 35, 46, 3, 39, 17, 35, 17, 51, 17, 62, 3, + 55, 1, 187, 30, 52, 50, 52, 31, 30, 66, 63, 56, 21, 93, 22, 52, 58, 62, 31, 82, + 82, 28, 57, 52, 46, 19, 2, 107, 50, 77, 68, 62, 34, 27, 71, 85, 95, 50, 46, 88, + 78, 63, 23, 254, 214, 2, 107, 254, 236, 32, 70, 71, 70, 33, 0, 1, 0, 9, 0, 0, + 1, 235, 2, 107, 0, 22, 0, 74, 64, 39, 16, 10, 5, 10, 120, 11, 16, 20, 11, 11, + 16, 17, 0, 5, 0, 120, 22, 17, 20, 22, 22, 17, 5, 5, 11, 22, 24, 11, 23, 0, + 22, 68, 17, 5, 16, 65, 10, 11, 68, 0, 63, 51, 63, 51, 51, 63, 51, 1, 16, 198, + 16, 206, 17, 57, 61, 47, 135, 24, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 125, 196, + 49, 48, 33, 46, 3, 39, 14, 3, 7, 35, 62, 3, 55, 51, 30, 3, 23, 1, 146, 20, + 47, 43, 35, 8, 9, 36, 44, 47, 20, 84, 23, 44, 45, 50, 30, 102, 26, 54, 49, 43, + 16, 101, 178, 143, 101, 24, 25, 103, 144, 177, 98, 89, 157, 149, 146, 78, 70, 163, 165, 157, + 64, 0, 1, 0, 34, 0, 0, 1, 211, 2, 107, 0, 26, 0, 153, 64, 35, 1, 40, 15, + 0, 77, 1, 32, 13, 14, 0, 76, 1, 24, 12, 0, 77, 1, 32, 11, 0, 77, 1, 14, + 13, 14, 123, 0, 1, 20, 0, 0, 1, 13, 8, 26, 184, 255, 216, 179, 15, 0, 77, 26, + 184, 255, 232, 180, 12, 14, 0, 76, 26, 184, 255, 224, 64, 43, 11, 0, 77, 15, 26, 0, + 26, 126, 16, 15, 20, 16, 16, 15, 0, 21, 8, 115, 2, 7, 28, 16, 21, 115, 25, 22, + 27, 16, 26, 65, 14, 0, 15, 15, 21, 22, 68, 8, 7, 68, 13, 1, 65, 0, 63, 51, + 63, 51, 63, 51, 51, 47, 51, 51, 63, 51, 1, 16, 214, 50, 237, 50, 16, 222, 50, 237, + 17, 57, 135, 16, 43, 135, 125, 196, 1, 43, 43, 43, 17, 51, 135, 24, 16, 43, 135, 125, + 196, 1, 43, 43, 43, 43, 49, 48, 19, 19, 51, 30, 3, 23, 35, 46, 3, 39, 3, 35, + 3, 20, 14, 2, 7, 35, 54, 18, 55, 51, 250, 91, 91, 6, 10, 8, 8, 3, 79, 2, + 2, 3, 3, 2, 85, 82, 87, 2, 3, 3, 1, 79, 6, 14, 14, 91, 1, 55, 1, 52, + 59, 146, 161, 170, 83, 54, 130, 138, 141, 65, 254, 219, 1, 37, 65, 141, 138, 130, 54, 161, + 1, 47, 155, 0, 1, 0, 55, 0, 0, 1, 190, 2, 107, 0, 17, 0, 78, 64, 48, 26, + 0, 1, 13, 0, 1, 38, 9, 1, 4, 9, 20, 9, 2, 9, 0, 5, 0, 126, 14, 9, + 20, 14, 9, 14, 115, 17, 19, 5, 115, 16, 7, 1, 1, 7, 1, 7, 18, 15, 65, 5, + 9, 65, 7, 68, 14, 0, 68, 0, 63, 50, 63, 63, 51, 63, 1, 16, 214, 93, 93, 237, + 16, 222, 253, 135, 43, 135, 125, 196, 1, 93, 93, 93, 93, 49, 48, 33, 46, 3, 39, 17, + 35, 17, 51, 30, 3, 23, 17, 51, 17, 1, 107, 17, 49, 60, 70, 37, 75, 83, 31, 70, + 64, 53, 15, 75, 42, 109, 127, 142, 74, 254, 18, 2, 107, 54, 131, 132, 121, 43, 1, 225, + 253, 149, 0, 3, 0, 37, 0, 0, 1, 207, 2, 107, 0, 3, 0, 7, 0, 11, 0, 51, + 64, 25, 10, 10, 0, 0, 5, 13, 11, 11, 1, 1, 4, 12, 11, 121, 8, 8, 2, 4, + 121, 7, 68, 1, 121, 2, 65, 0, 63, 237, 63, 237, 17, 57, 47, 237, 1, 16, 198, 50, + 47, 50, 47, 16, 206, 50, 47, 50, 47, 49, 48, 1, 33, 53, 33, 1, 33, 21, 33, 19, + 33, 21, 33, 1, 199, 254, 103, 1, 153, 254, 94, 1, 170, 254, 86, 48, 1, 74, 254, 182, + 2, 36, 71, 253, 220, 71, 1, 105, 73, 255, 255, 0, 29, 255, 243, 1, 216, 2, 121, 2, + 6, 0, 50, 0, 0, 255, 255, 0, 45, 0, 0, 1, 199, 2, 107, 2, 6, 2, 207, 0, + 0, 0, 2, 0, 73, 0, 0, 1, 199, 2, 113, 0, 14, 0, 29, 0, 135, 64, 21, 27, + 24, 16, 0, 77, 27, 16, 15, 0, 77, 23, 24, 15, 0, 77, 22, 40, 16, 0, 77, 4, + 184, 255, 232, 179, 10, 0, 77, 4, 184, 255, 240, 179, 9, 0, 77, 4, 184, 255, 224, 179, + 8, 0, 77, 2, 184, 255, 232, 179, 18, 0, 77, 2, 184, 255, 240, 179, 17, 0, 77, 2, + 184, 255, 240, 180, 9, 10, 0, 76, 2, 184, 255, 224, 64, 27, 8, 0, 77, 25, 118, 3, + 31, 19, 7, 115, 0, 9, 1, 8, 9, 30, 7, 121, 19, 19, 0, 9, 68, 15, 124, 0, + 65, 0, 63, 237, 63, 18, 57, 47, 237, 1, 16, 214, 94, 93, 237, 50, 16, 222, 237, 49, + 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 19, 50, 22, 21, 20, 6, 35, 35, + 21, 35, 17, 62, 3, 23, 34, 6, 7, 21, 51, 50, 62, 2, 53, 52, 46, 2, 235, 106, + 114, 122, 106, 72, 82, 18, 43, 43, 41, 23, 26, 48, 12, 68, 33, 54, 39, 22, 22, 36, + 47, 2, 113, 99, 98, 107, 91, 230, 2, 97, 4, 7, 3, 2, 71, 2, 2, 250, 12, 30, + 49, 38, 36, 49, 28, 12, 0, 1, 0, 40, 0, 0, 1, 191, 2, 107, 0, 21, 0, 89, + 64, 47, 10, 10, 7, 17, 0, 17, 120, 13, 10, 20, 13, 13, 10, 16, 16, 4, 23, 3, + 10, 7, 10, 120, 0, 3, 20, 0, 0, 3, 13, 13, 7, 22, 10, 10, 0, 0, 3, 13, + 17, 121, 14, 65, 7, 3, 121, 6, 68, 0, 63, 237, 50, 63, 237, 50, 17, 57, 25, 47, + 51, 1, 24, 47, 16, 198, 50, 47, 135, 16, 43, 135, 125, 196, 1, 24, 16, 206, 50, 47, + 135, 16, 43, 135, 8, 125, 196, 49, 48, 1, 6, 6, 7, 33, 21, 33, 53, 54, 54, 55, + 38, 38, 39, 53, 33, 21, 33, 30, 3, 1, 69, 49, 106, 42, 1, 63, 254, 105, 34, 106, + 54, 52, 99, 30, 1, 137, 254, 220, 13, 38, 46, 50, 1, 66, 64, 128, 60, 70, 65, 55, + 132, 69, 69, 129, 45, 55, 70, 19, 52, 60, 65, 0, 1, 0, 36, 0, 0, 1, 208, 2, + 107, 0, 7, 0, 32, 64, 15, 1, 3, 115, 6, 4, 4, 9, 8, 2, 5, 121, 7, 65, + 4, 68, 0, 63, 63, 237, 50, 1, 17, 18, 57, 47, 206, 253, 206, 49, 48, 1, 21, 35, + 17, 35, 17, 35, 53, 1, 208, 173, 82, 173, 2, 107, 70, 253, 219, 2, 37, 70, 255, 255, + 0, 13, 0, 0, 1, 232, 2, 107, 2, 6, 0, 60, 0, 0, 255, 255, 0, 42, 0, 0, + 1, 212, 2, 147, 2, 6, 2, 212, 0, 0, 0, 1, 0, 22, 0, 0, 1, 216, 2, 107, + 0, 21, 0, 85, 64, 45, 15, 12, 9, 8, 16, 9, 16, 120, 17, 8, 20, 17, 8, 17, + 17, 21, 0, 14, 21, 14, 120, 13, 0, 20, 13, 13, 0, 21, 23, 13, 13, 9, 22, 17, + 16, 65, 14, 13, 65, 9, 8, 68, 21, 0, 68, 0, 63, 50, 63, 51, 63, 51, 63, 51, + 1, 16, 198, 50, 47, 16, 206, 135, 16, 43, 135, 125, 196, 1, 17, 51, 24, 47, 135, 43, + 135, 125, 196, 16, 14, 196, 196, 49, 48, 33, 46, 3, 39, 6, 6, 7, 35, 54, 54, 55, + 3, 51, 23, 55, 51, 3, 22, 22, 23, 1, 125, 11, 30, 34, 39, 21, 35, 69, 30, 90, + 33, 89, 50, 162, 91, 122, 129, 89, 164, 48, 90, 35, 27, 68, 72, 72, 31, 56, 145, 69, + 74, 173, 79, 1, 37, 237, 237, 254, 223, 78, 168, 84, 0, 1, 0, 43, 0, 0, 1, 201, + 2, 107, 0, 27, 0, 118, 185, 0, 25, 255, 232, 180, 19, 20, 0, 76, 25, 184, 255, 224, + 179, 18, 0, 77, 25, 184, 255, 232, 179, 17, 0, 77, 12, 184, 255, 240, 179, 16, 0, 77, + 12, 184, 255, 232, 64, 44, 15, 0, 77, 4, 16, 19, 20, 0, 76, 4, 32, 17, 18, 0, + 76, 27, 15, 115, 2, 14, 14, 7, 19, 115, 22, 29, 10, 115, 7, 28, 27, 2, 121, 16, + 13, 14, 13, 14, 1, 20, 8, 65, 1, 68, 0, 63, 63, 51, 18, 57, 57, 47, 47, 51, + 237, 50, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 51, 237, 50, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 33, 35, 53, 34, 46, 2, 53, 53, 51, 21, 20, 22, 51, 53, 51, 21, + 50, 54, 53, 53, 51, 21, 20, 14, 2, 35, 1, 31, 74, 47, 65, 40, 18, 82, 39, 49, + 74, 49, 39, 82, 18, 40, 65, 47, 158, 36, 66, 93, 57, 209, 206, 101, 84, 247, 247, 84, + 101, 206, 209, 57, 93, 66, 36, 0, 1, 0, 18, 0, 0, 1, 226, 2, 121, 0, 43, 0, + 152, 185, 0, 33, 255, 232, 64, 9, 13, 0, 77, 29, 24, 13, 0, 77, 17, 184, 255, 232, + 180, 15, 16, 0, 76, 11, 184, 255, 232, 64, 81, 14, 16, 0, 76, 7, 24, 16, 0, 77, + 7, 16, 15, 0, 77, 7, 24, 14, 0, 77, 1, 24, 16, 0, 77, 1, 16, 15, 0, 77, + 17, 111, 21, 127, 21, 175, 21, 191, 21, 4, 21, 21, 26, 118, 14, 18, 18, 14, 45, 1, + 96, 41, 112, 41, 160, 41, 176, 41, 4, 41, 41, 36, 118, 4, 0, 0, 4, 44, 41, 1, + 121, 42, 68, 21, 17, 121, 20, 68, 31, 124, 9, 69, 0, 63, 237, 63, 237, 50, 63, 237, + 50, 1, 16, 198, 50, 47, 16, 237, 50, 47, 93, 51, 16, 206, 50, 47, 16, 237, 50, 47, + 93, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 55, 51, 38, 38, 53, 52, 62, + 2, 51, 50, 30, 2, 21, 20, 6, 7, 51, 21, 35, 53, 62, 3, 53, 52, 46, 2, 35, + 34, 14, 2, 21, 20, 30, 2, 23, 21, 35, 18, 109, 48, 46, 27, 55, 82, 54, 54, 82, + 55, 27, 47, 47, 107, 197, 24, 38, 25, 14, 16, 33, 51, 35, 35, 51, 33, 16, 14, 25, + 38, 24, 199, 70, 61, 149, 74, 55, 102, 76, 46, 46, 76, 102, 55, 74, 149, 61, 70, 60, + 26, 68, 77, 82, 40, 42, 76, 57, 34, 34, 57, 76, 42, 40, 82, 77, 68, 26, 60, 0, + 2, 0, 49, 255, 246, 1, 215, 1, 218, 0, 25, 0, 43, 0, 103, 185, 0, 42, 255, 240, + 179, 14, 0, 77, 37, 184, 255, 224, 179, 14, 0, 77, 37, 184, 255, 240, 64, 52, 13, 0, + 77, 24, 16, 16, 0, 77, 24, 24, 15, 0, 77, 18, 24, 16, 0, 77, 18, 32, 15, 0, + 77, 18, 24, 8, 0, 77, 13, 32, 127, 4, 9, 9, 4, 45, 39, 130, 21, 44, 26, 136, + 16, 81, 9, 136, 10, 81, 36, 136, 0, 80, 0, 63, 237, 63, 237, 63, 237, 1, 16, 214, + 237, 16, 204, 50, 47, 16, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 1, 50, + 22, 23, 17, 20, 30, 2, 23, 7, 38, 38, 39, 6, 6, 35, 34, 46, 2, 53, 52, 62, + 2, 19, 50, 54, 55, 38, 38, 53, 53, 38, 38, 35, 34, 6, 21, 20, 30, 2, 1, 13, + 48, 87, 23, 3, 9, 18, 14, 13, 29, 36, 17, 20, 65, 45, 48, 74, 49, 26, 31, 57, + 82, 34, 32, 52, 13, 3, 2, 7, 42, 24, 63, 75, 13, 29, 45, 1, 218, 19, 8, 254, + 212, 22, 29, 19, 12, 4, 70, 6, 18, 22, 17, 30, 36, 64, 88, 53, 56, 90, 63, 34, + 254, 100, 23, 11, 13, 27, 15, 241, 3, 8, 91, 81, 36, 61, 46, 26, 0, 2, 0, 71, + 255, 91, 1, 204, 2, 181, 0, 27, 0, 51, 0, 177, 185, 0, 49, 255, 232, 179, 18, 0, + 77, 49, 184, 255, 224, 64, 19, 17, 0, 77, 43, 16, 18, 0, 77, 43, 24, 17, 0, 77, + 33, 32, 15, 0, 77, 23, 184, 255, 240, 179, 16, 0, 77, 22, 184, 255, 232, 179, 16, 0, + 77, 22, 184, 255, 232, 180, 8, 10, 0, 76, 17, 184, 255, 240, 180, 14, 15, 0, 76, 10, + 184, 255, 232, 179, 12, 0, 77, 10, 184, 255, 240, 179, 10, 0, 77, 10, 184, 255, 232, 64, + 46, 8, 9, 0, 76, 4, 16, 8, 10, 0, 76, 41, 41, 15, 45, 130, 12, 12, 36, 130, + 20, 53, 28, 27, 127, 0, 1, 1, 8, 1, 52, 15, 40, 134, 41, 41, 7, 31, 136, 25, + 81, 48, 136, 7, 77, 1, 75, 0, 63, 63, 237, 63, 237, 17, 57, 47, 237, 57, 1, 16, + 214, 94, 93, 237, 50, 16, 222, 237, 51, 47, 237, 50, 50, 47, 49, 48, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 23, 35, 17, 52, 62, 2, 51, 50, 30, 2, 21, + 20, 6, 7, 30, 3, 21, 20, 14, 2, 35, 34, 39, 53, 22, 22, 51, 50, 62, 2, 53, + 52, 38, 35, 35, 53, 51, 50, 54, 53, 52, 38, 35, 34, 6, 21, 154, 83, 29, 49, 65, + 36, 35, 60, 45, 26, 48, 46, 37, 53, 33, 15, 35, 56, 71, 36, 61, 47, 20, 49, 25, + 25, 46, 35, 21, 71, 78, 6, 7, 45, 61, 45, 38, 44, 52, 165, 2, 151, 49, 73, 49, + 24, 22, 44, 64, 43, 41, 75, 19, 10, 39, 49, 58, 29, 56, 79, 49, 23, 28, 75, 17, + 15, 16, 32, 50, 34, 69, 79, 68, 53, 54, 51, 52, 63, 65, 0, 1, 0, 29, 255, 91, + 1, 212, 1, 208, 0, 21, 0, 51, 64, 25, 12, 3, 0, 15, 130, 16, 16, 21, 6, 130, + 7, 23, 0, 130, 21, 22, 3, 12, 12, 16, 6, 21, 73, 16, 75, 0, 63, 63, 51, 18, + 57, 17, 51, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 237, 17, 57, 57, 49, 48, 19, + 22, 22, 23, 54, 54, 55, 51, 14, 3, 7, 22, 22, 23, 35, 46, 3, 39, 121, 36, 65, + 24, 57, 66, 17, 82, 10, 33, 49, 66, 42, 8, 10, 2, 80, 5, 41, 54, 57, 22, 1, + 208, 92, 190, 91, 100, 194, 79, 43, 111, 123, 130, 63, 42, 80, 37, 87, 180, 166, 144, 52, + 0, 2, 0, 39, 255, 244, 1, 204, 2, 181, 0, 17, 0, 58, 0, 167, 64, 11, 58, 16, + 11, 0, 77, 57, 16, 12, 0, 77, 40, 184, 255, 232, 179, 16, 0, 77, 40, 184, 255, 240, + 64, 52, 15, 0, 77, 22, 24, 14, 0, 77, 22, 16, 13, 0, 77, 22, 32, 11, 12, 0, + 76, 19, 56, 17, 18, 0, 76, 18, 8, 17, 0, 77, 16, 24, 12, 13, 0, 76, 16, 32, + 11, 0, 77, 10, 24, 16, 0, 77, 10, 16, 15, 0, 77, 6, 184, 255, 232, 179, 16, 0, + 77, 6, 184, 255, 240, 64, 35, 15, 0, 77, 27, 27, 13, 130, 46, 60, 18, 38, 130, 21, + 21, 3, 130, 56, 59, 18, 41, 136, 0, 0, 1, 0, 0, 24, 8, 136, 51, 81, 33, 137, + 24, 77, 0, 63, 237, 63, 237, 17, 57, 47, 93, 237, 50, 1, 16, 214, 237, 51, 47, 237, + 50, 16, 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 19, 6, 6, 21, 20, 30, 2, 51, 50, 62, 2, 53, 52, 46, 2, 39, 38, + 38, 53, 52, 54, 51, 50, 22, 23, 7, 46, 3, 35, 34, 14, 2, 21, 20, 22, 23, 30, + 3, 21, 20, 14, 2, 35, 34, 46, 2, 53, 52, 54, 255, 64, 68, 14, 30, 48, 35, 32, + 48, 31, 15, 22, 35, 43, 86, 34, 42, 90, 78, 49, 73, 17, 18, 5, 21, 31, 38, 22, + 12, 31, 29, 19, 47, 40, 36, 64, 49, 29, 23, 50, 80, 58, 54, 80, 51, 25, 83, 1, + 152, 18, 97, 67, 33, 60, 46, 27, 25, 44, 59, 33, 41, 59, 44, 31, 54, 24, 60, 34, + 63, 62, 24, 8, 64, 3, 9, 10, 7, 3, 11, 21, 18, 24, 37, 28, 24, 49, 61, 79, + 54, 42, 82, 65, 40, 38, 64, 86, 48, 84, 115, 0, 1, 0, 69, 255, 245, 1, 210, 1, + 220, 0, 53, 0, 86, 64, 53, 52, 24, 11, 13, 0, 76, 52, 32, 10, 0, 77, 41, 16, + 11, 0, 77, 41, 32, 10, 0, 77, 20, 20, 5, 35, 55, 46, 14, 130, 51, 51, 27, 130, + 0, 43, 1, 8, 43, 54, 46, 21, 134, 20, 20, 0, 29, 136, 38, 81, 11, 136, 0, 80, + 0, 63, 237, 63, 237, 17, 57, 47, 237, 57, 1, 16, 214, 94, 93, 237, 51, 47, 237, 50, + 16, 206, 50, 50, 47, 49, 48, 43, 43, 43, 43, 1, 50, 30, 2, 23, 7, 46, 3, 35, + 34, 6, 21, 20, 30, 2, 51, 51, 21, 35, 34, 14, 2, 21, 20, 51, 50, 62, 2, 55, + 23, 6, 6, 35, 34, 46, 2, 53, 52, 54, 55, 46, 3, 53, 52, 54, 1, 33, 23, 46, + 39, 30, 7, 13, 5, 27, 37, 42, 19, 53, 68, 18, 29, 36, 18, 89, 90, 23, 42, 32, + 20, 131, 27, 52, 42, 31, 8, 22, 17, 102, 73, 33, 73, 60, 39, 44, 37, 10, 22, 19, + 13, 110, 1, 220, 4, 7, 8, 3, 71, 2, 8, 7, 6, 30, 35, 21, 26, 14, 5, 66, + 7, 18, 29, 21, 73, 7, 10, 11, 4, 70, 9, 25, 11, 31, 55, 44, 36, 62, 16, 4, + 16, 25, 33, 21, 67, 66, 0, 1, 0, 63, 255, 88, 1, 191, 2, 175, 0, 44, 0, 141, + 185, 0, 43, 255, 232, 180, 11, 14, 0, 76, 39, 184, 255, 208, 179, 16, 0, 77, 39, 184, + 255, 224, 179, 15, 0, 77, 39, 184, 255, 240, 179, 14, 0, 77, 35, 184, 255, 248, 179, 18, + 0, 77, 35, 184, 255, 240, 64, 56, 17, 0, 77, 24, 16, 17, 0, 77, 23, 16, 17, 0, + 77, 16, 24, 10, 0, 77, 16, 40, 9, 0, 77, 26, 32, 18, 0, 77, 26, 30, 30, 4, + 9, 130, 3, 0, 46, 37, 130, 19, 27, 27, 19, 45, 40, 137, 14, 14, 45, 30, 26, 133, + 29, 77, 3, 75, 0, 63, 63, 237, 50, 17, 51, 47, 237, 1, 16, 198, 50, 47, 16, 237, + 16, 222, 50, 237, 50, 51, 47, 51, 43, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 5, 20, 6, 7, 39, 62, 3, 53, 52, 46, 2, 39, 46, 3, 53, 52, 62, 4, 55, + 35, 53, 33, 21, 14, 5, 21, 20, 22, 23, 30, 3, 1, 191, 27, 16, 72, 4, 11, 11, + 8, 14, 29, 45, 32, 48, 70, 44, 21, 27, 45, 56, 58, 55, 20, 235, 1, 86, 21, 59, + 63, 61, 49, 30, 66, 74, 44, 61, 37, 17, 47, 35, 63, 23, 22, 6, 21, 25, 27, 12, + 15, 20, 14, 11, 5, 8, 30, 48, 68, 46, 44, 85, 79, 71, 61, 49, 18, 70, 65, 18, + 51, 62, 73, 79, 84, 42, 65, 59, 11, 7, 21, 30, 40, 0, 1, 0, 71, 255, 91, 1, + 176, 1, 218, 0, 19, 0, 82, 182, 12, 16, 15, 16, 0, 76, 5, 184, 255, 224, 179, 18, + 0, 77, 5, 184, 255, 232, 179, 17, 0, 77, 5, 184, 255, 232, 180, 8, 10, 0, 76, 4, + 184, 255, 224, 64, 23, 17, 0, 77, 8, 127, 7, 21, 18, 127, 0, 19, 1, 8, 19, 20, + 19, 74, 8, 75, 14, 136, 3, 80, 0, 63, 237, 63, 63, 1, 16, 214, 94, 93, 237, 16, + 222, 237, 49, 48, 43, 43, 43, 43, 43, 19, 54, 54, 51, 50, 22, 21, 17, 35, 17, 52, + 46, 2, 35, 34, 6, 7, 17, 35, 71, 45, 89, 39, 93, 95, 82, 16, 29, 41, 24, 20, + 45, 21, 83, 1, 195, 11, 12, 96, 106, 254, 75, 1, 166, 45, 56, 31, 12, 5, 4, 254, + 120, 0, 3, 0, 49, 255, 242, 1, 195, 2, 181, 0, 19, 0, 30, 0, 41, 0, 187, 64, + 11, 40, 24, 14, 0, 77, 40, 16, 13, 0, 77, 33, 184, 255, 240, 180, 13, 14, 0, 76, + 29, 184, 255, 232, 179, 14, 0, 77, 29, 184, 255, 240, 179, 13, 0, 77, 28, 184, 255, 240, + 179, 18, 0, 77, 28, 184, 255, 248, 64, 21, 17, 0, 77, 23, 16, 17, 18, 0, 76, 22, + 16, 13, 14, 0, 76, 18, 24, 15, 0, 77, 17, 184, 255, 240, 64, 9, 14, 0, 77, 12, + 16, 15, 0, 77, 12, 184, 255, 240, 179, 14, 0, 77, 8, 184, 255, 232, 64, 14, 15, 0, + 77, 8, 16, 14, 0, 77, 3, 24, 14, 0, 77, 2, 184, 255, 240, 64, 31, 15, 0, 77, + 37, 25, 130, 5, 43, 36, 26, 130, 15, 15, 31, 15, 2, 15, 42, 26, 133, 36, 36, 0, + 20, 136, 10, 81, 31, 136, 0, 77, 0, 63, 237, 63, 237, 17, 57, 47, 237, 1, 16, 214, + 93, 237, 50, 16, 222, 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 19, 50, 30, 2, 21, 20, 14, 2, 35, 34, 46, 2, 53, 52, + 62, 2, 19, 50, 62, 2, 55, 35, 30, 3, 19, 34, 14, 2, 7, 51, 46, 3, 250, 50, + 76, 50, 25, 25, 50, 76, 50, 50, 76, 50, 25, 25, 50, 76, 50, 30, 43, 28, 14, 2, + 235, 1, 14, 29, 44, 30, 30, 43, 28, 15, 2, 235, 2, 15, 28, 43, 2, 181, 49, 92, + 131, 82, 82, 131, 91, 49, 49, 91, 131, 82, 82, 131, 92, 49, 253, 132, 36, 67, 94, 58, + 58, 94, 67, 36, 2, 53, 34, 63, 89, 55, 55, 89, 63, 34, 0, 1, 0, 54, 255, 245, + 1, 194, 1, 208, 0, 21, 0, 35, 64, 17, 12, 127, 9, 9, 10, 0, 23, 10, 22, 9, + 133, 12, 73, 18, 136, 3, 81, 0, 63, 237, 63, 237, 1, 16, 198, 16, 206, 17, 57, 47, + 237, 49, 48, 37, 6, 6, 35, 34, 46, 2, 53, 53, 35, 53, 51, 17, 20, 30, 2, 51, + 50, 54, 55, 1, 194, 28, 60, 28, 40, 56, 34, 16, 134, 216, 8, 18, 30, 23, 14, 52, + 23, 15, 14, 12, 19, 43, 68, 49, 227, 69, 254, 229, 36, 46, 26, 10, 10, 12, 255, 255, + 0, 71, 0, 0, 1, 222, 1, 208, 2, 6, 1, 21, 0, 0, 0, 1, 0, 29, 0, 0, + 1, 212, 2, 181, 0, 36, 0, 138, 185, 0, 29, 255, 224, 179, 10, 0, 77, 28, 184, 255, + 208, 64, 77, 10, 0, 77, 16, 32, 11, 12, 0, 76, 16, 16, 8, 9, 0, 76, 14, 24, + 14, 0, 77, 14, 8, 3, 8, 129, 9, 14, 20, 9, 9, 14, 31, 0, 3, 0, 129, 36, + 31, 20, 36, 36, 31, 3, 32, 9, 0, 77, 3, 3, 9, 36, 38, 23, 23, 9, 37, 0, + 36, 74, 31, 160, 3, 176, 3, 192, 3, 3, 3, 14, 14, 19, 137, 26, 77, 8, 9, 74, + 0, 63, 51, 63, 237, 50, 17, 51, 93, 51, 63, 51, 1, 16, 198, 50, 47, 16, 206, 17, + 57, 61, 47, 43, 135, 24, 16, 43, 135, 125, 196, 135, 24, 16, 43, 135, 125, 196, 49, 48, + 1, 43, 43, 43, 43, 43, 33, 38, 38, 39, 14, 3, 7, 35, 62, 3, 55, 46, 3, 35, + 34, 6, 7, 39, 54, 54, 51, 50, 30, 2, 23, 30, 3, 23, 1, 119, 22, 60, 35, 26, + 45, 38, 29, 9, 82, 13, 41, 51, 57, 30, 15, 25, 25, 30, 21, 13, 17, 5, 12, 5, + 32, 22, 30, 45, 34, 27, 11, 33, 60, 52, 43, 16, 91, 198, 91, 47, 103, 101, 93, 36, + 50, 118, 124, 124, 55, 39, 58, 38, 19, 3, 2, 66, 2, 5, 18, 32, 44, 27, 77, 153, + 147, 136, 59, 255, 255, 0, 71, 255, 91, 1, 173, 1, 208, 2, 6, 0, 144, 0, 0, 255, + 255, 0, 30, 0, 0, 1, 214, 1, 208, 2, 6, 0, 89, 0, 0, 0, 1, 0, 64, 255, + 88, 1, 195, 2, 181, 0, 58, 0, 210, 185, 0, 58, 255, 224, 179, 15, 0, 77, 58, 184, + 255, 232, 179, 14, 0, 77, 54, 184, 255, 208, 179, 15, 0, 77, 54, 184, 255, 216, 179, 14, + 0, 77, 54, 184, 255, 248, 179, 13, 0, 77, 53, 184, 255, 216, 64, 52, 15, 0, 77, 29, + 16, 16, 0, 77, 28, 32, 16, 18, 0, 76, 28, 16, 9, 0, 77, 28, 32, 8, 0, 77, + 24, 40, 18, 0, 77, 24, 32, 16, 17, 0, 76, 17, 24, 16, 0, 77, 16, 40, 16, 0, + 77, 16, 24, 8, 10, 0, 76, 2, 184, 255, 240, 179, 14, 0, 77, 2, 184, 255, 224, 64, + 45, 13, 0, 77, 49, 49, 3, 34, 34, 12, 130, 3, 60, 23, 43, 130, 26, 26, 56, 130, + 0, 18, 1, 8, 18, 59, 23, 50, 133, 49, 49, 31, 0, 137, 15, 15, 59, 35, 35, 38, + 136, 31, 77, 7, 6, 75, 0, 63, 51, 63, 237, 50, 47, 17, 51, 47, 237, 17, 57, 47, + 237, 57, 1, 16, 214, 94, 93, 237, 51, 47, 237, 50, 16, 222, 237, 51, 47, 17, 51, 47, + 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, + 22, 22, 21, 20, 6, 7, 39, 62, 3, 53, 52, 38, 39, 38, 38, 53, 52, 62, 2, 55, + 38, 38, 53, 52, 62, 2, 51, 50, 22, 23, 7, 38, 38, 35, 34, 14, 2, 21, 20, 30, + 2, 51, 51, 21, 35, 34, 14, 2, 21, 20, 22, 1, 41, 86, 68, 27, 17, 71, 4, 11, + 11, 8, 54, 61, 95, 96, 28, 41, 47, 19, 51, 52, 32, 57, 77, 44, 45, 65, 14, 14, + 15, 53, 36, 36, 50, 32, 15, 24, 42, 58, 33, 68, 60, 23, 66, 63, 44, 76, 77, 15, + 56, 53, 35, 63, 23, 22, 6, 21, 25, 27, 12, 30, 24, 11, 15, 90, 82, 39, 59, 42, + 27, 7, 16, 83, 46, 44, 66, 45, 22, 13, 5, 71, 5, 13, 17, 29, 39, 22, 28, 42, + 27, 13, 70, 11, 30, 54, 43, 56, 53, 255, 255, 0, 40, 255, 245, 1, 204, 1, 219, 2, + 6, 0, 82, 0, 0, 255, 255, 0, 71, 0, 0, 1, 173, 1, 208, 2, 6, 2, 239, 0, + 0, 0, 2, 0, 71, 255, 91, 1, 204, 1, 218, 0, 16, 0, 31, 0, 162, 185, 0, 29, + 255, 240, 179, 16, 0, 77, 29, 184, 255, 232, 64, 29, 15, 0, 77, 27, 24, 16, 0, 77, + 27, 32, 15, 0, 77, 22, 24, 16, 0, 77, 22, 32, 15, 0, 77, 22, 8, 14, 0, 77, + 15, 184, 255, 240, 179, 10, 0, 77, 15, 184, 255, 232, 179, 9, 0, 77, 15, 184, 255, 224, + 179, 8, 0, 77, 11, 184, 255, 224, 179, 9, 0, 77, 11, 184, 255, 232, 64, 47, 8, 0, + 77, 8, 16, 17, 18, 0, 76, 8, 16, 10, 0, 77, 8, 32, 8, 0, 77, 7, 24, 9, + 0, 77, 25, 130, 12, 33, 3, 31, 127, 0, 6, 1, 8, 6, 32, 28, 136, 9, 80, 5, + 75, 20, 136, 0, 81, 0, 63, 237, 63, 63, 237, 1, 16, 214, 94, 93, 237, 50, 16, 222, + 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 5, + 34, 38, 39, 21, 35, 17, 52, 54, 51, 50, 22, 21, 20, 14, 2, 39, 22, 22, 51, 50, + 62, 2, 53, 52, 38, 35, 34, 6, 21, 1, 8, 35, 59, 17, 82, 96, 89, 99, 105, 26, + 51, 73, 157, 24, 54, 23, 31, 46, 30, 14, 54, 63, 50, 55, 11, 22, 11, 187, 1, 169, + 103, 111, 124, 119, 52, 89, 64, 37, 108, 20, 16, 26, 46, 62, 36, 81, 91, 76, 81, 0, + 1, 0, 63, 255, 88, 1, 191, 1, 220, 0, 38, 0, 122, 185, 0, 37, 255, 232, 179, 13, + 0, 77, 32, 184, 255, 224, 179, 13, 0, 77, 32, 184, 255, 232, 64, 30, 12, 0, 77, 23, + 16, 14, 0, 77, 18, 16, 14, 16, 0, 76, 17, 32, 14, 0, 77, 17, 24, 9, 0, 77, + 17, 16, 8, 0, 77, 2, 184, 255, 240, 64, 31, 15, 0, 77, 27, 27, 12, 130, 3, 40, + 34, 130, 0, 20, 1, 8, 20, 39, 0, 137, 15, 15, 39, 28, 28, 31, 136, 25, 80, 7, + 6, 75, 0, 63, 51, 63, 237, 50, 47, 17, 51, 47, 237, 1, 16, 214, 94, 93, 237, 16, + 222, 237, 51, 47, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 37, 22, 22, 21, 20, + 6, 7, 39, 62, 3, 53, 52, 38, 39, 46, 3, 53, 52, 62, 2, 51, 50, 23, 7, 38, + 38, 35, 34, 6, 21, 20, 30, 2, 1, 57, 75, 59, 27, 16, 72, 4, 11, 11, 8, 41, + 46, 62, 83, 50, 21, 31, 63, 94, 62, 72, 59, 18, 20, 54, 31, 85, 90, 26, 46, 60, + 72, 14, 54, 51, 35, 63, 23, 22, 6, 21, 25, 27, 12, 26, 25, 8, 11, 38, 56, 74, + 47, 50, 89, 68, 39, 22, 69, 8, 12, 96, 78, 46, 57, 33, 17, 0, 2, 0, 40, 255, + 244, 1, 217, 1, 208, 0, 20, 0, 39, 0, 197, 185, 0, 38, 255, 240, 179, 14, 0, 77, + 33, 184, 255, 224, 179, 14, 0, 77, 33, 184, 255, 240, 179, 13, 0, 77, 32, 184, 255, 232, + 64, 59, 12, 0, 77, 23, 16, 14, 0, 77, 16, 16, 16, 0, 77, 16, 32, 15, 0, 77, + 16, 8, 8, 0, 77, 15, 24, 16, 0, 77, 15, 16, 15, 0, 77, 11, 24, 16, 0, 77, + 11, 32, 15, 0, 77, 10, 16, 16, 0, 77, 10, 32, 15, 0, 77, 10, 16, 8, 0, 77, + 6, 184, 255, 224, 179, 16, 0, 77, 6, 184, 255, 240, 179, 15, 0, 77, 6, 184, 255, 224, + 179, 8, 0, 77, 5, 184, 255, 240, 179, 16, 0, 77, 5, 184, 255, 232, 179, 15, 0, 77, + 1, 184, 255, 232, 64, 23, 12, 0, 77, 26, 130, 3, 20, 20, 3, 41, 35, 130, 13, 40, + 0, 30, 133, 18, 73, 21, 136, 8, 81, 0, 63, 237, 63, 237, 50, 1, 16, 214, 237, 16, + 206, 50, 47, 16, 237, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 1, 22, 22, 21, 20, 14, 2, 35, 34, 46, 2, 53, + 52, 62, 2, 51, 51, 21, 3, 50, 62, 2, 53, 52, 38, 39, 35, 34, 14, 2, 21, 20, + 30, 2, 1, 123, 35, 33, 29, 54, 75, 45, 38, 74, 57, 35, 38, 65, 84, 47, 199, 229, + 29, 44, 30, 16, 37, 37, 18, 21, 51, 44, 30, 19, 33, 43, 1, 139, 43, 94, 45, 48, + 83, 60, 34, 29, 57, 87, 59, 66, 93, 58, 27, 69, 254, 179, 25, 42, 55, 31, 48, 96, + 36, 13, 38, 69, 55, 40, 60, 39, 19, 0, 1, 0, 63, 255, 245, 1, 194, 1, 208, 0, + 22, 0, 54, 64, 30, 5, 24, 11, 12, 0, 76, 13, 127, 8, 8, 9, 0, 0, 12, 24, + 0, 9, 1, 8, 9, 23, 13, 8, 133, 10, 73, 19, 136, 2, 81, 0, 63, 237, 63, 237, + 50, 1, 16, 198, 94, 93, 16, 206, 50, 47, 17, 57, 47, 237, 49, 48, 43, 37, 6, 35, + 34, 46, 2, 53, 53, 35, 53, 33, 21, 35, 21, 20, 30, 2, 51, 50, 54, 55, 1, 194, + 59, 63, 42, 63, 41, 21, 98, 1, 111, 187, 10, 22, 37, 26, 31, 46, 23, 15, 26, 17, + 42, 72, 55, 220, 69, 69, 214, 35, 45, 27, 11, 11, 11, 0, 1, 0, 71, 255, 246, 1, + 171, 1, 208, 0, 21, 0, 60, 64, 11, 12, 40, 18, 0, 77, 12, 32, 17, 0, 77, 10, + 184, 255, 216, 64, 23, 17, 18, 0, 76, 14, 127, 17, 23, 8, 127, 0, 5, 1, 8, 5, + 22, 15, 6, 73, 11, 136, 0, 81, 0, 63, 237, 63, 51, 1, 16, 214, 94, 93, 237, 16, + 222, 237, 49, 48, 43, 43, 43, 23, 34, 46, 2, 53, 17, 51, 17, 20, 22, 51, 50, 54, + 53, 17, 51, 17, 20, 14, 2, 249, 54, 69, 40, 15, 83, 48, 47, 48, 48, 82, 15, 40, + 69, 10, 36, 60, 76, 39, 1, 7, 254, 253, 78, 65, 65, 78, 1, 3, 254, 249, 39, 76, + 60, 36, 0, 3, 0, 26, 255, 91, 1, 218, 1, 216, 0, 6, 0, 13, 0, 36, 0, 148, + 185, 0, 34, 255, 240, 179, 16, 0, 77, 34, 184, 255, 224, 179, 15, 0, 77, 34, 184, 255, + 224, 179, 9, 0, 77, 33, 184, 255, 224, 179, 16, 0, 77, 33, 184, 255, 216, 64, 14, 10, + 0, 77, 18, 32, 16, 0, 77, 18, 16, 15, 0, 77, 5, 184, 255, 216, 179, 14, 0, 77, + 5, 184, 255, 224, 179, 13, 0, 77, 2, 184, 255, 216, 179, 14, 0, 77, 2, 184, 255, 232, + 64, 31, 13, 0, 77, 7, 36, 127, 3, 16, 16, 21, 10, 130, 31, 38, 0, 130, 21, 37, + 13, 4, 136, 26, 80, 7, 3, 136, 36, 16, 76, 15, 75, 0, 63, 63, 51, 237, 50, 63, + 237, 50, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 51, 237, 50, 49, 48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 55, 20, 22, 23, 17, 6, 6, 23, 54, 54, 53, 52, + 38, 39, 17, 35, 53, 46, 3, 53, 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 7, + 108, 61, 44, 44, 61, 178, 44, 62, 62, 44, 73, 38, 67, 52, 30, 35, 61, 82, 47, 46, + 81, 61, 35, 30, 52, 68, 38, 232, 78, 85, 2, 1, 74, 2, 85, 243, 2, 85, 78, 78, + 85, 2, 253, 206, 162, 1, 32, 60, 87, 55, 60, 90, 60, 30, 30, 60, 90, 60, 55, 87, + 60, 32, 1, 255, 255, 0, 29, 0, 0, 1, 216, 1, 208, 2, 6, 0, 91, 0, 0, 0, + 1, 0, 37, 255, 91, 1, 206, 1, 208, 0, 27, 0, 118, 185, 0, 25, 255, 232, 180, 15, + 16, 0, 76, 25, 184, 255, 232, 64, 10, 13, 0, 77, 17, 16, 17, 18, 0, 76, 10, 184, + 255, 224, 179, 18, 0, 77, 10, 184, 255, 232, 179, 17, 0, 77, 10, 184, 255, 232, 179, 10, + 0, 77, 10, 184, 255, 224, 64, 31, 9, 0, 77, 12, 0, 127, 15, 27, 27, 20, 4, 127, + 7, 29, 23, 127, 20, 28, 27, 27, 5, 21, 73, 1, 26, 136, 12, 15, 81, 14, 75, 0, + 63, 63, 51, 237, 50, 63, 51, 51, 47, 1, 16, 214, 237, 16, 222, 237, 17, 57, 47, 51, + 237, 50, 49, 48, 43, 43, 43, 43, 43, 43, 43, 1, 17, 54, 54, 53, 53, 51, 21, 20, + 14, 2, 7, 21, 35, 53, 46, 3, 53, 53, 51, 21, 20, 22, 23, 17, 1, 30, 49, 45, + 82, 20, 43, 67, 46, 73, 47, 66, 43, 20, 82, 44, 50, 1, 101, 254, 215, 4, 87, 95, + 218, 230, 52, 88, 64, 38, 2, 155, 155, 2, 38, 65, 88, 51, 230, 218, 95, 87, 4, 1, + 41, 0, 1, 0, 36, 255, 247, 1, 210, 1, 218, 0, 52, 0, 131, 185, 0, 51, 255, 240, + 180, 12, 13, 0, 76, 51, 184, 255, 232, 64, 10, 11, 0, 77, 41, 16, 17, 18, 0, 76, + 18, 184, 255, 240, 64, 63, 17, 18, 0, 76, 8, 16, 12, 0, 77, 8, 24, 11, 0, 77, + 3, 30, 127, 29, 29, 11, 15, 42, 31, 42, 175, 42, 191, 42, 4, 42, 42, 37, 130, 48, + 54, 0, 17, 16, 17, 160, 17, 176, 17, 4, 17, 17, 22, 130, 11, 53, 43, 16, 29, 29, + 16, 80, 34, 3, 25, 136, 0, 6, 81, 0, 63, 51, 237, 50, 50, 63, 51, 47, 17, 51, + 1, 16, 214, 237, 50, 47, 93, 16, 222, 237, 50, 47, 93, 17, 57, 47, 237, 57, 49, 48, + 43, 43, 43, 43, 43, 43, 5, 34, 38, 39, 6, 6, 35, 34, 46, 2, 53, 52, 62, 2, + 55, 23, 14, 3, 21, 20, 22, 51, 50, 54, 53, 53, 51, 21, 20, 22, 51, 50, 54, 53, + 52, 46, 2, 39, 55, 30, 3, 21, 20, 14, 2, 1, 86, 27, 48, 16, 16, 49, 26, 35, + 47, 29, 13, 13, 23, 32, 20, 74, 20, 29, 21, 10, 19, 25, 23, 29, 74, 29, 23, 25, + 19, 10, 21, 30, 19, 74, 19, 33, 23, 13, 13, 29, 48, 9, 34, 37, 37, 34, 31, 53, + 71, 39, 39, 83, 77, 66, 24, 26, 27, 68, 73, 74, 32, 48, 63, 65, 63, 87, 87, 63, + 65, 63, 48, 32, 74, 73, 68, 27, 26, 24, 66, 77, 83, 39, 39, 71, 53, 31, 255, 255, + 0, 9, 0, 0, 1, 235, 2, 121, 2, 38, 0, 36, 0, 0, 1, 7, 3, 210, 255, 62, + 0, 0, 0, 13, 185, 0, 2, 255, 79, 180, 25, 23, 4, 15, 80, 43, 52, 0, 255, 255, + 255, 188, 0, 0, 1, 204, 2, 121, 2, 55, 3, 210, 254, 238, 0, 0, 0, 6, 0, 40, + 0, 0, 255, 255, 255, 136, 0, 0, 1, 199, 2, 121, 2, 38, 0, 43, 0, 0, 1, 7, + 3, 210, 254, 186, 0, 0, 0, 13, 185, 0, 1, 254, 203, 180, 14, 12, 7, 1, 80, 43, + 52, 0, 255, 255, 255, 182, 0, 0, 1, 155, 2, 121, 2, 38, 0, 44, 0, 0, 1, 7, + 3, 210, 254, 232, 0, 0, 0, 13, 185, 0, 1, 254, 249, 180, 14, 12, 4, 2, 80, 43, + 52, 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, 26, 2, 38, 0, 44, 0, 0, 1, 7, + 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, 14, 32, 4, 2, 80, 2, 9, + 24, 79, 1, 9, 12, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 255, 184, 255, 243, + 1, 216, 2, 121, 2, 55, 3, 210, 254, 234, 0, 0, 0, 6, 0, 50, 0, 0, 255, 255, + 255, 126, 0, 0, 1, 232, 2, 121, 2, 55, 3, 210, 254, 176, 0, 0, 0, 6, 0, 60, + 0, 0, 255, 255, 0, 13, 0, 0, 1, 232, 3, 26, 2, 38, 0, 60, 0, 0, 1, 7, + 0, 131, 0, 0, 0, 139, 0, 23, 64, 16, 2, 1, 0, 19, 37, 4, 12, 80, 2, 4, + 29, 79, 1, 4, 17, 79, 43, 43, 43, 52, 52, 0, 0, 0, 255, 255, 255, 182, 0, 0, + 1, 226, 2, 121, 2, 38, 3, 163, 0, 0, 1, 7, 3, 210, 254, 232, 0, 0, 0, 13, + 185, 0, 1, 254, 249, 180, 46, 44, 0, 18, 80, 43, 52, 0, 255, 255, 0, 49, 255, 246, + 1, 215, 2, 187, 2, 38, 3, 164, 0, 0, 1, 6, 3, 209, 30, 0, 0, 16, 64, 11, + 2, 16, 46, 44, 20, 9, 80, 2, 0, 45, 79, 43, 43, 52, 255, 255, 0, 69, 255, 245, + 1, 210, 2, 187, 2, 38, 3, 168, 0, 0, 1, 6, 3, 209, 43, 0, 0, 16, 64, 11, + 1, 22, 56, 54, 42, 35, 80, 1, 0, 55, 79, 43, 43, 52, 255, 255, 0, 71, 255, 91, + 1, 176, 2, 187, 2, 38, 3, 170, 0, 0, 1, 6, 3, 209, 22, 0, 0, 16, 64, 11, + 1, 17, 22, 20, 0, 5, 80, 1, 2, 21, 79, 43, 43, 52, 255, 255, 0, 54, 255, 245, + 1, 194, 2, 187, 2, 38, 3, 172, 0, 0, 1, 6, 3, 209, 9, 0, 0, 16, 64, 11, + 1, 3, 24, 22, 10, 0, 80, 1, 11, 23, 79, 43, 43, 52, 255, 255, 0, 54, 255, 245, + 1, 194, 2, 143, 2, 38, 3, 172, 0, 0, 1, 6, 0, 131, 221, 0, 0, 26, 177, 2, + 1, 184, 255, 219, 64, 13, 24, 42, 10, 0, 80, 2, 11, 34, 79, 1, 11, 22, 79, 43, + 43, 43, 52, 52, 0, 0, 255, 255, 0, 38, 255, 245, 1, 194, 2, 185, 2, 38, 3, 172, + 0, 0, 1, 6, 3, 211, 230, 0, 0, 33, 178, 3, 2, 1, 184, 255, 219, 64, 17, 40, + 34, 10, 0, 80, 3, 11, 38, 79, 2, 11, 26, 79, 1, 11, 23, 79, 43, 43, 43, 43, + 52, 52, 52, 0, 0, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 187, 2, 38, 0, 82, + 0, 0, 1, 6, 3, 209, 22, 0, 0, 16, 64, 11, 2, 18, 34, 32, 9, 0, 80, 2, + 14, 33, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, 1, 171, 2, 143, 2, 38, 3, 184, + 0, 0, 1, 6, 0, 131, 0, 0, 0, 23, 64, 16, 2, 1, 1, 24, 42, 4, 16, 80, + 2, 6, 34, 79, 1, 6, 22, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 71, 255, 246, + 1, 171, 2, 187, 2, 38, 3, 184, 0, 0, 1, 6, 3, 209, 22, 0, 0, 16, 64, 11, + 1, 19, 24, 22, 4, 16, 80, 1, 6, 23, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, + 1, 171, 2, 185, 2, 38, 3, 184, 0, 0, 1, 6, 3, 211, 9, 0, 0, 30, 64, 21, + 3, 2, 1, 1, 40, 34, 4, 16, 80, 3, 6, 38, 79, 2, 6, 26, 79, 1, 6, 23, + 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 36, 255, 247, 1, 210, 2, 187, + 2, 38, 3, 188, 0, 0, 1, 6, 3, 209, 25, 0, 0, 16, 64, 11, 1, 20, 55, 53, + 10, 47, 80, 1, 16, 54, 79, 43, 43, 52, 0, 1, 0, 164, 2, 1, 1, 73, 2, 187, + 0, 3, 0, 27, 64, 9, 3, 0, 1, 2, 0, 3, 128, 2, 1, 0, 47, 51, 26, 205, + 50, 1, 47, 25, 197, 24, 221, 25, 197, 49, 48, 1, 7, 39, 55, 1, 73, 116, 49, 101, + 2, 143, 142, 34, 152, 0, 1, 0, 206, 1, 183, 1, 72, 2, 121, 0, 3, 0, 18, 182, + 3, 0, 1, 2, 1, 3, 69, 0, 63, 205, 1, 47, 205, 221, 205, 49, 48, 1, 7, 39, + 55, 1, 72, 61, 61, 41, 2, 101, 174, 15, 179, 0, 3, 0, 64, 2, 4, 1, 162, 2, + 185, 0, 3, 0, 15, 0, 27, 0, 48, 64, 21, 13, 7, 25, 3, 0, 1, 2, 2, 19, + 25, 10, 22, 64, 4, 16, 16, 0, 3, 128, 2, 1, 0, 47, 51, 26, 205, 50, 51, 47, + 51, 26, 205, 50, 1, 47, 205, 51, 47, 51, 205, 50, 16, 220, 205, 49, 48, 1, 7, 39, + 55, 23, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 33, 34, 38, 53, 52, 54, 51, + 50, 22, 21, 20, 6, 1, 55, 93, 47, 80, 119, 21, 28, 28, 21, 20, 28, 28, 254, 235, + 20, 29, 29, 20, 20, 28, 28, 2, 146, 142, 28, 153, 142, 26, 23, 22, 27, 27, 22, 23, + 26, 26, 23, 22, 27, 27, 22, 23, 26, 255, 255, 0, 49, 255, 246, 1, 215, 2, 185, 2, + 38, 3, 164, 0, 0, 1, 6, 4, 130, 0, 0, 0, 19, 185, 0, 2, 255, 246, 64, 9, + 44, 55, 20, 9, 80, 2, 0, 61, 79, 43, 43, 52, 0, 255, 255, 0, 49, 255, 246, 1, + 215, 2, 185, 2, 38, 3, 164, 0, 0, 1, 6, 4, 188, 9, 0, 0, 19, 185, 0, 2, + 255, 255, 64, 9, 48, 60, 20, 9, 80, 2, 0, 44, 79, 43, 43, 52, 0, 255, 255, 0, + 49, 255, 246, 1, 215, 2, 187, 2, 38, 3, 164, 0, 0, 1, 6, 4, 145, 0, 0, 0, + 26, 177, 3, 2, 184, 255, 246, 64, 13, 44, 63, 20, 9, 80, 3, 0, 64, 79, 2, 0, + 61, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 49, 255, 246, 1, 215, 2, 187, 2, + 38, 3, 164, 0, 0, 1, 6, 4, 158, 0, 0, 0, 26, 177, 3, 2, 184, 255, 246, 64, + 13, 46, 61, 20, 9, 80, 3, 0, 62, 79, 2, 0, 44, 79, 43, 43, 43, 52, 52, 0, + 0, 255, 255, 0, 49, 255, 246, 1, 215, 2, 187, 2, 38, 3, 164, 0, 0, 1, 6, 4, + 146, 36, 0, 0, 23, 64, 16, 3, 2, 26, 44, 62, 20, 9, 80, 3, 0, 63, 79, 2, + 0, 61, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 49, 255, 246, 1, 215, 2, 187, 2, + 38, 3, 164, 0, 0, 1, 6, 4, 159, 18, 0, 0, 23, 64, 16, 3, 2, 8, 46, 60, + 20, 9, 80, 3, 0, 61, 79, 2, 0, 44, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, + 49, 255, 246, 1, 215, 3, 19, 2, 38, 3, 164, 0, 0, 1, 6, 4, 147, 18, 0, 0, + 23, 64, 16, 3, 2, 8, 75, 65, 20, 9, 80, 3, 0, 67, 79, 2, 0, 60, 79, 43, + 43, 43, 52, 52, 0, 255, 255, 0, 49, 255, 246, 1, 215, 3, 19, 2, 38, 3, 164, 0, + 0, 1, 6, 4, 160, 0, 0, 0, 26, 177, 3, 2, 184, 255, 246, 64, 13, 75, 65, 20, + 9, 80, 3, 0, 67, 79, 2, 0, 44, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, + 6, 0, 0, 1, 235, 2, 122, 2, 38, 0, 36, 0, 0, 1, 7, 4, 130, 255, 77, 255, + 193, 0, 13, 185, 0, 2, 255, 77, 180, 23, 34, 4, 15, 80, 43, 52, 0, 255, 255, 255, + 245, 0, 0, 1, 235, 2, 122, 2, 38, 0, 36, 0, 0, 1, 7, 4, 188, 255, 60, 255, + 193, 0, 13, 185, 0, 2, 255, 60, 180, 27, 39, 4, 15, 80, 43, 52, 0, 255, 255, 255, + 69, 0, 0, 1, 235, 2, 124, 2, 38, 0, 36, 0, 0, 1, 7, 4, 145, 254, 229, 255, + 193, 0, 15, 177, 3, 2, 184, 254, 229, 180, 23, 42, 4, 15, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 255, 88, 0, 0, 1, 235, 2, 124, 2, 38, 0, 36, 0, 0, 1, 7, 4, + 158, 254, 239, 255, 193, 0, 15, 177, 3, 2, 184, 254, 239, 180, 25, 40, 4, 15, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 255, 120, 0, 0, 1, 235, 2, 124, 2, 38, 0, 36, 0, + 0, 1, 7, 4, 146, 255, 14, 255, 193, 0, 15, 177, 3, 2, 184, 255, 14, 180, 23, 41, + 4, 15, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 98, 0, 0, 1, 235, 2, 124, 2, + 38, 0, 36, 0, 0, 1, 7, 4, 159, 255, 2, 255, 193, 0, 15, 177, 3, 2, 184, 255, + 2, 180, 25, 39, 4, 15, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 174, 0, 0, 1, + 235, 2, 180, 2, 38, 0, 36, 0, 0, 1, 7, 4, 147, 255, 43, 255, 161, 0, 15, 177, + 3, 2, 184, 255, 43, 180, 54, 44, 4, 15, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, + 164, 0, 0, 1, 235, 2, 180, 2, 38, 0, 36, 0, 0, 1, 7, 4, 160, 255, 33, 255, + 161, 0, 15, 177, 3, 2, 184, 255, 33, 180, 54, 44, 4, 15, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 69, 255, 245, 1, 210, 2, 185, 2, 38, 3, 168, 0, 0, 1, 6, 4, + 130, 27, 0, 0, 16, 64, 11, 1, 9, 54, 65, 42, 35, 80, 1, 0, 71, 79, 43, 43, + 52, 255, 255, 0, 69, 255, 245, 1, 210, 2, 185, 2, 38, 3, 168, 0, 0, 1, 6, 4, + 188, 9, 0, 0, 19, 185, 0, 1, 255, 247, 64, 9, 58, 70, 42, 35, 80, 1, 0, 54, + 79, 43, 43, 52, 0, 255, 255, 0, 69, 255, 245, 1, 210, 2, 187, 2, 38, 3, 168, 0, + 0, 1, 6, 4, 145, 36, 0, 0, 23, 64, 16, 2, 1, 18, 54, 73, 42, 35, 80, 2, + 0, 74, 79, 1, 0, 71, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 69, 255, 245, 1, + 210, 2, 187, 2, 38, 3, 168, 0, 0, 1, 6, 4, 158, 0, 0, 0, 26, 177, 2, 1, + 184, 255, 239, 64, 13, 56, 71, 42, 35, 80, 2, 0, 72, 79, 1, 0, 54, 79, 43, 43, + 43, 52, 52, 0, 0, 255, 255, 0, 69, 255, 245, 1, 210, 2, 187, 2, 38, 3, 168, 0, + 0, 1, 6, 4, 146, 0, 0, 0, 26, 177, 2, 1, 184, 255, 239, 64, 13, 54, 72, 42, + 35, 80, 2, 0, 73, 79, 1, 0, 71, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, + 69, 255, 245, 1, 210, 2, 187, 2, 38, 3, 168, 0, 0, 1, 6, 4, 159, 18, 0, 0, + 23, 64, 16, 2, 1, 0, 56, 70, 42, 35, 80, 2, 0, 71, 79, 1, 0, 54, 79, 43, + 43, 43, 52, 52, 0, 255, 255, 255, 177, 0, 0, 1, 204, 2, 122, 2, 38, 0, 40, 0, + 0, 1, 7, 4, 130, 254, 248, 255, 193, 0, 13, 185, 0, 1, 254, 222, 180, 12, 23, 0, + 10, 80, 43, 52, 0, 255, 255, 255, 181, 0, 0, 1, 204, 2, 122, 2, 38, 0, 40, 0, + 0, 1, 7, 4, 188, 254, 252, 255, 193, 0, 13, 185, 0, 1, 254, 226, 180, 16, 28, 0, + 10, 80, 43, 52, 0, 255, 255, 255, 7, 0, 0, 1, 204, 2, 124, 2, 38, 0, 40, 0, + 0, 1, 7, 4, 145, 254, 167, 255, 193, 0, 15, 177, 2, 1, 184, 254, 142, 180, 12, 31, + 0, 10, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 25, 0, 0, 1, 204, 2, 124, 2, + 38, 0, 40, 0, 0, 1, 7, 4, 158, 254, 176, 255, 193, 0, 15, 177, 2, 1, 184, 254, + 151, 180, 14, 29, 0, 10, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 26, 0, 0, 1, + 204, 2, 124, 2, 38, 0, 40, 0, 0, 1, 7, 4, 146, 254, 176, 255, 193, 0, 15, 177, + 2, 1, 184, 254, 151, 180, 12, 30, 0, 10, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, + 7, 0, 0, 1, 204, 2, 124, 2, 38, 0, 40, 0, 0, 1, 7, 4, 159, 254, 167, 255, + 193, 0, 15, 177, 2, 1, 184, 254, 142, 180, 14, 28, 0, 10, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 71, 255, 91, 1, 176, 2, 185, 2, 38, 3, 170, 0, 0, 1, 6, 4, + 130, 0, 0, 0, 19, 185, 0, 1, 255, 254, 64, 9, 20, 31, 0, 5, 80, 1, 2, 37, + 79, 43, 43, 52, 0, 255, 255, 0, 71, 255, 91, 1, 176, 2, 185, 2, 38, 3, 170, 0, + 0, 1, 6, 4, 188, 9, 0, 0, 16, 64, 11, 1, 7, 24, 36, 0, 5, 80, 1, 2, + 20, 79, 43, 43, 52, 255, 255, 0, 71, 255, 91, 1, 176, 2, 187, 2, 38, 3, 170, 0, + 0, 1, 6, 4, 145, 0, 0, 0, 26, 177, 2, 1, 184, 255, 255, 64, 13, 20, 39, 0, + 5, 80, 2, 2, 40, 79, 1, 2, 37, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, + 71, 255, 91, 1, 176, 2, 187, 2, 38, 3, 170, 0, 0, 1, 6, 4, 158, 0, 0, 0, + 26, 177, 2, 1, 184, 255, 255, 64, 13, 22, 37, 0, 5, 80, 2, 2, 38, 79, 1, 2, + 20, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 71, 255, 91, 1, 176, 2, 187, 2, + 38, 3, 170, 0, 0, 1, 6, 4, 146, 0, 0, 0, 26, 177, 2, 1, 184, 255, 255, 64, + 13, 20, 38, 0, 5, 80, 2, 2, 39, 79, 1, 2, 37, 79, 43, 43, 43, 52, 52, 0, + 0, 255, 255, 0, 71, 255, 91, 1, 176, 2, 187, 2, 38, 3, 170, 0, 0, 1, 6, 4, + 159, 18, 0, 0, 23, 64, 16, 2, 1, 16, 22, 36, 0, 5, 80, 2, 2, 37, 79, 1, + 2, 20, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 71, 255, 91, 1, 176, 3, 19, 2, + 38, 3, 170, 0, 0, 1, 6, 4, 147, 0, 0, 0, 26, 177, 2, 1, 184, 255, 255, 64, + 13, 51, 41, 0, 5, 80, 2, 2, 43, 79, 1, 2, 36, 79, 43, 43, 43, 52, 52, 0, + 0, 255, 255, 0, 71, 255, 91, 1, 176, 3, 19, 2, 38, 3, 170, 0, 0, 1, 6, 4, + 160, 0, 0, 0, 26, 177, 2, 1, 184, 255, 255, 64, 13, 51, 41, 0, 5, 80, 2, 2, + 43, 79, 1, 2, 20, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 255, 131, 0, 0, 1, + 199, 2, 122, 2, 38, 0, 43, 0, 0, 1, 7, 4, 130, 254, 202, 255, 193, 0, 13, 185, + 0, 1, 254, 202, 180, 12, 23, 7, 1, 80, 43, 52, 0, 255, 255, 255, 136, 0, 0, 1, + 199, 2, 122, 2, 38, 0, 43, 0, 0, 1, 7, 4, 188, 254, 207, 255, 193, 0, 13, 185, + 0, 1, 254, 207, 180, 16, 28, 7, 1, 80, 43, 52, 0, 255, 255, 254, 217, 0, 0, 1, + 199, 2, 124, 2, 38, 0, 43, 0, 0, 1, 7, 4, 145, 254, 121, 255, 193, 0, 15, 177, + 2, 1, 184, 254, 121, 180, 12, 31, 7, 1, 80, 43, 52, 52, 0, 0, 0, 255, 255, 254, + 234, 0, 0, 1, 199, 2, 124, 2, 38, 0, 43, 0, 0, 1, 7, 4, 158, 254, 129, 255, + 193, 0, 15, 177, 2, 1, 184, 254, 129, 180, 14, 29, 7, 1, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 254, 236, 0, 0, 1, 199, 2, 124, 2, 38, 0, 43, 0, 0, 1, 7, 4, + 146, 254, 130, 255, 193, 0, 15, 177, 2, 1, 184, 254, 130, 180, 12, 30, 7, 1, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 254, 217, 0, 0, 1, 199, 2, 124, 2, 38, 0, 43, 0, + 0, 1, 7, 4, 159, 254, 121, 255, 193, 0, 15, 177, 2, 1, 184, 254, 121, 180, 14, 28, + 7, 1, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 26, 0, 0, 1, 199, 2, 180, 2, + 38, 0, 43, 0, 0, 1, 7, 4, 147, 254, 151, 255, 161, 0, 15, 177, 2, 1, 184, 254, + 151, 180, 43, 33, 7, 1, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 26, 0, 0, 1, + 199, 2, 180, 2, 38, 0, 43, 0, 0, 1, 7, 4, 160, 254, 151, 255, 161, 0, 15, 177, + 2, 1, 184, 254, 151, 180, 43, 33, 7, 1, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, + 54, 255, 245, 1, 194, 2, 185, 2, 38, 3, 172, 0, 0, 1, 6, 4, 130, 221, 0, 0, + 19, 185, 0, 1, 255, 219, 64, 9, 22, 33, 10, 0, 80, 1, 11, 39, 79, 43, 43, 52, + 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 185, 2, 38, 3, 172, 0, 0, 1, 6, 4, + 188, 230, 0, 0, 19, 185, 0, 1, 255, 228, 64, 9, 26, 38, 10, 0, 80, 1, 11, 22, + 79, 43, 43, 52, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 187, 2, 38, 3, 172, 0, + 0, 1, 6, 4, 145, 230, 0, 0, 26, 177, 2, 1, 184, 255, 228, 64, 13, 22, 41, 10, + 0, 80, 2, 11, 42, 79, 1, 11, 39, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, + 54, 255, 245, 1, 194, 2, 187, 2, 38, 3, 172, 0, 0, 1, 6, 4, 158, 230, 0, 0, + 26, 177, 2, 1, 184, 255, 228, 64, 13, 24, 39, 10, 0, 80, 2, 11, 40, 79, 1, 11, + 22, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 187, 2, + 38, 3, 172, 0, 0, 1, 6, 4, 146, 248, 0, 0, 26, 177, 2, 1, 184, 255, 246, 64, + 13, 22, 40, 10, 0, 80, 2, 11, 41, 79, 1, 11, 39, 79, 43, 43, 43, 52, 52, 0, + 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 187, 2, 38, 3, 172, 0, 0, 1, 6, 4, + 159, 239, 0, 0, 26, 177, 2, 1, 184, 255, 237, 64, 13, 24, 38, 10, 0, 80, 2, 11, + 39, 79, 1, 11, 22, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 54, 255, 245, 1, + 194, 3, 19, 2, 38, 3, 172, 0, 0, 1, 6, 4, 147, 230, 0, 0, 26, 177, 2, 1, + 184, 255, 228, 64, 13, 53, 43, 10, 0, 80, 2, 11, 45, 79, 1, 11, 38, 79, 43, 43, + 43, 52, 52, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 3, 19, 2, 38, 3, 172, 0, + 0, 1, 6, 4, 160, 230, 0, 0, 26, 177, 2, 1, 184, 255, 228, 64, 13, 53, 43, 10, + 0, 80, 2, 11, 45, 79, 1, 11, 22, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 255, + 176, 0, 0, 1, 155, 2, 122, 2, 38, 0, 44, 0, 0, 1, 7, 4, 130, 254, 247, 255, + 193, 0, 13, 185, 0, 1, 254, 247, 180, 12, 23, 4, 2, 80, 43, 52, 0, 255, 255, 255, + 180, 0, 0, 1, 155, 2, 122, 2, 38, 0, 44, 0, 0, 1, 7, 4, 188, 254, 251, 255, + 193, 0, 13, 185, 0, 1, 254, 251, 180, 16, 28, 4, 2, 80, 43, 52, 0, 255, 255, 255, + 6, 0, 0, 1, 155, 2, 124, 2, 38, 0, 44, 0, 0, 1, 7, 4, 145, 254, 166, 255, + 193, 0, 15, 177, 2, 1, 184, 254, 166, 180, 12, 31, 4, 2, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 255, 24, 0, 0, 1, 155, 2, 124, 2, 38, 0, 44, 0, 0, 1, 7, 4, + 158, 254, 175, 255, 193, 0, 15, 177, 2, 1, 184, 254, 175, 180, 14, 29, 4, 2, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 255, 25, 0, 0, 1, 155, 2, 124, 2, 38, 0, 44, 0, + 0, 1, 7, 4, 146, 254, 175, 255, 193, 0, 15, 177, 2, 1, 184, 254, 175, 180, 12, 30, + 4, 2, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 6, 0, 0, 1, 155, 2, 124, 2, + 38, 0, 44, 0, 0, 1, 7, 4, 159, 254, 166, 255, 193, 0, 15, 177, 2, 1, 184, 254, + 166, 180, 14, 28, 4, 2, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 72, 0, 0, 1, + 155, 2, 180, 2, 38, 0, 44, 0, 0, 1, 7, 4, 147, 254, 197, 255, 161, 0, 15, 177, + 2, 1, 184, 254, 197, 180, 43, 33, 4, 2, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, + 72, 0, 0, 1, 155, 2, 180, 2, 38, 0, 44, 0, 0, 1, 7, 4, 160, 254, 197, 255, + 161, 0, 15, 177, 2, 1, 184, 254, 197, 180, 43, 33, 4, 2, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 185, 2, 38, 0, 82, 0, 0, 1, 6, 4, + 130, 0, 0, 0, 16, 64, 11, 2, 0, 32, 43, 9, 0, 80, 2, 14, 49, 79, 43, 43, + 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 185, 2, 38, 0, 82, 0, 0, 1, 6, 4, + 188, 9, 0, 0, 16, 64, 11, 2, 8, 36, 48, 9, 0, 80, 2, 14, 32, 79, 43, 43, + 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 187, 2, 38, 0, 82, 0, 0, 1, 6, 4, + 145, 0, 0, 0, 23, 64, 16, 3, 2, 0, 32, 51, 9, 0, 80, 3, 14, 52, 79, 2, + 14, 49, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 187, 2, + 38, 0, 82, 0, 0, 1, 6, 4, 158, 0, 0, 0, 23, 64, 16, 3, 2, 0, 34, 49, + 9, 0, 80, 3, 14, 50, 79, 2, 14, 32, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, + 40, 255, 245, 1, 204, 2, 187, 2, 38, 0, 82, 0, 0, 1, 6, 4, 146, 0, 0, 0, + 23, 64, 16, 3, 2, 0, 32, 50, 9, 0, 80, 3, 14, 51, 79, 2, 14, 49, 79, 43, + 43, 43, 52, 52, 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 187, 2, 38, 0, 82, 0, + 0, 1, 6, 4, 159, 18, 0, 0, 23, 64, 16, 3, 2, 18, 34, 48, 9, 0, 80, 3, + 14, 49, 79, 2, 14, 32, 79, 43, 43, 43, 52, 52, 0, 255, 255, 255, 162, 255, 243, 1, + 216, 2, 122, 2, 38, 0, 50, 0, 0, 1, 7, 4, 130, 254, 233, 255, 193, 0, 13, 185, + 0, 2, 254, 232, 180, 32, 43, 0, 9, 80, 43, 52, 0, 255, 255, 255, 134, 255, 243, 1, + 216, 2, 122, 2, 38, 0, 50, 0, 0, 1, 7, 4, 188, 254, 205, 255, 193, 0, 13, 185, + 0, 2, 254, 204, 180, 36, 48, 0, 9, 80, 43, 52, 0, 255, 255, 254, 214, 255, 243, 1, + 216, 2, 124, 2, 38, 0, 50, 0, 0, 1, 7, 4, 145, 254, 118, 255, 193, 0, 15, 177, + 3, 2, 184, 254, 118, 180, 32, 51, 0, 9, 80, 43, 52, 52, 0, 0, 0, 255, 255, 254, + 232, 255, 243, 1, 216, 2, 124, 2, 38, 0, 50, 0, 0, 1, 7, 4, 158, 254, 127, 255, + 193, 0, 15, 177, 3, 2, 184, 254, 127, 180, 34, 49, 0, 9, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 255, 25, 255, 243, 1, 216, 2, 124, 2, 38, 0, 50, 0, 0, 1, 7, 4, + 146, 254, 175, 255, 193, 0, 15, 177, 3, 2, 184, 254, 175, 180, 32, 50, 0, 9, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 255, 4, 255, 243, 1, 216, 2, 124, 2, 38, 0, 50, 0, + 0, 1, 7, 4, 159, 254, 164, 255, 193, 0, 15, 177, 3, 2, 184, 254, 164, 180, 34, 48, + 0, 9, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, 71, 255, 246, 1, 171, 2, 185, 2, + 38, 3, 184, 0, 0, 1, 6, 4, 130, 0, 0, 0, 16, 64, 11, 1, 0, 22, 33, 4, + 16, 80, 1, 6, 39, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, 1, 171, 2, 185, 2, + 38, 3, 184, 0, 0, 1, 6, 4, 188, 9, 0, 0, 16, 64, 11, 1, 9, 26, 38, 4, + 16, 80, 1, 6, 22, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, 1, 171, 2, 187, 2, + 38, 3, 184, 0, 0, 1, 6, 4, 145, 0, 0, 0, 23, 64, 16, 2, 1, 1, 22, 41, + 4, 16, 80, 2, 6, 42, 79, 1, 6, 39, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, + 71, 255, 246, 1, 171, 2, 187, 2, 38, 3, 184, 0, 0, 1, 6, 4, 158, 0, 0, 0, + 23, 64, 16, 2, 1, 1, 24, 39, 4, 16, 80, 2, 6, 40, 79, 1, 6, 22, 79, 43, + 43, 43, 52, 52, 0, 255, 255, 0, 71, 255, 246, 1, 171, 2, 187, 2, 38, 3, 184, 0, + 0, 1, 6, 4, 146, 0, 0, 0, 23, 64, 16, 2, 1, 1, 22, 40, 4, 16, 80, 2, + 6, 41, 79, 1, 6, 39, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 71, 255, 246, 1, + 171, 2, 187, 2, 38, 3, 184, 0, 0, 1, 6, 4, 159, 18, 0, 0, 23, 64, 16, 2, + 1, 19, 24, 38, 4, 16, 80, 2, 6, 39, 79, 1, 6, 22, 79, 43, 43, 43, 52, 52, + 0, 255, 255, 0, 71, 255, 246, 1, 171, 3, 19, 2, 38, 3, 184, 0, 0, 1, 6, 4, + 147, 0, 0, 0, 23, 64, 16, 2, 1, 1, 53, 43, 4, 16, 80, 2, 6, 45, 79, 1, + 6, 38, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, 71, 255, 246, 1, 171, 3, 19, 2, + 38, 3, 184, 0, 0, 1, 6, 4, 160, 0, 0, 0, 23, 64, 16, 2, 1, 1, 53, 43, + 4, 16, 80, 2, 6, 45, 79, 1, 6, 22, 79, 43, 43, 43, 52, 52, 0, 255, 255, 255, + 133, 0, 0, 1, 232, 2, 122, 2, 38, 0, 60, 0, 0, 1, 7, 4, 188, 254, 204, 255, + 193, 0, 13, 185, 0, 1, 254, 203, 180, 21, 33, 4, 12, 80, 43, 52, 0, 255, 255, 254, + 243, 0, 0, 1, 232, 2, 124, 2, 38, 0, 60, 0, 0, 1, 7, 4, 158, 254, 138, 255, + 193, 0, 15, 177, 2, 1, 184, 254, 138, 180, 19, 34, 4, 12, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 254, 196, 0, 0, 1, 232, 2, 124, 2, 38, 0, 60, 0, 0, 1, 7, 4, + 159, 254, 100, 255, 193, 0, 15, 177, 2, 1, 184, 254, 100, 180, 19, 33, 4, 12, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 254, 255, 0, 0, 1, 232, 2, 180, 2, 38, 0, 60, 0, + 0, 1, 7, 4, 160, 254, 124, 255, 161, 0, 15, 177, 2, 1, 184, 254, 124, 180, 48, 38, + 4, 12, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, 36, 255, 247, 1, 210, 2, 185, 2, + 38, 3, 188, 0, 0, 1, 6, 4, 130, 0, 0, 0, 19, 185, 0, 1, 255, 255, 64, 9, + 53, 64, 10, 47, 80, 1, 16, 70, 79, 43, 43, 52, 0, 255, 255, 0, 36, 255, 247, 1, + 210, 2, 185, 2, 38, 3, 188, 0, 0, 1, 6, 4, 188, 9, 0, 0, 16, 64, 11, 1, + 7, 57, 69, 10, 47, 80, 1, 16, 53, 79, 43, 43, 52, 255, 255, 0, 36, 255, 247, 1, + 210, 2, 187, 2, 38, 3, 188, 0, 0, 1, 6, 4, 145, 0, 0, 0, 26, 177, 2, 1, + 184, 255, 255, 64, 13, 53, 72, 10, 47, 80, 2, 16, 73, 79, 1, 16, 70, 79, 43, 43, + 43, 52, 52, 0, 0, 255, 255, 0, 36, 255, 247, 1, 210, 2, 187, 2, 38, 3, 188, 0, + 0, 1, 6, 4, 158, 0, 0, 0, 26, 177, 2, 1, 184, 255, 255, 64, 13, 55, 70, 10, + 47, 80, 2, 16, 71, 79, 1, 16, 53, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, + 36, 255, 247, 1, 210, 2, 187, 2, 38, 3, 188, 0, 0, 1, 6, 4, 146, 0, 0, 0, + 26, 177, 2, 1, 184, 255, 255, 64, 13, 53, 71, 10, 47, 80, 2, 16, 72, 79, 1, 16, + 70, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 36, 255, 247, 1, 210, 2, 187, 2, + 38, 3, 188, 0, 0, 1, 6, 4, 159, 18, 0, 0, 23, 64, 16, 2, 1, 17, 55, 69, + 10, 47, 80, 2, 16, 70, 79, 1, 16, 53, 79, 43, 43, 43, 52, 52, 0, 255, 255, 0, + 36, 255, 247, 1, 210, 3, 19, 2, 38, 3, 188, 0, 0, 1, 6, 4, 147, 0, 0, 0, + 26, 177, 2, 1, 184, 255, 255, 64, 13, 84, 74, 10, 47, 80, 2, 16, 76, 79, 1, 16, + 69, 79, 43, 43, 43, 52, 52, 0, 0, 255, 255, 0, 36, 255, 247, 1, 210, 3, 19, 2, + 38, 3, 188, 0, 0, 1, 6, 4, 160, 0, 0, 0, 26, 177, 2, 1, 184, 255, 255, 64, + 13, 84, 74, 10, 47, 80, 2, 16, 76, 79, 1, 16, 53, 79, 43, 43, 43, 52, 52, 0, + 0, 255, 255, 255, 159, 0, 0, 1, 226, 2, 122, 2, 38, 3, 163, 0, 0, 1, 7, 4, + 130, 254, 230, 255, 193, 0, 13, 185, 0, 1, 254, 230, 180, 44, 55, 0, 18, 80, 43, 52, + 0, 255, 255, 255, 132, 0, 0, 1, 226, 2, 122, 2, 38, 3, 163, 0, 0, 1, 7, 4, + 188, 254, 203, 255, 193, 0, 13, 185, 0, 1, 254, 203, 180, 48, 60, 0, 18, 80, 43, 52, + 0, 255, 255, 254, 213, 0, 0, 1, 226, 2, 124, 2, 38, 3, 163, 0, 0, 1, 7, 4, + 145, 254, 117, 255, 193, 0, 15, 177, 2, 1, 184, 254, 117, 180, 44, 63, 0, 18, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 254, 231, 0, 0, 1, 226, 2, 124, 2, 38, 3, 163, 0, + 0, 1, 7, 4, 158, 254, 126, 255, 193, 0, 15, 177, 2, 1, 184, 254, 126, 180, 46, 61, + 0, 18, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 23, 0, 0, 1, 226, 2, 124, 2, + 38, 3, 163, 0, 0, 1, 7, 4, 146, 254, 173, 255, 193, 0, 15, 177, 2, 1, 184, 254, + 173, 180, 44, 62, 0, 18, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 2, 0, 0, 1, + 226, 2, 124, 2, 38, 3, 163, 0, 0, 1, 7, 4, 159, 254, 162, 255, 193, 0, 15, 177, + 2, 1, 184, 254, 162, 180, 46, 60, 0, 18, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, + 86, 0, 0, 1, 226, 2, 180, 2, 38, 3, 163, 0, 0, 1, 7, 4, 147, 254, 211, 255, + 161, 0, 15, 177, 2, 1, 184, 254, 211, 180, 75, 65, 0, 18, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 255, 60, 0, 0, 1, 226, 2, 180, 2, 38, 3, 163, 0, 0, 1, 7, 4, + 160, 254, 185, 255, 161, 0, 15, 177, 2, 1, 184, 254, 185, 180, 75, 65, 0, 18, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 0, 49, 255, 246, 1, 215, 2, 181, 2, 38, 3, 164, 0, + 0, 1, 6, 4, 176, 4, 0, 0, 19, 185, 0, 2, 255, 250, 64, 9, 47, 45, 20, 9, + 80, 2, 0, 46, 79, 43, 43, 52, 0, 255, 255, 0, 49, 255, 246, 1, 215, 2, 181, 2, + 38, 3, 164, 0, 0, 1, 6, 4, 187, 30, 0, 0, 16, 64, 11, 2, 19, 46, 44, 20, + 9, 80, 2, 0, 45, 79, 43, 43, 52, 255, 255, 0, 69, 255, 245, 1, 210, 2, 181, 2, + 38, 3, 168, 0, 0, 1, 6, 4, 176, 4, 0, 0, 19, 185, 0, 1, 255, 242, 64, 9, + 57, 55, 42, 35, 80, 1, 0, 56, 79, 43, 43, 52, 0, 255, 255, 0, 69, 255, 245, 1, + 210, 2, 181, 2, 38, 3, 168, 0, 0, 1, 6, 4, 187, 30, 0, 0, 16, 64, 11, 1, + 12, 56, 54, 42, 35, 80, 1, 0, 55, 79, 43, 43, 52, 255, 255, 0, 71, 255, 91, 1, + 176, 2, 181, 2, 38, 3, 170, 0, 0, 1, 6, 4, 176, 4, 0, 0, 16, 64, 11, 1, + 2, 23, 21, 0, 5, 80, 1, 2, 22, 79, 43, 43, 52, 255, 255, 0, 71, 255, 91, 1, + 176, 2, 181, 2, 38, 3, 170, 0, 0, 1, 6, 4, 187, 30, 0, 0, 16, 64, 11, 1, + 28, 22, 20, 0, 5, 80, 1, 2, 21, 79, 43, 43, 52, 255, 255, 0, 54, 255, 245, 1, + 194, 2, 181, 2, 38, 3, 172, 0, 0, 1, 6, 4, 176, 230, 0, 0, 19, 185, 0, 1, + 255, 228, 64, 9, 25, 23, 10, 0, 80, 1, 11, 24, 79, 43, 43, 52, 0, 255, 255, 0, + 54, 255, 245, 1, 194, 2, 181, 2, 38, 3, 172, 0, 0, 1, 6, 4, 187, 248, 0, 0, + 19, 185, 0, 1, 255, 246, 64, 9, 24, 22, 10, 0, 80, 1, 11, 23, 79, 43, 43, 52, + 0, 255, 255, 0, 40, 255, 245, 1, 204, 2, 181, 2, 38, 0, 82, 0, 0, 1, 6, 4, + 176, 4, 0, 0, 16, 64, 11, 2, 3, 35, 33, 9, 0, 80, 2, 14, 34, 79, 43, 43, + 52, 255, 255, 0, 40, 255, 245, 1, 204, 2, 181, 2, 38, 0, 82, 0, 0, 1, 6, 4, + 187, 30, 0, 0, 16, 64, 11, 2, 29, 34, 32, 9, 0, 80, 2, 14, 33, 79, 43, 43, + 52, 255, 255, 0, 71, 255, 246, 1, 171, 2, 181, 2, 38, 3, 184, 0, 0, 1, 6, 4, + 176, 4, 0, 0, 16, 64, 11, 1, 4, 25, 23, 4, 16, 80, 1, 6, 24, 79, 43, 43, + 52, 255, 255, 0, 71, 255, 246, 1, 171, 2, 181, 2, 38, 3, 184, 0, 0, 1, 6, 4, + 187, 30, 0, 0, 16, 64, 11, 1, 30, 24, 22, 4, 16, 80, 1, 6, 23, 79, 43, 43, + 52, 255, 255, 0, 36, 255, 247, 1, 210, 2, 181, 2, 38, 3, 188, 0, 0, 1, 6, 4, + 176, 4, 0, 0, 16, 64, 11, 1, 2, 56, 54, 10, 47, 80, 1, 16, 55, 79, 43, 43, + 52, 255, 255, 0, 36, 255, 247, 1, 210, 2, 181, 2, 38, 3, 188, 0, 0, 1, 6, 4, + 187, 30, 0, 0, 16, 64, 11, 1, 28, 55, 53, 10, 47, 80, 1, 16, 54, 79, 43, 43, + 52, 255, 255, 0, 49, 255, 86, 1, 215, 2, 185, 2, 38, 3, 164, 0, 0, 0, 38, 4, + 130, 0, 0, 1, 6, 4, 131, 18, 0, 0, 12, 183, 3, 2, 5, 44, 66, 20, 9, 80, + 43, 52, 52, 0, 0, 255, 255, 0, 49, 255, 86, 1, 215, 2, 185, 2, 38, 3, 164, 0, + 0, 0, 38, 4, 188, 9, 0, 1, 6, 4, 131, 18, 0, 0, 12, 183, 3, 2, 10, 48, + 65, 20, 9, 80, 43, 52, 52, 0, 0, 255, 255, 0, 49, 255, 86, 1, 215, 2, 187, 2, + 38, 3, 164, 0, 0, 0, 38, 4, 145, 0, 0, 1, 6, 4, 131, 18, 0, 0, 17, 178, + 4, 3, 2, 184, 255, 246, 180, 44, 63, 20, 9, 80, 43, 52, 52, 52, 0, 255, 255, 0, + 49, 255, 86, 1, 215, 2, 187, 2, 38, 3, 164, 0, 0, 0, 38, 4, 158, 0, 0, 1, + 6, 4, 131, 18, 0, 0, 17, 178, 4, 3, 2, 184, 255, 246, 180, 46, 61, 20, 9, 80, + 43, 52, 52, 52, 0, 255, 255, 0, 49, 255, 86, 1, 215, 2, 187, 2, 38, 3, 164, 0, + 0, 0, 38, 4, 146, 36, 0, 1, 6, 4, 131, 18, 0, 0, 15, 64, 9, 4, 3, 2, + 26, 44, 62, 20, 9, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 0, 49, 255, 86, 1, + 215, 2, 187, 2, 38, 3, 164, 0, 0, 0, 38, 4, 159, 18, 0, 1, 6, 4, 131, 18, + 0, 0, 15, 64, 9, 4, 3, 2, 8, 46, 60, 20, 9, 80, 43, 52, 52, 52, 0, 0, + 0, 255, 255, 0, 49, 255, 86, 1, 215, 3, 19, 2, 38, 3, 164, 0, 0, 0, 38, 4, + 147, 18, 0, 1, 6, 4, 131, 18, 0, 0, 15, 64, 9, 4, 3, 2, 8, 75, 65, 20, + 9, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 0, 49, 255, 86, 1, 215, 3, 19, 2, + 38, 3, 164, 0, 0, 0, 38, 4, 160, 0, 0, 1, 6, 4, 131, 18, 0, 0, 17, 178, + 4, 3, 2, 184, 255, 246, 180, 75, 65, 20, 9, 80, 43, 52, 52, 52, 0, 255, 255, 255, + 185, 255, 247, 1, 244, 2, 122, 2, 38, 4, 129, 0, 0, 1, 7, 4, 130, 255, 0, 255, + 193, 0, 13, 185, 0, 3, 254, 251, 180, 41, 52, 3, 29, 80, 43, 52, 0, 255, 255, 255, + 168, 255, 247, 1, 244, 2, 122, 2, 38, 4, 129, 0, 0, 1, 7, 4, 188, 254, 239, 255, + 193, 0, 13, 185, 0, 3, 254, 234, 180, 45, 57, 3, 29, 80, 43, 52, 0, 255, 255, 254, + 248, 255, 247, 1, 244, 2, 124, 2, 38, 4, 129, 0, 0, 1, 7, 4, 145, 254, 152, 255, + 193, 0, 15, 177, 4, 3, 184, 254, 148, 180, 41, 60, 3, 29, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 255, 11, 255, 247, 1, 244, 2, 124, 2, 38, 4, 129, 0, 0, 1, 7, 4, + 158, 254, 162, 255, 193, 0, 15, 177, 4, 3, 184, 254, 158, 180, 43, 58, 3, 29, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 255, 43, 255, 247, 1, 244, 2, 124, 2, 38, 4, 129, 0, + 0, 1, 7, 4, 146, 254, 193, 255, 193, 0, 15, 177, 4, 3, 184, 254, 189, 180, 41, 59, + 3, 29, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 22, 255, 247, 1, 244, 2, 124, 2, + 38, 4, 129, 0, 0, 1, 7, 4, 159, 254, 182, 255, 193, 0, 15, 177, 4, 3, 184, 254, + 178, 180, 43, 57, 3, 29, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 96, 255, 247, 1, + 244, 2, 180, 2, 38, 4, 129, 0, 0, 1, 7, 4, 147, 254, 221, 255, 161, 0, 15, 177, + 4, 3, 184, 254, 217, 180, 72, 62, 3, 29, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, + 87, 255, 247, 1, 244, 2, 180, 2, 38, 4, 129, 0, 0, 1, 7, 4, 160, 254, 212, 255, + 161, 0, 15, 177, 4, 3, 184, 254, 208, 180, 72, 62, 3, 29, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 0, 71, 255, 86, 1, 176, 2, 185, 2, 38, 3, 170, 0, 0, 0, 38, 4, + 130, 0, 0, 1, 6, 4, 131, 149, 0, 0, 15, 177, 2, 1, 184, 255, 198, 180, 47, 31, + 0, 5, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, 71, 255, 86, 1, 176, 2, 185, 2, + 38, 3, 170, 0, 0, 0, 38, 4, 188, 9, 0, 1, 6, 4, 131, 149, 0, 0, 15, 177, + 2, 1, 184, 255, 202, 180, 46, 36, 0, 5, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, + 71, 255, 86, 1, 176, 2, 187, 2, 38, 3, 170, 0, 0, 0, 38, 4, 145, 0, 0, 1, + 6, 4, 131, 149, 0, 0, 17, 178, 3, 2, 1, 184, 255, 243, 180, 51, 39, 0, 5, 80, + 43, 52, 52, 52, 0, 255, 255, 0, 71, 255, 86, 1, 176, 2, 187, 2, 38, 3, 170, 0, + 0, 0, 38, 4, 158, 0, 0, 1, 6, 4, 131, 149, 0, 0, 17, 178, 3, 2, 1, 184, + 255, 238, 180, 49, 37, 0, 5, 80, 43, 52, 52, 52, 0, 255, 255, 0, 71, 255, 86, 1, + 176, 2, 187, 2, 38, 3, 170, 0, 0, 0, 38, 4, 146, 0, 0, 1, 6, 4, 131, 149, + 0, 0, 17, 178, 3, 2, 1, 184, 255, 238, 180, 51, 38, 0, 5, 80, 43, 52, 52, 52, + 0, 255, 255, 0, 71, 255, 86, 1, 176, 2, 187, 2, 38, 3, 170, 0, 0, 0, 38, 4, + 159, 18, 0, 1, 6, 4, 131, 149, 0, 0, 17, 178, 3, 2, 1, 184, 255, 252, 180, 49, + 36, 0, 5, 80, 43, 52, 52, 52, 0, 255, 255, 0, 71, 255, 86, 1, 176, 3, 19, 2, + 38, 3, 170, 0, 0, 0, 38, 4, 147, 0, 0, 1, 6, 4, 131, 149, 0, 0, 17, 178, + 3, 2, 1, 184, 255, 225, 180, 66, 41, 0, 5, 80, 43, 52, 52, 52, 0, 255, 255, 0, + 71, 255, 86, 1, 176, 3, 19, 2, 38, 3, 170, 0, 0, 0, 38, 4, 160, 0, 0, 1, + 6, 4, 131, 149, 0, 0, 17, 178, 3, 2, 1, 184, 255, 225, 180, 66, 41, 0, 5, 80, + 43, 52, 52, 52, 0, 255, 255, 255, 131, 255, 247, 1, 244, 2, 122, 2, 55, 4, 130, 254, + 202, 255, 193, 0, 6, 4, 144, 0, 0, 255, 255, 255, 131, 255, 247, 1, 244, 2, 122, 2, + 55, 4, 188, 254, 202, 255, 193, 0, 6, 4, 144, 0, 0, 255, 255, 254, 217, 255, 247, 1, + 244, 2, 124, 2, 38, 4, 144, 0, 0, 1, 7, 4, 145, 254, 121, 255, 193, 0, 15, 177, + 3, 2, 184, 254, 99, 180, 26, 45, 21, 13, 80, 43, 52, 52, 0, 0, 0, 255, 255, 254, + 234, 255, 247, 1, 244, 2, 124, 2, 38, 4, 144, 0, 0, 1, 7, 4, 158, 254, 129, 255, + 193, 0, 15, 177, 3, 2, 184, 254, 107, 180, 28, 43, 21, 13, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 254, 236, 255, 247, 1, 244, 2, 124, 2, 38, 4, 144, 0, 0, 1, 7, 4, + 146, 254, 130, 255, 193, 0, 15, 177, 3, 2, 184, 254, 108, 180, 26, 44, 21, 13, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 254, 217, 255, 247, 1, 244, 2, 124, 2, 38, 4, 144, 0, + 0, 1, 7, 4, 159, 254, 121, 255, 193, 0, 15, 177, 3, 2, 184, 254, 99, 180, 28, 42, + 21, 13, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 26, 255, 247, 1, 244, 2, 180, 2, + 38, 4, 144, 0, 0, 1, 7, 4, 147, 254, 151, 255, 161, 0, 15, 177, 3, 2, 184, 254, + 129, 180, 57, 47, 21, 13, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 26, 255, 247, 1, + 244, 2, 180, 2, 38, 4, 144, 0, 0, 1, 7, 4, 160, 254, 151, 255, 161, 0, 15, 177, + 3, 2, 184, 254, 129, 180, 57, 47, 21, 13, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, + 36, 255, 86, 1, 210, 2, 185, 2, 38, 3, 188, 0, 0, 0, 38, 4, 130, 0, 0, 1, + 6, 4, 131, 27, 0, 0, 12, 183, 2, 1, 19, 53, 75, 10, 47, 80, 43, 52, 52, 0, + 0, 255, 255, 0, 36, 255, 86, 1, 210, 2, 185, 2, 38, 3, 188, 0, 0, 0, 38, 4, + 188, 9, 0, 1, 6, 4, 131, 27, 0, 0, 12, 183, 2, 1, 23, 57, 74, 10, 47, 80, + 43, 52, 52, 0, 0, 255, 255, 0, 36, 255, 86, 1, 210, 2, 187, 2, 38, 3, 188, 0, + 0, 0, 38, 4, 145, 0, 0, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, + 255, 255, 180, 53, 72, 10, 47, 80, 43, 52, 52, 52, 0, 255, 255, 0, 36, 255, 86, 1, + 210, 2, 187, 2, 38, 3, 188, 0, 0, 0, 38, 4, 158, 0, 0, 1, 6, 4, 131, 27, + 0, 0, 17, 178, 3, 2, 1, 184, 255, 255, 180, 55, 70, 10, 47, 80, 43, 52, 52, 52, + 0, 255, 255, 0, 36, 255, 86, 1, 210, 2, 187, 2, 38, 3, 188, 0, 0, 0, 38, 4, + 146, 0, 0, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 255, 180, 53, + 71, 10, 47, 80, 43, 52, 52, 52, 0, 255, 255, 0, 36, 255, 86, 1, 210, 2, 187, 2, + 38, 3, 188, 0, 0, 0, 38, 4, 159, 18, 0, 1, 6, 4, 131, 27, 0, 0, 15, 64, + 9, 3, 2, 1, 17, 55, 69, 10, 47, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 0, + 36, 255, 86, 1, 210, 3, 19, 2, 38, 3, 188, 0, 0, 0, 38, 4, 147, 0, 0, 1, + 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 255, 180, 84, 74, 10, 47, 80, + 43, 52, 52, 52, 0, 255, 255, 0, 36, 255, 86, 1, 210, 3, 19, 2, 38, 3, 188, 0, + 0, 0, 38, 4, 160, 0, 0, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, + 255, 255, 180, 84, 74, 10, 47, 80, 43, 52, 52, 52, 0, 255, 255, 255, 150, 255, 247, 1, + 244, 2, 122, 2, 38, 4, 186, 0, 0, 1, 7, 4, 130, 254, 221, 255, 193, 0, 13, 185, + 0, 2, 254, 212, 180, 62, 73, 1, 61, 80, 43, 52, 0, 255, 255, 255, 123, 255, 247, 1, + 244, 2, 122, 2, 38, 4, 186, 0, 0, 1, 7, 4, 188, 254, 194, 255, 193, 0, 13, 185, + 0, 2, 254, 185, 180, 66, 78, 1, 61, 80, 43, 52, 0, 255, 255, 254, 204, 255, 247, 1, + 244, 2, 124, 2, 38, 4, 186, 0, 0, 1, 7, 4, 145, 254, 108, 255, 193, 0, 15, 177, + 3, 2, 184, 254, 99, 180, 62, 81, 1, 61, 80, 43, 52, 52, 0, 0, 0, 255, 255, 254, + 222, 255, 247, 1, 244, 2, 124, 2, 38, 4, 186, 0, 0, 1, 7, 4, 158, 254, 117, 255, + 193, 0, 15, 177, 3, 2, 184, 254, 108, 180, 64, 79, 1, 61, 80, 43, 52, 52, 0, 0, + 0, 255, 255, 255, 14, 255, 247, 1, 244, 2, 124, 2, 38, 4, 186, 0, 0, 1, 7, 4, + 146, 254, 164, 255, 193, 0, 15, 177, 3, 2, 184, 254, 155, 180, 62, 80, 1, 61, 80, 43, + 52, 52, 0, 0, 0, 255, 255, 254, 249, 255, 247, 1, 244, 2, 124, 2, 38, 4, 186, 0, + 0, 1, 7, 4, 159, 254, 153, 255, 193, 0, 15, 177, 3, 2, 184, 254, 144, 180, 64, 78, + 1, 61, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 68, 255, 247, 1, 244, 2, 180, 2, + 38, 4, 186, 0, 0, 1, 7, 4, 147, 254, 193, 255, 161, 0, 15, 177, 3, 2, 184, 254, + 184, 180, 93, 83, 1, 61, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 42, 255, 247, 1, + 244, 2, 180, 2, 38, 4, 186, 0, 0, 1, 7, 4, 160, 254, 167, 255, 161, 0, 15, 177, + 3, 2, 184, 254, 158, 180, 93, 83, 1, 61, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, + 49, 255, 246, 1, 215, 2, 157, 2, 38, 3, 164, 0, 0, 1, 6, 1, 97, 0, 0, 0, + 19, 185, 0, 2, 255, 246, 64, 9, 48, 62, 20, 9, 80, 2, 0, 44, 79, 43, 43, 52, + 0, 255, 255, 0, 49, 255, 246, 1, 215, 2, 123, 2, 38, 3, 164, 0, 0, 1, 6, 0, + 138, 0, 0, 0, 19, 185, 0, 2, 255, 246, 64, 9, 44, 45, 20, 9, 80, 2, 0, 46, + 79, 43, 43, 52, 0, 255, 255, 0, 49, 255, 86, 1, 215, 2, 181, 2, 38, 3, 164, 0, + 0, 0, 38, 4, 176, 4, 0, 1, 6, 4, 131, 18, 0, 0, 15, 177, 3, 2, 184, 255, + 250, 180, 47, 45, 20, 9, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, 49, 255, 86, 1, + 215, 1, 218, 2, 38, 3, 164, 0, 0, 1, 6, 4, 131, 18, 0, 0, 10, 182, 2, 11, + 53, 48, 20, 9, 80, 43, 52, 0, 0, 255, 255, 0, 49, 255, 86, 1, 215, 2, 181, 2, + 38, 3, 164, 0, 0, 0, 38, 4, 187, 30, 0, 1, 6, 4, 131, 18, 0, 0, 12, 183, + 3, 2, 19, 46, 44, 20, 9, 80, 43, 52, 52, 0, 0, 255, 255, 0, 49, 255, 246, 1, + 215, 2, 157, 2, 38, 3, 164, 0, 0, 1, 6, 4, 133, 18, 0, 0, 16, 64, 11, 2, + 8, 62, 48, 20, 9, 80, 2, 0, 49, 79, 43, 43, 52, 255, 255, 0, 49, 255, 86, 1, + 215, 2, 157, 2, 38, 3, 164, 0, 0, 0, 38, 4, 133, 18, 0, 1, 6, 4, 131, 18, + 0, 0, 12, 183, 3, 2, 8, 62, 48, 20, 9, 80, 43, 52, 52, 0, 0, 255, 255, 0, + 9, 0, 0, 1, 235, 3, 40, 2, 38, 0, 36, 0, 0, 1, 7, 1, 97, 0, 0, 0, + 139, 0, 16, 64, 11, 2, 0, 27, 41, 4, 15, 80, 2, 9, 23, 79, 43, 43, 52, 0, + 0, 255, 255, 0, 9, 0, 0, 1, 235, 3, 6, 2, 38, 0, 36, 0, 0, 1, 7, 0, + 138, 0, 0, 0, 139, 0, 16, 64, 11, 2, 0, 23, 24, 4, 15, 80, 2, 9, 25, 79, + 43, 43, 52, 0, 0, 255, 255, 255, 191, 0, 0, 1, 235, 2, 118, 2, 38, 0, 36, 0, + 0, 1, 7, 0, 67, 255, 28, 255, 193, 0, 13, 185, 0, 2, 255, 25, 180, 26, 24, 4, + 15, 80, 43, 52, 0, 255, 255, 255, 226, 0, 0, 1, 235, 2, 118, 2, 38, 0, 36, 0, + 0, 1, 7, 0, 143, 255, 56, 255, 193, 0, 13, 185, 0, 2, 255, 60, 180, 25, 23, 4, + 15, 80, 43, 52, 0, 0, 3, 0, 9, 255, 247, 1, 244, 2, 107, 0, 15, 0, 29, 0, + 40, 0, 136, 64, 75, 0, 36, 38, 39, 40, 30, 9, 15, 30, 15, 120, 14, 9, 20, 14, + 14, 9, 1, 33, 32, 31, 30, 8, 2, 30, 2, 120, 3, 8, 20, 3, 3, 8, 30, 3, + 175, 14, 191, 14, 2, 57, 14, 1, 14, 14, 21, 115, 24, 24, 29, 3, 22, 73, 29, 124, + 16, 70, 15, 14, 68, 9, 65, 0, 1, 121, 36, 35, 35, 3, 30, 8, 65, 2, 3, 68, + 0, 63, 51, 63, 51, 18, 57, 47, 51, 237, 50, 63, 63, 51, 63, 237, 63, 1, 47, 47, + 50, 47, 237, 50, 47, 93, 93, 18, 57, 135, 16, 43, 135, 125, 196, 16, 14, 196, 196, 196, + 5, 196, 135, 24, 16, 43, 135, 125, 196, 16, 14, 196, 196, 196, 5, 196, 196, 49, 48, 55, + 35, 7, 35, 62, 3, 55, 51, 30, 3, 23, 35, 23, 46, 3, 53, 17, 51, 17, 20, 30, + 2, 23, 1, 14, 3, 7, 51, 46, 3, 238, 132, 22, 75, 11, 25, 28, 33, 18, 102, 18, + 32, 28, 24, 11, 78, 228, 35, 45, 25, 9, 73, 4, 12, 20, 16, 254, 184, 5, 11, 13, + 17, 10, 112, 10, 17, 13, 12, 162, 162, 66, 154, 162, 163, 74, 74, 163, 162, 154, 66, 9, + 3, 20, 33, 46, 30, 1, 85, 254, 185, 19, 25, 18, 10, 4, 1, 230, 23, 55, 75, 98, + 66, 67, 99, 74, 55, 0, 1, 0, 185, 2, 1, 1, 58, 2, 185, 0, 17, 0, 24, 64, + 9, 3, 12, 17, 0, 6, 9, 3, 0, 17, 0, 47, 51, 221, 205, 1, 47, 206, 50, 205, + 50, 49, 48, 19, 54, 54, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, + 185, 18, 28, 10, 15, 19, 30, 22, 23, 32, 16, 26, 36, 19, 2, 32, 15, 28, 17, 6, + 24, 15, 21, 27, 28, 27, 15, 34, 35, 32, 13, 0, 1, 0, 179, 255, 86, 1, 72, 255, + 211, 0, 14, 0, 19, 182, 5, 0, 10, 7, 3, 14, 15, 0, 16, 222, 222, 205, 1, 47, + 221, 204, 49, 48, 5, 20, 22, 51, 51, 21, 6, 35, 34, 38, 53, 52, 54, 55, 51, 1, + 5, 19, 33, 15, 23, 19, 46, 61, 1, 1, 80, 58, 29, 29, 48, 6, 48, 57, 4, 11, + 5, 255, 255, 0, 185, 2, 1, 1, 58, 2, 185, 2, 6, 4, 130, 0, 0, 0, 1, 0, + 130, 2, 33, 1, 114, 2, 157, 0, 21, 0, 21, 183, 5, 6, 17, 16, 0, 11, 6, 16, + 0, 47, 51, 222, 205, 1, 47, 205, 222, 205, 49, 48, 19, 50, 30, 2, 7, 35, 46, 3, + 35, 34, 14, 2, 7, 35, 38, 62, 2, 250, 25, 44, 33, 18, 1, 54, 1, 6, 14, 25, + 19, 19, 24, 15, 6, 1, 54, 1, 18, 33, 44, 2, 157, 17, 32, 46, 29, 10, 23, 19, + 12, 12, 19, 23, 10, 29, 46, 32, 17, 0, 3, 0, 112, 2, 12, 1, 132, 3, 4, 0, + 11, 0, 23, 0, 43, 0, 40, 64, 17, 29, 31, 38, 37, 9, 21, 15, 3, 9, 24, 34, + 31, 37, 18, 6, 12, 0, 0, 47, 50, 221, 50, 222, 50, 222, 205, 1, 47, 205, 222, 205, + 16, 212, 205, 222, 205, 49, 48, 19, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 51, + 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 39, 50, 30, 2, 21, 21, 35, 38, 38, + 35, 34, 6, 7, 35, 53, 52, 62, 2, 160, 21, 27, 27, 21, 21, 27, 27, 159, 20, 28, + 28, 20, 20, 28, 28, 110, 23, 43, 33, 20, 48, 2, 34, 35, 35, 34, 2, 48, 20, 33, + 43, 2, 12, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 248, + 14, 28, 40, 27, 2, 21, 36, 36, 21, 2, 27, 40, 28, 14, 255, 255, 0, 71, 255, 86, + 1, 176, 2, 181, 2, 38, 3, 170, 0, 0, 0, 38, 4, 176, 4, 0, 1, 6, 4, 131, + 149, 0, 0, 15, 177, 2, 1, 184, 255, 216, 180, 33, 21, 0, 5, 80, 43, 52, 52, 0, + 0, 0, 255, 255, 0, 71, 255, 86, 1, 176, 1, 218, 2, 38, 3, 170, 0, 0, 1, 6, + 4, 131, 149, 0, 0, 13, 185, 0, 1, 255, 151, 180, 29, 24, 0, 5, 80, 43, 52, 0, + 0, 0, 255, 255, 0, 71, 255, 86, 1, 176, 2, 181, 2, 38, 3, 170, 0, 0, 0, 38, + 4, 187, 30, 0, 1, 6, 4, 131, 149, 0, 0, 15, 177, 2, 1, 184, 255, 229, 180, 33, + 20, 0, 5, 80, 43, 52, 52, 0, 0, 0, 255, 255, 0, 71, 255, 91, 1, 176, 2, 157, + 2, 38, 3, 170, 0, 0, 1, 6, 4, 133, 0, 0, 0, 19, 185, 0, 1, 255, 255, 64, + 9, 38, 24, 0, 5, 80, 1, 2, 25, 79, 43, 43, 52, 0, 255, 255, 0, 71, 255, 86, + 1, 176, 2, 157, 2, 38, 3, 170, 0, 0, 0, 38, 4, 133, 0, 0, 1, 6, 4, 131, + 149, 0, 0, 15, 177, 2, 1, 184, 255, 226, 180, 51, 24, 0, 5, 80, 43, 52, 52, 0, + 0, 0, 255, 255, 255, 132, 0, 0, 1, 204, 2, 118, 2, 38, 0, 40, 0, 0, 1, 7, + 0, 67, 254, 225, 255, 193, 0, 13, 185, 0, 1, 254, 196, 180, 15, 13, 0, 10, 80, 43, + 52, 0, 255, 255, 255, 134, 0, 0, 1, 204, 2, 118, 2, 38, 0, 40, 0, 0, 1, 7, + 0, 143, 254, 220, 255, 193, 0, 13, 185, 0, 1, 254, 199, 180, 14, 12, 0, 10, 80, 43, + 52, 0, 255, 255, 255, 85, 0, 0, 1, 199, 2, 118, 2, 38, 0, 43, 0, 0, 1, 7, + 0, 67, 254, 178, 255, 193, 0, 13, 185, 0, 1, 254, 175, 180, 15, 13, 7, 1, 80, 43, + 52, 0, 255, 255, 255, 89, 0, 0, 1, 199, 2, 118, 2, 38, 0, 43, 0, 0, 1, 7, + 0, 143, 254, 175, 255, 193, 0, 13, 185, 0, 1, 254, 179, 180, 14, 12, 7, 1, 80, 43, + 52, 0, 0, 2, 0, 45, 255, 247, 1, 244, 2, 107, 0, 13, 0, 25, 0, 75, 64, 45, + 24, 20, 115, 48, 21, 64, 21, 2, 21, 25, 17, 115, 15, 16, 47, 16, 2, 16, 5, 115, + 15, 8, 31, 8, 2, 8, 8, 13, 19, 121, 24, 24, 21, 14, 22, 65, 17, 21, 68, 6, + 73, 13, 136, 0, 81, 0, 63, 237, 63, 63, 51, 63, 51, 18, 57, 47, 237, 1, 47, 222, + 94, 93, 253, 222, 93, 237, 50, 47, 93, 237, 50, 49, 48, 5, 46, 3, 53, 17, 51, 17, + 20, 30, 2, 23, 1, 51, 17, 35, 17, 35, 17, 35, 17, 51, 17, 51, 1, 233, 35, 45, + 25, 9, 73, 4, 12, 20, 16, 254, 251, 74, 74, 121, 73, 73, 121, 9, 3, 20, 33, 46, + 30, 1, 85, 254, 185, 19, 25, 18, 10, 4, 2, 46, 253, 149, 1, 32, 254, 224, 2, 107, + 254, 251, 0, 2, 0, 96, 2, 1, 1, 148, 2, 187, 0, 17, 0, 21, 0, 52, 64, 23, + 20, 64, 19, 128, 18, 21, 12, 17, 0, 6, 3, 12, 19, 20, 20, 17, 21, 18, 18, 9, + 3, 0, 17, 0, 47, 51, 221, 205, 50, 47, 51, 17, 51, 47, 51, 1, 47, 51, 221, 206, + 50, 16, 222, 205, 26, 221, 26, 205, 49, 48, 19, 54, 54, 55, 38, 38, 53, 52, 54, 51, + 50, 22, 21, 20, 14, 2, 7, 55, 23, 7, 39, 96, 19, 26, 10, 16, 16, 27, 23, 21, + 31, 16, 25, 33, 18, 177, 98, 47, 112, 2, 32, 15, 28, 17, 6, 24, 15, 21, 27, 28, + 27, 15, 34, 34, 33, 13, 186, 152, 34, 142, 0, 2, 0, 106, 2, 1, 1, 138, 2, 187, + 0, 17, 0, 21, 0, 54, 64, 24, 21, 64, 18, 128, 19, 20, 20, 12, 17, 0, 6, 3, + 12, 20, 19, 19, 17, 18, 21, 21, 9, 3, 0, 17, 0, 47, 51, 221, 205, 50, 47, 51, + 17, 51, 47, 51, 1, 47, 51, 221, 206, 50, 17, 51, 47, 205, 26, 221, 26, 205, 49, 48, + 19, 54, 54, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, 37, 7, 39, + 55, 106, 18, 26, 11, 16, 16, 27, 23, 21, 30, 15, 26, 33, 18, 1, 0, 113, 46, 97, + 2, 32, 15, 28, 17, 6, 24, 15, 21, 27, 28, 27, 15, 34, 34, 33, 13, 142, 142, 34, + 152, 0, 2, 0, 131, 2, 1, 1, 113, 3, 19, 0, 16, 0, 36, 0, 44, 64, 19, 22, + 24, 31, 30, 30, 16, 0, 5, 2, 11, 17, 27, 24, 30, 30, 8, 2, 0, 16, 0, 47, + 51, 221, 205, 50, 47, 51, 222, 205, 1, 47, 51, 221, 206, 50, 51, 47, 205, 222, 205, 49, + 48, 19, 54, 55, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 14, 2, 7, 19, 50, 30, + 2, 21, 21, 35, 38, 38, 35, 34, 6, 7, 35, 53, 52, 62, 2, 179, 36, 14, 11, 14, + 23, 25, 21, 27, 18, 28, 34, 16, 46, 23, 43, 33, 20, 48, 2, 34, 35, 35, 34, 2, + 48, 20, 33, 43, 2, 32, 26, 19, 8, 20, 12, 16, 27, 26, 26, 17, 31, 27, 23, 9, + 1, 18, 14, 28, 41, 27, 2, 21, 36, 36, 21, 2, 27, 41, 28, 14, 255, 255, 0, 54, + 255, 245, 1, 194, 2, 157, 2, 38, 3, 172, 0, 0, 1, 6, 1, 97, 221, 0, 0, 19, + 185, 0, 1, 255, 219, 64, 9, 26, 40, 10, 0, 80, 1, 11, 22, 79, 43, 43, 52, 0, + 255, 255, 0, 54, 255, 245, 1, 194, 2, 123, 2, 38, 3, 172, 0, 0, 1, 6, 0, 138, + 221, 0, 0, 19, 185, 0, 1, 255, 219, 64, 9, 22, 23, 10, 0, 80, 1, 11, 24, 79, + 43, 43, 52, 0, 255, 255, 0, 38, 255, 245, 1, 194, 2, 185, 2, 38, 3, 172, 0, 0, + 1, 6, 4, 174, 221, 0, 0, 33, 178, 3, 2, 1, 184, 255, 219, 64, 17, 28, 46, 10, + 0, 80, 3, 11, 38, 79, 2, 11, 26, 79, 1, 11, 24, 79, 43, 43, 43, 43, 52, 52, + 52, 0, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 185, 2, 38, 3, 172, 0, 0, + 1, 6, 3, 211, 248, 0, 0, 33, 178, 3, 2, 1, 184, 255, 237, 64, 17, 40, 34, 10, + 0, 80, 3, 11, 38, 79, 2, 11, 26, 79, 1, 11, 23, 79, 43, 43, 43, 43, 52, 52, + 52, 0, 0, 0, 255, 255, 0, 54, 255, 245, 1, 194, 2, 157, 2, 38, 3, 172, 0, 0, + 1, 6, 4, 133, 221, 0, 0, 19, 185, 0, 1, 255, 219, 64, 9, 40, 26, 10, 0, 80, + 1, 11, 27, 79, 43, 43, 52, 0, 255, 255, 0, 54, 255, 245, 1, 194, 3, 4, 2, 38, + 3, 172, 0, 0, 1, 6, 4, 134, 221, 0, 0, 33, 178, 3, 2, 1, 184, 255, 219, 64, + 17, 24, 42, 10, 0, 80, 3, 11, 52, 79, 2, 11, 34, 79, 1, 11, 22, 79, 43, 43, + 43, 43, 52, 52, 52, 0, 0, 0, 255, 255, 0, 89, 0, 0, 1, 155, 3, 40, 2, 38, + 0, 44, 0, 0, 1, 7, 1, 97, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, 16, 30, + 4, 2, 80, 1, 9, 12, 79, 43, 43, 52, 0, 0, 255, 255, 0, 89, 0, 0, 1, 155, + 3, 6, 2, 38, 0, 44, 0, 0, 1, 7, 0, 138, 0, 0, 0, 139, 0, 16, 64, 11, + 1, 0, 12, 13, 4, 2, 80, 1, 9, 14, 79, 43, 43, 52, 0, 0, 255, 255, 255, 131, + 0, 0, 1, 155, 2, 118, 2, 38, 0, 44, 0, 0, 1, 7, 0, 67, 254, 224, 255, 193, + 0, 13, 185, 0, 1, 254, 221, 180, 15, 13, 4, 2, 80, 43, 52, 0, 255, 255, 255, 133, + 0, 0, 1, 155, 2, 118, 2, 38, 0, 44, 0, 0, 1, 7, 0, 143, 254, 219, 255, 193, + 0, 13, 185, 0, 1, 254, 223, 180, 14, 12, 4, 2, 80, 43, 52, 0, 0, 2, 0, 105, + 2, 1, 1, 139, 2, 187, 0, 15, 0, 19, 0, 50, 64, 22, 18, 64, 17, 128, 16, 19, + 0, 15, 12, 3, 9, 17, 18, 18, 0, 19, 16, 16, 6, 12, 15, 0, 0, 47, 50, 221, + 205, 50, 47, 51, 17, 51, 47, 51, 1, 47, 205, 50, 206, 50, 222, 205, 26, 221, 26, 205, + 49, 48, 19, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 7, 22, 22, 23, 55, 23, + 7, 39, 197, 36, 56, 31, 21, 23, 27, 16, 16, 10, 26, 19, 67, 98, 47, 112, 2, 1, + 28, 70, 31, 27, 28, 27, 21, 15, 24, 6, 17, 28, 15, 155, 152, 34, 142, 0, 2, 0, + 96, 2, 1, 1, 148, 2, 187, 0, 15, 0, 19, 0, 50, 64, 22, 19, 64, 16, 128, 17, + 18, 0, 15, 12, 3, 9, 18, 17, 17, 0, 16, 19, 19, 6, 12, 15, 0, 0, 47, 50, + 221, 205, 50, 47, 51, 17, 51, 47, 51, 1, 47, 205, 50, 206, 50, 222, 205, 26, 221, 26, + 205, 49, 48, 19, 38, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, 7, 22, 22, 23, 55, + 7, 39, 55, 188, 36, 56, 31, 21, 23, 27, 16, 16, 10, 26, 19, 183, 113, 46, 97, 2, + 1, 28, 70, 31, 27, 28, 27, 21, 15, 24, 6, 17, 28, 15, 111, 142, 34, 152, 0, 2, + 0, 131, 2, 1, 1, 113, 3, 19, 0, 16, 0, 36, 0, 46, 64, 20, 0, 16, 11, 22, + 24, 31, 30, 30, 14, 5, 11, 17, 27, 24, 30, 30, 8, 14, 16, 0, 0, 47, 50, 221, + 205, 50, 47, 51, 222, 205, 1, 47, 205, 50, 50, 47, 205, 222, 205, 16, 206, 50, 49, 48, + 1, 46, 3, 53, 52, 54, 51, 50, 22, 21, 20, 6, 7, 22, 23, 39, 50, 30, 2, 21, + 21, 35, 38, 38, 35, 34, 6, 7, 35, 53, 52, 62, 2, 1, 40, 16, 34, 28, 18, 28, + 20, 25, 23, 14, 11, 14, 36, 71, 23, 43, 33, 20, 48, 2, 34, 35, 35, 34, 2, 48, + 20, 33, 43, 2, 1, 9, 23, 27, 31, 17, 26, 26, 27, 16, 12, 20, 8, 19, 26, 243, + 14, 28, 41, 27, 2, 21, 36, 36, 21, 2, 27, 41, 28, 14, 255, 255, 0, 71, 255, 246, + 1, 171, 2, 157, 2, 38, 3, 184, 0, 0, 1, 6, 1, 97, 0, 0, 0, 16, 64, 11, + 1, 1, 26, 40, 4, 16, 80, 1, 6, 22, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, + 1, 171, 2, 123, 2, 38, 3, 184, 0, 0, 1, 6, 0, 138, 0, 0, 0, 16, 64, 11, + 1, 1, 22, 23, 4, 16, 80, 1, 6, 24, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, + 1, 171, 2, 185, 2, 38, 3, 184, 0, 0, 1, 6, 4, 174, 0, 0, 0, 30, 64, 21, + 3, 2, 1, 1, 28, 46, 4, 16, 80, 3, 6, 38, 79, 2, 6, 26, 79, 1, 6, 24, + 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 71, 255, 246, 1, 171, 2, 185, + 2, 38, 3, 184, 0, 0, 1, 6, 3, 211, 9, 0, 0, 30, 64, 21, 3, 2, 1, 1, + 40, 34, 4, 16, 80, 3, 6, 38, 79, 2, 6, 26, 79, 1, 6, 23, 79, 43, 43, 43, + 43, 52, 52, 52, 0, 0, 255, 255, 0, 71, 255, 91, 1, 204, 2, 185, 2, 38, 3, 180, + 0, 0, 1, 6, 4, 130, 0, 0, 0, 19, 185, 0, 2, 255, 240, 64, 9, 32, 43, 5, + 11, 80, 2, 8, 49, 79, 43, 43, 52, 0, 255, 255, 0, 71, 255, 91, 1, 204, 2, 185, + 2, 38, 3, 180, 0, 0, 1, 6, 4, 188, 9, 0, 0, 19, 185, 0, 2, 255, 249, 64, + 9, 36, 48, 5, 11, 80, 2, 8, 32, 79, 43, 43, 52, 0, 255, 255, 0, 71, 255, 246, + 1, 171, 2, 157, 2, 38, 3, 184, 0, 0, 1, 6, 4, 133, 0, 0, 0, 16, 64, 11, + 1, 1, 40, 26, 4, 16, 80, 1, 6, 27, 79, 43, 43, 52, 255, 255, 0, 71, 255, 246, + 1, 171, 3, 4, 2, 38, 3, 184, 0, 0, 1, 6, 4, 134, 0, 0, 0, 30, 64, 21, + 3, 2, 1, 1, 24, 42, 4, 16, 80, 3, 6, 52, 79, 2, 6, 34, 79, 1, 6, 22, + 79, 43, 43, 43, 43, 52, 52, 52, 0, 0, 255, 255, 0, 13, 0, 0, 1, 232, 3, 40, + 2, 38, 0, 60, 0, 0, 1, 7, 1, 97, 0, 0, 0, 139, 0, 16, 64, 11, 1, 0, + 21, 35, 4, 12, 80, 1, 4, 17, 79, 43, 43, 52, 0, 0, 255, 255, 0, 13, 0, 0, + 1, 232, 3, 6, 2, 38, 0, 60, 0, 0, 1, 7, 0, 138, 0, 0, 0, 139, 0, 16, + 64, 11, 1, 0, 17, 18, 4, 12, 80, 1, 4, 19, 79, 43, 43, 52, 0, 0, 255, 255, + 255, 102, 0, 0, 1, 232, 2, 118, 2, 38, 0, 60, 0, 0, 1, 7, 0, 67, 254, 195, + 255, 193, 0, 13, 185, 0, 1, 254, 191, 180, 20, 18, 4, 12, 80, 43, 52, 0, 255, 255, + 255, 66, 0, 0, 1, 232, 2, 118, 2, 55, 0, 143, 254, 152, 255, 193, 0, 6, 0, 60, + 0, 0, 255, 255, 255, 164, 0, 0, 1, 199, 2, 122, 2, 38, 3, 156, 0, 0, 1, 7, + 4, 188, 254, 235, 255, 193, 0, 13, 185, 0, 2, 254, 221, 180, 34, 46, 9, 2, 80, 43, + 52, 0, 0, 3, 0, 73, 2, 4, 1, 171, 2, 185, 0, 3, 0, 15, 0, 27, 0, 52, + 64, 23, 25, 19, 19, 2, 64, 1, 128, 0, 3, 3, 7, 13, 22, 10, 64, 16, 4, 4, + 3, 0, 128, 1, 2, 0, 47, 51, 26, 205, 50, 51, 47, 51, 26, 205, 50, 1, 47, 205, + 51, 47, 205, 26, 221, 26, 205, 51, 47, 205, 49, 48, 19, 23, 7, 39, 7, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 51, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, + 240, 80, 47, 93, 59, 20, 28, 28, 20, 21, 28, 28, 237, 21, 28, 28, 21, 20, 28, 28, + 2, 185, 153, 28, 142, 103, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, 27, 22, + 23, 26, 0, 3, 0, 73, 2, 4, 1, 171, 2, 185, 0, 3, 0, 15, 0, 27, 0, 52, + 64, 23, 13, 7, 7, 3, 64, 0, 128, 1, 2, 2, 19, 25, 10, 22, 64, 4, 16, 16, + 0, 3, 128, 2, 1, 0, 47, 51, 26, 205, 50, 51, 47, 51, 26, 205, 50, 1, 47, 205, + 51, 47, 205, 26, 221, 26, 205, 51, 47, 205, 49, 48, 1, 7, 39, 55, 23, 34, 38, 53, + 52, 54, 51, 50, 22, 21, 20, 6, 33, 34, 38, 53, 52, 54, 51, 50, 22, 21, 20, 6, + 1, 64, 93, 47, 80, 119, 21, 28, 28, 21, 20, 28, 28, 254, 234, 19, 29, 29, 19, 21, + 28, 28, 2, 146, 142, 28, 153, 142, 26, 23, 22, 27, 27, 22, 23, 26, 26, 23, 22, 27, + 27, 22, 23, 26, 0, 1, 0, 152, 2, 6, 1, 91, 2, 181, 0, 3, 0, 26, 64, 10, + 0, 3, 2, 1, 3, 64, 0, 128, 1, 2, 0, 47, 205, 26, 221, 26, 205, 1, 47, 51, + 205, 50, 49, 48, 19, 23, 7, 39, 199, 148, 35, 160, 2, 181, 129, 46, 113, 255, 255, 0, + 36, 255, 86, 1, 210, 2, 181, 2, 38, 3, 188, 0, 0, 0, 38, 4, 176, 4, 0, 1, + 6, 4, 131, 27, 0, 0, 12, 183, 2, 1, 4, 56, 61, 10, 47, 80, 43, 52, 52, 0, + 0, 255, 255, 0, 36, 255, 86, 1, 210, 1, 218, 2, 38, 3, 188, 0, 0, 1, 6, 4, + 131, 27, 0, 0, 10, 182, 1, 29, 62, 57, 10, 47, 80, 43, 52, 0, 0, 255, 255, 0, + 36, 255, 86, 1, 210, 2, 187, 2, 38, 3, 188, 0, 0, 0, 38, 3, 209, 25, 0, 1, + 6, 4, 131, 27, 0, 0, 12, 183, 2, 1, 21, 55, 61, 10, 47, 80, 43, 52, 52, 0, + 0, 255, 255, 0, 36, 255, 247, 1, 210, 2, 157, 2, 38, 3, 188, 0, 0, 1, 6, 4, + 133, 0, 0, 0, 19, 185, 0, 1, 255, 255, 64, 9, 71, 57, 10, 47, 80, 1, 16, 58, + 79, 43, 43, 52, 0, 255, 255, 0, 36, 255, 86, 1, 210, 2, 157, 2, 38, 3, 188, 0, + 0, 0, 38, 4, 131, 27, 0, 1, 6, 4, 133, 0, 0, 0, 15, 177, 2, 1, 184, 255, + 255, 180, 86, 72, 10, 47, 80, 43, 52, 52, 0, 0, 0, 255, 255, 255, 112, 255, 243, 1, + 216, 2, 121, 2, 38, 0, 50, 0, 0, 1, 7, 0, 67, 254, 205, 255, 193, 0, 13, 185, + 0, 2, 254, 201, 180, 35, 33, 0, 9, 80, 43, 52, 0, 255, 255, 255, 156, 255, 243, 1, + 216, 2, 121, 2, 55, 0, 143, 254, 242, 255, 193, 0, 6, 0, 50, 0, 0, 255, 255, 255, + 110, 0, 0, 1, 226, 2, 121, 2, 38, 3, 163, 0, 0, 1, 7, 0, 67, 254, 203, 255, + 193, 0, 13, 185, 0, 1, 254, 200, 180, 47, 45, 0, 18, 80, 43, 52, 0, 255, 255, 255, + 154, 0, 0, 1, 226, 2, 121, 2, 38, 3, 163, 0, 0, 1, 7, 0, 143, 254, 240, 255, + 193, 0, 13, 185, 0, 1, 254, 244, 180, 46, 44, 0, 18, 80, 43, 52, 0, 0, 2, 0, + 18, 255, 247, 1, 244, 2, 121, 0, 47, 0, 61, 0, 180, 185, 0, 39, 255, 240, 64, 15, + 15, 16, 0, 76, 35, 32, 16, 0, 77, 35, 24, 15, 0, 77, 15, 184, 255, 224, 179, 20, + 0, 77, 15, 184, 255, 240, 179, 19, 0, 77, 15, 184, 255, 232, 64, 87, 17, 18, 0, 76, + 11, 16, 18, 20, 0, 76, 11, 24, 17, 0, 77, 23, 95, 27, 111, 27, 2, 27, 64, 19, + 22, 72, 27, 27, 32, 118, 18, 24, 24, 15, 18, 31, 18, 47, 18, 3, 18, 53, 115, 15, + 56, 1, 8, 56, 61, 3, 176, 47, 192, 47, 208, 47, 3, 161, 47, 1, 47, 47, 42, 118, + 8, 2, 2, 8, 54, 73, 61, 136, 48, 81, 37, 124, 13, 69, 27, 47, 47, 23, 3, 121, + 26, 0, 68, 0, 63, 50, 237, 50, 50, 17, 51, 63, 237, 63, 237, 63, 1, 47, 51, 47, + 16, 237, 50, 47, 93, 93, 51, 47, 222, 94, 93, 253, 206, 93, 50, 47, 16, 237, 50, 47, + 43, 93, 51, 49, 48, 43, 43, 43, 43, 43, 43, 43, 43, 51, 35, 53, 51, 46, 3, 53, + 52, 62, 2, 51, 50, 30, 2, 21, 20, 14, 2, 7, 51, 21, 35, 53, 62, 3, 53, 52, + 46, 2, 35, 34, 14, 2, 21, 20, 30, 2, 23, 5, 46, 3, 53, 17, 51, 17, 20, 30, + 2, 23, 154, 136, 67, 13, 22, 17, 9, 17, 35, 56, 39, 39, 55, 35, 17, 10, 16, 22, + 13, 65, 134, 12, 21, 15, 9, 7, 16, 28, 22, 22, 28, 17, 7, 9, 15, 21, 12, 1, + 79, 35, 45, 25, 9, 73, 4, 12, 20, 16, 70, 22, 65, 76, 81, 39, 57, 102, 76, 45, + 45, 76, 101, 57, 39, 82, 76, 65, 22, 70, 60, 21, 64, 75, 80, 38, 47, 82, 60, 35, + 35, 60, 82, 47, 38, 80, 75, 64, 21, 69, 3, 20, 33, 46, 30, 1, 85, 254, 185, 19, + 25, 18, 10, 4, 0, 1, 0, 152, 2, 6, 1, 91, 2, 181, 0, 3, 0, 26, 64, 10, + 3, 0, 1, 2, 0, 64, 3, 128, 2, 1, 0, 47, 205, 26, 221, 26, 205, 1, 47, 51, + 205, 50, 49, 48, 1, 7, 39, 55, 1, 91, 159, 36, 148, 2, 119, 113, 46, 129, 0, 1, + 0, 185, 2, 1, 1, 58, 2, 185, 0, 16, 0, 24, 64, 9, 0, 16, 13, 5, 11, 8, + 13, 16, 0, 0, 47, 50, 221, 205, 1, 47, 205, 50, 206, 50, 49, 48, 1, 46, 3, 53, + 52, 54, 51, 50, 22, 21, 20, 7, 22, 22, 23, 1, 26, 20, 35, 26, 16, 32, 23, 23, + 29, 34, 10, 28, 18, 2, 1, 13, 32, 35, 34, 15, 27, 28, 27, 21, 32, 13, 17, 28, + 15, 255, 255, 0, 6, 255, 86, 1, 235, 2, 122, 2, 38, 0, 36, 0, 0, 0, 39, 4, + 130, 255, 77, 255, 193, 1, 6, 4, 131, 18, 0, 0, 15, 177, 3, 2, 184, 255, 182, 180, + 23, 45, 4, 15, 80, 43, 52, 52, 0, 255, 255, 255, 245, 255, 86, 1, 235, 2, 122, 2, + 38, 0, 36, 0, 0, 0, 39, 4, 188, 255, 60, 255, 193, 1, 6, 4, 131, 18, 0, 0, + 15, 177, 3, 2, 184, 255, 174, 180, 27, 44, 4, 15, 80, 43, 52, 52, 0, 255, 255, 255, + 69, 255, 86, 1, 235, 2, 124, 2, 38, 0, 36, 0, 0, 0, 39, 4, 145, 254, 229, 255, + 193, 1, 6, 4, 131, 18, 0, 0, 17, 178, 4, 3, 2, 184, 255, 86, 180, 23, 49, 4, + 15, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, 88, 255, 86, 1, 235, 2, 124, 2, + 38, 0, 36, 0, 0, 0, 39, 4, 158, 254, 239, 255, 193, 1, 6, 4, 131, 18, 0, 0, + 17, 178, 4, 3, 2, 184, 255, 95, 180, 25, 47, 4, 15, 80, 43, 52, 52, 52, 0, 0, + 0, 255, 255, 255, 120, 255, 86, 1, 235, 2, 124, 2, 38, 0, 36, 0, 0, 0, 39, 4, + 146, 255, 14, 255, 193, 1, 6, 4, 131, 18, 0, 0, 17, 178, 4, 3, 2, 184, 255, 111, + 180, 23, 49, 4, 15, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, 98, 255, 86, 1, + 235, 2, 124, 2, 38, 0, 36, 0, 0, 0, 39, 4, 159, 255, 2, 255, 193, 1, 6, 4, + 131, 18, 0, 0, 17, 178, 4, 3, 2, 184, 255, 100, 180, 25, 47, 4, 15, 80, 43, 52, + 52, 52, 0, 0, 0, 255, 255, 255, 174, 255, 86, 1, 235, 2, 180, 2, 38, 0, 36, 0, + 0, 0, 39, 4, 147, 255, 43, 255, 161, 1, 6, 4, 131, 18, 0, 0, 17, 178, 4, 3, + 2, 184, 255, 138, 180, 54, 64, 4, 15, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, + 164, 255, 86, 1, 235, 2, 180, 2, 38, 0, 36, 0, 0, 0, 39, 4, 160, 255, 33, 255, + 161, 1, 6, 4, 131, 18, 0, 0, 17, 178, 4, 3, 2, 184, 255, 133, 180, 54, 64, 4, + 15, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, 131, 255, 86, 1, 199, 2, 122, 2, + 38, 0, 43, 0, 0, 0, 39, 4, 130, 254, 202, 255, 193, 1, 6, 4, 131, 27, 0, 0, + 15, 177, 2, 1, 184, 255, 121, 180, 12, 34, 7, 1, 80, 43, 52, 52, 0, 255, 255, 255, + 136, 255, 86, 1, 199, 2, 122, 2, 38, 0, 43, 0, 0, 0, 39, 4, 188, 254, 207, 255, + 193, 1, 6, 4, 131, 27, 0, 0, 15, 177, 2, 1, 184, 255, 124, 180, 16, 33, 7, 1, + 80, 43, 52, 52, 0, 255, 255, 254, 217, 255, 86, 1, 199, 2, 124, 2, 38, 0, 43, 0, + 0, 0, 39, 4, 145, 254, 121, 255, 193, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, + 1, 184, 255, 36, 180, 12, 38, 7, 1, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 254, + 234, 255, 86, 1, 199, 2, 124, 2, 38, 0, 43, 0, 0, 0, 39, 4, 158, 254, 129, 255, + 193, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 45, 180, 14, 36, 7, + 1, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 254, 236, 255, 86, 1, 199, 2, 124, 2, + 38, 0, 43, 0, 0, 0, 39, 4, 146, 254, 130, 255, 193, 1, 6, 4, 131, 27, 0, 0, + 17, 178, 3, 2, 1, 184, 255, 46, 180, 12, 38, 7, 1, 80, 43, 52, 52, 52, 0, 0, + 0, 255, 255, 254, 217, 255, 86, 1, 199, 2, 124, 2, 38, 0, 43, 0, 0, 0, 39, 4, + 159, 254, 121, 255, 193, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 36, + 180, 14, 36, 7, 1, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, 26, 255, 86, 1, + 199, 2, 180, 2, 38, 0, 43, 0, 0, 0, 39, 4, 147, 254, 151, 255, 161, 1, 6, 4, + 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 69, 180, 43, 53, 7, 1, 80, 43, 52, + 52, 52, 0, 0, 0, 255, 255, 255, 26, 255, 86, 1, 199, 2, 180, 2, 38, 0, 43, 0, + 0, 0, 39, 4, 160, 254, 151, 255, 161, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, + 1, 184, 255, 69, 180, 43, 53, 7, 1, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, + 159, 255, 86, 1, 226, 2, 122, 2, 38, 3, 163, 0, 0, 0, 39, 4, 130, 254, 230, 255, + 193, 1, 6, 4, 131, 27, 0, 0, 15, 177, 2, 1, 184, 255, 135, 180, 44, 66, 0, 18, + 80, 43, 52, 52, 0, 255, 255, 255, 132, 255, 86, 1, 226, 2, 122, 2, 38, 3, 163, 0, + 0, 0, 39, 4, 188, 254, 203, 255, 193, 1, 6, 4, 131, 27, 0, 0, 15, 177, 2, 1, + 184, 255, 122, 180, 48, 65, 0, 18, 80, 43, 52, 52, 0, 255, 255, 254, 213, 255, 86, 1, + 226, 2, 124, 2, 38, 3, 163, 0, 0, 0, 39, 4, 145, 254, 117, 255, 193, 1, 6, 4, + 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 34, 180, 44, 70, 0, 18, 80, 43, 52, + 52, 52, 0, 0, 0, 255, 255, 254, 231, 255, 86, 1, 226, 2, 124, 2, 38, 3, 163, 0, + 0, 0, 39, 4, 158, 254, 126, 255, 193, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, + 1, 184, 255, 43, 180, 46, 68, 0, 18, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, + 23, 255, 86, 1, 226, 2, 124, 2, 38, 3, 163, 0, 0, 0, 39, 4, 146, 254, 173, 255, + 193, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 67, 180, 44, 70, 0, + 18, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, 2, 255, 86, 1, 226, 2, 124, 2, + 38, 3, 163, 0, 0, 0, 39, 4, 159, 254, 162, 255, 193, 1, 6, 4, 131, 27, 0, 0, + 17, 178, 3, 2, 1, 184, 255, 57, 180, 46, 68, 0, 18, 80, 43, 52, 52, 52, 0, 0, + 0, 255, 255, 255, 86, 255, 86, 1, 226, 2, 180, 2, 38, 3, 163, 0, 0, 0, 39, 4, + 147, 254, 211, 255, 161, 1, 6, 4, 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 99, + 180, 75, 85, 0, 18, 80, 43, 52, 52, 52, 0, 0, 0, 255, 255, 255, 60, 255, 86, 1, + 226, 2, 180, 2, 38, 3, 163, 0, 0, 0, 39, 4, 160, 254, 185, 255, 161, 1, 6, 4, + 131, 27, 0, 0, 17, 178, 3, 2, 1, 184, 255, 86, 180, 75, 85, 0, 18, 80, 43, 52, + 52, 52, 0, 0, 0, 255, 255, 0, 9, 255, 86, 1, 235, 2, 107, 2, 38, 0, 36, 0, + 0, 1, 6, 4, 131, 18, 0, 0, 10, 182, 2, 21, 32, 27, 4, 15, 80, 43, 52, 0, + 0, 255, 255, 0, 45, 255, 86, 1, 199, 2, 107, 2, 38, 0, 43, 0, 0, 1, 6, 4, + 131, 27, 0, 0, 10, 182, 1, 30, 21, 16, 7, 1, 80, 43, 52, 0, 0, 255, 255, 0, + 18, 255, 86, 1, 226, 2, 121, 2, 38, 3, 163, 0, 0, 1, 6, 4, 131, 27, 0, 0, + 10, 182, 1, 30, 53, 48, 0, 18, 80, 43, 52, 0, 0, 0, 1, 0, 63, 0, 0, 1, + 217, 2, 107, 0, 40, 0, 116, 64, 64, 11, 32, 17, 0, 77, 35, 29, 34, 29, 120, 40, + 35, 20, 40, 40, 35, 34, 34, 6, 9, 118, 21, 24, 22, 22, 19, 17, 17, 21, 42, 15, + 15, 7, 7, 40, 41, 24, 7, 121, 8, 21, 8, 29, 40, 121, 0, 32, 0, 48, 0, 2, + 8, 0, 8, 0, 16, 35, 34, 68, 19, 15, 121, 16, 65, 0, 63, 237, 50, 63, 51, 18, + 57, 57, 47, 47, 93, 16, 237, 50, 17, 51, 16, 237, 50, 1, 16, 198, 50, 47, 50, 47, + 16, 204, 50, 47, 50, 50, 47, 50, 16, 237, 50, 51, 47, 135, 16, 43, 135, 125, 196, 49, + 48, 1, 43, 19, 51, 50, 62, 2, 55, 35, 53, 51, 46, 3, 35, 35, 53, 33, 7, 35, + 22, 23, 51, 7, 35, 14, 3, 7, 30, 3, 23, 35, 46, 3, 39, 63, 65, 25, 55, 48, + 37, 8, 238, 240, 4, 23, 33, 42, 23, 115, 1, 154, 12, 124, 39, 9, 59, 13, 49, 6, + 41, 59, 74, 39, 25, 60, 59, 54, 20, 97, 25, 58, 59, 57, 22, 1, 62, 8, 19, 33, + 25, 64, 27, 34, 20, 7, 64, 64, 33, 55, 64, 38, 52, 35, 18, 4, 24, 62, 69, 70, + 31, 35, 70, 65, 56, 21, 0, 7, 0, 58, 1, 52, 1, 187, 2, 181, 0, 19, 0, 31, + 0, 43, 0, 60, 0, 78, 0, 96, 0, 108, 0, 55, 64, 29, 101, 65, 40, 93, 64, 94, + 51, 55, 55, 44, 94, 93, 4, 0, 10, 103, 74, 37, 85, 85, 80, 26, 20, 61, 74, 6, + 5, 15, 77, 0, 63, 204, 23, 57, 17, 51, 17, 51, 1, 47, 204, 23, 57, 17, 51, 17, + 51, 17, 51, 51, 51, 49, 48, 1, 20, 14, 2, 35, 34, 46, 2, 53, 52, 62, 2, 51, + 50, 30, 2, 5, 34, 6, 21, 20, 22, 51, 50, 54, 53, 52, 38, 23, 6, 6, 23, 22, + 22, 55, 54, 54, 39, 38, 38, 39, 52, 54, 55, 39, 6, 6, 7, 22, 21, 20, 7, 22, + 23, 55, 38, 38, 55, 50, 22, 23, 55, 38, 38, 39, 6, 39, 38, 39, 38, 35, 34, 7, + 23, 54, 23, 34, 39, 7, 22, 51, 50, 55, 54, 55, 54, 23, 54, 54, 55, 39, 6, 6, + 55, 22, 54, 55, 54, 38, 39, 38, 6, 7, 6, 22, 1, 187, 30, 53, 70, 40, 40, 70, + 52, 30, 30, 52, 70, 40, 40, 70, 53, 30, 254, 189, 11, 15, 15, 11, 11, 15, 15, 172, + 9, 6, 5, 6, 20, 10, 9, 5, 5, 6, 20, 137, 18, 15, 20, 17, 24, 5, 14, 14, + 11, 35, 20, 15, 18, 75, 30, 42, 3, 37, 2, 18, 14, 15, 16, 16, 1, 12, 18, 27, + 22, 18, 16, 15, 15, 16, 18, 22, 27, 18, 12, 1, 16, 16, 15, 14, 18, 2, 37, 3, + 42, 23, 9, 20, 6, 5, 5, 9, 10, 20, 6, 5, 6, 1, 244, 40, 70, 52, 30, 30, + 52, 70, 40, 40, 70, 53, 30, 30, 53, 70, 14, 15, 11, 10, 15, 15, 10, 11, 15, 117, + 5, 20, 10, 9, 6, 6, 5, 21, 9, 10, 4, 86, 20, 31, 11, 32, 12, 34, 20, 9, + 19, 17, 11, 39, 26, 32, 11, 31, 95, 40, 29, 1, 21, 37, 14, 5, 7, 10, 16, 4, + 12, 31, 7, 151, 7, 31, 12, 4, 16, 10, 7, 5, 14, 37, 21, 1, 29, 40, 167, 6, + 5, 10, 9, 21, 5, 5, 6, 8, 11, 19, 0, 14, 255, 91, 0, 0, 2, 153, 2, 180, + 0, 3, 0, 7, 0, 11, 0, 15, 0, 19, 0, 23, 0, 27, 0, 31, 0, 35, 0, 39, + 0, 43, 0, 47, 0, 51, 0, 55, 7, 175, 64, 31, 51, 16, 9, 0, 77, 50, 24, 9, + 0, 77, 43, 8, 9, 0, 77, 42, 8, 9, 0, 77, 39, 16, 9, 0, 77, 38, 16, 9, + 0, 77, 35, 184, 255, 240, 179, 9, 0, 77, 34, 184, 255, 248, 64, 14, 9, 0, 77, 33, + 16, 9, 0, 77, 32, 8, 9, 0, 77, 30, 184, 255, 248, 64, 185, 9, 0, 77, 29, 16, + 9, 0, 77, 28, 24, 9, 0, 77, 6, 27, 38, 27, 54, 27, 70, 27, 102, 27, 134, 27, + 6, 61, 7, 27, 1, 9, 6, 26, 38, 26, 54, 26, 70, 26, 102, 26, 134, 26, 6, 61, + 7, 26, 1, 9, 6, 19, 22, 19, 38, 19, 102, 19, 4, 6, 18, 22, 18, 38, 18, 102, + 18, 4, 61, 9, 5, 1, 9, 4, 1, 62, 9, 1, 25, 1, 2, 9, 0, 25, 0, 2, + 65, 7, 38, 1, 7, 37, 1, 7, 34, 1, 7, 33, 1, 9, 31, 1, 9, 28, 120, 9, + 73, 9, 23, 105, 23, 2, 9, 20, 105, 20, 2, 6, 14, 54, 14, 102, 14, 3, 6, 13, + 54, 13, 102, 13, 3, 9, 11, 57, 11, 2, 9, 8, 57, 8, 2, 61, 154, 49, 170, 49, + 2, 105, 49, 121, 49, 137, 49, 3, 49, 64, 10, 14, 72, 10, 49, 1, 49, 47, 128, 52, + 59, 72, 47, 127, 40, 143, 40, 2, 94, 40, 110, 40, 2, 77, 40, 1, 62, 40, 1, 40, + 184, 1, 128, 64, 78, 40, 43, 72, 154, 40, 170, 40, 2, 105, 40, 121, 40, 137, 40, 3, + 40, 64, 10, 14, 72, 40, 176, 9, 73, 40, 36, 128, 52, 59, 72, 127, 36, 143, 36, 2, + 94, 36, 110, 36, 2, 77, 36, 1, 46, 36, 62, 36, 2, 13, 36, 29, 36, 2, 253, 36, + 1, 154, 36, 170, 36, 2, 105, 36, 121, 36, 137, 36, 3, 36, 64, 10, 14, 72, 10, 36, + 1, 36, 54, 184, 255, 128, 64, 9, 52, 59, 72, 7, 54, 1, 54, 53, 50, 184, 255, 128, + 64, 12, 13, 19, 72, 23, 50, 39, 50, 55, 50, 3, 50, 43, 184, 254, 0, 64, 19, 45, + 49, 72, 49, 43, 1, 32, 43, 1, 1, 43, 17, 43, 2, 241, 43, 1, 0, 43, 184, 255, + 128, 64, 12, 13, 19, 72, 16, 43, 32, 43, 48, 43, 3, 43, 39, 184, 254, 0, 179, 45, + 49, 72, 39, 184, 254, 64, 179, 40, 44, 72, 39, 184, 255, 128, 64, 255, 13, 19, 72, 16, + 39, 32, 39, 48, 39, 3, 39, 28, 12, 32, 1, 9, 3, 32, 34, 47, 21, 143, 21, 2, + 9, 21, 1, 59, 143, 21, 159, 21, 255, 21, 3, 94, 21, 1, 189, 21, 237, 21, 253, 21, + 3, 91, 21, 1, 76, 21, 1, 27, 21, 1, 170, 21, 186, 21, 2, 121, 21, 1, 8, 21, + 24, 21, 2, 10, 21, 9, 19, 1, 59, 19, 15, 12, 63, 12, 111, 12, 3, 61, 79, 12, + 143, 12, 191, 12, 239, 12, 4, 30, 12, 1, 173, 12, 237, 12, 2, 123, 12, 1, 76, 12, + 1, 11, 12, 1, 170, 12, 218, 12, 2, 57, 12, 105, 12, 2, 8, 12, 1, 11, 12, 47, + 8, 95, 8, 2, 9, 8, 1, 59, 233, 8, 1, 143, 8, 191, 8, 2, 30, 8, 1, 237, + 8, 1, 123, 8, 1, 76, 8, 1, 170, 8, 218, 8, 2, 8, 8, 56, 8, 2, 11, 8, + 102, 26, 134, 26, 2, 7, 26, 1, 51, 26, 25, 0, 23, 96, 23, 2, 61, 80, 23, 128, + 23, 144, 23, 240, 23, 4, 225, 23, 241, 23, 2, 178, 23, 1, 83, 23, 1, 20, 23, 68, + 23, 2, 181, 23, 1, 118, 23, 166, 23, 2, 7, 23, 23, 23, 2, 10, 23, 0, 15, 48, + 15, 96, 15, 3, 61, 128, 15, 176, 15, 224, 15, 3, 17, 15, 65, 15, 2, 225, 15, 1, + 114, 15, 162, 15, 2, 4, 15, 68, 15, 2, 212, 64, 62, 15, 1, 165, 15, 1, 102, 15, + 1, 7, 15, 55, 15, 2, 11, 15, 0, 10, 48, 10, 2, 61, 144, 10, 192, 10, 2, 33, + 10, 1, 241, 10, 1, 130, 10, 1, 84, 10, 1, 228, 10, 1, 181, 10, 1, 70, 10, 1, + 23, 10, 1, 10, 0, 4, 57, 230, 3, 1, 3, 6, 16, 25, 31, 184, 255, 128, 64, 9, + 52, 69, 72, 31, 34, 44, 53, 56, 53, 184, 254, 0, 64, 59, 49, 59, 72, 97, 53, 1, + 64, 53, 80, 53, 2, 33, 53, 49, 53, 2, 16, 53, 1, 1, 53, 1, 225, 53, 241, 53, + 2, 178, 53, 194, 53, 210, 53, 3, 147, 53, 163, 53, 2, 130, 53, 1, 99, 53, 115, 53, + 2, 84, 53, 1, 67, 53, 1, 0, 146, 53, 1, 1, 53, 184, 255, 128, 64, 18, 14, 18, + 72, 51, 53, 1, 2, 16, 53, 32, 53, 2, 8, 53, 1, 3, 53, 34, 184, 255, 0, 64, + 22, 24, 29, 72, 181, 34, 197, 34, 213, 34, 3, 166, 34, 1, 34, 88, 51, 1, 51, 221, + 44, 1, 44, 184, 1, 64, 64, 12, 32, 38, 72, 75, 44, 91, 44, 2, 60, 44, 1, 44, + 184, 1, 0, 64, 28, 23, 28, 72, 170, 44, 186, 44, 202, 44, 3, 44, 128, 16, 19, 72, + 90, 44, 1, 73, 44, 1, 44, 64, 10, 13, 72, 44, 31, 184, 2, 0, 183, 50, 69, 72, + 31, 49, 49, 38, 52, 184, 2, 0, 179, 48, 59, 72, 52, 184, 1, 192, 179, 44, 47, 72, + 52, 184, 1, 128, 64, 51, 35, 43, 72, 124, 52, 140, 52, 2, 107, 52, 1, 92, 52, 1, + 75, 52, 1, 52, 128, 16, 19, 72, 90, 52, 1, 52, 64, 10, 14, 72, 52, 27, 35, 43, + 35, 59, 35, 3, 35, 192, 20, 26, 72, 35, 87, 41, 1, 41, 43, 91, 45, 184, 254, 128, + 179, 36, 39, 72, 45, 184, 254, 192, 179, 30, 35, 72, 45, 184, 255, 0, 179, 26, 29, 72, + 45, 184, 255, 64, 179, 17, 25, 72, 45, 184, 255, 128, 64, 13, 13, 16, 72, 7, 45, 23, + 45, 39, 45, 3, 10, 45, 30, 184, 254, 0, 64, 174, 50, 69, 72, 30, 8, 36, 1, 15, + 36, 38, 89, 32, 25, 64, 25, 80, 25, 96, 25, 128, 25, 160, 25, 6, 23, 25, 1, 0, + 25, 1, 59, 192, 25, 224, 25, 2, 177, 25, 1, 96, 25, 128, 25, 160, 25, 3, 1, 25, + 17, 25, 33, 25, 65, 25, 4, 225, 25, 1, 162, 25, 194, 25, 2, 131, 25, 1, 114, 25, + 1, 99, 25, 1, 4, 25, 36, 25, 68, 25, 3, 165, 25, 197, 25, 213, 25, 229, 25, 4, + 102, 25, 134, 25, 2, 71, 25, 1, 54, 25, 1, 7, 25, 1, 11, 25, 32, 6, 1, 7, + 6, 1, 60, 214, 6, 1, 128, 6, 1, 119, 6, 1, 225, 6, 1, 67, 6, 1, 165, 6, + 1, 7, 6, 1, 12, 6, 105, 23, 153, 23, 2, 8, 23, 1, 51, 23, 31, 16, 47, 16, + 63, 16, 127, 16, 4, 8, 16, 1, 60, 175, 16, 239, 16, 2, 158, 16, 1, 79, 16, 143, + 16, 2, 13, 16, 1, 16, 184, 1, 96, 64, 255, 42, 73, 76, 16, 92, 16, 108, 16, 172, + 16, 236, 16, 5, 11, 16, 1, 203, 16, 1, 170, 16, 186, 16, 2, 25, 16, 41, 16, 105, + 16, 3, 8, 16, 1, 11, 16, 15, 3, 31, 3, 2, 65, 216, 3, 1, 143, 3, 159, 3, + 2, 253, 3, 1, 238, 3, 1, 76, 3, 92, 3, 2, 187, 3, 1, 170, 3, 1, 9, 3, + 25, 3, 2, 15, 3, 23, 21, 1, 21, 21, 10, 15, 24, 47, 24, 79, 24, 95, 24, 111, + 24, 143, 24, 175, 24, 7, 59, 191, 24, 207, 24, 239, 24, 3, 174, 24, 1, 79, 24, 111, + 24, 143, 24, 3, 14, 24, 30, 24, 46, 24, 3, 141, 24, 173, 24, 205, 24, 237, 24, 4, + 76, 24, 108, 24, 124, 24, 3, 11, 24, 43, 24, 2, 219, 24, 235, 24, 2, 138, 24, 170, + 24, 202, 24, 3, 73, 24, 105, 24, 2, 56, 24, 1, 41, 24, 1, 8, 24, 1, 11, 24, + 15, 7, 1, 62, 217, 7, 1, 142, 7, 1, 120, 7, 1, 237, 7, 1, 75, 7, 1, 170, + 7, 1, 8, 7, 1, 12, 7, 102, 13, 1, 7, 13, 1, 51, 13, 15, 91, 0, 17, 16, + 17, 32, 17, 96, 17, 4, 61, 128, 17, 144, 17, 160, 17, 224, 17, 4, 1, 17, 65, 17, + 2, 225, 17, 241, 17, 2, 162, 17, 1, 83, 17, 99, 17, 2, 4, 17, 68, 17, 2, 101, + 17, 165, 17, 181, 17, 197, 64, 57, 17, 4, 7, 17, 23, 17, 39, 17, 3, 11, 17, 0, + 2, 16, 2, 2, 65, 224, 2, 240, 2, 2, 167, 2, 1, 80, 2, 1, 65, 2, 1, 178, + 2, 1, 163, 2, 1, 0, 0, 2, 16, 2, 2, 1, 96, 2, 112, 2, 2, 2, 2, 175, + 8, 1, 8, 10, 89, 0, 63, 205, 114, 50, 95, 93, 95, 113, 95, 113, 113, 114, 114, 114, + 114, 94, 93, 50, 94, 93, 93, 113, 113, 113, 113, 114, 114, 94, 93, 63, 205, 94, 93, 93, + 50, 94, 93, 93, 113, 113, 114, 114, 114, 94, 93, 50, 94, 93, 93, 93, 93, 93, 93, 113, + 113, 113, 114, 114, 114, 114, 94, 93, 18, 57, 47, 93, 51, 94, 93, 93, 93, 113, 113, 113, + 114, 114, 94, 93, 51, 94, 93, 93, 93, 93, 113, 113, 43, 114, 114, 114, 114, 94, 93, 93, + 205, 94, 93, 93, 50, 94, 93, 93, 113, 113, 114, 114, 114, 94, 93, 93, 50, 94, 93, 93, + 93, 93, 93, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 94, 93, 93, 93, 63, 205, 94, + 93, 50, 43, 50, 94, 93, 43, 43, 43, 43, 43, 63, 205, 93, 50, 43, 113, 50, 43, 93, + 43, 113, 113, 113, 113, 43, 43, 43, 18, 57, 47, 51, 43, 51, 43, 93, 93, 43, 93, 43, + 113, 113, 43, 113, 205, 93, 50, 93, 93, 43, 50, 95, 93, 93, 95, 93, 43, 95, 93, 95, + 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 43, 1, 16, 220, 50, 220, 50, 43, + 222, 50, 220, 50, 114, 204, 205, 50, 50, 93, 93, 93, 93, 113, 113, 113, 114, 114, 94, 93, + 50, 94, 93, 93, 93, 93, 113, 113, 113, 114, 114, 94, 93, 50, 94, 93, 93, 93, 113, 113, + 113, 113, 114, 94, 93, 16, 205, 94, 93, 93, 50, 94, 93, 93, 113, 113, 113, 114, 114, 114, + 94, 93, 93, 50, 94, 93, 93, 93, 113, 113, 113, 113, 114, 114, 94, 93, 50, 94, 93, 50, + 94, 93, 93, 93, 113, 113, 113, 113, 114, 114, 94, 93, 93, 16, 205, 95, 94, 93, 50, 50, + 93, 43, 43, 43, 50, 93, 43, 95, 113, 114, 114, 114, 43, 50, 93, 43, 16, 205, 93, 43, + 50, 93, 43, 93, 93, 113, 114, 114, 114, 114, 114, 43, 50, 43, 43, 93, 93, 43, 114, 114, + 114, 114, 50, 43, 50, 93, 43, 93, 93, 49, 48, 0, 94, 93, 93, 93, 93, 93, 93, 43, + 94, 93, 93, 93, 93, 93, 1, 94, 93, 93, 94, 93, 93, 94, 93, 93, 94, 93, 94, 93, + 94, 93, 94, 93, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 1, 17, 51, + 17, 3, 17, 51, 17, 1, 53, 33, 21, 1, 53, 33, 21, 1, 17, 51, 17, 21, 53, 33, + 21, 1, 17, 51, 17, 3, 17, 51, 17, 3, 17, 51, 17, 1, 53, 33, 21, 1, 53, 33, + 21, 1, 17, 51, 17, 21, 53, 33, 21, 1, 17, 51, 17, 2, 124, 29, 29, 29, 254, 175, + 1, 52, 254, 204, 1, 52, 254, 175, 29, 1, 52, 254, 175, 29, 155, 28, 28, 28, 254, 175, + 1, 53, 254, 203, 1, 53, 254, 174, 29, 1, 53, 254, 174, 29, 1, 107, 1, 42, 254, 214, + 254, 180, 1, 42, 254, 214, 2, 121, 28, 28, 253, 104, 29, 29, 1, 107, 1, 42, 254, 214, + 31, 29, 29, 254, 211, 1, 42, 254, 214, 1, 76, 1, 42, 254, 214, 254, 180, 1, 42, 254, + 214, 2, 121, 28, 28, 253, 104, 29, 29, 1, 107, 1, 42, 254, 214, 31, 29, 29, 254, 211, + 1, 42, 254, 214, 0, 3, 0, 4, 255, 243, 1, 240, 1, 222, 0, 3, 0, 29, 0, 41, + 0, 50, 64, 22, 23, 9, 33, 39, 4, 28, 17, 39, 39, 2, 0, 20, 14, 4, 36, 30, + 14, 30, 14, 30, 1, 3, 0, 47, 204, 57, 57, 47, 47, 16, 222, 205, 16, 206, 1, 47, + 204, 57, 47, 205, 212, 206, 16, 222, 220, 206, 49, 48, 55, 55, 23, 7, 55, 52, 62, 2, + 53, 52, 46, 2, 35, 34, 6, 7, 23, 54, 51, 50, 22, 21, 20, 14, 2, 21, 23, 23, + 50, 54, 53, 52, 38, 35, 34, 6, 21, 20, 22, 4, 246, 246, 246, 20, 24, 28, 23, 9, + 21, 35, 25, 21, 44, 18, 17, 29, 29, 18, 21, 23, 27, 22, 1, 31, 14, 21, 21, 14, + 16, 22, 22, 232, 246, 246, 245, 177, 22, 33, 29, 32, 22, 12, 27, 21, 14, 11, 12, 46, + 17, 13, 15, 16, 24, 27, 32, 23, 10, 105, 20, 17, 17, 21, 21, 17, 17, 20, 255, 255, + 255, 222, 255, 244, 2, 19, 2, 121, 0, 39, 1, 111, 255, 106, 0, 0, 0, 38, 0, 17, + 0, 0, 1, 7, 1, 116, 0, 150, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 34, + 1, 34, 3, 62, 0, 5, 0, 17, 181, 4, 1, 0, 2, 5, 0, 0, 47, 205, 47, 1, + 47, 47, 205, 49, 48, 17, 51, 17, 51, 17, 33, 210, 80, 254, 222, 1, 114, 1, 204, 253, + 228, 0, 1, 0, 210, 1, 34, 1, 244, 3, 62, 0, 5, 0, 17, 181, 2, 5, 3, 5, + 2, 0, 0, 47, 47, 205, 1, 47, 47, 205, 49, 48, 19, 51, 17, 51, 21, 33, 210, 80, + 210, 254, 222, 3, 62, 254, 52, 80, 0, 1, 0, 210, 255, 86, 1, 244, 1, 114, 0, 5, + 0, 17, 181, 2, 3, 0, 5, 3, 0, 0, 47, 205, 47, 1, 47, 205, 47, 49, 48, 19, + 33, 21, 35, 17, 35, 210, 1, 34, 210, 80, 1, 114, 80, 254, 52, 0, 1, 0, 210, 255, + 86, 1, 34, 3, 62, 0, 3, 0, 13, 179, 3, 2, 2, 1, 0, 47, 47, 1, 47, 205, + 49, 48, 5, 35, 17, 51, 1, 34, 80, 80, 170, 3, 232, 0, 1, 0, 0, 1, 34, 1, + 244, 1, 114, 0, 3, 0, 13, 179, 2, 1, 0, 1, 0, 47, 205, 1, 47, 47, 49, 48, + 17, 53, 33, 21, 1, 244, 1, 34, 80, 80, 0, 1, 0, 0, 255, 86, 1, 34, 3, 62, + 0, 7, 0, 21, 183, 7, 2, 5, 4, 6, 3, 4, 1, 0, 47, 47, 205, 47, 1, 47, + 47, 51, 205, 49, 48, 5, 35, 17, 35, 53, 51, 17, 51, 1, 34, 80, 210, 210, 80, 170, + 1, 204, 80, 1, 204, 0, 1, 0, 0, 255, 86, 1, 244, 1, 114, 0, 7, 0, 21, 183, + 6, 2, 5, 1, 2, 5, 7, 4, 0, 47, 47, 205, 50, 1, 47, 47, 205, 47, 49, 48, + 1, 21, 35, 17, 35, 17, 35, 53, 1, 244, 210, 80, 210, 1, 114, 80, 254, 52, 1, 204, + 80, 0, 1, 0, 0, 1, 34, 1, 244, 3, 62, 0, 7, 0, 21, 183, 6, 5, 2, 1, + 3, 5, 0, 1, 0, 47, 205, 51, 47, 1, 47, 47, 205, 47, 49, 48, 17, 53, 51, 17, + 51, 17, 51, 21, 210, 80, 210, 1, 34, 80, 1, 204, 254, 52, 80, 0, 1, 0, 210, 255, + 86, 1, 244, 3, 62, 0, 7, 0, 21, 183, 3, 5, 1, 0, 7, 5, 2, 0, 0, 47, + 47, 205, 47, 1, 47, 205, 50, 47, 49, 48, 19, 51, 17, 51, 21, 35, 17, 35, 210, 80, + 210, 210, 80, 3, 62, 254, 52, 80, 254, 52, 0, 1, 0, 0, 255, 86, 1, 244, 3, 62, + 0, 11, 0, 30, 64, 12, 7, 9, 6, 0, 3, 2, 11, 4, 9, 1, 6, 2, 0, 47, + 51, 205, 50, 47, 47, 1, 47, 47, 51, 205, 50, 47, 49, 48, 19, 35, 53, 51, 17, 51, + 17, 51, 21, 35, 17, 35, 210, 210, 210, 80, 210, 210, 80, 1, 34, 80, 1, 204, 254, 52, + 80, 254, 52, 0, 1, 0, 0, 255, 86, 1, 34, 1, 114, 0, 5, 0, 17, 181, 1, 4, + 0, 2, 4, 1, 0, 47, 197, 47, 1, 47, 47, 197, 49, 48, 17, 33, 17, 35, 17, 35, + 1, 34, 80, 210, 1, 114, 253, 228, 1, 204, 0, 2, 0, 0, 255, 86, 1, 34, 3, 62, + 0, 5, 0, 11, 0, 30, 64, 12, 7, 10, 6, 4, 1, 0, 9, 11, 6, 0, 5, 2, + 0, 47, 47, 197, 47, 197, 47, 1, 47, 47, 197, 47, 47, 197, 49, 48, 17, 51, 17, 51, + 17, 33, 21, 33, 17, 35, 17, 35, 210, 80, 254, 222, 1, 34, 80, 210, 1, 194, 1, 124, + 254, 52, 80, 254, 52, 1, 124, 0, 2, 0, 210, 255, 86, 1, 244, 3, 62, 0, 5, 0, + 11, 0, 30, 64, 12, 11, 7, 10, 4, 1, 0, 7, 10, 9, 2, 4, 1, 0, 47, 197, + 47, 47, 47, 197, 1, 47, 47, 197, 47, 197, 47, 49, 48, 1, 33, 17, 51, 17, 51, 21, + 35, 17, 35, 17, 33, 1, 244, 254, 222, 80, 210, 210, 80, 1, 34, 1, 114, 1, 204, 254, + 132, 240, 254, 132, 1, 204, 0, 2, 0, 0, 0, 210, 1, 244, 3, 62, 0, 7, 0, 11, + 0, 30, 64, 12, 11, 8, 7, 5, 2, 0, 10, 11, 3, 5, 2, 0, 0, 47, 197, 50, + 47, 47, 197, 1, 47, 47, 197, 47, 47, 47, 49, 48, 17, 53, 51, 17, 51, 17, 51, 29, + 2, 33, 53, 210, 80, 210, 254, 12, 1, 114, 80, 1, 124, 254, 132, 80, 80, 80, 80, 0, + 2, 0, 0, 0, 210, 1, 34, 3, 62, 0, 5, 0, 9, 0, 26, 64, 10, 6, 5, 7, + 4, 1, 9, 6, 0, 5, 2, 0, 47, 47, 197, 47, 197, 1, 47, 197, 50, 47, 47, 49, + 48, 17, 51, 17, 51, 17, 33, 21, 33, 21, 33, 210, 80, 254, 222, 1, 34, 254, 222, 1, + 194, 1, 124, 254, 52, 80, 80, 0, 2, 0, 210, 0, 210, 1, 244, 3, 62, 0, 5, 0, + 9, 0, 27, 64, 11, 7, 6, 4, 1, 0, 9, 6, 2, 90, 4, 1, 0, 47, 197, 63, + 47, 197, 1, 47, 47, 197, 47, 47, 49, 48, 1, 33, 17, 51, 17, 51, 5, 33, 21, 33, + 1, 244, 254, 222, 80, 210, 254, 222, 1, 34, 254, 222, 1, 114, 1, 204, 254, 132, 160, 80, + 0, 2, 0, 0, 255, 86, 1, 244, 1, 194, 0, 7, 0, 11, 0, 30, 64, 12, 11, 8, + 7, 2, 5, 0, 9, 8, 2, 6, 7, 4, 0, 47, 47, 197, 50, 47, 197, 1, 47, 47, + 197, 47, 47, 47, 49, 48, 1, 21, 35, 17, 35, 17, 35, 61, 2, 33, 21, 1, 244, 210, + 80, 210, 1, 244, 1, 34, 80, 254, 132, 1, 124, 80, 80, 80, 80, 0, 2, 0, 0, 255, + 86, 1, 34, 1, 194, 0, 5, 0, 9, 0, 26, 64, 10, 9, 8, 1, 4, 0, 6, 9, + 3, 5, 0, 0, 47, 197, 47, 47, 197, 1, 47, 47, 197, 50, 47, 49, 48, 17, 33, 17, + 35, 17, 35, 53, 33, 21, 33, 1, 34, 80, 210, 1, 34, 254, 222, 1, 34, 254, 52, 1, + 124, 240, 80, 0, 2, 0, 210, 255, 86, 1, 244, 1, 194, 0, 5, 0, 9, 0, 26, 64, + 10, 9, 8, 5, 1, 4, 6, 9, 1, 4, 3, 0, 47, 47, 197, 47, 197, 1, 47, 197, + 47, 47, 47, 49, 48, 37, 35, 17, 35, 17, 33, 37, 33, 21, 33, 1, 244, 210, 80, 1, + 34, 254, 222, 1, 34, 254, 222, 210, 254, 132, 1, 204, 160, 80, 0, 2, 0, 130, 255, 86, + 1, 114, 3, 62, 0, 3, 0, 7, 0, 21, 183, 5, 4, 2, 3, 4, 2, 7, 1, 0, + 47, 51, 47, 51, 1, 47, 197, 47, 197, 49, 48, 23, 35, 17, 59, 2, 17, 35, 210, 80, + 80, 80, 80, 80, 170, 3, 232, 252, 24, 0, 4, 0, 0, 255, 86, 1, 244, 3, 62, 0, + 5, 0, 11, 0, 17, 0, 23, 0, 54, 64, 24, 7, 16, 10, 13, 11, 12, 18, 5, 22, + 1, 19, 4, 9, 21, 7, 22, 10, 19, 16, 1, 13, 4, 14, 2, 0, 47, 51, 47, 51, + 197, 50, 47, 51, 197, 50, 47, 51, 1, 47, 51, 197, 50, 47, 51, 47, 51, 47, 51, 197, + 50, 49, 48, 17, 51, 17, 51, 17, 35, 5, 35, 17, 35, 17, 51, 53, 35, 17, 51, 17, + 51, 5, 51, 17, 35, 17, 35, 130, 80, 210, 1, 244, 130, 80, 210, 210, 80, 130, 254, 12, + 210, 80, 130, 1, 194, 1, 124, 254, 52, 160, 254, 132, 1, 204, 80, 1, 204, 254, 132, 160, + 254, 52, 1, 124, 0, 3, 0, 0, 255, 86, 1, 114, 3, 62, 0, 3, 0, 9, 0, 15, + 0, 38, 64, 16, 10, 9, 14, 6, 11, 7, 1, 0, 3, 13, 14, 10, 5, 9, 0, 6, + 0, 47, 51, 47, 197, 47, 197, 47, 51, 1, 47, 197, 47, 51, 197, 50, 47, 51, 49, 48, + 1, 51, 17, 35, 1, 51, 17, 51, 17, 35, 21, 51, 17, 35, 17, 35, 1, 34, 80, 80, + 254, 222, 130, 80, 210, 210, 80, 130, 3, 62, 252, 24, 2, 108, 1, 124, 254, 52, 80, 254, + 52, 1, 124, 0, 3, 0, 130, 255, 86, 1, 244, 3, 62, 0, 3, 0, 9, 0, 15, 0, + 38, 64, 16, 11, 7, 14, 6, 15, 4, 2, 3, 11, 14, 0, 13, 3, 6, 8, 5, 0, + 47, 197, 47, 51, 47, 51, 47, 197, 1, 47, 197, 47, 51, 47, 51, 197, 50, 49, 48, 23, + 35, 17, 51, 1, 35, 17, 51, 17, 51, 21, 35, 17, 35, 17, 51, 210, 80, 80, 1, 34, + 210, 80, 130, 130, 80, 210, 170, 3, 232, 254, 52, 1, 204, 254, 132, 240, 254, 132, 1, 204, + 0, 3, 0, 0, 0, 210, 1, 244, 3, 62, 0, 3, 0, 9, 0, 15, 0, 38, 64, 16, + 14, 11, 0, 10, 3, 9, 5, 8, 14, 5, 11, 8, 12, 6, 2, 3, 0, 47, 197, 47, + 51, 47, 51, 197, 50, 1, 47, 197, 47, 51, 47, 51, 47, 197, 49, 48, 1, 21, 33, 53, + 53, 51, 17, 51, 17, 35, 33, 35, 17, 51, 17, 51, 1, 244, 254, 12, 130, 80, 210, 1, + 244, 210, 80, 130, 1, 34, 80, 80, 160, 1, 124, 254, 52, 1, 204, 254, 132, 0, 2, 0, + 0, 0, 210, 1, 114, 3, 62, 0, 5, 0, 11, 0, 30, 64, 12, 10, 7, 1, 4, 6, + 0, 10, 7, 1, 4, 8, 2, 0, 47, 51, 47, 197, 47, 197, 1, 47, 51, 47, 197, 47, + 197, 49, 48, 17, 51, 17, 51, 17, 35, 21, 33, 17, 51, 17, 33, 130, 80, 210, 1, 34, + 80, 254, 142, 1, 194, 1, 124, 254, 52, 80, 2, 28, 253, 148, 0, 2, 0, 130, 0, 210, + 1, 244, 3, 62, 0, 5, 0, 11, 0, 30, 64, 12, 7, 10, 4, 1, 11, 0, 7, 10, + 2, 8, 4, 1, 0, 47, 197, 47, 51, 47, 197, 1, 47, 51, 47, 197, 47, 197, 49, 48, + 1, 35, 17, 51, 17, 51, 21, 33, 17, 51, 17, 33, 1, 244, 210, 80, 130, 254, 142, 80, + 1, 34, 1, 114, 1, 204, 254, 132, 240, 2, 108, 253, 228, 0, 3, 0, 0, 255, 86, 1, + 244, 1, 194, 0, 3, 0, 9, 0, 15, 0, 38, 64, 16, 14, 11, 0, 10, 3, 9, 5, + 8, 7, 13, 5, 14, 8, 11, 1, 0, 0, 47, 197, 47, 51, 197, 50, 47, 51, 1, 47, + 197, 47, 51, 47, 51, 47, 197, 49, 48, 17, 53, 33, 21, 21, 35, 17, 35, 17, 51, 33, + 51, 17, 35, 17, 35, 1, 244, 130, 80, 210, 254, 12, 210, 80, 130, 1, 114, 80, 80, 160, + 254, 132, 1, 204, 254, 52, 1, 124, 0, 2, 0, 0, 255, 86, 1, 114, 1, 194, 0, 5, + 0, 11, 0, 30, 64, 12, 0, 11, 7, 10, 4, 1, 7, 10, 9, 3, 4, 1, 0, 47, + 197, 47, 51, 47, 197, 1, 47, 197, 47, 197, 47, 51, 49, 48, 17, 51, 17, 35, 17, 35, + 53, 33, 17, 35, 17, 33, 210, 80, 130, 1, 114, 80, 254, 222, 1, 34, 254, 52, 1, 124, + 240, 253, 148, 2, 28, 0, 2, 0, 130, 255, 86, 1, 244, 1, 194, 0, 5, 0, 11, 0, + 30, 64, 12, 10, 7, 5, 6, 1, 4, 3, 9, 10, 7, 1, 4, 0, 47, 197, 47, 197, + 47, 51, 1, 47, 197, 47, 51, 47, 197, 49, 48, 37, 35, 17, 35, 17, 51, 53, 33, 17, + 35, 17, 33, 1, 244, 130, 80, 210, 254, 222, 80, 1, 114, 210, 254, 132, 1, 204, 80, 253, + 228, 2, 108, 0, 2, 0, 0, 0, 210, 1, 244, 1, 194, 0, 3, 0, 7, 0, 21, 183, + 2, 7, 1, 4, 5, 4, 0, 1, 0, 47, 197, 47, 197, 1, 47, 51, 47, 51, 49, 48, + 53, 53, 33, 21, 37, 53, 33, 21, 1, 244, 254, 12, 1, 244, 210, 80, 80, 160, 80, 80, + 0, 2, 0, 0, 255, 86, 1, 114, 3, 62, 0, 7, 0, 11, 0, 30, 64, 12, 11, 10, + 2, 6, 7, 3, 10, 6, 2, 5, 9, 1, 0, 47, 51, 47, 197, 47, 51, 1, 47, 47, + 197, 50, 47, 197, 49, 48, 23, 35, 17, 35, 53, 51, 17, 51, 19, 35, 17, 51, 210, 80, + 130, 130, 80, 160, 80, 80, 170, 1, 204, 80, 1, 204, 252, 24, 3, 232, 0, 2, 0, 130, + 255, 86, 1, 244, 3, 62, 0, 7, 0, 11, 0, 30, 64, 12, 8, 9, 3, 5, 1, 0, + 7, 11, 0, 8, 5, 2, 0, 47, 197, 47, 51, 47, 51, 1, 47, 197, 50, 47, 47, 197, + 49, 48, 1, 51, 17, 51, 21, 35, 17, 35, 3, 51, 17, 35, 1, 34, 80, 130, 130, 80, + 160, 80, 80, 3, 62, 254, 52, 80, 254, 52, 3, 232, 252, 24, 0, 1, 0, 0, 1, 34, + 1, 244, 3, 62, 0, 11, 0, 30, 64, 12, 10, 9, 5, 6, 3, 0, 9, 5, 11, 7, + 2, 3, 0, 47, 197, 51, 51, 47, 51, 1, 47, 47, 47, 197, 47, 197, 49, 48, 1, 21, + 33, 53, 51, 17, 51, 17, 51, 17, 51, 17, 1, 244, 254, 12, 130, 80, 80, 80, 1, 114, + 80, 80, 1, 204, 254, 52, 1, 204, 254, 52, 0, 2, 0, 0, 1, 34, 1, 114, 3, 62, + 0, 5, 0, 9, 0, 28, 64, 11, 7, 6, 2, 3, 0, 6, 2, 9, 9, 4, 0, 0, + 47, 197, 50, 47, 47, 51, 1, 47, 47, 197, 47, 197, 49, 48, 17, 51, 17, 51, 17, 35, + 1, 51, 17, 35, 130, 80, 210, 1, 34, 80, 80, 1, 114, 1, 204, 253, 228, 2, 28, 253, + 228, 0, 2, 0, 130, 1, 34, 1, 244, 3, 62, 0, 5, 0, 9, 0, 26, 64, 10, 8, + 9, 5, 3, 2, 2, 8, 7, 1, 4, 0, 47, 197, 50, 47, 51, 1, 47, 197, 47, 47, + 197, 49, 48, 1, 35, 17, 51, 17, 51, 5, 35, 17, 51, 1, 244, 210, 80, 130, 254, 222, + 80, 80, 1, 34, 2, 28, 254, 52, 80, 2, 28, 0, 1, 0, 0, 255, 86, 1, 244, 1, + 114, 0, 11, 0, 30, 64, 12, 11, 8, 4, 7, 3, 0, 6, 10, 8, 4, 11, 1, 0, + 47, 197, 50, 50, 47, 51, 1, 47, 47, 47, 197, 47, 197, 49, 48, 17, 53, 33, 21, 35, + 17, 35, 17, 35, 17, 35, 17, 1, 244, 130, 80, 80, 80, 1, 34, 80, 80, 254, 52, 1, + 204, 254, 52, 1, 204, 0, 2, 0, 0, 255, 86, 1, 114, 1, 114, 0, 5, 0, 9, 0, + 26, 64, 10, 7, 6, 5, 4, 1, 9, 3, 6, 4, 1, 0, 47, 197, 51, 47, 51, 1, + 47, 197, 47, 47, 197, 49, 48, 17, 51, 17, 35, 17, 35, 37, 51, 17, 35, 210, 80, 130, + 1, 34, 80, 80, 1, 114, 253, 228, 1, 204, 80, 253, 228, 0, 2, 0, 130, 255, 86, 1, + 244, 1, 114, 0, 5, 0, 9, 0, 26, 64, 10, 8, 9, 5, 1, 4, 8, 1, 4, 7, + 3, 0, 47, 51, 47, 197, 51, 1, 47, 197, 47, 47, 197, 49, 48, 1, 35, 17, 35, 17, + 51, 1, 35, 17, 51, 1, 244, 130, 80, 210, 254, 222, 80, 80, 1, 34, 254, 52, 2, 28, + 253, 228, 2, 28, 0, 1, 0, 0, 255, 86, 1, 244, 3, 62, 0, 3, 0, 13, 179, 3, + 0, 3, 2, 0, 47, 47, 1, 47, 47, 49, 48, 1, 17, 33, 17, 1, 244, 254, 12, 3, + 62, 252, 24, 3, 232, 0, 46, 0, 0, 255, 110, 1, 244, 3, 62, 0, 3, 0, 7, 0, + 11, 0, 15, 0, 19, 0, 23, 0, 27, 0, 31, 0, 35, 0, 39, 0, 43, 0, 47, 0, + 51, 0, 55, 0, 59, 0, 63, 0, 67, 0, 71, 0, 75, 0, 79, 0, 83, 0, 87, 0, + 91, 0, 95, 0, 99, 0, 103, 0, 107, 0, 111, 0, 115, 0, 119, 0, 123, 0, 127, 0, + 131, 0, 135, 0, 139, 0, 143, 0, 147, 0, 151, 0, 155, 0, 159, 0, 163, 0, 167, 0, + 171, 0, 175, 0, 179, 0, 183, 0, 0, 17, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, + 35, 23, 51, 21, 35, 7, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, 35, 23, 51, 21, + 35, 7, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, 35, 23, 51, 21, 35, 7, 51, 21, + 35, 23, 51, 21, 35, 55, 51, 21, 35, 23, 51, 21, 35, 7, 51, 21, 35, 23, 51, 21, + 35, 55, 51, 21, 35, 23, 51, 21, 35, 7, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, + 35, 23, 51, 21, 35, 7, 51, 21, 35, 55, 51, 21, 35, 19, 51, 21, 35, 23, 51, 21, + 35, 55, 51, 21, 35, 7, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, 35, 7, 51, 21, + 35, 23, 51, 21, 35, 55, 51, 21, 35, 7, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, + 35, 7, 51, 21, 35, 23, 51, 21, 35, 55, 51, 21, 35, 7, 51, 21, 35, 23, 51, 21, + 35, 55, 51, 21, 35, 7, 51, 21, 35, 55, 51, 21, 35, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 234, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 234, 39, 39, 78, + 39, 39, 78, 39, 39, 78, 39, 39, 234, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 234, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 234, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 234, 39, 39, 156, 39, 39, 156, 39, 39, 78, 39, 39, 78, 32, 32, 156, + 39, 39, 78, 39, 39, 78, 32, 32, 156, 39, 39, 78, 39, 39, 78, 32, 32, 156, 39, 39, + 78, 39, 39, 78, 32, 32, 156, 39, 39, 78, 39, 39, 78, 32, 32, 156, 39, 39, 78, 39, + 39, 78, 32, 32, 156, 39, 39, 156, 32, 32, 3, 62, 39, 39, 39, 117, 39, 39, 39, 39, + 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 40, 39, 39, 39, 117, + 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, + 39, 39, 39, 3, 208, 39, 39, 39, 117, 39, 117, 39, 39, 39, 117, 39, 117, 39, 39, 39, + 117, 39, 118, 39, 39, 39, 117, 39, 117, 39, 39, 39, 117, 39, 117, 39, 39, 39, 117, 39, + 117, 39, 39, 39, 0, 85, 0, 0, 255, 110, 1, 244, 3, 62, 0, 3, 0, 7, 0, 11, + 0, 15, 0, 19, 0, 23, 0, 27, 0, 31, 0, 35, 0, 39, 0, 43, 0, 47, 0, 51, + 0, 55, 0, 59, 0, 63, 0, 67, 0, 71, 0, 75, 0, 79, 0, 83, 0, 87, 0, 91, + 0, 95, 0, 99, 0, 103, 0, 107, 0, 111, 0, 115, 0, 119, 0, 123, 0, 127, 0, 131, + 0, 135, 0, 139, 0, 143, 0, 147, 0, 151, 0, 155, 0, 159, 0, 163, 0, 167, 0, 171, + 0, 175, 0, 179, 0, 183, 0, 187, 0, 191, 0, 195, 0, 199, 0, 203, 0, 207, 0, 211, + 0, 215, 0, 219, 0, 223, 0, 227, 0, 231, 0, 235, 0, 239, 0, 243, 0, 247, 0, 251, + 0, 255, 1, 3, 1, 7, 1, 11, 1, 15, 1, 19, 1, 23, 1, 27, 1, 31, 1, 35, + 1, 39, 1, 43, 1, 47, 1, 51, 1, 55, 1, 59, 1, 63, 1, 67, 1, 71, 1, 75, + 1, 79, 1, 83, 0, 0, 17, 51, 21, 35, 55, 51, 21, 35, 7, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 7, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 7, 51, 21, 35, 55, 51, 21, 35, 5, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 5, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 5, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 5, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 5, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 19, 51, 21, 35, 5, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 5, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 5, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 5, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 5, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 5, 51, + 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, 21, 35, 55, 51, + 21, 35, 55, 51, 21, 35, 39, 39, 78, 39, 39, 39, 39, 39, 78, 39, 39, 39, 39, 39, + 78, 39, 39, 39, 39, 39, 78, 39, 39, 39, 39, 39, 78, 39, 39, 39, 39, 39, 78, 39, + 39, 254, 122, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 254, 122, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 254, + 122, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 254, 122, + 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 254, 122, 39, + 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 39, 32, 32, 254, + 44, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 32, + 32, 254, 44, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 78, 32, 32, 254, 44, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, + 39, 39, 78, 32, 32, 254, 44, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 78, 32, 32, 254, 44, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 32, 32, 254, 44, 39, 39, 78, 39, 39, 78, 39, 39, 78, + 39, 39, 78, 39, 39, 78, 39, 39, 78, 32, 32, 3, 62, 39, 39, 39, 39, 39, 39, 39, + 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 118, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 3, 130, 39, 117, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 118, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 117, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 0, 73, 0, 0, 255, 86, 1, 244, 3, 62, 0, 3, 0, 7, 0, 11, 0, + 15, 0, 19, 0, 23, 0, 27, 0, 31, 0, 35, 0, 39, 0, 43, 0, 47, 0, 51, 0, + 55, 0, 59, 0, 63, 0, 67, 0, 71, 0, 75, 0, 79, 0, 83, 0, 87, 0, 91, 0, + 95, 0, 99, 0, 103, 0, 107, 0, 111, 0, 115, 0, 119, 0, 123, 0, 127, 0, 131, 0, + 135, 0, 139, 0, 143, 0, 147, 0, 151, 0, 155, 0, 159, 0, 163, 0, 167, 0, 171, 0, + 175, 0, 179, 0, 183, 0, 187, 0, 191, 0, 195, 0, 199, 0, 203, 0, 207, 0, 211, 0, + 215, 0, 219, 0, 223, 0, 227, 0, 231, 0, 235, 0, 239, 0, 243, 0, 247, 0, 251, 0, + 255, 1, 3, 1, 7, 1, 11, 1, 15, 1, 19, 1, 23, 1, 27, 1, 31, 1, 59, 0, + 0, 19, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, + 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, + 35, 7, 51, 53, 35, 23, 51, 53, 35, 5, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, + 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, + 35, 55, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 5, 51, 53, + 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, + 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, + 35, 23, 51, 53, 35, 5, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, + 35, 55, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, + 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 5, 51, 53, 35, 23, 51, 53, + 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, + 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, + 35, 5, 51, 53, 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, + 35, 23, 51, 53, 35, 7, 51, 53, 35, 23, 51, 53, 35, 55, 51, 53, 35, 23, 51, 53, + 35, 7, 51, 53, 35, 23, 51, 53, 35, 19, 17, 35, 53, 35, 21, 35, 53, 35, 21, 35, + 53, 35, 21, 35, 53, 35, 21, 35, 53, 35, 21, 35, 53, 35, 21, 35, 17, 39, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 254, 122, 39, 39, 78, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 254, 122, 39, 39, 78, 39, 39, 78, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 78, 39, 39, 254, 122, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, + 39, 78, 39, 39, 254, 122, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, + 39, 254, 122, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, + 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 78, 39, 39, 71, 32, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 2, 240, 39, 39, 39, 117, 39, 39, + 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 117, 39, 39, + 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, + 39, 117, 39, 39, 39, 118, 40, 40, 40, 39, 39, 39, 39, 118, 40, 40, 40, 39, 39, 39, + 39, 118, 40, 40, 40, 118, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, + 39, 39, 39, 39, 39, 117, 39, 39, 39, 117, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, + 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 117, 39, 39, 39, 117, 39, 39, + 39, 39, 39, 39, 39, 117, 39, 39, 39, 39, 39, 39, 39, 117, 39, 39, 39, 3, 130, 252, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 3, 232, 0, 1, 0, 0, 255, + 86, 1, 244, 3, 62, 0, 19, 0, 46, 64, 20, 3, 0, 6, 17, 10, 13, 7, 16, 12, + 1, 18, 14, 7, 3, 10, 16, 0, 13, 5, 9, 0, 47, 51, 47, 51, 51, 197, 50, 50, + 47, 51, 1, 47, 47, 47, 51, 197, 50, 47, 51, 197, 50, 49, 48, 1, 51, 21, 35, 17, + 35, 17, 35, 17, 35, 17, 35, 53, 51, 17, 51, 17, 51, 17, 51, 1, 114, 130, 130, 80, + 80, 80, 130, 130, 80, 80, 80, 1, 114, 80, 254, 52, 1, 204, 254, 52, 1, 204, 80, 1, + 204, 254, 52, 1, 204, 0, 1, 0, 0, 255, 86, 1, 244, 3, 62, 0, 19, 0, 46, 64, + 20, 0, 17, 19, 2, 15, 9, 5, 12, 7, 10, 13, 15, 12, 18, 9, 2, 5, 19, 8, + 4, 0, 47, 47, 51, 197, 50, 47, 51, 197, 50, 47, 1, 47, 51, 47, 50, 50, 197, 50, + 50, 47, 51, 49, 48, 1, 21, 35, 17, 35, 17, 35, 53, 51, 53, 35, 53, 51, 17, 51, + 17, 51, 21, 35, 21, 1, 244, 210, 80, 210, 210, 210, 210, 80, 210, 210, 1, 34, 80, 254, + 132, 1, 124, 80, 80, 80, 1, 124, 254, 132, 80, 80 + }; +} diff --git a/src/ogfx/SDLInclude.hpp b/src/ogfx/resources/UbuntuMonoRegularTTF.hpp similarity index 82% rename from src/ogfx/SDLInclude.hpp rename to src/ogfx/resources/UbuntuMonoRegularTTF.hpp index fced569..d0ea5e2 100644 --- a/src/ogfx/SDLInclude.hpp +++ b/src/ogfx/resources/UbuntuMonoRegularTTF.hpp @@ -20,12 +20,10 @@ #pragma once -#ifdef _WIN32 -#define SDL_MAIN_HANDLED -#undef __linux__ -#endif +#include -#include -#include -#include -#include +namespace ogfx +{ + extern const uint32_t ubuntu_mono_regular_ttf_size; + extern const ostd::UByte ubuntu_mono_regular_ttf_data[]; +} diff --git a/src/ogfx/Animation.cpp b/src/ogfx/utils/Animation.cpp similarity index 69% rename from src/ogfx/Animation.cpp rename to src/ogfx/utils/Animation.cpp index a9f734c..94064d2 100644 --- a/src/ogfx/Animation.cpp +++ b/src/ogfx/utils/Animation.cpp @@ -1,5 +1,25 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + #include "Animation.hpp" -#include +#include "../../ostd/math/Random.hpp" namespace ogfx { diff --git a/src/ogfx/Animation.hpp b/src/ogfx/utils/Animation.hpp similarity index 67% rename from src/ogfx/Animation.hpp rename to src/ogfx/utils/Animation.hpp index 46a7e2e..fa7413d 100644 --- a/src/ogfx/Animation.hpp +++ b/src/ogfx/utils/Animation.hpp @@ -1,8 +1,28 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + #pragma once #include #include -#include +#include namespace ogfx { @@ -58,7 +78,7 @@ namespace ogfx inline void setColumnOffset(int32_t o) { m_column_offset = o; } inline void setRowOffset(int32_t o) { m_row_offset = o; } inline void setStill(bool s) { m_still = s; } - inline void setSpriteSheet(const Image& img) { m_spriteSheet = &img; } + inline void setSpriteSheet(Image& img) { m_spriteSheet = &img; } inline int32_t getFrameNumber(void) const { return m_frames; } inline int32_t getColumnNumber(void) const { return m_columns; } @@ -69,11 +89,12 @@ namespace ogfx inline bool isStill(void) const { return m_still; } inline ostd::Rectangle getFrameRect(void) const { return m_frame_rect; } inline const Image& getSpriteSheet(void) const { return (m_spriteSheet != nullptr ? *m_spriteSheet : InvalidImage); } + inline Image& getSpriteSheet(void) { return (m_spriteSheet != nullptr ? *m_spriteSheet : InvalidImage); } inline bool hasImage(void) const { return m_spriteSheet != nullptr; } private: - const Image* m_spriteSheet { nullptr }; - inline static const Image InvalidImage; + Image* m_spriteSheet { nullptr }; + inline static Image InvalidImage; int32_t m_frames; int32_t m_rows; diff --git a/src/ogfx/utils/SDLInclude.hpp b/src/ogfx/utils/SDLInclude.hpp new file mode 100644 index 0000000..082e157 --- /dev/null +++ b/src/ogfx/utils/SDLInclude.hpp @@ -0,0 +1,85 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace ogfx +{ + class SDLSysten + { + public: + static inline void acquire(void) + { + if (s_refCount == 0) + init_sdl(); + s_refCount++; + } + + static inline void release(void) + { + s_refCount--; + if (s_refCount == 0) + shutdown_sdl(); + } + + private: + static inline void init_sdl(void) + { + if (!SDL_Init(SDL_INIT_VIDEO)) + { + OX_FATAL("SDL could not initialize! Error: %s\n", SDL_GetError()); + exit(ErrorSDLInitFailed); + } + if (!TTF_Init()) + { + OX_FATAL("SDL_ttf could not initialize! Error: %s\n", SDL_GetError()); + SDL_Quit(); + exit(ErrorSDLTTFInitFailed); + } + } + + static inline void shutdown_sdl(void) + { + ostd::SignalHandler::emitSignal(ostd::tBuiltinSignals::BeforeSDLShutdown, ostd:: tSignalPriority::RealTime); + TTF_Quit(); + SDL_Quit(); + } + + private: + inline static int s_refCount { 0 }; + + public: + inline static constexpr int32_t ErrorSDLInitFailed { 1 }; + inline static constexpr int32_t ErrorSDLTTFInitFailed { 2 }; + + }; +} diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.c b/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.c new file mode 100644 index 0000000..5bff7e2 --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.c @@ -0,0 +1,189 @@ +/* + +SDL3_framerate.c: framerate manager + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#include "SDL3_framerate.h" + +/*! +\brief Internal wrapper to SDL_GetTicks that ensures a non-zero return value. + +\return The tick count. +*/ +Uint64 _getTicks() +{ + Uint64 ticks = SDL_GetTicks(); + + /* + * Since baseticks!=0 is used to track initialization + * we need to ensure that the tick count is always >0 + * since SDL_GetTicks may not have incremented yet and + * return 0 depending on the timing of the calls. + */ + if (ticks == 0) { + return 1; + } else { + return ticks; + } +} + +/*! +\brief Initialize the framerate manager. + +Initialize the framerate manager, set default framerate of 30Hz and +reset delay interpolation. + +\param manager Pointer to the framerate manager. +*/ +void SDL_initFramerate(FPSmanager * manager) +{ + /* + * Store some sane values + */ + manager->framecount = 0; + manager->rate = FPS_DEFAULT; + manager->rateticks = (1000.0f / (float) FPS_DEFAULT); + manager->baseticks = _getTicks(); + manager->lastticks = manager->baseticks; + +} + +/*! +\brief Set the framerate in Hz + +Sets a new framerate for the manager and reset delay interpolation. +Rate values must be between FPS_LOWER_LIMIT and FPS_UPPER_LIMIT inclusive to be accepted. + +\param manager Pointer to the framerate manager. +\param rate The new framerate in Hz (frames per second). + +\return 0 for sucess and -1 for error. +*/ +int SDL_setFramerate(FPSmanager * manager, Uint32 rate) +{ + if ((rate >= FPS_LOWER_LIMIT) && (rate <= FPS_UPPER_LIMIT)) { + manager->framecount = 0; + manager->rate = rate; + manager->rateticks = (1000.0f / (float) rate); + return (0); + } else { + return (-1); + } +} + +/*! +\brief Return the current target framerate in Hz + +Get the currently set framerate of the manager. + +\param manager Pointer to the framerate manager. + +\return Current framerate in Hz or -1 for error. +*/ +int SDL_getFramerate(FPSmanager * manager) +{ + if (manager == NULL) { + return (-1); + } else { + return ((int)manager->rate); + } +} + +/*! +\brief Return the current framecount. + +Get the current framecount from the framerate manager. +A frame is counted each time SDL_framerateDelay is called. + +\param manager Pointer to the framerate manager. + +\return Current frame count or -1 for error. +*/ +int SDL_getFramecount(FPSmanager * manager) +{ + if (manager == NULL) { + return (-1); + } else { + return ((int)manager->framecount); + } +} + +/*! +\brief Delay execution to maintain a constant framerate and calculate fps. + +Generate a delay to accomodate currently set framerate. Call once in the +graphics/rendering loop. If the computer cannot keep up with the rate (i.e. +drawing too slow), the delay is zero and the delay interpolation is reset. + +\param manager Pointer to the framerate manager. + +\return The time that passed since the last call to the function in ms. May return 0. +*/ +Uint64 SDL_framerateDelay(FPSmanager * manager) +{ + Uint64 current_ticks; + Uint64 target_ticks; + Uint64 the_delay; + Uint64 time_passed = 0; + + /* + * No manager, no delay + */ + if (manager == NULL) { + return 0; + } + + /* + * Initialize uninitialized manager + */ + if (manager->baseticks == 0) { + SDL_initFramerate(manager); + } + + /* + * Next frame + */ + manager->framecount++; + + /* + * Get/calc ticks + */ + current_ticks = _getTicks(); + time_passed = current_ticks - manager->lastticks; + manager->lastticks = current_ticks; + target_ticks = manager->baseticks + (Uint64) ((float) manager->framecount * manager->rateticks); + + if (current_ticks <= target_ticks) { + the_delay = target_ticks - current_ticks; + SDL_Delay(the_delay); + } else { + manager->framecount = 0; + manager->baseticks = _getTicks(); + } + + return time_passed; +} diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.h b/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.h new file mode 100644 index 0000000..43bf8fc --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_framerate.h @@ -0,0 +1,100 @@ +/* + +SDL3_framerate.h: framerate manager + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#ifndef _SDL3_framerate_h +#define _SDL3_framerate_h + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + /* --- */ + +#include + + /* --------- Definitions */ + + /*! + \brief Highest possible rate supported by framerate controller in Hz (1/s). + */ +#define FPS_UPPER_LIMIT 200 + + /*! + \brief Lowest possible rate supported by framerate controller in Hz (1/s). + */ +#define FPS_LOWER_LIMIT 1 + + /*! + \brief Default rate of framerate controller in Hz (1/s). + */ +#define FPS_DEFAULT 30 + + /*! + \brief Structure holding the state and timing information of the framerate controller. + */ + typedef struct { + Uint32 framecount; + float rateticks; + Uint64 baseticks; + Uint64 lastticks; + Uint32 rate; + } FPSmanager; + + /* ---- Function Prototypes */ + +#ifdef _MSC_VER +# if defined(DLL_EXPORT) && !defined(LIBSDL3_GFX_DLL_IMPORT) +# define SDL3_FRAMERATE_SCOPE __declspec(dllexport) +# else +# ifdef LIBSDL3_GFX_DLL_IMPORT +# define SDL3_FRAMERATE_SCOPE __declspec(dllimport) +# endif +# endif +#endif +#ifndef SDL3_FRAMERATE_SCOPE +# define SDL3_FRAMERATE_SCOPE extern +#endif + + /* Functions return 0 or value for sucess and -1 for error */ + + SDL3_FRAMERATE_SCOPE void SDL_initFramerate(FPSmanager * manager); + SDL3_FRAMERATE_SCOPE int SDL_setFramerate(FPSmanager * manager, Uint32 rate); + SDL3_FRAMERATE_SCOPE int SDL_getFramerate(FPSmanager * manager); + SDL3_FRAMERATE_SCOPE int SDL_getFramecount(FPSmanager * manager); + SDL3_FRAMERATE_SCOPE Uint64 SDL_framerateDelay(FPSmanager * manager); + + /* --- */ + + /* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* _SDL3_framerate_h */ diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.c b/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.c new file mode 100644 index 0000000..1726d24 --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.c @@ -0,0 +1,3794 @@ +/* + +SDL3_gfxPrimitives.c: graphics primitives for SDL3 renderers + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#include +#include +#include +#include + +#include "SDL3_gfxPrimitives.h" +#include "SDL3_rotozoom.h" +#include "SDL3_gfxPrimitives_font.h" + +/* ---- Pixel */ + +/*! +\brief Draw pixel in currently set color. + +\param renderer The renderer to draw on. +\param x X (horizontal) coordinate of the pixel. +\param y Y (vertical) coordinate of the pixel. + +\returns Returns true on success, false on failure. +*/ +bool pixel(SDL_Renderer *renderer, float x, float y) +{ + return SDL_RenderPoint(renderer, x, y); +} + +/*! +\brief Draw pixel with blending enabled if a<255. + +\param renderer The renderer to draw on. +\param x X (horizontal) coordinate of the pixel. +\param y Y (vertical) coordinate of the pixel. +\param color The color value of the pixel to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool pixelColor(SDL_Renderer * renderer, float x, float y, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return pixelRGBA(renderer, x, y, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw pixel with blending enabled if a<255. + +\param renderer The renderer to draw on. +\param x X (horizontal) coordinate of the pixel. +\param y Y (vertical) coordinate of the pixel. +\param r The red color value of the pixel to draw. +\param g The green color value of the pixel to draw. +\param b The blue color value of the pixel to draw. +\param a The alpha value of the pixel to draw. + +\returns Returns true on success, false on failure. +*/ +bool pixelRGBA(SDL_Renderer * renderer, float x, float y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + result &= SDL_RenderPoint(renderer, x, y); + return result; +} + +/*! +\brief Draw pixel with blending enabled and using alpha weight on color. + +\param renderer The renderer to draw on. +\param x The horizontal coordinate of the pixel. +\param y The vertical position of the pixel. +\param r The red color value of the pixel to draw. +\param g The green color value of the pixel to draw. +\param b The blue color value of the pixel to draw. +\param a The alpha value of the pixel to draw. +\param weight The weight multiplied into the alpha value of the pixel. + +\returns Returns true on success, false on failure. +*/ +bool pixelRGBAWeight(SDL_Renderer * renderer, float x, float y, Uint8 r, Uint8 g, Uint8 b, Uint8 a, Uint32 weight) +{ + /* + * Modify Alpha by weight + */ + Uint32 ax = a; + ax = ((ax * weight) >> 8); + if (ax > 255) { + a = 255; + } else { + a = (Uint8)(ax & 0x000000ff); + } + + return pixelRGBA(renderer, x, y, r, g, b, a); +} + +/* ---- Hline */ + +/*! +\brief Draw horizontal line in currently set color + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. left) of the line. +\param x2 X coordinate of the second point (i.e. right) of the line. +\param y Y coordinate of the points of the line. + +\returns Returns true on success, false on failure. +*/ +bool hline(SDL_Renderer * renderer, float x1, float x2, float y) +{ + return SDL_RenderLine(renderer, x1, y, x2, y);; +} + + +/*! +\brief Draw horizontal line with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. left) of the line. +\param x2 X coordinate of the second point (i.e. right) of the line. +\param y Y coordinate of the points of the line. +\param color The color value of the line to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool hlineColor(SDL_Renderer * renderer, float x1, float x2, float y, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return hlineRGBA(renderer, x1, x2, y, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw horizontal line with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. left) of the line. +\param x2 X coordinate of the second point (i.e. right) of the line. +\param y Y coordinate of the points of the line. +\param r The red value of the line to draw. +\param g The green value of the line to draw. +\param b The blue value of the line to draw. +\param a The alpha value of the line to draw. + +\returns Returns true on success, false on failure. +*/ +bool hlineRGBA(SDL_Renderer * renderer, float x1, float x2, float y, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + result &= SDL_RenderLine(renderer, x1, y, x2, y); + return result; +} + +/* ---- Vline */ + +/*! +\brief Draw vertical line in currently set color + +\param renderer The renderer to draw on. +\param x X coordinate of points of the line. +\param y1 Y coordinate of the first point (i.e. top) of the line. +\param y2 Y coordinate of the second point (i.e. bottom) of the line. + +\returns Returns true on success, false on failure. +*/ +bool vline(SDL_Renderer * renderer, float x, float y1, float y2) +{ + return SDL_RenderLine(renderer, x, y1, x, y2);; +} + +/*! +\brief Draw vertical line with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the points of the line. +\param y1 Y coordinate of the first point (i.e. top) of the line. +\param y2 Y coordinate of the second point (i.e. bottom) of the line. +\param color The color value of the line to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool vlineColor(SDL_Renderer * renderer, float x, float y1, float y2, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return vlineRGBA(renderer, x, y1, y2, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw vertical line with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the points of the line. +\param y1 Y coordinate of the first point (i.e. top) of the line. +\param y2 Y coordinate of the second point (i.e. bottom) of the line. +\param r The red value of the line to draw. +\param g The green value of the line to draw. +\param b The blue value of the line to draw. +\param a The alpha value of the line to draw. + +\returns Returns true on success, false on failure. +*/ +bool vlineRGBA(SDL_Renderer * renderer, float x, float y1, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + result &= SDL_RenderLine(renderer, x, y1, x, y2); + return result; +} + +/* ---- Rectangle */ + +/*! +\brief Draw rectangle with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the rectangle. +\param y1 Y coordinate of the first point (i.e. top right) of the rectangle. +\param x2 X coordinate of the second point (i.e. bottom left) of the rectangle. +\param y2 Y coordinate of the second point (i.e. bottom left) of the rectangle. +\param color The color value of the rectangle to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool rectangleColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return rectangleRGBA(renderer, x1, y1, x2, y2, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw rectangle with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the rectangle. +\param y1 Y coordinate of the first point (i.e. top right) of the rectangle. +\param x2 X coordinate of the second point (i.e. bottom left) of the rectangle. +\param y2 Y coordinate of the second point (i.e. bottom left) of the rectangle. +\param r The red value of the rectangle to draw. +\param g The green value of the rectangle to draw. +\param b The blue value of the rectangle to draw. +\param a The alpha value of the rectangle to draw. + +\returns Returns true on success, false on failure. +*/ +bool rectangleRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result; + float tmp; + SDL_FRect rect; + + /* + * Test for special cases of straight lines or single point + */ + if (x1 == x2) { + if (y1 == y2) { + return (pixelRGBA(renderer, x1, y1, r, g, b, a)); + } else { + return (vlineRGBA(renderer, x1, y1, y2, r, g, b, a)); + } + } else { + if (y1 == y2) { + return (hlineRGBA(renderer, x1, x2, y1, r, g, b, a)); + } + } + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + + /* + * Swap y1, y2 if required + */ + if (y1 > y2) { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + /* + * Create destination rect + */ + rect.x = x1; + rect.y = y1; + rect.w = x2 - x1; + rect.h = y2 - y1; + + /* + * Draw + */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + result &= SDL_RenderRect(renderer, &rect); + return result; +} + +/* ---- Rounded Rectangle */ + +/*! +\brief Draw rounded-corner rectangle with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the rectangle. +\param y1 Y coordinate of the first point (i.e. top right) of the rectangle. +\param x2 X coordinate of the second point (i.e. bottom left) of the rectangle. +\param y2 Y coordinate of the second point (i.e. bottom left) of the rectangle. +\param rad The radius of the corner arc. +\param color The color value of the rectangle to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool roundedRectangleColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float rad, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return roundedRectangleRGBA(renderer, x1, y1, x2, y2, rad, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw rounded-corner rectangle with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the rectangle. +\param y1 Y coordinate of the first point (i.e. top right) of the rectangle. +\param x2 X coordinate of the second point (i.e. bottom left) of the rectangle. +\param y2 Y coordinate of the second point (i.e. bottom left) of the rectangle. +\param rad The radius of the corner arc. +\param r The red value of the rectangle to draw. +\param g The green value of the rectangle to draw. +\param b The blue value of the rectangle to draw. +\param a The alpha value of the rectangle to draw. + +\returns Returns true on success, false on failure. +*/ +bool roundedRectangleRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + Sint32 result = 0; + float tmp; + float w, h; + float xx1, xx2; + float yy1, yy2; + + /* + * Check renderer + */ + if (renderer == NULL) + { + return false; + } + + /* + * Check radius vor valid range + */ + if (rad < 0) { + return false; + } + + /* + * Special case - no rounding + */ + if (rad <= 1) { + return rectangleRGBA(renderer, x1, y1, x2, y2, r, g, b, a); + } + + /* + * Test for special cases of straight lines or single point + */ + if (x1 == x2) { + if (y1 == y2) { + return (pixelRGBA(renderer, x1, y1, r, g, b, a)); + } else { + return (vlineRGBA(renderer, x1, y1, y2, r, g, b, a)); + } + } else { + if (y1 == y2) { + return (hlineRGBA(renderer, x1, x2, y1, r, g, b, a)); + } + } + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + + /* + * Swap y1, y2 if required + */ + if (y1 > y2) { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + /* + * Calculate width&height + */ + w = x2 - x1; + h = y2 - y1; + + /* + * Maybe adjust radius + */ + if ((rad * 2) > w) + { + rad = (Sint32) w / 2; + } + if ((rad * 2) > h) + { + rad = (Sint32) h / 2; + } + + /* + * Draw corners + */ + xx1 = x1 + rad; + xx2 = x2 - rad; + yy1 = y1 + rad; + yy2 = y2 - rad; + result &= arcRGBA(renderer, xx1, yy1, rad, 180, 270, r, g, b, a); + result &= arcRGBA(renderer, xx2, yy1, rad, 270, 360, r, g, b, a); + result &= arcRGBA(renderer, xx1, yy2, rad, 90, 180, r, g, b, a); + result &= arcRGBA(renderer, xx2, yy2, rad, 0, 90, r, g, b, a); + + /* + * Draw lines + */ + if (xx1 <= xx2) { + result &= hlineRGBA(renderer, xx1, xx2, y1, r, g, b, a); + result &= hlineRGBA(renderer, xx1, xx2, y2, r, g, b, a); + } + if (yy1 <= yy2) { + result &= vlineRGBA(renderer, x1, yy1, yy2, r, g, b, a); + result &= vlineRGBA(renderer, x2, yy1, yy2, r, g, b, a); + } + + return result; +} + +/* ---- Rounded Box */ + +/*! +\brief Draw rounded-corner box (filled rectangle) with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the box. +\param y1 Y coordinate of the first point (i.e. top right) of the box. +\param x2 X coordinate of the second point (i.e. bottom left) of the box. +\param y2 Y coordinate of the second point (i.e. bottom left) of the box. +\param rad The radius of the corner arcs of the box. +\param color The color value of the box to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool roundedBoxColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float rad, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return roundedBoxRGBA(renderer, x1, y1, x2, y2, rad, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw rounded-corner box (filled rectangle) with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the box. +\param y1 Y coordinate of the first point (i.e. top right) of the box. +\param x2 X coordinate of the second point (i.e. bottom left) of the box. +\param y2 Y coordinate of the second point (i.e. bottom left) of the box. +\param rad The radius of the corner arcs of the box. +\param r The red value of the box to draw. +\param g The green value of the box to draw. +\param b The blue value of the box to draw. +\param a The alpha value of the box to draw. + +\returns Returns true on success, false on failure. +*/ +bool roundedBoxRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, + float y2, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result; + float w, h, r2, tmp; + float cx = 0; + float cy = rad; + float ocx = (float) 0xffff; + float ocy = (float) 0xffff; + float df = 1 - rad; + float d_e = 3; + float d_se = -2 * rad + 5; + float xpcx, xmcx, xpcy, xmcy; + float ypcy, ymcy, ypcx, ymcx; + float x, y, dx, dy; + + /* + * Check destination renderer + */ + if (renderer == NULL) + { + return false; + } + + /* + * Check radius vor valid range + */ + if (rad < 0) { + return false; + } + + /* + * Special case - no rounding + */ + if (rad <= 1) { + return boxRGBA(renderer, x1, y1, x2, y2, r, g, b, a); + } + + /* + * Test for special cases of straight lines or single point + */ + if (x1 == x2) { + if (y1 == y2) { + return (pixelRGBA(renderer, x1, y1, r, g, b, a)); + } else { + return (vlineRGBA(renderer, x1, y1, y2, r, g, b, a)); + } + } else { + if (y1 == y2) { + return (hlineRGBA(renderer, x1, x2, y1, r, g, b, a)); + } + } + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + + /* + * Swap y1, y2 if required + */ + if (y1 > y2) { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + /* + * Calculate width&height + */ + w = x2 - x1 + 1; + h = y2 - y1 + 1; + + /* + * Maybe adjust radius + */ + r2 = rad + rad; + if (r2 > w) + { + rad = (Sint32) w / 2; + r2 = rad + rad; + } + if (r2 > h) + { + rad = (Sint32) h / 2; + } + + /* Setup filled circle drawing for corners */ + x = x1 + rad; + y = y1 + rad; + dx = x2 - x1 - rad - rad; + dy = y2 - y1 - rad - rad; + + /* + * Set color + */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + + /* + * Draw corners + */ + do { + xpcx = x + cx; + xmcx = x - cx; + xpcy = x + cy; + xmcy = x - cy; + if (ocy != cy) { + if (cy > 0) { + ypcy = y + cy; + ymcy = y - cy; + result &= hline(renderer, xmcx, xpcx + dx, ypcy + dy); + result &= hline(renderer, xmcx, xpcx + dx, ymcy); + } else { + result &= hline(renderer, xmcx, xpcx + dx, y); + } + ocy = cy; + } + if (ocx != cx) { + if (cx != cy) { + if (cx > 0) { + ypcx = y + cx; + ymcx = y - cx; + result &= hline(renderer, xmcy, xpcy + dx, ymcx); + result &= hline(renderer, xmcy, xpcy + dx, ypcx + dy); + } else { + result &= hline(renderer, xmcy, xpcy + dx, y); + } + } + ocx = cx; + } + + /* + * Update + */ + if (df < 0) { + df += d_e; + d_e += 2; + d_se += 2; + } else { + df += d_se; + d_e += 2; + d_se += 4; + cy--; + } + cx++; + } while (cx <= cy); + + /* Inside */ + if (dx > 0 && dy > 0) { + result &= boxRGBA(renderer, x1, y1 + rad + 1, x2, y2 - rad, r, g, b, a); + } + + return (result); +} + +/* ---- Box */ + +/*! +\brief Draw box (filled rectangle) with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the box. +\param y1 Y coordinate of the first point (i.e. top right) of the box. +\param x2 X coordinate of the second point (i.e. bottom left) of the box. +\param y2 Y coordinate of the second point (i.e. bottom left) of the box. +\param color The color value of the box to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool boxColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return boxRGBA(renderer, x1, y1, x2, y2, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw box (filled rectangle) with blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. top right) of the box. +\param y1 Y coordinate of the first point (i.e. top right) of the box. +\param x2 X coordinate of the second point (i.e. bottom left) of the box. +\param y2 Y coordinate of the second point (i.e. bottom left) of the box. +\param r The red value of the box to draw. +\param g The green value of the box to draw. +\param b The blue value of the box to draw. +\param a The alpha value of the box to draw. + +\returns Returns true on success, false on failure. +*/ +bool boxRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result; + float tmp; + SDL_FRect rect; + + /* + * Test for special cases of straight lines or single point + */ + if (x1 == x2) { + if (y1 == y2) { + return (pixelRGBA(renderer, x1, y1, r, g, b, a)); + } else { + return (vlineRGBA(renderer, x1, y1, y2, r, g, b, a)); + } + } else { + if (y1 == y2) { + return (hlineRGBA(renderer, x1, x2, y1, r, g, b, a)); + } + } + + /* + * Swap x1, x2 if required + */ + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + + /* + * Swap y1, y2 if required + */ + if (y1 > y2) { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + /* + * Create destination rect + */ + rect.x = x1; + rect.y = y1; + rect.w = x2 - x1 + 1; + rect.h = y2 - y1 + 1; + + /* + * Draw + */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + result &= SDL_RenderFillRect(renderer, &rect); + return result; +} + +/* ----- Line */ + +/*! +\brief Draw line with alpha blending using the currently set color. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the line. +\param y1 Y coordinate of the first point of the line. +\param x2 X coordinate of the second point of the line. +\param y2 Y coordinate of the second point of the line. + +\returns Returns true on success, false on failure. +*/ +bool line(SDL_Renderer * renderer, float x1, float y1, float x2, float y2) +{ + /* + * Draw + */ + return SDL_RenderLine(renderer, x1, y1, x2, y2); +} + +/*! +\brief Draw line with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the line. +\param y1 Y coordinate of the first point of the line. +\param x2 X coordinate of the second point of the line. +\param y2 Y coordinate of the seond point of the line. +\param color The color value of the line to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool lineColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return lineRGBA(renderer, x1, y1, x2, y2, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw line with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the line. +\param y1 Y coordinate of the first point of the line. +\param x2 X coordinate of the second point of the line. +\param y2 Y coordinate of the second point of the line. +\param r The red value of the line to draw. +\param g The green value of the line to draw. +\param b The blue value of the line to draw. +\param a The alpha value of the line to draw. + +\returns Returns true on success, false on failure. +*/ +bool lineRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + bool result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + result &= SDL_RenderLine(renderer, x1, y1, x2, y2); + return result; +} + +/* ---- AA Line */ + +#define AAlevels 256 +#define AAbits 8 + +/*! +\brief Internal function to draw anti-aliased line with alpha blending and endpoint control. + +This implementation of the Wu antialiasing code is based on Mike Abrash's +DDJ article which was reprinted as Chapter 42 of his Graphics Programming +Black Book, but has been optimized to work with SDL and utilizes 32-bit +fixed-point arithmetic by A. Schiffler. The endpoint control allows the +supression to draw the last pixel useful for rendering continous aa-lines +with alpha<255. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the aa-line. +\param y1 Y coordinate of the first point of the aa-line. +\param x2 X coordinate of the second point of the aa-line. +\param y2 Y coordinate of the second point of the aa-line. +\param r The red value of the aa-line to draw. +\param g The green value of the aa-line to draw. +\param b The blue value of the aa-line to draw. +\param a The alpha value of the aa-line to draw. +\param draw_endpoint Flag indicating if the endpoint should be drawn; draw if non-zero. + +\returns Returns true on success, false on failure. +*/ +bool _aalineRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a, bool draw_endpoint) +{ + float xx0, yy0, xx1, yy1; + bool result; + Uint32 intshift, erracc, erradj; + Uint32 erracctmp, wgt; + Sint32 dx, dy, tmp, xdir, y0p1, x0pxdir; + + /* + * Keep on working with 32bit numbers + */ + xx0 = x1; + yy0 = y1; + xx1 = x2; + yy1 = y2; + + /* + * Reorder points to make dy positive + */ + if (yy0 > yy1) { + tmp = yy0; + yy0 = yy1; + yy1 = tmp; + tmp = xx0; + xx0 = xx1; + xx1 = tmp; + } + + /* + * Calculate distance + */ + dx = xx1 - xx0; + dy = yy1 - yy0; + + /* + * Adjust for negative dx and set xdir + */ + if (dx >= 0) { + xdir = 1; + } else { + xdir = -1; + dx = (-dx); + } + + /* + * Check for special cases + */ + if (dx == 0) { + /* + * Vertical line + */ + if (draw_endpoint) + { + return (vlineRGBA(renderer, x1, y1, y2, r, g, b, a)); + } else { + if (dy > 0) { + return (vlineRGBA(renderer, x1, yy0, yy0+dy, r, g, b, a)); + } else { + return (pixelRGBA(renderer, x1, y1, r, g, b, a)); + } + } + } else if (dy == 0) { + /* + * Horizontal line + */ + if (draw_endpoint) + { + return (hlineRGBA(renderer, x1, x2, y1, r, g, b, a)); + } else { + if (dx > 0) { + return (hlineRGBA(renderer, xx0, xx0+(xdir*dx), y1, r, g, b, a)); + } else { + return (pixelRGBA(renderer, x1, y1, r, g, b, a)); + } + } + } else if ((dx == dy) && (draw_endpoint)) { + /* + * Diagonal line (with endpoint) + */ + return (lineRGBA(renderer, x1, y1, x2, y2, r, g, b, a)); + } + + + /* + * Line is not horizontal, vertical or diagonal (with endpoint) + */ + result = true; + + /* + * Zero accumulator + */ + erracc = 0; + + /* + * # of bits by which to shift erracc to get intensity level + */ + intshift = 32 - AAbits; + + /* + * Draw the initial pixel in the foreground color + */ + result &= pixelRGBA(renderer, x1, y1, r, g, b, a); + + /* + * x-major or y-major? + */ + if (dy > dx) { + + /* + * y-major. Calculate 16-bit fixed point fractional part of a pixel that + * X advances every time Y advances 1 pixel, truncating the result so that + * we won't overrun the endpoint along the X axis + */ + /* + * Not-so-portable version: erradj = ((Uint64)dx << 32) / (Uint64)dy; + */ + erradj = ((dx << 16) / dy) << 16; + + /* + * draw all pixels other than the first and last + */ + x0pxdir = xx0 + xdir; + while (--dy) { + erracctmp = erracc; + erracc += erradj; + if (erracc <= erracctmp) { + /* + * rollover in error accumulator, x coord advances + */ + xx0 = x0pxdir; + x0pxdir += xdir; + } + yy0++; /* y-major so always advance Y */ + + /* + * the AAbits most significant bits of erracc give us the intensity + * weighting for this pixel, and the complement of the weighting for + * the paired pixel. + */ + wgt = (erracc >> intshift) & 255; + result &= pixelRGBAWeight (renderer, xx0, yy0, r, g, b, a, 255 - wgt); + result &= pixelRGBAWeight (renderer, x0pxdir, yy0, r, g, b, a, wgt); + } + + } else { + + /* + * x-major line. Calculate 16-bit fixed-point fractional part of a pixel + * that Y advances each time X advances 1 pixel, truncating the result so + * that we won't overrun the endpoint along the X axis. + */ + /* + * Not-so-portable version: erradj = ((Uint64)dy << 32) / (Uint64)dx; + */ + erradj = ((dy << 16) / dx) << 16; + + /* + * draw all pixels other than the first and last + */ + y0p1 = yy0 + 1; + while (--dx) { + + erracctmp = erracc; + erracc += erradj; + if (erracc <= erracctmp) { + /* + * Accumulator turned over, advance y + */ + yy0 = y0p1; + y0p1++; + } + xx0 += xdir; /* x-major so always advance X */ + /* + * the AAbits most significant bits of erracc give us the intensity + * weighting for this pixel, and the complement of the weighting for + * the paired pixel. + */ + wgt = (erracc >> intshift) & 255; + result &= pixelRGBAWeight (renderer, xx0, yy0, r, g, b, a, 255 - wgt); + result &= pixelRGBAWeight (renderer, xx0, y0p1, r, g, b, a, wgt); + } + } + + /* + * Do we have to draw the endpoint + */ + if (draw_endpoint) { + /* + * Draw final pixel, always exactly intersected by the line and doesn't + * need to be weighted. + */ + result &= pixelRGBA (renderer, x2, y2, r, g, b, a); + } + + return (result); +} + +/*! +\brief Draw anti-aliased line with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the aa-line. +\param y1 Y coordinate of the first point of the aa-line. +\param x2 X coordinate of the second point of the aa-line. +\param y2 Y coordinate of the second point of the aa-line. +\param color The color value of the aa-line to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool aalineColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return _aalineRGBA(renderer, x1, y1, x2, y2, c[0], c[1], c[2], c[3], true); +} + +/*! +\brief Draw anti-aliased line with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the aa-line. +\param y1 Y coordinate of the first point of the aa-line. +\param x2 X coordinate of the second point of the aa-line. +\param y2 Y coordinate of the second point of the aa-line. +\param r The red value of the aa-line to draw. +\param g The green value of the aa-line to draw. +\param b The blue value of the aa-line to draw. +\param a The alpha value of the aa-line to draw. + +\returns Returns true on success, false on failure. +*/ +bool aalineRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return _aalineRGBA(renderer, x1, y1, x2, y2, r, g, b, a, true); +} + +/* ----- Circle */ + +/*! +\brief Draw circle with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the circle. +\param y Y coordinate of the center of the circle. +\param rad Radius in pixels of the circle. +\param color The color value of the circle to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool circleColor(SDL_Renderer * renderer, float x, float y, float rad, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return ellipseRGBA(renderer, x, y, rad, rad, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw circle with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the circle. +\param y Y coordinate of the center of the circle. +\param rad Radius in pixels of the circle. +\param r The red value of the circle to draw. +\param g The green value of the circle to draw. +\param b The blue value of the circle to draw. +\param a The alpha value of the circle to draw. + +\returns Returns true on success, false on failure. +*/ +bool circleRGBA(SDL_Renderer * renderer, float x, float y, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return ellipseRGBA(renderer, x, y, rad, rad, r, g, b, a); +} + +/* ----- Arc */ + +/*! +\brief Arc with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the arc. +\param y Y coordinate of the center of the arc. +\param rad Radius in pixels of the arc. +\param start Starting radius in degrees of the arc. 0 degrees is down, increasing counterclockwise. +\param end Ending radius in degrees of the arc. 0 degrees is down, increasing counterclockwise. +\param color The color value of the arc to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool arcColor(SDL_Renderer * renderer, float x, float y, float rad, Sint32 start, Sint32 end, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return arcRGBA(renderer, x, y, rad, start, end, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Arc with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the arc. +\param y Y coordinate of the center of the arc. +\param rad Radius in pixels of the arc. +\param start Starting radius in degrees of the arc. 0 degrees is down, increasing counterclockwise. +\param end Ending radius in degrees of the arc. 0 degrees is down, increasing counterclockwise. +\param r The red value of the arc to draw. +\param g The green value of the arc to draw. +\param b The blue value of the arc to draw. +\param a The alpha value of the arc to draw. + +\returns Returns true on success, false on failure. +*/ +/* TODO: rewrite algorithm; arc endpoints are not always drawn */ +bool arcRGBA(SDL_Renderer * renderer, float x, float y, float rad, Sint32 start, Sint32 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result; + float cx = 0; + float cy = rad; + float df = 1 - rad; + float d_e = 3; + float d_se = -2 * rad + 5; + float xpcx, xmcx, xpcy, xmcy; + float ypcy, ymcy, ypcx, ymcx; + Uint8 drawoct; + Sint32 startoct, endoct, oct, stopval_start = 0, stopval_end = 0; + double dstart, dend, temp = 0.; + + /* + * Sanity check radius + */ + if (rad < 0) { + return (false); + } + + /* + * Special case for rad=0 - draw a point + */ + if (rad == 0) { + return (pixelRGBA(renderer, x, y, r, g, b, a)); + } + + /* + Octant labeling + + \ 5 | 6 / + \ | / + 4 \ | / 7 + \|/ + ------+------ +x + /|\ + 3 / | \ 0 + / | \ + / 2 | 1 \ + +y + + Initially reset bitmask to 0x00000000 + the set whether or not to keep drawing a given octant. + For example: 0x00111100 means we're drawing in octants 2-5 + */ + drawoct = 0; + + /* + * Fixup angles + */ + start %= 360; + end %= 360; + /* 0 <= start & end < 360; note that sometimes start > end - if so, arc goes back through 0. */ + while (start < 0) start += 360; + while (end < 0) end += 360; + start %= 360; + end %= 360; + + /* now, we find which octants we're drawing in. */ + startoct = start / 45; + endoct = end / 45; + oct = startoct - 1; + + /* stopval_start, stopval_end; what values of cx to stop at. */ + do { + oct = (oct + 1) % 8; + + if (oct == startoct) { + /* need to compute stopval_start for this octant. Look at picture above if this is unclear */ + dstart = (double)start; + switch (oct) + { + case 0: + case 3: + temp = sin(dstart * M_PI / 180.); + break; + case 1: + case 6: + temp = cos(dstart * M_PI / 180.); + break; + case 2: + case 5: + temp = -cos(dstart * M_PI / 180.); + break; + case 4: + case 7: + temp = -sin(dstart * M_PI / 180.); + break; + default: + break; + } + temp *= rad; + stopval_start = (int)temp; + + /* + This isn't arbitrary, but requires graph paper to explain well. + The basic idea is that we're always changing drawoct after we draw, so we + stop immediately after we render the last sensible pixel at x = ((int)temp). + and whether to draw in this octant initially + */ + if (oct % 2) drawoct |= (1 << oct); /* this is basically like saying drawoct[oct] = true, if drawoct were a bool array */ + else drawoct &= 255 - (1 << oct); /* this is basically like saying drawoct[oct] = false */ + } + if (oct == endoct) { + /* need to compute stopval_end for this octant */ + dend = (double)end; + switch (oct) + { + case 0: + case 3: + temp = sin(dend * M_PI / 180); + break; + case 1: + case 6: + temp = cos(dend * M_PI / 180); + break; + case 2: + case 5: + temp = -cos(dend * M_PI / 180); + break; + case 4: + case 7: + temp = -sin(dend * M_PI / 180); + break; + default: + break; + } + temp *= rad; + stopval_end = (int)temp; + + /* and whether to draw in this octant initially */ + if (startoct == endoct) { + /* note: we start drawing, stop, then start again in this case */ + /* otherwise: we only draw in this octant, so initialize it to false, it will get set back to true */ + if (start > end) { + /* unfortunately, if we're in the same octant and need to draw over the whole circle, */ + /* we need to set the rest to true, because the while loop will end at the bottom. */ + drawoct = 255; + } else { + drawoct &= 255 - (1 << oct); + } + } + else if (oct % 2) drawoct &= 255 - (1 << oct); + else drawoct |= (1 << oct); + } else if (oct != startoct) { /* already verified that it's != endoct */ + drawoct |= (1 << oct); /* draw this entire segment */ + } + } while (oct != endoct); + + /* so now we have what octants to draw and when to draw them. all that's left is the actual raster code. */ + + /* + * Set color + */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + + /* + * Draw arc + */ + do { + ypcy = y + cy; + ymcy = y - cy; + if (cx > 0) { + xpcx = x + cx; + xmcx = x - cx; + + /* always check if we're drawing a certain octant before adding a pixel to that octant. */ + if (drawoct & 4) result &= pixel(renderer, xmcx, ypcy); + if (drawoct & 2) result &= pixel(renderer, xpcx, ypcy); + if (drawoct & 32) result &= pixel(renderer, xmcx, ymcy); + if (drawoct & 64) result &= pixel(renderer, xpcx, ymcy); + } else { + if (drawoct & 96) result &= pixel(renderer, x, ymcy); + if (drawoct & 6) result &= pixel(renderer, x, ypcy); + } + + xpcy = x + cy; + xmcy = x - cy; + if (cx > 0 && cx != cy) { + ypcx = y + cx; + ymcx = y - cx; + if (drawoct & 8) result &= pixel(renderer, xmcy, ypcx); + if (drawoct & 1) result &= pixel(renderer, xpcy, ypcx); + if (drawoct & 16) result &= pixel(renderer, xmcy, ymcx); + if (drawoct & 128) result &= pixel(renderer, xpcy, ymcx); + } else if (cx == 0) { + if (drawoct & 24) result &= pixel(renderer, xmcy, y); + if (drawoct & 129) result &= pixel(renderer, xpcy, y); + } + + /* + * Update whether we're drawing an octant + */ + if (stopval_start == cx) { + /* works like an on-off switch. */ + /* This is just in case start & end are in the same octant. */ + if (drawoct & (1 << startoct)) drawoct &= 255 - (1 << startoct); + else drawoct |= (1 << startoct); + } + if (stopval_end == cx) { + if (drawoct & (1 << endoct)) drawoct &= 255 - (1 << endoct); + else drawoct |= (1 << endoct); + } + + /* + * Update pixels + */ + if (df < 0) { + df += d_e; + d_e += 2; + d_se += 2; + } else { + df += d_se; + d_e += 2; + d_se += 4; + cy--; + } + cx++; + } while (cx <= cy); + + return (result); +} + +/* ----- AA Circle */ + +/*! +\brief Draw anti-aliased circle with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the aa-circle. +\param y Y coordinate of the center of the aa-circle. +\param rad Radius in pixels of the aa-circle. +\param color The color value of the aa-circle to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool aacircleColor(SDL_Renderer * renderer, float x, float y, float rad, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return aaellipseRGBA(renderer, x, y, rad, rad, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw anti-aliased circle with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the aa-circle. +\param y Y coordinate of the center of the aa-circle. +\param rad Radius in pixels of the aa-circle. +\param r The red value of the aa-circle to draw. +\param g The green value of the aa-circle to draw. +\param b The blue value of the aa-circle to draw. +\param a The alpha value of the aa-circle to draw. + +\returns Returns true on success, false on failure. +*/ +bool aacircleRGBA(SDL_Renderer * renderer, float x, float y, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + /* + * Draw + */ + return aaellipseRGBA(renderer, x, y, rad, rad, r, g, b, a); +} + +/* ----- Ellipse */ + +/*! +\brief Internal function to draw pixels or lines in 4 quadrants. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the quadrant. +\param y Y coordinate of the center of the quadrant. +\param dx X offset in pixels of the corners of the quadrant. +\param dy Y offset in pixels of the corners of the quadrant. +\param f Flag indicating if the quadrant should be filled (1) or not (0). + +\returns Returns true on success, false on failure. +*/ +bool _drawQuadrants(SDL_Renderer * renderer, float x, float y, float dx, float dy, bool f) +{ + bool result = true; + float xpdx, xmdx; + float ypdy, ymdy; + + if (dx == 0) { + if (dy == 0) { + result &= pixel(renderer, x, y); + } else { + ypdy = y + dy; + ymdy = y - dy; + if (f) { + result &= vline(renderer, x, ymdy, ypdy); + } else { + result &= pixel(renderer, x, ypdy); + result &= pixel(renderer, x, ymdy); + } + } + } else { + xpdx = x + dx; + xmdx = x - dx; + ypdy = y + dy; + ymdy = y - dy; + if (f) { + result &= vline(renderer, xpdx, ymdy, ypdy); + result &= vline(renderer, xmdx, ymdy, ypdy); + } else { + result &= pixel(renderer, xpdx, ypdy); + result &= pixel(renderer, xmdx, ypdy); + result &= pixel(renderer, xpdx, ymdy); + result &= pixel(renderer, xmdx, ymdy); + } + } + + return result; +} + +/*! +\brief Internal function to draw ellipse or filled ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the ellipse. +\param y Y coordinate of the center of the ellipse. +\param rx Horizontal radius in pixels of the ellipse. +\param ry Vertical radius in pixels of the ellipse. +\param r The red value of the ellipse to draw. +\param g The green value of the ellipse to draw. +\param b The blue value of the ellipse to draw. +\param a The alpha value of the ellipse to draw. +\param f Flag indicating if the ellipse should be filled (1) or not (0). + +\returns Returns true on success, false on failure. +*/ +#define DEFAULT_ELLIPSE_OVERSCAN 4 +bool _ellipseRGBA(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a, bool f) +{ + bool result; + Sint32 rxi, ryi; + Sint32 rx2, ry2, rx22, ry22; + Sint32 error; + Sint32 curX, curY, curXp1, curYm1; + Sint32 scrX, scrY, oldX, oldY; + Sint32 deltaX, deltaY; + Sint32 ellipseOverscan; + + /* + * Sanity check radii + */ + if ((rx < 0) || (ry < 0)) { + return (false); + } + + /* + * Set color + */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + + /* + * Special cases for rx=0 and/or ry=0: draw a hline/vline/pixel + */ + if (rx == 0) { + if (ry == 0) { + return (pixel(renderer, x, y)); + } else { + return (vline(renderer, x, y - ry, y + ry)); + } + } else { + if (ry == 0) { + return (hline(renderer, x - rx, x + rx, y)); + } + } + + /* + * Special case for radii > 0 and < 1 + */ + if (rx > 0 && rx < 1) { + rx = 1.0f; + } + + if (ry > 0 && ry < 1) { + ry = 1.0f; + } + + /* + * Adjust overscan + */ + rxi = rx; + ryi = ry; + if (rxi >= 512 || ryi >= 512) + { + ellipseOverscan = DEFAULT_ELLIPSE_OVERSCAN / 4; + } + else if (rxi >= 256 || ryi >= 256) + { + ellipseOverscan = DEFAULT_ELLIPSE_OVERSCAN / 2; + } + else + { + ellipseOverscan = DEFAULT_ELLIPSE_OVERSCAN / 1; + } + + /* + * Top/bottom center points. + */ + oldX = scrX = 0; + oldY = scrY = ryi; + result &= _drawQuadrants(renderer, x, y, 0, ry, f); + + /* Midpoint ellipse algorithm with overdraw */ + rxi *= ellipseOverscan; + ryi *= ellipseOverscan; + rx2 = rxi * rxi; + rx22 = rx2 + rx2; + ry2 = ryi * ryi; + ry22 = ry2 + ry2; + curX = 0; + curY = ryi; + deltaX = 0; + deltaY = rx22 * curY; + + /* Points in segment 1 */ + error = ry2 - rx2 * ryi + rx2 / 4; + while (deltaX <= deltaY) + { + curX++; + deltaX += ry22; + + error += deltaX + ry2; + if (error >= 0) + { + curY--; + deltaY -= rx22; + error -= deltaY; + } + + scrX = curX / ellipseOverscan; + scrY = curY / ellipseOverscan; + if ((scrX != oldX && scrY == oldY) || (scrX != oldX && scrY != oldY)) { + result &= _drawQuadrants(renderer, x, y, scrX, scrY, f); + oldX = scrX; + oldY = scrY; + } + } + + /* Points in segment 2 */ + if (curY > 0) + { + curXp1 = curX + 1; + curYm1 = curY - 1; + error = ry2 * curX * curXp1 + ((ry2 + 3) / 4) + rx2 * curYm1 * curYm1 - rx2 * ry2; + while (curY > 0) + { + curY--; + deltaY -= rx22; + + error += rx2; + error -= deltaY; + + if (error <= 0) + { + curX++; + deltaX += ry22; + error += deltaX; + } + + scrX = curX / ellipseOverscan; + scrY = curY / ellipseOverscan; + if ((scrX != oldX && scrY == oldY) || (scrX != oldX && scrY != oldY)) { + oldY--; + for (;oldY >= scrY; oldY--) { + result &= _drawQuadrants(renderer, x, y, scrX, oldY, f); + /* prevent overdraw */ + if (f) { + oldY = scrY - 1; + } + } + oldX = scrX; + oldY = scrY; + } + } + + /* Remaining points in vertical */ + if (!f) { + oldY--; + for (;oldY >= 0; oldY--) { + result &= _drawQuadrants(renderer, x, y, scrX, oldY, f); + } + } + } + + return (result); +} + +/*! +\brief Draw ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the ellipse. +\param y Y coordinate of the center of the ellipse. +\param rx Horizontal radius in pixels of the ellipse. +\param ry Vertical radius in pixels of the ellipse. +\param color The color value of the ellipse to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool ellipseColor(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return _ellipseRGBA(renderer, x, y, rx, ry, c[0], c[1], c[2], c[3], false); +} + +/*! +\brief Draw ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the ellipse. +\param y Y coordinate of the center of the ellipse. +\param rx Horizontal radius in pixels of the ellipse. +\param ry Vertical radius in pixels of the ellipse. +\param r The red value of the ellipse to draw. +\param g The green value of the ellipse to draw. +\param b The blue value of the ellipse to draw. +\param a The alpha value of the ellipse to draw. + +\returns Returns true on success, false on failure. +*/ +bool ellipseRGBA(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return _ellipseRGBA(renderer, x, y, rx, ry, r, g, b, a, false); +} + +/* ----- Filled Circle */ + +/*! +\brief Draw filled circle with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the filled circle. +\param y Y coordinate of the center of the filled circle. +\param rad Radius in pixels of the filled circle. +\param color The color value of the filled circle to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool filledCircleColor(SDL_Renderer * renderer, float x, float y, float rad, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return filledEllipseRGBA(renderer, x, y, rad, rad, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw filled circle with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the filled circle. +\param y Y coordinate of the center of the filled circle. +\param rad Radius in pixels of the filled circle. +\param r The red value of the filled circle to draw. +\param g The green value of the filled circle to draw. +\param b The blue value of the filled circle to draw. +\param a The alpha value of the filled circle to draw. + +\returns Returns true on success, false on failure. +*/ +bool filledCircleRGBA(SDL_Renderer * renderer, float x, float y, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return _ellipseRGBA(renderer, x, y, rad, rad, r, g ,b, a, true); +} + + +/* ----- AA Ellipse */ + +/* Windows targets do not have lrint, so provide a local inline version */ +#if defined(_MSC_VER) && _MSC_VER < 1920 +/* Detect 64bit and use intrinsic version */ +#ifdef _M_X64 +#include +static __inline long + lrint(float f) +{ + return _mm_cvtss_si32(_mm_load_ss(&f)); +} +#elif defined(_M_IX86) +__inline long int + lrint (double flt) +{ + int intgr; + _asm + { + fld flt + fistp intgr + }; + return intgr; +} +#elif defined(_M_ARM) +#include +#pragma warning(push) +#pragma warning(disable: 4716) +__declspec(naked) long int + lrint (double flt) +{ + __emit(0xEC410B10); // fmdrr d0, r0, r1 + __emit(0xEEBD0B40); // ftosid s0, d0 + __emit(0xEE100A10); // fmrs r0, s0 + __emit(0xE12FFF1E); // bx lr +} +#pragma warning(pop) +#else +#error lrint needed for MSVC on non X86/AMD64/ARM targets. +#endif +#endif + +/*! +\brief Draw anti-aliased ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the aa-ellipse. +\param y Y coordinate of the center of the aa-ellipse. +\param rx Horizontal radius in pixels of the aa-ellipse. +\param ry Vertical radius in pixels of the aa-ellipse. +\param color The color value of the aa-ellipse to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool aaellipseColor(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return aaellipseRGBA(renderer, x, y, rx, ry, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw anti-aliased ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the aa-ellipse. +\param y Y coordinate of the center of the aa-ellipse. +\param rx Horizontal radius in pixels of the aa-ellipse. +\param ry Vertical radius in pixels of the aa-ellipse. +\param r The red value of the aa-ellipse to draw. +\param g The green value of the aa-ellipse to draw. +\param b The blue value of the aa-ellipse to draw. +\param a The alpha value of the aa-ellipse to draw. + +\returns Returns true on success, false on failure. +*/ +bool aaellipseRGBA(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result; + Sint32 i; + Sint32 a2, b2, ds, dt, dxt, t, s, d; + float xp, yp, xs, ys, dyt, od, xx, yy, xc2, yc2; + float cp; + double sab; + Uint8 weight, iweight; + + /* + * Sanity check radii + */ + if ((rx < 0) || (ry < 0)) { + return (false); + } + + /* + * Special cases for rx=0 and/or ry=0: draw a hline/vline/pixel + */ + if (rx == 0) { + if (ry == 0) { + return (pixelRGBA(renderer, x, y, r, g, b, a)); + } else { + return (vlineRGBA(renderer, x, y - ry, y + ry, r, g, b, a)); + } + } else { + if (ry == 0) { + return (hlineRGBA(renderer, x - rx, x + rx, y, r, g, b, a)); + } + } + + /* Variable setup */ + a2 = rx * rx; + b2 = ry * ry; + + ds = 2 * a2; + dt = 2 * b2; + + xc2 = 2 * x; + yc2 = 2 * y; + + sab = sqrt((double)(a2 + b2)); + od = (float)lrint(sab*0.01) + 1; /* introduce some overdraw */ + dxt = (float)lrint((double)a2 / sab) + od; + + t = 0; + s = -2 * a2 * ry; + d = 0; + + xp = x; + yp = y - ry; + + /* Draw */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + + /* "End points" */ + result &= pixelRGBA(renderer, xp, yp, r, g, b, a); + result &= pixelRGBA(renderer, xc2 - xp, yp, r, g, b, a); + result &= pixelRGBA(renderer, xp, yc2 - yp, r, g, b, a); + result &= pixelRGBA(renderer, xc2 - xp, yc2 - yp, r, g, b, a); + + for (i = 1; i <= dxt; i++) { + xp--; + d += t - b2; + + if (d >= 0) + ys = yp - 1; + else if ((d - s - a2) > 0) { + if ((2 * d - s - a2) >= 0) + ys = yp + 1; + else { + ys = yp; + yp++; + d -= s + a2; + s += ds; + } + } else { + yp++; + ys = yp + 1; + d -= s + a2; + s += ds; + } + + t -= dt; + + /* Calculate alpha */ + if (s != 0) { + cp = (float) abs(d) / (float) abs(s); + if (cp > 1.0) { + cp = 1.0; + } + } else { + cp = 1.0; + } + + /* Calculate weights */ + weight = (Uint8) (cp * 255); + iweight = 255 - weight; + + /* Upper half */ + xx = xc2 - xp; + result &= pixelRGBAWeight(renderer, xp, yp, r, g, b, a, iweight); + result &= pixelRGBAWeight(renderer, xx, yp, r, g, b, a, iweight); + + result &= pixelRGBAWeight(renderer, xp, ys, r, g, b, a, weight); + result &= pixelRGBAWeight(renderer, xx, ys, r, g, b, a, weight); + + /* Lower half */ + yy = yc2 - yp; + result &= pixelRGBAWeight(renderer, xp, yy, r, g, b, a, iweight); + result &= pixelRGBAWeight(renderer, xx, yy, r, g, b, a, iweight); + + yy = yc2 - ys; + result &= pixelRGBAWeight(renderer, xp, yy, r, g, b, a, weight); + result &= pixelRGBAWeight(renderer, xx, yy, r, g, b, a, weight); + } + + /* Replaces original approximation code dyt = abs(yp - yc); */ + dyt = (float)lrint((double)b2 / sab ) + od; + + for (i = 1; i <= dyt; i++) { + yp++; + d -= s + a2; + + if (d <= 0) + xs = xp + 1; + else if ((d + t - b2) < 0) { + if ((2 * d + t - b2) <= 0) + xs = xp - 1; + else { + xs = xp; + xp--; + d += t - b2; + t -= dt; + } + } else { + xp--; + xs = xp - 1; + d += t - b2; + t -= dt; + } + + s += ds; + + /* Calculate alpha */ + if (t != 0) { + cp = (float) abs(d) / (float) abs(t); + if (cp > 1.0) { + cp = 1.0; + } + } else { + cp = 1.0; + } + + /* Calculate weight */ + weight = (Uint8) (cp * 255); + iweight = 255 - weight; + + /* Left half */ + xx = xc2 - xp; + yy = yc2 - yp; + result &= pixelRGBAWeight(renderer, xp, yp, r, g, b, a, iweight); + result &= pixelRGBAWeight(renderer, xx, yp, r, g, b, a, iweight); + + result &= pixelRGBAWeight(renderer, xp, yy, r, g, b, a, iweight); + result &= pixelRGBAWeight(renderer, xx, yy, r, g, b, a, iweight); + + /* Right half */ + xx = xc2 - xs; + result &= pixelRGBAWeight(renderer, xs, yp, r, g, b, a, weight); + result &= pixelRGBAWeight(renderer, xx, yp, r, g, b, a, weight); + + result &= pixelRGBAWeight(renderer, xs, yy, r, g, b, a, weight); + result &= pixelRGBAWeight(renderer, xx, yy, r, g, b, a, weight); + } + + return (result); +} + +/* ---- Filled Ellipse */ + +/*! +\brief Draw filled ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the filled ellipse. +\param y Y coordinate of the center of the filled ellipse. +\param rx Horizontal radius in pixels of the filled ellipse. +\param ry Vertical radius in pixels of the filled ellipse. +\param color The color value of the filled ellipse to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool filledEllipseColor(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return _ellipseRGBA(renderer, x, y, rx, ry, c[0], c[1], c[2], c[3], true); +} + +/*! +\brief Draw filled ellipse with blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the filled ellipse. +\param y Y coordinate of the center of the filled ellipse. +\param rx Horizontal radius in pixels of the filled ellipse. +\param ry Vertical radius in pixels of the filled ellipse. +\param r The red value of the filled ellipse to draw. +\param g The green value of the filled ellipse to draw. +\param b The blue value of the filled ellipse to draw. +\param a The alpha value of the filled ellipse to draw. + +\returns Returns true on success, false on failure. +*/ +bool filledEllipseRGBA(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return _ellipseRGBA(renderer, x, y, rx, ry, r, g, b, a, true); +} + +/* ----- Pie */ + +/*! +\brief Internal float (low-speed) pie-calc implementation by drawing polygons. + +Note: Determines vertex array and uses polygon or filledPolygon drawing routines to render. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the pie. +\param y Y coordinate of the center of the pie. +\param rad Radius in pixels of the pie. +\param start Starting radius in degrees of the pie. +\param end Ending radius in degrees of the pie. +\param r The red value of the pie to draw. +\param g The green value of the pie to draw. +\param b The blue value of the pie to draw. +\param a The alpha value of the pie to draw. +\param filled Flag indicating if the pie should be filled (=1) or not (=0). + +\returns Returns true on success, false on failure. +*/ +/* TODO: rewrite algorithm; pie is not always accurate */ +bool _pieRGBA(SDL_Renderer * renderer, float x, float y, float rad, Sint32 start, Sint32 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a, bool filled) +{ + bool result; + double angle, start_angle, end_angle; + double deltaAngle; + double dr; + Sint32 numpoints, i; + float *vx, *vy; + + /* + * Sanity check radii + */ + if (rad < 0) { + return (false); + } + + /* + * Fixup angles + */ + start = start % 360; + end = end % 360; + + /* + * Special case for rad=0 - draw a point + */ + if (rad == 0) { + return (pixelRGBA(renderer, x, y, r, g, b, a)); + } + + /* + * Variable setup + */ + dr = (double) rad; + deltaAngle = 3.0 / dr; + start_angle = (double) start *(2.0 * M_PI / 360.0); + end_angle = (double) end *(2.0 * M_PI / 360.0); + if (start > end) { + end_angle += (2.0 * M_PI); + } + + /* We will always have at least 2 points */ + numpoints = 2; + + /* Count points (rather than calculating it) */ + angle = start_angle; + while (angle < end_angle) { + angle += deltaAngle; + numpoints++; + } + + /* Allocate combined vertex array */ + vx = vy = (float *) malloc(2 * sizeof(float) * numpoints); + if (vx == NULL) { + return (false); + } + + /* Update point to start of vy */ + vy += numpoints; + + /* Center */ + vx[0] = x; + vy[0] = y; + + /* First vertex */ + angle = start_angle; + vx[1] = x + (int) (dr * cos(angle)); + vy[1] = y + (int) (dr * sin(angle)); + + if (numpoints<3) + { + result = lineRGBA(renderer, vx[0], vy[0], vx[1], vy[1], r, g, b, a); + } + else + { + /* Calculate other vertices */ + i = 2; + angle = start_angle; + while (angle < end_angle) { + angle += deltaAngle; + if (angle>end_angle) + { + angle = end_angle; + } + vx[i] = x + (int) (dr * cos(angle)); + vy[i] = y + (int) (dr * sin(angle)); + i++; + } + + /* Draw */ + if (filled) { + result = filledPolygonRGBA(renderer, vx, vy, numpoints, r, g, b, a); + } else { + result = polygonRGBA(renderer, vx, vy, numpoints, r, g, b, a); + } + } + + /* Free combined vertex array */ + free(vx); + + return (result); +} + +/*! +\brief Draw pie (outline) with alpha blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the pie. +\param y Y coordinate of the center of the pie. +\param rad Radius in pixels of the pie. +\param start Starting radius in degrees of the pie. +\param end Ending radius in degrees of the pie. +\param color The color value of the pie to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool pieColor(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return _pieRGBA(renderer, x, y, rad, start, end, c[0], c[1], c[2], c[3], false); +} + +/*! +\brief Draw pie (outline) with alpha blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the pie. +\param y Y coordinate of the center of the pie. +\param rad Radius in pixels of the pie. +\param start Starting radius in degrees of the pie. +\param end Ending radius in degrees of the pie. +\param r The red value of the pie to draw. +\param g The green value of the pie to draw. +\param b The blue value of the pie to draw. +\param a The alpha value of the pie to draw. + +\returns Returns true on success, false on failure. +*/ +bool pieRGBA(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return _pieRGBA(renderer, x, y, rad, start, end, r, g, b, a, false); +} + +/*! +\brief Draw filled pie with alpha blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the filled pie. +\param y Y coordinate of the center of the filled pie. +\param rad Radius in pixels of the filled pie. +\param start Starting radius in degrees of the filled pie. +\param end Ending radius in degrees of the filled pie. +\param color The color value of the filled pie to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool filledPieColor(SDL_Renderer * renderer, float x, float y, float rad, Sint32 start, Sint32 end, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return _pieRGBA(renderer, x, y, rad, start, end, c[0], c[1], c[2], c[3], true); +} + +/*! +\brief Draw filled pie with alpha blending. + +\param renderer The renderer to draw on. +\param x X coordinate of the center of the filled pie. +\param y Y coordinate of the center of the filled pie. +\param rad Radius in pixels of the filled pie. +\param start Starting radius in degrees of the filled pie. +\param end Ending radius in degrees of the filled pie. +\param r The red value of the filled pie to draw. +\param g The green value of the filled pie to draw. +\param b The blue value of the filled pie to draw. +\param a The alpha value of the filled pie to draw. + +\returns Returns true on success, false on failure. +*/ +bool filledPieRGBA(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return _pieRGBA(renderer, x, y, rad, start, end, r, g, b, a, true); +} + +/* ------ Trigon */ + +/*! +\brief Draw trigon (triangle outline) with alpha blending. + +Note: Creates vertex array and uses polygon routine to render. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the trigon. +\param y1 Y coordinate of the first point of the trigon. +\param x2 X coordinate of the second point of the trigon. +\param y2 Y coordinate of the second point of the trigon. +\param x3 X coordinate of the third point of the trigon. +\param y3 Y coordinate of the third point of the trigon. +\param color The color value of the trigon to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool trigonColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, Uint32 color) +{ + float vx[3]; + float vy[3]; + + vx[0]=x1; + vx[1]=x2; + vx[2]=x3; + vy[0]=y1; + vy[1]=y2; + vy[2]=y3; + + return(polygonColor(renderer,vx,vy,3,color)); +} + +/*! +\brief Draw trigon (triangle outline) with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the trigon. +\param y1 Y coordinate of the first point of the trigon. +\param x2 X coordinate of the second point of the trigon. +\param y2 Y coordinate of the second point of the trigon. +\param x3 X coordinate of the third point of the trigon. +\param y3 Y coordinate of the third point of the trigon. +\param r The red value of the trigon to draw. +\param g The green value of the trigon to draw. +\param b The blue value of the trigon to draw. +\param a The alpha value of the trigon to draw. + +\returns Returns true on success, false on failure. +*/ +bool trigonRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, + Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + float vx[3]; + float vy[3]; + + vx[0]=x1; + vx[1]=x2; + vx[2]=x3; + vy[0]=y1; + vy[1]=y2; + vy[2]=y3; + + return(polygonRGBA(renderer,vx,vy,3,r,g,b,a)); +} + +/* ------ AA-Trigon */ + +/*! +\brief Draw anti-aliased trigon (triangle outline) with alpha blending. + +Note: Creates vertex array and uses aapolygon routine to render. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the aa-trigon. +\param y1 Y coordinate of the first point of the aa-trigon. +\param x2 X coordinate of the second point of the aa-trigon. +\param y2 Y coordinate of the second point of the aa-trigon. +\param x3 X coordinate of the third point of the aa-trigon. +\param y3 Y coordinate of the third point of the aa-trigon. +\param color The color value of the aa-trigon to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool aatrigonColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, Uint32 color) +{ + float vx[3]; + float vy[3]; + + vx[0]=x1; + vx[1]=x2; + vx[2]=x3; + vy[0]=y1; + vy[1]=y2; + vy[2]=y3; + + return(aapolygonColor(renderer,vx,vy,3,color)); +} + +/*! +\brief Draw anti-aliased trigon (triangle outline) with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the aa-trigon. +\param y1 Y coordinate of the first point of the aa-trigon. +\param x2 X coordinate of the second point of the aa-trigon. +\param y2 Y coordinate of the second point of the aa-trigon. +\param x3 X coordinate of the third point of the aa-trigon. +\param y3 Y coordinate of the third point of the aa-trigon. +\param r The red value of the aa-trigon to draw. +\param g The green value of the aa-trigon to draw. +\param b The blue value of the aa-trigon to draw. +\param a The alpha value of the aa-trigon to draw. + +\returns Returns true on success, false on failure. +*/ +bool aatrigonRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, + Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + float vx[3]; + float vy[3]; + + vx[0]=x1; + vx[1]=x2; + vx[2]=x3; + vy[0]=y1; + vy[1]=y2; + vy[2]=y3; + + return(aapolygonRGBA(renderer,vx,vy,3,r,g,b,a)); +} + +/* ------ Filled Trigon */ + +/*! +\brief Draw filled trigon (triangle) with alpha blending. + +Note: Creates vertex array and uses aapolygon routine to render. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the filled trigon. +\param y1 Y coordinate of the first point of the filled trigon. +\param x2 X coordinate of the second point of the filled trigon. +\param y2 Y coordinate of the second point of the filled trigon. +\param x3 X coordinate of the third point of the filled trigon. +\param y3 Y coordinate of the third point of the filled trigon. +\param color The color value of the filled trigon to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool filledTrigonColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, Uint32 color) +{ + float vx[3]; + float vy[3]; + + vx[0]=x1; + vx[1]=x2; + vx[2]=x3; + vy[0]=y1; + vy[1]=y2; + vy[2]=y3; + + return(filledPolygonColor(renderer,vx,vy,3,color)); +} + +/*! +\brief Draw filled trigon (triangle) with alpha blending. + +Note: Creates vertex array and uses aapolygon routine to render. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the filled trigon. +\param y1 Y coordinate of the first point of the filled trigon. +\param x2 X coordinate of the second point of the filled trigon. +\param y2 Y coordinate of the second point of the filled trigon. +\param x3 X coordinate of the third point of the filled trigon. +\param y3 Y coordinate of the third point of the filled trigon. +\param r The red value of the filled trigon to draw. +\param g The green value of the filled trigon to draw. +\param b The blue value of the filled trigon to draw. +\param a The alpha value of the filled trigon to draw. + +\returns Returns true on success, false on failure. +*/ +bool filledTrigonRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, + Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + float vx[3]; + float vy[3]; + + vx[0]=x1; + vx[1]=x2; + vx[2]=x3; + vy[0]=y1; + vy[1]=y2; + vy[2]=y3; + + return(filledPolygonRGBA(renderer,vx,vy,3,r,g,b,a)); +} + +/* ---- Polygon */ + +/*! +\brief Draw polygon with alpha blending. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the polygon. +\param vy Vertex array containing Y coordinates of the points of the polygon. +\param n Number of points in the vertex array. Minimum number is 3. +\param color The color value of the polygon to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool polygonColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return polygonRGBA(renderer, vx, vy, n, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw polygon with the currently set color and blend mode. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the polygon. +\param vy Vertex array containing Y coordinates of the points of the polygon. +\param n Number of points in the vertex array. Minimum number is 3. + +\returns Returns true on success, false on failure. +*/ +bool polygon(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n) +{ + /* + * Draw + */ + bool result = true; + Sint32 i, nn; + SDL_FPoint* points; + + /* + * Vertex array NULL check + */ + if (vx == NULL) { + return (false); + } + if (vy == NULL) { + return (false); + } + + /* + * Sanity check + */ + if (n < 3) { + return (false); + } + + /* + * Create array of points + */ + nn = n + 1; + points = (SDL_FPoint*)malloc(sizeof(SDL_FPoint) * nn); + if (points == NULL) + { + return false; + } + for (i=0; ib. +*/ +Sint32 _gfxPrimitivesCompareInt(const void *a, const void *b) +{ + return (*(const Sint32 *) a) - (*(const Sint32 *) b); +} + +/*! +\brief Global vertex array to use if optional parameters are not given in filledPolygonMT calls. + +Note: Used for non-multithreaded (default) operation of filledPolygonMT. +*/ +static Sint32 *gfxPrimitivesPolyIntsGlobal = NULL; + +/*! +\brief Flag indicating if global vertex array was already allocated. + +Note: Used for non-multithreaded (default) operation of filledPolygonMT. +*/ +static bool gfxPrimitivesPolyAllocatedGlobal = false; + +/*! +\brief Draw filled polygon with alpha blending (multi-threaded capable). + +Note: The last two parameters are optional; but are required for multithreaded operation. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the filled polygon. +\param vy Vertex array containing Y coordinates of the points of the filled polygon. +\param n Number of points in the vertex array. Minimum number is 3. +\param r The red value of the filled polygon to draw. +\param g The green value of the filled polygon to draw. +\param b The blue value of the filled polygon to draw. +\param a The alpha value of the filled polygon to draw. +\param polyInts Preallocated, temporary vertex array used for sorting vertices. Required for multithreaded operation; set to NULL otherwise. +\param polyAllocated Flag indicating if temporary vertex array was allocated. Required for multithreaded operation; set to NULL otherwise. + +\returns Returns true on success, false on failure. +*/ +bool filledPolygonRGBAMT(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint8 r, Uint8 g, Uint8 b, Uint8 a, Sint32 **polyInts, bool *polyAllocated) +{ + bool result; + Sint32 i; + Sint32 y, xa, xb; + Sint32 miny, maxy; + Sint32 x1, y1; + Sint32 x2, y2; + Sint32 ind1, ind2; + Sint32 ints; + Sint32 *gfxPrimitivesPolyInts = NULL; + Sint32 *gfxPrimitivesPolyIntsNew = NULL; + bool gfxPrimitivesPolyAllocated = false; + + /* + * Vertex array NULL check + */ + if (vx == NULL) { + return (false); + } + if (vy == NULL) { + return (false); + } + + /* + * Sanity check number of edges + */ + if (n < 3) { + return false; + } + + /* + * Map polygon cache + */ + if ((polyInts==NULL) || (polyAllocated==NULL)) { + /* Use global cache */ + gfxPrimitivesPolyInts = gfxPrimitivesPolyIntsGlobal; + gfxPrimitivesPolyAllocated = gfxPrimitivesPolyAllocatedGlobal; + } else { + /* Use local cache */ + gfxPrimitivesPolyInts = *polyInts; + gfxPrimitivesPolyAllocated = *polyAllocated; + } + + /* + * Allocate temp array, only grow array + */ + if (!gfxPrimitivesPolyAllocated) { + gfxPrimitivesPolyInts = (Sint32 *) malloc(sizeof(int) * n); + gfxPrimitivesPolyAllocated = n; + } else { + if (gfxPrimitivesPolyAllocated < n) { + gfxPrimitivesPolyIntsNew = (Sint32 *) realloc(gfxPrimitivesPolyInts, sizeof(int) * n); + if (!gfxPrimitivesPolyIntsNew) { + if (!gfxPrimitivesPolyInts) { + free(gfxPrimitivesPolyInts); + gfxPrimitivesPolyInts = NULL; + } + gfxPrimitivesPolyAllocated = 0; + } else { + gfxPrimitivesPolyInts = gfxPrimitivesPolyIntsNew; + gfxPrimitivesPolyAllocated = n; + } + } + } + + /* + * Check temp array + */ + if (gfxPrimitivesPolyInts==NULL) { + gfxPrimitivesPolyAllocated = 0; + } + + /* + * Update cache variables + */ + if ((polyInts==NULL) || (polyAllocated==NULL)) { + gfxPrimitivesPolyIntsGlobal = gfxPrimitivesPolyInts; + gfxPrimitivesPolyAllocatedGlobal = gfxPrimitivesPolyAllocated; + } else { + *polyInts = gfxPrimitivesPolyInts; + *polyAllocated = gfxPrimitivesPolyAllocated; + } + + /* + * Check temp array again + */ + if (gfxPrimitivesPolyInts==NULL) { + return false; + } + + /* + * Determine Y maxima + */ + miny = vy[0]; + maxy = vy[0]; + for (i = 1; (i < n); i++) { + if (vy[i] < miny) { + miny = vy[i]; + } else if (vy[i] > maxy) { + maxy = vy[i]; + } + } + + /* + * Draw, scanning y + */ + for (y = miny; (y <= maxy); y++) { + ints = 0; + for (i = 0; (i < n); i++) { + if (!i) { + ind1 = n - 1; + ind2 = 0; + } else { + ind1 = i - 1; + ind2 = i; + } + y1 = vy[ind1]; + y2 = vy[ind2]; + if (y1 < y2) { + x1 = vx[ind1]; + x2 = vx[ind2]; + } else if (y1 > y2) { + y2 = vy[ind1]; + y1 = vy[ind2]; + x2 = vx[ind1]; + x1 = vx[ind2]; + } else { + continue; + } + if ( ((y >= y1) && (y < y2)) || ((y == maxy) && (y > y1) && (y <= y2)) ) { + gfxPrimitivesPolyInts[ints++] = ((65536 * (y - y1)) / (y2 - y1)) * (x2 - x1) + (65536 * x1); + } + } + + qsort(gfxPrimitivesPolyInts, ints, sizeof(int), _gfxPrimitivesCompareInt); + + /* + * Set color + */ + result = true; + result &= SDL_SetRenderDrawBlendMode(renderer, (a == 255) ? SDL_BLENDMODE_NONE : SDL_BLENDMODE_BLEND); + result &= SDL_SetRenderDrawColor(renderer, r, g, b, a); + + for (i = 0; (i < ints); i += 2) { + xa = gfxPrimitivesPolyInts[i] + 1; + xa = (xa >> 16) + ((xa & 32768) >> 15); + xb = gfxPrimitivesPolyInts[i+1] - 1; + xb = (xb >> 16) + ((xb & 32768) >> 15); + result &= hline(renderer, xa, xb, y); + } + } + + return result; +} + +/*! +\brief Draw filled polygon with alpha blending. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the filled polygon. +\param vy Vertex array containing Y coordinates of the points of the filled polygon. +\param n Number of points in the vertex array. Minimum number is 3. +\param color The color value of the filled polygon to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool filledPolygonColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return filledPolygonRGBAMT(renderer, vx, vy, n, c[0], c[1], c[2], c[3], NULL, NULL); +} + +/*! +\brief Draw filled polygon with alpha blending. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the filled polygon. +\param vy Vertex array containing Y coordinates of the points of the filled polygon. +\param n Number of points in the vertex array. Minimum number is 3. +\param r The red value of the filled polygon to draw. +\param g The green value of the filled polygon to draw. +\param b The blue value of the filed polygon to draw. +\param a The alpha value of the filled polygon to draw. + +\returns Returns true on success, false on failure. +*/ +bool filledPolygonRGBA(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + return filledPolygonRGBAMT(renderer, vx, vy, n, r, g, b, a, NULL, NULL); +} + +/* ---- Textured Polygon */ + +/*! +\brief Internal function to draw a textured horizontal line. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point (i.e. left) of the line. +\param x2 X coordinate of the second point (i.e. right) of the line. +\param y Y coordinate of the points of the line. +\param texture The texture to retrieve color information from. +\param texture_w The width of the texture. +\param texture_h The height of the texture. +\param texture_dx The X offset for the texture lookup. +\param texture_dy The Y offset for the textured lookup. + +\returns Returns true on success, false on failure. +*/ +bool _HLineTextured(SDL_Renderer *renderer, float x1, float x2, float y, SDL_Texture *texture, Sint32 texture_w, Sint32 texture_h, Sint32 texture_dx, Sint32 texture_dy) +{ + float w; + float xtmp; + bool result = true; + Sint32 texture_x_walker; + Sint32 texture_y_start; + SDL_FRect source_rect,dst_rect; + Sint32 pixels_written,write_width; + + /* + * Swap x1, x2 if required to ensure x1<=x2 + */ + if (x1 > x2) { + xtmp = x1; + x1 = x2; + x2 = xtmp; + } + + /* + * Calculate width to draw + */ + w = x2 - x1 + 1; + + /* + * Determine where in the texture we start drawing + */ + texture_x_walker = ((int)x1 - texture_dx) % texture_w; + if (texture_x_walker < 0){ + texture_x_walker = texture_w + texture_x_walker ; + } + + texture_y_start = ((int)y + texture_dy) % texture_h; + if (texture_y_start < 0){ + texture_y_start = texture_h + texture_y_start; + } + + /* setup the source rectangle; we are only drawing one horizontal line */ + source_rect.y = texture_y_start; + source_rect.x = texture_x_walker; + source_rect.h = 1; + + /* we will draw to the current y */ + dst_rect.y = y; + dst_rect.h = 1; + + /* if there are enough pixels left in the current row of the texture */ + /* draw it all at once */ + if (w <= texture_w -texture_x_walker){ + source_rect.w = w; + source_rect.x = texture_x_walker; + dst_rect.x= x1; + dst_rect.w = source_rect.w; + result = SDL_RenderTexture(renderer, texture, &source_rect, &dst_rect); + } else { + /* we need to draw multiple times */ + /* draw the first segment */ + pixels_written = texture_w - texture_x_walker; + source_rect.w = pixels_written; + source_rect.x = texture_x_walker; + dst_rect.x= x1; + dst_rect.w = source_rect.w; + result &= SDL_RenderTexture(renderer, texture, &source_rect, &dst_rect); + write_width = texture_w; + + /* now draw the rest */ + /* set the source x to 0 */ + source_rect.x = 0; + while (pixels_written < w){ + if (write_width >= w - pixels_written) { + write_width = w - pixels_written; + } + source_rect.w = write_width; + dst_rect.x = x1 + pixels_written; + dst_rect.w = source_rect.w; + result &= SDL_RenderTexture(renderer, texture, &source_rect, &dst_rect); + pixels_written += write_width; + } + } + + return result; +} + +/*! +\brief Draws a polygon filled with the given texture (Multi-Threading Capable). + +\param renderer The renderer to draw on. +\param vx array of x vector components +\param vy array of x vector components +\param n the amount of vectors in the vx and vy array +\param texture the sdl surface to use to fill the polygon +\param texture_dx the offset of the texture relative to the screeen. If you move the polygon 10 pixels +to the left and want the texture to apear the same you need to increase the texture_dx value +\param texture_dy see texture_dx +\param polyInts Preallocated temp array storage for vertex sorting (used for multi-threaded operation) +\param polyAllocated Flag indicating oif the temp array was allocated (used for multi-threaded operation) + +\returns Returns true on success, false on failure. +*/ +bool texturedPolygonMT(SDL_Renderer *renderer, const float * vx, const float * vy, Sint32 n, + SDL_Surface * texture, Sint32 texture_dx, Sint32 texture_dy, Sint32 **polyInts, bool *polyAllocated) +{ + bool result; + Sint32 i; + Sint32 y, xa, xb; + Sint32 minx,maxx,miny, maxy; + Sint32 x1, y1; + Sint32 x2, y2; + Sint32 ind1, ind2; + Sint32 ints; + Sint32 *gfxPrimitivesPolyInts = NULL; + Sint32 *gfxPrimitivesPolyIntsTemp = NULL; + Sint32 gfxPrimitivesPolyAllocated = 0; + SDL_Texture *textureAsTexture = NULL; + + /* + * Sanity check number of edges + */ + if (n < 3) { + return false; + } + + /* + * Map polygon cache + */ + if ((polyInts==NULL) || (polyAllocated==NULL)) { + /* Use global cache */ + gfxPrimitivesPolyInts = gfxPrimitivesPolyIntsGlobal; + gfxPrimitivesPolyAllocated = gfxPrimitivesPolyAllocatedGlobal; + } else { + /* Use local cache */ + gfxPrimitivesPolyInts = *polyInts; + gfxPrimitivesPolyAllocated = *polyAllocated; + } + + /* + * Allocate temp array, only grow array + */ + if (!gfxPrimitivesPolyAllocated) { + gfxPrimitivesPolyInts = (Sint32 *) malloc(sizeof(int) * n); + gfxPrimitivesPolyAllocated = n; + } else { + if (gfxPrimitivesPolyAllocated < n) { + gfxPrimitivesPolyIntsTemp = (Sint32 *) realloc(gfxPrimitivesPolyInts, sizeof(int) * n); + if (gfxPrimitivesPolyIntsTemp == NULL) { + /* Realloc failed - keeps original memory block, but fails this operation */ + return(false); + } + gfxPrimitivesPolyInts = gfxPrimitivesPolyIntsTemp; + gfxPrimitivesPolyAllocated = n; + } + } + + /* + * Check temp array + */ + if (gfxPrimitivesPolyInts==NULL) { + gfxPrimitivesPolyAllocated = 0; + } + + /* + * Update cache variables + */ + if ((polyInts==NULL) || (polyAllocated==NULL)) { + gfxPrimitivesPolyIntsGlobal = gfxPrimitivesPolyInts; + gfxPrimitivesPolyAllocatedGlobal = gfxPrimitivesPolyAllocated; + } else { + *polyInts = gfxPrimitivesPolyInts; + *polyAllocated = gfxPrimitivesPolyAllocated; + } + + /* + * Check temp array again + */ + if (gfxPrimitivesPolyInts==NULL) { + return false; + } + + /* + * Determine X,Y minima,maxima + */ + miny = vy[0]; + maxy = vy[0]; + minx = vx[0]; + maxx = vx[0]; + for (i = 1; (i < n); i++) { + if (vy[i] < miny) { + miny = vy[i]; + } else if (vy[i] > maxy) { + maxy = vy[i]; + } + if (vx[i] < minx) { + minx = vx[i]; + } else if (vx[i] > maxx) { + maxx = vx[i]; + } + } + + /* Create texture for drawing */ + textureAsTexture = SDL_CreateTextureFromSurface(renderer, texture); + if (textureAsTexture == NULL) + { + return false; + } + SDL_SetTextureBlendMode(textureAsTexture, SDL_BLENDMODE_BLEND); + + /* + * Draw, scanning y + */ + result = true; + for (y = miny; (y <= maxy); y++) { + ints = 0; + for (i = 0; (i < n); i++) { + if (!i) { + ind1 = n - 1; + ind2 = 0; + } else { + ind1 = i - 1; + ind2 = i; + } + y1 = vy[ind1]; + y2 = vy[ind2]; + if (y1 < y2) { + x1 = vx[ind1]; + x2 = vx[ind2]; + } else if (y1 > y2) { + y2 = vy[ind1]; + y1 = vy[ind2]; + x2 = vx[ind1]; + x1 = vx[ind2]; + } else { + continue; + } + if ( ((y >= y1) && (y < y2)) || ((y == maxy) && (y > y1) && (y <= y2)) ) { + gfxPrimitivesPolyInts[ints++] = ((65536 * (y - y1)) / (y2 - y1)) * (x2 - x1) + (65536 * x1); + } + } + + qsort(gfxPrimitivesPolyInts, ints, sizeof(int), _gfxPrimitivesCompareInt); + + for (i = 0; (i < ints); i += 2) { + xa = gfxPrimitivesPolyInts[i] + 1; + xa = (xa >> 16) + ((xa & 32768) >> 15); + xb = gfxPrimitivesPolyInts[i+1] - 1; + xb = (xb >> 16) + ((xb & 32768) >> 15); + result &= _HLineTextured(renderer, xa, xb, y, textureAsTexture, texture->w, texture->h, texture_dx, texture_dy); + } + } + + SDL_DestroyTexture(textureAsTexture); + + return result; +} + +/*! +\brief Draws a polygon filled with the given texture. + +This standard version is calling multithreaded versions with NULL cache parameters. + +\param renderer The renderer to draw on. +\param vx array of x vector components +\param vy array of x vector components +\param n the amount of vectors in the vx and vy array +\param texture the sdl surface to use to fill the polygon +\param texture_dx the offset of the texture relative to the screeen. if you move the polygon 10 pixels +to the left and want the texture to apear the same you need to increase the texture_dx value +\param texture_dy see texture_dx + +\returns Returns true on success, false on failure. +*/ +bool texturedPolygon(SDL_Renderer *renderer, const float * vx, const float * vy, Sint32 n, SDL_Surface *texture, Sint32 texture_dx, Sint32 texture_dy) +{ + /* + * Draw + */ + return (texturedPolygonMT(renderer, vx, vy, n, texture, texture_dx, texture_dy, NULL, NULL)); +} + +/* ---- Character */ + +/*! +\brief Global cache for NxM pixel font textures created at runtime. +*/ +static SDL_Texture *gfxPrimitivesFont[256]; + +/*! +\brief Pointer to the current font data. Default is a 8x8 pixel internal font. +*/ +static const unsigned char *currentFontdata = gfxPrimitivesFontdata; + +/*! +\brief Width of the current font. Default is 8. +*/ +static Uint32 charWidth = 8; + +/*! +\brief Height of the current font. Default is 8. +*/ +static Uint32 charHeight = 8; + +/*! +\brief Width for rendering. Autocalculated. +*/ +static Uint32 charWidthLocal = 8; + +/*! +\brief Height for rendering. Autocalculated. +*/ +static Uint32 charHeightLocal = 8; + +/*! +\brief Pitch of the current font in bytes. Default is 1. +*/ +static Uint32 charPitch = 1; + +/*! +\brief Characters 90deg clockwise rotations. Default is 0. Max is 3. +*/ +static Uint32 charRotation = 0; + +/*! +\brief Character data size in bytes of the current font. Default is 8. +*/ +static Uint32 charSize = 8; + +/*! +\brief Sets or resets the current global font data. + +The font data array is organized in follows: +[fontdata] = [character 0][character 1]...[character 255] where +[character n] = [byte 1 row 1][byte 2 row 1]...[byte {pitch} row 1][byte 1 row 2] ...[byte {pitch} row height] where +[byte n] = [bit 0]...[bit 7] where +[bit n] = [0 for transparent pixel|1 for colored pixel] + +\param fontdata Pointer to array of font data. Set to NULL, to reset global font to the default 8x8 font. +\param cw Width of character in bytes. Ignored if fontdata==NULL. +\param ch Height of character in bytes. Ignored if fontdata==NULL. +*/ +void gfxPrimitivesSetFont(const void *fontdata, Uint32 cw, Uint32 ch) +{ + Sint32 i; + + if ((fontdata) && (cw) && (ch)) { + currentFontdata = (unsigned char *)fontdata; + charWidth = cw; + charHeight = ch; + } else { + currentFontdata = gfxPrimitivesFontdata; + charWidth = 8; + charHeight = 8; + } + + charPitch = (charWidth+7)/8; + charSize = charPitch * charHeight; + + /* Maybe flip width/height for rendering */ + if ((charRotation==1) || (charRotation==3)) + { + charWidthLocal = charHeight; + charHeightLocal = charWidth; + } + else + { + charWidthLocal = charWidth; + charHeightLocal = charHeight; + } + + /* Clear character cache */ + for (i = 0; i < 256; i++) { + if (gfxPrimitivesFont[i]) { + SDL_DestroyTexture(gfxPrimitivesFont[i]); + gfxPrimitivesFont[i] = NULL; + } + } +} + +/*! +\brief Sets current global font character rotation steps. + +Default is 0 (no rotation). 1 = 90deg clockwise. 2 = 180deg clockwise. 3 = 270deg clockwise. +Changing the rotation, will reset the character cache. + +\param rotation Number of 90deg clockwise steps to rotate +*/ +void gfxPrimitivesSetFontRotation(Uint32 rotation) +{ + Sint32 i; + + rotation = rotation & 3; + if (charRotation != rotation) + { + /* Store rotation */ + charRotation = rotation; + + /* Maybe flip width/height for rendering */ + if ((charRotation==1) || (charRotation==3)) + { + charWidthLocal = charHeight; + charHeightLocal = charWidth; + } + else + { + charWidthLocal = charWidth; + charHeightLocal = charHeight; + } + + /* Clear character cache */ + for (i = 0; i < 256; i++) { + if (gfxPrimitivesFont[i]) { + SDL_DestroyTexture(gfxPrimitivesFont[i]); + gfxPrimitivesFont[i] = NULL; + } + } + } +} + +/*! +\brief Draw a character of the currently set font. + +\param renderer The Renderer to draw on. +\param x X (horizontal) coordinate of the upper left corner of the character. +\param y Y (vertical) coordinate of the upper left corner of the character. +\param c The character to draw. +\param r The red value of the character to draw. +\param g The green value of the character to draw. +\param b The blue value of the character to draw. +\param a The alpha value of the character to draw. + +\returns Returns true on success, false on failure. +*/ +bool characterRGBA(SDL_Renderer *renderer, float x, float y, char c, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + SDL_FRect srect; + SDL_FRect drect; + bool result; + Uint32 ix, iy; + const unsigned char *charpos; + Uint8 *curpos; + Uint8 patt, mask; + Uint8 *linepos; + Uint32 pitch; + SDL_Surface *character; + SDL_Surface *rotatedCharacter; + Uint32 ci; + + /* + * Setup source rectangle + */ + srect.x = 0; + srect.y = 0; + srect.w = charWidthLocal; + srect.h = charHeightLocal; + + /* + * Setup destination rectangle + */ + drect.x = x; + drect.y = y; + drect.w = charWidthLocal; + drect.h = charHeightLocal; + + /* Character index in cache */ + ci = (unsigned char) c; + + /* + * Create new charWidth x charHeight bitmap surface if not already present. + * Might get rotated later. + */ + if (gfxPrimitivesFont[ci] == NULL) { + /* + * Redraw character into surface + */ + character = SDL_CreateSurface( + charWidth, charHeight, SDL_PIXELFORMAT_RGBA8888); + if (character == NULL) { + return (false); + } + + charpos = currentFontdata + ci * charSize; + linepos = (Uint8 *)character->pixels; + pitch = character->pitch; + + /* + * Drawing loop + */ + patt = 0; + for (iy = 0; iy < charHeight; iy++) { + mask = 0x00; + curpos = linepos; + for (ix = 0; ix < charWidth; ix++) { + if (!(mask >>= 1)) { + patt = *charpos++; + mask = 0x80; + } + if (patt & mask) { + *(Uint32 *)curpos = 0xffffffff; + } else { + *(Uint32 *)curpos = 0; + } + curpos += 4; + } + linepos += pitch; + } + + /* Maybe rotate and replace cached image */ + if (charRotation>0) + { + rotatedCharacter = rotateSurface90Degrees(character, charRotation); + SDL_DestroySurface(character); + character = rotatedCharacter; + } + + /* Convert temp surface into texture */ + gfxPrimitivesFont[ci] = SDL_CreateTextureFromSurface(renderer, character); + SDL_DestroySurface(character); + + /* + * Check pointer + */ + if (gfxPrimitivesFont[ci] == NULL) { + return (false); + } + } + + /* + * Set color + */ + result = true; + result &= SDL_SetTextureColorMod(gfxPrimitivesFont[ci], r, g, b); + result &= SDL_SetTextureAlphaMod(gfxPrimitivesFont[ci], a); + + /* + * Draw texture onto destination + */ + result &= SDL_RenderTexture(renderer, gfxPrimitivesFont[ci], &srect, &drect); + + return (result); +} + + +/*! +\brief Draw a character of the currently set font. + +\param renderer The renderer to draw on. +\param x X (horizontal) coordinate of the upper left corner of the character. +\param y Y (vertical) coordinate of the upper left corner of the character. +\param c The character to draw. +\param color The color value of the character to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool characterColor(SDL_Renderer * renderer, float x, float y, char c, Uint32 color) +{ + Uint8 *co = (Uint8 *)&color; + return characterRGBA(renderer, x, y, c, co[0], co[1], co[2], co[3]); +} + + +/*! +\brief Draw a string in the currently set font. + +The spacing between consequtive characters in the string is the fixed number of pixels +of the character width of the current global font. + +\param renderer The renderer to draw on. +\param x X (horizontal) coordinate of the upper left corner of the string. +\param y Y (vertical) coordinate of the upper left corner of the string. +\param s The string to draw. +\param color The color value of the string to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool stringColor(SDL_Renderer * renderer, float x, float y, const char *s, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return stringRGBA(renderer, x, y, s, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw a string in the currently set font. + +\param renderer The renderer to draw on. +\param x X (horizontal) coordinate of the upper left corner of the string. +\param y Y (vertical) coordinate of the upper left corner of the string. +\param s The string to draw. +\param r The red value of the string to draw. +\param g The green value of the string to draw. +\param b The blue value of the string to draw. +\param a The alpha value of the string to draw. + +\returns Returns true on success, false on failure. +*/ +bool stringRGBA(SDL_Renderer * renderer, float x, float y, const char *s, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result = true; + float curx = x; + float cury = y; + const char *curchar = s; + + while (*curchar && result) { + result &= characterRGBA(renderer, curx, cury, *curchar, r, g, b, a); + switch (charRotation) + { + case 0: + curx += charWidthLocal; + break; + case 2: + curx -= charWidthLocal; + break; + case 1: + cury += charHeightLocal; + break; + case 3: + cury -= charHeightLocal; + break; + } + curchar++; + } + + return (result); +} + +/* ---- Bezier curve */ + +/*! +\brief Internal function to calculate bezier interpolator of data array with ndata values at position 't'. + +\param data Array of values. +\param ndata Size of array. +\param t Position for which to calculate interpolated value. t should be between [0, ndata]. + +\returns Interpolated value at position t, value[0] when t<0, value[n-1] when t>n. +*/ +double _evaluateBezier (double *data, Sint32 ndata, double t) +{ + double mu, result; + Sint32 n,k,kn,nn,nkn; + double blend,muk,munk; + + /* Sanity check bounds */ + if (t<0.0) { + return(data[0]); + } + if (t>=(double)ndata) { + return(data[ndata-1]); + } + + /* Adjust t to the range 0.0 to 1.0 */ + mu=t/(double)ndata; + + /* Calculate interpolate */ + n=ndata-1; + result=0.0; + muk = 1; + munk = pow(1-mu,(double)n); + for (k=0;k<=n;k++) { + nn = n; + kn = k; + nkn = n - k; + blend = muk * munk; + muk *= mu; + munk /= (1-mu); + while (nn >= 1) { + blend *= nn; + nn--; + if (kn > 1) { + blend /= (double)kn; + kn--; + } + if (nkn > 1) { + blend /= (double)nkn; + nkn--; + } + } + result += data[k] * blend; + } + + return (result); +} + +/*! +\brief Draw a bezier curve with alpha blending. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the bezier curve. +\param vy Vertex array containing Y coordinates of the points of the bezier curve. +\param n Number of points in the vertex array. Minimum number is 3. +\param s Number of steps for the interpolation. Minimum number is 2. +\param color The color value of the bezier curve to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool bezierColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Sint32 s, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return bezierRGBA(renderer, vx, vy, n, s, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw a bezier curve with alpha blending. + +\param renderer The renderer to draw on. +\param vx Vertex array containing X coordinates of the points of the bezier curve. +\param vy Vertex array containing Y coordinates of the points of the bezier curve. +\param n Number of points in the vertex array. Minimum number is 3. +\param s Number of steps for the interpolation. Minimum number is 2. +\param r The red value of the bezier curve to draw. +\param g The green value of the bezier curve to draw. +\param b The blue value of the bezier curve to draw. +\param a The alpha value of the bezier curve to draw. + +\returns Returns true on success, false on failure. +*/ +bool bezierRGBA(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Sint32 s, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + bool result; + Sint32 i; + double *x, *y, t, stepsize; + float x1, y1, x2, y2; + + /* + * Sanity check + */ + if (n < 3) { + return (false); + } + if (s < 2) { + return (false); + } + + /* + * Variable setup + */ + stepsize=(double)1.0/(double)s; + + /* Transfer vertices into float arrays */ + if ((x=(double *)malloc(sizeof(double)*(n+1)))==NULL) { + return(false); + } + if ((y=(double *)malloc(sizeof(double)*(n+1)))==NULL) { + free(x); + return(false); + } + for (i=0; i0. +\param color The color value of the line to draw (0xRRGGBBAA). + +\returns Returns true on success, false on failure. +*/ +bool thickLineColor(SDL_Renderer *renderer, float x1, float y1, float x2, float y2, float width, Uint32 color) +{ + Uint8 *c = (Uint8 *)&color; + return thickLineRGBA(renderer, x1, y1, x2, y2, width, c[0], c[1], c[2], c[3]); +} + +/*! +\brief Draw a thick line with alpha blending. + +\param renderer The renderer to draw on. +\param x1 X coordinate of the first point of the line. +\param y1 Y coordinate of the first point of the line. +\param x2 X coordinate of the second point of the line. +\param y2 Y coordinate of the second point of the line. +\param width Width of the line in pixels. Must be >0. +\param r The red value of the character to draw. +\param g The green value of the character to draw. +\param b The blue value of the character to draw. +\param a The alpha value of the character to draw. + +\returns Returns true on success, false on failure. +*/ +bool thickLineRGBA(SDL_Renderer *renderer, float x1, float y1, float x2, float y2, float width, Uint8 r, Uint8 g, Uint8 b, Uint8 a) +{ + Sint32 wh; + double dx, dy, dx1, dy1, dx2, dy2; + double l, wl2, nx, ny, ang, adj; + float px[4], py[4]; + + if (renderer == NULL) { + return false; + } + + if (width < 1) { + return false; + } + + /* Special case: thick "point" */ + if ((x1 == x2) && (y1 == y2)) { + wh = width / 2; + return boxRGBA(renderer, x1 - wh, y1 - wh, x2 + width, y2 + width, r, g, b, a); + } + + /* Special case: width == 1 */ + if (width == 1) { + return lineRGBA(renderer, x1, y1, x2, y2, r, g, b, a); + } + + /* Calculate offsets for sides */ + dx = (double)(x2 - x1); + dy = (double)(y2 - y1); + l = SDL_sqrt(dx*dx + dy*dy); + ang = SDL_atan2(dx, dy); + adj = 0.1 + 0.9 * SDL_fabs(SDL_cos(2.0 * ang)); + wl2 = ((double)width - adj)/(2.0 * l); + nx = dx * wl2; + ny = dy * wl2; + + /* Build polygon */ + dx1 = (double)x1; + dy1 = (double)y1; + dx2 = (double)x2; + dy2 = (double)y2; + px[0] = (float)(dx1 + ny); + px[1] = (float)(dx1 - ny); + px[2] = (float)(dx2 - ny); + px[3] = (float)(dx2 + ny); + py[0] = (float)(dy1 - nx); + py[1] = (float)(dy1 + nx); + py[2] = (float)(dy2 + nx); + py[3] = (float)(dy2 - nx); + + /* Draw polygon */ + return filledPolygonRGBA(renderer, px, py, 4, r, g, b, a); +} diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.h b/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.h new file mode 100644 index 0000000..a8e9e47 --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives.h @@ -0,0 +1,241 @@ +/* + +SDL3_gfxPrimitives.h: graphics primitives for SDL + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#ifndef _SDL3_gfxPrimitives_h +#define _SDL3_gfxPrimitives_h + +#include +#ifndef M_PI +#define M_PI 3.1415926535897932384626433832795 +#endif + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + /* ----- Versioning */ + +#define SDL3_GFXPRIMITIVES_MAJOR 1 +#define SDL3_GFXPRIMITIVES_MINOR 0 +#define SDL3_GFXPRIMITIVES_MICRO 0 + + + /* ---- Function Prototypes */ + +#ifdef _MSC_VER +# if defined(DLL_EXPORT) && !defined(LIBSDL3_GFX_DLL_IMPORT) +# define SDL3_GFXPRIMITIVES_SCOPE __declspec(dllexport) +# else +# ifdef LIBSDL3_GFX_DLL_IMPORT +# define SDL3_GFXPRIMITIVES_SCOPE __declspec(dllimport) +# endif +# endif +#endif +#ifndef SDL3_GFXPRIMITIVES_SCOPE +# define SDL3_GFXPRIMITIVES_SCOPE extern +#endif + + /* Note: all ___Color routines expect the color to be in format 0xRRGGBBAA */ + + /* Pixel */ + + SDL3_GFXPRIMITIVES_SCOPE bool pixelColor(SDL_Renderer * renderer, float x, float y, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool pixelRGBA(SDL_Renderer * renderer, float x, float y, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Horizontal line */ + + SDL3_GFXPRIMITIVES_SCOPE bool hlineColor(SDL_Renderer * renderer, float x1, float x2, float y, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool hlineRGBA(SDL_Renderer * renderer, float x1, float x2, float y, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Vertical line */ + + SDL3_GFXPRIMITIVES_SCOPE bool vlineColor(SDL_Renderer * renderer, float x, float y1, float y2, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool vlineRGBA(SDL_Renderer * renderer, float x, float y1, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Rectangle */ + + SDL3_GFXPRIMITIVES_SCOPE bool rectangleColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool rectangleRGBA(SDL_Renderer * renderer, float x1, float y1, + float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Rounded-Corner Rectangle */ + + SDL3_GFXPRIMITIVES_SCOPE bool roundedRectangleColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float rad, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool roundedRectangleRGBA(SDL_Renderer * renderer, float x1, float y1, + float x2, float y2, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Filled rectangle (Box) */ + + SDL3_GFXPRIMITIVES_SCOPE bool boxColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool boxRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, + float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Rounded-Corner Filled rectangle (Box) */ + + SDL3_GFXPRIMITIVES_SCOPE bool roundedBoxColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float rad, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool roundedBoxRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, + float y2, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Line */ + + SDL3_GFXPRIMITIVES_SCOPE bool lineColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool lineRGBA(SDL_Renderer * renderer, float x1, float y1, + float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* AA Line */ + + SDL3_GFXPRIMITIVES_SCOPE bool aalineColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool aalineRGBA(SDL_Renderer * renderer, float x1, float y1, + float x2, float y2, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Thick Line */ + SDL3_GFXPRIMITIVES_SCOPE bool thickLineColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, + float width, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool thickLineRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, + float width, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Circle */ + + SDL3_GFXPRIMITIVES_SCOPE bool circleColor(SDL_Renderer * renderer, float x, float y, float rad, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool circleRGBA(SDL_Renderer * renderer, float x, float y, float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Arc */ + + SDL3_GFXPRIMITIVES_SCOPE bool arcColor(SDL_Renderer * renderer, float x, float y, float rad, Sint32 start, Sint32 end, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool arcRGBA(SDL_Renderer * renderer, float x, float y, float rad, Sint32 start, Sint32 end, + Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* AA Circle */ + + SDL3_GFXPRIMITIVES_SCOPE bool aacircleColor(SDL_Renderer * renderer, float x, float y, float rad, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool aacircleRGBA(SDL_Renderer * renderer, float x, float y, + float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Filled Circle */ + + SDL3_GFXPRIMITIVES_SCOPE bool filledCircleColor(SDL_Renderer * renderer, float x, float y, float r, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool filledCircleRGBA(SDL_Renderer * renderer, float x, float y, + float rad, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Ellipse */ + + SDL3_GFXPRIMITIVES_SCOPE bool ellipseColor(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool ellipseRGBA(SDL_Renderer * renderer, float x, float y, + float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* AA Ellipse */ + + SDL3_GFXPRIMITIVES_SCOPE bool aaellipseColor(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool aaellipseRGBA(SDL_Renderer * renderer, float x, float y, + float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Filled Ellipse */ + + SDL3_GFXPRIMITIVES_SCOPE bool filledEllipseColor(SDL_Renderer * renderer, float x, float y, float rx, float ry, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool filledEllipseRGBA(SDL_Renderer * renderer, float x, float y, + float rx, float ry, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Pie */ + + SDL3_GFXPRIMITIVES_SCOPE bool pieColor(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool pieRGBA(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Filled Pie */ + + SDL3_GFXPRIMITIVES_SCOPE bool filledPieColor(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool filledPieRGBA(SDL_Renderer * renderer, float x, float y, float rad, + Sint32 start, Sint32 end, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Trigon */ + + SDL3_GFXPRIMITIVES_SCOPE bool trigonColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool trigonRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, + Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* AA-Trigon */ + + SDL3_GFXPRIMITIVES_SCOPE bool aatrigonColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool aatrigonRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, + Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Filled Trigon */ + + SDL3_GFXPRIMITIVES_SCOPE bool filledTrigonColor(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool filledTrigonRGBA(SDL_Renderer * renderer, float x1, float y1, float x2, float y2, float x3, float y3, + Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Polygon */ + + SDL3_GFXPRIMITIVES_SCOPE bool polygonColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool polygonRGBA(SDL_Renderer * renderer, const float * vx, const float * vy, + Sint32 n, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* AA-Polygon */ + + SDL3_GFXPRIMITIVES_SCOPE bool aapolygonColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool aapolygonRGBA(SDL_Renderer * renderer, const float * vx, const float * vy, + Sint32 n, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Filled Polygon */ + + SDL3_GFXPRIMITIVES_SCOPE bool filledPolygonColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool filledPolygonRGBA(SDL_Renderer * renderer, const float * vx, + const float * vy, Sint32 n, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Textured Polygon */ + + SDL3_GFXPRIMITIVES_SCOPE bool texturedPolygon(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, SDL_Surface * texture,Sint32 texture_dx,Sint32 texture_dy); + + /* Bezier */ + + SDL3_GFXPRIMITIVES_SCOPE bool bezierColor(SDL_Renderer * renderer, const float * vx, const float * vy, Sint32 n, Sint32 s, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool bezierRGBA(SDL_Renderer * renderer, const float * vx, const float * vy, + Sint32 n, Sint32 s, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Characters/Strings */ + + SDL3_GFXPRIMITIVES_SCOPE void gfxPrimitivesSetFont(const void *fontdata, Uint32 cw, Uint32 ch); + SDL3_GFXPRIMITIVES_SCOPE void gfxPrimitivesSetFontRotation(Uint32 rotation); + SDL3_GFXPRIMITIVES_SCOPE bool characterColor(SDL_Renderer * renderer, float x, float y, char c, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool characterRGBA(SDL_Renderer * renderer, float x, float y, char c, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + SDL3_GFXPRIMITIVES_SCOPE bool stringColor(SDL_Renderer * renderer, float x, float y, const char *s, Uint32 color); + SDL3_GFXPRIMITIVES_SCOPE bool stringRGBA(SDL_Renderer * renderer, float x, float y, const char *s, Uint8 r, Uint8 g, Uint8 b, Uint8 a); + + /* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* _SDL3_gfxPrimitives_h */ \ No newline at end of file diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives_font.h b/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives_font.h new file mode 100644 index 0000000..a5fc0f4 --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_gfxPrimitives_font.h @@ -0,0 +1,3106 @@ +/* + +SDL3_gfxPrimitives_font.h: 8x8 font definition + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#define GFX_FONTDATAMAX (8*256) + +static unsigned char gfxPrimitivesFontdata[GFX_FONTDATAMAX] = { + + /* + * 0 0x00 '^@' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 1 0x01 '^A' + */ + 0x7e, /* 01111110 */ + 0x81, /* 10000001 */ + 0xa5, /* 10100101 */ + 0x81, /* 10000001 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0x81, /* 10000001 */ + 0x7e, /* 01111110 */ + + /* + * 2 0x02 '^B' + */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xdb, /* 11011011 */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + + /* + * 3 0x03 '^C' + */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + + /* + * 4 0x04 '^D' + */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + + /* + * 5 0x05 '^E' + */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + + /* + * 6 0x06 '^F' + */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + + /* + * 7 0x07 '^G' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 8 0x08 '^H' + */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xe7, /* 11100111 */ + 0xc3, /* 11000011 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* + * 9 0x09 '^I' + */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x42, /* 01000010 */ + 0x42, /* 01000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 10 0x0a '^J' + */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0x99, /* 10011001 */ + 0xbd, /* 10111101 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0xc3, /* 11000011 */ + 0xff, /* 11111111 */ + + /* + * 11 0x0b '^K' + */ + 0x0f, /* 00001111 */ + 0x07, /* 00000111 */ + 0x0f, /* 00001111 */ + 0x7d, /* 01111101 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + + /* + * 12 0x0c '^L' + */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + + /* + * 13 0x0d '^M' + */ + 0x3f, /* 00111111 */ + 0x33, /* 00110011 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x70, /* 01110000 */ + 0xf0, /* 11110000 */ + 0xe0, /* 11100000 */ + + /* + * 14 0x0e '^N' + */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x67, /* 01100111 */ + 0xe6, /* 11100110 */ + 0xc0, /* 11000000 */ + + /* + * 15 0x0f '^O' + */ + 0x18, /* 00011000 */ + 0xdb, /* 11011011 */ + 0x3c, /* 00111100 */ + 0xe7, /* 11100111 */ + 0xe7, /* 11100111 */ + 0x3c, /* 00111100 */ + 0xdb, /* 11011011 */ + 0x18, /* 00011000 */ + + /* + * 16 0x10 '^P' + */ + 0x80, /* 10000000 */ + 0xe0, /* 11100000 */ + 0xf8, /* 11111000 */ + 0xfe, /* 11111110 */ + 0xf8, /* 11111000 */ + 0xe0, /* 11100000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + + /* + * 17 0x11 '^Q' + */ + 0x02, /* 00000010 */ + 0x0e, /* 00001110 */ + 0x3e, /* 00111110 */ + 0xfe, /* 11111110 */ + 0x3e, /* 00111110 */ + 0x0e, /* 00001110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + + /* + * 18 0x12 '^R' + */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + + /* + * 19 0x13 '^S' + */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + + /* + * 20 0x14 '^T' + */ + 0x7f, /* 01111111 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7b, /* 01111011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x00, /* 00000000 */ + + /* + * 21 0x15 '^U' + */ + 0x3e, /* 00111110 */ + 0x61, /* 01100001 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x86, /* 10000110 */ + 0x7c, /* 01111100 */ + + /* + * 22 0x16 '^V' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 23 0x17 '^W' + */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + + /* + * 24 0x18 '^X' + */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 25 0x19 '^Y' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 26 0x1a '^Z' + */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 27 0x1b '^[' + */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 28 0x1c '^\' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 29 0x1d '^]' + */ + 0x00, /* 00000000 */ + 0x24, /* 00100100 */ + 0x66, /* 01100110 */ + 0xff, /* 11111111 */ + 0x66, /* 01100110 */ + 0x24, /* 00100100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 30 0x1e '^^' + */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 31 0x1f '^_' + */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 32 0x20 ' ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 33 0x21 '!' + */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 34 0x22 '"' + */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x24, /* 00100100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 35 0x23 '#' + */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* + * 36 0x24 '$' + */ + 0x18, /* 00011000 */ + 0x3e, /* 00111110 */ + 0x60, /* 01100000 */ + 0x3c, /* 00111100 */ + 0x06, /* 00000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 37 0x25 '%' + */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x66, /* 01100110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 38 0x26 '&' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 39 0x27 ''' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 40 0x28 '(' + */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + + /* + * 41 0x29 ')' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + + /* + * 42 0x2a '*' + */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0xff, /* 11111111 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 43 0x2b '+' + */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 44 0x2c ',' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + + /* + * 45 0x2d '-' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 46 0x2e '.' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 47 0x2f '/' + */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + + /* + * 48 0x30 '0' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* + * 49 0x31 '1' + */ + 0x18, /* 00011000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 50 0x32 '2' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x1c, /* 00011100 */ + 0x30, /* 00110000 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 51 0x33 '3' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x3c, /* 00111100 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 52 0x34 '4' + */ + 0x1c, /* 00011100 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + + /* + * 53 0x35 '5' + */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 54 0x36 '6' + */ + 0x38, /* 00111000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 55 0x37 '7' + */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + + /* + * 56 0x38 '8' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 57 0x39 '9' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* + * 58 0x3a ':' + */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 59 0x3b ';' + */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + + /* + * 60 0x3c '<' + */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + + /* + * 61 0x3d '=' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 62 0x3e '>' + */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + + /* + * 63 0x3f '?' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 64 0x40 '@' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xc0, /* 11000000 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* + * 65 0x41 'A' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 66 0x42 'B' + */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* + * 67 0x43 'C' + */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 68 0x44 'D' + */ + 0xf8, /* 11111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + + /* + * 69 0x45 'E' + */ + 0xfe, /* 11111110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x62, /* 01100010 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 70 0x46 'F' + */ + 0xfe, /* 11111110 */ + 0x62, /* 01100010 */ + 0x68, /* 01101000 */ + 0x78, /* 01111000 */ + 0x68, /* 01101000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + + /* + * 71 0x47 'G' + */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xce, /* 11001110 */ + 0x66, /* 01100110 */ + 0x3a, /* 00111010 */ + 0x00, /* 00000000 */ + + /* + * 72 0x48 'H' + */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 73 0x49 'I' + */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 74 0x4a 'J' + */ + 0x1e, /* 00011110 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + 0x00, /* 00000000 */ + + /* + * 75 0x4b 'K' + */ + 0xe6, /* 11100110 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + + /* + * 76 0x4c 'L' + */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x62, /* 01100010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 77 0x4d 'M' + */ + 0xc6, /* 11000110 */ + 0xee, /* 11101110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 78 0x4e 'N' + */ + 0xc6, /* 11000110 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 79 0x4f 'O' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 80 0x50 'P' + */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + + /* + * 81 0x51 'Q' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xce, /* 11001110 */ + 0x7c, /* 01111100 */ + 0x0e, /* 00001110 */ + + /* + * 82 0x52 'R' + */ + 0xfc, /* 11111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x6c, /* 01101100 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + + /* + * 83 0x53 'S' + */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 84 0x54 'T' + */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x5a, /* 01011010 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 85 0x55 'U' + */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 86 0x56 'V' + */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* + * 87 0x57 'W' + */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* + * 88 0x58 'X' + */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 89 0x59 'Y' + */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 90 0x5a 'Z' + */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x8c, /* 10001100 */ + 0x18, /* 00011000 */ + 0x32, /* 00110010 */ + 0x66, /* 01100110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 91 0x5b '[' + */ + 0x3c, /* 00111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 92 0x5c '\' + */ + 0xc0, /* 11000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + + /* + * 93 0x5d ']' + */ + 0x3c, /* 00111100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 94 0x5e '^' + */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 95 0x5f '_' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + + /* + * 96 0x60 '`' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 97 0x61 'a' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 98 0x62 'b' + */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x7c, /* 01111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + + /* + * 99 0x63 'c' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 100 0x64 'd' + */ + 0x1c, /* 00011100 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 101 0x65 'e' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 102 0x66 'f' + */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x60, /* 01100000 */ + 0xf8, /* 11111000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + + /* + * 103 0x67 'g' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0xf8, /* 11111000 */ + + /* + * 104 0x68 'h' + */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x6c, /* 01101100 */ + 0x76, /* 01110110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + + /* + * 105 0x69 'i' + */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 106 0x6a 'j' + */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + + /* + * 107 0x6b 'k' + */ + 0xe0, /* 11100000 */ + 0x60, /* 01100000 */ + 0x66, /* 01100110 */ + 0x6c, /* 01101100 */ + 0x78, /* 01111000 */ + 0x6c, /* 01101100 */ + 0xe6, /* 11100110 */ + 0x00, /* 00000000 */ + + /* + * 108 0x6c 'l' + */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 109 0x6d 'm' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xec, /* 11101100 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0x00, /* 00000000 */ + + /* + * 110 0x6e 'n' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + + /* + * 111 0x6f 'o' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 112 0x70 'p' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + + /* + * 113 0x71 'q' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x1e, /* 00011110 */ + + /* + * 114 0x72 'r' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x00, /* 00000000 */ + + /* + * 115 0x73 's' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x06, /* 00000110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* + * 116 0x74 't' + */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0xfc, /* 11111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x36, /* 00110110 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + + /* + * 117 0x75 'u' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 118 0x76 'v' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* + * 119 0x77 'w' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* + * 120 0x78 'x' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 121 0x79 'y' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0xfc, /* 11111100 */ + + /* + * 122 0x7a 'z' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x4c, /* 01001100 */ + 0x18, /* 00011000 */ + 0x32, /* 00110010 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 123 0x7b '{' + */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x00, /* 00000000 */ + + /* + * 124 0x7c '|' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 125 0x7d '}' + */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + + /* + * 126 0x7e '~' + */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 127 0x7f '' + */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 128 0x80 '€' + */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + + /* + * 129 0x81 '' + */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 130 0x82 '‚' + */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 131 0x83 'ƒ' + */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 132 0x84 '„' + */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 133 0x85 '…' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 134 0x86 '†' + */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 135 0x87 '‡' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x7e, /* 01111110 */ + 0x0c, /* 00001100 */ + 0x38, /* 00111000 */ + + /* + * 136 0x88 'ˆ' + */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 137 0x89 '‰' + */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 138 0x8a 'Š' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 139 0x8b '‹' + */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 140 0x8c 'Œ' + */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 141 0x8d '' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 142 0x8e 'Ž' + */ + 0xc6, /* 11000110 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 143 0x8f '' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 144 0x90 '' + */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xf8, /* 11111000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 145 0x91 '‘' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 146 0x92 '’' + */ + 0x3e, /* 00111110 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xce, /* 11001110 */ + 0x00, /* 00000000 */ + + /* + * 147 0x93 '“' + */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 148 0x94 '”' + */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 149 0x95 '•' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 150 0x96 '–' + */ + 0x78, /* 01111000 */ + 0x84, /* 10000100 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 151 0x97 '—' + */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 152 0x98 '˜' + */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0xfc, /* 11111100 */ + + /* + * 153 0x99 '™' + */ + 0xc6, /* 11000110 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* + * 154 0x9a 'š' + */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 155 0x9b '›' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 156 0x9c 'œ' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x64, /* 01100100 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x66, /* 01100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* + * 157 0x9d '' + */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 158 0x9e 'ž' + */ + 0xf8, /* 11111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xfa, /* 11111010 */ + 0xc6, /* 11000110 */ + 0xcf, /* 11001111 */ + 0xc6, /* 11000110 */ + 0xc7, /* 11000111 */ + + /* + * 159 0x9f 'Ÿ' + */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + + /* + * 160 0xa0 ' ' + */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 161 0xa1 'ก' + */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 162 0xa2 'ข' + */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* + * 163 0xa3 'ฃ' + */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 164 0xa4 'ค' + */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + + /* + * 165 0xa5 'ฅ' + */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0x00, /* 00000000 */ + + /* + * 166 0xa6 'ฆ' + */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 167 0xa7 'ง' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 168 0xa8 'จ' + */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x63, /* 01100011 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + + /* + * 169 0xa9 'ฉ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 170 0xaa 'ช' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 171 0xab 'ซ' + */ + 0x63, /* 01100011 */ + 0xe6, /* 11100110 */ + 0x6c, /* 01101100 */ + 0x7e, /* 01111110 */ + 0x33, /* 00110011 */ + 0x66, /* 01100110 */ + 0xcc, /* 11001100 */ + 0x0f, /* 00001111 */ + + /* + * 172 0xac 'ฌ' + */ + 0x63, /* 01100011 */ + 0xe6, /* 11100110 */ + 0x6c, /* 01101100 */ + 0x7a, /* 01111010 */ + 0x36, /* 00110110 */ + 0x6a, /* 01101010 */ + 0xdf, /* 11011111 */ + 0x06, /* 00000110 */ + + /* + * 173 0xad 'ญ' + */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 174 0xae 'ฎ' + */ + 0x00, /* 00000000 */ + 0x33, /* 00110011 */ + 0x66, /* 01100110 */ + 0xcc, /* 11001100 */ + 0x66, /* 01100110 */ + 0x33, /* 00110011 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 175 0xaf 'ฏ' + */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0x66, /* 01100110 */ + 0x33, /* 00110011 */ + 0x66, /* 01100110 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 176 0xb0 'ฐ' + */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + + /* + * 177 0xb1 'ฑ' + */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + + /* + * 178 0xb2 'ฒ' + */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + + /* + * 179 0xb3 'ณ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 180 0xb4 'ด' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 181 0xb5 'ต' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 182 0xb6 'ถ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 183 0xb7 'ท' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 184 0xb8 'ธ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 185 0xb9 'น' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 186 0xba 'บ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 187 0xbb 'ป' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 188 0xbc 'ผ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 189 0xbd 'ฝ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 190 0xbe 'พ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 191 0xbf 'ฟ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 192 0xc0 'ภ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 193 0xc1 'ม' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 194 0xc2 'ย' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 195 0xc3 'ร' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 196 0xc4 'ฤ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 197 0xc5 'ล' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 198 0xc6 'ฦ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 199 0xc7 'ว' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 200 0xc8 'ศ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 201 0xc9 'ษ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 202 0xca 'ส' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 203 0xcb 'ห' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 204 0xcc 'ฬ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 205 0xcd 'อ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 206 0xce 'ฮ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 207 0xcf 'ฯ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 208 0xd0 'ะ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 209 0xd1 'ั' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 210 0xd2 'า' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 211 0xd3 'ำ' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 212 0xd4 'ิ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 213 0xd5 'ี' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 214 0xd6 'ึ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 215 0xd7 'ื' + */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* + * 216 0xd8 'ุ' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 217 0xd9 'ู' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 218 0xda 'ฺ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 219 0xdb '' + */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* + * 220 0xdc '' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* + * 221 0xdd '' + */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + + /* + * 222 0xde '' + */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + + /* + * 223 0xdf '฿' + */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 224 0xe0 'เ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xc8, /* 11001000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* + * 225 0xe1 'แ' + */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + + /* + * 226 0xe2 'โ' + */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* + * 227 0xe3 'ใ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* + * 228 0xe4 'ไ' + */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* + * 229 0xe5 'ๅ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + + /* + * 230 0xe6 'ๆ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0xc0, /* 11000000 */ + + /* + * 231 0xe7 '็' + */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* + * 232 0xe8 '่' + */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + + /* + * 233 0xe9 '้' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* + * 234 0xea '๊' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xee, /* 11101110 */ + 0x00, /* 00000000 */ + + /* + * 235 0xeb '๋' + */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x3e, /* 00111110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* + * 236 0xec '์' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 237 0xed 'ํ' + */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7e, /* 01111110 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + + /* + * 238 0xee '๎' + */ + 0x1e, /* 00011110 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x7e, /* 01111110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + + /* + * 239 0xef '๏' + */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* + * 240 0xf0 '๐' + */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 241 0xf1 '๑' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 242 0xf2 '๒' + */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 243 0xf3 '๓' + */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* + * 244 0xf4 '๔' + */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* + * 245 0xf5 '๕' + */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + + /* + * 246 0xf6 '๖' + */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 247 0xf7 '๗' + */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 248 0xf8 '๘' + */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 249 0xf9 '๙' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 250 0xfa '๚' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 251 0xfb '๛' + */ + 0x0f, /* 00001111 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xec, /* 11101100 */ + 0x6c, /* 01101100 */ + 0x3c, /* 00111100 */ + 0x1c, /* 00011100 */ + + /* + * 252 0xfc '' + */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 253 0xfd '' + */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 254 0xfe '' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* + * 255 0xff ' ' + */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + +}; diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.c b/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.c new file mode 100644 index 0000000..41d787e --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.c @@ -0,0 +1,1617 @@ +/* + +SDL3_imageFilter.c: byte-image "filter" routines + +Copyright (C) 2012-2014 Andreas Schiffler +Copyright (C) 2013 Sylvain Beucler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#include +#include +#include + +#include + +#include "SDL3_imageFilter.h" + +/* ------ Custom defines ----- */ + +/*! +\brief Swaps the byte order in a 32bit integer (LSB becomes MSB, etc.). +*/ +#define SWAP_32(x) (((x) >> 24) | (((x) & 0x00ff0000) >> 8) | (((x) & 0x0000ff00) << 8) | ((x) << 24)) + +#define MAX_BYTES_PER_PIXEL 16 +/* ------------------------------------------------------------------------------------ */ + +/*! +\brief Filter using Add: D = saturation255(S1 + S2) + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterAdd(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + result = (int) *cursrc1 + (int) *cursrc2; + if (result > 255) + result = 255; + *curdst = (unsigned char) result; + /* Advance pointers */ + cursrc1++; + cursrc2++; + curdst++; + } + + return true; +} + +/*! +\brief Filter using Mean: D = S1/2 + S2/2 + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMean(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + float tmp, fSrc1, fSrc2; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + fSrc1 = cursrc1[i] / 255.0f; + fSrc2 = cursrc2[i] / 255.0f; + tmp = fSrc1 / 2 + fSrc2 / 2; + curdst[i] = (unsigned char) (tmp * 255) ; + } + + return true; +} + +/*! +\brief Filter using Sub: D = saturation0(S1 - S2) + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterSub(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + result = (int) cursrc1[i] - (int) cursrc2[i]; + if (result < 0) + result = 0; + curdst[i] = (unsigned char) result; + } + return true; +} + +/*! +\brief Filter using AbsDiff: D = | S1 - S2 | + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterAbsDiff(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + result = abs((int) *cursrc1 - (int) *cursrc2); + *curdst = (unsigned char) result; + /* Advance pointers */ + cursrc1++; + cursrc2++; + curdst++; + } + + return true; +} + +/*! +\brief Filter using Mult: D = saturation255(S1 * S2) + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMult(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + float tmp, fSrc1, fSrc2; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + fSrc1 = cursrc1[i] / 255.0f; + fSrc2 = cursrc1[i] / 255.0f; + tmp = fSrc1 * fSrc2; + curdst[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/*! +\brief Filter using MultUnbound: D = S1 * S2 - No saturation + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMultUnbound(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart, tmp; + unsigned char *cursrc1, *cursrc2, *curdst; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + tmp = (unsigned int) cursrc1[i] * (unsigned int) cursrc2[i]; + curdst[i] = (unsigned char) tmp; + } + + return true; +} + +/*! +\brief Filter using MultInv: D = 255 - ((255 - S1) * (255 - S2)) + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMultInv(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + float tmp, fSrc1, fSrc2; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + fSrc1 = cursrc1[i] / 255.0f; + fSrc2 = cursrc2[i] / 255.0f; + tmp = 1.0f - ((1.0f - fSrc1) * (1.0f - fSrc2)); + curdst[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/*! +\brief Filter using MultDivby2: D = saturation255(S1/2 * S2) + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMultDivby2(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + int result; + float tmp, fSrc1, fSrc2; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + fSrc1 = cursrc1[i] / 255.0f; + fSrc2 = cursrc2[i] / 255.0f; + tmp = (fSrc1 * fSrc2) / 2.0f; + if (tmp > 1.0f) + tmp = 1.0f; + curdst[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/*! +\brief Filter using MultDivby4: D = saturation255(S1/2 * S2/2) + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMultDivby4(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + int result; + float tmp, fSrc1, fSrc2; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + fSrc1 = cursrc1[i] / 255.0f; + fSrc2 = cursrc2[i] / 255.0f; + tmp = (fSrc1 * fSrc2) / 4.0f; + if (tmp > 1.0f) + tmp = 1.0f; + curdst[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/*! +\brief Filter using BitAnd: D = S1 & S2 + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterBitAnd(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + *curdst = (*cursrc1) & (*cursrc2); + /* Advance pointers */ + cursrc1++; + cursrc2++; + curdst++; + } + + return true; +} + +/*! +\brief Filter using BitOr: D = S1 | S2 + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterBitOr(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + *curdst = *cursrc1 | *cursrc2; + /* Advance pointers */ + cursrc1++; + cursrc2++; + curdst++; + } + + return true; +} + +/*! +\brief Filter using Div: D = S1 / S2 + +\param Src1 Pointer to the start of the first source byte array (S1). +\param Src2 Pointer to the start of the second source byte array (S2). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterDiv(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *cursrc2, *curdst; + float tmp, fSrc1, fSrc2; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Src2 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + cursrc2 = Src2; + curdst = Dest; + + for (i = istart; i < length; i++) { + if (cursrc2[i] == 0) { + curdst[i] = 0; + } else { + fSrc1 = cursrc1[i] / 255.0f; + fSrc2 = cursrc2[i] / 255.0f; + tmp = cursrc1[i] / cursrc2[i]; + if (tmp > 1.0f) + tmp = 1.0f; + curdst[i] = (unsigned char) (tmp * 255); + } + } + + return true; +} + +/* ------------------------------------------------------------------------------------ */ + +/*! +\brief Filter using BitNegation: D = !S + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterBitNegation(unsigned char *Src1, unsigned char *Dest, unsigned int length) +{ + unsigned int i, istart; + unsigned char *cursrc1, *curdst; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdst = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + *curdst = ~(*cursrc1); + /* Advance pointers */ + cursrc1++; + curdst++; + } + + return true; +} + +/*! +\brief Filter using AddByte: D = saturation255(S + C) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param C Constant value to add (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterAddByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C) +{ + unsigned int i, istart; + int iC; + unsigned char *cursrc1, *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: C==0 */ + if (C == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* C routine to process image */ + iC = (int) C; + for (i = istart; i < length; i++) { + result = (int) *cursrc1 + iC; + if (result > 255) + result = 255; + *curdest = (unsigned char) result; + /* Advance pointers */ + cursrc1++; + curdest++; + } + return true; +} + +/*! +\brief Filter using AddUint: D = saturation255((S[i] + Cs[i % BPP]) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param bpp The bytes per unit length (BPP) +\param C Constant to add (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterAddUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned int C) +{ + unsigned int i, j, istart; + int iC[MAX_BYTES_PER_PIXEL], k; + unsigned char *cursrc1; + unsigned char *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: C==0 */ + if (C == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process uint */ + for (k = bpp; k >= 0; k--) { + iC[k] = (int) ((C >> (8*(bpp - k))) & 0xff); + } + + /* Routine to process bytes */ + for (i = istart; i < length; i += bpp) { + for (j = 0; j < bpp; j++) { + if ((i+j) < length) { + result = cursrc1[i+j] + iC[j]; + if (result > 255){ + result = 255; + } + curdest[i+j] = (unsigned char) result; + } + } + } + return true; +} + +/*! +\brief Filter using AddByteToHalf: D = saturation255(S/2 + C) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param C Constant to add (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterAddByteToHalf(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C) +{ + unsigned int i, istart; + int iC; + unsigned char *cursrc1; + unsigned char *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + iC = (int) C; + for (i = istart; i < length; i++) { + result = (int) (*cursrc1 / 2) + iC; + if (result > 255) + result = 255; + *curdest = (unsigned char) result; + /* Advance pointers */ + cursrc1++; + curdest++; + } + + return true; +} + +/*! +\brief Filter using SubByte: D = saturation0(S - C) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. +\param C Constant to subtract (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterSubByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C) +{ + unsigned int i, istart; + int iC; + unsigned char *cursrc1; + unsigned char *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: C==0 */ + if (C == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + iC = (int) C; + for (i = istart; i < length; i++) { + result = (int) *cursrc1 - iC; + if (result < 0) + result = 0; + *curdest = (unsigned char) result; + /* Advance pointers */ + cursrc1++; + curdest++; + } + return true; +} + +/*! +\brief Filter using SubUint: D = saturation0(S[i] - Cs[i % BPP]) + +\param Src1 Pointer to the start of the source byte array (S1). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param bpp The bytes per unit length (BPP) +\param C Constant to subtract (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterSubUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned int C) +{ + unsigned int i, j, istart; + int iC[MAX_BYTES_PER_PIXEL], k; + unsigned char *cursrc1; + unsigned char *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: C==0 */ + if (C == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process uint */ + for (k = bpp; k >= 0; k--) { + iC[k] = (int) ((C >> (8*(bpp - k))) & 0xff); + } + + /* Routine to process bytes */ + for (i = istart; i < length; i += bpp) { + for (j = 0; j < bpp; j++) { + if ((i+j) < length) { + result = cursrc1[i+j] - iC[j]; + if (result < 0){ + result = 0; + } + curdest[i+j] = (unsigned char) result; + } + } + } + + return true; +} + +/*! +\brief Filter using ShiftRightUint: D = saturation0((uint)S[i] >> N) + +\param Src1 Pointer to the start of the source byte array (S1). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param N Number of bit-positions to shift (N). Valid range is 0 to 8. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterShiftRightUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned char N) +{ + unsigned int i,istart; + unsigned char *cursrc1, *curdest; + unsigned int *icursrc1, *icurdest; + int j, result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Check shift */ + if (N > 8) { + return false; + } + + /* Special case: N==0 */ + if (N == 0) { + memcpy(Src1, Dest, length); + return (0); + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i += bpp) { + if ((i + bpp) < length) { + result = 0; + for (j = bpp; j >= 0; j--) { + result |= (unsigned int) ((cursrc1[i + j] << (sizeof(unsigned int) * j))); + } + /* Do the actual uint shift */ + result = result >> N; + /* Pass the shifted value to each byte */ + for (j = 0; j < bpp; j++) { + curdest[i + j] = (result >> bpp) & 0xFF; + } + } + } + + return true; +} + +/*! +\brief Filter using MultByByte: D = saturation255(S * C) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. +\param C Constant to multiply with (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterMultByByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C) +{ + unsigned int i, istart; + unsigned char *cursrc1; + unsigned char *curdest; + int result; + float tmp, fSrc1, fC; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: C==1 */ + if (C == 1) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + fC = C / 255.0f; + for (i = istart; i < length; i++) { + fSrc1 = cursrc1[i] / 255.0f; + tmp = fSrc1 * fC; + if (tmp > 1.0f) + tmp = 1.0f; + curdest[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/*! +\brief Filter using ShiftRightAndMultByByte: D = saturation255((S >> N) * C) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param N Number of bit-positions to shift (N). Valid range is 0 to 8. +\param C Constant to multiply with (C). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterShiftRightAndMultByByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N, + unsigned char C) +{ + unsigned int i, istart; + unsigned char *cursrc1; + unsigned char *curdest; + int result; + float tmp, fSrc1, fC; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Check shift */ + if (N > 8) { + return false; + } + + /* Special case: N==0 && C==1 */ + if ((N == 0) && (C == 1)) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + fC = C / 255.0f; + for (i = istart; i < length; i++) { + fSrc1 = (cursrc1[i] >> N) / 255.0f; + tmp = fSrc1 * fC; + if (tmp > 1.0f) + tmp = 1.0f; + curdest[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/*! +\brief Filter using ShiftRight: D = saturation0(S >> N) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. +\param N Number of bit-positions to shift (N). Valid range is 0 to 8. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterShiftRight(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N) +{ + unsigned int i, istart; + unsigned char *cursrc1, *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Check shift */ + if (N > 8) { + return false; + } + + /* Special case: N==0 */ + if (N == 0) { + memcpy(Src1, Dest, length); + return (0); + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + result = ((int) cursrc1[i]) >> N; + if (result < 0) { + result = 0; + } + curdest[i] = (unsigned char) result; + } + + return true; +} + +/*! +\brief Filter using ShiftLeftByte: D = (S << N) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source arrays. +\param N Number of bit-positions to shift (N). Valid range is 0 to 8. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterShiftLeftByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N) +{ + unsigned int i, istart; + unsigned char *cursrc1, *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + if (N > 8) { + return (-1); + } + + /* Special case: N==0 */ + if (N == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + result = ((int) *cursrc1 << N) & 0xff; + *curdest = (unsigned char) result; + /* Advance pointers */ + cursrc1++; + curdest++; + } + + return true; +} + +/*! +\brief Filter using ShiftLeftUint: D = ((uint)S << N) + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param N Number of bit-positions to shift (N). Valid range is 0 to 32. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterShiftLeftUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned char N) +{ + unsigned int i, istart; + int j; + unsigned char *cursrc1, *curdest; + unsigned int *icursrc1, *icurdest; + unsigned int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + if (N > 32) { + return false; + } + + /* Special case: N==0 */ + if (N == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i += bpp) { + if ((i + bpp) < length) { + result = 0; + for (j = bpp; j >= 0; j--) { + result |= (int) ((cursrc1[i + j] << (sizeof(unsigned int) * j))); + } + /* Do the actual uint shift */ + result = result << N; + /* Pass the shifted value to each byte position */ + for (j = 0; j < bpp; j++) { + curdest[i + j] = (result >> bpp) & 0xFF; + } + } + } + + return true; +} + +/*! +\brief Filter ShiftLeft: D = saturation255(S << N) + +\param Src1 Pointer to the start of the source byte array (S1). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param N Number of bit-positions to shift (N). Valid range is 0 to 8. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterShiftLeft(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N) +{ + unsigned int i, istart; + unsigned char *cursrc1, *curdest; + int result; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + if (N > 8) { + return false; + } + + /* Special case: N==0 */ + if (N == 0) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + result = ((int) cursrc1[i]) << N; + if (result > 255) { + result = 255; + } + curdest[i] = (unsigned char) result; + } + + return true; +} + +/*! +\brief Filter using BinarizeUsingThreshold: D = (S >= T) ? 255:0 + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param T The threshold boundary (inclusive). + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterBinarizeUsingThreshold(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char T) +{ + unsigned int i, istart; + unsigned char *cursrc1; + unsigned char *curdest; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: T==0 */ + if (T == 0) { + memset(Dest, 255, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* C routine to process image */ + for (i = istart; i < length; i++) { + *curdest = (unsigned char)(((unsigned char)*cursrc1 >= T) ? 255 : 0); + /* Advance pointers */ + cursrc1++; + curdest++; + } + + return true; +} + +/*! +\brief Filter using ClipToRange: D = (S >= Tmin) & (S <= Tmax) S:Tmin | Tmax + +\param Src1 Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param Tmin Lower (inclusive) boundary of the clipping range. +\param Tmax Upper (inclusive) boundary of the clipping range. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterClipToRange(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char Tmin, + unsigned char Tmax) +{ + unsigned int i, istart; + unsigned char *cursrc1; + unsigned char *curdest; + + /* Validate input parameters */ + if ((Src1 == NULL) || (Dest == NULL)) + return false; + if (length == 0) + return true; + + /* Special case: Tmin==0 && Tmax = 255 */ + if ((Tmin == 0) && (Tmax == 25)) { + memcpy(Src1, Dest, length); + return true; + } + + /* Setup to process whole image */ + istart = 0; + cursrc1 = Src1; + curdest = Dest; + + /* Routine to process image */ + for (i = istart; i < length; i++) { + if (*cursrc1 < Tmin) { + *curdest = Tmin; + } else if (*cursrc1 > Tmax) { + *curdest = Tmax; + } else { + *curdest = *cursrc1; + } + /* Advance pointers */ + cursrc1++; + curdest++; + } + + return true; +} + +/*! +\brief Filter using NormalizeLinear: D = saturation255((Nmax - Nmin)/(Cmax - Cmin)*(S - Cmin) + Nmin) + +\param Src Pointer to the start of the source byte array (S). +\param Dest Pointer to the start of the destination byte array (D). +\param length The number of bytes in the source array. +\param Cmin Normalization constant. +\param Cmax Normalization constant. +\param Nmin Normalization constant. +\param Nmax Normalization constant. + +\return Returns true for success or false for error. +*/ +bool SDL_imageFilterNormalizeLinear(unsigned char *Src, unsigned char *Dest, unsigned int length, int Cmin, int Cmax, int Nmin, + int Nmax) +{ + unsigned int i, istart; + unsigned char *cursrc; + unsigned char *curdest; + float dN, dC, factor, fCMin, fCMax; + float fNMin, fNMax, fSrc1, tmp; + + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL)) + return(-1); + if (length == 0) + return(0); + + /* Setup to process whole image */ + istart = 0; + cursrc = Src; + curdest = Dest; + + /* Routine to process image */ + fCMin = Cmin / 255.0f; + fCMax = Cmax / 255.0f; + fNMin = Nmin / 255.0f; + fNMax = Nmax / 255.0f; + + dC = fCMax - fCMin; + if (dC == 0) + return true; + dN = fNMax - fNMin; + factor = dN / dC; + for (i = istart; i < length; i++) { + fSrc1 = cursrc[i] / 255.0f; + tmp = (factor * (fSrc1 - fCMin)) + fNMin; + if (tmp > 1.0f) + tmp = 1.0f; + curdest[i] = (unsigned char) (tmp * 255); + } + + return true; +} + +/* ------------------------------------------------------------------------------------ */ + +/*! +\brief Filter using ConvolveKernel3x3Divide: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >2. +\param columns Number of columns in source/destination array. Must be >2. +\param Kernel The 2D convolution kernel of size 3x3. +\param Divisor The divisor of the convolution sum. Must be >0. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel3x3Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char Divisor) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 3) || (rows < 3) || (Divisor == 0)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel5x5Divide: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >4. +\param columns Number of columns in source/destination array. Must be >4. +\param Kernel The 2D convolution kernel of size 5x5. +\param Divisor The divisor of the convolution sum. Must be >0. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel5x5Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char Divisor) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 5) || (rows < 5) || (Divisor == 0)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel7x7Divide: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >6. +\param columns Number of columns in source/destination array. Must be >6. +\param Kernel The 2D convolution kernel of size 7x7. +\param Divisor The divisor of the convolution sum. Must be >0. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel7x7Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char Divisor) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 7) || (rows < 7) || (Divisor == 0)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel9x9Divide: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >8. +\param columns Number of columns in source/destination array. Must be >8. +\param Kernel The 2D convolution kernel of size 9x9. +\param Divisor The divisor of the convolution sum. Must be >0. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel9x9Divide(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char Divisor) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 9) || (rows < 9) || (Divisor == 0)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel3x3ShiftRight: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >2. +\param columns Number of columns in source/destination array. Must be >2. +\param Kernel The 2D convolution kernel of size 3x3. +\param NRightShift The number of right bit shifts to apply to the convolution sum. Must be <7. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel3x3ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char NRightShift) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 3) || (rows < 3) || (NRightShift > 7)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel5x5ShiftRight: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >4. +\param columns Number of columns in source/destination array. Must be >4. +\param Kernel The 2D convolution kernel of size 5x5. +\param NRightShift The number of right bit shifts to apply to the convolution sum. Must be <7. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel5x5ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char NRightShift) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 5) || (rows < 5) || (NRightShift > 7)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel7x7ShiftRight: Dij = saturation0and255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >6. +\param columns Number of columns in source/destination array. Must be >6. +\param Kernel The 2D convolution kernel of size 7x7. +\param NRightShift The number of right bit shifts to apply to the convolution sum. Must be <7. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel7x7ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char NRightShift) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 7) || (rows < 7) || (NRightShift > 7)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using ConvolveKernel9x9ShiftRight: Dij = saturation255( ... ) + +\param Src The source 2D byte array to convolve. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >8. +\param columns Number of columns in source/destination array. Must be >8. +\param Kernel The 2D convolution kernel of size 9x9. +\param NRightShift The number of right bit shifts to apply to the convolution sum. Must be <7. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterConvolveKernel9x9ShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, + signed short *Kernel, unsigned char NRightShift) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL) || (Kernel == NULL)) + return false; + + if ((columns < 9) || (rows < 9) || (NRightShift > 7)) + return false; + + /* No implementation yet */ + return false; +} + +/* ------------------------------------------------------------------------------------ */ + +/*! +\brief Filter using SobelX: Dij = saturation255( ... ) + +\param Src The source 2D byte array to sobel-filter. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >2. +\param columns Number of columns in source/destination array. Must be >7. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterSobelX(unsigned char *Src, unsigned char *Dest, int rows, int columns) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL)) + return false; + + if ((columns < 8) || (rows < 3)) + return false; + + /* No implementation yet */ + return false; +} + +/*! +\brief Filter using SobelXShiftRight: Dij = saturation255( ... ) + +\param Src The source 2D byte array to sobel-filter. Should be different from destination. +\param Dest The destination 2D byte array to store the result in. Should be different from source. +\param rows Number of rows in source/destination array. Must be >2. +\param columns Number of columns in source/destination array. Must be >8. +\param NRightShift The number of right bit shifts to apply to the filter sum. Must be <7. + +Note: No implementation available for this function yet. + +\return Returns true if filter was applied, false otherwise. +*/ +bool SDL_imageFilterSobelXShiftRight(unsigned char *Src, unsigned char *Dest, int rows, int columns, + unsigned char NRightShift) +{ + /* Validate input parameters */ + if ((Src == NULL) || (Dest == NULL)) + return false; + if ((columns < 8) || (rows < 3) || (NRightShift > 7)) + return false; + + /* No implementation yet */ + return false; +} diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.h b/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.h new file mode 100644 index 0000000..44edca7 --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_imageFilter.h @@ -0,0 +1,161 @@ +/* + +SDL3_imageFilter.h: byte-image "filter" routines + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#ifndef _SDL3_imageFilter_h +#define _SDL3_imageFilter_h + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + /* ---- Function Prototypes */ + +#ifdef _MSC_VER +# if defined(DLL_EXPORT) && !defined(LIBSDL3_GFX_DLL_IMPORT) +# define SDL3_IMAGEFILTER_SCOPE __declspec(dllexport) +# else +# ifdef LIBSDL3_GFX_DLL_IMPORT +# define SDL3_IMAGEFILTER_SCOPE __declspec(dllimport) +# endif +# endif +#endif +#ifndef SDL3_IMAGEFILTER_SCOPE +# define SDL3_IMAGEFILTER_SCOPE extern +#endif + + /* Comments: */ + /* 1.) Convolution routines are not implemented at this time. */ + + // + // All routines return: + // true OK + // false Error (internal error, parameter error) + // + + // SDL_imageFilterAdd: D = saturation255(S1 + S2) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterAdd(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterMean: D = S1/2 + S2/2 + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMean(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterSub: D = saturation0(S1 - S2) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterSub(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterAbsDiff: D = | S1 - S2 | + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterAbsDiff(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterMult: D = saturation(S1 * S2) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMult(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterMultUnbound: D = S1 * S2 unbound + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMultUnbound(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterMultInv: D = 255 - ((255 - S1) * (255 - S2)) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMultInv(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterMultDivby2: D = saturation255(S1/2 * S2) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMultDivby2(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, + unsigned int length); + + // SDL_imageFilterMultDivby4: D = saturation255(S1/2 * S2/2) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMultDivby4(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, + unsigned int length); + + // SDL_imageFilterBitAnd: D = S1 & S2 + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterBitAnd(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterBitOr: D = S1 | S2 + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterBitOr(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterDiv: D = S1 / S2 + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterDiv(unsigned char *Src1, unsigned char *Src2, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterBitNegation: D = !S + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterBitNegation(unsigned char *Src1, unsigned char *Dest, unsigned int length); + + // SDL_imageFilterAddByte: D = saturation255(S + C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterAddByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C); + + // SDL_imageFilterAddUint: D = saturation255(S + (uint)C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterAddUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned int C); + + // SDL_imageFilterAddByteToHalf: D = saturation255(S/2 + C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterAddByteToHalf(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned char C); + + // SDL_imageFilterSubByte: D = saturation0(S - C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterSubByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C); + + // SDL_imageFilterSubUint: D = saturation0(S - (uint)C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterSubUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned int bpp, unsigned int C); + + // SDL_imageFilterShiftRight: D = saturation0(S >> N) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterShiftRight(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N); + + // SDL_imageFilterShiftRightUint: D = saturation0((uint)S >> N) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterShiftRightUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned int bpp, unsigned char N); + + // SDL_imageFilterMultByByte: D = saturation255(S * C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterMultByByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char C); + + // SDL_imageFilterShiftRightAndMultByByte: D = saturation255((S >> N) * C) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterShiftRightAndMultByByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned char N, unsigned char C); + + // SDL_imageFilterShiftLeftByte: D = (S << N) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterShiftLeftByte(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned char N); + + // SDL_imageFilterShiftLeftUint: D = ((uint)S << N) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterShiftLeftUint(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned int bpp, unsigned char N); + + // SDL_imageFilterShiftLeft: D = saturation255(S << N) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterShiftLeft(unsigned char *Src1, unsigned char *Dest, unsigned int length, unsigned char N); + + // SDL_imageFilterBinarizeUsingThreshold: D = S >= T ? 255:0 + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterBinarizeUsingThreshold(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned char T); + + // SDL_imageFilterClipToRange: D = (S >= Tmin) & (S <= Tmax) 255:0 + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterClipToRange(unsigned char *Src1, unsigned char *Dest, unsigned int length, + unsigned char Tmin, unsigned char Tmax); + + // SDL_imageFilterNormalizeLinear: D = saturation255((Nmax - Nmin)/(Cmax - Cmin)*(S - Cmin) + Nmin) + SDL3_IMAGEFILTER_SCOPE bool SDL_imageFilterNormalizeLinear(unsigned char *Src, unsigned char *Dest, unsigned int length, int Cmin, + int Cmax, int Nmin, int Nmax); + + /* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* _SDL3_imageFilter_h */ diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.c b/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.c new file mode 100644 index 0000000..0ba72ac --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.c @@ -0,0 +1,1636 @@ +/* + +SDL3_rotozoom.c: rotozoomer, zoomer and shrinker for 32bit or 8bit surfaces + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#ifdef WIN32 +#include +#endif + +#include +#include + +#include "SDL3_rotozoom.h" + +/*! +\brief Returns maximum of two numbers a and b. +*/ +#define MAX(a,b) (((a) > (b)) ? (a) : (b)) + +/*! +\brief Number of guard rows added to destination surfaces. + +This is a simple but effective workaround for observed issues. +These rows allocate extra memory and are then hidden from the surface. +Rows are added to the end of destination surfaces when they are allocated. +This catches any potential overflows which seem to happen with +just the right src image dimensions and scale/rotation and can lead +to a situation where the program can segfault. +*/ +#define GUARD_ROWS (2) + +/*! +\brief Lower limit of absolute zoom factor or rotation degrees. +*/ +#define VALUE_LIMIT 0.001 + +/*! +\brief Returns colorkey info for a surface +*/ +Uint32 _colorkey(SDL_Surface *src) +{ + Uint32 key = 0; + SDL_GetSurfaceColorKey(src, &key); + return key; +} + + +/*! +\brief Internal 32 bit integer-factor averaging Shrinker. + +Shrinks 32 bit RGBA/ABGR 'src' surface to 'dst' surface. +Averages color and alpha values values of src pixels to calculate dst pixels. +Assumes src and dst surfaces are of 32 bit depth. +Assumes dst surface was allocated with the correct dimensions. + +\param src The surface to shrink (input). +\param dst The shrunken surface (output). +\param factorx The horizontal shrinking ratio. +\param factory The vertical shrinking ratio. + +\return 0 for success or -1 for error. +*/ +int _shrinkSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int factorx, int factory) +{ + int x, y, dx, dy, dgap, ra, ga, ba, aa; + int n_average; + SDL_Color *sp, *osp, *oosp; + SDL_Color *dp; + + /* + * Averaging integer shrink + */ + + /* Precalculate division factor */ + n_average = factorx*factory; + + /* + * Scan destination + */ + sp = (SDL_Color *) src->pixels; + + dp = (SDL_Color *) dst->pixels; + dgap = dst->pitch - dst->w * 4; + + for (y = 0; y < dst->h; y++) { + + osp=sp; + for (x = 0; x < dst->w; x++) { + + /* Trace out source box and accumulate */ + oosp=sp; + ra=ga=ba=aa=0; + for (dy=0; dy < factory; dy++) { + for (dx=0; dx < factorx; dx++) { + ra += sp->r; + ga += sp->g; + ba += sp->b; + aa += sp->a; + + sp++; + } + /* src dx loop */ + sp = (SDL_Color *)((Uint8*)sp + (src->pitch - 4*factorx)); // next y + } + /* src dy loop */ + + /* next box-x */ + sp = (SDL_Color *)((Uint8*)oosp + 4*factorx); + + /* Store result in destination */ + dp->r = ra/n_average; + dp->g = ga/n_average; + dp->b = ba/n_average; + dp->a = aa/n_average; + + /* + * Advance destination pointer + */ + dp++; + } + /* dst x loop */ + + /* next box-y */ + sp = (SDL_Color *)((Uint8*)osp + src->pitch*factory); + + /* + * Advance destination pointers + */ + dp = (SDL_Color *) ((Uint8 *) dp + dgap); + } + /* dst y loop */ + + return (0); +} + +/*! +\brief Internal 8 bit integer-factor averaging shrinker. + +Shrinks 8bit Y 'src' surface to 'dst' surface. +Averages color (brightness) values values of src pixels to calculate dst pixels. +Assumes src and dst surfaces are of 8 bit depth. +Assumes dst surface was allocated with the correct dimensions. + +\param src The surface to shrink (input). +\param dst The shrunken surface (output). +\param factorx The horizontal shrinking ratio. +\param factory The vertical shrinking ratio. + +\return 0 for success or -1 for error. +*/ +int _shrinkSurfaceY(SDL_Surface * src, SDL_Surface * dst, int factorx, int factory) +{ + int x, y, dx, dy, dgap, a; + int n_average; + Uint8 *sp, *osp, *oosp; + Uint8 *dp; + + /* + * Averaging integer shrink + */ + + /* Precalculate division factor */ + n_average = factorx*factory; + + /* + * Scan destination + */ + sp = (Uint8 *) src->pixels; + + dp = (Uint8 *) dst->pixels; + dgap = dst->pitch - dst->w; + + for (y = 0; y < dst->h; y++) { + + osp=sp; + for (x = 0; x < dst->w; x++) { + + /* Trace out source box and accumulate */ + oosp=sp; + a=0; + for (dy=0; dy < factory; dy++) { + for (dx=0; dx < factorx; dx++) { + a += (*sp); + /* next x */ + sp++; + } + /* end src dx loop */ + /* next y */ + sp = (Uint8 *)((Uint8*)sp + (src->pitch - factorx)); + } + /* end src dy loop */ + + /* next box-x */ + sp = (Uint8 *)((Uint8*)oosp + factorx); + + /* Store result in destination */ + *dp = a/n_average; + + /* + * Advance destination pointer + */ + dp++; + } + /* end dst x loop */ + + /* next box-y */ + sp = (Uint8 *)((Uint8*)osp + src->pitch*factory); + + /* + * Advance destination pointers + */ + dp = (Uint8 *)((Uint8 *)dp + dgap); + } + /* end dst y loop */ + + return (0); +} + +/*! +\brief Internal 32 bit Zoomer with optional anti-aliasing by bilinear interpolation. + +Zooms 32 bit RGBA/ABGR 'src' surface to 'dst' surface. +Assumes src and dst surfaces are of 32 bit depth. +Assumes dst surface was allocated with the correct dimensions. + +\param src The surface to zoom (input). +\param dst The zoomed surface (output). +\param flipx Flag indicating if the image should be horizontally flipped. +\param flipy Flag indicating if the image should be vertically flipped. +\param smooth Antialiasing flag; set to SMOOTHING_ON to enable. + +\return 0 for success or -1 for error. +*/ +int _zoomSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int flipx, int flipy, int smooth) +{ + int x, y, sx, sy, ssx, ssy, *sax, *say, *csax, *csay, *salast, csx, csy, ex, ey, cx, cy, sstep, sstepx, sstepy; + SDL_Color *c00, *c01, *c10, *c11; + SDL_Color *sp, *csp, *dp; + int spixelgap, spixelw, spixelh, dgap, t1, t2; + + /* + * Allocate memory for row/column increments + */ + if ((sax = (int *) malloc((dst->w + 1) * sizeof(Uint32))) == NULL) { + return (-1); + } + if ((say = (int *) malloc((dst->h + 1) * sizeof(Uint32))) == NULL) { + free(sax); + return (-1); + } + + /* + * Precalculate row increments + */ + spixelw = (src->w - 1); + spixelh = (src->h - 1); + if (smooth) { + sx = (int) (65536.0 * (float) spixelw / (float) (dst->w - 1)); + sy = (int) (65536.0 * (float) spixelh / (float) (dst->h - 1)); + } else { + sx = (int) (65536.0 * (float) (src->w) / (float) (dst->w)); + sy = (int) (65536.0 * (float) (src->h) / (float) (dst->h)); + } + + /* Maximum scaled source size */ + ssx = (src->w << 16) - 1; + ssy = (src->h << 16) - 1; + + /* Precalculate horizontal row increments */ + csx = 0; + csax = sax; + for (x = 0; x <= dst->w; x++) { + *csax = csx; + csax++; + csx += sx; + + /* Guard from overflows */ + if (csx > ssx) { + csx = ssx; + } + } + + /* Precalculate vertical row increments */ + csy = 0; + csay = say; + for (y = 0; y <= dst->h; y++) { + *csay = csy; + csay++; + csy += sy; + + /* Guard from overflows */ + if (csy > ssy) { + csy = ssy; + } + } + + sp = (SDL_Color *) src->pixels; + dp = (SDL_Color *) dst->pixels; + dgap = dst->pitch - dst->w * 4; + spixelgap = src->pitch/4; + + if (flipx) sp += spixelw; + if (flipy) sp += (spixelgap * spixelh); + + /* + * Switch between interpolating and non-interpolating code + */ + if (smooth) { + + /* + * Interpolating Zoom + */ + csay = say; + for (y = 0; y < dst->h; y++) { + csp = sp; + csax = sax; + for (x = 0; x < dst->w; x++) { + /* + * Setup color source pointers + */ + ex = (*csax & 0xffff); + ey = (*csay & 0xffff); + cx = (*csax >> 16); + cy = (*csay >> 16); + sstepx = cx < spixelw; + sstepy = cy < spixelh; + c00 = sp; + c01 = sp; + c10 = sp; + if (sstepy) { + if (flipy) { + c10 -= spixelgap; + } else { + c10 += spixelgap; + } + } + c11 = c10; + if (sstepx) { + if (flipx) { + c01--; + c11--; + } else { + c01++; + c11++; + } + } + + /* + * Draw and interpolate colors + */ + t1 = ((((c01->r - c00->r) * ex) >> 16) + c00->r) & 0xff; + t2 = ((((c11->r - c10->r) * ex) >> 16) + c10->r) & 0xff; + dp->r = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01->g - c00->g) * ex) >> 16) + c00->g) & 0xff; + t2 = ((((c11->g - c10->g) * ex) >> 16) + c10->g) & 0xff; + dp->g = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01->b - c00->b) * ex) >> 16) + c00->b) & 0xff; + t2 = ((((c11->b - c10->b) * ex) >> 16) + c10->b) & 0xff; + dp->b = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01->a - c00->a) * ex) >> 16) + c00->a) & 0xff; + t2 = ((((c11->a - c10->a) * ex) >> 16) + c10->a) & 0xff; + dp->a = (((t2 - t1) * ey) >> 16) + t1; + /* + * Advance source pointer x + */ + salast = csax; + csax++; + sstep = (*csax >> 16) - (*salast >> 16); + if (flipx) { + sp -= sstep; + } else { + sp += sstep; + } + + /* + * Advance destination pointer x + */ + dp++; + } + /* + * Advance source pointer y + */ + salast = csay; + csay++; + sstep = (*csay >> 16) - (*salast >> 16); + sstep *= spixelgap; + if (flipy) { + sp = csp - sstep; + } else { + sp = csp + sstep; + } + + /* + * Advance destination pointer y + */ + dp = (SDL_Color *) ((Uint8 *) dp + dgap); + } + } else { + /* + * Non-Interpolating Zoom + */ + csay = say; + for (y = 0; y < dst->h; y++) { + csp = sp; + csax = sax; + for (x = 0; x < dst->w; x++) { + /* + * Draw + */ + *dp = *sp; + + /* + * Advance source pointer x + */ + salast = csax; + csax++; + sstep = (*csax >> 16) - (*salast >> 16); + if (flipx) sstep = -sstep; + sp += sstep; + + /* + * Advance destination pointer x + */ + dp++; + } + /* + * Advance source pointer y + */ + salast = csay; + csay++; + sstep = (*csay >> 16) - (*salast >> 16); + sstep *= spixelgap; + if (flipy) sstep = -sstep; + sp = csp + sstep; + + /* + * Advance destination pointer y + */ + dp = (SDL_Color *) ((Uint8 *) dp + dgap); + } + } + + /* + * Remove temp arrays + */ + free(sax); + free(say); + + return (0); +} + +/*! + +\brief Internal 8 bit Zoomer without smoothing. + +Zooms 8bit palette/Y 'src' surface to 'dst' surface. +Assumes src and dst surfaces are of 8 bit depth. +Assumes dst surface was allocated with the correct dimensions. + +\param src The surface to zoom (input). +\param dst The zoomed surface (output). +\param flipx Flag indicating if the image should be horizontally flipped. +\param flipy Flag indicating if the image should be vertically flipped. + +\return 0 for success or -1 for error. +*/ +int _zoomSurfaceY(SDL_Surface * src, SDL_Surface * dst, int flipx, int flipy) +{ + int x, y; + Uint32 *sax, *say, *csax, *csay; + int csx, csy; + Uint8 *sp, *dp, *csp; + int dgap; + + /* + * Allocate memory for row increments + */ + if ((sax = (Uint32 *) malloc((dst->w + 1) * sizeof(Uint32))) == NULL) { + return (-1); + } + if ((say = (Uint32 *) malloc((dst->h + 1) * sizeof(Uint32))) == NULL) { + free(sax); + return (-1); + } + + /* + * Pointer setup + */ + sp = csp = (Uint8 *) src->pixels; + dp = (Uint8 *) dst->pixels; + dgap = dst->pitch - dst->w; + + if (flipx) csp += (src->w-1); + if (flipy) csp = ( (Uint8*)csp + src->pitch*(src->h-1) ); + + /* + * Precalculate row increments + */ + csx = 0; + csax = sax; + for (x = 0; x < dst->w; x++) { + csx += src->w; + *csax = 0; + while (csx >= dst->w) { + csx -= dst->w; + (*csax)++; + } + (*csax) = (*csax) * (flipx ? -1 : 1); + csax++; + } + csy = 0; + csay = say; + for (y = 0; y < dst->h; y++) { + csy += src->h; + *csay = 0; + while (csy >= dst->h) { + csy -= dst->h; + (*csay)++; + } + (*csay) = (*csay) * (flipy ? -1 : 1); + csay++; + } + + /* + * Draw + */ + csay = say; + for (y = 0; y < dst->h; y++) { + csax = sax; + sp = csp; + for (x = 0; x < dst->w; x++) { + /* + * Draw + */ + *dp = *sp; + /* + * Advance source pointers + */ + sp += (*csax); + csax++; + /* + * Advance destination pointer + */ + dp++; + } + /* + * Advance source pointer (for row) + */ + csp += ((*csay) * src->pitch); + csay++; + + /* + * Advance destination pointers + */ + dp += dgap; + } + + /* + * Remove temp arrays + */ + free(sax); + free(say); + + return (0); +} + +/*! +\brief Internal 32 bit rotozoomer with optional anti-aliasing. + +Rotates and zooms 32 bit RGBA/ABGR 'src' surface to 'dst' surface based on the control +parameters by scanning the destination surface and applying optionally anti-aliasing +by bilinear interpolation. +Assumes src and dst surfaces are of 32 bit depth. +Assumes dst surface was allocated with the correct dimensions. + +\param src Source surface. +\param dst Destination surface. +\param cx Horizontal center coordinate. +\param cy Vertical center coordinate. +\param isin Integer version of sine of angle. +\param icos Integer version of cosine of angle. +\param flipx Flag indicating horizontal mirroring should be applied. +\param flipy Flag indicating vertical mirroring should be applied. +\param smooth Flag indicating anti-aliasing should be used. +*/ +void _transformSurfaceRGBA(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos, int flipx, int flipy, int smooth) +{ + int x, y, t1, t2, dx, dy, xd, yd, sdx, sdy, ax, ay, ex, ey, sw, sh; + SDL_Color c00, c01, c10, c11, cswap; + SDL_Color *pc, *sp; + int gap; + + /* + * Variable setup + */ + xd = ((src->w - dst->w) << 15); + yd = ((src->h - dst->h) << 15); + ax = (cx << 16) - (icos * cx); + ay = (cy << 16) - (isin * cx); + sw = src->w - 1; + sh = src->h - 1; + pc = (SDL_Color *) dst->pixels; + gap = dst->pitch - dst->w * 4; + + /* + * Switch between interpolating and non-interpolating code + */ + if (smooth) { + for (y = 0; y < dst->h; y++) { + dy = cy - y; + sdx = (ax + (isin * dy)) + xd; + sdy = (ay - (icos * dy)) + yd; + for (x = 0; x < dst->w; x++) { + dx = (sdx >> 16); + dy = (sdy >> 16); + if (flipx) dx = sw - dx; + if (flipy) dy = sh - dy; + if ((dx > -1) && (dy > -1) && (dx < (src->w-1)) && (dy < (src->h-1))) { + sp = (SDL_Color *)src->pixels;; + sp += ((src->pitch/4) * dy); + sp += dx; + c00 = *sp; + sp += 1; + c01 = *sp; + sp += (src->pitch/4); + c11 = *sp; + sp -= 1; + c10 = *sp; + if (flipx) { + cswap = c00; c00=c01; c01=cswap; + cswap = c10; c10=c11; c11=cswap; + } + if (flipy) { + cswap = c00; c00=c10; c10=cswap; + cswap = c01; c01=c11; c11=cswap; + } + /* + * Interpolate colors + */ + ex = (sdx & 0xffff); + ey = (sdy & 0xffff); + t1 = ((((c01.r - c00.r) * ex) >> 16) + c00.r) & 0xff; + t2 = ((((c11.r - c10.r) * ex) >> 16) + c10.r) & 0xff; + pc->r = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01.g - c00.g) * ex) >> 16) + c00.g) & 0xff; + t2 = ((((c11.g - c10.g) * ex) >> 16) + c10.g) & 0xff; + pc->g = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01.b - c00.b) * ex) >> 16) + c00.b) & 0xff; + t2 = ((((c11.b - c10.b) * ex) >> 16) + c10.b) & 0xff; + pc->b = (((t2 - t1) * ey) >> 16) + t1; + t1 = ((((c01.a - c00.a) * ex) >> 16) + c00.a) & 0xff; + t2 = ((((c11.a - c10.a) * ex) >> 16) + c10.a) & 0xff; + pc->a = (((t2 - t1) * ey) >> 16) + t1; + } + sdx += icos; + sdy += isin; + pc++; + } + pc = (SDL_Color *) ((Uint8 *) pc + gap); + } + } else { + for (y = 0; y < dst->h; y++) { + dy = cy - y; + sdx = (ax + (isin * dy)) + xd; + sdy = (ay - (icos * dy)) + yd; + for (x = 0; x < dst->w; x++) { + dx = (short) (sdx >> 16); + dy = (short) (sdy >> 16); + if (flipx) dx = (src->w-1)-dx; + if (flipy) dy = (src->h-1)-dy; + if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) { + sp = (SDL_Color *) ((Uint8 *) src->pixels + src->pitch * dy); + sp += dx; + *pc = *sp; + } + sdx += icos; + sdy += isin; + pc++; + } + pc = (SDL_Color *) ((Uint8 *) pc + gap); + } + } +} + +/*! + +\brief Rotates and zooms 8 bit palette/Y 'src' surface to 'dst' surface without smoothing. + +Rotates and zooms 8 bit RGBA/ABGR 'src' surface to 'dst' surface based on the control +parameters by scanning the destination surface. +Assumes src and dst surfaces are of 8 bit depth. +Assumes dst surface was allocated with the correct dimensions. + +\param src Source surface. +\param dst Destination surface. +\param cx Horizontal center coordinate. +\param cy Vertical center coordinate. +\param isin Integer version of sine of angle. +\param icos Integer version of cosine of angle. +\param flipx Flag indicating horizontal mirroring should be applied. +\param flipy Flag indicating vertical mirroring should be applied. +*/ +void transformSurfaceY(SDL_Surface * src, SDL_Surface * dst, int cx, int cy, int isin, int icos, int flipx, int flipy) +{ + int x, y, dx, dy, xd, yd, sdx, sdy, ax, ay; + Uint8 *pc, *sp; + int gap; + + /* + * Variable setup + */ + xd = ((src->w - dst->w) << 15); + yd = ((src->h - dst->h) << 15); + ax = (cx << 16) - (icos * cx); + ay = (cy << 16) - (isin * cx); + pc = (Uint8 *) dst->pixels; + gap = dst->pitch - dst->w; + /* + * Clear surface to colorkey + */ + memset(pc, (int)(_colorkey(src) & 0xff), dst->pitch * dst->h); + /* + * Iterate through destination surface + */ + for (y = 0; y < dst->h; y++) { + dy = cy - y; + sdx = (ax + (isin * dy)) + xd; + sdy = (ay - (icos * dy)) + yd; + for (x = 0; x < dst->w; x++) { + dx = (short) (sdx >> 16); + dy = (short) (sdy >> 16); + if (flipx) dx = (src->w-1)-dx; + if (flipy) dy = (src->h-1)-dy; + if ((dx >= 0) && (dy >= 0) && (dx < src->w) && (dy < src->h)) { + sp = (Uint8 *) (src->pixels); + sp += (src->pitch * dy + dx); + *pc = *sp; + } + sdx += icos; + sdy += isin; + pc++; + } + pc += gap; + } +} + +/*! +\brief Rotates a 8/16/24/32 bit surface in increments of 90 degrees. + +Specialized 90 degree rotator which rotates a 'src' surface in 90 degree +increments clockwise returning a new surface. Faster than rotozoomer since +no scanning or interpolation takes place. Input surface must be 8/16/24/32 bit. +(code contributed by J. Schiller, improved by C. Allport and A. Schiffler) + +\param src Source surface to rotate. +\param numClockwiseTurns Number of clockwise 90 degree turns to apply to the source. + +\returns The new, rotated surface; or NULL for surfaces with incorrect input format. +*/ +SDL_Surface* rotateSurface90Degrees(SDL_Surface* src, int numClockwiseTurns) +{ + int row, col, newWidth, newHeight; + int bpp, bpr; + SDL_Surface* dst; + Uint8* srcBuf; + Uint8* dstBuf; + int normalizedClockwiseTurns; + const SDL_PixelFormatDetails* details; + + /* Has to be a valid surface pointer and be a Nbit surface where n is divisible by 8 */ + if (!src || + !src->format) { + SDL_SetError("NULL source surface or source surface format"); + return NULL; + } + + details = SDL_GetPixelFormatDetails(src->format); + if ((details->bits_per_pixel % 8) != 0) { + SDL_SetError("Invalid source surface bit depth"); + return NULL; + } + + /* normalize numClockwiseTurns */ + normalizedClockwiseTurns = (numClockwiseTurns % 4); + if (normalizedClockwiseTurns < 0) { + normalizedClockwiseTurns += 4; + } + + /* If turns are even, our new width/height will be the same as the source surface */ + if (normalizedClockwiseTurns % 2) { + newWidth = src->h; + newHeight = src->w; + } else { + newWidth = src->w; + newHeight = src->h; + } + + dst = SDL_CreateSurface(newWidth, newHeight, src->format); + if(!dst) { + SDL_SetError("Could not create destination surface"); + return NULL; + } + + if (SDL_MUSTLOCK(src)) { + SDL_LockSurface(src); + } + if (SDL_MUSTLOCK(dst)) { + SDL_LockSurface(dst); + } + + /* Calculate byte-per-pixel */ + bpp = details->bits_per_pixel / 8; + + switch(normalizedClockwiseTurns) { + case 0: /* Make a copy of the surface */ + { + /* Unfortunately SDL_BlitSurface cannot be used to make a copy of the surface + since it does not preserve alpha. */ + + if (src->pitch == dst->pitch) { + /* If the pitch is the same for both surfaces, the memory can be copied all at once. */ + memcpy(dst->pixels, src->pixels, (src->h * src->pitch)); + } + else + { + /* If the pitch differs, copy each row separately */ + srcBuf = (Uint8*)(src->pixels); + dstBuf = (Uint8*)(dst->pixels); + bpr = src->w * bpp; + for (row = 0; row < src->h; row++) { + memcpy(dstBuf, srcBuf, bpr); + srcBuf += src->pitch; + dstBuf += dst->pitch; + } + } + } + break; + + /* rotate clockwise */ + case 1: /* rotated 90 degrees clockwise */ + { + for (row = 0; row < src->h; ++row) { + srcBuf = (Uint8*)(src->pixels) + (row * src->pitch); + dstBuf = (Uint8*)(dst->pixels) + (dst->w - row - 1) * bpp; + for (col = 0; col < src->w; ++col) { + memcpy (dstBuf, srcBuf, bpp); + srcBuf += bpp; + dstBuf += dst->pitch; + } + } + } + break; + + case 2: /* rotated 180 degrees clockwise */ + { + for (row = 0; row < src->h; ++row) { + srcBuf = (Uint8*)(src->pixels) + (row * src->pitch); + dstBuf = (Uint8*)(dst->pixels) + ((dst->h - row - 1) * dst->pitch) + (dst->w - 1) * bpp; + for (col = 0; col < src->w; ++col) { + memcpy (dstBuf, srcBuf, bpp); + srcBuf += bpp; + dstBuf -= bpp; + } + } + } + break; + + case 3: /* rotated 270 degrees clockwise */ + { + for (row = 0; row < src->h; ++row) { + srcBuf = (Uint8*)(src->pixels) + (row * src->pitch); + dstBuf = (Uint8*)(dst->pixels) + (row * bpp) + ((dst->h - 1) * dst->pitch); + for (col = 0; col < src->w; ++col) { + memcpy (dstBuf, srcBuf, bpp); + srcBuf += bpp; + dstBuf -= dst->pitch; + } + } + } + break; + } + /* end switch */ + + if (SDL_MUSTLOCK(src)) { + SDL_UnlockSurface(src); + } + if (SDL_MUSTLOCK(dst)) { + SDL_UnlockSurface(dst); + } + + return dst; +} + + +/*! +\brief Internal target surface sizing function for rotozooms with trig result return. + +\param width The source surface width. +\param height The source surface height. +\param angle The angle to rotate in degrees. +\param zoomx The horizontal scaling factor. +\param zoomy The vertical scaling factor. +\param dstwidth The calculated width of the destination surface. +\param dstheight The calculated height of the destination surface. +\param canglezoom The sine of the angle adjusted by the zoom factor. +\param sanglezoom The cosine of the angle adjusted by the zoom factor. + +*/ +void _rotozoomSurfaceSizeTrig(int width, int height, double angle, double zoomx, double zoomy, + int *dstwidth, int *dstheight, + double *canglezoom, double *sanglezoom) +{ + double x, y, cx, cy, sx, sy; + double radangle; + int dstwidthhalf, dstheighthalf; + + /* + * Determine destination width and height by rotating a centered source box + */ + radangle = angle * (M_PI / 180.0); + *sanglezoom = sin(radangle); + *canglezoom = cos(radangle); + *sanglezoom *= zoomx; + *canglezoom *= zoomy; + x = (double)(width / 2); + y = (double)(height / 2); + cx = *canglezoom * x; + cy = *canglezoom * y; + sx = *sanglezoom * x; + sy = *sanglezoom * y; + + dstwidthhalf = MAX((int) + ceil(MAX(MAX(MAX(fabs(cx + sy), fabs(cx - sy)), fabs(-cx + sy)), fabs(-cx - sy))), 1); + dstheighthalf = MAX((int) + ceil(MAX(MAX(MAX(fabs(sx + cy), fabs(sx - cy)), fabs(-sx + cy)), fabs(-sx - cy))), 1); + *dstwidth = 2 * dstwidthhalf; + *dstheight = 2 * dstheighthalf; +} + +/*! +\brief Returns the size of the resulting target surface for a rotozoomSurfaceXY() call. + +\param width The source surface width. +\param height The source surface height. +\param angle The angle to rotate in degrees. +\param zoomx The horizontal scaling factor. +\param zoomy The vertical scaling factor. +\param dstwidth The calculated width of the rotozoomed destination surface. +\param dstheight The calculated height of the rotozoomed destination surface. +*/ +void rotozoomSurfaceSizeXY(int width, int height, double angle, double zoomx, double zoomy, int *dstwidth, int *dstheight) +{ + double dummy_sanglezoom, dummy_canglezoom; + + _rotozoomSurfaceSizeTrig(width, height, angle, zoomx, zoomy, dstwidth, dstheight, &dummy_sanglezoom, &dummy_canglezoom); +} + +/*! +\brief Returns the size of the resulting target surface for a rotozoomSurface() call. + +\param width The source surface width. +\param height The source surface height. +\param angle The angle to rotate in degrees. +\param zoom The scaling factor. +\param dstwidth The calculated width of the rotozoomed destination surface. +\param dstheight The calculated height of the rotozoomed destination surface. +*/ +void rotozoomSurfaceSize(int width, int height, double angle, double zoom, int *dstwidth, int *dstheight) +{ + double dummy_sanglezoom, dummy_canglezoom; + + _rotozoomSurfaceSizeTrig(width, height, angle, zoom, zoom, dstwidth, dstheight, &dummy_sanglezoom, &dummy_canglezoom); +} + +/*! +\brief Rotates and zooms a surface and optional anti-aliasing. + +Rotates and zoomes a 32bit or 8bit 'src' surface to newly created 'dst' surface. +'angle' is the rotation in degrees and 'zoom' a scaling factor. If 'smooth' is set +then the destination 32bit surface is anti-aliased. If the surface is not 8bit +or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. + +\param src The surface to rotozoom. +\param angle The angle to rotate in degrees. +\param zoom The scaling factor. +\param smooth Antialiasing flag; set to SMOOTHING_ON to enable. + +\return The new rotozoomed surface. +*/ +SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoom, int smooth) +{ + return rotozoomSurfaceXY(src, angle, zoom, zoom, smooth); +} + +/*! +\brief Rotates and zooms a surface with different horizontal and vertival scaling factors and optional anti-aliasing. + +Rotates and zooms a 32bit or 8bit 'src' surface to newly created 'dst' surface. +'angle' is the rotation in degrees, 'zoomx and 'zoomy' scaling factors. If 'smooth' is set +then the destination 32bit surface is anti-aliased. If the surface is not 8bit +or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. + +\param src The surface to rotozoom. +\param angle The angle to rotate in degrees. +\param zoomx The horizontal scaling factor. +\param zoomy The vertical scaling factor. +\param smooth Antialiasing flag; set to SMOOTHING_ON to enable. + +\return The new rotozoomed surface. +*/ +SDL_Surface *rotozoomSurfaceXY(SDL_Surface * src, double angle, double zoomx, double zoomy, int smooth) +{ + SDL_Surface *rz_src; + SDL_Surface *rz_dst; + double zoominv; + double sanglezoom, canglezoom, sanglezoominv, canglezoominv; + int dstwidthhalf, dstwidth, dstheighthalf, dstheight; + int is32bit; + int i, src_converted; + int flipx,flipy; + const SDL_PixelFormatDetails* details; + SDL_Palette* pal_dst; + SDL_Palette* pal_src; + + /* + * Sanity check + */ + if (src == NULL) { + return (NULL); + } + + /* + * Determine if source surface is 32bit or 8bit + */ + details = SDL_GetPixelFormatDetails(src->format); + is32bit = (details->bits_per_pixel == 32); + if ((is32bit) || (details->bits_per_pixel == 8)) { + /* + * Use source surface 'as is' + */ + rz_src = src; + src_converted = 0; + } else { + /* + * New source surface is 32bit with a defined RGBA ordering + */ + rz_src = + SDL_CreateSurface(src->w, src->h, SDL_PIXELFORMAT_RGBA32); + + SDL_BlitSurface(src, NULL, rz_src, NULL); + + src_converted = 1; + is32bit = 1; + } + + /* + * Sanity check zoom factor + */ + flipx = (zoomx<0.0); + if (flipx) zoomx=-zoomx; + flipy = (zoomy<0.0); + if (flipy) zoomy=-zoomy; + if (zoomx < VALUE_LIMIT) zoomx = VALUE_LIMIT; + if (zoomy < VALUE_LIMIT) zoomy = VALUE_LIMIT; + zoominv = 65536.0 / (zoomx * zoomx); + + /* + * Check if we have a rotozoom or just a zoom + */ + if (fabs(angle) > VALUE_LIMIT) { + + /* + * Angle!=0: full rotozoom + */ + /* + * ----------------------- + */ + + /* Determine target size */ + _rotozoomSurfaceSizeTrig(rz_src->w, rz_src->h, angle, zoomx, zoomy, &dstwidth, &dstheight, &canglezoom, &sanglezoom); + + /* + * Calculate target factors from sin/cos and zoom + */ + sanglezoominv = sanglezoom; + canglezoominv = canglezoom; + sanglezoominv *= zoominv; + canglezoominv *= zoominv; + + /* Calculate half size */ + dstwidthhalf = dstwidth / 2; + dstheighthalf = dstheight / 2; + + /* + * Alloc space to completely contain the rotated surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, rz_src->format); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, SDL_PIXELFORMAT_INDEX8); + pal_dst = SDL_CreateSurfacePalette(rz_dst); + } + + /* Check target */ + if (rz_dst == NULL) + return NULL; + + /* Adjust for guard rows */ + rz_dst->h = dstheight; + + /* + * Lock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_LockSurface(rz_src); + } + + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the rotation (using alpha) + */ + _transformSurfaceRGBA(rz_src, rz_dst, dstwidthhalf, dstheighthalf, + (int) (sanglezoominv), (int) (canglezoominv), + flipx, flipy, + smooth); + } else { + /* + * Copy palette and colorkey info + */ + pal_src = SDL_GetSurfacePalette(rz_src); + for (i = 0; i < pal_src->ncolors; i++) { + pal_dst->colors[i] = pal_src->colors[i]; + } + pal_dst->ncolors = pal_src->ncolors; + /* + * Call the 8bit transformation routine to do the rotation + */ + transformSurfaceY(rz_src, rz_dst, dstwidthhalf, dstheighthalf, + (int) (sanglezoominv), (int) (canglezoominv), + flipx, flipy); + } + /* + * Unlock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_UnlockSurface(rz_src); + } + + } else { + + /* + * Angle=0: Just a zoom + */ + /* + * -------------------- + */ + + /* + * Calculate target size + */ + zoomSurfaceSize(rz_src->w, rz_src->h, zoomx, zoomy, &dstwidth, &dstheight); + + /* + * Alloc space to completely contain the zoomed surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, rz_src->format); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, SDL_PIXELFORMAT_INDEX8); + pal_dst = SDL_CreateSurfacePalette(rz_dst); + } + + /* Check target */ + if (rz_dst == NULL) + return NULL; + + /* Adjust for guard rows */ + rz_dst->h = dstheight; + + /* + * Lock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_LockSurface(rz_src); + } + + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the zooming (using alpha) + */ + _zoomSurfaceRGBA(rz_src, rz_dst, flipx, flipy, smooth); + + } else { + /* + * Copy palette and colorkey info + */ + pal_src = SDL_GetSurfacePalette(rz_src); + for (i = 0; i < pal_src->ncolors; i++) { + pal_dst->colors[i] = pal_src->colors[i]; + } + pal_dst->ncolors = pal_src->ncolors; + + /* + * Call the 8bit transformation routine to do the zooming + */ + _zoomSurfaceY(rz_src, rz_dst, flipx, flipy); + } + + /* + * Unlock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_UnlockSurface(rz_src); + } + } + + /* + * Cleanup temp surface + */ + if (src_converted) { + SDL_DestroySurface(rz_src); + } + + /* + * Return destination surface + */ + return (rz_dst); +} + +/*! +\brief Calculates the size of the target surface for a zoomSurface() call. + +The minimum size of the target surface is 1. The input factors can be positive or negative. + +\param width The width of the source surface to zoom. +\param height The height of the source surface to zoom. +\param zoomx The horizontal zoom factor. +\param zoomy The vertical zoom factor. +\param dstwidth Pointer to an integer to store the calculated width of the zoomed target surface. +\param dstheight Pointer to an integer to store the calculated height of the zoomed target surface. +*/ +void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight) +{ + /* + * Make zoom factors positive + */ + int flipx, flipy; + flipx = (zoomx<0.0); + if (flipx) zoomx = -zoomx; + flipy = (zoomy<0.0); + if (flipy) zoomy = -zoomy; + + /* + * Sanity check zoom factors + */ + if (zoomx < VALUE_LIMIT) { + zoomx = VALUE_LIMIT; + } + if (zoomy < VALUE_LIMIT) { + zoomy = VALUE_LIMIT; + } + + /* + * Calculate target size + */ + *dstwidth = (int) floor(((double) width * zoomx) + 0.5); + *dstheight = (int) floor(((double) height * zoomy) + 0.5); + if (*dstwidth < 1) { + *dstwidth = 1; + } + if (*dstheight < 1) { + *dstheight = 1; + } +} + +/*! +\brief Zoom a surface by independent horizontal and vertical factors with optional smoothing. + +Zooms a 32bit or 8bit 'src' surface to newly created 'dst' surface. +'zoomx' and 'zoomy' are scaling factors for width and height. If 'smooth' is on +then the destination 32bit surface is anti-aliased. If the surface is not 8bit +or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. +If zoom factors are negative, the image is flipped on the axes. + +\param src The surface to zoom. +\param zoomx The horizontal zoom factor. +\param zoomy The vertical zoom factor. +\param smooth Antialiasing flag; set to SMOOTHING_ON to enable. + +\return The new, zoomed surface. +*/ +SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, int smooth) +{ + SDL_Surface *rz_src; + SDL_Surface *rz_dst; + int dstwidth, dstheight; + int is32bit; + int i, src_converted; + int flipx, flipy; + const SDL_PixelFormatDetails* details; + SDL_Palette* pal_src; + SDL_Palette* pal_dst; + + /* + * Sanity check + */ + if (src == NULL) + return (NULL); + + /* + * Determine if source surface is 32bit or 8bit + */ + details = SDL_GetPixelFormatDetails(src->format); + is32bit = (details->bits_per_pixel == 32); + if ((is32bit) || (details->bits_per_pixel == 8)) { + /* + * Use source surface 'as is' + */ + rz_src = src; + src_converted = 0; + } else { + /* + * New source surface is 32bit with a defined RGBA ordering + */ + rz_src = + SDL_CreateSurface(src->w, src->h, SDL_PIXELFORMAT_RGBA32); + if (rz_src == NULL) { + return NULL; + } + SDL_BlitSurface(src, NULL, rz_src, NULL); + src_converted = 1; + is32bit = 1; + } + + flipx = (zoomx<0.0); + if (flipx) zoomx = -zoomx; + flipy = (zoomy<0.0); + if (flipy) zoomy = -zoomy; + + /* Get size if target */ + zoomSurfaceSize(rz_src->w, rz_src->h, zoomx, zoomy, &dstwidth, &dstheight); + + /* + * Alloc space to completely contain the zoomed surface + */ + rz_dst = NULL; + if (is32bit) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, rz_src->format); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, SDL_PIXELFORMAT_INDEX8); + pal_dst = SDL_CreateSurfacePalette(rz_dst); + } + + /* Check target */ + if (rz_dst == NULL) { + /* + * Cleanup temp surface + */ + if (src_converted) { + SDL_DestroySurface(rz_src); + } + return NULL; + } + + /* Adjust for guard rows */ + rz_dst->h = dstheight; + + /* + * Lock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_LockSurface(rz_src); + } + + /* + * Check which kind of surface we have + */ + if (is32bit) { + /* + * Call the 32bit transformation routine to do the zooming (using alpha) + */ + _zoomSurfaceRGBA(rz_src, rz_dst, flipx, flipy, smooth); + } else { + /* + * Copy palette and colorkey info + */ + pal_src = SDL_GetSurfacePalette(rz_src); + for (i = 0; i < pal_src->ncolors; i++) { + pal_dst->colors[i] = pal_src->colors[i]; + } + pal_dst->ncolors = pal_src->ncolors; + /* + * Call the 8bit transformation routine to do the zooming + */ + _zoomSurfaceY(rz_src, rz_dst, flipx, flipy); + } + /* + * Unlock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_UnlockSurface(rz_src); + } + + /* + * Cleanup temp surface + */ + if (src_converted) { + SDL_DestroySurface(rz_src); + } + + /* + * Return destination surface + */ + return (rz_dst); +} + +/*! +\brief Shrink a surface by an integer ratio using averaging. + +Shrinks a 32bit or 8bit 'src' surface to a newly created 'dst' surface. +'factorx' and 'factory' are the shrinking ratios (i.e. 2=1/2 the size, +3=1/3 the size, etc.) The destination surface is antialiased by averaging +the source box RGBA or Y information. If the surface is not 8bit +or 32bit RGBA/ABGR it will be converted into a 32bit RGBA format on the fly. +The input surface is not modified. The output surface is newly allocated. + +\param src The surface to shrink. +\param factorx The horizontal shrinking ratio. +\param factory The vertical shrinking ratio. + +\return The new, shrunken surface. +*/ +/*@null@*/ +SDL_Surface *shrinkSurface(SDL_Surface *src, int factorx, int factory) +{ + int result; + SDL_Surface *rz_src; + SDL_Surface *rz_dst = NULL; + int dstwidth, dstheight; + int is32bit; + int i, src_converted; + int haveError = 0; + const SDL_PixelFormatDetails* details; + SDL_Palette* pal_src; + SDL_Palette* pal_dst; + + /* + * Sanity check + */ + if (src == NULL) { + return (NULL); + } + + /* + * Determine if source surface is 32bit or 8bit + */ + details = SDL_GetPixelFormatDetails(src->format); + is32bit = (details->bits_per_pixel == 32); + if ((is32bit) || (details->bits_per_pixel == 8)) { + /* + * Use source surface 'as is' + */ + rz_src = src; + src_converted = 0; + } else { + /* + * New source surface is 32bit with a defined RGBA ordering + */ + rz_src = SDL_CreateSurface(src->w, src->h, SDL_PIXELFORMAT_RGBA32); + if (rz_src==NULL) { + haveError = 1; + goto exitShrinkSurface; + } + + SDL_BlitSurface(src, NULL, rz_src, NULL); + src_converted = 1; + is32bit = 1; + } + + /* + * Lock the surface + */ + if (SDL_MUSTLOCK(rz_src)) { + if (!SDL_LockSurface(rz_src)) { + haveError = 1; + goto exitShrinkSurface; + } + } + + /* Get size for target */ + dstwidth=rz_src->w/factorx; + while (dstwidth*factorx>rz_src->w) { dstwidth--; } + dstheight=rz_src->h/factory; + while (dstheight*factory>rz_src->h) { dstheight--; } + + /* + * Alloc space to completely contain the shrunken surface + * (with added guard rows) + */ + if (is32bit==1) { + /* + * Target surface is 32bit with source RGBA/ABGR ordering + */ + rz_dst = + SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, rz_src->format); + } else { + /* + * Target surface is 8bit + */ + rz_dst = SDL_CreateSurface(dstwidth, dstheight + GUARD_ROWS, SDL_PIXELFORMAT_INDEX8); + pal_dst = SDL_CreateSurfacePalette(rz_dst); + } + + /* Check target */ + if (rz_dst == NULL) { + haveError = 1; + goto exitShrinkSurface; + } + + /* Adjust for guard rows */ + rz_dst->h = dstheight; + + /* + * Check which kind of surface we have + */ + if (is32bit==1) { + /* + * Call the 32bit transformation routine to do the shrinking (using alpha) + */ + result = _shrinkSurfaceRGBA(rz_src, rz_dst, factorx, factory); + if ((result!=0) || (rz_dst==NULL)) { + haveError = 1; + goto exitShrinkSurface; + } + } else { + /* + * Copy palette and colorkey info + */ + pal_src = SDL_GetSurfacePalette(rz_src); + for (i = 0; i < pal_src->ncolors; i++) { + pal_dst->colors[i] = pal_src->colors[i]; + } + pal_dst->ncolors = pal_src->ncolors; + /* + * Call the 8bit transformation routine to do the shrinking + */ + result = _shrinkSurfaceY(rz_src, rz_dst, factorx, factory); + if (result!=0) { + haveError = 1; + goto exitShrinkSurface; + } + } + +exitShrinkSurface: + if (rz_src!=NULL) { + /* + * Unlock source surface + */ + if (SDL_MUSTLOCK(rz_src)) { + SDL_UnlockSurface(rz_src); + } + + /* + * Cleanup temp surface + */ + if (src_converted==1) { + SDL_DestroySurface(rz_src); + } + } + + /* Check error state; maybe need to cleanup destination */ + if (haveError==1) { + if (rz_dst!=NULL) { + SDL_DestroySurface(rz_dst); + } + rz_dst=NULL; + } + + /* + * Return destination surface + */ + return (rz_dst); +} diff --git a/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.h b/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.h new file mode 100644 index 0000000..015e119 --- /dev/null +++ b/src/ogfx/vendor/sdl3_gfx/SDL3_rotozoom.h @@ -0,0 +1,123 @@ +/* + +SDL3_rotozoom.c: rotozoomer, zoomer and shrinker for 32bit or 8bit surfaces + +Copyright (C) 2012-2014 Andreas Schiffler + +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. + +Andreas Schiffler -- aschiffler at ferzkopp dot net + +*/ + +#ifndef _SDL3_rotozoom_h +#define _SDL3_rotozoom_h + +#include + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef M_PI +#define M_PI 3.1415926535897932384626433832795 +#endif + +#include + + /* ---- Defines */ + + /*! + \brief Disable anti-aliasing (no smoothing). + */ +#define SMOOTHING_OFF 0 + + /*! + \brief Enable anti-aliasing (smoothing). + */ +#define SMOOTHING_ON 1 + + /* ---- Function Prototypes */ + +#ifdef _MSC_VER +# if defined(DLL_EXPORT) && !defined(LIBSDL3_GFX_DLL_IMPORT) +# define SDL3_ROTOZOOM_SCOPE __declspec(dllexport) +# else +# ifdef LIBSDL3_GFX_DLL_IMPORT +# define SDL3_ROTOZOOM_SCOPE __declspec(dllimport) +# endif +# endif +#endif +#ifndef SDL3_ROTOZOOM_SCOPE +# define SDL3_ROTOZOOM_SCOPE extern +#endif + + /* + + Rotozoom functions + + */ + + SDL3_ROTOZOOM_SCOPE SDL_Surface *rotozoomSurface(SDL_Surface * src, double angle, double zoom, int smooth); + + SDL3_ROTOZOOM_SCOPE SDL_Surface *rotozoomSurfaceXY + (SDL_Surface * src, double angle, double zoomx, double zoomy, int smooth); + + + SDL3_ROTOZOOM_SCOPE void rotozoomSurfaceSize(int width, int height, double angle, double zoom, int *dstwidth, + int *dstheight); + + SDL3_ROTOZOOM_SCOPE void rotozoomSurfaceSizeXY + (int width, int height, double angle, double zoomx, double zoomy, + int *dstwidth, int *dstheight); + + /* + + Zooming functions + + */ + + SDL3_ROTOZOOM_SCOPE SDL_Surface *zoomSurface(SDL_Surface * src, double zoomx, double zoomy, int smooth); + + SDL3_ROTOZOOM_SCOPE void zoomSurfaceSize(int width, int height, double zoomx, double zoomy, int *dstwidth, int *dstheight); + + /* + + Shrinking functions + + */ + + SDL3_ROTOZOOM_SCOPE SDL_Surface *shrinkSurface(SDL_Surface * src, int factorx, int factory); + + /* + + Specialized rotation functions + + */ + + SDL3_ROTOZOOM_SCOPE SDL_Surface* rotateSurface90Degrees(SDL_Surface* src, int numClockwiseTurns); + + /* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#endif /* _SDL3_rotozoom_h */ diff --git a/src/ostd/data/Bitfields.hpp b/src/ostd/data/Bitfields.hpp index f95443b..d7eb3b9 100755 --- a/src/ostd/data/Bitfields.hpp +++ b/src/ostd/data/Bitfields.hpp @@ -21,6 +21,7 @@ #pragma once #include +#include #define get_bit(__bit_field, __bit_n ) __bit_field.bits.b##__bit_n #define set_bit(__bit_field, __bit_n ) __bit_field.bits.b##__bit_n = true diff --git a/src/ostd/data/Color.hpp b/src/ostd/data/Color.hpp index 218f767..a9c591e 100755 --- a/src/ostd/data/Color.hpp +++ b/src/ostd/data/Color.hpp @@ -78,5 +78,62 @@ namespace ostd uint8_t g; uint8_t b; uint8_t a; + + public: + }; + struct Colors + { + inline static const Color Transparent { 0, 0, 0, 0 }; + inline static const Color Black { 0, 0, 0, 255 }; + inline static const Color White { 255, 255, 255, 255 }; + inline static const Color Gray { 128, 128, 128, 255 }; + inline static const Color LightGray { 192, 192, 192, 255 }; + inline static const Color DarkGray { 64, 64, 64, 255 }; + + inline static const Color Red { 255, 0, 0, 255 }; + inline static const Color Green { 0, 255, 0, 255 }; + inline static const Color Blue { 0, 0, 255, 255 }; + + inline static const Color Yellow { 255, 255, 0, 255 }; + inline static const Color Cyan { 0, 255, 255, 255 }; + inline static const Color Magenta { 255, 0, 255, 255 }; + + inline static const Color Orange { 255, 165, 0, 255 }; + inline static const Color Purple { 128, 0, 128, 255 }; + inline static const Color Brown { 139, 69, 19, 255 }; + inline static const Color Pink { 255, 192, 203, 255 }; + inline static const Color Lime { 50, 205, 50, 255 }; + inline static const Color Olive { 128, 128, 0, 255 }; + inline static const Color Teal { 0, 128, 128, 255 }; + inline static const Color Navy { 0, 0, 128, 255 }; + inline static const Color Maroon { 128, 0, 0, 255 }; + inline static const Color Indigo { 75, 0, 130, 255 }; + inline static const Color Gold { 255, 215, 0, 255 }; + inline static const Color Silver { 192, 192, 192, 255 }; + inline static const Color Beige { 245, 245, 220, 255 }; + inline static const Color Coral { 255, 127, 80, 255 }; + inline static const Color Salmon { 250, 128, 114, 255 }; + inline static const Color Chocolate { 210, 105, 30, 255 }; + inline static const Color Khaki { 240, 230, 140, 255 }; + inline static const Color Lavender { 230, 230, 250, 255 }; + inline static const Color Mint { 189, 252, 201, 255 }; + inline static const Color SkyBlue { 135, 206, 235, 255 }; + inline static const Color RoyalBlue { 65, 105, 225, 255 }; + inline static const Color DeepSkyBlue { 0, 191, 255, 255 }; + inline static const Color Turquoise { 64, 224, 208, 255 }; + inline static const Color Aquamarine { 127, 255, 212, 255 }; + inline static const Color ForestGreen { 34, 139, 34, 255 }; + inline static const Color SeaGreen { 46, 139, 87, 255 }; + inline static const Color SpringGreen { 0, 255, 127, 255 }; + inline static const Color Firebrick { 178, 34, 34, 255 }; + inline static const Color Crimson { 220, 20, 60, 255 }; + inline static const Color Tomato { 255, 99, 71, 255 }; + inline static const Color DarkOrange { 255, 140, 0, 255 }; + inline static const Color DarkRed { 139, 0, 0, 255 }; + inline static const Color DarkBlue { 0, 0, 139, 255 }; + inline static const Color DarkGreen { 0, 100, 0, 255 }; + inline static const Color DarkCyan { 0, 139, 139, 255 }; + inline static const Color DarkMagenta { 139, 0, 139, 255 }; + inline static const Color DarkYellow { 204, 204, 0, 255 }; }; } diff --git a/src/ostd/data/Types.hpp b/src/ostd/data/Types.hpp index 4f60619..589878c 100755 --- a/src/ostd/data/Types.hpp +++ b/src/ostd/data/Types.hpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace ostd { diff --git a/src/ostd/io/IOHandlers.hpp b/src/ostd/io/IOHandlers.hpp index f1cd8ad..110cb25 100644 --- a/src/ostd/io/IOHandlers.hpp +++ b/src/ostd/io/IOHandlers.hpp @@ -27,7 +27,7 @@ namespace ogfx { - class WindowBase; + class WindowCore; class BasicRenderer2D; }; diff --git a/src/ostd/math/Geometry.hpp b/src/ostd/math/Geometry.hpp index 7e15383..09740ea 100755 --- a/src/ostd/math/Geometry.hpp +++ b/src/ostd/math/Geometry.hpp @@ -345,6 +345,11 @@ namespace ostd inline virtual Vec2 bottomLeft(void) const { return Vec2(getx(), gety() + geth()); } inline virtual Vec2 bottomRight(void) const { return Vec2(getx() + getw(), gety() + geth()); } + inline virtual float left(void) const { return getx(); } + inline virtual float right(void) const { return getw(); } + inline virtual float top(void) const { return gety(); } + inline virtual float bottom(void) const { return geth(); } + inline virtual bool intersects(Rectangle rect, bool includeBounds = true) const { if (includeBounds) @@ -376,9 +381,9 @@ namespace ostd inline virtual bool contains(Vec2 p, bool includeBounds = false) const { if (includeBounds) - return p.x >= x && p.y >= y & p.x <= x + w && p.y <= y + h; + return p.x >= x && p.y >= y && p.x <= x + w && p.y <= y + h; else - return p.x > x && p.y > y & p.x < x + w && p.y < y + h; + return p.x > x && p.y > y && p.x < x + w && p.y < y + h; } inline virtual bool contains(float xx, float yy, bool includeBounds = false) const { return contains({ xx, yy }); } diff --git a/src/ostd/ostd.hpp b/src/ostd/ostd.hpp index 345fe5c..7a2bad2 100644 --- a/src/ostd/ostd.hpp +++ b/src/ostd/ostd.hpp @@ -45,3 +45,11 @@ #include #include + +namespace ostd +{ + inline void initialize(void) + { + ostd::SignalHandler::init(true); + } +} diff --git a/src/ostd/utils/Async.hpp b/src/ostd/utils/Async.hpp index 007bf23..924ac10 100644 --- a/src/ostd/utils/Async.hpp +++ b/src/ostd/utils/Async.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace ostd { diff --git a/src/ostd/utils/PathFinder.hpp b/src/ostd/utils/PathFinder.hpp index bd5305a..b629b4c 100755 --- a/src/ostd/utils/PathFinder.hpp +++ b/src/ostd/utils/PathFinder.hpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace ostd { diff --git a/src/ostd/utils/Signals.cpp b/src/ostd/utils/Signals.cpp index c2ef328..76a679c 100755 --- a/src/ostd/utils/Signals.cpp +++ b/src/ostd/utils/Signals.cpp @@ -27,10 +27,16 @@ namespace ostd SignalHandler::m_windowResizedRecievers.reserve(SignalHandler::__SIGNAL_BUFFER_START_SIZE); SignalHandler::m_windowClosedRecievers.clear(); SignalHandler::m_windowClosedRecievers.reserve(SignalHandler::__SIGNAL_BUFFER_START_SIZE); + SignalHandler::m_windowFocusedRecievers.clear(); + SignalHandler::m_windowFocusedRecievers.reserve(SignalHandler::__SIGNAL_BUFFER_START_SIZE); + SignalHandler::m_windowLostFocusRecievers.clear(); + SignalHandler::m_windowLostFocusRecievers.reserve(SignalHandler::__SIGNAL_BUFFER_START_SIZE); SignalHandler::m_delegatedSignals.clear(); SignalHandler::m_delegatedSignals.reserve(SignalHandler::__DELEGATED_SIGNALS_BUFFER_START_SIZE); SignalHandler::m_onGuiEventRecievers.clear(); SignalHandler::m_onGuiEventRecievers.reserve(SignalHandler::__SIGNAL_BUFFER_START_SIZE); + SignalHandler::m_beforeSDLShutdownRecievers.clear(); + SignalHandler::m_beforeSDLShutdownRecievers.reserve(SignalHandler::__SIGNAL_BUFFER_START_SIZE); m_initialized = true; } @@ -69,8 +75,14 @@ namespace ostd sig_list = &m_windowResizedRecievers; else if (signal_id == tBuiltinSignals::WindowClosed) sig_list = &m_windowClosedRecievers; + else if (signal_id == tBuiltinSignals::WindowLostFocus) + sig_list = &m_windowLostFocusRecievers; + else if (signal_id == tBuiltinSignals::WindowFocused) + sig_list = &m_windowFocusedRecievers; else if (signal_id == tBuiltinSignals::OnGuiEvent) sig_list = &m_onGuiEventRecievers; + else if (signal_id == tBuiltinSignals::BeforeSDLShutdown) + sig_list = &m_beforeSDLShutdownRecievers; else if (signal_id > tBuiltinSignals::CustomSignalBase) sig_list = &m_customRecievers; if (sig_list == nullptr) @@ -108,8 +120,14 @@ namespace ostd m_windowResizedRecievers.push_back({ &object, signal_id }); else if (signal_id == tBuiltinSignals::WindowClosed) m_windowClosedRecievers.push_back({ &object, signal_id }); + else if (signal_id == tBuiltinSignals::WindowLostFocus) + m_windowLostFocusRecievers.push_back({ &object, signal_id }); + else if (signal_id == tBuiltinSignals::WindowFocused) + m_windowFocusedRecievers.push_back({ &object, signal_id }); else if (signal_id == tBuiltinSignals::OnGuiEvent) m_onGuiEventRecievers.push_back({ &object, signal_id }); + else if (signal_id == tBuiltinSignals::BeforeSDLShutdown) + m_beforeSDLShutdownRecievers.push_back({ &object, signal_id }); else if (signal_id > tBuiltinSignals::CustomSignalBase) m_customRecievers.push_back({ &object, signal_id }); else diff --git a/src/ostd/utils/Signals.hpp b/src/ostd/utils/Signals.hpp index 575843e..2b37b0f 100755 --- a/src/ostd/utils/Signals.hpp +++ b/src/ostd/utils/Signals.hpp @@ -45,8 +45,12 @@ namespace ostd inline static constexpr uint32_t OnGuiEvent = 0x2001; + inline static constexpr uint32_t BeforeSDLShutdown = 0x3001; + inline static constexpr uint32_t WindowResized = 0x1001; inline static constexpr uint32_t WindowClosed = 0x1002; + inline static constexpr uint32_t WindowFocused = 0x1003; + inline static constexpr uint32_t WindowLostFocus = 0x1004; /*********************/ inline static constexpr uint32_t CustomSignalBase = 0xFF0000; @@ -105,7 +109,10 @@ namespace ostd inline static std::vector m_textEnteredRecievers; inline static std::vector m_windowResizedRecievers; inline static std::vector m_windowClosedRecievers; + inline static std::vector m_windowFocusedRecievers; + inline static std::vector m_windowLostFocusRecievers; inline static std::vector m_onGuiEventRecievers; + inline static std::vector m_beforeSDLShutdownRecievers; /************************************/ inline static constexpr uint16_t __SIGNAL_BUFFER_START_SIZE { 128 }; @@ -113,17 +120,4 @@ namespace ostd inline static bool m_initialized { false }; }; - - class WindowSizeObj : public BaseObject - { - public: - const int32_t width; - const int32_t height; - - inline WindowSizeObj(int32_t _w, int32_t _h) : width(_w), height(_h) - { - setTypeName("ox::WindowSizeObj"); - validate(); - } - }; } diff --git a/src/test.cpp b/src/test.cpp deleted file mode 100644 index 6d0c520..0000000 --- a/src/test.cpp +++ /dev/null @@ -1,190 +0,0 @@ -/* - OmniaFramework - A collection of useful functionality - Copyright (C) 2025 OmniaX-Dev - - This file is part of OmniaFramework. - - OmniaFramework is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OmniaFramework is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with OmniaFramework. If not, see . -*/ - -// #include -// #include -// #include -// #include - -#include "Image.hpp" -#include "utils/Hash.hpp" -#include -#include -#include - -ostd::ConsoleOutputHandler out; - -class Window : public ogfx::WindowBase -{ - public: - inline Window(void) : m_sigHandler(m_textInput, *this) { } - inline void onInitialize(void) override - { - enableSignals(); - connectSignal(ostd::tBuiltinSignals::KeyReleased); - connectSignal(ogfx::gui::RawTextInput::actionEventSignalID); - - m_gfx.init(*this); - m_gfx.setFont("res/ttf/Courier Prime.ttf"); - - float w = getWindowWidth(); - float h = 40.0f; - m_textInput.create({ 0.0f, (float)(getWindowHeight() - h) }, { w, h }, "MainInputTXT"); - m_textInput.setEventListener(m_sigHandler); - // m_textInput.setCharacterFilter(m_numCharFilter); - m_textInput.getTheme().extraPaddingTop = 3; - - m_testImg.loadFromFile("res/test.png", m_gfx); - out.p("Image loaded: ").p(STR_BOOL(m_testImg.isLoaded())).nl(); - out.p(" ").p(m_testImg.getSize().x).nl(); - } - - inline void handleSignal(ostd::tSignal& signal) override - { - if (signal.ID == ostd::tBuiltinSignals::KeyReleased) - { - auto& evtData = (ogfx::KeyEventData&)signal.userData; - if (evtData.keyCode == SDLK_ESCAPE) - close(); - } - if (signal.ID == ogfx::gui::RawTextInput::actionEventSignalID) - { - auto& data = (ogfx::gui::RawTextInput::ActionEventData&)signal.userData; - if (data.senderName != "MainInputTXT") - return; - if (data.eventType == ogfx::gui::RawTextInput::eActionEventType::Enter) - { - out.fg(ostd::ConsoleColors::Green).p(data.sender.getText()).reset().nl(); - data.sender.setText(""); - } - else if (data.eventType == ogfx::gui::RawTextInput::eActionEventType::Tab) - { - out.fg(ostd::ConsoleColors::Red).p("TAB").reset().nl(); - data.sender.appendText("TAB"); - } - } - } - - inline void onRender(void) override - { - m_textInput.render(m_gfx); - // m_gfx.drawImage(m_testImg, { 0, 0 });ยด - } - - inline void onFixedUpdate(double frameTime_s) override - { - m_textInput.fixedUpdate(); - } - - inline void onUpdate(void) override - { - m_textInput.update(); - } - - private: - ogfx::gui::RawTextInput m_textInput; - ogfx::BasicRenderer2D m_gfx; - ogfx::gui::RawTextInputEventListener m_sigHandler; - ogfx::gui::RawTextInputNumberCharacterFilter m_numCharFilter; - - ogfx::Image m_testImg; -}; - -// void test2(const std::string& str) {} -// void test3(const ostd::String& str) {} -// void test4(const char* str) {} - -int main(int argc, char** argv) -{ - out.p(STR_BOOL(ostd::Hash::md5("") == "d41d8cd98f00b204e9800998ecf8427e")).nl(); - out.p(STR_BOOL(ostd::Hash::md5("abc") == "900150983cd24fb0d6963f7d28e17f72")).nl(); - out.p(STR_BOOL(ostd::Hash::md5("message digest") == "f96b697d7cb7938d525a2f31aaf161d0")).nl(); - - Window window; - window.initialize(1280, 720, "OmniaFramework - Test Window"); - window.setClearColor({ 0, 2 , 15 }); - - while (window.isRunning()) - { - window.update(); - } - - - // out.fg(ostd::ConsoleColors::Red).p("Hello World!!").reset().nl(); - - // ostd::String str1, str2 = "Hello"; - // bool b = str1 == str2; - // const ostd::String str3 = "CIAO"; - // b = str2 == str1; - // b = str3 == "CICCIO"; - // // b = "ciao" == str2; - // str2 = str3; - // std::string str = "cc"; - // str1 = str; - // test2(str1); - // test3(str); - // str1 = str2 + str; - // str1 = str2 + "str"; - // str1 = str2 + str3; - // str1 = str2 + str1; - // test4(str1); - // test4(str3); - - // str1 += "ciao"; - // str1 += str; - // str1 += str1; - // str1 += str3; - // str1 += 'c'; - - // OX_FATAL(str2); - - // ostd::RegexRichString rgxrstr("Hello World"); - // rgxrstr.fg("Hello", "Blue"); - // std::cout << rgxrstr << "\n"; - - // out.nl().nl(); - // ostd::String test_str = "Hello World, my love"; - // ostd::String test_str_2 = "HEELO"; - // ostd::String test_str_3 = "0123456789"; - // out.p("==========\n"); - // test_str.fixedLength(10, ' ', ".........."); - // test_str_2.fixedLength(10); - // test_str_3.fixedLength(10); - // out.p(test_str).p("|").nl(); - // out.p(test_str_2).p("|").nl(); - // out.p(test_str_3).p("|").nl(); - - // ostd::KeyboardController keyboard; - // keyboard.disableCommandBuffer(); - - // out.p("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"); - // out.p("HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH"); - // out.p("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); - // out.p(" "); - // out.p("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"); - - // ostd::eKeys k = ostd::eKeys::NoKeyPressed; - // do - // { - // k = keyboard.waitForKeyPress(); - // } while (k != ostd::eKeys::Escape); - - return 0; -} diff --git a/src/test/GraphicsWindowTest.cpp b/src/test/GraphicsWindowTest.cpp new file mode 100644 index 0000000..0f083af --- /dev/null +++ b/src/test/GraphicsWindowTest.cpp @@ -0,0 +1,103 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + +#include + +ostd::ConsoleOutputHandler out; + +class Window : public ogfx::GraphicsWindow +{ + public: + inline Window(void) : m_sigHandler(m_textInput, *this) { } + inline void onInitialize(void) override + { + connectSignal(ogfx::gui::RawTextInput::actionEventSignalID); + + m_gfx.init(*this); + m_gfx.setFont("res/ttf/Courier Prime.ttf"); + + float w = getWindowWidth(); + float h = 40.0f; + m_textInput.create({ 0.0f, (float)(getWindowHeight() - h) }, { w, h }, "MainInputTXT"); + m_textInput.setEventListener(m_sigHandler); + // m_textInput.setCharacterFilter(m_numCharFilter); + m_textInput.getTheme().extraPaddingTop = 3; + } + + inline void handleSignal(ostd::tSignal& signal) override + { + if (signal.ID == ostd::tBuiltinSignals::KeyReleased) + { + auto& evtData = (ogfx::KeyEventData&)signal.userData; + if (evtData.keyCode == SDLK_ESCAPE) + close(); + } + if (signal.ID == ogfx::gui::RawTextInput::actionEventSignalID) + { + auto& data = (ogfx::gui::RawTextInput::ActionEventData&)signal.userData; + if (data.senderName != "MainInputTXT") + return; + if (data.eventType == ogfx::gui::RawTextInput::eActionEventType::Enter) + { + out.fg(ostd::ConsoleColors::Green).p(data.sender.getText()).reset().nl(); + data.sender.setText(""); + } + else if (data.eventType == ogfx::gui::RawTextInput::eActionEventType::Tab) + { + out.fg(ostd::ConsoleColors::Red).p("TAB").reset().nl(); + data.sender.appendText("TAB"); + } + } + } + + inline void onRender(void) override + { + m_textInput.render(m_gfx); + } + + inline void onFixedUpdate(double frameTime_s) override + { + m_textInput.fixedUpdate(); + } + + inline void onUpdate(void) override + { + m_textInput.update(); + } + + private: + ogfx::gui::RawTextInput m_textInput; + ogfx::BasicRenderer2D m_gfx; + ogfx::gui::RawTextInputEventListener m_sigHandler; + ogfx::gui::RawTextInputNumberCharacterFilter m_numCharFilter; +}; + +int main(int argc, char** argv) +{ + Window window; + window.initialize(800, 600, "OmniaFramework - Test Window"); + window.setClearColor({ 0, 2 , 15 }); + + while (window.isRunning()) + { + window.mainLoop(); + } + return 0; +} diff --git a/src/test/GuiTest.cpp b/src/test/GuiTest.cpp new file mode 100644 index 0000000..1c9f929 --- /dev/null +++ b/src/test/GuiTest.cpp @@ -0,0 +1,98 @@ +/* + OmniaFramework - A collection of useful functionality + Copyright (C) 2025 OmniaX-Dev + + This file is part of OmniaFramework. + + OmniaFramework is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OmniaFramework is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OmniaFramework. If not, see . +*/ + + + + +/* + * Label + * Button + * Panel / Container + * Checkbox + * Radio Button (Group) + * Text Input + * Horizontal Slider + * Image / Icon + * ScrollView + * ListBox + * ComboBox + * TreeView + * Save/Open File Dialogs (and folder dialogs) + * Tab Panel + */ + +#include + +ostd::ConsoleOutputHandler out; + +class Window : public ogfx::gui::Window +{ + public: + inline Window(void) { } + inline void onInitialize(void) override + { + m_label1.setPosition(100, 200); + m_label1.setText("Hello World!"); + m_label1.setMouseMovedCallback([&](const ogfx::gui::Event& event) -> void { + m_label1.applyThemeValue(m_theme, "label.backgroundColor", ostd::Colors::DarkBlue, false); + }); + addWidget(m_label1); + + m_label2.setPosition(100, 400); + m_label2.setText("Ciccia Bella!"); + addWidget(m_label2); + + m_theme.set("label.textColor", ostd::Colors::White); + m_theme.set("label.backgroundColor", ostd::Colors::DarkRed); + m_theme.set("label.showBackground", true); + m_theme.set("label.borderRadius", 0); + setTheme(m_theme); + } + + inline void onSignal(ostd::tSignal& signal) override + { + if (signal.ID == ostd::tBuiltinSignals::KeyReleased) + { + auto& evtData = (ogfx::KeyEventData&)signal.userData; + if (evtData.keyCode == SDLK_ESCAPE) + close(); + } + } + + void onRedraw(ogfx::BasicRenderer2D& gfx) override + { + // wout().fg(ostd::Color { 255, 0, 0 }).p("Hello ").fg(ostd::Color { 0, 0, 255 }).p("World"); + } + + private: + ogfx::gui::widgets::Label m_label1 { *this }; + ogfx::gui::widgets::Label m_label2 { *this }; + ogfx::gui::Theme m_theme = ogfx::gui::Theme(); +}; + +int main(int argc, char** argv) +{ + ostd::initialize(); + Window window; + window.initialize(800, 600, "OmniaFramework - Test Window"); + window.setClearColor({ 0, 0, 0 }); + window.mainLoop(); + return 0; +}